Remove an ugly hack that was meant to eliminate the breakpoint ambiguity

between a block assignment and the entry of the block function. In reality
this wouldn't work anyway because blocks are predominantly created
on-the-fly inside of an ObjC method invocation.
The proper fix for the ambiguity is to use -gcolumn-info to differentiate
the breakpoints.

This is expected to break some block-related darwin-gdb tests.

rdar://problem/14039866

llvm-svn: 184157
This commit is contained in:
Adrian Prantl 2013-06-18 00:27:36 +00:00
parent a62e38c898
commit de5fde0b05
2 changed files with 20 additions and 4 deletions

View File

@ -34,10 +34,7 @@ using namespace CodeGen;
void CodeGenFunction::EmitStopPoint(const Stmt *S) {
if (CGDebugInfo *DI = getDebugInfo()) {
SourceLocation Loc;
if (isa<DeclStmt>(S))
Loc = S->getLocEnd();
else
Loc = S->getLocStart();
Loc = S->getLocStart();
DI->EmitLocation(Builder, Loc);
LastStopPoint = Loc;

View File

@ -0,0 +1,19 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -g -fblocks -emit-llvm -o - %s | FileCheck %s
// Assignment and block entry should point to the same line.
// rdar://problem/14039866
// CHECK: define{{.*}}@main()
// CHECK: store{{.*}}bitcast{{.*}}, !dbg ![[ASSIGNMENT:[0-9]+]]
// CHECK: define {{.*}} @__main_block_invoke
// CHECK: dbg ![[BLOCK_ENTRY:[0-9]+]]
int main()
{
// CHECK: [[ASSIGNMENT]] = metadata !{i32 [[@LINE+2]],
// CHECK: [[BLOCK_ENTRY]] = metadata !{i32 [[@LINE+1]],
int (^blockptr)(void) = ^(void) {
return 0;
};
return blockptr();
}