Jean-Didier PAILLEUX bae3577002
[flang] Define ERF, ERFC and ERFC_SCALED intrinsics with Q and D prefix (#125217)
`ERF`, `ERFC` and `ERFC_SCALED` intrinsics prefixed by `Q` and `D` are
missing. Codes such as `CP2K`(https://github.com/cp2k/cp2k) and
`TurboRVB`(https://github.com/sissaschool/turborvb) use these intrinsics
just like defined in the GNU standard and here:
https://www.ibm.com/docs/fr/xl-fortran-aix/16.1.0?topic=reference-intrinsic-procedures
These intrinsics are based on the existing intrinsics but apply a
restriction on the type kind.

- `DERF`, `DERFC` and `DERFC_SCALED` are for double précision only.
- `QERF`, `QERFC` and `QERFC_SCALED` are for quad précision only.
2025-04-01 08:07:26 +02:00

30 lines
872 B
Fortran

! RUN: not %flang_fc1 -fsyntax-only %s 2>&1 | FileCheck --check-prefix=ERROR %s
function derf8_error4(x)
real(kind=8) :: derf8_error4
real(kind=4) :: x
derf8_error4 = derf(x);
! ERROR: Actual argument for 'x=' has bad type or kind 'REAL(4)'
end function derf8_error4
function derf8_error16(x)
real(kind=8) :: derf8_error16
real(kind=16) :: x
derf8_error16 = derf(x);
! ERROR: Actual argument for 'x=' has bad type or kind 'REAL(16)'
end function derf8_error16
function qerf16_error4(x)
real(kind=16) :: qerf16_error4
real(kind=4) :: x
qerf16_error4 = qerf(x);
! ERROR: Actual argument for 'x=' has bad type or kind 'REAL(4)'
end function qerf16_error4
function qerf16_error8(x)
real(kind=16) :: qerf16_error8
real(kind=8) :: x
qerf16_error8 = qerf(x);
! ERROR: Actual argument for 'x=' has bad type or kind 'REAL(8)'
end function qerf16_error8