| // RUN: %clang_cc1 -fsyntax-only -verify %s | 
 | struct X { // expected-note{{previous definition is here}} | 
 |   struct X { } x; // expected-error{{nested redefinition of 'X'}} | 
 | };  | 
 |  | 
 | struct Y { }; | 
 | void f(void) { | 
 |   struct Y { }; // okay: this is a different Y | 
 | } | 
 |  | 
 | struct T; | 
 | struct Z { | 
 |   struct T { int x; } t; | 
 |   struct U { int x; } u; | 
 | }; | 
 |  | 
 | void f2(void) { | 
 |   struct T t; | 
 |   struct U u; | 
 | } | 
 |  | 
 | void f3(void) { | 
 |   struct G { // expected-note{{previous definition is here}} | 
 |     struct G {}; // expected-error{{nested redefinition of 'G'}} | 
 |   }; | 
 | } | 
 |  | 
 | void f4(void) { | 
 |   struct G { // expected-note 2{{previous definition is here}} | 
 |     struct G {}; // expected-error{{nested redefinition of 'G'}} | 
 |   }; | 
 |  | 
 |   struct G {}; // expected-error{{redefinition of 'G'}} | 
 | } |