On 9 May 2017 at 16:25, Jakub Jelinek <ja...@redhat.com> wrote: >> >> 2017-05-09 Ville Voutilainen <ville.voutilai...@gmail.com> >> >> >> >> gcc/ >> >> >> >> PR c++/80682 >> >> * cp/method.c (is_trivially_xible): Reject void types. > > No cp/ in cp/ChangeLog entries.
So perhaps 2017-05-09 Ville Voutilainen <ville.voutilai...@gmail.com> cp/ PR c++/80682 * method.c (is_trivially_xible): Reject void types. testsuite/ PR c++/80682 * g++.dg/ext/is_trivially_constructible1.C: Add tests for void target. >> + if (cv_unqualified (to) == void_type_node) >> + return false; > > Can't this be checked more cheaply as if (TYPE_MAIN_VARIANT (to) == > void_type_node) ? Yes. A new patch attached.
diff --git a/gcc/cp/method.c b/gcc/cp/method.c index b4c1f60..31ed141 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -1207,6 +1207,8 @@ constructible_expr (tree to, tree from) bool is_trivially_xible (enum tree_code code, tree to, tree from) { + if (TYPE_MAIN_VARIANT (to) == void_type_node) + return false; tree expr; if (code == MODIFY_EXPR) expr = assignable_expr (to, from); diff --git a/gcc/testsuite/g++.dg/ext/is_trivially_constructible1.C b/gcc/testsuite/g++.dg/ext/is_trivially_constructible1.C index a5bac7b..175eae9 100644 --- a/gcc/testsuite/g++.dg/ext/is_trivially_constructible1.C +++ b/gcc/testsuite/g++.dg/ext/is_trivially_constructible1.C @@ -27,10 +27,18 @@ SA(!__is_trivially_constructible(C,C&)); SA(__is_trivially_assignable(C,C&)); SA(!__is_trivially_assignable(C,C)); SA(!__is_trivially_assignable(C,C&&)); +SA(!__is_trivially_assignable(void,int)); +SA(!__is_trivially_assignable(const void,int)); +SA(!__is_trivially_assignable(volatile void,int)); +SA(!__is_trivially_assignable(const volatile void,int)); SA(__is_trivially_constructible(int,int)); SA(__is_trivially_constructible(int,double)); SA(!__is_trivially_constructible(int,B)); +SA(!__is_trivially_constructible(void,int)); +SA(!__is_trivially_constructible(const void,int)); +SA(!__is_trivially_constructible(volatile void,int)); +SA(!__is_trivially_constructible(const volatile void,int)); SA(!__is_trivially_constructible(D));