|  | @import redecl_merge_top; | 
|  |  | 
|  | @class A; | 
|  |  | 
|  | @class A; | 
|  |  | 
|  | @interface B | 
|  | + (B*) create_a_B; | 
|  | @end | 
|  |  | 
|  | @class A; | 
|  |  | 
|  | @protocol P1; | 
|  | @protocol P2 | 
|  | - (void)protoMethod2; | 
|  | @end | 
|  |  | 
|  | struct S1; | 
|  | struct S2 { | 
|  | int field; | 
|  | }; | 
|  |  | 
|  | struct S1 *produce_S1(void); | 
|  | void consume_S2(struct S2*); | 
|  |  | 
|  | // Test declarations in different modules with no common initial | 
|  | // declaration. | 
|  | @class C; | 
|  | void accept_a_C(C*); | 
|  |  | 
|  | @class C2; | 
|  | void accept_a_C2(C2*); | 
|  |  | 
|  | @class C3; | 
|  | void accept_a_C3(C3*); | 
|  | @class C3; | 
|  |  | 
|  | @class C4; | 
|  |  | 
|  | @class Explicit; | 
|  |  | 
|  | int *explicit_func(void); | 
|  |  | 
|  | struct explicit_struct; | 
|  |  | 
|  | @protocol P3, P4; | 
|  |  | 
|  | @protocol P3; | 
|  |  | 
|  | struct S3; | 
|  | struct S3; | 
|  | struct S4 { | 
|  | int field; | 
|  | }; | 
|  |  | 
|  | struct S3 *produce_S3(void); | 
|  | void consume_S4(struct S4*); | 
|  |  | 
|  | typedef int T1; | 
|  | typedef float T2; | 
|  |  | 
|  | int func0(int); | 
|  | int func1(int x) { return x; } | 
|  | int func2(int); | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | // Spacing matters! | 
|  | extern int var1; | 
|  | extern float var2; | 
|  |  | 
|  | extern double var3; | 
|  |  | 
|  | // Make sure this doesn't introduce an ambiguity-creating 'id' at the | 
|  | // top level. | 
|  | typedef void funcptr_with_id(int id); | 
|  |  | 
|  | // A class that is declared in the 'bottom' module, then loaded from | 
|  | // one of the modules it depends on. | 
|  | @interface DeclaredThenLoaded | 
|  | - declaredThenLoadedMethod; | 
|  | @end | 
|  |  | 
|  | @class DeclaredThenLoaded; | 
|  |  | 
|  | void eventually_noreturn2(void); |