diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp
index 240343d..f326be2 100644
--- a/lib/CodeGen/CGDebugInfo.cpp
+++ b/lib/CodeGen/CGDebugInfo.cpp
@@ -59,6 +59,8 @@
 
 CGDebugInfo::~CGDebugInfo()
 {
+  assert(RegionStack.empty() && "Region stack mismatch, stack not empty!");
+
   delete SR;
 
   // Free CompileUnitCache.
@@ -111,7 +113,8 @@
 }
 
 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 @@
   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.
diff --git a/lib/CodeGen/CGDebugInfo.h b/lib/CodeGen/CGDebugInfo.h
index 7e41143..22a45ce 100644
--- a/lib/CodeGen/CGDebugInfo.h
+++ b/lib/CodeGen/CGDebugInfo.h
@@ -101,6 +101,8 @@
   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
diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp
index 57e9c39..fd2e357 100644
--- a/lib/CodeGen/CGDecl.cpp
+++ b/lib/CodeGen/CGDecl.cpp
@@ -130,8 +130,7 @@
   // 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 @@
   // 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 @@
   // 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);
   }
diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp
index fed0eee..20312de 100644
--- a/lib/CodeGen/CGStmt.cpp
+++ b/lib/CodeGen/CGStmt.cpp
@@ -33,10 +33,7 @@
   // 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 @@
   // 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 @@
     EmitStmt(*I);
 
   if (DI) {
-    if (S.getRBracLoc().isValid())
-      DI->setLocation(S.getRBracLoc());
+    DI->setLocation(S.getRBracLoc());
     DI->EmitRegionEnd(CurFn, Builder);
   }
 
diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp
index b182ecf..12e468c 100644
--- a/lib/CodeGen/CodeGenFunction.cpp
+++ b/lib/CodeGen/CodeGenFunction.cpp
@@ -73,9 +73,7 @@
 
   // 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 @@
   // 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);
     }
   }
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index a74f057..a8d8825 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -615,8 +615,7 @@
   // 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);
   }
 }
