diff options
author | Adrian Prantl <aprantl@apple.com> | 2019-12-05 13:19:37 -0800 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2019-12-05 13:30:23 -0800 |
commit | 338588d7cf1865f2095f5961b73cfb533bc535c4 (patch) | |
tree | 87ad4174f2e08d3a74017ccb5a348a8b9a48c42e /clang/lib/CodeGen | |
parent | decee04e630dedff8fe988b340ac015e510bf687 (diff) | |
download | bcm5719-llvm-338588d7cf1865f2095f5961b73cfb533bc535c4.tar.gz bcm5719-llvm-338588d7cf1865f2095f5961b73cfb533bc535c4.zip |
Debug Info: Apply a default location for cleanups if none is available.
This unbreaks the debuginfo-tests testsuite by replacing the assertion
with a default location. There are cleanups in helper functions that
don't have a valid source location such as block copy helpers and it's
not worth tracking each of them down.
rdar://57630879
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.h | 1 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 5 |
2 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h index 8e74f7e0196..fed79f0095b 100644 --- a/clang/lib/CodeGen/CGDebugInfo.h +++ b/clang/lib/CodeGen/CGDebugInfo.h @@ -748,6 +748,7 @@ public: ApplyDebugLocation(ApplyDebugLocation &&Other) : CGF(Other.CGF) { Other.CGF = nullptr; } + ApplyDebugLocation &operator=(ApplyDebugLocation &&) = default; ~ApplyDebugLocation(); diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index a25383f6e15..ffccbe2289d 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -377,11 +377,14 @@ void CodeGenFunction::FinishFunction(SourceLocation EndLoc) { if (HasCleanups) { // Make sure the line table doesn't jump back into the body for // the ret after it's been at EndLoc. + Optional<ApplyDebugLocation> AL; if (CGDebugInfo *DI = getDebugInfo()) { if (OnlySimpleReturnStmts) DI->EmitLocation(Builder, EndLoc); else - assert(EndLoc.isValid() && "no location for inlineable cleanup calls"); + // We may not have a valid end location. Try to apply it anyway, and + // fall back to an artificial location if needed. + AL = ApplyDebugLocation::CreateDefaultArtificial(*this, EndLoc); } PopCleanupBlocks(PrologueCleanupDepth); |