From e81c832812e5432cb849146ca44ed64727e672af Mon Sep 17 00:00:00 2001 From: Ville Voutilainen Date: Thu, 11 May 2017 10:44:29 +0300 Subject: [PATCH] re PR c++/80682 (__is_trivially_constructible(void, int) returns true.) PR c++/80682 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. From-SVN: r247880 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/method.c | 2 ++ gcc/testsuite/g++.dg/ext/is_trivially_constructible1.C | 8 ++++++++ 3 files changed, 15 insertions(+) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 392323d..af7fae5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2017-05-11 Ville Voutilainen + + PR c++/80682 + * method.c (is_trivially_xible): Reject void types. + 2017-05-10 Nathan Sidwell * class.c (handle_using_decl): Always use OVL_CURRENT. diff --git a/gcc/cp/method.c b/gcc/cp/method.c index a0ca36d..99e98cc 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 (VOID_TYPE_P (to)) + 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)); -- 2.7.4