]> granicus.if.org Git - clang/commitdiff
Fixed bugzilla bug# 2489.
authorSanjiv Gupta <sanjiv.gupta@microchip.com>
Fri, 4 Jul 2008 11:04:26 +0000 (11:04 +0000)
committerSanjiv Gupta <sanjiv.gupta@microchip.com>
Fri, 4 Jul 2008 11:04:26 +0000 (11:04 +0000)
This was broken when the GenerateCode function was splitted to use GenerateFunction.

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

lib/CodeGen/CodeGenFunction.cpp

index ebc1ff500d09ae8417c3c5a7cdac8aa146e8f888..ff46fa69c3617a39fd9c5e02f353fc8f4bf486c6 100644 (file)
@@ -69,6 +69,16 @@ void CodeGenFunction::GenerateFunction(const Stmt *Body) {
   // Emit the function body.
   EmitStmt(Body);
   
+  // Emit debug descriptor for function end.
+  CGDebugInfo *DI = CGM.getDebugInfo(); 
+  if (DI) {
+    const CompoundStmt* s = dyn_cast<CompoundStmt>(Body);
+    if (s && s->getRBracLoc().isValid()) {
+      DI->setLocation(s->getRBracLoc());
+    }
+    DI->EmitRegionEnd(CurFn, Builder);
+  }
   // Emit a return for code that falls off the end. If insert point
   // is a dummy block with no predecessors then remove the block itself.
   llvm::BasicBlock *BB = Builder.GetInsertBlock();
@@ -109,6 +119,16 @@ void CodeGenFunction::GenerateCode(const FunctionDecl *FD) {
   
   Builder.SetInsertPoint(EntryBB);
   
+  // Emit subprogram debug descriptor.
+  CGDebugInfo *DI = CGM.getDebugInfo();
+  if (DI) {
+    CompoundStmt* body = dyn_cast<CompoundStmt>(FD->getBody());
+    if (body && body->getLBracLoc().isValid()) {
+      DI->setLocation(body->getLBracLoc());
+    }
+    DI->EmitFunctionStart(FD, CurFn, Builder);
+  }
+
   // Emit allocs for param decls.  Give the LLVM Argument nodes names.
   llvm::Function::arg_iterator AI = CurFn->arg_begin();