https://github.com/usx95 updated https://github.com/llvm/llvm-project/pull/108197
>From 5901d82ea0543074853b963f7dc9106a6fe3bcee Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Wed, 11 Sep 2024 11:33:45 +0000 Subject: [PATCH 1/3] [clang] Do not expand pack while retaining expansion --- clang/lib/Sema/TreeTransform.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 0daf620b4123e4..a40673b04764da 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -4361,7 +4361,7 @@ bool TreeTransform<Derived>::TransformExprs(Expr *const *Inputs, // forgetting the partially-substituted parameter pack. if (RetainExpansion) { ForgetPartiallySubstitutedPackRAII Forget(getDerived()); - + Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(getSema(), -1); ExprResult Out = getDerived().TransformExpr(Pattern); if (Out.isInvalid()) return true; >From 97fbf34c3edd09348fb48b4dc66f1d854516e8ef Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Wed, 11 Sep 2024 11:59:58 +0000 Subject: [PATCH 2/3] Add comment --- clang/lib/Sema/TreeTransform.h | 1 + 1 file changed, 1 insertion(+) diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index a40673b04764da..0de43d2127b12f 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -4361,6 +4361,7 @@ bool TreeTransform<Derived>::TransformExprs(Expr *const *Inputs, // forgetting the partially-substituted parameter pack. if (RetainExpansion) { ForgetPartiallySubstitutedPackRAII Forget(getDerived()); + // Simple transform producing another pack expansion. Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(getSema(), -1); ExprResult Out = getDerived().TransformExpr(Pattern); if (Out.isInvalid()) >From ab756525ab4a5f71ee5d3703238a1f9188a376e1 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Wed, 11 Sep 2024 15:45:40 +0000 Subject: [PATCH 3/3] Add tests --- clang/test/SemaCXX/GH107560.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 clang/test/SemaCXX/GH107560.cpp diff --git a/clang/test/SemaCXX/GH107560.cpp b/clang/test/SemaCXX/GH107560.cpp new file mode 100644 index 00000000000000..faaa7004e06cf9 --- /dev/null +++ b/clang/test/SemaCXX/GH107560.cpp @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify %s +// expected-no-diagnostics + +int bar(...); + +template <int> struct Int {}; + +template <class ...T> +consteval auto foo(T... x) -> decltype(bar(T(x)...)) { return 10; } + +template <class ...T> +constexpr auto baz(Int<foo<T>(T())>... x) -> int { return 1; } + +static_assert(baz<Int<1>, Int<2>, Int<3>>(Int<10>(), Int<10>(), Int<10>()) == 1); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits