aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-11-09 19:42:53 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-11-09 19:42:53 +0000
commit6d393d441e4d88a4a57251204ed9bdcbb79aa6d6 (patch)
tree18563d17d419eb4a4cf25cec3569ef417af550f8
parent027e892af88b4f3310e8d8d1b603f149a5708e8d (diff)
Revert rL346454: Fix a use-after-free introduced by r344915.
r344915 added a call to ApplyDebugLocation to the sanitizer check function emitter. Some of the sanitizers are emitted in the function epilogue though and the LexicalScopeStack is emptied out before. By detecting this situation and early-exiting from ApplyDebugLocation the fallback location is used, which is equivalent to the return location. rdar://problem/45859802 ........ Causes EXPENSIVE_CHECKS build bot failures: http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@346549 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/CGDebugInfo.cpp2
-rw-r--r--test/CodeGen/ubsan-debuglog-return.c10
2 files changed, 1 insertions, 11 deletions
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp
index 81cc07dddd..1d999e446c 100644
--- a/lib/CodeGen/CGDebugInfo.cpp
+++ b/lib/CodeGen/CGDebugInfo.cpp
@@ -3538,7 +3538,7 @@ void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc) {
// Update our current location
setLocation(Loc);
- if (CurLoc.isInvalid() || CurLoc.isMacroID() || LexicalBlockStack.empty())
+ if (CurLoc.isInvalid() || CurLoc.isMacroID())
return;
llvm::MDNode *Scope = LexicalBlockStack.back();
diff --git a/test/CodeGen/ubsan-debuglog-return.c b/test/CodeGen/ubsan-debuglog-return.c
deleted file mode 100644
index 31f5ce2da5..0000000000
--- a/test/CodeGen/ubsan-debuglog-return.c
+++ /dev/null
@@ -1,10 +0,0 @@
-// RUN: %clang_cc1 -x c -debug-info-kind=line-tables-only -emit-llvm -fsanitize=returns-nonnull-attribute -o - %s | FileCheck %s
-// The UBSAN function call in the epilogue needs to have a debug location.
-
-__attribute__((returns_nonnull)) void *allocate() {}
-
-// CHECK: define nonnull i8* @allocate(){{.*}} !dbg
-// CHECK: call void @__ubsan_handle_nonnull_return_v1_abort
-// CHECK-SAME: !dbg ![[LOC:[0-9]+]]
-// CHECK: ret i8*
-// CHECK-SAME: !dbg ![[LOC]]