From c833f6d2b4b3ca8e3bcd738c9dd0a8cb7e06b24c Mon Sep 17 00:00:00 2001
From: Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Date: Tue, 14 Aug 2007 22:40:00 +0000
Subject: [PATCH] re PR fortran/33073 (Type mismatch in build_fixbound_expr())

	PR fortran/33073
	* trans-intrinsic.c (build_fixbound_expr): Convert to result type
	in all cases.

From-SVN: r127494
---
 gcc/fortran/ChangeLog         |  6 ++++++
 gcc/fortran/trans-intrinsic.c | 24 ++++--------------------
 2 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 0801212a37c7..7eef7f9a1c04 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2007-08-14  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+	PR fortran/33073
+	* trans-intrinsic.c (build_fixbound_expr): Convert to result type
+	in all cases.
+
 2007-08-14  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
 	PR fortran/32594
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index c8e16462aa8f..2e8b8a010ac4 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -314,10 +314,9 @@ build_fixbound_expr (stmtblock_t * pblock, tree arg, tree type, int up)
 static tree
 build_round_expr (tree arg, tree restype)
 {
-  tree tmp;
   tree argtype;
   tree fn;
-  bool longlong, convert;
+  bool longlong;
   int argprec, resprec;
 
   argtype = TREE_TYPE (arg);
@@ -328,21 +327,9 @@ build_round_expr (tree arg, tree restype)
      (lround family) or long long intrinsic (llround).  We might also
      need to convert the result afterwards.  */
   if (resprec <= LONG_TYPE_SIZE)
-    {
-      longlong = false;
-      if (resprec != LONG_TYPE_SIZE)
-	convert = true;
-      else
-	convert = false;
-    }
+    longlong = false;
   else if (resprec <= LONG_LONG_TYPE_SIZE)
-    {
-      longlong = true;
-      if (resprec != LONG_LONG_TYPE_SIZE)
-	convert = true;
-      else
-	convert = false;
-    }
+    longlong = true;
   else
     gcc_unreachable ();
 
@@ -356,10 +343,7 @@ build_round_expr (tree arg, tree restype)
   else
     gcc_unreachable ();
 
-  tmp = build_call_expr (fn, 1, arg);
-  if (convert)
-    tmp = fold_convert (restype, tmp);
-  return tmp;
+  return fold_convert (restype, build_call_expr (fn, 1, arg));
 }
 
 
-- 
GitLab