blob: ea60126fe4408616a4e30e616bfda5ab6e049a8a [file] [log] [blame]
/* Test declaration specifiers. Test checks on storage class
specifiers and function specifiers in empty declarations. */
/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
/* { dg-do compile } */
/* { dg-options "" } */
/* The constraints on storage class specifiers and function specifiers
must be met for empty declarations where they are useless. Thus
there may be only one storage class specifier (C90 6.5.1, C99
6.7.1#2) and "inline" must not be used because the declaration is
not that of an identifier for a function (C99 6.7.4#1), and
"register" and "auto" must not be used at file scope (C90 6.7, C99
6.9#2). */
static static struct s; /* { dg-error "error: duplicate 'static'" } */
/* { dg-warning "warning: useless storage class specifier in empty declaration" "static static" { target *-*-* } 15 } */
static extern struct t; /* { dg-error "error: multiple storage classes in declaration specifiers" } */
/* { dg-warning "warning: useless storage class specifier in empty declaration" "static extern" { target *-*-* } 18 } */
inline union u; /* { dg-error "error: 'inline' in empty declaration" } */
auto struct v; /* { dg-error "error: 'auto' in file-scope empty declaration" } */
register struct w; /* { dg-error "error: 'register' in file-scope empty declaration" } */
void
f (void)
{
auto union p; /* { dg-warning "warning: useless storage class specifier in empty declaration" } */
register struct q; /* { dg-warning "warning: useless storage class specifier in empty declaration" } */
}