Before setting scope end marker, pay attention to scope begin marker and existing...
authorDevang Patel <dpatel@apple.com>
Wed, 17 Feb 2010 02:20:34 +0000 (02:20 +0000)
committerDevang Patel <dpatel@apple.com>
Wed, 17 Feb 2010 02:20:34 +0000 (02:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96445 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
test/FrontendC/2010-02-16-DbgVarScope.c [new file with mode: 0644]

index 5093dd9a9c11b0a95576da16d14349407e718bb3..852c7ea6401ebe5472f4a928c5abdfb49d2aa9ee 100644 (file)
@@ -238,7 +238,18 @@ public:
         LIndex = DSI;
       }
     }
-    setLastInsn(LastInsn);
+
+    unsigned CurrentLastInsnIndex = 0;
+    if (const MachineInstr *CL = getLastInsn()) 
+      CurrentLastInsnIndex = MIIndexMap[CL];
+    unsigned FIndex = MIIndexMap[getFirstInsn()];
+
+    // Set LastInsn as the last instruction for this scope only if
+    // it follows 
+    //  1) this scope's first instruction and
+    //  2) current last instruction for this scope, if any.
+    if (LIndex >= CurrentLastInsnIndex && LIndex >= FIndex)
+      setLastInsn(LastInsn);
   }
 
 #ifndef NDEBUG
diff --git a/test/FrontendC/2010-02-16-DbgVarScope.c b/test/FrontendC/2010-02-16-DbgVarScope.c
new file mode 100644 (file)
index 0000000..1d912d0
--- /dev/null
@@ -0,0 +1,30 @@
+// RUN: %llvmgcc -S -O0 -g %s -o - | \
+// RUN:    llc --disable-fp-elim -o %t.s -O0 -relocation-model=pic
+// RUN: %compile_c %t.s -o %t.o
+// RUN: %link %t.o -o %t.exe
+// RUN: echo {break 24\nrun\np loc\n} > %t.in 
+// RN: gdb -q -batch -n -x %t.in %t.exe | tee %t.out | \
+// RN:   grep {$1 = 1}
+
+int g1 = 1;
+int g2 = 2;
+
+int  __attribute__((always_inline)) bar() {
+  return g2 - g1; 
+}
+void foobar() {}
+
+void foo(int s) {
+  unsigned loc = 0;
+  if (s) {
+    loc = 1;
+    foobar();
+  } else {
+    loc = bar();
+    foobar();
+  }
+}
+
+int main() {
+       foo(0);
+}