diff options
author | burley <burley@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-03-13 15:14:29 +0000 |
---|---|---|
committer | burley <burley@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-03-13 15:14:29 +0000 |
commit | 898dd39c4fa78de2901654379188009793d7f6c2 (patch) | |
tree | 8944691861d6188019dd3f51adb8a04fad7450e4 | |
parent | 06a17b1507c43ee959431ca028d63e3d59337cb9 (diff) | |
download | gcc-898dd39c4fa78de2901654379188009793d7f6c2.tar.gz |
Fix INTEGER*8 conversion bugs
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@25746 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/f/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/f/bad.def | 2 | ||||
-rw-r--r-- | gcc/f/expr.c | 64 | ||||
-rw-r--r-- | gcc/f/news.texi | 11 | ||||
-rw-r--r-- | gcc/f/target.h | 26 | ||||
-rw-r--r-- | gcc/f/version.c | 2 |
6 files changed, 116 insertions, 1 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog index 608c9f51ca0..3998bfe2b1e 100644 --- a/gcc/f/ChangeLog +++ b/gcc/f/ChangeLog @@ -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. diff --git a/gcc/f/bad.def b/gcc/f/bad.def index 430c2834d11..4c7bfe475f2 100644 --- a/gcc/f/bad.def +++ b/gcc/f/bad.def @@ -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 diff --git a/gcc/f/expr.c b/gcc/f/expr.c index f5b3466718c..5dd8d71748d 100644 --- a/gcc/f/expr.c +++ b/gcc/f/expr.c @@ -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); diff --git a/gcc/f/news.texi b/gcc/f/news.texi index cb6e019701b..22254ef3614 100644 --- a/gcc/f/news.texi +++ b/gcc/f/news.texi @@ -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}}, diff --git a/gcc/f/target.h b/gcc/f/target.h index 4588a52cafe..110e38f466c 100644 --- a/gcc/f/target.h +++ b/gcc/f/target.h @@ -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) \ diff --git a/gcc/f/version.c b/gcc/f/version.c index 8faaa028647..7b978f4e888 100644 --- a/gcc/f/version.c +++ b/gcc/f/version.c @@ -1 +1 @@ -char *ffe_version_string = "0.5.24-19990306"; +char *ffe_version_string = "0.5.24-19990313"; |