// g++ 1.36.1 bug 900107_01

// Unlike GCC and Cfront 2.0, the g++ 1.36.1 compiler gives struct, union,
// and class declarations which are nested within blocks file scope.

// Cfront 2.0 passes this test.

// keywords: block scope, file scope, nested types, tagged types

class c1 { int c1_member1; };
struct s1 { int s1_member1; };
union u1 { int u1_member1; };
enum e1 { e1_val1 };
typedef int t1;

void foo ()
{
  class c1 {			// gets bogus error
    int c1_member1;
  } c1_local_object_0;

  struct s1 {			// gets bogus error
    int s1_member1;
  } s1_local_object_0;

  union u1 {			// gets bogus error
    int u1_member1;
  } u1_local_object_0;

  enum e1 {		// OK using g++ or GCC, but mishandled by Cfront 2.0.
    e1_value1
  } e1_local_object_0;

  typedef int t1;		// OK
}

int main () { return 0; }
