r177435 - Objective-C [qoi]: Provide improved parse diagnostics when

Jordan Rose jordan_rose at apple.com
Tue Mar 19 13:42:04 PDT 2013


Would it make sense to not just continue but to pretend instead that the '}' is there? I feel like that will give us better recovery. (You'd eliminate those last two errors: "expected '}'" and "missing '@end'".)

Jordan

On Mar 19, 2013, at 13:27 , Fariborz Jahanian <fjahanian at apple.com> wrote:

> Author: fjahanian
> Date: Tue Mar 19 15:27:40 2013
> New Revision: 177435
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=177435&view=rev
> Log:
> Objective-C [qoi]: Provide improved parse diagnostics when
> closing rbrace is missing in an ObjC class declaration.
> Can do beter than this, but it involves addition of
> overhead which will be present in correct code.
> // rdar://6854840
> 
> Added:
>    cfe/trunk/test/Parser/missing-closing-rbrace.m
> Modified:
>    cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
>    cfe/trunk/lib/Parse/ParseObjc.cpp
> 
> Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=177435&r1=177434&r2=177435&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Tue Mar 19 15:27:40 2013
> @@ -406,6 +406,8 @@ def err_missing_catch_finally : Error<
> def err_objc_concat_string : Error<"unexpected token after Objective-C string">;
> def err_expected_objc_container : Error<
>   "'@end' must appear in an Objective-C context">;
> +def err_objc_unexpected_atend : Error<
> +  "'@end' appears where closing brace '}' is expected">;
> def error_property_ivar_decl : Error<
>   "property synthesize requires specification of an ivar">;
> def err_synthesized_property_name : Error<
> 
> Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=177435&r1=177434&r2=177435&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseObjc.cpp Tue Mar 19 15:27:40 2013
> @@ -1288,6 +1288,10 @@ void Parser::ParseObjCClassInstanceVaria
>         visibility = Tok.getObjCKeywordID();
>         ConsumeToken();
>         continue;
> +      case tok::objc_end:
> +        Diag(Tok, diag::err_objc_unexpected_atend);
> +        ConsumeToken();
> +        continue;
>       default:
>         Diag(Tok, diag::err_objc_illegal_visibility_spec);
>         continue;
> 
> Added: cfe/trunk/test/Parser/missing-closing-rbrace.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/missing-closing-rbrace.m?rev=177435&view=auto
> ==============================================================================
> --- cfe/trunk/test/Parser/missing-closing-rbrace.m (added)
> +++ cfe/trunk/test/Parser/missing-closing-rbrace.m Tue Mar 19 15:27:40 2013
> @@ -0,0 +1,6 @@
> +// RUN: %clang_cc1 -fsyntax-only -verify %s
> +// rdar: //6854840
> + at interface A {@end // expected-error {{'@end' appears where closing brace '}' is expected}}\
> +                   // expected-note {{to match this '{'}}\
> +                   // expected-note {{class started here}}
> +		   // expected-error {{expected '}'}} expected-error {{missing '@end'}}
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list