unsigned builtins don't always work, as the type matching code can ignore the 
signed/unsigned variants when searching for a type with a particular mode.  
This patch fixes this problem.  If a type with same unsignededness exists, we 
prefer it over a type with the same mode, but different unsignededness.

Ok?

2012-01-20  Mike Stump  <mikest...@comcast.net>

        * c-common.c (c_common_type_for_mode): Match signed/unsigned types
        exactly.

Index: c-common.c
===================================================================
*** c-common.c  (revision 183357)
--- c-common.c  (working copy)
*************** c_common_type_for_mode (enum machine_mod
*** 3089,3094 ****
--- 3089,3099 ----
      }
  
    for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
+     if (TYPE_MODE (TREE_VALUE (t)) == mode
+       && !!unsignedp == !!TYPE_UNSIGNED (TREE_VALUE (t)))
+       return TREE_VALUE (t);
+ 
+   for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
      if (TYPE_MODE (TREE_VALUE (t)) == mode)
        return TREE_VALUE (t);
  


Attachment: gcc-1.diffs.patch
Description: Binary data

Reply via email to