summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-04-06 07:49:57 +0000
committerChris Lattner <sabre@nondot.org>2008-04-06 07:49:57 +0000
commit784903e4c1cc560943db5960faf2904b80ae4460 (patch)
tree8afd0137a7ba2645af8cc934f927f42d0acb6e72
parent371ed4e7a9301b22ccb19064cede0947384826e8 (diff)
downloadbcm5719-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.cpp13
-rw-r--r--clang/lib/Sema/SemaType.cpp25
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");
OpenPOWER on IntegriCloud