mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 21:31:19 +08:00
fold-const.c (fold): Use the original type conversion tree code rather than call fold_convert...
* fold-const.c (fold) <NOP_EXPR>: Use the original type conversion tree code rather than call fold_convert, which doesn't specify a default floating point to integer conversion. * gcc.c-torture/compile/20040209-1.c: New test case. From-SVN: r77535
This commit is contained in:
parent
12001e0ff9
commit
b83c403610
@ -1,12 +1,20 @@
|
||||
2004-02-09 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* fold-const.c (fold) <NOP_EXPR>: Use the original type conversion
|
||||
tree code rather than call fold_convert, which doesn't specify a
|
||||
default floating point to integer conversion.
|
||||
|
||||
2004-02-08 Bernardo Innocenti <bernie@develer.com>
|
||||
|
||||
* config/m68k/m68k.c, config/m68k/m68k.md (SGS, SGS_CMP_ORDER): Remove
|
||||
code to support SGS assembler. Reformat adjacent code where possible.
|
||||
* config/m68k/m68k.c (switch_table_difference_label_flag): Remove definition.
|
||||
* config/m68k/m68k.h (PRINT_OPERAND_PUNCT_VALID_P): Remove support for '%#'.
|
||||
* config/m68k/m68k.c (switch_table_difference_label_flag): Remove
|
||||
definition.
|
||||
* config/m68k/m68k.h (PRINT_OPERAND_PUNCT_VALID_P): Remove support
|
||||
for '%#'.
|
||||
* config/m68k/linux.h, config/m68k/m68k.c,
|
||||
* config/m68k/math-68881.h: Replace `%#' with `#' in inline asm macros and
|
||||
asm_printf() format strings.
|
||||
* config/m68k/math-68881.h: Replace `%#' with `#' in inline asm
|
||||
macros and asm_printf() format strings.
|
||||
* config/m68k/m68kelf.h (ASM_OUTPUT_CASE_END): Remove macro definition.
|
||||
* config/m68k/linux.h: Update copyright.
|
||||
* config/m68k/linux.h, config/m68k/m68k.c: Remove traling whitespace.
|
||||
|
@ -5641,8 +5641,8 @@ fold (tree expr)
|
||||
if (TYPE_MAIN_VARIANT (inside_type) == TYPE_MAIN_VARIANT (final_type)
|
||||
&& ((inter_int && final_int) || (inter_float && final_float))
|
||||
&& inter_prec >= final_prec)
|
||||
return fold_convert (final_type,
|
||||
TREE_OPERAND (TREE_OPERAND (t, 0), 0));
|
||||
return fold (build1 (code, final_type,
|
||||
TREE_OPERAND (TREE_OPERAND (t, 0), 0)));
|
||||
|
||||
/* Likewise, if the intermediate and final types are either both
|
||||
float or both integer, we don't need the middle conversion if
|
||||
@ -5657,16 +5657,16 @@ fold (tree expr)
|
||||
&& ! (final_prec != GET_MODE_BITSIZE (TYPE_MODE (final_type))
|
||||
&& TYPE_MODE (final_type) == TYPE_MODE (inter_type))
|
||||
&& ! final_ptr)
|
||||
return fold_convert (final_type,
|
||||
TREE_OPERAND (TREE_OPERAND (t, 0), 0));
|
||||
return fold (build1 (code, final_type,
|
||||
TREE_OPERAND (TREE_OPERAND (t, 0), 0)));
|
||||
|
||||
/* If we have a sign-extension of a zero-extended value, we can
|
||||
replace that by a single zero-extension. */
|
||||
if (inside_int && inter_int && final_int
|
||||
&& inside_prec < inter_prec && inter_prec < final_prec
|
||||
&& inside_unsignedp && !inter_unsignedp)
|
||||
return fold_convert (final_type,
|
||||
TREE_OPERAND (TREE_OPERAND (t, 0), 0));
|
||||
return fold (build1 (code, final_type,
|
||||
TREE_OPERAND (TREE_OPERAND (t, 0), 0)));
|
||||
|
||||
/* Two conversions in a row are not needed unless:
|
||||
- some conversion is floating-point (overstrict for now), or
|
||||
@ -5690,8 +5690,8 @@ fold (tree expr)
|
||||
&& ! (final_prec != GET_MODE_BITSIZE (TYPE_MODE (final_type))
|
||||
&& TYPE_MODE (final_type) == TYPE_MODE (inter_type))
|
||||
&& ! final_ptr)
|
||||
return fold_convert (final_type,
|
||||
TREE_OPERAND (TREE_OPERAND (t, 0), 0));
|
||||
return fold (build1 (code, final_type,
|
||||
TREE_OPERAND (TREE_OPERAND (t, 0), 0)));
|
||||
}
|
||||
|
||||
if (TREE_CODE (TREE_OPERAND (t, 0)) == MODIFY_EXPR
|
||||
|
@ -1,3 +1,7 @@
|
||||
2004-02-09 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* gcc.c-torture/compile/20040209-1.c: New test case.
|
||||
|
||||
2004-02-08 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||
|
||||
* gcc.dg/c90-init-1.c: Adjust expected error messages.
|
||||
|
9
gcc/testsuite/gcc.c-torture/compile/20040209-1.c
Normal file
9
gcc/testsuite/gcc.c-torture/compile/20040209-1.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* The following code used to ICE in fold_convert. */
|
||||
|
||||
float ceilf(float);
|
||||
|
||||
int foo(float x)
|
||||
{
|
||||
return (double)ceilf(x);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user