зеркало из https://github.com/microsoft/clang-1.git
mark the declspec as invalid when we recover instead of forcing to int,
this allows downstream diags to be properly silenced. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68917 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
798d5696ef
Коммит
33c6ebef6f
|
@ -681,9 +681,10 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS,
|
|||
}
|
||||
|
||||
// Since this is almost certainly an invalid type name, emit a
|
||||
// diagnostic that says it, eat the token, and pretend we saw an 'int'.
|
||||
// diagnostic that says it, eat the token, and mark the declspec as
|
||||
// invalid.
|
||||
Diag(Loc, diag::err_unknown_typename) << Tok.getIdentifierInfo();
|
||||
DS.SetTypeSpecType(DeclSpec::TST_int, Loc, PrevSpec);
|
||||
DS.SetTypeSpecType(DeclSpec::TST_error, Loc, PrevSpec);
|
||||
DS.SetRangeEnd(Tok.getLocation());
|
||||
ConsumeToken();
|
||||
|
||||
|
@ -691,7 +692,6 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS,
|
|||
// avoid rippling error messages on subsequent uses of the same type,
|
||||
// could be useful if #include was forgotten.
|
||||
|
||||
// FIXME: Mark DeclSpec as invalid.
|
||||
goto DoneWithDeclSpec;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ char ((((*X))));
|
|||
|
||||
void (*signal(int, void (*)(int)))(int);
|
||||
|
||||
int a, ***C, * const D, B(int);
|
||||
int aaaa, ***C, * const D, B(int);
|
||||
|
||||
int *A;
|
||||
|
||||
|
@ -41,7 +41,7 @@ int (test5), ; // expected-error {{expected identifier or '('}}
|
|||
// PR3963 & rdar://6759604 - test error recovery for mistyped "typenames".
|
||||
|
||||
foo_t *d; // expected-error {{unknown type name 'foo_t'}}
|
||||
foo_t a = 4; // expected-error {{unknown type name 'foo_t'}}
|
||||
foo_t a; // expected-error {{unknown type name 'foo_t'}}
|
||||
int test6() { return a; } // a should be declared.
|
||||
|
||||
// Use of tagged type without tag. rdar://6783347
|
||||
|
@ -56,6 +56,8 @@ float *test7() {
|
|||
return &b.y; // expected-warning {{incompatible pointer types returning 'int *', expected 'float *'}}
|
||||
}
|
||||
|
||||
struct xyz test8() { return a; } // a should be be marked invalid, no diag.
|
||||
|
||||
|
||||
// Verify that implicit int still works.
|
||||
static f; // expected-warning {{type specifier missing, defaults to 'int'}}
|
||||
|
|
Загрузка…
Ссылка в новой задаче