From: Adrian Prantl Date: Tue, 2 Apr 2013 01:00:48 +0000 (+0000) Subject: un-break remaining gdb buildbot testcases. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7959194fded7b2b1d37ead268d42c8ae6b10fe25;p=clang 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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178517 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index d702b856cd..374c824a20 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -1147,7 +1147,13 @@ CodeGenFunction::GenerateBlockFunction(GlobalDecl GD, "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; } diff --git a/test/CodeGen/global-blocks-lines.c b/test/CodeGen/global-blocks-lines.c new file mode 100644 index 0000000000..b133fbc46b --- /dev/null +++ b/test/CodeGen/global-blocks-lines.c @@ -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; +}