Correct type size comparison.
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 8 Jun 2011 18:56:00 +0000 (18:56 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 8 Jun 2011 18:56:00 +0000 (18:56 +0000)
From-SVN: r174814

gcc/go/gofrontend/expressions.cc

index 10618759af44cf39f4beb2bb43d7315189104fb7..5dda7916196d63439ff7706c3953463286dd3a35 100644 (file)
@@ -754,8 +754,13 @@ Expression::check_bounds(tree val, tree bound_type, tree sofar,
        ret = NULL_TREE;
     }
 
-  if ((TYPE_UNSIGNED(val_type) && !TYPE_UNSIGNED(bound_type))
-      || TYPE_SIZE(val_type) > TYPE_SIZE(bound_type))
+  HOST_WIDE_INT val_type_size = int_size_in_bytes(val_type);
+  HOST_WIDE_INT bound_type_size = int_size_in_bytes(bound_type);
+  go_assert(val_type_size != -1 && bound_type_size != -1);
+  if (val_type_size > bound_type_size
+      || (val_type_size == bound_type_size
+         && TYPE_UNSIGNED(val_type)
+         && !TYPE_UNSIGNED(bound_type)))
     {
       tree max = TYPE_MAX_VALUE(bound_type);
       tree big = fold_build2_loc(loc, GT_EXPR, boolean_type_node, val,