Peter Klausler 08c364280a
[flang] Improve error message on bad complex literal. (#124331)
A complex literal constant can have one BOZ component, since the type
and value of the literal can be determined by converting the BOZ value
to the type of the other component. But a complex literal constant with
two BOZ components doesn't have a well-defined type. The error message
was confusing in the case; emit a better one.

Fixes https://github.com/llvm/llvm-project/issues/124201.
2025-01-27 09:00:10 -08:00

36 lines
1.2 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
! C718 Each named constant in a complex literal constant shall be of type
! integer or real.
subroutine s()
integer :: ivar = 35
integer, parameter :: iconst = 35
real :: rvar = 68.9
real, parameter :: rconst = 68.9
character :: cvar = 'hello'
character, parameter :: cconst = 'hello'
logical :: lvar = .true.
logical, parameter :: lconst = .true.
complex :: cvar1 = (1, 1)
complex :: cvar2 = (1.0, 1.0)
complex :: cvar3 = (1.0, 1)
complex :: cvar4 = (1, 1.0)
complex :: cvar5 = (iconst, 1.0)
complex :: cvar6 = (iconst, rconst)
complex :: cvar7 = (rconst, iconst)
!ERROR: must be a constant
complex :: cvar8 = (ivar, 1.0)
!ERROR: must be a constant
!ERROR: must be a constant
complex :: cvar9 = (ivar, rvar)
!ERROR: must be a constant
!ERROR: must be a constant
complex :: cvar10 = (rvar, ivar)
!ERROR: operands must be INTEGER, UNSIGNED, REAL, or BOZ
complex :: cvar11 = (cconst, 1.0)
!ERROR: operands must be INTEGER, UNSIGNED, REAL, or BOZ
complex :: cvar12 = (lconst, 1.0)
!ERROR: operands cannot both be BOZ
complex :: cvar13 = (z'3f700000', z'00000000')
end subroutine s