1 @import redecl_merge_top; 2 3 @class A; 4 5 @class A; 6 7 @interface B 8 + (B*) create_a_B; 9 @end 10 11 @class A; 12 13 @protocol P1; 14 @protocol P2 15 - (void)protoMethod2; 16 @end 17 18 struct S1; 19 struct S2 { 20 int field; 21 }; 22 23 struct S1 *produce_S1(void); 24 void consume_S2(struct S2*); 25 26 // Test declarations in different modules with no common initial 27 // declaration. 28 @class C; 29 void accept_a_C(C*); 30 31 @class C2; 32 void accept_a_C2(C2*); 33 34 @class C3; 35 void accept_a_C3(C3*); 36 @class C3; 37 38 @class C4; 39 40 @class Explicit; 41 42 int *explicit_func(void); 43 44 struct explicit_struct; 45 46 @protocol P3, P4; 47 48 @protocol P3; 49 50 struct S3; 51 struct S3; 52 struct S4 { 53 int field; 54 }; 55 56 struct S3 *produce_S3(void); 57 void consume_S4(struct S4*); 58 59 typedef int T1; 60 typedef float T2; 61 62 int func0(int); func1(int x)63int func1(int x) { return x; } 64 int func2(int); 65 66 67 68 69 70 71 72 73 74 75 // Spacing matters! 76 extern int var1; 77 extern float var2; 78 79 extern double var3; 80 81 // Make sure this doesn't introduce an ambiguity-creating 'id' at the 82 // top level. 83 typedef void funcptr_with_id(int id); 84 85 // A class that is declared in the 'bottom' module, then loaded from 86 // one of the modules it depends on. 87 @interface DeclaredThenLoaded 88 - declaredThenLoadedMethod; 89 @end 90 91 @class DeclaredThenLoaded; 92 93 void eventually_noreturn2(void); 94