diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index fd6cf52..914e3045 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -1361,13 +1361,6 @@
   NamedDecl *New;
 
   QualType R = GetTypeForDeclarator(D, S);
-  if (R.isNull()) {
-    D.setInvalidType();
-    R = Context.IntTy;
-    if (IsFunctionDefinition) // int(...)
-      R = Context.getFunctionType(R, 0, 0, true, 0);
-      
-  }
 
   // See if this is a redefinition of a variable in the same scope.
   if (D.getCXXScopeSpec().isInvalid()) {
@@ -2798,10 +2791,6 @@
     CheckExtraCXXDefaultArguments(D);
  
   QualType parmDeclType = GetTypeForDeclarator(D, S);
-  if (parmDeclType.isNull()) {
-    D.setInvalidType(true);
-    parmDeclType = Context.IntTy;
-  }
   
   // TODO: CHECK FOR CONFLICTS, multiple decls with same name in one scope.
   // Can this happen for params?  We already checked that they don't conflict
@@ -3816,10 +3805,6 @@
   // example, unnamed unions inject all members into the struct namespace!
   
   QualType T = GetTypeForDeclarator(D, S);
- if (T.isNull()) {
-   D.setInvalidType();
-   T = Context.IntTy;
- }
   
   if (BitWidth) {
     // 6.7.2.1p3, 6.7.2.1p4
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index 781c64c..fc5b678 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -4703,10 +4703,6 @@
       || ParamInfo.getTypeObject(0).Kind != DeclaratorChunk::Function) {
     QualType T = GetTypeForDeclarator(ParamInfo, CurScope);
 
-    // The type is entirely optional as well, if none, use DependentTy.
-    if (T.isNull())
-      T = Context.DependentTy;
-
     // The parameter list is optional, if there was none, assume ().
     if (!T->isFunctionType())
       T = Context.getFunctionType(T, NULL, 0, 0, 0);
@@ -4722,9 +4718,6 @@
            diag::err_object_cannot_be_passed_returned_by_value) << 0 << RetTy;
       return;
     }
-
-    if (!RetTy->isDependentType())
-      CurBlock->ReturnType = RetTy.getTypePtr();
     return;
   }
 
diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp
index 7519aff..883cf22 100644
--- a/lib/Sema/SemaType.cpp
+++ b/lib/Sema/SemaType.cpp
@@ -47,8 +47,8 @@
 /// object.
 /// \param DS  the declaration specifiers
 /// \param DeclLoc The location of the declarator identifier or invalid if none.
-/// \returns The type described by the declaration specifiers, or NULL
-/// if there was an error.
+/// \returns The type described by the declaration specifiers.  This function
+/// never returns null.
 QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS,
                                      SourceLocation DeclLoc,
                                      bool &isInvalid) {
@@ -176,6 +176,9 @@
            "Can't handle qualifiers on typedef names yet!");
     // TypeQuals handled by caller.
     Result = Context.getTypeDeclType(cast<TypeDecl>(D));
+    
+    if (D->isInvalidDecl())
+      isInvalid = true;
     break;
   }    
   case DeclSpec::TST_typename: {
@@ -232,7 +235,9 @@
     break;
   }
   case DeclSpec::TST_error:
-    return QualType();
+    Result = Context.IntTy;
+    isInvalid = true;
+    break;
   }
   
   // Handle complex types.
@@ -624,8 +629,6 @@
     } else {
       bool isInvalid = false;
       T = ConvertDeclSpecToType(DS, D.getIdentifierLoc(), isInvalid);
-      if (T.isNull())
-        return T;
       if (isInvalid)
         D.setInvalidType(true);
     }
@@ -938,7 +941,7 @@
   assert(D.getIdentifier() == 0 && "Type name should have no identifier!");
   
   QualType T = GetTypeForDeclarator(D, S);
-  if (T.isNull())
+  if (D.isInvalidType())
     return true;
 
   // Check that there are no default arguments (C++ only).
