diff options
-rw-r--r-- | lib/Parse/ParseDecl.cpp | 6 | ||||
-rw-r--r-- | test/Parser/declarators.c | 6 |
2 files changed, 7 insertions, 5 deletions
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index ae00ada311..5b8963f892 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -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; } diff --git a/test/Parser/declarators.c b/test/Parser/declarators.c index 0b3f5cecd5..d8cd5b6586 100644 --- a/test/Parser/declarators.c +++ b/test/Parser/declarators.c @@ -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'}} |