[patch, fortran] [4.4 Regression] PR37498 Incorrect array value returned - 4.3 ABI Broken - FINAL

Jerry DeLisle jvdelisle@verizon.net
Sun Sep 21 19:49:00 GMT 2008


Hi All,

The attached patch has been cleaned up from the previous and regression tested 
on x86-64. Regression testing on ppc64-linux is in progress and looks good so far.

I added checks to avoid accessing the F2003 I/O parameters by a 4.3 compiled 
program.

I have not a way to cross test 4.3 compiled testsuite with 4.4 libgfortran. 
Suggestions would be appreciated.

OK to commit to trunk?

Regards,

Jerry

2008-09-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org

	PR fortran/37498
	* trans-io.c (gfc_build_io_library_fndecls): Bump pad size.
	(build_dt): Set mask bit for IOPARM_dt_f2003.
	* ioparm.def: Add IOPARM_dt_f2003.

2008-09-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org

	PR libfortran/37498
	* file_pos (st_endfile): Clear memory only for libfortran 4.3 private
	area.
	* list_read.c (eat_separator): Only access F2003 I/O parameters if
	IOPARM_DT_HAS_F2003 bit is set. (parse_real): Ditto.
	(read_real): Ditto.
	* read.c (read_a): Likewise. (read_a_char4): Likewise though not
	strictly necessary. (read_f): Likewise.
	* io.h (unit_sign_s): New enumerator to allow duplication of
	st_parameter structures. (IOPARM_DT_HAS_F2003): New mask bit.
	(st_parameter_43): New structure copied from 4.3 version of
	st_paramater_dt private section. (st_parameter_44): New structure with
	F2003 items added. (st_parameter_dt): Modified to create union of new
	and old structures to allow correct memory setting for 4.3 ABI
	compatibility. Bumped the pad size.
	* transfer.c (read_sf): Do not use F2003 I/O memory areas unless
	IOPARM_DT_HAS_F2003 bit has been set. (read_block_form): Ditto.
	(formatted_transfer_scalar): Ditto. (data_transfer_init): Ditto and
	add comment, fix formatting.
	* write.c (write_default_char4): Likewise though not strictly necessary.
	(write_utf8_char4): Ditto. (write_character): Ditto.
	(write_real_g0): Ditto. (list_formatted_write_scalar): Ditto.
	(nml_write_obj): Ditto. (namelist_write): Ditto.
	* write_float.def (calculate_sign): Eliminate warning by including all
	cases in switch. (output_float): Output only decimal point of F2003 flag
	is not set.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr37498-d.diff
Type: text/x-patch
Size: 35229 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20080921/3d1543b6/attachment.bin>


More information about the Fortran mailing list