/* Copyright (C) 2001 Free Software Foundation, Inc.  */

/* { dg-do compile } */
/* { dg-options -Wshadow } */

/* Source: Neil Booth, 3 Nov 2001, and PR 16, 713.  -Wshadow was
   giving a bunch of warnings we didn't want, and wasn't giving the
   location of the shadowed variable.  */

struct status			// { dg-bogus "shadowed declaration" }
{
  int member;
  void foo2 ();

  inline static int foo3 (int member) // { dg-bogus "shadows" }
  {
    return member;
  }
};

int decl1;			// { dg-warning "shadowed declaration" }
int decl2;			// { dg-warning "shadowed declaration" }
void foo (struct status &status,// { dg-bogus "shadows a global decl" }
	  double decl1)
{				// { dg-warning "shadows a global decl" }
}

void foo1 (int d)
{
  double d;			// { dg-error "shadows a parameter" }
}

// { dg-error "In member function" "ignored" { target *-*-* } 0 }
void status::foo2 ()
{
  int member;			// { dg-warning "shadows a member" }
  int decl2;			// { dg-warning "shadows a global decl" }
  int local;			// { dg-warning "shadowed declaration" }
  {
    int local;			// { dg-warning "shadows a previous local" }
  }
}
