128d19817SChris Lattner // Test this without pch. 241fb2d95SArgyrios Kyrtzidis // RUN: %clang_cc1 -include %s -fsyntax-only -verify %s 328d19817SChris Lattner 428d19817SChris Lattner // Test with pch. 541fb2d95SArgyrios Kyrtzidis // RUN: %clang_cc1 -emit-pch -o %t %s 68fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify %s 7ef84c4b4SDouglas Gregor 841fb2d95SArgyrios Kyrtzidis #ifndef HEADER 941fb2d95SArgyrios Kyrtzidis #define HEADER 1041fb2d95SArgyrios Kyrtzidis 1141fb2d95SArgyrios Kyrtzidis extern float y; 1241fb2d95SArgyrios Kyrtzidis extern int *ip, x; 1341fb2d95SArgyrios Kyrtzidis 14*b13eb8dcSJordan Rose float z; 1541fb2d95SArgyrios Kyrtzidis 16*b13eb8dcSJordan Rose int z2 = 17; 1741fb2d95SArgyrios Kyrtzidis 1841fb2d95SArgyrios Kyrtzidis #define MAKE_HAPPY(X) X##Happy 19*b13eb8dcSJordan Rose int MAKE_HAPPY(Very); 2041fb2d95SArgyrios Kyrtzidis 2141fb2d95SArgyrios Kyrtzidis #define A_MACRO_IN_THE_PCH 492 2241fb2d95SArgyrios Kyrtzidis #define FUNCLIKE_MACRO(X, Y) X ## Y 2341fb2d95SArgyrios Kyrtzidis 2441fb2d95SArgyrios Kyrtzidis #define PASTE2(x,y) x##y 2541fb2d95SArgyrios Kyrtzidis #define PASTE1(x,y) PASTE2(x,y) 2641fb2d95SArgyrios Kyrtzidis #define UNIQUE(x) PASTE1(x,__COUNTER__) 2741fb2d95SArgyrios Kyrtzidis 2841fb2d95SArgyrios Kyrtzidis int UNIQUE(a); // a0 2941fb2d95SArgyrios Kyrtzidis int UNIQUE(a); // a1 3041fb2d95SArgyrios Kyrtzidis 3141fb2d95SArgyrios Kyrtzidis #else 3241fb2d95SArgyrios Kyrtzidis 33ef84c4b4SDouglas Gregor int *ip2 = &x; 34ef84c4b4SDouglas Gregor float *fp = &ip; // expected-warning{{incompatible pointer types}} 35*b13eb8dcSJordan Rose double z; // expected-error{{redefinition}} expected-note@14{{previous}} 36*b13eb8dcSJordan Rose int z2 = 18; // expected-error{{redefinition}} expected-note@16{{previous}} 37*b13eb8dcSJordan Rose double VeryHappy; // expected-error{{redefinition}} expected-note@19{{previous definition is here}} 38d959d753SChris Lattner 39d959d753SChris Lattner int Q = A_MACRO_IN_THE_PCH; 40d959d753SChris Lattner 41c523d8e8SChris Lattner int R = FUNCLIKE_MACRO(A_MACRO_, IN_THE_PCH); 420af3ba17SChris Lattner 430af3ba17SChris Lattner 440af3ba17SChris Lattner int UNIQUE(a); // a2 450af3ba17SChris Lattner int *Arr[] = { &a0, &a1, &a2 }; 4641fb2d95SArgyrios Kyrtzidis 4741fb2d95SArgyrios Kyrtzidis #endif 48