mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:36:37 +00:00

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.
36 lines
1.2 KiB
Fortran
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
|