31 lines
859 B
C
31 lines
859 B
C
/* Test for non-lvalue arrays: test that qualifiers on non-lvalues
|
|
containing arrays do not remain when those arrays decay to
|
|
pointers. PR 35235. */
|
|
/* { dg-do compile } */
|
|
/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
|
|
|
|
int a;
|
|
|
|
void
|
|
f (void)
|
|
{
|
|
const struct {
|
|
int a[1];
|
|
} s;
|
|
int *p1 = s.a; /* { dg-error "qualifier" } */
|
|
int *p2 = (a ? s : s).a;
|
|
/* In this case, the qualifier is properly on the array element type
|
|
not on the rvalue structure and so is not discarded. */
|
|
struct {
|
|
const int a[1];
|
|
} t;
|
|
int *p3 = t.a; /* { dg-error "qualifier" } */
|
|
int *p4 = (a ? t : t).a; /* { dg-error "qualifier" } */
|
|
/* The issue could also lead to code being wrongly accepted. */
|
|
const struct {
|
|
int a[1][1];
|
|
} u;
|
|
const int (*p5)[1] = u.a;
|
|
const int (*p6)[1] = (a ? u : u).a; /* { dg-error "pointer" } */
|
|
}
|