diff options
author | Chris Lattner <sabre@nondot.org> | 2008-04-06 07:49:57 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-04-06 07:49:57 +0000 |
commit | 784903e4c1cc560943db5960faf2904b80ae4460 (patch) | |
tree | 8afd0137a7ba2645af8cc934f927f42d0acb6e72 | |
parent | 371ed4e7a9301b22ccb19064cede0947384826e8 (diff) | |
download | bcm5719-llvm-784903e4c1cc560943db5960faf2904b80ae4460.tar.gz bcm5719-llvm-784903e4c1cc560943db5960faf2904b80ae4460.zip |
move a semantic check out of the parser into sema.
llvm-svn: 49273
-rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 13 | ||||
-rw-r--r-- | clang/lib/Sema/SemaType.cpp | 25 |
2 files changed, 22 insertions, 16 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 3ea0d9f4c17..0eb5c1f2576 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -1304,19 +1304,6 @@ void Parser::ParseFunctionDeclarator(SourceLocation LParenLoc, Declarator &D) { if (Tok.is(tok::kw___attribute)) ParmDecl.AddAttributes(ParseAttributes()); - // Verify C99 6.7.5.3p2: The only SCS allowed is 'register'. - if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified && - DS.getStorageClassSpec() != DeclSpec::SCS_register) { - Diag(DS.getStorageClassSpecLoc(), - diag::err_invalid_storage_class_in_func_decl); - DS.ClearStorageClassSpecs(); - } - if (DS.isThreadSpecified()) { - Diag(DS.getThreadSpecLoc(), - diag::err_invalid_storage_class_in_func_decl); - DS.ClearStorageClassSpecs(); - } - // Remember this parsed parameter in ParamInfo. IdentifierInfo *ParmII = ParmDecl.getIdentifier(); diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index d46e9975677..725da223345 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -504,10 +504,29 @@ Sema::TypeResult Sema::ActOnTypeName(Scope *S, Declarator &D) { return T.getAsOpaquePtr(); } -// Called from Parser::ParseParenDeclarator(). +/// ActOnParamDeclaratorType - Called from Parser::ParseFunctionDeclarator() +/// when analyzing function prototypes. +/// +/// Note: parameters have identifiers, but we don't care about them here, we +/// just want the type converted. +/// Sema::TypeResult Sema::ActOnParamDeclaratorType(Scope *S, Declarator &D) { - // Note: parameters have identifiers, but we don't care about them here, we - // just want the type converted. + DeclSpec &DS = D.getDeclSpec(); + + // Verify C99 6.7.5.3p2: The only SCS allowed is 'register'. + if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified && + DS.getStorageClassSpec() != DeclSpec::SCS_register) { + Diag(DS.getStorageClassSpecLoc(), + diag::err_invalid_storage_class_in_func_decl); + DS.ClearStorageClassSpecs(); + } + if (DS.isThreadSpecified()) { + Diag(DS.getThreadSpecLoc(), + diag::err_invalid_storage_class_in_func_decl); + DS.ClearStorageClassSpecs(); + } + + QualType T = GetTypeForDeclarator(D, S); assert(!T.isNull() && "GetTypeForDeclarator() returned null type"); |