aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Voutilainen <ville.voutilainen@gmail.com>2017-05-11 10:44:29 +0300
committerVille Voutilainen <ville@gcc.gnu.org>2017-05-11 10:44:29 +0300
commite81c832812e5432cb849146ca44ed64727e672af (patch)
tree6c77901b461b80f24c5249e7339a954fcba37791
parent687aed9cc8c53b7833df9c62912292c17fdbc97f (diff)
downloadgcc-e81c832812e5432cb849146ca44ed64727e672af.zip
gcc-e81c832812e5432cb849146ca44ed64727e672af.tar.gz
gcc-e81c832812e5432cb849146ca44ed64727e672af.tar.bz2
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
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/method.c2
-rw-r--r--gcc/testsuite/g++.dg/ext/is_trivially_constructible1.C8
3 files changed, 15 insertions, 0 deletions
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 <ville.voutilainen@gmail.com>
+
+ PR c++/80682
+ * method.c (is_trivially_xible): Reject void types.
+
2017-05-10 Nathan Sidwell <nathan@acm.org>
* 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));