SemaTemplateInstantiateDecl mistakenly issuing diag::warn_func_template_missing for templated deduction guides

Mário Feroldi via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 25 06:17:10 PDT 2017


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_ExplicitInstantiationDefinition) {
      // Try again at the end of the translation unit (at which point a
      // definition will be required).
      assert(!Recursive);
      Function->setInstantiationIsPending(true);
      PendingInstantiations.push_back(
        std::make_pair(Function, PointOfInstantiation));
    } 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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20171025/d2d74d48/attachment.html>


More information about the cfe-commits mailing list