c-common.c (boolean_increment): Use correctly typed constant.
authorRichard Guenther <rguenther@suse.de>
Fri, 6 Jul 2007 09:24:18 +0000 (09:24 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 6 Jul 2007 09:24:18 +0000 (09:24 +0000)
2007-07-06  Richard Guenther  <rguenther@suse.de>

* 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
gcc/c-common.c
gcc/cp/ChangeLog
gcc/cp/init.c
gcc/cp/typeck2.c

index 240d5e783ab8b66406e43ea083a64850107c7cca..6d5d1c16d4fbd5fbe98fa791d4c94ced046b2be5 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-06  Richard Guenther  <rguenther@suse.de>
+
+       * c-common.c (boolean_increment): Use correctly typed
+       constant.
+
 2007-07-06  Richard Sandiford  <richard@codesourcery.com>
 
        * config/mips/mips.c (mips16e_save_restore_pattern_p): Check that
index b1c20a6069d194eb604015069fa06ffb7601a938..0682a487d4234ec6f55ba4b2cfd7edb6b4fa0bc0 100644 (file)
@@ -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)
index 3aac996e4b34c6061d8b89ccafe6182821f96f5a..f22d5b7f429edf2ab098d5c410e0bdde86ea9d2a 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-06  Richard Guenther  <rguenther@suse.de>
+
+       * init.c (build_new_1): Use the correct pointer type.
+       * typeck2.c (build_m_component_ref): Likewise.
+
 2007-07-05  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/32245
index 288d0faff3599c00469130bc9bc8ca7af9f3b4dd..b65de81967ad2dcf15c31f83eddd03d9eb27f276 100644 (file)
@@ -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);
index 4ef082d30ab12d2e3e57e7e4ebad55683814b28f..14d9963f61c8d4674e1fb467603cee075eae8386 100644 (file)
@@ -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