From 6978db0d0260af117902fb798eace60bb5192e51 Mon Sep 17 00:00:00 2001 From: geoffk Date: Wed, 27 Oct 2004 02:48:26 +0000 Subject: [PATCH] * btest-gcc.sh (TESTLOGS): Examine regressions in libstdc++, libffi, and libjava. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89629 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 ++ gcc/builtins.c | 60 +++++++++++------------- gcc/testsuite/ChangeLog | 4 ++ gcc/testsuite/gcc.c-torture/compile/20041026-1.c | 5 ++ 4 files changed, 41 insertions(+), 33 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20041026-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 38c6bfc5014..7535b4c5e7c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-10-26 Geoffrey Keating + + * builtins.c (fold_builtin_unordered_cmp): Always bring both + operands to the same type. + 2004-10-26 James E Wilson PR target/18010 diff --git a/gcc/builtins.c b/gcc/builtins.c index 57d871aa606..4c1d3a4f6fc 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -7602,13 +7602,12 @@ fold_builtin_unordered_cmp (tree exp, tree type = TREE_TYPE (TREE_TYPE (fndecl)); enum tree_code code; tree arg0, arg1; + tree type0, type1; + enum tree_code code0, code1; + tree cmp_type = NULL_TREE; if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE)) { - enum tree_code code0, code1; - tree type0, type1; - tree cmp_type = 0; - /* Check that we have exactly two arguments. */ if (arglist == 0 || TREE_CHAIN (arglist) == 0) { @@ -7622,39 +7621,34 @@ fold_builtin_unordered_cmp (tree exp, IDENTIFIER_POINTER (DECL_NAME (fndecl))); return error_mark_node; } - - arg0 = TREE_VALUE (arglist); - arg1 = TREE_VALUE (TREE_CHAIN (arglist)); - - type0 = TREE_TYPE (arg0); - type1 = TREE_TYPE (arg1); - - code0 = TREE_CODE (type0); - code1 = TREE_CODE (type1); - - if (code0 == REAL_TYPE && code1 == REAL_TYPE) - /* Choose the wider of two real types. */ - cmp_type = TYPE_PRECISION (type0) >= TYPE_PRECISION (type1) - ? type0 : type1; - else if (code0 == REAL_TYPE && code1 == INTEGER_TYPE) - cmp_type = type0; - else if (code0 == INTEGER_TYPE && code1 == REAL_TYPE) - cmp_type = type1; - else - { - error ("non-floating-point argument to function %qs", - IDENTIFIER_POINTER (DECL_NAME (fndecl))); - return error_mark_node; - } - - arg0 = fold_convert (cmp_type, arg0); - arg1 = fold_convert (cmp_type, arg1); } + + arg0 = TREE_VALUE (arglist); + arg1 = TREE_VALUE (TREE_CHAIN (arglist)); + + type0 = TREE_TYPE (arg0); + type1 = TREE_TYPE (arg1); + + code0 = TREE_CODE (type0); + code1 = TREE_CODE (type1); + + if (code0 == REAL_TYPE && code1 == REAL_TYPE) + /* Choose the wider of two real types. */ + cmp_type = TYPE_PRECISION (type0) >= TYPE_PRECISION (type1) + ? type0 : type1; + else if (code0 == REAL_TYPE && code1 == INTEGER_TYPE) + cmp_type = type0; + else if (code0 == INTEGER_TYPE && code1 == REAL_TYPE) + cmp_type = type1; else { - arg0 = TREE_VALUE (arglist); - arg1 = TREE_VALUE (TREE_CHAIN (arglist)); + error ("non-floating-point argument to function %qs", + IDENTIFIER_POINTER (DECL_NAME (fndecl))); + return error_mark_node; } + + arg0 = fold_convert (cmp_type, arg0); + arg1 = fold_convert (cmp_type, arg1); if (unordered_code == UNORDERED_EXPR) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e248aef39b7..22d8fa79b53 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-10-26 Geoffrey Keating + + * gcc.c-torture/compile/20041026-1.c: New. + 2004-10-26 Mark Mitchell PR c++/18093 diff --git a/gcc/testsuite/gcc.c-torture/compile/20041026-1.c b/gcc/testsuite/gcc.c-torture/compile/20041026-1.c new file mode 100644 index 00000000000..3d6ae8fcd4a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20041026-1.c @@ -0,0 +1,5 @@ +int +foo (double x, long double y) +{ + return __builtin_isgreater (x, y); +} -- 2.11.4.GIT