re PR libfortran/15204 (ADJUSTR intrinsic accesses corrupted pointer)

PR fortran/15294
        * gfortran.fortran-torture/execute/adjustr.f90: New file.
        * io/intrinsic/string_intrinsics.c(adjustr): rework logic.

From-SVN: r81771
This commit is contained in:
Bud Davis 2004-05-13 10:11:02 +00:00 committed by Bud Davis
parent 014251eae3
commit 92fbb7592b
4 changed files with 58 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2004-05-13 Bud Davis <bdavis9659@comcast.net>
PR fortran/15294
* gfortran.fortran-torture/execute/adjustr.f90: New file.
2004-05-13 Diego Novillo <dnovillo@redhat.com>
Merge from tree-ssa-20020619-branch. See

View File

@ -0,0 +1,46 @@
! pr 15294 - [gfortran] ADJUSTR intrinsic accesses corrupted pointer
!
program test_adjustr
implicit none
integer test_cases
parameter (test_cases=13)
integer i
character(len=10) s1(test_cases), s2(test_cases)
s1(1)='A'
s2(1)=' A'
s1(2)='AB'
s2(2)=' AB'
s1(3)='ABC'
s2(3)=' ABC'
s1(4)='ABCD'
s2(4)=' ABCD'
s1(5)='ABCDE'
s2(5)=' ABCDE'
s1(6)='ABCDEF'
s2(6)=' ABCDEF'
s1(7)='ABCDEFG'
s2(7)=' ABCDEFG'
s1(8)='ABCDEFGH'
s2(8)=' ABCDEFGH'
s1(9)='ABCDEFGHI'
s2(9)=' ABCDEFGHI'
s1(10)='ABCDEFGHIJ'
s2(10)='ABCDEFGHIJ'
s1(11)=''
s2(11)=''
s1(12)=' '
s2(12)=' '
s1(13)=' '
s2(13)=' '
do I = 1,test_cases
print*,i
print*, 's1 = "', s1(i), '"'
print*, 's2 = "', s2(i), '"'
print*, 'adjustr(s1) = "', adjustr(s1(i)), '"'
if (adjustr(s1(i)).ne.s2(i)) then
print*,'fail'
call abort
endif
enddo
end program test_adjustr

View File

@ -1,3 +1,8 @@
2004-05-13 Bud Davis <bdavis9659@comcast.net>
PR fortran/15294
* io/intrinsic/string_intrinsics.c(adjustr): rework logic.
2004-05-06 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
Steven Bosscher <stevenb@suse.de>

View File

@ -276,12 +276,11 @@ adjustr (char *dest, GFC_INTEGER_4 len, const char *src)
i = len;
while (i > 0 && src[i - 1] == ' ')
i++;
i--;
if (i < len)
memcpy (&dest[len - i], &src, i);
if (i < len)
memset (dest, ' ', len - i);
memcpy (dest + (len - i), src, i );
}