aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2013-03-19 20:27:40 +0000
committerFariborz Jahanian <fjahanian@apple.com>2013-03-19 20:27:40 +0000
commit5bba867123a788085b677fb4b12f21917dec5c51 (patch)
tree0ad238c482525ad52f5ae0ab280f429acf9df265
parentc30eb51b639e132af458fbf7647eefae6edb93ac (diff)
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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177435 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/DiagnosticParseKinds.td2
-rw-r--r--lib/Parse/ParseObjc.cpp4
-rw-r--r--test/Parser/missing-closing-rbrace.m6
3 files changed, 12 insertions, 0 deletions
diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td
index 2656a8bb8b..55afaa5455 100644
--- a/include/clang/Basic/DiagnosticParseKinds.td
+++ b/include/clang/Basic/DiagnosticParseKinds.td
@@ -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<
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp
index ddb6a707f5..b95b41f722 100644
--- a/lib/Parse/ParseObjc.cpp
+++ b/lib/Parse/ParseObjc.cpp
@@ -1288,6 +1288,10 @@ void Parser::ParseObjCClassInstanceVariables(Decl *interfaceDecl,
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;
diff --git a/test/Parser/missing-closing-rbrace.m b/test/Parser/missing-closing-rbrace.m
new file mode 100644
index 0000000000..ae1291e1e3
--- /dev/null
+++ b/test/Parser/missing-closing-rbrace.m
@@ -0,0 +1,6 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// rdar: //6854840
+@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'}}