1*35751490SHsiangkai Wang // This test will test the correctness of generating DILabel and
2*35751490SHsiangkai Wang // llvm.dbg.label when the label is in inlined functions.
3*35751490SHsiangkai Wang //
4*35751490SHsiangkai Wang // RUN: %clang_cc1 -O2 %s -o - -emit-llvm -debug-info-kind=limited | FileCheck %s
f1(int a,int b)5*35751490SHsiangkai Wang inline int f1(int a, int b) {
6*35751490SHsiangkai Wang int sum;
7*35751490SHsiangkai Wang
8*35751490SHsiangkai Wang top:
9*35751490SHsiangkai Wang sum = a + b;
10*35751490SHsiangkai Wang return sum;
11*35751490SHsiangkai Wang }
12*35751490SHsiangkai Wang
13*35751490SHsiangkai Wang extern int ga, gb;
14*35751490SHsiangkai Wang
f2(void)15*35751490SHsiangkai Wang int f2(void) {
16*35751490SHsiangkai Wang int result;
17*35751490SHsiangkai Wang
18*35751490SHsiangkai Wang result = f1(ga, gb);
19*35751490SHsiangkai Wang // CHECK: call void @llvm.dbg.label(metadata [[LABEL_METADATA:!.*]]), !dbg [[LABEL_LOCATION:!.*]]
20*35751490SHsiangkai Wang
21*35751490SHsiangkai Wang return result;
22*35751490SHsiangkai Wang }
23*35751490SHsiangkai Wang
24*35751490SHsiangkai Wang // CHECK: distinct !DISubprogram(name: "f1", {{.*}}, retainedNodes: [[ELEMENTS:!.*]])
25*35751490SHsiangkai Wang // CHECK: [[ELEMENTS]] = !{{{.*}}, [[LABEL_METADATA]]}
26*35751490SHsiangkai Wang // CHECK: [[LABEL_METADATA]] = !DILabel({{.*}}, name: "top", {{.*}}, line: 8)
27*35751490SHsiangkai Wang // CHECK: [[INLINEDAT:!.*]] = distinct !DILocation(line: 18,
28*35751490SHsiangkai Wang // CHECK: [[LABEL_LOCATION]] = !DILocation(line: 8, {{.*}}, inlinedAt: [[INLINEDAT]])
29