gimple-parser.c (c_parser_gimple_postfix_expression): Parse _Literal ( type-name ) number.
2017-01-13 Richard Biener <rguenther@suse.de> c/ * gimple-parser.c (c_parser_gimple_postfix_expression): Parse _Literal ( type-name ) number. * tree-pretty-print.c (dump_generic_node): Dump INTEGER_CSTs as _Literal ( type ) number in case usual suffixes do not preserve all information. * gcc.dg/gimplefe-22.c: New testcase. From-SVN: r244393
This commit is contained in:
parent
10b70b8e5e
commit
2532991330
@ -1,3 +1,9 @@
|
||||
2017-01-13 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* tree-pretty-print.c (dump_generic_node): Dump INTEGER_CSTs
|
||||
as _Literal ( type ) number in case usual suffixes do not
|
||||
preserve all information.
|
||||
|
||||
2017-01-12 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
PR target/79004
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-01-13 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* gimple-parser.c (c_parser_gimple_postfix_expression): Parse
|
||||
_Literal ( type-name ) number.
|
||||
|
||||
2017-01-12 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* gimple-parser.c (c_parser_gimple_postfix_expression): Parse
|
||||
|
@ -799,6 +799,32 @@ c_parser_gimple_postfix_expression (c_parser *parser)
|
||||
type, ptr.value, alias_off);
|
||||
break;
|
||||
}
|
||||
else if (strcmp (IDENTIFIER_POINTER (id), "_Literal") == 0)
|
||||
{
|
||||
/* _Literal '(' type-name ')' number */
|
||||
c_parser_consume_token (parser);
|
||||
tree type = NULL_TREE;
|
||||
if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
|
||||
{
|
||||
struct c_type_name *type_name = c_parser_type_name (parser);
|
||||
tree tem;
|
||||
if (type_name)
|
||||
type = groktypename (type_name, &tem, NULL);
|
||||
c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
|
||||
"expected %<)%>");
|
||||
}
|
||||
tree val = c_parser_gimple_postfix_expression (parser).value;
|
||||
if (! type
|
||||
|| ! val
|
||||
|| val == error_mark_node
|
||||
|| TREE_CODE (val) != INTEGER_CST)
|
||||
{
|
||||
c_parser_error (parser, "invalid _Literal");
|
||||
return expr;
|
||||
}
|
||||
expr.value = fold_convert (type, val);
|
||||
return expr;
|
||||
}
|
||||
/* SSA name. */
|
||||
unsigned version, ver_offset;
|
||||
if (! lookup_name (id)
|
||||
|
@ -1,3 +1,7 @@
|
||||
2017-01-13 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* gcc.dg/gimplefe-22.c: New testcase.
|
||||
|
||||
2017-01-13 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/77283
|
||||
|
9
gcc/testsuite/gcc.dg/gimplefe-22.c
Normal file
9
gcc/testsuite/gcc.dg/gimplefe-22.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fgimple" } */
|
||||
|
||||
void __GIMPLE ()
|
||||
foo (short * p)
|
||||
{
|
||||
*p = _Literal (short int) 1;
|
||||
return;
|
||||
}
|
@ -1664,6 +1664,16 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, int flags,
|
||||
break;
|
||||
|
||||
case INTEGER_CST:
|
||||
if (flags & TDF_GIMPLE
|
||||
&& (POINTER_TYPE_P (TREE_TYPE (node))
|
||||
|| (TYPE_PRECISION (TREE_TYPE (node))
|
||||
< TYPE_PRECISION (integer_type_node))
|
||||
|| exact_log2 (TYPE_PRECISION (TREE_TYPE (node))) == -1))
|
||||
{
|
||||
pp_string (pp, "_Literal (");
|
||||
dump_generic_node (pp, TREE_TYPE (node), spc, flags, false);
|
||||
pp_string (pp, ") ");
|
||||
}
|
||||
if (TREE_CODE (TREE_TYPE (node)) == POINTER_TYPE
|
||||
&& ! (flags & TDF_GIMPLE))
|
||||
{
|
||||
@ -1693,11 +1703,7 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, int flags,
|
||||
else if (tree_fits_shwi_p (node))
|
||||
pp_wide_integer (pp, tree_to_shwi (node));
|
||||
else if (tree_fits_uhwi_p (node))
|
||||
{
|
||||
pp_unsigned_wide_integer (pp, tree_to_uhwi (node));
|
||||
if (flags & TDF_GIMPLE)
|
||||
pp_character (pp, 'U');
|
||||
}
|
||||
pp_unsigned_wide_integer (pp, tree_to_uhwi (node));
|
||||
else
|
||||
{
|
||||
wide_int val = node;
|
||||
@ -1710,6 +1716,24 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, int flags,
|
||||
print_hex (val, pp_buffer (pp)->digit_buffer);
|
||||
pp_string (pp, pp_buffer (pp)->digit_buffer);
|
||||
}
|
||||
if ((flags & TDF_GIMPLE)
|
||||
&& (POINTER_TYPE_P (TREE_TYPE (node))
|
||||
|| (TYPE_PRECISION (TREE_TYPE (node))
|
||||
< TYPE_PRECISION (integer_type_node))
|
||||
|| exact_log2 (TYPE_PRECISION (TREE_TYPE (node))) == -1))
|
||||
{
|
||||
if (TYPE_UNSIGNED (TREE_TYPE (node)))
|
||||
pp_character (pp, 'u');
|
||||
if (TYPE_PRECISION (TREE_TYPE (node))
|
||||
== TYPE_PRECISION (unsigned_type_node))
|
||||
;
|
||||
else if (TYPE_PRECISION (TREE_TYPE (node))
|
||||
== TYPE_PRECISION (long_unsigned_type_node))
|
||||
pp_character (pp, 'l');
|
||||
else if (TYPE_PRECISION (TREE_TYPE (node))
|
||||
== TYPE_PRECISION (long_long_unsigned_type_node))
|
||||
pp_string (pp, "ll");
|
||||
}
|
||||
if (TREE_OVERFLOW (node))
|
||||
pp_string (pp, "(OVF)");
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user