================ @@ -5063,60 +5115,30 @@ bool TreeTransform<Derived>::TransformTemplateArguments( } if (In.getArgument().isPackExpansion()) { - // We have a pack expansion, for which we will be substituting into - // the pattern. - SourceLocation Ellipsis; - UnsignedOrNone OrigNumExpansions = std::nullopt; - TemplateArgumentLoc Pattern - = getSema().getTemplateArgumentPackExpansionPattern( - In, Ellipsis, OrigNumExpansions); - - SmallVector<UnexpandedParameterPack, 2> Unexpanded; - getSema().collectUnexpandedParameterPacks(Pattern, Unexpanded); - assert(!Unexpanded.empty() && "Pack expansion without parameter packs?"); - - // Determine whether the set of unexpanded parameter packs can and should - // be expanded. - bool Expand = true; - bool RetainExpansion = false; - UnsignedOrNone NumExpansions = OrigNumExpansions; - if (getDerived().TryExpandParameterPacks(Ellipsis, - Pattern.getSourceRange(), - Unexpanded, - Expand, - RetainExpansion, - NumExpansions)) + UnexpandedInfo Info; + TemplateArgumentLoc Prepared; + if (PreparePackForExpansion(In, Uneval, Prepared, Info)) return true; - - if (!Expand) { - // The transform has determined that we should perform a simple - // transformation on the pack expansion, producing another pack - // expansion. - TemplateArgumentLoc OutPattern; - Sema::ArgPackSubstIndexRAII SubstIndex(getSema(), std::nullopt); - if (getDerived().TransformTemplateArgument(Pattern, OutPattern, Uneval)) - return true; - - Out = getDerived().RebuildPackExpansion(OutPattern, Ellipsis, - NumExpansions); - if (Out.getArgument().isNull()) - return true; - - Outputs.addArgument(Out); + if (!Info.Expand) { + Outputs.addArgument(Prepared); continue; } // The transform has determined that we should perform an elementwise // expansion of the pattern. Do so. - for (unsigned I = 0; I != *NumExpansions; ++I) { + std::optional<ForgetSubstitutionRAII> ForgeSubst; ---------------- ilya-biryukov wrote:
Done. https://github.com/llvm/llvm-project/pull/106730 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits