]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
varasm.c (initialize_constant_valid_p): Allow pointers initialized from integer const...
authorDJ Delorie <dj@redhat.com>
Fri, 20 Jan 2006 21:55:41 +0000 (16:55 -0500)
committerDJ Delorie <dj@gcc.gnu.org>
Fri, 20 Jan 2006 21:55:41 +0000 (16:55 -0500)
* varasm.c (initialize_constant_valid_p): Allow pointers
initialized from integer constants of lesser precision.
(output_constant): Allow non-int-sized pointer modes to be
initialized from integer constants.

From-SVN: r110041

gcc/ChangeLog
gcc/varasm.c

index c41ef43e98cef62aec1bb53bd5b255f4c8267655..d5f45629c569060fbbcecb954cd0689edeea744a 100644 (file)
@@ -1,3 +1,10 @@
+2006-01-20  DJ Delorie  <dj@redhat.com>
+
+       * varasm.c (initialize_constant_valid_p): Allow pointers
+       initialized from integer constants of lesser precision.
+       (output_constant): Allow non-int-sized pointer modes to be
+       initialized from integer constants.
+
 2006-01-20  Joseph S. Myers  <joseph@codesourcery.com>
 
        PR libstdc++/25524
index 05bfabf288d87bbcff6c83343478549539ec8708..5e42b07d888ad449e5d4ff8218d2d269c00cc5df 100644 (file)
@@ -3553,6 +3553,9 @@ initializer_constant_valid_p (tree value, tree endtype)
             || TREE_CODE (dest_type) == OFFSET_TYPE)
            && INTEGRAL_TYPE_P (src_type))
          {
+           if (TREE_CODE (src) == INTEGER_CST
+               && TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type))
+             return null_pointer_node;
            if (integer_zerop (src))
              return null_pointer_node;
            else if (TYPE_PRECISION (dest_type) <= TYPE_PRECISION (src_type))
@@ -3732,6 +3735,11 @@ output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align)
         way.  */
       if (TREE_CODE (exp) == ADDR_EXPR)
        exp = build1 (ADDR_EXPR, saved_type, TREE_OPERAND (exp, 0));
+      /* Likewise for constant ints.  */
+      else if (TREE_CODE (exp) == INTEGER_CST)
+       exp = build_int_cst_wide (saved_type, TREE_INT_CST_LOW (exp),
+                                 TREE_INT_CST_HIGH (exp));
+      
     }
 
   /* Eliminate any conversions since we'll be outputting the underlying