r178517 - un-break remaining gdb buildbot testcases.

Adrian Prantl aprantl at apple.com
Mon Apr 1 18:00:48 PDT 2013


Author: adrian
Date: Mon Apr  1 20:00:48 2013
New Revision: 178517

URL: http://llvm.org/viewvc/llvm-project?rev=178517&view=rev
Log:
un-break remaining gdb buildbot testcases.
Make sure we do not generate line info for debugging-related frame setup.
Follow-up to r178361 / rdar://problem/12767564

Added:
    cfe/trunk/test/CodeGen/global-blocks-lines.c
Modified:
    cfe/trunk/lib/CodeGen/CGBlocks.cpp

Modified: cfe/trunk/lib/CodeGen/CGBlocks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBlocks.cpp?rev=178517&r1=178516&r2=178517&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGBlocks.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBlocks.cpp Mon Apr  1 20:00:48 2013
@@ -1147,7 +1147,13 @@ CodeGenFunction::GenerateBlockFunction(G
                                                 "block.addr");
     unsigned Align = getContext().getDeclAlign(&selfDecl).getQuantity();
     Alloca->setAlignment(Align);
+    // Set the DebugLocation to empty, so the store is recognized as a
+    // frame setup instruction by llvm::DwarfDebug::beginFunction().
+    llvm::DebugLoc Empty;
+    llvm::DebugLoc Loc = Builder.getCurrentDebugLocation();
+    Builder.SetCurrentDebugLocation(Empty);
     Builder.CreateAlignedStore(BlockPointer, Alloca, Align);
+    Builder.SetCurrentDebugLocation(Loc);
     BlockPointerDbgLoc = Alloca;
   }
 

Added: cfe/trunk/test/CodeGen/global-blocks-lines.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/global-blocks-lines.c?rev=178517&view=auto
==============================================================================
--- cfe/trunk/test/CodeGen/global-blocks-lines.c (added)
+++ cfe/trunk/test/CodeGen/global-blocks-lines.c Mon Apr  1 20:00:48 2013
@@ -0,0 +1,45 @@
+// RUN: %clang_cc1 -fblocks -g -emit-llvm %s -o - | FileCheck %s
+// Make sure we do not generate line info for debugging-related frame setup.
+// CHECK: define {{.*}}block_invoke
+// CHECK-NOT: store {{.*}}%struct.__block_descriptor*{{.*}}, align 8, dbg
+// CHECK: store {{.*}}%struct.__block_descriptor*{{.*}}, align 8
+// CHECK: ret
+// CHECK: define {{.*}}block_invoke
+// CHECK-NOT: store {{.*}}%struct.__block_descriptor*{{.*}}, align 8, dbg
+// CHECK: store {{.*}}%struct.__block_descriptor*{{.*}}, align 8
+// CHECK: ret
+// CHECK: define {{.*}}block_invoke
+// CHECK-NOT: store {{.*}}%struct.__block_descriptor*{{.*}}, align 8, dbg
+// CHECK: store {{.*}}%struct.__block_descriptor*{{.*}}, align 8
+// CHECK: ret
+int printf(const char*, ...);
+
+static void* _NSConcreteGlobalBlock;
+
+
+typedef void (^ HelloBlock_t)(const char * name);
+
+  /* Breakpoint for first Block function.  */
+HelloBlock_t helloBlock = ^(const char * name) {
+  printf("Hello there, %s!\n", name);
+};
+
+  /* Breakpoint for second Block function.  */
+static HelloBlock_t s_helloBlock = ^(const char * name) {
+  printf("Hello there, %s!\n", name);
+};
+
+/* Breakpoint for third Block function.  */
+int X = 1234;
+int (^CP)(void) = ^{ X = X+1;  return X; };
+
+int
+main(int argc, char * argv[])
+{
+  helloBlock("world");
+  s_helloBlock("world");
+
+  CP();
+  printf ("X = %d\n", X);
+  return X - 1235;
+}





More information about the cfe-commits mailing list