Phase 2 of making the Decl class more lightweight...

Move Identifier/Loc instance variables (and associated getters/setters) down from Decl to ScopedDecl/FieldDecl.

Objc AST's can now inherit from Decl without getting instance variables and types that are C specific. For now, I am keeping NextDeclarator, since I believe it may be useful to ObjC. If not, it can be moved later.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41934 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Sema/SemaStmt.cpp b/Sema/SemaStmt.cpp
index 9cca2c2..2e7e753 100644
--- a/Sema/SemaStmt.cpp
+++ b/Sema/SemaStmt.cpp
@@ -33,9 +33,11 @@
 }
 
 Sema::StmtResult Sema::ParseDeclStmt(DeclTy *decl) {
-  if (decl)
-    return new DeclStmt(static_cast<Decl *>(decl));
-  else 
+  if (decl) {
+    ScopedDecl *SD = dyn_cast<ScopedDecl>(static_cast<Decl *>(decl));
+    assert(SD && "Sema::ParseDeclStmt(): expected ScopedDecl");
+    return new DeclStmt(SD);
+  } else 
     return true; // error
 }
 
@@ -57,7 +59,7 @@
       /*empty*/;
     
     if (i != NumElts) {
-      Decl *D = cast<DeclStmt>(Elts[i])->getDecl();
+      ScopedDecl *D = cast<DeclStmt>(Elts[i])->getDecl();
       Diag(D->getLocation(), diag::ext_mixed_decls_code);
     }
   }
@@ -484,7 +486,8 @@
       if (BVD && !BVD->hasLocalStorage())
         BVD = 0;
       if (BVD == 0)
-        Diag(D->getLocation(), diag::err_non_variable_decl_in_for);
+        Diag(dyn_cast<ScopedDecl>(D)->getLocation(), 
+             diag::err_non_variable_decl_in_for);
       // FIXME: mark decl erroneous!
     }
   }