aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/init.cc8
-rw-r--r--gcc/testsuite/g++.dg/template/non-dependent28a.C8
2 files changed, 12 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);
}
}
diff --git a/gcc/testsuite/g++.dg/template/non-dependent28a.C b/gcc/testsuite/g++.dg/template/non-dependent28a.C
new file mode 100644
index 0000000..d32520c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/non-dependent28a.C
@@ -0,0 +1,8 @@
+// PR c++/111929
+
+struct A { operator int(); };
+
+template<class>
+void f() {
+ new int[A()];
+}