diff --git a/clang/Sema/SemaExpr.cpp b/clang/Sema/SemaExpr.cpp index b08695ff76fe..ed719346215e 100644 --- a/clang/Sema/SemaExpr.cpp +++ b/clang/Sema/SemaExpr.cpp @@ -106,6 +106,8 @@ Sema::ExprResult Sema::ActOnIdentifierExpr(Scope *S, SourceLocation Loc, } if (isa(D)) return Diag(Loc, diag::err_unexpected_typedef, II.getName()); + if (isa(D)) + return Diag(Loc, diag::err_unexpected_interface, II.getName()); assert(0 && "Invalid decl"); abort(); diff --git a/clang/include/clang/Basic/DiagnosticKinds.def b/clang/include/clang/Basic/DiagnosticKinds.def index f99239c1e082..043dcd4f34e2 100644 --- a/clang/include/clang/Basic/DiagnosticKinds.def +++ b/clang/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/clang/test/Parser/check-objc2-syntax-1.m b/clang/test/Parser/check-objc2-syntax-1.m new file mode 100644 index 000000000000..b0b0e8a35e36 --- /dev/null +++ b/clang/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}} +} +