Diagnose misuse of '.*' and '->*' operators during parse
instead of crashing in code gen.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84968 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index 8be89a8..7d056fd 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -340,7 +340,18 @@
       // Eat the colon.
       ColonLoc = ConsumeToken();
     }
-
+    
+    if ((OpToken.is(tok::periodstar) || OpToken.is(tok::arrowstar))
+         && Tok.is(tok::identifier)) {
+      CXXScopeSpec SS;
+      if (Actions.getTypeName(*Tok.getIdentifierInfo(),
+                                           Tok.getLocation(), CurScope, &SS)) {
+        const char *Opc = OpToken.is(tok::periodstar) ? "'.*'" : "'->*'";
+        Diag(OpToken, diag::err_pointer_to_member_type) << Opc;
+        return ExprError();
+      }
+        
+    }
     // Parse another leaf here for the RHS of the operator.
     // ParseCastExpression works here because all RHS expressions in C have it
     // as a prefix, at least. However, in C++, an assignment-expression could