re PR c++/86398 (is_trivially_constructible always returns true even when is_construc...
authorVille Voutilainen <ville.voutilainen@gmail.com>
Wed, 4 Jul 2018 19:21:38 +0000 (22:21 +0300)
committerVille Voutilainen <ville@gcc.gnu.org>
Wed, 4 Jul 2018 19:21:38 +0000 (22:21 +0300)
PR c++/86398

gcc/cp/

PR c++/86398
* method.c (is_trivially_xible): Return false
if is_xible_helper returns a NULL_TREE.

testsuite/

PR c++/86398
* g++.dg/ext/is_trivially_constructible1.C: Add new tests.

From-SVN: r262420

gcc/cp/ChangeLog
gcc/cp/method.c
gcc/testsuite/g++.dg/ext/is_trivially_constructible1.C

index c27e2deb2ce29ad6179d9ac94f86251223a0a8b7..efa3cbdd65368f59339c3074911b0069c5ef936b 100644 (file)
@@ -1,3 +1,9 @@
+2018-07-04  Ville Voutilainen  <ville.voutilainen@gmail.com>
+
+       PR c++/86398
+       * method.c (is_trivially_xible): Return false
+       if is_xible_helper returns a NULL_TREE.
+
 2018-07-03  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * decl.c (min_location): New.
index 858655b4a79141d279f1aff6e03400aec8cdc59b..0b208a8d52a519f40609e4fb1ba258d4a750e589 100644 (file)
@@ -1216,7 +1216,7 @@ is_trivially_xible (enum tree_code code, tree to, tree from)
   tree expr;
   expr = is_xible_helper (code, to, from, /*trivial*/true);
 
-  if (expr == error_mark_node)
+  if (expr == NULL_TREE || expr == error_mark_node)
     return false;
   tree nt = cp_walk_tree_without_duplicates (&expr, check_nontriv, NULL);
   return !nt;
index 175eae98233f1d43ef34962034bbe41d214165a9..191b69601e68a6b2e3cbeb0049b16ec20fa2cea7 100644 (file)
@@ -39,6 +39,11 @@ 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(int, void*));
+SA(!__is_trivially_constructible(int, int*));
+SA(!__is_trivially_constructible(int, const int*));
+SA(!__is_trivially_constructible(int*, void*));
+SA(!__is_trivially_constructible(int*, const int*));
 
 SA(!__is_trivially_constructible(D));