Diagnose miuse of property dot-syntax instead of crashing.
(radar 7634653).


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99210 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td
index f1b2d11..ddd8794 100644
--- a/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/include/clang/Basic/DiagnosticSemaKinds.td
@@ -2332,6 +2332,7 @@
 
 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'">;
diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp
index c98ba43..d5a22ca 100644
--- a/lib/Sema/SemaExprObjC.cpp
+++ b/lib/Sema/SemaExprObjC.cpp
@@ -289,7 +289,10 @@
 
   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);
diff --git a/test/SemaObjC/property-expression-error.m b/test/SemaObjC/property-expression-error.m
index b59c1b1..6b5cf04 100644
--- a/test/SemaObjC/property-expression-error.m
+++ b/test/SemaObjC/property-expression-error.m
@@ -16,3 +16,8 @@
 	&object.index; // expected-error {{address of property expression requested}}
 	return 0;
 }
+
+typedef int Foo;
+void test() {
+  Foo.x;	// expected-error {{expected identifier or '('}}
+}