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@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits