diff options
-rw-r--r-- | Sema/SemaExpr.cpp | 2 | ||||
-rw-r--r-- | include/clang/Basic/DiagnosticKinds.def | 2 | ||||
-rw-r--r-- | test/Parser/check-objc2-syntax-1.m | 10 |
3 files changed, 14 insertions, 0 deletions
diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp index b08695ff76..ed71934621 100644 --- a/Sema/SemaExpr.cpp +++ b/Sema/SemaExpr.cpp @@ -106,6 +106,8 @@ Sema::ExprResult Sema::ActOnIdentifierExpr(Scope *S, SourceLocation Loc, } if (isa<TypedefDecl>(D)) return Diag(Loc, diag::err_unexpected_typedef, II.getName()); + if (isa<ObjcInterfaceDecl>(D)) + return Diag(Loc, diag::err_unexpected_interface, II.getName()); assert(0 && "Invalid decl"); abort(); diff --git a/include/clang/Basic/DiagnosticKinds.def b/include/clang/Basic/DiagnosticKinds.def index f99239c1e0..043dcd4f34 100644 --- a/include/clang/Basic/DiagnosticKinds.def +++ b/include/clang/Basic/DiagnosticKinds.def @@ -392,6 +392,8 @@ DIAG(err_matching, ERROR, "to match this '%0'") /// Objective-C parser diagnostics +DIAG(err_unexpected_interface, ERROR, + "unexpected interface name '%0': expected expression") DIAG(err_objc_no_attributes_on_category, ERROR, "attributes may not be specified on a category") DIAG(err_objc_missing_end, ERROR, diff --git a/test/Parser/check-objc2-syntax-1.m b/test/Parser/check-objc2-syntax-1.m new file mode 100644 index 0000000000..b0b0e8a35e --- /dev/null +++ b/test/Parser/check-objc2-syntax-1.m @@ -0,0 +1,10 @@ +// RUN: clang -fsyntax-only -verify %s + +@interface Subclass ++ (int)magicNumber; +@end + +int main (void) { + return Subclass.magicNumber; // expected-error {{unexpected interface name 'Subclass': expected expression}} +} + |