aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/init.cc
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2023-10-27 11:31:02 -0400
committerPatrick Palka <ppalka@redhat.com>2023-10-27 11:31:02 -0400
commit6ff8b93c7b0bf3913fb7754f9985e7e31c46d89c (patch)
tree488c41a8ba24ac5fde8d26b7649a8f58e369eba2 /gcc/cp/init.cc
parent68e97c5442ebb1c47bde77e82ac8a0e823347eb1 (diff)
downloadgcc-6ff8b93c7b0bf3913fb7754f9985e7e31c46d89c.zip
gcc-6ff8b93c7b0bf3913fb7754f9985e7e31c46d89c.tar.gz
gcc-6ff8b93c7b0bf3913fb7754f9985e7e31c46d89c.tar.bz2
c++: another build_new_1 folding fix [PR111929]
In build_new_1, we also need to avoid folding 'outer_nelts_check' when in a template context to prevent an ICE on the below testcase. This patch replaces the problematic fold_build2 call with build2 (we'll later fold it if appropriate during cp_fully_fold). In passing, this patch removes an unnecessary conversion of 'nelts' since it should always already be a size_t (and 'convert' isn't the best conversion entry point to use anyway since it lacks a complain parameter). PR c++/111929 gcc/cp/ChangeLog: * init.cc (build_new_1): Remove unnecessary call to convert on 'nelts'. Use build2 instead of fold_build2 for 'outer_nelts_checks'. gcc/testsuite/ChangeLog: * g++.dg/template/non-dependent28a.C: New test.
Diffstat (limited to 'gcc/cp/init.cc')
-rw-r--r--gcc/cp/init.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc
index 65d37c3..6444f0a 100644
--- a/gcc/cp/init.cc
+++ b/gcc/cp/init.cc
@@ -3261,7 +3261,7 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts,
max_outer_nelts = wi::udiv_trunc (max_size, inner_size);
max_outer_nelts_tree = wide_int_to_tree (sizetype, max_outer_nelts);
- size = build2 (MULT_EXPR, sizetype, size, convert (sizetype, nelts));
+ size = build2 (MULT_EXPR, sizetype, size, nelts);
if (TREE_CODE (cst_outer_nelts) == INTEGER_CST)
{
@@ -3293,9 +3293,9 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts,
- wi::clz (max_outer_nelts);
max_outer_nelts = (max_outer_nelts >> shift) << shift;
- outer_nelts_check = fold_build2 (LE_EXPR, boolean_type_node,
- outer_nelts,
- max_outer_nelts_tree);
+ outer_nelts_check = build2 (LE_EXPR, boolean_type_node,
+ outer_nelts,
+ max_outer_nelts_tree);
}
}