summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2013-05-16 00:41:29 +0000
committerAdrian Prantl <aprantl@apple.com>2013-05-16 00:41:29 +0000
commit5e5ff6e170faddd31ff3e08f6d7e8ad45a2db46e (patch)
tree2699502a427191613283eb76f1031822ab449f02 /clang/test
parentdc237b52bc916c5156dcdadf143e73d97a5c0ccf (diff)
downloadbcm5719-llvm-5e5ff6e170faddd31ff3e08f6d7e8ad45a2db46e.tar.gz
bcm5719-llvm-5e5ff6e170faddd31ff3e08f6d7e8ad45a2db46e.zip
Set the debug location for landing pad code to the canonical EH location.
It used to point to the first call that caused the landing pad to be generated. rdar://problem/13888152 llvm-svn: 181958
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CodeGenCXX/lpad-linetable.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/lpad-linetable.cpp b/clang/test/CodeGenCXX/lpad-linetable.cpp
new file mode 100644
index 00000000000..dba2ad63b2d
--- /dev/null
+++ b/clang/test/CodeGenCXX/lpad-linetable.cpp
@@ -0,0 +1,69 @@
+// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -emit-llvm -g -triple x86_64-apple-darwin10 %s -o - | FileCheck %s
+// The landing pad should have the line number of the closing brace of the function.
+// rdar://problem/13888152
+// CHECK: ret i32
+// CHECK: landingpad {{.*}}
+// CHECK-NEXT: !dbg ![[LPAD:[0-9]+]]
+// CHECK: ![[LPAD]] = metadata !{i32 24, i32 0, metadata !{{.*}}, null}
+
+# 1 "/usr/include/c++/4.2.1/vector" 1 3
+typedef long unsigned int __darwin_size_t;
+typedef __darwin_size_t size_t;
+namespace std {
+ template<typename _Tp>
+ class allocator
+ {
+ public:
+ template<typename _Tp1>
+ struct rebind
+ { typedef allocator<_Tp1> other; };
+ ~allocator() throw() { }
+ };
+ template<typename _Tp, typename _Alloc>
+ struct _Vector_base
+ {
+ typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
+ struct _Vector_impl
+ {
+ _Vector_impl(_Tp_alloc_type const& __a) { }
+ };
+ typedef _Alloc allocator_type;
+ _Vector_base(const allocator_type& __a)
+ : _M_impl(__a)
+ { }
+ ~_Vector_base() { }
+ _Vector_impl _M_impl;
+ };
+ template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+ class vector
+ : protected _Vector_base<_Tp, _Alloc>
+ {
+ typedef _Vector_base<_Tp, _Alloc> _Base;
+ public:
+ typedef _Tp value_type;
+ typedef size_t size_type;
+ typedef _Alloc allocator_type;
+ vector(const allocator_type& __a = allocator_type())
+ : _Base(__a)
+ { }
+ size_type
+ push_back(const value_type& __x)
+ {}
+ };
+}
+# 10 "main.cpp" 2
+
+
+
+
+int main (int argc, char const *argv[], char const *envp[])
+{ // 15
+ std::vector<long> longs;
+ std::vector<short> shorts;
+ for (int i=0; i<12; i++)
+ {
+ longs.push_back(i);
+ shorts.push_back(i);
+ }
+ return 0; // 23
+} // 24
OpenPOWER on IntegriCloud