tree.h (TYPE_STRING_FLAG): Document that this field may be used on INTEGER_TYPEs to indicate that it...

* tree.h (TYPE_STRING_FLAG): Document that this field may be used
	on INTEGER_TYPEs to indicate that it denotes a character type.
	* tree.c (build_common_tree_nodes): Set TYPE_STRING_FLAG on
	signed_char_type_node, unsigned_char_type_node and char_type_node.
	* dwarf2out.c (base_type_die): Treat CHAR_TYPE identically to
	INTEGER_TYPE.  Use TYPE_STRING_FLAG to decide whether to emit
	a DW_ATE_[un]signed_char instead of a DW_ATE_[un]signed.

From-SVN: r110536
This commit is contained in:
Roger Sayle 2006-02-03 03:41:47 +00:00 committed by Roger Sayle
parent 016925bc68
commit 05fa7d54d9
4 changed files with 21 additions and 19 deletions

View file

@ -1,3 +1,13 @@
2006-02-02 Roger Sayle <roger@eyesopen.com>
* tree.h (TYPE_STRING_FLAG): Document that this field may be used
on INTEGER_TYPEs to indicate that it denotes a character type.
* tree.c (build_common_tree_nodes): Set TYPE_STRING_FLAG on
signed_char_type_node, unsigned_char_type_node and char_type_node.
* dwarf2out.c (base_type_die): Treat CHAR_TYPE identically to
INTEGER_TYPE. Use TYPE_STRING_FLAG to decide whether to emit
a DW_ATE_[un]signed_char instead of a DW_ATE_[un]signed.
2006-02-02 Zdenek Dvorak <dvorakz@suse.cz>
Daniel Berlin <dberlin@dberlin.org>

View file

@ -8097,30 +8097,19 @@ base_type_die (tree type)
switch (TREE_CODE (type))
{
case CHAR_TYPE:
case INTEGER_TYPE:
/* Carefully distinguish the C character types, without messing
up if the language is not C. Note that we check only for the names
that contain spaces; other names might occur by coincidence in other
languages. */
if (! (TYPE_PRECISION (type) == CHAR_TYPE_SIZE
&& (TYPE_MAIN_VARIANT (type) == char_type_node
|| ! strcmp (type_name, "signed char")
|| ! strcmp (type_name, "unsigned char"))))
if (TYPE_STRING_FLAG (type))
{
if (TYPE_UNSIGNED (type))
encoding = DW_ATE_unsigned;
encoding = DW_ATE_unsigned_char;
else
encoding = DW_ATE_signed;
break;
encoding = DW_ATE_signed_char;
}
/* else fall through. */
case CHAR_TYPE:
/* GNU Pascal/Ada CHAR type. Not used in C. */
if (TYPE_UNSIGNED (type))
encoding = DW_ATE_unsigned_char;
else if (TYPE_UNSIGNED (type))
encoding = DW_ATE_unsigned;
else
encoding = DW_ATE_signed_char;
encoding = DW_ATE_signed;
break;
case REAL_TYPE:

View file

@ -6342,7 +6342,9 @@ build_common_tree_nodes (bool signed_char, bool signed_sizetype)
/* Define both `signed char' and `unsigned char'. */
signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
TYPE_STRING_FLAG (signed_char_type_node) = 1;
unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
/* Define `char', which is like either `signed char' or `unsigned char'
but not the same as either. */
@ -6350,6 +6352,7 @@ build_common_tree_nodes (bool signed_char, bool signed_sizetype)
= (signed_char
? make_signed_type (CHAR_TYPE_SIZE)
: make_unsigned_type (CHAR_TYPE_SIZE));
TYPE_STRING_FLAG (char_type_node) = 1;
short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);

View file

@ -2013,7 +2013,7 @@ struct tree_block GTY(())
/* If set in an ARRAY_TYPE, indicates a string type (for languages
that distinguish string from array of char).
If set in a SET_TYPE, indicates a bitstring type. */
If set in a INTEGER_TYPE, indicates a character type. */
#define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag)
/* If non-NULL, this is an upper bound of the size (in bytes) of an