xref: /aosp_15_r20/external/clang/test/CodeGenCXX/linetable-eh.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -triple x86_64-apple-macosx10.9.0 -munwind-tables -std=c++11 -fcxx-exceptions -fexceptions %s -o - | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li // Test that emitting a landing pad does not affect the line table
4*67e74705SXin Li // entries for the code that triggered it.
5*67e74705SXin Li 
6*67e74705SXin Li // CHECK: call void @llvm.dbg.declare
7*67e74705SXin Li // CHECK: call void @llvm.dbg.declare(metadata {{.*}}, metadata ![[CURRENT_ADDR:.*]], metadata !{{.*}}), !dbg ![[DBG1:.*]]
8*67e74705SXin Li // CHECK: unwind label %{{.*}}, !dbg ![[DBG1]]
9*67e74705SXin Li // CHECK: store i64 %{{.*}}, i64* %current_address, align 8, !dbg ![[DBG4:.*]]
10*67e74705SXin Li // CHECK-NEXT: call void @llvm.dbg.declare(metadata {{.*}}, metadata ![[FOUND_IT:.*]], metadata !{{.*}}), !dbg ![[DBG2:.*]]
11*67e74705SXin Li // CHECK: = landingpad
12*67e74705SXin Li // CHECK-NEXT: cleanup, !dbg ![[DBG3:.*]]
13*67e74705SXin Li // CHECK-DAG: ![[CURRENT_ADDR]] = {{.*}}name: "current_address"
14*67e74705SXin Li // CHECK-DAG: ![[FOUND_IT]] = {{.*}}name: "found_it"
15*67e74705SXin Li // CHECK-DAG: ![[DBG1]] = !DILocation(line: 256,
16*67e74705SXin Li // CHECK-DAG: ![[DBG2]] = !DILocation(line: 257,
17*67e74705SXin Li // CHECK-DAG: ![[DBG3]] = !DILocation(line: 268,
18*67e74705SXin Li // CHECK-DAG: ![[DBG4]] = !DILocation(line: 256,
19*67e74705SXin Li typedef unsigned long long uint64_t;
20*67e74705SXin Li template<class _Tp> class shared_ptr {
21*67e74705SXin Li public:
22*67e74705SXin Li   typedef _Tp element_type;
23*67e74705SXin Li   element_type* __ptr_;
24*67e74705SXin Li   ~shared_ptr();
operator ->() const25*67e74705SXin Li   element_type* operator->() const noexcept {return __ptr_;}
26*67e74705SXin Li };
27*67e74705SXin Li class Context {
28*67e74705SXin Li public:
29*67e74705SXin Li     uint64_t GetIt();
30*67e74705SXin Li };
31*67e74705SXin Li class Foo
32*67e74705SXin Li {
33*67e74705SXin Li     bool bar();
34*67e74705SXin Li     virtual shared_ptr<Context> GetContext () = 0;
35*67e74705SXin Li };
36*67e74705SXin Li # 253 "Foo.cpp" 3
37*67e74705SXin Li bool
bar()38*67e74705SXin Li Foo::bar ()
39*67e74705SXin Li {
40*67e74705SXin Li   uint64_t current_address = GetContext()->GetIt();
41*67e74705SXin Li   bool found_it = false;
42*67e74705SXin Li # 267 "Foo.cpp" 3
43*67e74705SXin Li   return found_it;
44*67e74705SXin Li }
45