[PATCH] D16949: Fix for: Bug 5941 - improve diagnostic for * vs & confusion

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 16 11:38:02 PST 2016


Since this is just a wording change, presumably the diagnostic is already
tested in an existing file - perhaps you could exetendi that test to cover
this functionality (we try not to add new test files too much - better to
test functionality once/in one place as much as possible (both for ease of
reading/updating/understanding the test suite, and for speed of execution
(process startup time makes up a significant portion of the test execution
time, so reducing the total number of test files/commands is useful there)))

On Sat, Feb 13, 2016 at 8:32 PM, Ryan Yee via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> ryee88 updated this revision to Diff 47925.
> ryee88 added a comment.
>
> Sorry-- re-uploading the diff. Didn't notice I dropped the code changes.
>
>
> http://reviews.llvm.org/D16949
>
> Files:
>   include/clang/Basic/DiagnosticSemaKinds.td
>   lib/Sema/SemaOverload.cpp
>   test/Parser/overloaded-pointer-vs-reference-hint.cpp
>
> Index: test/Parser/overloaded-pointer-vs-reference-hint.cpp
> ===================================================================
> --- /dev/null
> +++ test/Parser/overloaded-pointer-vs-reference-hint.cpp
> @@ -0,0 +1,15 @@
> +// RUN: %clang_cc1 %s -fsyntax-only -verify
> +
> +class A;
> +
> +void f0(A *a); // expected-note {{candidate function not viable: cannot
> convert argument of incomplete type 'A' to 'A *' for 1st argument; take the
> address of the argument with &}}
> +void f1(A &a) {
> +  f0(a); // expected-error {{no matching function for call to 'f0'}}
> +}
> +
> +void f2(A &a); // expected-note {{candidate function not viable: cannot
> convert argument of incomplete type 'A *' to 'A &' for 1st argument;
> dereference the argument with *}}
> +void f3(A *a) {
> +  f2(a); // expected-error {{no matching function for call to 'f2'}}
> +}
> +
> +
> Index: lib/Sema/SemaOverload.cpp
> ===================================================================
> --- lib/Sema/SemaOverload.cpp
> +++ lib/Sema/SemaOverload.cpp
> @@ -9104,10 +9104,13 @@
>    if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
>      TempFromTy = PTy->getPointeeType();
>    if (TempFromTy->isIncompleteType()) {
> +    // Emit the generic diagnostic and, optionally, add the hints to it.
>      S.Diag(Fn->getLocation(),
> diag::note_ovl_candidate_bad_conv_incomplete)
>        << (unsigned) FnKind << FnDesc
>        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
> -      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
> +      << FromTy << ToTy << (unsigned) isObjectArgument << I+1
> +      << (unsigned) (Cand->Fix.Kind);
> +
>      MaybeEmitInheritedConstructorNote(S, Fn);
>      return;
>    }
> Index: include/clang/Basic/DiagnosticSemaKinds.td
> ===================================================================
> --- include/clang/Basic/DiagnosticSemaKinds.td
> +++ include/clang/Basic/DiagnosticSemaKinds.td
> @@ -3189,7 +3189,12 @@
>      "function (the implicit move assignment operator)|"
>      "constructor (inherited)}0%1 "
>      "not viable: cannot convert argument of incomplete type "
> -    "%diff{$ to $|to parameter type}2,3">;
> +    "%diff{$ to $|to parameter type}2,3 for "
> +    "%select{%ordinal5 argument|object argument}4"
> +    "%select{|; dereference the argument with *|"
> +    "; take the address of the argument with &|"
> +    "; remove *|"
> +    "; remove &}6">;
>  def note_ovl_candidate_bad_list_argument : Note<"candidate "
>      "%select{function|function|constructor|"
>      "function |function |constructor |"
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160216/6d973981/attachment.html>


More information about the cfe-commits mailing list