[cfe-dev] SemaTemplateInstantiateDecl mistakenly issuing diag::warn_func_template_missing for templated deduction guides

Richard Smith via cfe-dev cfe-dev at lists.llvm.org
Fri Oct 27 18:16:08 PDT 2017


On 25 October 2017 at 07:33, 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/SemaTemplateInstantia
> teDecl.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_de
> cl);
>         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?
>

Thanks for the report, we shouldn't even be trying to instantiate a
definition for a deduction guide in the first place. Fixed in r316820.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171027/291f7b98/attachment.html>


More information about the cfe-dev mailing list