xref: /aosp_15_r20/external/clang/test/Misc/reduced-diags-macros-backtrace.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: not %clang_cc1 -fsyntax-only -fmacro-backtrace-limit 0 %s 2>&1 | FileCheck %s --check-prefix=ALL
2*67e74705SXin Li // RUN: not %clang_cc1 -fsyntax-only -fmacro-backtrace-limit 2 %s 2>&1 | FileCheck %s --check-prefix=SKIP
3*67e74705SXin Li 
4*67e74705SXin Li #define F(x) x + 1
5*67e74705SXin Li #define G(x) F(x) + 2
6*67e74705SXin Li #define ADD(x,y) G(x) + y
7*67e74705SXin Li #define LEVEL4(x) ADD(p,x)
8*67e74705SXin Li #define LEVEL3(x) LEVEL4(x)
9*67e74705SXin Li #define LEVEL2(x) LEVEL3(x)
10*67e74705SXin Li #define LEVEL1(x) LEVEL2(x)
11*67e74705SXin Li 
12*67e74705SXin Li int a = LEVEL1(b);
13*67e74705SXin Li 
14*67e74705SXin Li // ALL: {{.*}}:12:9: error: use of undeclared identifier 'p'
15*67e74705SXin Li // ALL-NEXT: int a = LEVEL1(b);
16*67e74705SXin Li // ALL-NEXT:         ^
17*67e74705SXin Li // ALL-NEXT: {{.*}}:10:19: note: expanded from macro 'LEVEL1'
18*67e74705SXin Li // ALL-NEXT: #define LEVEL1(x) LEVEL2(x)
19*67e74705SXin Li // ALL-NEXT:                   ^
20*67e74705SXin Li // ALL-NEXT: {{.*}}:9:19: note: expanded from macro 'LEVEL2'
21*67e74705SXin Li // ALL-NEXT: #define LEVEL2(x) LEVEL3(x)
22*67e74705SXin Li // ALL-NEXT:                   ^
23*67e74705SXin Li // ALL-NEXT: {{.*}}:8:19: note: expanded from macro 'LEVEL3'
24*67e74705SXin Li // ALL-NEXT: #define LEVEL3(x) LEVEL4(x)
25*67e74705SXin Li // ALL-NEXT:                   ^
26*67e74705SXin Li // ALL-NEXT: {{.*}}:7:23: note: expanded from macro 'LEVEL4'
27*67e74705SXin Li // ALL-NEXT: #define LEVEL4(x) ADD(p,x)
28*67e74705SXin Li // ALL-NEXT:                       ^
29*67e74705SXin Li // ALL-NEXT: {{.*}}:12:16: error: use of undeclared identifier 'b'
30*67e74705SXin Li // ALL-NEXT: int a = LEVEL1(b);
31*67e74705SXin Li // ALL-NEXT:                ^
32*67e74705SXin Li // ALL-NEXT: 2 errors generated.
33*67e74705SXin Li 
34*67e74705SXin Li // SKIP: {{.*}}:12:9: error: use of undeclared identifier 'p'
35*67e74705SXin Li // SKIP-NEXT: int a = LEVEL1(b);
36*67e74705SXin Li // SKIP-NEXT:         ^
37*67e74705SXin Li // SKIP-NEXT: {{.*}}:10:19: note: expanded from macro 'LEVEL1'
38*67e74705SXin Li // SKIP-NEXT: #define LEVEL1(x) LEVEL2(x)
39*67e74705SXin Li // SKIP-NEXT:                   ^
40*67e74705SXin Li // SKIP-NEXT: note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
41*67e74705SXin Li // SKIP-NEXT: {{.*}}:7:23: note: expanded from macro 'LEVEL4'
42*67e74705SXin Li // SKIP-NEXT: #define LEVEL4(x) ADD(p,x)
43*67e74705SXin Li // SKIP-NEXT:                       ^
44*67e74705SXin Li // SKIP-NEXT: {{.*}}:12:16: error: use of undeclared identifier 'b'
45*67e74705SXin Li // SKIP-NEXT: int a = LEVEL1(b);
46*67e74705SXin Li // SKIP-NEXT:                ^
47*67e74705SXin Li // SKIP-NEXT: 2 errors generated.
48