111
|
1 ! { dg-do run }
|
|
2
|
|
3 ! Torture-test TRIM and LEN_TRIM for correctness.
|
|
4
|
|
5
|
|
6 ! Given a total string length and a trimmed length, construct an
|
|
7 ! appropriate string and check gfortran gets it right.
|
|
8
|
|
9 SUBROUTINE check_trim (full_len, trimmed_len)
|
|
10 IMPLICIT NONE
|
|
11 INTEGER, INTENT(IN) :: full_len, trimmed_len
|
|
12 CHARACTER(LEN=full_len) :: string
|
|
13
|
|
14 string = ""
|
|
15 IF (trimmed_len > 0) THEN
|
|
16 string(trimmed_len:trimmed_len) = "x"
|
|
17 END IF
|
|
18
|
|
19 IF (LEN (string) /= full_len &
|
|
20 .OR. LEN_TRIM (string) /= trimmed_len &
|
|
21 .OR. LEN (TRIM (string)) /= trimmed_len &
|
|
22 .OR. TRIM (string) /= string (1:trimmed_len)) THEN
|
|
23 PRINT *, full_len, trimmed_len
|
|
24 PRINT *, LEN (string), LEN_TRIM (string)
|
131
|
25 STOP 1
|
111
|
26 END IF
|
|
27 END SUBROUTINE check_trim
|
|
28
|
|
29
|
|
30 ! The main program, check with various combinations.
|
|
31
|
|
32 PROGRAM main
|
|
33 IMPLICIT NONE
|
|
34 INTEGER :: i, j
|
|
35
|
|
36 DO i = 0, 20
|
|
37 DO j = 0, i
|
|
38 CALL check_trim (i, j)
|
|
39 END DO
|
|
40 END DO
|
|
41 END PROGRAM main
|