https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83224

            Bug ID: 83224
           Summary: creating character array from elements shorter than
                    declared does not pad with whitespace properly and
                    aborts
           Product: gcc
           Version: 6.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: urbanjost at comcast dot net
  Target Milestone: ---

I expect this program to produce at the end

    ============================================================
     PASS 21
    [one      ][two      ][three    ][four     ][five     ]
    [six      ][seven    ][eight    ][nine     ][ten[     ]
    [eleven   ][twelve   ][thirteen ][fourteen ][fifteen  ]
    [sixteen  ][seventeen][eighteen ][nineteen ][twenty   ]
    [twentyone]
    ============================================================

Instead, I got an abort when the length reached 9 characters, and without
the blank padding I was expecting ....

    ============================================================
     PASS 16
    [onetwttw][twothtth][threeffo][four ffi][five ssi]
    [six  sse][seveneei][eightnni][nine tte][ten  eel]
    [eleventw][twelveth][thirteen][fourteen][fifteen ]
    [sixteen ]
    ============================================================

    Program received signal SIGABRT: Process abort signal.

I am using gfortran 6.4 on Cygwin, and it was confirmed that it
acts as I thought it would with another Fortran implementation 
(Intel 18.0.1).

program dusty_corner ! exercise f2008 CHARACTER features
implicit none
character(len=:),allocatable :: words(:)
character(len=:),allocatable :: trimmed
integer                      :: i,big
character(len=*),parameter   :: data(*)=[character(len=20) ::     &
'one',        'two',        'three',     'four',      'five',     &
'six',        'seven',      'eight',     'nine',      'ten' ,     &
'eleven',     'twelve',     'thirteen',  'fourteen',  'fifteen',  &
'sixteen',    'seventeen',  'eighteen',  'nineteen',  'twenty',   &
'twentyone' ]
words=[character(len=0)::] ! Allocate zero-size array
big=0
INFINITE: do i=1,size(data)
   trimmed=trim(data(i))     ! create variables of various lengths
   big=max(big,len(trimmed)) ! find longest length so far
   ! next, when BIG increases WORDS should be padded with spaces?
   words=[ CHARACTER(LEN=big) :: words, trimmed ]
   write(*,'(a,i0)')'PASS ',i
   write(*,'(5("[",a,"]":))')words
   write(*,'(a)')repeat('=',80)
enddo INFINITE
end program dusty_corner

Reply via email to