annotate gcc/testsuite/gcc.dg/c99-array-lval-8.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Test for non-lvalue arrays: test that qualifiers on non-lvalues
kono
parents:
diff changeset
2 containing arrays do not remain when those arrays decay to
kono
parents:
diff changeset
3 pointers. PR 35235. */
kono
parents:
diff changeset
4 /* { dg-do compile } */
kono
parents:
diff changeset
5 /* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 int a;
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 void
kono
parents:
diff changeset
10 f (void)
kono
parents:
diff changeset
11 {
kono
parents:
diff changeset
12 const struct {
kono
parents:
diff changeset
13 int a[1];
kono
parents:
diff changeset
14 } s;
kono
parents:
diff changeset
15 int *p1 = s.a; /* { dg-error "qualifier" } */
kono
parents:
diff changeset
16 int *p2 = (a ? s : s).a;
kono
parents:
diff changeset
17 /* In this case, the qualifier is properly on the array element type
kono
parents:
diff changeset
18 not on the rvalue structure and so is not discarded. */
kono
parents:
diff changeset
19 struct {
kono
parents:
diff changeset
20 const int a[1];
kono
parents:
diff changeset
21 } t;
kono
parents:
diff changeset
22 int *p3 = t.a; /* { dg-error "qualifier" } */
kono
parents:
diff changeset
23 int *p4 = (a ? t : t).a; /* { dg-error "qualifier" } */
kono
parents:
diff changeset
24 /* The issue could also lead to code being wrongly accepted. */
kono
parents:
diff changeset
25 const struct {
kono
parents:
diff changeset
26 int a[1][1];
kono
parents:
diff changeset
27 } u;
kono
parents:
diff changeset
28 const int (*p5)[1] = u.a;
kono
parents:
diff changeset
29 const int (*p6)[1] = (a ? u : u).a; /* { dg-error "pointer" } */
kono
parents:
diff changeset
30 }