diff options
author | Jason Merrill <jason@redhat.com> | 2018-05-19 18:57:53 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-05-19 18:57:53 -0400 |
commit | 4b950a6d7c620834d77a63ffe2ee9704df0e4cdc (patch) | |
tree | 5e58842cca8a96c323c6f37909620a151299750b /gcc | |
parent | 7aed919c97e8c7593bd6c98c1038fbed1ed44055 (diff) | |
download | gcc-4b950a6d7c620834d77a63ffe2ee9704df0e4cdc.zip gcc-4b950a6d7c620834d77a63ffe2ee9704df0e4cdc.tar.gz gcc-4b950a6d7c620834d77a63ffe2ee9704df0e4cdc.tar.bz2 |
Avoid ICE on unsupported use of __integer_pack.
* pt.c (tsubst_pack_expansion): Sorry rather than abort
on __integer_pack as subexpression of pattern.
From-SVN: r260404
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/integer-pack4.C | 10 |
3 files changed, 22 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e4fcffc..92039fa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2018-05-19 Jason Merrill <jason@redhat.com> + + * pt.c (tsubst_pack_expansion): Sorry rather than abort + on __integer_pack as subexpression of pattern. + 2018-05-18 Jason Merrill <jason@redhat.com> PR c++/58407 - deprecated implicit copy ops. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 1e42040..81de633 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -12067,8 +12067,13 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain, } else if (builtin_pack_call_p (parm_pack)) { - /* ??? Support use in other patterns. */ - gcc_assert (parm_pack == pattern); + if (parm_pack != pattern) + { + if (complain & tf_error) + sorry ("%qE is not the entire pattern of the pack expansion", + parm_pack); + return error_mark_node; + } return expand_builtin_pack_call (parm_pack, args, complain, in_decl); } diff --git a/gcc/testsuite/g++.dg/ext/integer-pack4.C b/gcc/testsuite/g++.dg/ext/integer-pack4.C new file mode 100644 index 0000000..6e5125b --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/integer-pack4.C @@ -0,0 +1,10 @@ +// { dg-additional-options -std=c++17 } + +template<int ... Ns> int f() { return (Ns + ...); } +template<int N> int g() { + return f<__integer_pack(N)...>(); // Fine. +} +template<int N> int h() { + return f<(2*__integer_pack(N))...>(); // { dg-bogus "sorry" "" { xfail *-*-* } } +} +int main() { return g<3>()+h<3>(); } |