r191450 - Fix a bug in the typo correction replacement location.
Kaelyn Uhrain
rikka at google.com
Thu Sep 26 12:10:34 PDT 2013
Author: rikka
Date: Thu Sep 26 14:10:34 2013
New Revision: 191450
URL: http://llvm.org/viewvc/llvm-project?rev=191450&view=rev
Log:
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.
Added:
cfe/trunk/test/FixIt/typo-location-bugs.cpp
Modified:
cfe/trunk/lib/Sema/SemaExpr.cpp
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=191450&r1=191449&r2=191450&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Thu Sep 26 14:10:34 2013
@@ -3978,10 +3978,12 @@ Sema::ConvertArgumentsForCall(CallExpr *
// arguments for the remaining parameters), don't make the call.
if (Args.size() < NumArgsInProto) {
if (Args.size() < MinArgs) {
+ MemberExpr *ME = dyn_cast<MemberExpr>(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()
Added: cfe/trunk/test/FixIt/typo-location-bugs.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/FixIt/typo-location-bugs.cpp?rev=191450&view=auto
==============================================================================
--- cfe/trunk/test/FixIt/typo-location-bugs.cpp (added)
+++ cfe/trunk/test/FixIt/typo-location-bugs.cpp Thu Sep 26 14:10:34 2013
@@ -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'?}}
+}
+}
More information about the cfe-commits
mailing list