Fix INTEGER*8 conversion bugs
craig@jcb-sc.com
craig@jcb-sc.com
Sat Mar 13 15:11:00 GMT 1999
Committed. (If it was a week earlier, I'd probably put this in egcs
1.1.2, as it fixes a code-generation bug involving numerics....)
Actually, *not* committed, yet...egcs.cygnus.com seems to be down.
So sending this patch serves as a sort of backup. I'll commit it
later.
tq vm, (burley)
Sat Mar 13 17:51:55 1999 Craig Burley <craig@jcb-sc.com>
Fix 19990313-0.f, 19990313-1.f, 19990313-2.f, 19990313-3.f:
* bad.def (FFEBAD_NOCANDO): New error code for internal use only.
* expr.c (ffeexpr_collapse_convert): If FFEBAD_NOCANDO returned
by convertor, just return original expr.
* target.h: Return FFEBAD_NOCANDO for (usually) 64-bit
conversions that aren't yet working properly.
* news.texi: Explain.
* version.c: Bump version.
*** g77-e/gcc/f/bad.def.~1~ Sat Mar 6 02:38:52 1999
--- g77-e/gcc/f/bad.def Sat Mar 13 17:17:50 1999
*************** FFEBAD_MSGS1 (FFEBAD_SFUNC_UNUSED, WARN,
*** 703,706 ****
--- 703,708 ----
FFEBAD_MSGS1 (FFEBAD_INTRINSIC_Y2KBAD, WARN,
"Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]")
+ FFEBAD_MSGS1 (FFEBAD_NOCANDO, DISASTER,
+ "Internal compiler error -- cannot perform operation")
#undef INFORM
*** g77-e/gcc/f/expr.c.~1~ Thu Feb 18 08:44:37 1999
--- g77-e/gcc/f/expr.c Sat Mar 13 17:36:58 1999
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 634,637 ****
--- 634,641 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_integer1_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 823,826 ****
--- 827,834 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_integer2_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 1012,1015 ****
--- 1020,1027 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_integer3_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 1201,1204 ****
--- 1213,1220 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_integer4_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 1318,1321 ****
--- 1334,1341 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_logical1_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 1425,1428 ****
--- 1445,1452 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_logical2_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 1532,1535 ****
--- 1556,1563 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_logical3_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 1639,1642 ****
--- 1667,1674 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_logical4_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 1797,1800 ****
--- 1829,1836 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_real1_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 1945,1948 ****
--- 1981,1988 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_real2_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 2093,2096 ****
--- 2133,2140 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_real3_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 2241,2244 ****
--- 2285,2292 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_real4_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 2399,2402 ****
--- 2447,2454 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_complex1_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 2547,2550 ****
--- 2599,2606 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_complex2_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 2695,2698 ****
--- 2751,2758 ----
}
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
+
expr = ffebld_new_conter_with_orig
(ffebld_constant_new_complex3_val
*************** ffeexpr_collapse_convert (ffebld expr, f
*** 2842,2845 ****
--- 2902,2909 ----
break;
}
+
+ /* If conversion operation is not implemented, return original expr. */
+ if (error == FFEBAD_NOCANDO)
+ return expr;
expr = ffebld_new_conter_with_orig
*** g77-e/gcc/f/news.texi.~1~ Sat Mar 13 15:16:40 1999
--- g77-e/gcc/f/news.texi Sat Mar 13 17:57:13 1999
*************** The following information was last updat
*** 156,159 ****
--- 156,170 ----
@ifclear USERVISONLY
@item
+ @code{g77} no longer generates bad code for assignments,
+ or other conversions,
+ of @code{REAL} or @code{COMPLEX} constant expressions
+ to type @code{INTEGER(KIND=2)}
+ (often referred to as @code{INTEGER*8}).
+
+ For example, @samp{INTEGER*8 J; J = 4E10} now works as documented.
+ @end ifclear
+
+ @ifclear USERVISONLY
+ @item
Fix @code{g77} so it no longer crashes when compiling
I/O statements using keywords that define @code{INTEGER} values,
*** g77-e/gcc/f/target.h.~1~ Mon Feb 15 20:56:11 1999
--- g77-e/gcc/f/target.h Sat Mar 13 17:51:30 1999
*************** void *ffetarget_memcpy_ (void *dst, void
*** 990,994 ****
--- 990,998 ----
#define ffetarget_convert_complex1_integer2 ffetarget_convert_complex1_integer
#define ffetarget_convert_complex1_integer3 ffetarget_convert_complex1_integer
+ #ifdef REAL_ARITHMETIC
+ #define ffetarget_convert_complex1_integer4(res,l) FFEBAD_NOCANDO
+ #else
#define ffetarget_convert_complex1_integer4 ffetarget_convert_complex1_integer
+ #endif
#ifdef REAL_ARITHMETIC
#define ffetarget_convert_complex1_real1(res,l) \
*************** void *ffetarget_memcpy_ (void *dst, void
*** 1042,1046 ****
--- 1046,1054 ----
#define ffetarget_convert_complex2_integer2 ffetarget_convert_complex2_integer
#define ffetarget_convert_complex2_integer3 ffetarget_convert_complex2_integer
+ #ifdef REAL_ARITHMETIC
+ #define ffetarget_convert_complex2_integer4(res,l) FFEBAD_NOCANDO
+ #else
#define ffetarget_convert_complex2_integer4 ffetarget_convert_complex2_integer
+ #endif
#ifdef REAL_ARITHMETIC
#define ffetarget_convert_complex2_real1(res,l) \
*************** void *ffetarget_memcpy_ (void *dst, void
*** 1112,1119 ****
--- 1120,1132 ----
#define ffetarget_convert_integer4_character1(res,l) \
ffetarget_convert_integer1_character1(res,l)
+ #ifdef REAL_ARITHMETIC
+ #define ffetarget_convert_integer4_complex1(res,l) FFEBAD_NOCANDO
+ #define ffetarget_convert_integer4_complex2(res,l) FFEBAD_NOCANDO
+ #else
#define ffetarget_convert_integer4_complex1(res,l) \
ffetarget_convert_integer1_complex1(res,l)
#define ffetarget_convert_integer4_complex2(res,l) \
ffetarget_convert_integer1_complex2(res,l)
+ #endif
#define ffetarget_convert_integer4_hollerith(res,l) \
ffetarget_convert_integer1_hollerith(res,l)
*************** void *ffetarget_memcpy_ (void *dst, void
*** 1129,1136 ****
--- 1142,1154 ----
#define ffetarget_convert_integer4_logical4(res,l) \
ffetarget_convert_integer1_logical1(res,l)
+ #ifdef REAL_ARITHMETIC
+ #define ffetarget_convert_integer4_real1(res,l) FFEBAD_NOCANDO
+ #define ffetarget_convert_integer4_real2(res,l) FFEBAD_NOCANDO
+ #else
#define ffetarget_convert_integer4_real1(res,l) \
ffetarget_convert_integer1_real1(res,l)
#define ffetarget_convert_integer4_real2(res,l) \
ffetarget_convert_integer1_real2(res,l)
+ #endif
#define ffetarget_convert_integer4_typeless(res,l) \
ffetarget_convert_integer1_typeless(res,l)
*************** void *ffetarget_memcpy_ (void *dst, void
*** 1239,1244 ****
--- 1257,1266 ----
#define ffetarget_convert_real1_integer3(res,l) \
ffetarget_convert_real1_integer1(res,l)
+ #ifdef REAL_ARITHMETIC
+ #define ffetarget_convert_real1_integer4(res,l) FFEBAD_NOCANDO
+ #else
#define ffetarget_convert_real1_integer4(res,l) \
ffetarget_convert_real1_integer1(res,l)
+ #endif
#define ffetarget_convert_real1_typeless(res,l) \
ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
*************** void *ffetarget_memcpy_ (void *dst, void
*** 1273,1278 ****
--- 1295,1304 ----
#define ffetarget_convert_real2_integer3(res,l) \
ffetarget_convert_real2_integer1(res,l)
+ #ifdef REAL_ARITHMETIC
+ #define ffetarget_convert_real2_integer4(res,l) FFEBAD_NOCANDO
+ #else
#define ffetarget_convert_real2_integer4(res,l) \
ffetarget_convert_real2_integer1(res,l)
+ #endif
#define ffetarget_convert_real2_typeless(res,l) \
ffetarget_convert_any_typeless_ ((char *) (res), sizeof(*(res)), l)
*** g77-e/gcc/f/version.c.~1~ Sat Mar 6 02:38:52 1999
--- g77-e/gcc/f/version.c Sat Mar 13 17:40:21 1999
***************
*** 1 ****
! char *ffe_version_string = "0.5.24-19990306";
--- 1 ----
! char *ffe_version_string = "0.5.24-19990313";
More information about the Gcc-patches
mailing list