aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Parse/ParseObjc.cpp7
-rw-r--r--test/Parser/missing-end-2.m19
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp
index f54c3eef07..a8f5e222dc 100644
--- a/lib/Parse/ParseObjc.cpp
+++ b/lib/Parse/ParseObjc.cpp
@@ -402,7 +402,12 @@ void Parser::ParseObjCInterfaceDeclList(Decl *interfaceDecl,
// Skip until we see an '@' or '}' or ';'.
SkipUntil(tok::r_brace, tok::at);
break;
-
+
+ case tok::objc_implementation:
+ Diag(Tok, diag::err_objc_missing_end);
+ ConsumeToken();
+ break;
+
case tok::objc_required:
case tok::objc_optional:
// This is only valid on protocols.
diff --git a/test/Parser/missing-end-2.m b/test/Parser/missing-end-2.m
new file mode 100644
index 0000000000..63dc965583
--- /dev/null
+++ b/test/Parser/missing-end-2.m
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// rdar: //7824372
+
+@interface A
+-(void) im0;
+
+@implementation A // expected-error {{missing @end}}
+@end
+
+@interface B {
+}
+
+@implementation B // expected-error {{missing @end}}
+@end
+
+@interface C
+@property int P;
+
+@implementation C // expected-error 2 {{missing @end}}