1 /* Test diagnostics for arithmetic on void and function pointers.
2    Test with -pedantic.  */
3 /* Origin: Joseph Myers <joseph@codesourcery.com> */
4 /* { dg-do compile } */
5 /* { dg-options "-pedantic" } */
6 
7 void *p;
8 void (*f)(void);
9 
10 void
g(void)11 g (void)
12 {
13   p + 0; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
14   p + 1; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
15   0 + p; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
16   1 + p; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
17   p - 0; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
18   p - 1; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
19   p += 0; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
20   p += 1; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
21   p -= 0; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
22   p -= 1; /* { dg-warning "pointer of type 'void \\*' used in arithmetic" } */
23   f + 0; /* { dg-warning "pointer to a function used in arithmetic" } */
24   f + 1; /* { dg-warning "pointer to a function used in arithmetic" } */
25   0 + f; /* { dg-warning "pointer to a function used in arithmetic" } */
26   1 + f; /* { dg-warning "pointer to a function used in arithmetic" } */
27   f - 0; /* { dg-warning "pointer to a function used in arithmetic" } */
28   f - 1; /* { dg-warning "pointer to a function used in arithmetic" } */
29   f += 0; /* { dg-warning "pointer to a function used in arithmetic" } */
30   f += 1; /* { dg-warning "pointer to a function used in arithmetic" } */
31   f -= 0; /* { dg-warning "pointer to a function used in arithmetic" } */
32   f -= 1; /* { dg-warning "pointer to a function used in arithmetic" } */
33   p[0]; /* { dg-warning "dereferencing 'void \\*' pointer" } */
34   /* { dg-warning "pointer of type 'void \\*' used in arithmetic" "array 1" { target *-*-* } .-1 } */
35   0[p]; /* { dg-warning "dereferencing 'void \\*' pointer" } */
36   /* { dg-warning "pointer of type 'void \\*' used in arithmetic" "array 1" { target *-*-* } .-1 } */
37   f[0]; /* { dg-error "subscripted value is pointer to function" } */
38   0[f]; /* { dg-error "subscripted value is pointer to function" } */
39   p - p; /* { dg-warning "pointer of type 'void \\*' used in subtraction" } */
40   f - f; /* { dg-warning "pointer to a function used in subtraction" } */
41 }
42