else
Diag(Tok, diag::err_expected_ident_lparen); // Expected identifier or '('.
D.SetIdentifier(0, Tok.getLocation());
+ D.setInvalidType(true);
}
assert(D.isPastIdentifier() &&
// All of these full declarators require an identifier. If it doesn't have
// one, the ParsedFreeStandingDeclSpec action should be used.
if (II == 0) {
- Diag(D.getDeclSpec().getSourceRange().getBegin(),
- diag::err_declarator_need_ident,
- D.getDeclSpec().getSourceRange(), D.getSourceRange());
+ if (!D.getInvalidType()) // Reject this if we think it is valid.
+ Diag(D.getDeclSpec().getSourceRange().getBegin(),
+ diag::err_declarator_need_ident,
+ D.getDeclSpec().getSourceRange(), D.getSourceRange());
return 0;
}
int test4(x, x) int x; {} /* expected-error {{redefinition of parameter 'x'}} */
+
+// PR3031
+int (test5), ; // expected-error {{expected identifier or '('}}
+
int test() {
int a[10];
int b[10] = a; // expected-error {{initialization with "{...}" expected}}
-int +; // expected-error {{expected identifier or '('}} expected-error {{declarator requires an identifier}} expected-error {{parse error}}
+int +; // expected-error {{expected identifier or '('}} expected-error {{parse error}}
}
// RUN: clang %s -fsyntax-only -verify
void test() {
- char = 4; // expected-error {{expected identifier}} expected-error{{declarator requires an identifier}}
-
+ char = 4; // expected-error {{expected identifier}}
}