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