diff options
author | Chris Lattner <sabre@nondot.org> | 2008-04-06 06:47:48 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-04-06 06:47:48 +0000 |
commit | aaf9ddbeab08a43203cf6b9ca4986c8c6fe6fdc6 (patch) | |
tree | caadd21ecd2045055bbc8f5f60bab5ec3625f554 | |
parent | 50c6477a06186aeee50415fd90e5f71da68e8616 (diff) |
reject 'typedef int y; int test(x, y)'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49270 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/DiagnosticKinds.def | 2 | ||||
-rw-r--r-- | lib/Parse/ParseDecl.cpp | 6 | ||||
-rw-r--r-- | test/Parser/declarators.c | 4 | ||||
-rw-r--r-- | test/Sema/arg-duplicate.c | 1 |
4 files changed, 11 insertions, 2 deletions
diff --git a/include/clang/Basic/DiagnosticKinds.def b/include/clang/Basic/DiagnosticKinds.def index 243d56108b..1de1b6b80f 100644 --- a/include/clang/Basic/DiagnosticKinds.def +++ b/include/clang/Basic/DiagnosticKinds.def @@ -631,6 +631,8 @@ DIAG(err_first_label, ERROR, DIAG(err_unexpected_typedef, ERROR, "unexpected type name '%0': expected expression") +DIAG(err_unexpected_typedef_ident, ERROR, + "unexpected type name '%0': expected identifier") DIAG(err_undeclared_var_use, ERROR, "use of undeclared identifier '%0'") DIAG(warn_deprecated, WARNING, diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 9445a4862c..cae0cbb8ec 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -1415,8 +1415,12 @@ void Parser::ParseFunctionDeclaratorIdentifierList(SourceLocation LParenLoc, SkipUntil(tok::r_paren); return; } - + IdentifierInfo *ParmII = Tok.getIdentifierInfo(); + + // Reject 'typedef int y; int test(x, y)', but continue parsing. + if (Actions.isTypeName(*ParmII, CurScope)) + Diag(Tok, diag::err_unexpected_typedef_ident, ParmII->getName()); // Verify that the argument identifier has not already been mentioned. if (!ParamsSoFar.insert(ParmII)) { diff --git a/test/Parser/declarators.c b/test/Parser/declarators.c index 15ae7c6b57..410ac3686f 100644 --- a/test/Parser/declarators.c +++ b/test/Parser/declarators.c @@ -25,4 +25,8 @@ int test2(int *P, int A) { int Array[*(int*)P+A]; } +typedef int atype; +int test3(x, + atype /* expected-error {{unexpected type name 'atype': expected identifier}} */ + ) int x, atype; {} diff --git a/test/Sema/arg-duplicate.c b/test/Sema/arg-duplicate.c index b57fd950bf..81cb8fd9c2 100644 --- a/test/Sema/arg-duplicate.c +++ b/test/Sema/arg-duplicate.c @@ -1,6 +1,5 @@ // RUN: clang -fsyntax-only -verify %s -typedef int x; int f3(y, x, x) // expected-error {{redefinition of parameter}} int y, x, |