diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Basic/DiagnosticParseKinds.td | 3 | ||||
-rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 40 | ||||
-rw-r--r-- | clang/test/SemaCXX/member-expr.cpp | 13 |
3 files changed, 0 insertions, 56 deletions
diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td b/clang/include/clang/Basic/DiagnosticParseKinds.td index f79a04cb287..1df1713972a 100644 --- a/clang/include/clang/Basic/DiagnosticParseKinds.td +++ b/clang/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/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 8ef055f9c74..e9cb827bd99 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/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/clang/test/SemaCXX/member-expr.cpp b/clang/test/SemaCXX/member-expr.cpp index f5991a4634b..239aecff815 100644 --- a/clang/test/SemaCXX/member-expr.cpp +++ b/clang/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 '>'?}} -} -} |