diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/parm-incomplete-1.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/parm-incomplete-1.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/parm-incomplete-1.c b/gcc/testsuite/gcc.dg/parm-incomplete-1.c new file mode 100644 index 000000000..83dca8253 --- /dev/null +++ b/gcc/testsuite/gcc.dg/parm-incomplete-1.c @@ -0,0 +1,28 @@ +/* Test warnings and errors for incomplete parameter types. Should + not be warned for in declarations that are not definitions: bug + 17881. Void types may be a special case, especially for unnamed + parameters and when qualified or with a storage class specifier; + see C90 6.5.4.3, DR#017 Q14, C90 TC1, DR#157, C99 J.2 (referencing + C99 6.7.5.3); the precise rules are unclear. */ +/* Origin: Joseph Myers <jsm@polyomino.org.uk> */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +struct s; +void f (struct s); +void (*g)(struct s); +struct t { void (*p)(struct s); }; + +struct s { int b; }; +void h (struct s x) { } + +void j(struct t2); /* { dg-warning "'struct t2' declared inside parameter list" } */ +/* { dg-warning "its scope is only" "explanation" { target *-*-* } 19 } */ + +union u; + +void v(union u x) { } /* { dg-error "parameter 1 \\('x'\\) has incomplete type" } */ + +void p(void x); /* { dg-warning "parameter 1 \\('x'\\) has void type" } */ + +void q(const void x); /* { dg-warning "parameter 1 \\('x'\\) has void type" } */ |