This patch to the Go frontend fixes a dumb mistake I made: I compared the TYPE_SIZE pointers rather than the actual type size. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline.
Ian
diff -r 292aa99c6436 go/expressions.cc --- a/go/expressions.cc Tue May 31 11:14:19 2011 -0700 +++ b/go/expressions.cc Wed Jun 08 11:52:32 2011 -0700 @@ -754,8 +754,13 @@ 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,