OSDN Git Service

2006-11-23 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
authormanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Nov 2006 18:49:22 +0000 (18:49 +0000)
committermanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Nov 2006 18:49:22 +0000 (18:49 +0000)
* real.h (real_isinteger): Declare.
* real.c (real_isinteger): Define.
* builtins.c (integer_valued_real_p): Use it.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119130 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/builtins.c
gcc/real.c
gcc/real.h

index f649c7b..0244e45 100644 (file)
@@ -1,5 +1,11 @@
 2006-11-23  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
 
+       * real.h (real_isinteger): Declare.
+       * real.c (real_isinteger): Define.
+       * builtins.c (integer_valued_real_p): Use it.
+
+2006-11-23  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
        PR c/9072 
        * c.opt (Wtraditional-conversion): New.
        (Wconversion): Update description.
index 4e4ea96..75b47fb 100644 (file)
@@ -6677,15 +6677,7 @@ integer_valued_real_p (tree t)
             && integer_valued_real_p (TREE_OPERAND (t, 2));
 
     case REAL_CST:
-      if (! TREE_CONSTANT_OVERFLOW (t))
-      {
-       REAL_VALUE_TYPE c, cint;
-
-       c = TREE_REAL_CST (t);
-       real_trunc (&cint, TYPE_MODE (TREE_TYPE (t)), &c);
-       return real_identical (&c, &cint);
-      }
-      break;
+      return real_isinteger (TREE_REAL_CST_PTR (t), TYPE_MODE (TREE_TYPE (t)));
 
     case NOP_EXPR:
       {
index bfb8462..0d239b3 100644 (file)
@@ -4968,3 +4968,14 @@ real_from_mpfr (REAL_VALUE_TYPE *r, mpfr_srcptr m)
   
   real_from_string (r, buf);
 }
+
+/* Check whether the real constant value given is an integer.  */
+
+bool
+real_isinteger (const REAL_VALUE_TYPE *c, enum machine_mode mode)
+{
+  REAL_VALUE_TYPE cint;
+
+  real_trunc (&cint, mode, c);
+  return real_identical (c, &cint);
+}
index 5a45892..4198b02 100644 (file)
@@ -433,4 +433,7 @@ extern void real_copysign (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
 extern void real_from_mpfr (REAL_VALUE_TYPE *, mpfr_srcptr);
 extern void mpfr_from_real (mpfr_ptr, const REAL_VALUE_TYPE *);
 
+/* Check whether the real constant value given is an integer.  */
+extern bool real_isinteger (const REAL_VALUE_TYPE *c, enum machine_mode mode);
+
 #endif /* ! GCC_REAL_H */