tree.c (signed_or_unsigned_type_for): Use build_nonstandard_integer_type.
2012-03-12 Richard Guenther <rguenther@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. From-SVN: r185226
This commit is contained in:
parent
d8aba32a09
commit
7ee6fd6836
@ -1,3 +1,12 @@
|
||||
2012-03-12 Richard Guenther <rguenther@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.
|
||||
|
||||
2012-03-12 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* config/vms/vms.opt: Add vms-opts.h header.
|
||||
|
@ -723,11 +723,41 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
||||
}
|
||||
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, ">");
|
||||
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)
|
||||
{
|
||||
|
34
gcc/tree.c
34
gcc/tree.c
@ -10197,32 +10197,26 @@ widest_int_cst_value (const_tree x)
|
||||
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. */
|
||||
/* 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)
|
||||
{
|
||||
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 (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp)
|
||||
return type;
|
||||
|
||||
if (!INTEGRAL_TYPE_P (t) || TYPE_UNSIGNED (t) == unsignedp)
|
||||
return t;
|
||||
if (!INTEGRAL_TYPE_P (type)
|
||||
&& !POINTER_TYPE_P (type))
|
||||
return NULL_TREE;
|
||||
|
||||
return lang_hooks.types.type_for_size (TYPE_PRECISION (t), unsignedp);
|
||||
return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
|
||||
}
|
||||
|
||||
/* Returns unsigned variant of TYPE. */
|
||||
/* 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)
|
||||
@ -10230,7 +10224,9 @@ unsigned_type_for (tree type)
|
||||
return signed_or_unsigned_type_for (1, type);
|
||||
}
|
||||
|
||||
/* Returns signed variant of 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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user