diff options
author | Adrian Prantl <aprantl@apple.com> | 2013-07-25 00:23:42 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2013-07-25 00:23:42 +0000 |
commit | 3b477597fa1184b223ad5ad9dfe1c870b8aa1ac5 (patch) | |
tree | b545eff75f340956b6dbdea27085d0c287dbca04 /test/CodeGenCXX/linetable-cleanup.cpp | |
parent | 09ade336e928e8b3e325fc46a53cd5f4d1d46252 (diff) |
Debug Info: Fine-tune the simple return expression location handling to
only affect functions without a separate return block. This fixes the
linetable for void functions with cleanups and multiple returns.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187090 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/linetable-cleanup.cpp')
-rw-r--r-- | test/CodeGenCXX/linetable-cleanup.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/CodeGenCXX/linetable-cleanup.cpp b/test/CodeGenCXX/linetable-cleanup.cpp index 1f117f2afa..96b8572252 100644 --- a/test/CodeGenCXX/linetable-cleanup.cpp +++ b/test/CodeGenCXX/linetable-cleanup.cpp @@ -7,6 +7,12 @@ // CHECK: call void @_ZN1CD1Ev(%class.C* {{.*}}), !dbg ![[CLEANUP:[0-9]+]] // CHECK: ret i32 0, !dbg ![[RET:[0-9]+]] +// CHECK: define {{.*}}bar +// CHECK: ret void, !dbg ![[RETBAR:[0-9]+]] + +// CHECK: define {{.*}}baz +// CHECK: ret void, !dbg ![[RETBAZ:[0-9]+]] + class C { public: ~C() {} @@ -22,3 +28,31 @@ int foo() return 0; // CHECK: ![[RET]] = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null} } + +void bar() +{ + if (!foo()) + // CHECK: {{.*}} = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null} + return; + + if (foo()) { + C c; + c.i = foo(); + } + // Clang creates only a single ret instruction. Make sure it is at a useful line. + // CHECK: ![[RETBAR]] = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null} +} + +void baz() +{ + if (!foo()) + // CHECK: {{.*}} = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null} + return; + + if (foo()) { + // no cleanup + // CHECK: {{.*}} = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null} + return; + } + // CHECK: ![[RETBAZ]] = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null} +} |