tree.c (int_fits_type_p): If bounds of a subtype are variable, see if fits in bounds...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Tue, 22 Jan 2002 12:01:54 +0000 (12:01 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Tue, 22 Jan 2002 12:01:54 +0000 (07:01 -0500)
* tree.c (int_fits_type_p): If bounds of a subtype are variable, see
if fits in bounds of base type.

From-SVN: r49070

gcc/ChangeLog
gcc/tree.c

index 0f91fb5e17d3d8db2097f00a73421e1bbb48b471..fb10f397a6e4fa78c7969f91096464006a4cb60f 100644 (file)
@@ -1,5 +1,8 @@
 Tue Jan 22 06:26:33 2002  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+       * tree.c (int_fits_type_p): If bounds of a subtype are variable, see
+       if fits in bounds of base type.
+
        * dwarf2out.c (equate_decl_number_to_die): Add "int" to decls.
        (loc_descriptor_from_tree, case CALL_EXPR, case ADDR_EXPR): New.
        (add_bound_info, default): If can't find a context, make a
index 61252e7b70e761c257159a97815a0dee4011439e..53d5889bbbd01005ce931e556a9a517c75fed9c8 100644 (file)
@@ -4245,7 +4245,8 @@ int_fits_type_p (c, type)
      tree c, type;
 {
   /* If the bounds of the type are integers, we can check ourselves.
-     Otherwise,. use force_fit_type, which checks against the precision.  */
+     If not, but this type is a subtype, try checking against that.
+     Otherwise, use force_fit_type, which checks against the precision.  */
   if (TYPE_MAX_VALUE (type) != NULL_TREE
       && TYPE_MIN_VALUE (type) != NULL_TREE
       && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
@@ -4264,6 +4265,8 @@ int_fits_type_p (c, type)
                && ! (TREE_INT_CST_HIGH (c) < 0
                      && TREE_UNSIGNED (TREE_TYPE (c))));
     }
+  else if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != 0)
+    return int_fits_type_p (c, TREE_TYPE (type));
   else
     {
       c = copy_node (c);