/* Static declarations followed by extern are OK even if the extern
   declaration is initialized.  Bug 15360 from hozelda at
   yahoo.com.  */
/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
/* { dg-do compile } */
/* { dg-options "" } */

static int a;
static int a;
extern int a;
static int a;

static int b;
extern int b = 1; /* { dg-warning "initialized and declared" "extern init warning" } */
static int b;
static int b;

static int c; /* { dg-error "previous declaration" "" } */
int c; /* { dg-error "non-static" "correct error" } */

static int d; /* { dg-error "previous declaration" "" } */
int d = 1; /* { dg-error "non-static" "correct error" } */

void foo (void) { extern int e = 1; } /* { dg-error "has both" "extern init in function" } */
