| /* { dg-do compile } */ |
| /* { dg-options "-Wc++-compat" } */ |
| |
| struct s1 |
| { |
| enum e1 /* { dg-message "note: enum type defined here" } */ |
| { |
| A = sizeof (struct s2 { int i; }), /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| B |
| } f1; |
| }; |
| struct s2 v1; /* Don't issue another warning about s2. */ |
| enum e1 v2; /* { dg-warning "not visible in C\[+\]\[+\]" } */ |
| |
| enum e2 |
| { |
| C = sizeof (struct s3 { int i; }), /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| D = __alignof__ (struct s4 { int i; }), /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| E |
| }; |
| |
| struct s3 v3; |
| int v4 = C; |
| |
| enum e3 |
| { |
| F = sizeof (struct t3), /* { dg-bogus "invalid in C\[+\]\[+\]" } */ |
| /* { dg-error "invalid application of 'sizeof'" "" { target *-*-* } .-1 } */ |
| G = __alignof__ (struct t4), /* { dg-bogus "invalid in C\[+\]\[+\]" } */ |
| /* { dg-error "invalid application of '__alignof__'" "" { target *-*-* } .-1 } */ |
| H |
| }; |
| |
| __typeof__ (struct s5 { int i; }) v5; /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| __typeof__ (struct t5) w5; /* { dg-bogus "invalid in C\[+\]\[+\]" } */ |
| /* { dg-error "storage size of 'w5' isn't known" "" { target *-*-* } .-1 } */ |
| |
| int |
| f1 (struct s1 *p) |
| { |
| return ((struct s6 { int j; } *) p)->j; /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| } |
| |
| void * |
| f2 (struct s1 *p) |
| { |
| return ((struct t6 *) p); /* { dg-bogus "invalid in C\[+\]\[+\]" } */ |
| } |
| |
| int |
| f3 (struct s1 *p) |
| { |
| return (__extension__ (struct s7 { int j; } *)p)->j; |
| } |
| |
| int |
| f4 () |
| { |
| return (struct s8 { int i; }) { 0 }.i; /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| } |
| |
| void * |
| f5 () |
| { |
| return &((struct t8) { }); /* { dg-warning "invalid in C\[+\]\[+\]" } */ |
| /* { dg-error "invalid use of undefined type" "" { target *-*-* } .-1 } */ |
| } |