From 9ce5135c15b3dfd5ee666b843f5df8ffb3a5038f Mon Sep 17 00:00:00 2001
From: Kaelyn Uhrain <rikka@google.com>
Date: Tue, 5 Nov 2013 18:28:21 +0000
Subject: [PATCH] Revert "Try to correct a mistyped "-" or ">" to "->" for some
 C++ cases."

Revert this patch until cases of rejected valid code (e.g. identifiers
that require ADL to be resolved properly) are fixed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194088 91177308-0d34-0410-b5e6-96231b3b80d8
---
 include/clang/Basic/DiagnosticParseKinds.td |  3 --
 lib/Parse/ParseExpr.cpp                     | 40 ---------------------
 test/SemaCXX/member-expr.cpp                | 13 -------
 3 files changed, 56 deletions(-)

diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td
index f79a04cb287..1df1713972a 100644
--- a/include/clang/Basic/DiagnosticParseKinds.td
+++ b/include/clang/Basic/DiagnosticParseKinds.td
@@ -499,9 +499,6 @@ def ext_abstract_pack_declarator_parens : ExtWarn<
 def err_function_is_not_record : Error<
   "unexpected '%select{.|->}0' in function call; perhaps remove the "
   "'%select{.|->}0'?">;
-def err_mistyped_arrow_in_member_access : Error<
-  "use of undeclared identifier %0; did you mean '->' instead of "
-  "'%select{-|>}1'?">;
 
 // C++ derived classes
 def err_dup_virtual : Error<"duplicate 'virtual' in base specifier">;
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index 8ef055f9c74..e9cb827bd99 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -166,46 +166,6 @@ ExprResult Parser::ParseAssignmentExpression(TypeCastState isTypeCast) {
   ExprResult LHS = ParseCastExpression(/*isUnaryExpression=*/false,
                                        /*isAddressOfOperand=*/false,
                                        isTypeCast);
-
-  // Check for a possible typo of "-" or ">" instead of "->" after a
-  // pointer to a struct or class, while recovery is still possible.
-  if (LHS.isUsable() && (Tok.is(tok::minus) || Tok.is(tok::greater))) {
-    QualType LHSType = LHS.get()->getType();
-    const RecordType *Pointee =
-        LHSType->isPointerType()
-            ? LHSType->getPointeeType()->getAsStructureType()
-            : 0;
-    const RecordDecl *RD = Pointee ? Pointee->getDecl() : 0;
-    const Token &NextTok = NextToken();
-    if (RD && NextTok.is(tok::identifier)) {
-      UnqualifiedId Name;
-      CXXScopeSpec ScopeSpec;
-      SourceLocation TemplateKWLoc;
-      NoTypoCorrectionCCC NoTCValidator;
-      Name.setIdentifier(NextTok.getIdentifierInfo(), NextTok.getLocation());
-      Sema::SFINAETrap Trap(Actions);
-      ExprResult Res =
-          Actions.ActOnIdExpression(getCurScope(), ScopeSpec, TemplateKWLoc,
-                                    Name, false, false, &NoTCValidator);
-      if (Res.isInvalid()) {
-        Token OpTok = Tok;
-        Tok.setKind(tok::arrow);
-        PP.EnableBacktrackAtThisPos();
-        Res = ParsePostfixExpressionSuffix(LHS);
-        if (Res.isUsable()) {
-          LHS = Res;
-          PP.CommitBacktrackedTokens();
-          Diag(OpTok, diag::err_mistyped_arrow_in_member_access)
-              << NextTok.getIdentifierInfo() << OpTok.is(tok::greater)
-              << FixItHint::CreateReplacement(OpTok.getLocation(), "->");
-        } else {
-          Tok = OpTok;
-          PP.Backtrack();
-        }
-      }
-    }
-  }
-
   return ParseRHSOfBinaryExpression(LHS, prec::Assignment);
 }
 
diff --git a/test/SemaCXX/member-expr.cpp b/test/SemaCXX/member-expr.cpp
index f5991a4634b..239aecff815 100644
--- a/test/SemaCXX/member-expr.cpp
+++ b/test/SemaCXX/member-expr.cpp
@@ -224,16 +224,3 @@ namespace pr16676 {
         .i;  // expected-error {{member reference type 'pr16676::S *' is a pointer; maybe you meant to use '->'}}
   }
 }
-
-namespace PR9054 {
-struct Foo {
-  void bar(int);
-  int fiz;
-};
-
-int test(struct Foo *foo) {
-  foo-bar(5);  // expected-error {{use of undeclared identifier 'bar'; did you mean '->' instead of '-'?}}
-  foo>baz(4);  // expected-error-re {{use of undeclared identifier 'baz'$}}
-  return foo>fiz;  // expected-error {{use of undeclared identifier 'fiz'; did you mean '->' instead of '>'?}}
-}
-}
-- 
GitLab