From b5119fa1391d75ecd9c7e041151acb04bd6c7234 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Fri, 6 Jul 2007 09:24:18 +0000 Subject: [PATCH] c-common.c (boolean_increment): Use correctly typed constant. 2007-07-06 Richard Guenther * c-common.c (boolean_increment): Use correctly typed constant. cp/ * init.c (build_new_1): Use the correct pointer type. * typeck2.c (build_m_component_ref): Likewise. From-SVN: r126405 --- gcc/ChangeLog | 5 +++++ gcc/c-common.c | 2 +- gcc/cp/ChangeLog | 5 +++++ gcc/cp/init.c | 6 ++++-- gcc/cp/typeck2.c | 8 ++++++-- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 240d5e783ab..6d5d1c16d4f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-07-06 Richard Guenther + + * c-common.c (boolean_increment): Use correctly typed + constant. + 2007-07-06 Richard Sandiford * config/mips/mips.c (mips16e_save_restore_pattern_p): Check that diff --git a/gcc/c-common.c b/gcc/c-common.c index b1c20a6069d..0682a487d42 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -4348,7 +4348,7 @@ tree boolean_increment (enum tree_code code, tree arg) { tree val; - tree true_res = boolean_true_node; + tree true_res = build_int_cst (TREE_TYPE (arg), 1); arg = stabilize_reference (arg); switch (code) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3aac996e4b3..f22d5b7f429 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2007-07-06 Richard Guenther + + * init.c (build_new_1): Use the correct pointer type. + * typeck2.c (build_m_component_ref): Likewise. + 2007-07-05 Mark Mitchell PR c++/32245 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 288d0faff35..b65de81967a 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1915,6 +1915,7 @@ build_new_1 (tree placement, tree type, tree nelts, tree init, { tree cookie; tree cookie_ptr; + tree size_ptr_type; /* Adjust so we're pointing to the start of the object. */ data_addr = get_target_expr (build2 (POINTER_PLUS_EXPR, full_pointer_type, @@ -1924,8 +1925,9 @@ build_new_1 (tree placement, tree type, tree nelts, tree init, many elements to destroy later. We use the last sizeof (size_t) bytes to store the number of elements. */ cookie_ptr = fold_build1 (NEGATE_EXPR, sizetype, size_in_bytes (sizetype)); - cookie_ptr = build2 (POINTER_PLUS_EXPR, build_pointer_type (sizetype), - data_addr, cookie_ptr); + size_ptr_type = build_pointer_type (sizetype); + cookie_ptr = build2 (POINTER_PLUS_EXPR, size_ptr_type, + fold_convert (size_ptr_type, data_addr), cookie_ptr); cookie = build_indirect_ref (cookie_ptr, NULL); cookie_expr = build2 (MODIFY_EXPR, sizetype, cookie, nelts); diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 4ef082d30ab..14d9963f61c 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -1261,6 +1261,8 @@ build_m_component_ref (tree datum, tree component) if (TYPE_PTRMEM_P (ptrmem_type)) { + tree ptype; + /* Compute the type of the field, as described in [expr.ref]. There's no such thing as a mutable pointer-to-member, so things are not as complex as they are for references to @@ -1277,8 +1279,10 @@ build_m_component_ref (tree datum, tree component) /* Build an expression for "object + offset" where offset is the value stored in the pointer-to-data-member. */ - datum = build2 (POINTER_PLUS_EXPR, build_pointer_type (type), - datum, build_nop (sizetype, component)); + ptype = build_pointer_type (type); + datum = build2 (POINTER_PLUS_EXPR, ptype, + fold_convert (ptype, datum), + build_nop (sizetype, component)); return build_indirect_ref (datum, 0); } else -- 2.30.2