OSDN Git Service

* varasm.c (narrowing_initializer_constant_valid_p): Return
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Sep 2008 22:30:12 +0000 (22:30 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Sep 2008 22:30:12 +0000 (22:30 +0000)
NULL_TREE if ENDTYPE is not an integer.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@140502 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/varasm.c

index efb7428..2c39599 100644 (file)
@@ -1,3 +1,8 @@
+2008-09-19  Ian Lance Taylor  <iant@google.com>
+
+       * varasm.c (narrowing_initializer_constant_valid_p): Return
+       NULL_TREE if ENDTYPE is not an integer.
+
 2008-09-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>
 
        PR tree-opt/30930
index e74adae..b3f9990 100644 (file)
@@ -4064,9 +4064,10 @@ constructor_static_from_elts_p (const_tree ctor)
 }
 
 /* A subroutine of initializer_constant_valid_p.  VALUE is either a
-   MINUS_EXPR or a POINTER_PLUS_EXPR, and ENDTYPE is a narrowing
-   conversion to something smaller than a pointer.  This returns
-   null_pointer_node if the resulting value is an absolute constant
+   MINUS_EXPR or a POINTER_PLUS_EXPR.  This looks for cases of VALUE
+   which are valid when ENDTYPE is an integer of any size; in
+   particular, this does not accept a pointer minus a constant.  This
+   returns null_pointer_node if the VALUE is an absolute constant
    which can be used to initialize a static variable.  Otherwise it
    returns NULL.  */
 
@@ -4075,6 +4076,9 @@ narrowing_initializer_constant_valid_p (tree value, tree endtype)
 {
   tree op0, op1;
 
+  if (!INTEGRAL_TYPE_P (endtype))
+    return NULL_TREE;
+
   op0 = TREE_OPERAND (value, 0);
   op1 = TREE_OPERAND (value, 1);