Revert "Debug info: Implement a cleaner version of r198461. For symmetry with"
This reverts commit 198699 so we can get a cleaner patch. llvm-svn: 198713
This commit is contained in:
parent
966c6f6ddf
commit
c6758879b3
|
@ -2537,7 +2537,8 @@ void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, QualType FnType,
|
|||
/// information in the source file. If the location is invalid, the
|
||||
/// previous location will be reused.
|
||||
void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc,
|
||||
bool ForceColumnInfo) {
|
||||
bool ForceColumnInfo,
|
||||
llvm::MDNode *ForceScope) {
|
||||
// Update our current location
|
||||
setLocation(Loc);
|
||||
|
||||
|
@ -2556,7 +2557,7 @@ void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc,
|
|||
// Update last state.
|
||||
PrevLoc = CurLoc;
|
||||
|
||||
llvm::MDNode *Scope = LexicalBlockStack.back();
|
||||
llvm::MDNode *Scope = ForceScope ? ForceScope : &*LexicalBlockStack.back();
|
||||
Builder.SetCurrentDebugLocation(llvm::DebugLoc::get
|
||||
(getLineNumber(CurLoc),
|
||||
getColumnNumber(CurLoc, ForceColumnInfo),
|
||||
|
|
|
@ -211,13 +211,17 @@ public:
|
|||
/// getLocation - Return the current source location.
|
||||
SourceLocation getLocation() const { return CurLoc; }
|
||||
|
||||
/// getScope() - Return the current scope.
|
||||
llvm::MDNode *getScope() const { return LexicalBlockStack.back(); }
|
||||
|
||||
/// EmitLocation - Emit metadata to indicate a change in line/column
|
||||
/// information in the source file.
|
||||
/// \param ForceColumnInfo Assume DebugColumnInfo option is true.
|
||||
/// \param ForceScope Force the location to be in a specific lexical
|
||||
/// scope rather than the top of LexicalBlockStack.
|
||||
void EmitLocation(CGBuilderTy &Builder, SourceLocation Loc,
|
||||
bool ForceColumnInfo = false);
|
||||
bool ForceColumnInfo = false,
|
||||
llvm::MDNode *ForceScope = 0);
|
||||
|
||||
/// EmitFunctionStart - Emit a call to llvm.dbg.function.start to indicate
|
||||
/// start of a new function.
|
||||
|
|
|
@ -506,8 +506,7 @@ static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
|
|||
/// its pointer, name, and types registered in the class struture.
|
||||
void CodeGenFunction::GenerateObjCMethod(const ObjCMethodDecl *OMD) {
|
||||
StartObjCMethod(OMD, OMD->getClassInterface(), OMD->getLocStart());
|
||||
assert(isa<CompoundStmt>(OMD->getBody()));
|
||||
EmitCompoundStmtWithoutScope(*cast<CompoundStmt>(OMD->getBody()));
|
||||
EmitStmt(OMD->getBody());
|
||||
FinishFunction(OMD->getBodyRBrace());
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ void CodeGenFunction::EmitStopPoint(const Stmt *S) {
|
|||
Loc = S->getLocStart();
|
||||
DI->EmitLocation(Builder, Loc);
|
||||
|
||||
LastStopPoint = Loc;
|
||||
LastStopPoint = std::make_pair(Loc, DI->getScope());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -209,9 +209,10 @@ void CodeGenFunction::FinishFunction(SourceLocation EndLoc) {
|
|||
// all will be fine.
|
||||
if (CGDebugInfo *DI = getDebugInfo()) {
|
||||
if (OnlySimpleReturnStmts)
|
||||
DI->EmitLocation(Builder, LastStopPoint, false);
|
||||
DI->EmitLocation(Builder, LastStopPoint.first,
|
||||
false, LastStopPoint.second);
|
||||
else
|
||||
DI->EmitLocation(Builder, EndLoc, false);
|
||||
DI->EmitLocation(Builder, EndLoc, false, LastStopPoint.second);
|
||||
}
|
||||
|
||||
// Pop any cleanups that might have been associated with the
|
||||
|
@ -228,7 +229,7 @@ void CodeGenFunction::FinishFunction(SourceLocation EndLoc) {
|
|||
|
||||
if (CGDebugInfo *DI = getDebugInfo())
|
||||
if (OnlySimpleReturnStmts)
|
||||
DI->EmitLocation(Builder, EndLoc, false);
|
||||
DI->EmitLocation(Builder, EndLoc, false, LastStopPoint.second);
|
||||
}
|
||||
|
||||
// Emit function epilog (to return).
|
||||
|
|
|
@ -877,7 +877,7 @@ private:
|
|||
unsigned NumSimpleReturnExprs;
|
||||
|
||||
/// The last regular (non-return) debug location (breakpoint) in the function.
|
||||
SourceLocation LastStopPoint;
|
||||
std::pair<SourceLocation, llvm::MDNode*> LastStopPoint;
|
||||
|
||||
public:
|
||||
/// A scope within which we are constructing the fields of an object which
|
||||
|
|
|
@ -29,11 +29,12 @@ NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h);
|
|||
CGFloat pattern[2];
|
||||
// CHECK: define {{.*}}_createBezierPathWithWidth
|
||||
// CHECK: load {{.*}} %path, align {{.*}}, !dbg ![[RET:[0-9]+]]
|
||||
// CHECK: call void @objc_storeStrong{{.*}} !dbg ![[ARC:[0-9]+]]
|
||||
// CHECK: call {{.*}} @objc_autoreleaseReturnValue{{.*}} !dbg ![[ARC]]
|
||||
// CHECK: ret {{.*}} !dbg ![[ARC]]
|
||||
// CHECK: call void @objc_storeStrong{{.*}} !dbg ![[ARC1:[0-9]+]]
|
||||
// CHECK: call {{.*}} @objc_autoreleaseReturnValue{{.*}} !dbg ![[ARC2:[0-9]+]]
|
||||
// CHECK: ret {{.*}} !dbg ![[ARC2]]
|
||||
// CHECK: ![[RET]] = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null}
|
||||
return path;
|
||||
// CHECK: ![[ARC]] = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null}
|
||||
// CHECK: ![[ARC1]] = metadata !{i32 [[@LINE+2]], i32 0, metadata !{{.*}}, null}
|
||||
// CHECK: ![[ARC2]] = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null}
|
||||
}
|
||||
@end
|
||||
|
|
|
@ -49,8 +49,9 @@
|
|||
|
||||
// CHECK: ![[TESTNOSIDEEFFECT:.*]] = {{.*}}[ DW_TAG_subprogram ] [line [[@LINE+1]]] [local] [def] [-[AppDelegate testNoSideEffect:]]
|
||||
- (int)testNoSideEffect:(NSString *)foo {
|
||||
// CHECK: ![[COMPOUND_STMT:.*]] = metadata !{i32 786443, metadata !{{.*}}, metadata ![[TESTNOSIDEEFFECT]], i32 [[@LINE-1]], i32 0, i32 0} ; [ DW_TAG_lexical_block ]
|
||||
int x = 1;
|
||||
// CHECK: ![[ARC1]] = metadata !{i32 [[@LINE+1]], i32 0, metadata ![[TESTNOSIDEEFFECT]], null}
|
||||
// CHECK: ![[ARC1]] = metadata !{i32 [[@LINE+1]], i32 0, metadata ![[COMPOUND_STMT]], null}
|
||||
return 1; // Return expression
|
||||
// CHECK: ![[RET1]] = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null}
|
||||
} // Cleanup + Ret
|
||||
|
|
Loading…
Reference in New Issue