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