From: usama hameed Date: Fri, 20 Jan 2023 19:24:05 +0000 (-0800) Subject: [CodeGen] bugfix: ApplyDebugLocation goes out of scope before intended X-Git-Tag: upstream/17.0.6~19741 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5b6dbdecba0b033e6a64593062cf87cd6c8a66ee;p=platform%2Fupstream%2Fllvm.git [CodeGen] bugfix: ApplyDebugLocation goes out of scope before intended rdar://103570533 Differential Revision: https://reviews.llvm.org/D142243 --- diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 55464e1..8cbe2a5 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -361,17 +361,18 @@ void CodeGenFunction::FinishFunction(SourceLocation EndLoc) { bool HasOnlyLifetimeMarkers = HasCleanups && EHStack.containsOnlyLifetimeMarkers(PrologueCleanupDepth); bool EmitRetDbgLoc = !HasCleanups || HasOnlyLifetimeMarkers; + + std::optional OAL; if (HasCleanups) { // Make sure the line table doesn't jump back into the body for // the ret after it's been at EndLoc. - std::optional AL; if (CGDebugInfo *DI = getDebugInfo()) { if (OnlySimpleReturnStmts) DI->EmitLocation(Builder, EndLoc); else // 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); + OAL = ApplyDebugLocation::CreateDefaultArtificial(*this, EndLoc); } PopCleanupBlocks(PrologueCleanupDepth); diff --git a/clang/test/CodeGenObjC/objc-arc-ubsan-debugging.m b/clang/test/CodeGenObjC/objc-arc-ubsan-debugging.m new file mode 100644 index 0000000..531f999 --- /dev/null +++ b/clang/test/CodeGenObjC/objc-arc-ubsan-debugging.m @@ -0,0 +1,14 @@ +// RUN: %clang -x objective-c -target arm64-apple-macos12.0 -fobjc-arc -std=gnu99 -O0 -fsanitize=undefined -fsanitize=nullability -c %s -v -g + +@interface NSString +@end + +struct A { + NSString *a; +}; + +NSString* _Nonnull foo() +{ + struct A a; + return 0; +}