From: Kaelyn Takata Date: Wed, 28 Jan 2015 00:46:09 +0000 (+0000) Subject: Use the real CXXScopeSpec when setting the correction SourceRange. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=00ba123e1d1cc9ac0ed463fde6442e11ca08cff8;p=clang Use the real CXXScopeSpec when setting the correction SourceRange. Otherwise, in the most important case and the only case where SS and TempSS are different (which is when the CXXScopeSpec should be dropped, and TempSS is NULL) the wrong SourceRange will be used in the fixit for the typo correction. Fixes the remaining issue in PR20626. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@227278 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index c4fe0589c4..d75eb2c242 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -3587,7 +3587,7 @@ retry_lookup: QualifiedResults.push_back(Candidate); break; } - Candidate.setCorrectionRange(TempSS, Result.getLookupNameInfo()); + Candidate.setCorrectionRange(SS.get(), Result.getLookupNameInfo()); return true; } return false; diff --git a/test/FixIt/typo-location-bugs.cpp b/test/FixIt/typo-location-bugs.cpp index e44664d49a..c7111a8010 100644 --- a/test/FixIt/typo-location-bugs.cpp +++ b/test/FixIt/typo-location-bugs.cpp @@ -34,3 +34,16 @@ void test(B b) { b.f(1); // expected-error{{too many arguments to function call, expected 0, have 1; did you mean 'A::f'?}} } } + +namespace PR20626 { +class A { +public: + void Foo(){}; // expected-note{{'Foo' declared here}} +}; +class B {}; +class C : public A, public B { + void Run() { + B::Foo(); // expected-error{{no member named 'Foo' in 'PR20626::B'; did you mean simply 'Foo'?}} + } +}; +}