Skip to content

[Flang] Compilation error when the variable sin is used as sin intrinsic function in block construct #115674

@ohno-fj

Description

@ohno-fj
Version of flang-new : 20.0.0(74b56c7eb807e2ba54bd7a2bcfda5d0bceff1c0c)/AArch64

When the variable sin is used as sin intrinsic function in block construct, a compilation error occurs.
The above program is 13-P-21_block_intrinsic2_2.f90

If the definition of sin in the following block construct:

    intrinsic sin

is changed to the following, compilation ends normally.

    real,intrinsic:: sin

The above program is 13-P-21_block_intrinsic2_3.f90

The following are the test program, Flang-new, Gfortran and ifx compilation/execution result.

13-P-21_block_intrinsic2_2.f90:

program main
  implicit none
  real  sin
  sin = 1
  block
    intrinsic sin
    real :: rr = 0
    rr = sin(rr) + 3
    if (rr .ne. 3 ) print *, "NG1", rr
  end block
  sin = sin + 1
  if (sin .ne. 2 ) print *, "NG2", sin
  print *, "PASS"
end program main
$ flang-new 13-P-21_block_intrinsic2_2.f90
error: Semantic errors in 13-P-21_block_intrinsic2_2.f90
./13-P-21_block_intrinsic2_2.f90:4:3: error: Assignment to procedure 'sin' is not allowed
    sin = 1
    ^^^
./13-P-21_block_intrinsic2_2.f90:11:3: error: Assignment to procedure 'sin' is not allowed
    sin = sin + 1
    ^^^
./13-P-21_block_intrinsic2_2.f90:11:9: error: Function call must have argument list
    sin = sin + 1
          ^^^
./13-P-21_block_intrinsic2_2.f90:12:7: error: Function call must have argument list
    if (sin .ne. 2 ) print *, "NG2", sin
        ^^^
./13-P-21_block_intrinsic2_2.f90:12:36: error: Output item must not be a procedure
    if (sin .ne. 2 ) print *, "NG2", sin
                                     ^^^
$
$ gfortran 13-P-21_block_intrinsic2_2.f90; ./a.out
 PASS
$
$ ifx 13-P-21_block_intrinsic2_2.f90; ./a.out
 PASS
$

13-P-21_block_intrinsic2_3.f90:

program main
  implicit none
  real  sin
  sin = 1
  block
!    intrinsic sin
    real,intrinsic:: sin
    real :: rr = 0
    rr = sin(rr) + 3
    if (rr .ne. 3 ) print *, "NG1", rr
  end block
  sin = sin + 1
  if (sin .ne. 2 ) print *, "NG2", sin
  print *, "PASS"
end program main
$ flang-new 13-P-21_block_intrinsic2_3.f90; ./a.out
 PASS
$
$ gfortran 13-P-21_block_intrinsic2_3.f90; ./a.out
 PASS
$
$ ifx 13-P-21_block_intrinsic2_3.f90; ./a.out
 PASS
$

Metadata

Metadata

Assignees

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions