// { dg-do assemble  }
// GROUPS passed rtti
// Negative testcase for decls in conditions.

int main()
{
  float i;
  
  if (int i = 1)		// { dg-error "" "" { xfail *-*-* } } , 
    {
      char i;			// { dg-error "" "" { xfail *-*-* } } , 
      char j;
    }
  else
    {
      short i;			// { dg-error "" "" { xfail *-*-* } } , 
      char j;
    }

  while (int i = 0)		// { dg-error "previously" }
    {
      int i;			// { dg-error "redeclaration" }
    }

  for (; int i = 0; )		// { dg-error "previously" }
    {
      int i;			// { dg-error "redeclaration" }
    }

  switch (int i = 0)		// { dg-error "" "" { xfail *-*-* } } 
    {
    default:
      int i;			// { dg-error "" "" { xfail *-*-* } } 
    }

  if (struct A { operator int () { return 1; } } *foo = new A) // { dg-error "defined" } 
    ;

  A bar;			// { dg-error "not declared" "decl" } 
  // { dg-error "expected" "exp" { target *-*-* } 39 }
  
  if (enum A { one, two, three } foo = one) // { dg-error "defined" "def" } 
  // { dg-error "expected" "expected" { target *-*-* } 42 }
    ;

  struct B { operator int () { return 2; } };

  if (struct B * foo = new B)
    ;

  if (int f () = 1)		// { dg-warning "extern" "extern" } 
  // { dg-error "is initialized like a variable" "var" { target *-*-* } 51 }
    ;
  
  if (int a[2] = {1, 2})	// { dg-error "extended init" } 
    ;

}
