]> granicus.if.org Git - clang/commitdiff
Diagnose miuse of property dot-syntax instead of crashing.
authorFariborz Jahanian <fjahanian@apple.com>
Mon, 22 Mar 2010 21:02:34 +0000 (21:02 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Mon, 22 Mar 2010 21:02:34 +0000 (21:02 +0000)
(radar 7634653).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99210 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaExprObjC.cpp
test/SemaObjC/property-expression-error.m

index f1b2d1133f283be70004075a31f91e4dbb2986e7..ddd87941e24c2988600b0e0eedfa74b4f1f22a75 100644 (file)
@@ -2332,6 +2332,7 @@ def warn_unused_call : Warning<
 
 def err_incomplete_type_used_in_type_trait_expr : Error<
   "incomplete type %0 used in type trait expression">;
+def err_expected_ident_or_lparen : Error<"expected identifier or '('">;
   
 // inline asm.
 def err_asm_wide_character : Error<"wide string is invalid in 'asm'">;
index c98ba435c78945ac631e64344f3ec40db80c01ca..d5a22ca15fae80d2cf3370beac02f448be5a67d8 100644 (file)
@@ -289,7 +289,10 @@ Action::OwningExprResult Sema::ActOnClassPropertyRefExpr(
 
   IdentifierInfo *receiverNamePtr = &receiverName;
   ObjCInterfaceDecl *IFace = getObjCInterfaceDecl(receiverNamePtr);
-
+  if (!IFace) {
+    Diag(receiverNameLoc, diag::err_expected_ident_or_lparen);
+    return ExprError();
+  }
   // Search for a declared property first.
 
   Selector Sel = PP.getSelectorTable().getNullarySelector(&propertyName);
index b59c1b154b9d7efd29a8251f41dd1c7e33d60479..6b5cf047dc171ad94a65ab8f189b5110323f10f0 100644 (file)
@@ -16,3 +16,8 @@ int main() {
        &object.index; // expected-error {{address of property expression requested}}
        return 0;
 }
+
+typedef int Foo;
+void test() {
+  Foo.x;       // expected-error {{expected identifier or '('}}
+}