xref: /petsc/src/sys/tests/linter/testReferences.c (revision 447bcd8fae0acafb34f76e22d0a980ee3af1ea6c)
1*447bcd8fSJacob Faibussowitsch /* for access to private viewer members */
2064a246eSJacob Faibussowitsch #include <petsc/private/viewerimpl.h>
3064a246eSJacob Faibussowitsch 
46aad120cSJose E. Roman /* forward declare */
5064a246eSJacob Faibussowitsch void extractFunc(PetscViewer, void **);
6064a246eSJacob Faibussowitsch 
7*447bcd8fSJacob Faibussowitsch PetscErrorCode testOutOfLineReference(PetscViewer v, PetscViewer v2)
8d71ae5a4SJacob Faibussowitsch {
9064a246eSJacob Faibussowitsch   /* linter should be able to connect all of these to v */
10064a246eSJacob Faibussowitsch   void  *foo  = v->data, *bar, *baz, *blop;
11064a246eSJacob Faibussowitsch   void **blip = &v->data;
12064a246eSJacob Faibussowitsch 
13064a246eSJacob Faibussowitsch   bar  = v->data;
14064a246eSJacob Faibussowitsch   blop = blip[0];
15064a246eSJacob Faibussowitsch   extractFunc(v, &baz);
16064a246eSJacob Faibussowitsch 
17064a246eSJacob Faibussowitsch   /* incorrect */
18064a246eSJacob Faibussowitsch   PetscValidPointer(foo, -1);
19064a246eSJacob Faibussowitsch   PetscValidPointer(bar, -2);
20064a246eSJacob Faibussowitsch   PetscValidPointer(baz, -3);
21064a246eSJacob Faibussowitsch   PetscValidPointer((void *)v->data, -4);
22064a246eSJacob Faibussowitsch   PetscValidPointer(*blip, -5);
23064a246eSJacob Faibussowitsch   PetscValidPointer(blop, -6);
24064a246eSJacob Faibussowitsch 
25064a246eSJacob Faibussowitsch   /* correct */
26064a246eSJacob Faibussowitsch   PetscValidPointer(foo, 1);
27064a246eSJacob Faibussowitsch   PetscValidPointer(bar, 1);
28064a246eSJacob Faibussowitsch   PetscValidPointer(baz, 1);
29064a246eSJacob Faibussowitsch   PetscValidPointer((void *)v->data, 1);
30064a246eSJacob Faibussowitsch   PetscValidPointer(*blip, 1);
31064a246eSJacob Faibussowitsch   PetscValidPointer(blop, 1);
32*447bcd8fSJacob Faibussowitsch   return 0;
33064a246eSJacob Faibussowitsch }
34