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:
parent
016925bc68
commit
05fa7d54d9
4 changed files with 21 additions and 19 deletions
|
@ -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>
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue