1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -emit-llvm -g -triple x86_64-apple-macosx10.9.0 -munwind-tables -std=c++11 -fcxx-exceptions -fexceptions %s -o - | FileCheck %s
2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Test that emitting a landing pad does not affect the line table
4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// entries for the code that triggered it.
5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: call void @llvm.dbg.declare
7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: call void @llvm.dbg.declare(metadata !{{{.*}}}, metadata ![[CURRENT_ADDR:.*]]), !dbg ![[DBG1:.*]]
8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: unwind label %{{.*}}, !dbg ![[DBG1]]
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: store i64 %{{.*}}, i64* %current_address, align 8, !dbg ![[DBG4:.*]]
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: call void @llvm.dbg.declare(metadata !{{{.*}}}, metadata ![[FOUND_IT:.*]]), !dbg ![[DBG2:.*]]
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: = landingpad
12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: cleanup, !dbg ![[DBG3:.*]]
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ![[CURRENT_ADDR]] = {{.*}} [current_address]
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ![[FOUND_IT]] = {{.*}} [found_it]
15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ![[DBG1]] = metadata !{i32 256,
16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ![[DBG2]] = metadata !{i32 257,
17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ![[DBG3]] = metadata !{i32 268,
18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-DAG: ![[DBG4]] = metadata !{i32 256,
19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinestypedef unsigned long long uint64_t;
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinestemplate<class _Tp> class shared_ptr {
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespublic:
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  typedef _Tp element_type;
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  element_type* __ptr_;
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  ~shared_ptr();
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  element_type* operator->() const noexcept {return __ptr_;}
26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass Context {
28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespublic:
29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    uint64_t GetIt();
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass Foo
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    bool bar();
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    virtual shared_ptr<Context> GetContext () = 0;
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines# 253 "Foo.cpp" 3
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesbool
38651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesFoo::bar ()
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  uint64_t current_address = GetContext()->GetIt();
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  bool found_it = false;
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines# 267 "Foo.cpp" 3
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return found_it;
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
45