On Wed, 7 Mar 2012, Richard Guenther wrote: > On Wed, 7 Mar 2012, Michael Matz wrote: > > > Hi, > > > > On Wed, 7 Mar 2012, Richard Guenther wrote: > > > > > FAIL: gcc.dg/tree-ssa/pr31261.c scan-tree-dump-times original "return > > > \\(char\\) > > > -\\(unsigned char\\) c & 31;" 1 > > > FAIL: gcc.dg/tree-ssa/pr31261.c scan-tree-dump-times original "return > > > \\(int\\) > > > \\(12 - \\(unsigned int\\) d\\) & 7;" 1 > > > > > > because we dump the unsigned type variant differently now. What do > > > people think - adjust the testcase? Adjust how we pretty-print > > > these non-standard integer types? > > > > Adjusting the pretty printer would be nice anyway. Those <unnamed>:35 > > thingies hurt my eyes. Just printing int17 or uint18 would be perfectly > > fine, with special casing of sizes that match the normal C types for > > the target in question (so that input 'unsigned char' isn't converted to > > 'uint8' on one and 'uint16' on another target). > > Ok, I'll do that (special-casing some precisions via *_TYPE_SIZE). > I won't touch the <unnamed-unsigned-type:35> stuff, for now.
Like so. Richard. 2012-03-12 Richard Guenther <rguent...@suse.de> * tree.c (signed_or_unsigned_type_for): Use build_nonstandard_integer_type. (signed_type_for): Adjust documentation. (unsigned_type_for): Likewise. * tree-pretty-print.c (dump_generic_node): Use standard names for non-standard integer types if available. Index: gcc/tree.c =================================================================== *** gcc/tree.c.orig 2012-03-12 11:11:36.000000000 +0100 --- gcc/tree.c 2012-03-12 12:25:37.000000000 +0100 *************** widest_int_cst_value (const_tree x) *** 10197,10228 **** return val; } ! /* If TYPE is an integral type, return an equivalent type which is ! unsigned iff UNSIGNEDP is true. If TYPE is not an integral type, ! return TYPE itself. */ tree signed_or_unsigned_type_for (int unsignedp, tree type) { ! tree t = type; ! if (POINTER_TYPE_P (type)) ! { ! /* If the pointer points to the normal address space, use the ! size_type_node. Otherwise use an appropriate size for the pointer ! based on the named address space it points to. */ ! if (!TYPE_ADDR_SPACE (TREE_TYPE (t))) ! t = size_type_node; ! else ! return lang_hooks.types.type_for_size (TYPE_PRECISION (t), unsignedp); ! } ! if (!INTEGRAL_TYPE_P (t) || TYPE_UNSIGNED (t) == unsignedp) ! return t; ! return lang_hooks.types.type_for_size (TYPE_PRECISION (t), unsignedp); } ! /* Returns unsigned variant of TYPE. */ tree unsigned_type_for (tree type) --- 10197,10222 ---- return val; } ! /* If TYPE is an integral or pointer type, return an integer type with ! the same precision which is unsigned iff UNSIGNEDP is true, or itself ! if TYPE is already an integer type of signedness UNSIGNEDP. */ tree signed_or_unsigned_type_for (int unsignedp, tree type) { ! if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp) ! return type; ! if (!INTEGRAL_TYPE_P (type) ! && !POINTER_TYPE_P (type)) ! return NULL_TREE; ! return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp); } ! /* If TYPE is an integral or pointer type, return an integer type with ! the same precision which is unsigned, or itself if TYPE is already an ! unsigned integer type. */ tree unsigned_type_for (tree type) *************** unsigned_type_for (tree type) *** 10230,10236 **** return signed_or_unsigned_type_for (1, type); } ! /* Returns signed variant of TYPE. */ tree signed_type_for (tree type) --- 10224,10232 ---- return signed_or_unsigned_type_for (1, type); } ! /* If TYPE is an integral or pointer type, return an integer type with ! the same precision which is signed, or itself if TYPE is already a ! signed integer type. */ tree signed_type_for (tree type) Index: gcc/tree-pretty-print.c =================================================================== *** gcc/tree-pretty-print.c.orig 2012-01-30 14:44:40.000000000 +0100 --- gcc/tree-pretty-print.c 2012-03-12 12:34:01.000000000 +0100 *************** dump_generic_node (pretty_printer *buffe *** 723,733 **** } else if (TREE_CODE (node) == INTEGER_TYPE) { ! pp_string (buffer, (TYPE_UNSIGNED (node) ! ? "<unnamed-unsigned:" ! : "<unnamed-signed:")); ! pp_decimal_int (buffer, TYPE_PRECISION (node)); ! pp_string (buffer, ">"); } else if (TREE_CODE (node) == COMPLEX_TYPE) { --- 723,763 ---- } else if (TREE_CODE (node) == INTEGER_TYPE) { ! if (TYPE_PRECISION (node) == CHAR_TYPE_SIZE) ! pp_string (buffer, (TYPE_UNSIGNED (node) ! ? "unsigned char" ! : "signed char")); ! else if (TYPE_PRECISION (node) == SHORT_TYPE_SIZE) ! pp_string (buffer, (TYPE_UNSIGNED (node) ! ? "unsigned short" ! : "signed short")); ! else if (TYPE_PRECISION (node) == INT_TYPE_SIZE) ! pp_string (buffer, (TYPE_UNSIGNED (node) ! ? "unsigned int" ! : "signed int")); ! else if (TYPE_PRECISION (node) == LONG_TYPE_SIZE) ! pp_string (buffer, (TYPE_UNSIGNED (node) ! ? "unsigned long" ! : "signed long")); ! else if (TYPE_PRECISION (node) == LONG_LONG_TYPE_SIZE) ! pp_string (buffer, (TYPE_UNSIGNED (node) ! ? "unsigned long long" ! : "signed long long")); ! else if (TYPE_PRECISION (node) >= CHAR_TYPE_SIZE ! && exact_log2 (TYPE_PRECISION (node))) ! { ! pp_string (buffer, (TYPE_UNSIGNED (node) ? "uint" : "int")); ! pp_decimal_int (buffer, TYPE_PRECISION (node)); ! pp_string (buffer, "_t"); ! } ! else ! { ! pp_string (buffer, (TYPE_UNSIGNED (node) ! ? "<unnamed-unsigned:" ! : "<unnamed-signed:")); ! pp_decimal_int (buffer, TYPE_PRECISION (node)); ! pp_string (buffer, ">"); ! } } else if (TREE_CODE (node) == COMPLEX_TYPE) {