xref: /petsc/src/sys/tests/linter/testReferences.c (revision d71ae5a4db6382e7f06317b8d368875286fe9008)
1064a246eSJacob Faibussowitsch /* for access to private vec members */
2064a246eSJacob Faibussowitsch #include <petsc/private/viewerimpl.h>
3064a246eSJacob Faibussowitsch 
46aad120cSJose E. Roman /* forward declare */
5064a246eSJacob Faibussowitsch void extractFunc(PetscViewer, void **);
6064a246eSJacob Faibussowitsch 
7*d71ae5a4SJacob Faibussowitsch void testOutOfLineReference(PetscViewer v, PetscViewer v2)
8*d71ae5a4SJacob 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);
32064a246eSJacob Faibussowitsch   return;
33064a246eSJacob Faibussowitsch }
34