1 | // RUN: not %clang -cc1 -fsyntax-only %s 2>&1 | FileCheck %s |
2 | |
3 | #define a b |
4 | #define b c |
5 | #define c(x) d(x) |
6 | #define d(x) x*1 |
7 | |
8 | #define e f |
9 | #define f g |
10 | #define g(x) h(x) |
11 | #define h(x) x |
12 | |
13 | void PR16799() { |
14 | const char str[] = "string"; |
15 | a(str); |
16 | // CHECK: :15:3: error: invalid operands to binary expression |
17 | // CHECK: ('const char [7]' and 'int') |
18 | // CHECK: a(str); |
19 | // CHECK: ^~~~~~ |
20 | // CHECK: :3:11: note: expanded from macro 'a' |
21 | // CHECK: #define a b |
22 | // CHECK: ^ |
23 | // CHECK: :4:11: note: expanded from macro 'b' |
24 | // CHECK: #define b c |
25 | // CHECK: ^ |
26 | // CHECK: :5:14: note: expanded from macro 'c' |
27 | // CHECK: #define c(x) d(x) |
28 | // CHECK: ^~~~ |
29 | // CHECK: :6:15: note: expanded from macro 'd' |
30 | // CHECK: #define d(x) x*1 |
31 | // CHECK: ~^~ |
32 | |
33 | e(str); |
34 | // CHECK: :33:5: warning: expression result unused |
35 | // CHECK: e(str); |
36 | // CHECK: ^~~ |
37 | // CHECK: :8:11: note: expanded from macro 'e' |
38 | // CHECK: #define e f |
39 | // CHECK: ^ |
40 | // CHECK: :9:11: note: expanded from macro 'f' |
41 | // CHECK: #define f g |
42 | // CHECK: ^ |
43 | // CHECK: :10:16: note: expanded from macro 'g' |
44 | // CHECK: #define g(x) h(x) |
45 | // CHECK: ^ |
46 | // CHECK: :11:14: note: expanded from macro 'h' |
47 | // CHECK: #define h(x) x |
48 | // CHECK: ^ |
49 | } |
50 | // CHECK: 1 warning and 1 error generated. |
51 | |