[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