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));
 

Reply via email to