From 414ee4bb74957b4c5fe05e11848028e4701b51f7 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Thu, 29 Sep 2011 00:00:35 +0000 Subject: [PATCH] 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 --- lib/CodeGen/CGDebugInfo.cpp | 4 ++++ lib/CodeGen/CGDebugInfo.h | 8 ++++---- lib/CodeGen/CGExpr.cpp | 1 - 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 &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); } } -- 2.40.0