diff options
| author | Adrian Prantl <aprantl@apple.com> | 2013-05-16 00:41:29 +0000 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2013-05-16 00:41:29 +0000 |
| commit | 5e5ff6e170faddd31ff3e08f6d7e8ad45a2db46e (patch) | |
| tree | 2699502a427191613283eb76f1031822ab449f02 /clang/test | |
| parent | dc237b52bc916c5156dcdadf143e73d97a5c0ccf (diff) | |
| download | bcm5719-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.cpp | 69 |
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 |

