]> granicus.if.org Git - clang/commitdiff
Centralize the check for a tag definition in a Declarator::PrototypeContext inside...
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 28 Jun 2011 03:01:15 +0000 (03:01 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 28 Jun 2011 03:01:15 +0000 (03:01 +0000)
No functionality change.

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

lib/Sema/SemaDecl.cpp
lib/Sema/SemaDeclObjC.cpp
lib/Sema/SemaType.cpp

index adfc6f950137ee305f9e9dfd9c499b36f43d0c9d..25569be7b2893b738b8b7711defb93a160343760 100644 (file)
@@ -5971,21 +5971,13 @@ Decl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
 
   DiagnoseFunctionSpecifiers(D);
 
-  TagDecl *OwnedDecl = 0;
-  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S, &OwnedDecl);
+  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
   QualType parmDeclType = TInfo->getType();
 
   if (getLangOptions().CPlusPlus) {
     // Check that there are no default arguments inside the type of this
     // parameter.
     CheckExtraCXXDefaultArguments(D);
-     
-    if (OwnedDecl && OwnedDecl->isDefinition()) {
-      // C++ [dcl.fct]p6:
-      //   Types shall not be defined in return or parameter types.
-      Diag(OwnedDecl->getLocation(), diag::err_type_defined_in_param_type)
-        << Context.getTypeDeclType(OwnedDecl);
-    }
     
     // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).
     if (D.getCXXScopeSpec().isSet()) {
index 3052b826b65330fb65db7850cf01adce6bd09e37..a3f53ec234a654bfe1d5f4a3efc41814836314ab 100644 (file)
@@ -2607,15 +2607,8 @@ Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {
   if (getLangOptions().CPlusPlus)
     CheckExtraCXXDefaultArguments(D);
   
-  TagDecl *OwnedDecl = 0;
-  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S, &OwnedDecl);
+  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
   QualType ExceptionType = TInfo->getType();
-  
-  if (getLangOptions().CPlusPlus && OwnedDecl && OwnedDecl->isDefinition()) {
-    // Objective-C++: Types shall not be defined in exception types.
-    Diag(OwnedDecl->getLocation(), diag::err_type_defined_in_param_type)
-      << Context.getTypeDeclType(OwnedDecl);
-  }
 
   VarDecl *New = BuildObjCExceptionDecl(TInfo, ExceptionType,
                                         D.getSourceRange().getBegin(),
index 489e50dc1c549725c3eeca1331eca60ba22fd591..a6905302790a0172e335dca9a8cf339c4086cd56 100644 (file)
@@ -2467,7 +2467,6 @@ TypeSourceInfo *Sema::GetTypeForDeclarator(Declarator &D, Scope *S,
     // or enumeration in a type-specifier-seq.
     switch (D.getContext()) {
     case Declarator::FileContext:
-    case Declarator::PrototypeContext:
     case Declarator::ObjCPrototypeContext:
     case Declarator::KNRTypeListContext:
     case Declarator::TypeNameContext:
@@ -2481,6 +2480,12 @@ TypeSourceInfo *Sema::GetTypeForDeclarator(Declarator &D, Scope *S,
     case Declarator::AliasDeclContext:
     case Declarator::AliasTemplateContext:
       break;
+    case Declarator::PrototypeContext:
+      // C++ [dcl.fct]p6:
+      //   Types shall not be defined in return or parameter types.
+      Diag(OwnedTagDeclInternal->getLocation(), diag::err_type_defined_in_param_type)
+        << Context.getTypeDeclType(OwnedTagDeclInternal);
+      break;
     case Declarator::ConditionContext:
       // C++ 6.4p2:
       // The type-specifier-seq shall not contain typedef and shall not declare