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);
gcc-1.diffs.patch
Description: Binary data