Index: lib/CodeGen/CGDecl.cpp =================================================================== --- lib/CodeGen/CGDecl.cpp +++ lib/CodeGen/CGDecl.cpp @@ -1946,6 +1946,9 @@ } } + // Set artificial debug location in order to preserve the scope + auto DL = ApplyDebugLocation::CreateArtificial(*this); + Address DeclPtr = Address::invalid(); bool DoStore = false; bool IsScalar = hasScalarEvaluationKind(Ty); @@ -2071,7 +2074,7 @@ // Store the initial value into the alloca. if (DoStore) - EmitStoreOfScalar(ArgVal, lv, /* isInitialization */ true); + EmitStoreOfScalar(ArgVal, lv, /* isInitialization */ true); setAddrOfLocalVar(&D, DeclPtr); Index: lib/CodeGen/CGExpr.cpp =================================================================== --- lib/CodeGen/CGExpr.cpp +++ lib/CodeGen/CGExpr.cpp @@ -68,6 +68,8 @@ bool CastToDefaultAddrSpace) { auto Alloca = CreateTempAlloca(Ty, Name, ArraySize); Alloca->setAlignment(Align.getQuantity()); + // Set debug location in order to preserve the scope + Alloca->setDebugLoc(this->Builder.getCurrentDebugLocation()); if (AllocaAddr) *AllocaAddr = Address(Alloca, Align); llvm::Value *V = Alloca; Index: test/CodeGen/debug-info-preserve-scope.c =================================================================== --- /dev/null +++ test/CodeGen/debug-info-preserve-scope.c @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s + +static int a; + +// CHECK-LABEL: define void @f +void f(int b) { + a = b; +} + + +// CHECK: [[B:%.*]] = alloca i32 {{.*}} !dbg ![[artificialDbgLoc:[0-9]+]] +// CHECK: store i32 {{.*}} !dbg ![[artificialDbgLoc]] + +// CHECK: ![[artificialDbgLoc]] = !DILocation(line: 0