aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2006-03-30 22:37:55 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-03-30 22:37:55 +0000
commit240c7c0274918523dd1187df61d968bc87dd3772 (patch)
tree1cea32df0aa98cf151d07a38e79463e8ff6decc4
parent7d30b888b5dee88c300e64ab6a6916ac069b0a68 (diff)
downloadgcc-240c7c0274918523dd1187df61d968bc87dd3772.zip
gcc-240c7c0274918523dd1187df61d968bc87dd3772.tar.gz
gcc-240c7c0274918523dd1187df61d968bc87dd3772.tar.bz2
re PR middle-end/22375 (fold_builtins creates mis-matched types)
PR middle-end/22375 * trans.c (gfc_trans_runtime_check): Promote the arguments of __builtin_expect to the correct types, and the result back to boolean_type_node. From-SVN: r112547
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/trans.c4
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 379d687..e1d1d30 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2006-03-30 Roger Sayle <roger@eyesopen.com>
+
+ PR middle-end/22375
+ * trans.c (gfc_trans_runtime_check): Promote the arguments of
+ __builtin_expect to the correct types, and the result back to
+ boolean_type_node.
+
2006-03-29 Carlos O'Donell <carlos@codesourcery.com>
* Make-lang.in: Rename docdir to gcc_docdir.
diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c
index a586932..3a15d8b 100644
--- a/gcc/fortran/trans.c
+++ b/gcc/fortran/trans.c
@@ -340,9 +340,11 @@ gfc_trans_runtime_check (tree cond, tree msg, stmtblock_t * pblock)
else
{
/* Tell the compiler that this isn't likely. */
+ cond = fold_convert (long_integer_type_node, cond);
tmp = gfc_chainon_list (NULL_TREE, cond);
- tmp = gfc_chainon_list (tmp, integer_zero_node);
+ tmp = gfc_chainon_list (tmp, build_int_cst (long_integer_type_node, 0));
cond = build_function_call_expr (built_in_decls[BUILT_IN_EXPECT], tmp);
+ cond = fold_convert (boolean_type_node, cond);
tmp = build3_v (COND_EXPR, cond, body, build_empty_stmt ());
gfc_add_expr_to_block (pblock, tmp);