OSDN Git Service

Fix INTEGER*8 conversion bugs
authorburley <burley@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Mar 1999 15:14:29 +0000 (15:14 +0000)
committerburley <burley@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Mar 1999 15:14:29 +0000 (15:14 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@25746 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/f/ChangeLog
gcc/f/bad.def
gcc/f/expr.c
gcc/f/news.texi
gcc/f/target.h
gcc/f/version.c

index 608c9f5..3998bfe 100644 (file)
@@ -1,3 +1,15 @@
+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.
+
 Sat Mar 13 14:26:55 1999  Craig Burley  <craig@jcb-sc.com>
 
        * RELEASE-PREP: New file, lists things to do for a release.
index 430c283..4c7bfe4 100644 (file)
@@ -702,6 +702,8 @@ FFEBAD_MSGS1 (FFEBAD_SFUNC_UNUSED, WARN,
 "Statement function `%A' defined at %0 is not used")
 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
 #undef TRIVIAL
index f5b3466..5dd8d71 100644 (file)
@@ -633,6 +633,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_integer1 (u)), expr);
@@ -822,6 +826,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_integer2 (u)), expr);
@@ -1011,6 +1019,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_integer3 (u)), expr);
@@ -1200,6 +1212,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_integer4 (u)), expr);
@@ -1317,6 +1333,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_logical1 (u)), expr);
@@ -1424,6 +1444,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_logical2 (u)), expr);
@@ -1531,6 +1555,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_logical3 (u)), expr);
@@ -1638,6 +1666,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_logical4 (u)), expr);
@@ -1796,6 +1828,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_real1 (u)), expr);
@@ -1944,6 +1980,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_real2 (u)), expr);
@@ -2092,6 +2132,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_real3 (u)), expr);
@@ -2240,6 +2284,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_real4 (u)), expr);
@@ -2398,6 +2446,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_complex1 (u)), expr);
@@ -2546,6 +2598,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_complex2 (u)), expr);
@@ -2694,6 +2750,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* 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
             (ffebld_cu_val_complex3 (u)), expr);
@@ -2842,6 +2902,10 @@ ffeexpr_collapse_convert (ffebld expr, ffelexToken t)
              break;
            }
 
+         /* If conversion operation is not implemented, return original expr.  */
+         if (error == FFEBAD_NOCANDO)
+           return expr;
+
          expr = ffebld_new_conter_with_orig
            (ffebld_constant_new_complex4_val
             (ffebld_cu_val_complex4 (u)), expr);
index cb6e019..22254ef 100644 (file)
@@ -155,6 +155,17 @@ The following information was last updated on @value{last-update-news}:
 @itemize @bullet
 @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,
 such as @samp{IOSTAT=@var{j}},
index 4588a52..110e38f 100644 (file)
@@ -989,7 +989,11 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
 #define ffetarget_convert_complex1_integer1 ffetarget_convert_complex1_integer
 #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) \
   ((res)->real = (l), \
@@ -1041,7 +1045,11 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
 #define ffetarget_convert_complex2_integer1 ffetarget_convert_complex2_integer
 #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) \
   ({ REAL_VALUE_TYPE lr; \
@@ -1111,10 +1119,15 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
         ffetarget_convert_integer1_typeless(res,l)
 #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)
 #define ffetarget_convert_integer4_integer1(res,l) (*(res) = (l), FFEBAD)
@@ -1128,10 +1141,15 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
         ffetarget_convert_integer1_logical1(res,l)
 #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)
 #define ffetarget_convert_logical1_character1(res,l) \
@@ -1238,8 +1256,12 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
         ffetarget_convert_real1_integer1(res,l)
 #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)
 #define ffetarget_convert_real1_complex1(res,l) (*(res) = (l).real, FFEBAD)
@@ -1272,8 +1294,12 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
         ffetarget_convert_real2_integer1(res,l)
 #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)
 #define ffetarget_convert_real2_complex1(res,l) \
index 8faaa02..7b978f4 100644 (file)
@@ -1 +1 @@
-char *ffe_version_string = "0.5.24-19990306";
+char *ffe_version_string = "0.5.24-19990313";