This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Fix INTEGER*8 conversion bugs


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";


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]