This revision was automatically updated to reflect the committed changes. Closed by commit rL363361: [clang] Fixing incorrect implicit deduction guides (PR41549) (authored by Tyker, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits.
Changed prior to commit: https://reviews.llvm.org/D63072?vs=203862&id=204721#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63072/new/ https://reviews.llvm.org/D63072 Files: cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp Index: cfe/trunk/lib/Sema/SemaTemplate.cpp =================================================================== --- cfe/trunk/lib/Sema/SemaTemplate.cpp +++ cfe/trunk/lib/Sema/SemaTemplate.cpp @@ -2052,6 +2052,12 @@ void Sema::DeclareImplicitDeductionGuides(TemplateDecl *Template, SourceLocation Loc) { + if (CXXRecordDecl *DefRecord = + cast<CXXRecordDecl>(Template->getTemplatedDecl())->getDefinition()) { + TemplateDecl *DescribedTemplate = DefRecord->getDescribedClassTemplate(); + Template = DescribedTemplate ? DescribedTemplate : Template; + } + DeclContext *DC = Template->getDeclContext(); if (DC->isDependentContext()) return; Index: cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp =================================================================== --- cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp +++ cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp @@ -489,6 +489,21 @@ } #pragma clang diagnostic pop +namespace PR41549 { + +template <class H, class P> struct umm; + +template <class H = int, class P = int> +struct umm { + umm(H h = 0, P p = 0); +}; + +template <class H, class P> struct umm; + +umm m(1); + +} + #else // expected-no-diagnostics
Index: cfe/trunk/lib/Sema/SemaTemplate.cpp =================================================================== --- cfe/trunk/lib/Sema/SemaTemplate.cpp +++ cfe/trunk/lib/Sema/SemaTemplate.cpp @@ -2052,6 +2052,12 @@ void Sema::DeclareImplicitDeductionGuides(TemplateDecl *Template, SourceLocation Loc) { + if (CXXRecordDecl *DefRecord = + cast<CXXRecordDecl>(Template->getTemplatedDecl())->getDefinition()) { + TemplateDecl *DescribedTemplate = DefRecord->getDescribedClassTemplate(); + Template = DescribedTemplate ? DescribedTemplate : Template; + } + DeclContext *DC = Template->getDeclContext(); if (DC->isDependentContext()) return; Index: cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp =================================================================== --- cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp +++ cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp @@ -489,6 +489,21 @@ } #pragma clang diagnostic pop +namespace PR41549 { + +template <class H, class P> struct umm; + +template <class H = int, class P = int> +struct umm { + umm(H h = 0, P p = 0); +}; + +template <class H, class P> struct umm; + +umm m(1); + +} + #else // expected-no-diagnostics
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits