]> granicus.if.org Git - clang/commitdiff
Change CGDebugInfo::setLocation to just ignore invalid locations. This
authorDaniel Dunbar <daniel@zuster.org>
Fri, 17 Oct 2008 16:15:48 +0000 (16:15 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Fri, 17 Oct 2008 16:15:48 +0000 (16:15 +0000)
simplifies clients.

Also, add assert that RegionStack is empty when the CGDebugInfo is
destroyed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57684 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDebugInfo.cpp
lib/CodeGen/CGDebugInfo.h
lib/CodeGen/CGDecl.cpp
lib/CodeGen/CGStmt.cpp
lib/CodeGen/CodeGenFunction.cpp
lib/CodeGen/CodeGenModule.cpp

index 240343dd82236c14f3c2d5e4cb4ffabac5842257..f326be276977798891c70ac901044bc64eec67da 100644 (file)
@@ -59,6 +59,8 @@ CGDebugInfo::CGDebugInfo(CodeGenModule *m)
 
 CGDebugInfo::~CGDebugInfo()
 {
+  assert(RegionStack.empty() && "Region stack mismatch, stack not empty!");
+
   delete SR;
 
   // Free CompileUnitCache.
@@ -111,7 +113,8 @@ CGDebugInfo::~CGDebugInfo()
 }
 
 void CGDebugInfo::setLocation(SourceLocation loc) {
-  CurLoc = M->getContext().getSourceManager().getLogicalLoc(loc);
+  if (loc.isValid())
+    CurLoc = M->getContext().getSourceManager().getLogicalLoc(loc);
 }
 
 /// getCastValueFor - Return a llvm representation for a given debug information
@@ -711,6 +714,7 @@ void CGDebugInfo::EmitRegionEnd(llvm::Function *Fn, llvm::IRBuilder<> &Builder)
   llvm::DebugInfoDesc *DID = RegionStack.back();
   Builder.CreateCall(RegionEndFn, getCastValueFor(DID), "");
   RegionStack.pop_back();
+  // FIXME: Should be freeing here?
 }
 
 /// EmitDeclare - Emit local variable declaration debug info.
index 7e41143837c3e321bca759b4007e5145d017f0e8..22a45ce8b5042a758b9ee21c6b51ecfa1bc87fbf 100644 (file)
@@ -101,6 +101,8 @@ public:
   CGDebugInfo(CodeGenModule *m);
   ~CGDebugInfo();
 
+  /// setLocation - Update the current source location. If \arg loc is
+  /// invalid it is ignored.
   void setLocation(SourceLocation loc);
 
   /// EmitStopPoint - Emit a call to llvm.dbg.stoppoint to indicate a change of
index 57e9c39832f52ae63c5fc70ff73454fcda0a2e0b..fd2e357370ea5c9cc2172f8d9dddaa4b8c35c2a3 100644 (file)
@@ -130,8 +130,7 @@ void CodeGenFunction::EmitStaticBlockVarDecl(const VarDecl &D) {
   // Emit global variable debug descriptor for static vars.
   CGDebugInfo *DI = CGM.getDebugInfo();
   if(DI) {
-    if(D.getLocation().isValid())
-      DI->setLocation(D.getLocation());
+    DI->setLocation(D.getLocation());
     DI->EmitGlobalVariable(static_cast<llvm::GlobalVariable *>(GV), &D);
   }
 
@@ -177,8 +176,7 @@ void CodeGenFunction::EmitLocalBlockVarDecl(const VarDecl &D) {
   // Emit debug info for local var declaration.
   CGDebugInfo *DI = CGM.getDebugInfo();
   if(DI) {
-    if(D.getLocation().isValid())
-      DI->setLocation(D.getLocation());
+    DI->setLocation(D.getLocation());
     DI->EmitDeclare(&D, llvm::dwarf::DW_TAG_auto_variable,
                     DeclPtr, Builder);
   }
@@ -235,8 +233,7 @@ void CodeGenFunction::EmitParmDecl(const VarDecl &D, llvm::Value *Arg) {
   // Emit debug info for param declaration.
   CGDebugInfo *DI = CGM.getDebugInfo();
   if(DI) {
-    if(D.getLocation().isValid())
-      DI->setLocation(D.getLocation());
+    DI->setLocation(D.getLocation());
     DI->EmitDeclare(&D, llvm::dwarf::DW_TAG_arg_variable,
                     DeclPtr, Builder);
   }
index fed0eee7f0ffb937b8215ba07fc6eb91fce1a548..20312de5bab09e5484612891d58d1f4c738b4989 100644 (file)
@@ -33,10 +33,7 @@ void CodeGenFunction::EmitStmt(const Stmt *S) {
   // executable code. So do not generate a stoppoint for that.
   CGDebugInfo *DI = CGM.getDebugInfo();
   if (DI && S->getStmtClass() != Stmt::CompoundStmtClass) {
-    if (S->getLocStart().isValid()) {
-        DI->setLocation(S->getLocStart());
-    }
-
+    DI->setLocation(S->getLocStart());
     DI->EmitStopPoint(CurFn, Builder);
   }
 
@@ -122,8 +119,7 @@ RValue CodeGenFunction::EmitCompoundStmt(const CompoundStmt &S, bool GetLast,
   // FIXME: handle vla's etc.
   CGDebugInfo *DI = CGM.getDebugInfo();
   if (DI) {
-    if (S.getLBracLoc().isValid())
-      DI->setLocation(S.getLBracLoc());
+    DI->setLocation(S.getLBracLoc());
     DI->EmitRegionStart(CurFn, Builder);
   }
 
@@ -132,8 +128,7 @@ RValue CodeGenFunction::EmitCompoundStmt(const CompoundStmt &S, bool GetLast,
     EmitStmt(*I);
 
   if (DI) {
-    if (S.getRBracLoc().isValid())
-      DI->setLocation(S.getRBracLoc());
+    DI->setLocation(S.getRBracLoc());
     DI->EmitRegionEnd(CurFn, Builder);
   }
 
index b182ecf055f8e185c9a17f85d11592e05a340df8..12e468c12706c2c446c4a9569cc327aa75cd19a3 100644 (file)
@@ -73,9 +73,7 @@ void CodeGenFunction::FinishFunction(SourceLocation EndLoc) {
 
   // Emit debug descriptor for function end.
   if (CGDebugInfo *DI = CGM.getDebugInfo()) {
-    if (EndLoc.isValid()) {
-      DI->setLocation(EndLoc);
-    }
+    DI->setLocation(EndLoc);
     DI->EmitRegionEnd(CurFn, Builder);
   }
  
@@ -126,10 +124,8 @@ void CodeGenFunction::StartFunction(const Decl *D, QualType RetTy,
   // FIXME: The cast here is a huge hack.
   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
     if (CGDebugInfo *DI = CGM.getDebugInfo()) {
-      CompoundStmt* body = dyn_cast<CompoundStmt>(FD->getBody());
-      if (body && body->getLBracLoc().isValid()) {
+      if (CompoundStmt* body = dyn_cast<CompoundStmt>(FD->getBody()))
         DI->setLocation(body->getLBracLoc());
-      }
       DI->EmitFunctionStart(FD, CurFn, Builder);
     }
   }
index a74f0578a5b99fccf9a409eeed544b40997a6e56..a8d8825aea884979afd213b55218aa0d41e74f4f 100644 (file)
@@ -615,8 +615,7 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
   // Emit global variable debug information.
   CGDebugInfo *DI = getDebugInfo();
   if(DI) {
-    if(D->getLocation().isValid())
-      DI->setLocation(D->getLocation());
+    DI->setLocation(D->getLocation());
     DI->EmitGlobalVariable(GV, D);
   }
 }