diff options
author | David Blaikie <dblaikie@gmail.com> | 2013-02-01 19:09:49 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2013-02-01 19:09:49 +0000 |
commit | 0a0f93c90fd397a1aa9f97283c55f8ba0062bf55 (patch) | |
tree | 8f12efb9dfa73578d9f05eeca5f21e439c1a5343 /test/CodeGenCXX/debug-info-class.cpp | |
parent | 3c6aaeb26202b41173dd9ea982833fe975147d80 (diff) |
Fix exception handling line table problems introduced by r173593
r173593 made us a little too eager to associate all code at the end of a
function with the user-written 'return' line. This caused problems with
breakpoints as they'd be set in exception handling code preceeding the
actual non-exception return handling code, leading to the breakpoint never
being hit in non-exceptional execution.
This change restores the pre-r173593 exception handling line information where
the cleanup code is associated with the '}' not the return line.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174206 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/debug-info-class.cpp')
-rw-r--r-- | test/CodeGenCXX/debug-info-class.cpp | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/test/CodeGenCXX/debug-info-class.cpp b/test/CodeGenCXX/debug-info-class.cpp index 131693b21a..410b921ce4 100644 --- a/test/CodeGenCXX/debug-info-class.cpp +++ b/test/CodeGenCXX/debug-info-class.cpp @@ -1,21 +1,20 @@ // RUN: %clang -emit-llvm -g -S %s -o - | FileCheck %s struct foo; -void func(foo *f) { // CHECK: DW_TAG_structure_type +void func(foo *f) { } class bar; -void func(bar *f) { // CHECK: DW_TAG_class_type +void func(bar *f) { } union baz; -void func(baz *f) { // CHECK: DW_TAG_union_type +void func(baz *f) { } -class B { // CHECK: DW_TAG_class_type +class B { public: virtual ~B(); -// CHECK: metadata !"_vptr$B", {{.*}}, i32 64, metadata !{{.*}}} ; [ DW_TAG_member ] }; -struct A { // CHECK: DW_TAG_structure_type +struct A { int one; - static const int HdrSize = 52; // CHECK: HdrSize + static const int HdrSize = 52; int two; A() { int x = 1; @@ -23,7 +22,22 @@ struct A { // CHECK: DW_TAG_structure_type }; -int main() { - A a; +int main(int argc, char **argv) { B b; + if (argc) { + A a; + } + return 0; } + +// CHECK: unwind label %terminate.lpad, !dbg ![[EXCEPTLOC:.*]] +// CHECK: store i32 0, i32* %retval, !dbg ![[RETLOC:.*]] +// CHECK: DW_TAG_structure_type ] [foo] +// CHECK: DW_TAG_class_type ] [bar] +// CHECK: DW_TAG_union_type ] [baz] +// CHECK: DW_TAG_structure_type ] [A] +// CHECK: HdrSize +// CHECK: DW_TAG_class_type ] [B] +// CHECK: metadata !"_vptr$B", {{.*}}, i32 64, metadata !{{.*}}} ; [ DW_TAG_member ] +// CHECK: ![[EXCEPTLOC]] = metadata !{i32 31, +// CHECK: ![[RETLOC]] = metadata !{i32 30, |