From 5b6dbdecba0b033e6a64593062cf87cd6c8a66ee Mon Sep 17 00:00:00 2001 From: usama hameed Date: Fri, 20 Jan 2023 11:24:05 -0800 Subject: [PATCH] [CodeGen] bugfix: ApplyDebugLocation goes out of scope before intended rdar://103570533 Differential Revision: https://reviews.llvm.org/D142243 --- clang/lib/CodeGen/CodeGenFunction.cpp | 5 +++-- clang/test/CodeGenObjC/objc-arc-ubsan-debugging.m | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 clang/test/CodeGenObjC/objc-arc-ubsan-debugging.m 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; +} -- 2.7.4