[flang-commits] [flang] [flang] lower assumed type actual arguments in call statements (PR #75969)
via flang-commits
flang-commits at lists.llvm.org
Mon Jan 8 07:38:18 PST 2024
================
@@ -0,0 +1,39 @@
+! Test lowering of call statements to HLFIR with assumed types
+! arguments. These are a bit special because semantics do not represent
+! assumed types actual arguments with an evaluate::Expr like for usual
+! arguments.
+! RUN: bbc -emit-hlfir --polymorphic-type -o - %s | FileCheck %s
+
+subroutine test1(x)
+ type(*) :: x
+ interface
+ subroutine fun1(x)
+ type(*) :: x
+ end subroutine
+ end interface
+ call fun1(x)
+end subroutine
+! CHECK-LABEL: func.func @_QPtest1(
+! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<none> {fir.bindc_name = "x"}) {
+! CHECK: %[[VAL_0:.*]]:2 = hlfir.declare %[[ARG0]] {uniq_name = "_QFtest1Ex"} : (!fir.ref<none>) -> (!fir.ref<none>, !fir.ref<none>)
+! CHECK: fir.call @_QPfun1(%[[VAL_0]]#1) fastmath<contract> : (!fir.ref<none>) -> ()
+! CHECK: return
+! CHECK: }
+
+subroutine test2(x)
+ type(*) :: x
+ interface
+ subroutine fun2(x)
+ type(*) :: x(:)
+ end subroutine
+ end interface
+ call fun2(x)
+end subroutine
----------------
jeanPerier wrote:
I think this case is illegal. The argument of an rank one deferred shape must be an array (Fortran 15.5.2.4(16)). Not clear to me why this is not enforced in lib/semantics/check-call.cpp like with none assumed type arguments. This may deserve a separate patch with a semantic fix.
https://github.com/llvm/llvm-project/pull/75969
More information about the flang-commits
mailing list