diff options
author | Patrick Palka <ppalka@redhat.com> | 2021-05-27 14:25:33 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2022-04-08 09:36:56 -0400 |
commit | 2837450c4e8f5f241db5519977ab24c1f871258f (patch) | |
tree | 12a52735f9b9cc45be8846e39912e3af0d40befb | |
parent | 542c30dc4d220f6d2138e55d5fb8e1529339badf (diff) | |
download | gcc-2837450c4e8f5f241db5519977ab24c1f871258f.zip gcc-2837450c4e8f5f241db5519977ab24c1f871258f.tar.gz gcc-2837450c4e8f5f241db5519977ab24c1f871258f.tar.bz2 |
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) <case STATIC_ASSERT>: New case.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/static_assert17.C: New test.
(cherry picked from commit fc3fdf0f2196e805a3a43ccb73595c33673670f3)
-rw-r--r-- | gcc/cp/tree.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/static_assert17.C | 9 |
2 files changed, 14 insertions, 0 deletions
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index f67ede3..b499f38b 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 0000000..28cbebe --- /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<class... Ts> +void g() { + f([] { static_assert(Ts::value, ""); }...); +} |