SemaTemplateInstantiateDecl mistakenly issuing diag::warn_func_template_missing for templated deduction guides

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
struct S
{
template
S(U&&) {}
};

template
S(T) → S;

int main()
{
S s(42);
}

$ clang++ -std=c++17 -Wundefined-func-template a.cpp
a.cpp:13:7: warning: instantiation of function ‘’ 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;
^
a.cpp:13:7: note: add an explicit instantiation declaration to suppress this warning if ‘’ 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?

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.

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

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.

Without -Wundefined-func-template, the warning doesn’t come up. But even when enabled, does it make sense when the template in question is a deduction guide?

Hi,

> 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.

This warning is off by default, but in this case it was enabled by command
line option.

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?

The two warnings added in r266719 were intended to assist problem solving
in the case of
module builds and they were really helpful.

There are many warnings disabled by default. For instance,
'-Wfloat-conversion', which is
useful in some cases.

Thanks,
--Serge

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.