From: Kaelyn Uhrain Date: Thu, 26 Sep 2013 19:10:34 +0000 (+0000) Subject: Fix a bug in the typo correction replacement location. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e67ebbed3dfdd6950b1d56eab7cb66b9a209381b;p=clang Fix a bug in the typo correction replacement location. I noticed the wrong text was being replaced with the correction while working on expanding the "namespace-aware" typo correction to include classes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191450 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index d036612293..10ed15a290 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -3978,10 +3978,12 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, // arguments for the remaining parameters), don't make the call. if (Args.size() < NumArgsInProto) { if (Args.size() < MinArgs) { + MemberExpr *ME = dyn_cast(Fn); TypoCorrection TC; if (FDecl && (TC = TryTypoCorrectionForCall( *this, DeclarationNameInfo(FDecl->getDeclName(), - Fn->getLocStart()), + (ME ? ME->getMemberLoc() + : Fn->getLocStart())), Args))) { unsigned diag_id = MinArgs == NumArgsInProto && !Proto->isVariadic() diff --git a/test/FixIt/typo-location-bugs.cpp b/test/FixIt/typo-location-bugs.cpp new file mode 100644 index 0000000000..9c34a91d49 --- /dev/null +++ b/test/FixIt/typo-location-bugs.cpp @@ -0,0 +1,21 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: cp %s %t +// RUN: not %clang_cc1 -fsyntax-only -fixit -x c++ %t +// RUN: %clang_cc1 -fsyntax-only -pedantic -Werror -x c++ %t + +namespace dcl_fct_default_p10 { +struct A { + virtual void f(int a = 7); // expected-note{{'A::f' declared here}} +}; + +struct B : public A { + void f(int a); +}; + +void m() { + B* pb = new B; + A* pa = pb; + pa->f(); // OK, calls pa->B::f(7) + pb->f(); // expected-error{{too few arguments to function call, expected 1, have 0; did you mean 'A::f'?}} +} +}