/* { dg-do compile } */ /* { dg-options "-Wc++-compat" } */ struct s1 { int f; }; typedef int s2; void f1 () { typedef int s1; struct s2 { int f; }; } struct s3 { int f; }; typedef struct s3 s3; typedef struct s4 s4; struct s4 { int f; }; struct s5 { int f; }; /* { dg-message "note: originally defined here" } */ typedef int s5; /* { dg-warning "invalid in C\[+\]\[+\]" } */ typedef int s6; /* { dg-message "note: originally defined here" } */ struct s6 { int f; }; /* { dg-warning "invalid in C\[+\]\[+\]" } */ void f2 () { struct s7 { int f; }; /* { dg-message "note: originally defined here" } */ typedef int s7; /* { dg-warning "invalid in C\[+\]\[+\]" } */ typedef int s8; /* { dg-message "note: originally defined here" } */ struct s8 { int f; }; /* { dg-warning "invalid in C\[+\]\[+\]" } */ struct s9 { int f; }; { typedef int s9; } typedef int s10; { struct s10 { int f; }; } } enum e1 { A }; typedef int e2; void f3 () { typedef int e1; enum e2 { B }; } enum e3 { C }; typedef enum e3 e3; enum e5 { E }; /* { dg-message "note: originally defined here" } */ typedef int e5; /* { dg-warning "invalid in C\[+\]\[+\]" } */ typedef int e6; /* { dg-message "note: originally defined here" } */ enum e6 { F }; /* { dg-warning "invalid in C\[+\]\[+\]" } */ void f4 () { enum e7 { G }; /* { dg-message "note: originally defined here" } */ typedef int e7; /* { dg-warning "invalid in C\[+\]\[+\]" } */ typedef int e8; /* { dg-message "note: originally defined here" } */ enum e8 { H }; /* { dg-warning "invalid in C\[+\]\[+\]" } */ enum e9 { I }; { typedef int e9; } typedef int e10; { enum e10 { J }; } }