From b83c4036106e89a5c12f75519bdfeb125d27cbb6 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Mon, 9 Feb 2004 14:00:36 +0000 Subject: [PATCH] fold-const.c (fold): Use the original type conversion tree code rather than call fold_convert... * fold-const.c (fold) : 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 --- gcc/ChangeLog | 16 ++++++++++++---- gcc/fold-const.c | 16 ++++++++-------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.c-torture/compile/20040209-1.c | 9 +++++++++ 4 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20040209-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4d8c2cb181e..b6791b08f42 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,12 +1,20 @@ +2004-02-09 Roger Sayle + + * fold-const.c (fold) : 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 * 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. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index b51a510f05c..3f68051da2d 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f4c3aed13d8..86296b2f0a1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-02-09 Roger Sayle + + * gcc.c-torture/compile/20040209-1.c: New test case. + 2004-02-08 Joseph S. Myers * gcc.dg/c90-init-1.c: Adjust expected error messages. diff --git a/gcc/testsuite/gcc.c-torture/compile/20040209-1.c b/gcc/testsuite/gcc.c-torture/compile/20040209-1.c new file mode 100644 index 00000000000..d256d58e34b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20040209-1.c @@ -0,0 +1,9 @@ +/* The following code used to ICE in fold_convert. */ + +float ceilf(float); + +int foo(float x) +{ + return (double)ceilf(x); +} + -- 2.30.2