------- Additional Comments From schlie at comcast dot net 2004-12-21 20:50 ------- (although not the most elegant fix)
This fixes the rest of the problem, as there's no reaon to default promote smaller than int sized integers to int, they will end up being promoted if required by the back-end if the target requires them to be (also should not need to litterally promote enum's and bool beyond the smallest int type with suffecient to represent it's value range): (called via default_conversion() to determine if an expression should be converted by default to int) *** In File: c-common.c *** bool c_promoting_integer_type_p (tree t) { switch (TREE_CODE (t)) { - case INTEGER_TYPE: - return (TYPE_MAIN_VARIANT (t) == char_type_node - || TYPE_MAIN_VARIANT (t) == signed_char_type_node - || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node - || TYPE_MAIN_VARIANT (t) == short_integer_type_node - || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node - || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node)); pws--*/ - case ENUMERAL_TYPE: /* ??? Technically all enumerations not larger than an int promote to an int. But this is used along code paths that only want to notice a size change. */ return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node); case BOOLEAN_TYPE: return 1; default: return 0; } } *** end *** -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18065