File: intrinsic-module-procedures.f90

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (34 lines) | stat: -rw-r--r-- 1,735 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
! Test lowering of intrinsic module procedures to HLFIR. This
! test is not meant to test every intrinsic module procedure,
! it only tests that the HFLIR procedure reference lowering
! infrastructure properly detects and dispatches intrinsic module
! procedure calls.
! RUN: bbc -emit-hlfir -o - %s | FileCheck %s

subroutine foo(cptr, x)
  use iso_c_binding, only : c_ptr, c_loc
  type(c_ptr) :: cptr
  integer, target :: x
  cptr = c_loc(x)
end subroutine
! CHECK-LABEL: func.func @_QPfoo(
! CHECK:         %[[VAL_3:.*]]:2 = hlfir.declare {{.*}}Ecptr"
! CHECK:         %[[VAL_3:.*]]:2 = hlfir.declare {{.*}}Ex"
! CHECK:         %[[VAL_4:.*]] = fir.embox %[[VAL_3]]#1 : (!fir.ref<i32>) -> !fir.box<i32>
! CHECK:         %[[VAL_5:.*]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>
! CHECK:         %[[VAL_6:.*]] = fir.field_index __address, !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>
! CHECK:         %[[VAL_7:.*]] = fir.coordinate_of %[[VAL_5]], %[[VAL_6]] : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.field) -> !fir.ref<i64>
! CHECK:         %[[VAL_8:.*]] = fir.box_addr %[[VAL_4]] : (!fir.box<i32>) -> !fir.ref<i32>
! CHECK:         %[[VAL_9:.*]] = fir.convert %[[VAL_8]] : (!fir.ref<i32>) -> i64
! CHECK:         fir.store %[[VAL_9]] to %[[VAL_7]] : !fir.ref<i64>

subroutine test_renaming(p)
  use iso_c_binding, only: c_associated_alias => c_associated, c_ptr
  type(c_ptr) p
  print *, c_associated_alias(p)
end subroutine

! CHECK-LABEL: func.func @_QPtest_renaming
! CHECK:  %[[C_PTR_TARG:.*]] = fir.load %{{.*}} : !fir.ref<i64>
! CHECK:  %[[NULL:.*]] = arith.constant 0 : i64
! CHECK:  arith.cmpi ne, %[[C_PTR_TARG]], %[[NULL]] : i64