move a semantic check out of the parser into sema.

llvm-svn: 49273
This commit is contained in:
Chris Lattner 2008-04-06 07:49:57 +00:00
parent 371ed4e7a9
commit 784903e4c1
2 changed files with 22 additions and 16 deletions

View File

@ -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();

View File

@ -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");