diff options
| -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);  | 

