[cfe-dev] SemaTemplateInstantiateDecl mistakenly issuing diag::warn_func_template_missing for templated deduction guides
Aaron Ballman via cfe-dev
cfe-dev at lists.llvm.org
Wed Oct 25 09:18:26 PDT 2017
On Wed, Oct 25, 2017 at 12:16 PM, Nico Weber via cfe-dev
<cfe-dev at lists.llvm.org> wrote:
> The post-commit review thread for this warning concluded that this warning
> probably shouldn't be on by default, but looks like it didn't get disabled.
We don't usually add off-by-default diagnostics because almost no one
ever enables them, so perhaps the diagnostic should simply be removed
if it's low-value?
~Aaron
>
> On Wed, Oct 25, 2017 at 2:33 PM, Mário Feroldi via cfe-dev
> <cfe-dev at lists.llvm.org> wrote:
>>
>> Following compilation shows the issue:
>>
>> $ clang++ --version
>> clang version 6.0.0 (trunk 316414)
>> Target: x86_64-unknown-linux-gnu
>> Thread model: posix
>> InstalledDir: /opt/compiler-explorer/clang-trunk/bin
>>
>> $ cat a.cpp
>> template <typename T>
>> struct S
>> {
>> template <typename U>
>> S(U&&) {}
>> };
>>
>> template <typename T>
>> S(T) -> S<T>;
>>
>> int main()
>> {
>> S s(42);
>> }
>>
>> $ clang++ -std=c++17 -Wundefined-func-template a.cpp
>> a.cpp:13:7: warning: instantiation of function '<deduction guide for
>> S><int>' required here, but no definition is available
>> [-Wundefined-func-template]
>> S s(42);
>> ^
>> a.cpp:9:1: note: forward declaration of template entity is here
>> S(T) -> S<T>;
>> ^
>> a.cpp:13:7: note: add an explicit instantiation declaration to
>> suppress this warning if '<deduction guide for S><int>' is explicitly
>> instantiated in another translation unit
>> S s(42);
>> ^
>>
>> I found out that this warning occurs at
>> lib/Sema/SemaTemplateInstantiateDecl.cpp:3809:
>>
>> else if (TSK == TSK_ImplicitInstantiation) { //< here
>> if (AtEndOfTU && !getDiagnostics().hasErrorOccurred()) {
>> Diag(PointOfInstantiation, diag::warn_func_template_missing)
>> << Function;
>> Diag(PatternDecl->getLocation(),
>> diag::note_forward_template_decl);
>> if (getLangOpts().CPlusPlus11)
>> Diag(PointOfInstantiation, diag::note_inst_declaration_hint)
>> << Function;
>> }
>> }
>>
>> Shouldn't that check whether it's a deduction guide, or should it even
>> require a definition?
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
More information about the cfe-dev
mailing list