X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=gcc%2Ftestsuite%2Fg77.dg%2Fstrlen0.f;fp=gcc%2Ftestsuite%2Fg77.dg%2Fstrlen0.f;h=0000000000000000000000000000000000000000;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=79439514726fed2f54b43b7ba25c6a02aa4150ed;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/testsuite/g77.dg/strlen0.f b/gcc/testsuite/g77.dg/strlen0.f deleted file mode 100644 index 79439514..00000000 --- a/gcc/testsuite/g77.dg/strlen0.f +++ /dev/null @@ -1,95 +0,0 @@ -C Substring range checking test program, to check behavior with respect -C to X3J3/90.4 paragraph 5.7.1. -C -C Patches relax substring checking for subscript expressions in order to -C simplify coding (elimination of length checks for strings passed as -C parameters) and to avoid contradictory behavior of subscripted substring -C expressions with respect to unsubscripted string expressions. -C -C Key part of 5.7.1 interpretation comes down to statement that in the -C substring expression, -C v ( e1 : e2 ) -C 1 <= e1 <= e2 <= len to be valid, yet the expression -C v ( : ) -C is equivalent to -C v(1:len(v)) -C -C meaning that any statement that reads -C str = v // 'tail' -C (where v is a string passed as a parameter) would require coding as -C if (len(v) .gt. 0) then -C str = v // 'tail' -C else -C str = 'tail' -C endif -C to comply with the standard specification. Under the stricter -C interpretation, functions strcat and strlat would be incorrect as -C written for null values of str1 and/or str2. -C -C This code compiles and runs without error on -C SunOS 4.1.3 f77 (-C option) -C SUNWspro SparcCompiler 4.2 f77 (-C option) -C (and with proposed patches, gcc-2.9.2 -fbounds-check except for test 6, -C which is a genuine, deliberate error - comment out to make further -C tests) -C -C { dg-do run } -C { dg-options "-fbounds-check" } -C -C G. Helffrich/Tokyo Inst. Technology Jul 24 2001 - - character str*8,strres*16,strfun*16,strcat*16,strlat*16 - - str='Hi there' - -C Test 1 - (current+patched) two char substring result - strres=strfun(str,1,2) - write(*,*) 'strres is ',strres - -C Test 2 - (current+patched) null string result - strres=strfun(str,5,4) - write(*,*) 'strres is ',strres - -C Test 3 - (current+patched) null string result - strres=strfun(str,8,7) - write(*,*) 'strres is ',strres - -C Test 4 - (current) error; (patched) null string result - strres=strfun(str,9,8) - write(*,*) 'strres is ',strres - -C Test 5 - (current) error; (patched) null string result - strres=strfun(str,1,0) - write(*,*) 'strres is ',strres - -C Test 6 - (current+patched) error -C strres=strfun(str,20,20) -C write(*,*) 'strres is ',strres - -C Test 7 - (current+patched) str result - strres=strcat(str,'') - write(*,*) 'strres is ',strres - -C Test 8 - (current) error; (patched) str result - strres=strlat('',str) - write(*,*) 'strres is ',strres - - end - - character*(*) function strfun(str,i,j) - character str*(*) - - strfun = str(i:j) - end - - character*(*) function strcat(str1,str2) - character str1*(*), str2*(*) - - strcat = str1 // str2 - end - - character*(*) function strlat(str1,str2) - character str1*(*), str2*(*) - - strlat = str1(1:len(str1)) // str2(1:len(str2)) - end