1 // Test this without pch.
2 // RUN: %clang_cc1 -include %s -fsyntax-only -verify %s
3 
4 // Test with pch.
5 // RUN: %clang_cc1 -emit-pch -o %t %s
6 // RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify %s
7 
8 #ifndef HEADER
9 #define HEADER
10 
11 extern float y;
12 extern int *ip, x;
13 
14 float z;
15 
16 int z2 = 17;
17 
18 #define MAKE_HAPPY(X) X##Happy
19 int MAKE_HAPPY(Very);
20 
21 #define A_MACRO_IN_THE_PCH 492
22 #define FUNCLIKE_MACRO(X, Y) X ## Y
23 
24 #define PASTE2(x,y) x##y
25 #define PASTE1(x,y) PASTE2(x,y)
26 #define UNIQUE(x) PASTE1(x,__COUNTER__)
27 
28 int UNIQUE(a);  // a0
29 int UNIQUE(a);  // a1
30 
31 #else
32 
33 int *ip2 = &x;
34 float *fp = &ip; // expected-warning{{incompatible pointer types}}
35 double z; // expected-error{{redefinition}} expected-note@14{{previous}}
36 int z2 = 18; // expected-error{{redefinition}} expected-note@16{{previous}}
37 double VeryHappy; // expected-error{{redefinition}} expected-note@19{{previous definition is here}}
38 
39 int Q = A_MACRO_IN_THE_PCH;
40 
41 int R = FUNCLIKE_MACRO(A_MACRO_, IN_THE_PCH);
42 
43 
44 int UNIQUE(a);  // a2
45 int *Arr[] = { &a0, &a1, &a2 };
46 
47 #endif
48