xref: /petsc/src/sys/tests/linter/testReferences.c (revision 9c5460f9064ca60dd71a234a1f6faf93e7a6b0c9)
1447bcd8fSJacob Faibussowitsch /* for access to private viewer members */
2064a246eSJacob Faibussowitsch #include <petsc/private/viewerimpl.h>
3064a246eSJacob Faibussowitsch 
46aad120cSJose E. Roman /* forward declare */
5*08bd1863SJacob Faibussowitsch extern void extractFunc(PetscViewer, void **);
6064a246eSJacob Faibussowitsch 
testOutOfLineReference(PetscViewer v,PetscViewer v2)7447bcd8fSJacob 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 */
184f572ea9SToby Isaac   PetscAssertPointer(foo, -1);
194f572ea9SToby Isaac   PetscAssertPointer(bar, -2);
204f572ea9SToby Isaac   PetscAssertPointer(baz, -3);
214f572ea9SToby Isaac   PetscAssertPointer((void *)v->data, -4);
224f572ea9SToby Isaac   PetscAssertPointer(*blip, -5);
234f572ea9SToby Isaac   PetscAssertPointer(blop, -6);
24064a246eSJacob Faibussowitsch 
25064a246eSJacob Faibussowitsch   /* correct */
264f572ea9SToby Isaac   PetscAssertPointer(foo, 1);
274f572ea9SToby Isaac   PetscAssertPointer(bar, 1);
284f572ea9SToby Isaac   PetscAssertPointer(baz, 1);
294f572ea9SToby Isaac   PetscAssertPointer((void *)v->data, 1);
304f572ea9SToby Isaac   PetscAssertPointer(*blip, 1);
314f572ea9SToby Isaac   PetscAssertPointer(blop, 1);
32447bcd8fSJacob Faibussowitsch   return 0;
33064a246eSJacob Faibussowitsch }
34