------- 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

Reply via email to