re PR fortran/45308 ([F2003] DATE_AND_TIME does _not_ blank-pad strings)

PR fortran/45308
	* intrinsics/date_and_time.c (date_and_time): Pass __{zone,time,date}_len
	instead of {ZONE,TIME,DATE}_LEN as second argument to fstrcpy.  Drop
	asserts.  Adjust comment to the F2003 wording from the F95 wording.

	* gfortran.dg/pr45308.f03: New test.

From-SVN: r163312
This commit is contained in:
Jakub Jelinek 2010-08-17 20:08:05 +02:00 committed by Jakub Jelinek
parent 35d3d688fc
commit 47b914698d
4 changed files with 41 additions and 33 deletions

View File

@ -1,3 +1,8 @@
2010-08-17 Jakub Jelinek <jakub@redhat.com>
PR fortran/45308
* gfortran.dg/pr45308.f03: New test.
2010-08-17 Uros Bizjak <ubizjak@gmail.com>
PR target/45296

View File

@ -0,0 +1,9 @@
! PR fortran/45308
! { dg-do run }
character(len=36) :: date, time
date = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
time = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
call date_and_time (date, time)
if (index (date, 'a') /= 0 .or. index (time, 'a') /= 0) &
call abort
end

View File

@ -1,3 +1,10 @@
2010-08-17 Jakub Jelinek <jakub@redhat.com>
PR fortran/45308
* intrinsics/date_and_time.c (date_and_time): Pass __{zone,time,date}_len
instead of {ZONE,TIME,DATE}_LEN as second argument to fstrcpy. Drop
asserts. Adjust comment to the F2003 wording from the F95 wording.
2010-08-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/44931

View File

@ -93,29 +93,25 @@ gmtime_r (const time_t * timep, struct tm * result)
Arguments:
DATE (optional) shall be scalar and of type default character, and
shall be of length at least 8 in order to contain the complete
value. It is an INTENT(OUT) argument. Its leftmost 8 characters
are assigned a value of the form CCYYMMDD, where CC is the century,
YY the year within the century, MM the month within the year, and
DD the day within the month. If there is no date available, they
are assigned blanks.
DATE (optional) shall be scalar and of type default character.
It is an INTENT(OUT) argument. It is assigned a value of the
form CCYYMMDD, where CC is the century, YY the year within the
century, MM the month within the year, and DD the day within the
month. If there is no date available, they are assigned blanks.
TIME (optional) shall be scalar and of type default character, and
shall be of length at least 10 in order to contain the complete
value. It is an INTENT(OUT) argument. Its leftmost 10 characters
are assigned a value of the form hhmmss.sss, where hh is the hour
of the day, mm is the minutes of the hour, and ss.sss is the
seconds and milliseconds of the minute. If there is no clock
available, they are assigned blanks.
TIME (optional) shall be scalar and of type default character.
It is an INTENT(OUT) argument. It is assigned a value of the
form hhmmss.sss, where hh is the hour of the day, mm is the
minutes of the hour, and ss.sss is the seconds and milliseconds
of the minute. If there is no clock available, they are assigned
blanks.
ZONE (optional) shall be scalar and of type default character, and
shall be of length at least 5 in order to contain the complete
value. It is an INTENT(OUT) argument. Its leftmost 5 characters
are assigned a value of the form [+-]hhmm, where hh and mm are the
time difference with respect to Coordinated Universal Time (UTC) in
hours and parts of an hour expressed in minutes, respectively. If
there is no clock available, they are assigned blanks.
ZONE (optional) shall be scalar and of type default character.
It is an INTENT(OUT) argument. It is assigned a value of the
form [+-]hhmm, where hh and mm are the time difference with
respect to Coordinated Universal Time (UTC) in hours and parts
of an hour expressed in minutes, respectively. If there is no
clock available, they are assigned blanks.
VALUES (optional) shall be of type default integer and of rank
one. It is an INTENT(OUT) argument. Its size shall be at least
@ -311,22 +307,13 @@ date_and_time (char *__date, char *__time, char *__zone,
}
if (__zone)
{
assert (__zone_len >= ZONE_LEN);
fstrcpy (__zone, ZONE_LEN, zone, ZONE_LEN);
}
fstrcpy (__zone, __zone_len, zone, ZONE_LEN);
if (__time)
{
assert (__time_len >= TIME_LEN);
fstrcpy (__time, TIME_LEN, timec, TIME_LEN);
}
fstrcpy (__time, __time_len, timec, TIME_LEN);
if (__date)
{
assert (__date_len >= DATE_LEN);
fstrcpy (__date, DATE_LEN, date, DATE_LEN);
}
fstrcpy (__date, __date_len, date, DATE_LEN);
}