diff options
author | Kaelyn Uhrain <rikka@google.com> | 2011-08-18 21:57:36 +0000 |
---|---|---|
committer | Kaelyn Uhrain <rikka@google.com> | 2011-08-18 21:57:36 +0000 |
commit | d2c8972726b14313508684245aa994cccbcef248 (patch) | |
tree | dd7ae7c3256b2ce5724ac50e17d62ab74dabfc04 | |
parent | 3366582a026ce8044d58352088df358a9e987508 (diff) |
Don't accept a typo correction if the corrected identifier is the same as the
uncorrected identifier. Fixes a problem pointed out by Eli.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137987 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 3 | ||||
-rw-r--r-- | test/SemaCXX/function-redecl.cpp | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 898fca4203..106363f6d7 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -4235,7 +4235,8 @@ static void DiagnoseInvalidRedeclaration(Sema &S, FunctionDecl *NewFD, } // If the qualified name lookup yielded nothing, try typo correction } else if ((Correction = S.CorrectTypo(Prev.getLookupNameInfo(), - Prev.getLookupKind(), 0, 0, DC))) { + Prev.getLookupKind(), 0, 0, DC)) && + Correction.getCorrection() != Name) { DiagMsg = isFriendDecl ? diag::err_no_matching_local_friend_suggest : diag::err_member_def_does_not_match_suggest; for (TypoCorrection::decl_iterator CDecl = Correction.begin(), diff --git a/test/SemaCXX/function-redecl.cpp b/test/SemaCXX/function-redecl.cpp index 8c734945f2..2ea407cdf5 100644 --- a/test/SemaCXX/function-redecl.cpp +++ b/test/SemaCXX/function-redecl.cpp @@ -50,3 +50,7 @@ class B { void B::Notypocorrection(int) { // expected-error {{out-of-line definition of 'Notypocorrection' does not match any declaration in 'B'; did you mean 'typocorrection'}} } + +struct X { int f(); }; +struct Y : public X {}; +int Y::f() { return 3; } // expected-error {{out-of-line definition of 'f' does not match any declaration in 'Y'}} |