From: Devang Patel Date: Wed, 25 Aug 2010 00:28:56 +0000 (+0000) Subject: Fix 'for' loop variables' scope. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0554e0e30d24d9ad7d5e12f8e7583ebb5c9715bf;p=clang Fix 'for' loop variables' scope. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112002 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp index 3a6c44aba0..16145f766a 100644 --- a/lib/CodeGen/CGStmt.cpp +++ b/lib/CodeGen/CGStmt.cpp @@ -501,6 +501,12 @@ void CodeGenFunction::EmitForStmt(const ForStmt &S) { RunCleanupsScope ForScope(*this); + CGDebugInfo *DI = getDebugInfo(); + if (DI) { + DI->setLocation(S.getSourceRange().getBegin()); + DI->EmitRegionStart(Builder); + } + // Evaluate the first part before the loop. if (S.getInit()) EmitStmt(S.getInit()); @@ -558,12 +564,6 @@ void CodeGenFunction::EmitForStmt(const ForStmt &S) { // Store the blocks to use for break and continue. BreakContinueStack.push_back(BreakContinue(LoopExit, Continue)); - CGDebugInfo *DI = getDebugInfo(); - if (DI) { - DI->setLocation(S.getSourceRange().getBegin()); - DI->EmitRegionStart(Builder); - } - { // Create a separate cleanup scope for the body, in case it is not // a compound statement. diff --git a/test/CodeGen/debug-info-scope.c b/test/CodeGen/debug-info-scope.c new file mode 100644 index 0000000000..6051e6ed0f --- /dev/null +++ b/test/CodeGen/debug-info-scope.c @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -g -emit-llvm < %s | FileCheck %s +// Two variables with same name in separate scope. +// Radar 8330217. +int main() { + int j = 0; + int k = 0; +// CHECK: DW_TAG_auto_variable +// CHECK-NEXT: DW_TAG_lexical_block + for (int i = 0; i < 10; i++) + j++; + for (int i = 0; i < 10; i++) + k++; + return 0; +}