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

--- Comment #14 from anlauf at gcc dot gnu.org ---
(In reply to Christopher Albert from comment #13)
> Created attachment 62813 [details]
> Add type conversions in arith.cc

> Thanks Harald, you always manage to immediately break things :) . character
> constructors are a bit more involved, and the new patch passes tests again.
> It also includes the suggested class(*) check now.

This is a nice improvement!

But since you asked me to break it once more, here you go:
just add parentheses for an additional level of confusion...

  print *, [ character(16) ::  'a' // 'c',  'b' // 'de'  ]         ! OK
  print *, [ character(16) ::  'a' // 'c', ('b' // 'de') ]         ! OK
  print *, [ character(16) :: ('a' // 'c'), 'b' // 'de'  ]         ! OK
  print *, [ character(16) ::  'a' // 'c',  'b' // 'de'  ] // "|"  ! OK
  print *, [ character(16) ::  'a' // 'c', ('b' // 'de') ] // "|"  ! fail
  print *, [ character(16) :: ('a' // 'c'), 'b' // 'de'  ] // "|"  ! fail

This gives:

pr107721.f90:5:42:

    5 |   print *, [ character(16) ::  'a' // 'c', ('b' // 'de') ] // "|"  !
fail
      |                                          1
Error: Different CHARACTER lengths (17/4) in array constructor at (1)
pr107721.f90:6:43:

    6 |   print *, [ character(16) :: ('a' // 'c'), 'b' // 'de'  ] // "|"  !
fail
      |                                           1
Error: Different CHARACTER lengths (3/17) in array constructor at (1)


For details try -fdump-fortran-original to get:

  code:
  WRITE UNIT=6 FMT=-1
  TRANSFER (/ 'ac              ' , 'bde             ' /)
  DT_END
  WRITE UNIT=6 FMT=-1
  TRANSFER (/ 'ac              ' , 'bde             ' /)
  DT_END
  WRITE UNIT=6 FMT=-1
  TRANSFER (/ 'ac              ' , 'bde             ' /)
  DT_END
  WRITE UNIT=6 FMT=-1
  TRANSFER (/ 'ac              |' , 'bde             |' /)
  DT_END
  WRITE UNIT=6 FMT=-1
  TRANSFER (/ 'ac              |' , 'bde|' /)
  DT_END
  WRITE UNIT=6 FMT=-1
  TRANSFER (/ 'ac|' , 'bde             |' /)
  DT_END


(A minor side remark: git finds a few cases where you indent with spaces,
but where tab should be used for 8 spaces.  Might be an editor configuration
issue.)

Reply via email to