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> 2010-08-17 Uros Bizjak <ubizjak@gmail.com>
PR target/45296 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> 2010-08-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/44931 PR libfortran/44931

View File

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