[cfe-commits] r158178 - in /cfe/trunk: lib/Sema/SemaDecl.cpp test/FixIt/fixit.cpp
Douglas Gregor
dgregor at apple.com
Thu Jun 7 17:15:07 PDT 2012
On Jun 7, 2012, at 4:57 PM, Kaelyn Uhrain wrote:
> Author: rikka
> Date: Thu Jun 7 18:57:12 2012
> New Revision: 158178
>
> URL: http://llvm.org/viewvc/llvm-project?rev=158178&view=rev
> Log:
> Teach the FixIt in DiagnoseInvalidRedeclaration how to replace the written
> nested name specifiers in addition to the function's identifier when the
> correction has a different nested name specifier.
>
> Modified:
> cfe/trunk/lib/Sema/SemaDecl.cpp
> cfe/trunk/test/FixIt/fixit.cpp
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=158178&r1=158177&r2=158178&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Thu Jun 7 18:57:12 2012
> @@ -4742,15 +4742,19 @@
> }
> }
>
> - if (Correction)
> - SemaRef.Diag(NewFD->getLocation(), DiagMsg)
> + if (Correction) {
> + SourceRange FixItLoc(NewFD->getLocation());
> + CXXScopeSpec &SS = ExtraArgs.D.getCXXScopeSpec();
> + if (Correction.getCorrectionSpecifier() && SS.isValid())
> + FixItLoc.setBegin(SS.getBeginLoc());
> + SemaRef.Diag(NewFD->getLocStart(), DiagMsg)
> << Name << NewDC << Correction.getQuoted(SemaRef.getLangOpts())
> << FixItHint::CreateReplacement(
> - NewFD->getLocation(),
> - Correction.getAsString(SemaRef.getLangOpts()));
> - else
> + FixItLoc, Correction.getAsString(SemaRef.getLangOpts()));
Don't you also need to update D.getCXXScopeSpec() to the correction specifier?
- Doug
> + } else {
> SemaRef.Diag(NewFD->getLocation(), DiagMsg)
> << Name << NewDC << NewFD->getLocation();
> + }
>
> bool NewFDisConst = false;
> if (CXXMethodDecl *NewMD = dyn_cast<CXXMethodDecl>(NewFD))
>
> Modified: cfe/trunk/test/FixIt/fixit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/FixIt/fixit.cpp?rev=158178&r1=158177&r2=158178&view=diff
> ==============================================================================
> --- cfe/trunk/test/FixIt/fixit.cpp (original)
> +++ cfe/trunk/test/FixIt/fixit.cpp Thu Jun 7 18:57:12 2012
> @@ -242,3 +242,21 @@
> }
>
> } // namespace arrow_suggest
> +
> +// Make sure fixing namespace-qualified identifiers functions properly with
> +// namespace-aware typo correction/
> +namespace redecl_typo {
> +namespace Foo {
> + void BeEvil(); // expected-note {{'BeEvil' declared here}}
> +}
> +namespace Bar {
> + namespace Foo {
> + bool isGood(); // expected-note {{'Bar::Foo::isGood' declared here}}
> + void beEvil();
> + }
> +}
> +bool Foo::isGood() { // expected-error {{out-of-line definition of 'isGood' does not match any declaration in namespace 'redecl_typo::Foo'; did you mean 'Bar::Foo::isGood'?}}
> + return true;
> +}
> +void Foo::beEvil() {} // expected-error {{out-of-line definition of 'beEvil' does not match any declaration in namespace 'redecl_typo::Foo'; did you mean 'BeEvil'?}}
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list