/* Test diagnostics for array references. */
|
/* Test diagnostics for array references. */
|
/* Origin: Joseph Myers <joseph@codesourcery.com> */
|
/* Origin: Joseph Myers <joseph@codesourcery.com> */
|
/* { dg-do compile } */
|
/* { dg-do compile } */
|
/* { dg-options "-std=gnu89" } */
|
/* { dg-options "-std=gnu89" } */
|
|
|
struct s { char c[1]; };
|
struct s { char c[1]; };
|
struct s f (void);
|
struct s f (void);
|
_Bool b;
|
_Bool b;
|
char c;
|
char c;
|
enum e { E } e;
|
enum e { E } e;
|
extern int a[];
|
extern int a[];
|
int *p;
|
int *p;
|
void *pv;
|
void *pv;
|
void (*fp)(void);
|
void (*fp)(void);
|
struct si *sip;
|
struct si *sip;
|
|
|
void
|
void
|
g (void)
|
g (void)
|
{
|
{
|
a[b];
|
a[b];
|
a[c];
|
a[c];
|
a[e];
|
a[e];
|
p[b];
|
p[b];
|
p[c];
|
p[c];
|
p[e];
|
p[e];
|
b[a];
|
b[a];
|
c[a];
|
c[a];
|
e[a];
|
e[a];
|
b[p];
|
b[p];
|
c[p];
|
c[p];
|
e[p];
|
e[p];
|
/* These two should be treated the same. In particular, a "neither
|
/* These two should be treated the same. In particular, a "neither
|
array nor pointer" bogus warning used to be given for the
|
array nor pointer" bogus warning used to be given for the
|
second. */
|
second. */
|
f().c[0];
|
f().c[0];
|
0[f().c];
|
0[f().c];
|
/* Various invalid cases. */
|
/* Various invalid cases. */
|
c[c]; /* { dg-error "error: subscripted value is neither array nor pointer" } */
|
c[c]; /* { dg-error "error: subscripted value is neither array nor pointer" } */
|
p[1.0]; /* { dg-error "error: array subscript is not an integer" } */
|
p[1.0]; /* { dg-error "error: array subscript is not an integer" } */
|
1.0[a]; /* { dg-error "error: array subscript is not an integer" } */
|
1.0[a]; /* { dg-error "error: array subscript is not an integer" } */
|
fp[0]; /* { dg-error "error: subscripted value is pointer to function" } */
|
fp[0]; /* { dg-error "error: subscripted value is pointer to function" } */
|
0[fp]; /* { dg-error "error: subscripted value is pointer to function" } */
|
0[fp]; /* { dg-error "error: subscripted value is pointer to function" } */
|
pv[0]; /* { dg-warning "warning: dereferencing 'void \\*' pointer" } */
|
pv[0]; /* { dg-warning "warning: dereferencing 'void \\*' pointer" } */
|
0[pv]; /* { dg-warning "warning: dereferencing 'void \\*' pointer" } */
|
0[pv]; /* { dg-warning "warning: dereferencing 'void \\*' pointer" } */
|
sip[0]; /* { dg-error "error: invalid use of undefined type 'struct si'" } */
|
sip[0]; /* { dg-error "error: invalid use of undefined type 'struct si'" } */
|
/* { dg-error "error: dereferencing pointer to incomplete type" "incomplete" { target *-*-* } 45 } */
|
/* { dg-error "error: dereferencing pointer to incomplete type" "incomplete" { target *-*-* } 45 } */
|
0[sip]; /* { dg-error "error: invalid use of undefined type 'struct si'" } */
|
0[sip]; /* { dg-error "error: invalid use of undefined type 'struct si'" } */
|
/* { dg-error "error: dereferencing pointer to incomplete type" "incomplete" { target *-*-* } 47 } */
|
/* { dg-error "error: dereferencing pointer to incomplete type" "incomplete" { target *-*-* } 47 } */
|
}
|
}
|
|
|