From: Patrick Palka Date: Thu, 27 May 2021 18:25:33 +0000 (-0400) Subject: c++: parameter pack inside static_assert [PR99893] X-Git-Tag: basepoints/gcc-13~7218 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fc3fdf0f2196e805a3a43ccb73595c33673670f3;p=thirdparty%2Fgcc.git c++: parameter pack inside static_assert [PR99893] Here, we're not finding the parameter pack inside the static_assert because STATIC_ASSERT trees are tcc_exceptional, and we weren't explicitly walking them in cp_walk_subtrees. PR c++/99893 gcc/cp/ChangeLog: * tree.c (cp_walk_subtrees) : New case. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/static_assert17.C: New test. --- diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 372d89fa9edd..fec5afaa2be1 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -5446,6 +5446,11 @@ cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func, } break; + case STATIC_ASSERT: + WALK_SUBTREE (STATIC_ASSERT_CONDITION (*tp)); + WALK_SUBTREE (STATIC_ASSERT_MESSAGE (*tp)); + break; + default: return NULL_TREE; } diff --git a/gcc/testsuite/g++.dg/cpp0x/static_assert17.C b/gcc/testsuite/g++.dg/cpp0x/static_assert17.C new file mode 100644 index 000000000000..28cbebe93af3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/static_assert17.C @@ -0,0 +1,9 @@ +// PR c++/99893 +// { dg-do compile { target c++11 } } + +void f(...); + +template +void g() { + f([] { static_assert(Ts::value, ""); }...); +}