diff options
author | Eric Christopher <echristo@apple.com> | 2011-09-29 00:00:35 +0000 |
---|---|---|
committer | Eric Christopher <echristo@apple.com> | 2011-09-29 00:00:35 +0000 |
commit | 414ee4bb74957b4c5fe05e11848028e4701b51f7 (patch) | |
tree | a5f58544d6b27bde881585a321f390455a91a8bb /lib | |
parent | 441937c9be818279f68003071ea2cefc5da7d25d (diff) |
Call UpdateLineDirectiveRegion every time we want to emit a stop
point in the code. Ensures that we don't miss any places and the
check is reasonably cheap.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140737 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/CGDebugInfo.cpp | 4 | ||||
-rw-r--r-- | lib/CodeGen/CGDebugInfo.h | 8 | ||||
-rw-r--r-- | lib/CodeGen/CGExpr.cpp | 1 | ||||
-rw-r--r-- | lib/CodeGen/CGStmt.cpp | 1 |
4 files changed, 8 insertions, 6 deletions
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index b48475f432..2edb065dd6 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -1763,6 +1763,10 @@ void CGDebugInfo::EmitStopPoint(CGBuilderTy &Builder) { if (!Builder.getCurrentDebugLocation().isUnknown()) return; + // The file may have had a line directive change. Process any of + // those before updating the state. + UpdateLineDirectiveRegion(Builder); + // Update last state. PrevLoc = CurLoc; diff --git a/lib/CodeGen/CGDebugInfo.h b/lib/CodeGen/CGDebugInfo.h index fdc3baf2f3..e59aed91a6 100644 --- a/lib/CodeGen/CGDebugInfo.h +++ b/lib/CodeGen/CGDebugInfo.h @@ -149,6 +149,10 @@ class CGDebugInfo { llvm::DIFile F, SmallVectorImpl<llvm::Value *> &EltTys); + // UpdateLineDirectiveRegion - Update region stack only if #line directive + // has introduced scope change. + void UpdateLineDirectiveRegion(CGBuilderTy &Builder); + public: CGDebugInfo(CodeGenModule &CGM); ~CGDebugInfo(); @@ -170,10 +174,6 @@ public: /// EmitFunctionEnd - Constructs the debug code for exiting a function. void EmitFunctionEnd(CGBuilderTy &Builder); - /// UpdateLineDirectiveRegion - Update region stack only if #line directive - /// has introduced scope change. - void UpdateLineDirectiveRegion(CGBuilderTy &Builder); - /// UpdateCompletedType - Update type cache because the type is now /// translated. void UpdateCompletedType(const TagDecl *TD); diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 22f264b8e9..5fe33ff1d3 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -2170,7 +2170,6 @@ RValue CodeGenFunction::EmitCallExpr(const CallExpr *E, ReturnValueSlot ReturnValue) { if (CGDebugInfo *DI = getDebugInfo()) { DI->setLocation(E->getLocStart()); - DI->UpdateLineDirectiveRegion(Builder); DI->EmitStopPoint(Builder); } diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp index 93763e3143..e070cc312a 100644 --- a/lib/CodeGen/CGStmt.cpp +++ b/lib/CodeGen/CGStmt.cpp @@ -35,7 +35,6 @@ void CodeGenFunction::EmitStopPoint(const Stmt *S) { DI->setLocation(S->getLocEnd()); else DI->setLocation(S->getLocStart()); - DI->UpdateLineDirectiveRegion(Builder); DI->EmitStopPoint(Builder); } } |