1a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: not %clang_cc1 -fsyntax-only %s 2>&1 | FileCheck %s -strict-whitespace
2a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
3a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#define NO_INITIATION(x) int a = x * 2
4a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#define NO_DEFINITION(x) int c = x * 2
5a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
6a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga NainarNO_INITIATION(a);
7a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga NainarNO_DEFINITION(b);
8a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
9a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK: {{.*}}:6:15: warning: variable 'a' is uninitialized when used within its own initialization
10a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT: NO_INITIATION(a);
11a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT: ~~~~~~~~~~~~~~^~
12a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT: {{.*}}:3:34: note: expanded from macro 'NO_INITIATION'
13a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT: #define NO_INITIATION(x) int a = x * 2
14a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT:                              ~   ^
15a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
16a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK: {{.*}}:7:15: error: use of undeclared identifier 'b'
17a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT: NO_DEFINITION(b);
18a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT:               ^
19a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
20a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
21a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#define F(x) x + 1
22a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#define ADD(x,y) y + F(x)
23a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#define SWAP_ARGU(x,y) ADD(y,x)
24a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
25a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainarint  p = SWAP_ARGU(3, x);
26a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
27a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK: {{.*}}:25:23: error: use of undeclared identifier 'x'
28a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT: int  p = SWAP_ARGU(3, x);
29a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT:                       ^
30a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
31a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#define APPLY(f,x,y) x f y
32a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
33a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainarstruct node {
34a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar};
35a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
36a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainarnode ff;
37a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar
38a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainarint r = APPLY(+,ff,1);
39a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK: {{.*}}:38:15: error: invalid operands to binary expression ('node' and 'int')
40a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT: int r = APPLY(+,ff,1);
41a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT:               ^ ~~ ~
42a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT: {{.*}}:31:24: note: expanded from macro 'APPLY'
43a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT: #define APPLY(f,x,y) x f y
44a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// CHECK-NEXT:                      ~ ^ ~