------- Comment #29 from rguenther at suse dot de 2007-10-10 15:47 ------- Subject: Re: wrong types in character array/scalar binop
On Wed, 10 Oct 2007, pault at gcc dot gnu dot org wrote: > ------- Comment #28 from pault at gcc dot gnu dot org 2007-10-10 15:44 > ------- > The patch below fixes the lot. It was not necessary in the end to touch > trans-intrinsic.c. Once the appropriate, offending bit of trans-array.c was > fixed, all the casting occurred correctly. The fixes to iresolve.c deal with > the various ICEing testcases in the comments below and are partially based on > FX's input. > > This now compiles an runs correctly. > > character(len=1) :: string = "z" > integer :: i(1) = (/100/) > print *, Up("abc") > print *, transfer(((transfer(string,"x",1))), "x",1) > print *, transfer(char(i), "x") > print *, Upper ("abcdefg") > contains > Character (len=20) Function Up (string) > Character(len=*) string > character(1) :: chr > Up = transfer(achar(iachar(transfer(string,chr,1))), "x") > return > end function Up > Character (len=20) Function Upper (string) > Character(len=*) string > Upper = & > transfer(merge(transfer(string,"x",len(string)), & > string, .true.), "x") > return > end function Upper > end > > and the code in achar, which Richard flagged up has become: > > char char.6; > > char.6 = (*(char[0:][1:1] *) atmp.3.data)[S.5][1]{lb: 1 sz: 1}; > (*(char[0:][1:1] *) atmp.4.data)[S.5][1]{lb: 1 sz: 1} = char.6; nice. > The patch even regtests but I will check tonto and cp2k before submitting. Thanks for the efforts! Richard. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31608