]> granicus.if.org Git - clang/commitdiff
Patch to prevent crash on use of objc2 syntax.
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 5 Dec 2007 18:16:33 +0000 (18:16 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 5 Dec 2007 18:16:33 +0000 (18:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44617 91177308-0d34-0410-b5e6-96231b3b80d8

Sema/SemaExpr.cpp
include/clang/Basic/DiagnosticKinds.def
test/Parser/check-objc2-syntax-1.m [new file with mode: 0644]

index b08695ff76fe1d36bf0b7ede3b86b4ed86883cbd..ed719346215e354cec5246341b55184cc1c53d15 100644 (file)
@@ -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();
index f99239c1e082ad423a8b7e7ee20599fb5db05692..043dcd4f34e2eca57813c736509d5b23c09bc36a 100644 (file)
@@ -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 (file)
index 0000000..b0b0e8a
--- /dev/null
@@ -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}}
+}
+