]> granicus.if.org Git - clang/commitdiff
Always declare the .block_descriptor parameter, not just the local copy.
authorAdrian Prantl <aprantl@apple.com>
Thu, 14 Mar 2013 21:52:59 +0000 (21:52 +0000)
committerAdrian Prantl <aprantl@apple.com>
Thu, 14 Mar 2013 21:52:59 +0000 (21:52 +0000)
Un-breaks gdb's invoke-block behavior.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177118 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDebugInfo.cpp

index 6b0edbcafe68eee8beb9ced3635a68aad171860c..ae88732c8215fb104d64d9d2ff05843b12e2ca24 100644 (file)
@@ -2817,17 +2817,18 @@ void CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block,
                                  CGM.getLangOpts().Optimize, flags,
                                  cast<llvm::Argument>(Arg)->getArgNo() + 1);
 
-  // Matching the code in EmitParmDecl, depending on optimization level.
-  llvm::Instruction *Call;
-  if (LocalAddr)
+  if (LocalAddr) {
     // Insert an llvm.dbg.value into the current block.
-    Call = DBuilder.insertDbgValueIntrinsic(LocalAddr, 0, debugVar,
-                                            Builder.GetInsertBlock());
-  else
-    // Insert an llvm.dbg.declare into the current block.
-    Call = DBuilder.insertDeclare(Arg, debugVar, Builder.GetInsertBlock());
+    llvm::Instruction *DbgVal =
+      DBuilder.insertDbgValueIntrinsic(LocalAddr, 0, debugVar,
+                                      Builder.GetInsertBlock());
+    DbgVal->setDebugLoc(llvm::DebugLoc::get(line, column, scope));
+  }
 
-  Call->setDebugLoc(llvm::DebugLoc::get(line, column, scope));
+  // Insert an llvm.dbg.declare into the current block.
+  llvm::Instruction *DbgDecl =
+    DBuilder.insertDeclare(Arg, debugVar, Builder.GetInsertBlock());
+  DbgDecl->setDebugLoc(llvm::DebugLoc::get(line, column, scope));
 }
 
 /// getStaticDataMemberDeclaration - If D is an out-of-class definition of