From 2837450c4e8f5f241db5519977ab24c1f871258f Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Thu, 27 May 2021 14:25:33 -0400 Subject: [PATCH] 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 PR c++/103885 gcc/cp/ChangeLog: * tree.c (cp_walk_subtrees) : New case. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/static_assert17.C: New test. (cherry picked from commit fc3fdf0f2196e805a3a43ccb73595c33673670f3) --- gcc/cp/tree.c | 5 +++++ gcc/testsuite/g++.dg/cpp0x/static_assert17.C | 9 +++++++++ 2 files changed, 14 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/static_assert17.C diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index f67ede337c8e..b499f38be155 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -5461,6 +5461,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, ""); }...); +} -- 2.47.2