diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp
index 5f1ab62..433e8e2 100644
--- a/AST/StmtSerialization.cpp
+++ b/AST/StmtSerialization.cpp
@@ -456,6 +456,8 @@
 void DeclStmt::EmitImpl(Serializer& S) const {
   // FIXME: special handling for struct decls.
   S.EmitOwnedPtr(getDecl());  
+  S.Emit(StartLoc);
+  S.Emit(EndLoc);
 }
 
 void DeclRefExpr::EmitImpl(Serializer& S) const {
@@ -505,7 +507,9 @@
 
 DeclStmt* DeclStmt::CreateImpl(Deserializer& D) {
   ScopedDecl* decl = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>());
-  return new DeclStmt(decl);
+  SourceLocation StartLoc = SourceLocation::ReadVal(D);
+  SourceLocation EndLoc = SourceLocation::ReadVal(D);
+  return new DeclStmt(decl, StartLoc, EndLoc);
 }
 
 void DefaultStmt::EmitImpl(Serializer& S) const {
diff --git a/Parse/ParseDecl.cpp b/Parse/ParseDecl.cpp
index 8b8d645..7d15e98 100644
--- a/Parse/ParseDecl.cpp
+++ b/Parse/ParseDecl.cpp
@@ -388,7 +388,7 @@
 /// [C99]   'inline'
 ///
 void Parser::ParseDeclarationSpecifiers(DeclSpec &DS) {
-  DS.Range.setBegin(Tok.getLocation());
+  DS.SetRangeStart(Tok.getLocation());
   while (1) {
     int isInvalid = false;
     const char *PrevSpec = 0;
@@ -409,7 +409,7 @@
           if (isInvalid)
             break;
           // FIXME: restrict this to "id" and ObjC classnames.
-          DS.Range.setEnd(Tok.getLocation());
+          DS.SetRangeEnd(Tok.getLocation());
           ConsumeToken(); // The identifier
           if (Tok.is(tok::less)) {
             SourceLocation endProtoLoc;
@@ -555,7 +555,7 @@
       else                 // extwarn.
         Diag(Tok, diag::ext_duplicate_declspec, PrevSpec);
     }
-    DS.Range.setEnd(Tok.getLocation());
+    DS.SetRangeEnd(Tok.getLocation());
     ConsumeToken();
   }
 }
diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp
index 7f33ffd..77d2adb 100644
--- a/Parse/ParseObjc.cpp
+++ b/Parse/ParseObjc.cpp
@@ -1186,9 +1186,11 @@
           // FIXME: Is BlockContext right?
           Declarator DeclaratorInfo(DS, Declarator::BlockContext);
           ParseDeclarator(DeclaratorInfo);
-          DeclTy * aBlockVarDecl = Actions.ActOnDeclarator(CurScope, 
-                                                           DeclaratorInfo, 0);
-          StmtResult stmtResult = Actions.ActOnDeclStmt(aBlockVarDecl);
+          DeclTy *aBlockVarDecl = Actions.ActOnDeclarator(CurScope, 
+                                                          DeclaratorInfo, 0);
+          StmtResult stmtResult =
+            Actions.ActOnDeclStmt(aBlockVarDecl, DS.getSourceRange().getBegin(),
+                                  DeclaratorInfo.getSourceRange().getEnd());
           FirstPart = stmtResult.isInvalid ? 0 : stmtResult.Val;
         } else
           ConsumeToken(); // consume '...'
diff --git a/Parse/ParseStmt.cpp b/Parse/ParseStmt.cpp
index 389d5d4..160701e 100644
--- a/Parse/ParseStmt.cpp
+++ b/Parse/ParseStmt.cpp
@@ -93,7 +93,10 @@
 
   default:
     if (!OnlyStatement && isDeclarationSpecifier()) {
-      return Actions.ActOnDeclStmt(ParseDeclaration(Declarator::BlockContext));
+      SourceLocation DeclStart = Tok.getLocation();
+      DeclTy *Res = ParseDeclaration(Declarator::BlockContext);
+      // FIXME: Pass in the right location for the end of the declstmt.
+      return Actions.ActOnDeclStmt(Res, DeclStart, SourceLocation());
     } else if (Tok.is(tok::r_brace)) {
       Diag(Tok, diag::err_expected_statement);
       return true;
@@ -255,7 +258,9 @@
     ParseDeclarator(DeclaratorInfo);
     
     DeclTy *Decl = ParseInitDeclaratorListAfterFirstDeclarator(DeclaratorInfo);
-    return Decl ? Actions.ActOnDeclStmt(Decl) : 0;
+    if (!Decl) return 0;
+    return Actions.ActOnDeclStmt(Decl, DS.getSourceRange().getBegin(),
+                                 DeclaratorInfo.getSourceRange().getEnd());
   }
   
   // Otherwise, this is an expression.  Seed it with II and parse it.
@@ -430,7 +435,10 @@
       if (isDeclarationSpecifier()) {
         // FIXME: Save the __extension__ on the decl as a node somehow.
         // FIXME: disable extwarns.
-        R = Actions.ActOnDeclStmt(ParseDeclaration(Declarator::BlockContext));
+        SourceLocation DeclStart = Tok.getLocation();
+        DeclTy *Res = ParseDeclaration(Declarator::BlockContext);
+        // FIXME: Pass in the right location for the end of the declstmt.
+        R = Actions.ActOnDeclStmt(Res, DeclStart, SourceLocation());
       } else {
         // Otherwise this was a unary __extension__ marker.  Parse the
         // subexpression and add the __extension__ unary op. 
@@ -743,8 +751,12 @@
     // Parse declaration, which eats the ';'.
     if (!getLang().C99)   // Use of C99-style for loops in C90 mode?
       Diag(Tok, diag::ext_c99_variable_decl_in_for_loop);
+    
+    SourceLocation DeclStart = Tok.getLocation();
     DeclTy *aBlockVarDecl = ParseDeclaration(Declarator::ForContext);
-    StmtResult stmtResult = Actions.ActOnDeclStmt(aBlockVarDecl);
+    // FIXME: Pass in the right location for the end of the declstmt.
+    StmtResult stmtResult = Actions.ActOnDeclStmt(aBlockVarDecl, DeclStart,
+                                                  SourceLocation());
     FirstPart = stmtResult.isInvalid ? 0 : stmtResult.Val;
     if ((ForEach = isTokIdentifier_in())) {
       ConsumeToken(); // consume 'in'
diff --git a/Sema/Sema.h b/Sema/Sema.h
index 2fe54de..fc81781 100644
--- a/Sema/Sema.h
+++ b/Sema/Sema.h
@@ -339,7 +339,8 @@
   virtual StmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R,
                                        StmtTy **Elts, unsigned NumElts,
                                        bool isStmtExpr);
-  virtual StmtResult ActOnDeclStmt(DeclTy *Decl);
+  virtual StmtResult ActOnDeclStmt(DeclTy *Decl, SourceLocation StartLoc,
+                                   SourceLocation EndLoc);
   virtual StmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprTy *LHSVal,
                                    SourceLocation DotDotDotLoc, ExprTy *RHSVal,
                                    SourceLocation ColonLoc, StmtTy *SubStmt);
diff --git a/Sema/SemaStmt.cpp b/Sema/SemaStmt.cpp
index fe62c8a..14b2fdf 100644
--- a/Sema/SemaStmt.cpp
+++ b/Sema/SemaStmt.cpp
@@ -33,13 +33,13 @@
   return new NullStmt(SemiLoc);
 }
 
-Sema::StmtResult Sema::ActOnDeclStmt(DeclTy *decl) {
-  if (decl) {
-    ScopedDecl *SD = dyn_cast<ScopedDecl>(static_cast<Decl *>(decl));
-    assert(SD && "Sema::ActOnDeclStmt(): expected ScopedDecl");
-    return new DeclStmt(SD);
-  } else 
-    return true; // error
+Sema::StmtResult Sema::ActOnDeclStmt(DeclTy *decl, SourceLocation StartLoc,
+                                     SourceLocation EndLoc) {
+  if (decl == 0)
+    return true;
+  
+  ScopedDecl *SD = cast<ScopedDecl>(static_cast<Decl *>(decl));
+  return new DeclStmt(SD, StartLoc, EndLoc);
 }
 
 Action::StmtResult 
diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h
index 662fbac..12251f4 100644
--- a/include/clang/AST/Stmt.h
+++ b/include/clang/AST/Stmt.h
@@ -132,13 +132,19 @@
 ///
 class DeclStmt : public Stmt {
   ScopedDecl *TheDecl;
+  SourceLocation StartLoc, EndLoc;
 public:
-  DeclStmt(ScopedDecl *D) : Stmt(DeclStmtClass), TheDecl(D) {}
+  DeclStmt(ScopedDecl *D, SourceLocation startLoc, SourceLocation endLoc)
+    : Stmt(DeclStmtClass), TheDecl(D), StartLoc(startLoc), EndLoc(endLoc) {}
   
   const ScopedDecl *getDecl() const { return TheDecl; }
   ScopedDecl *getDecl() { return TheDecl; }
 
-  virtual SourceRange getSourceRange() const { return SourceRange(); }
+  SourceLocation getStartLoc() const { return StartLoc; }
+  SourceLocation getEndLoc() const { return EndLoc; }
+  virtual SourceRange getSourceRange() const {
+    return SourceRange(StartLoc, EndLoc);
+  }
   
   static bool classof(const Stmt *T) { 
     return T->getStmtClass() == DeclStmtClass; 
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index 63d9a72..abf34e2 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -220,7 +220,8 @@
                                        bool isStmtExpr) {
     return 0;
   }
-  virtual StmtResult ActOnDeclStmt(DeclTy *Decl) {
+  virtual StmtResult ActOnDeclStmt(DeclTy *Decl, SourceLocation StartLoc,
+                                   SourceLocation EndLoc) {
     return 0;
   }
   
diff --git a/include/clang/Parse/DeclSpec.h b/include/clang/Parse/DeclSpec.h
index 68a019a..182b54c 100644
--- a/include/clang/Parse/DeclSpec.h
+++ b/include/clang/Parse/DeclSpec.h
@@ -28,9 +28,6 @@
 /// type-qualifiers, and function-specifiers.
 class DeclSpec {
 public:
-  SourceRange Range;
-  const SourceRange &getSourceRange() const { return Range; }
-  
   // storage-class-specifier
   enum SCS {
     SCS_unspecified,
@@ -130,6 +127,8 @@
   
   // SourceLocation info.  These are null if the item wasn't specified or if
   // the setting was synthesized.
+  SourceRange Range;
+  
   SourceLocation StorageClassSpecLoc, SCS_threadLoc;
   SourceLocation TSWLoc, TSCLoc, TSSLoc, TSTLoc;
   SourceLocation TQ_constLoc, TQ_restrictLoc, TQ_volatileLoc;
@@ -181,6 +180,7 @@
   TST getTypeSpecType() const { return (TST)TypeSpecType; }
   void *getTypeRep() const { return TypeRep; }
   
+  const SourceRange &getSourceRange() const { return Range; }
   SourceLocation getTypeSpecWidthLoc() const { return TSWLoc; }
   SourceLocation getTypeSpecComplexLoc() const { return TSCLoc; }
   SourceLocation getTypeSpecSignLoc() const { return TSSLoc; }
@@ -222,6 +222,9 @@
   ///
   unsigned getParsedSpecifiers() const;
   
+  void SetRangeStart(SourceLocation Loc) { Range.setBegin(Loc); }
+  void SetRangeEnd(SourceLocation Loc) { Range.setEnd(Loc); }
+  
   /// These methods set the specified attribute of the DeclSpec, but return true
   /// and ignore the request if invalid (e.g. "extern" then "auto" is
   /// specified).  The name of the previous specifier is returned in prevspec.
