Bug 36420 - Fortran 2008: g0 edit descriptor
Summary: Fortran 2008: g0 edit descriptor
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.4.0
: P3 enhancement
Target Milestone: ---
Assignee: Jerry DeLisle
URL:
Keywords:
Depends on:
Blocks: 36421
  Show dependency treegraph
 
Reported: 2008-06-02 14:08 UTC by Tobias Burnus
Modified: 2008-06-08 00:30 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2008-06-03 04:09:08


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tobias Burnus 2008-06-02 14:08:04 UTC
Fortran 2008 supports besides G[w.d[Ee]] (with w > 0) now also G0 (without ".d[Ee]").

The G0 edit descriptor is to a certain extend equivalent to "*" for a single argument.

G0 is thus:
- (integer)   i0
- (character) a
- (logical)   l1
- (real/complex)
  When used to specify the output of real or complex data, the G0 edit
  descriptor follows the rules for the ESw.dEe edit descriptor. Reasonable
  processor-dependent values of w, d, and e are used with each output value.
Comment 1 Jerry DeLisle 2008-06-03 04:09:07 UTC
I think we need fix a0 as well.  I am curious if this is F2008 specific features so that we should deal with -std=f95.  Time to read the standards again.  :)

I will fix this.
Comment 2 Tobias Burnus 2008-06-03 05:35:05 UTC
G0 is Fortran 2008
A0 is _no_ Fortran (90 to 2008):

"C1006 (R1007) w shall be zero or positive for the I, B, O, Z, F, and G edit descriptors. w shall be positive for all other edit descriptors."
(from Fortran 2008).

But G0 should be rejected at compile-time with -std=f95/f2003.
Comment 3 Jerry DeLisle 2008-06-04 00:49:17 UTC
In reply to your question in 36421:

Where do you think one should modify in order to get g0 working (PR36420 /
F2008)?

We have to fix this in two places, fortran/io.c for compile time and, in the case of a computed or embedded string for the format, in libgfortran/io/format.c

Patch is in the works. 
Comment 4 Jerry DeLisle 2008-06-07 23:56:33 UTC
Subject: Bug 36420

Author: jvdelisle
Date: Sat Jun  7 23:55:47 2008
New Revision: 136544

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=136544
Log:
2008-06-07  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/36420, 36422
	* io.c (check_format): Add new error message for zero width. Use new
	error message for FMT_A and with READ, FMT_G.  Allow FMT_G with WRITE
	except when -std=F95 and -std=F2003.

Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/io.c

Comment 5 Jerry DeLisle 2008-06-08 00:00:40 UTC
Subject: Bug 36420

Author: jvdelisle
Date: Sat Jun  7 23:59:53 2008
New Revision: 136545

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=136545
Log:
2008-06-07  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libfortran/36420
	PR libfortran/36421
	PR libfortran/36422
	* io/io.h: Add prototype for write_real.
	* io/transfer.c (formatted_transfer_scalar): For FMT_G and width zero,
	use write_real.
	* io/format.c: Add zero width error message. (parse_format_list): Use
	error message for FMT_A if followed by FMT_ZERO. Use zero width error
	message	for FMT_G if mode is READ or if -std=f95 or f2003. (fmormat0):
	Fix typo in comment.
	* io/write.c (write_a): Set wlen to len if FMT_G and length is zero.
	(write_l): Add wlen variable and use it if FMT_G and width is zero.
	(write_decimal): If FMT_G, set m to -1 to flag processor dependent
	formatting. (write_real): Remove static declaration.

Modified:
    trunk/libgfortran/ChangeLog
    trunk/libgfortran/io/format.c
    trunk/libgfortran/io/io.h
    trunk/libgfortran/io/transfer.c
    trunk/libgfortran/io/write.c

Comment 6 Jerry DeLisle 2008-06-08 00:09:48 UTC
Subject: Bug 36420

Author: jvdelisle
Date: Sun Jun  8 00:09:01 2008
New Revision: 136547

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=136547
Log:
2008-06-07  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/36420
	PR fortran/36421
	PR fortran/36422
	* gfortran.dg/fmt_g0_1.f08: New test.
	* gfortran.dg/fmt_g0_2.f08: New test.
	* gfortran.dg/fmt_g0_3.f08: New test.

Added:
    trunk/gcc/testsuite/gfortran.dg/fmt_g0_1.f08
    trunk/gcc/testsuite/gfortran.dg/fmt_g0_2.f08
    trunk/gcc/testsuite/gfortran.dg/fmt_g0_3.f08
Modified:
    trunk/gcc/testsuite/ChangeLog

Comment 7 Jerry DeLisle 2008-06-08 00:30:06 UTC
New feature added.