76 lines · plain
1! RUN: bbc -emit-hlfir %s -o - | FileCheck %s2! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s3 4! CHECK-LABEL: func.func @_QPmalloc_ptr() {5subroutine malloc_ptr()6 integer :: x7 pointer (ptr_x, x)8 ! CHECK: %[[X:.*]] = fir.alloca !fir.box<!fir.ptr<i32>>9 ! CHECK: %[[X_PTR:.*]] = fir.alloca i64 {bindc_name = "ptr_x", uniq_name = "_QFmalloc_ptrEptr_x"}10 ! CHECK: %[[X_PTR_DECL:.*]]:2 = hlfir.declare %[[X_PTR]] {uniq_name = "_QFmalloc_ptrEptr_x"} : (!fir.ref<i64>) -> (!fir.ref<i64>, !fir.ref<i64>)11 ! CHECK: %[[CST:.*]] = arith.constant 4 : i3212 ! CHECK: %[[CST_I64:.*]] = fir.convert %[[CST]] : (i32) -> i6413 ! CHECK: %[[ALLOC:.*]] = fir.call @_FortranAMalloc(%[[CST_I64]]) fastmath<contract> : (i64) -> i6414 ! CHECK: hlfir.assign %[[ALLOC]] to %[[X_PTR_DECL]]#0 : i64, !fir.ref<i64>15 ! CHECK: return16 ptr_x = malloc(4)17end subroutine18 19! gfortran allows malloc to be assigned to integers, so we accept it.20 21! CHECK-LABEL: func.func @_QPmalloc_i8() {22subroutine malloc_i8()23 integer(kind=1) :: x24! CHECK: %[[X:.*]] = fir.alloca i8 {bindc_name = "x", uniq_name = "_QFmalloc_i8Ex"}25! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFmalloc_i8Ex"} : (!fir.ref<i8>) -> (!fir.ref<i8>, !fir.ref<i8>)26! CHECK: %[[CST:.*]] = arith.constant 1 : i3227! CHECK: %[[CST_I64:.*]] = fir.convert %[[CST]] : (i32) -> i6428! CHECK: %[[ALLOC:.*]] = fir.call @_FortranAMalloc(%[[CST_I64]]) fastmath<contract> : (i64) -> i6429! CHECK: %[[ALLOC_I8:.*]] = fir.convert %[[ALLOC]] : (i64) -> i830! CHECK: hlfir.assign %[[ALLOC_I8]] to %[[X_DECL]]#0 : i8, !fir.ref<i8>31! CHECK: return32 x = malloc(1)33end subroutine34 35! CHECK-LABEL: func.func @_QPmalloc_i16() {36subroutine malloc_i16()37 integer(kind=2) :: x38! CHECK: %[[X:.*]] = fir.alloca i16 {bindc_name = "x", uniq_name = "_QFmalloc_i16Ex"}39! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFmalloc_i16Ex"} : (!fir.ref<i16>) -> (!fir.ref<i16>, !fir.ref<i16>)40! CHECK: %[[CST:.*]] = arith.constant 1 : i3241! CHECK: %[[CST_I64:.*]] = fir.convert %[[CST]] : (i32) -> i6442! CHECK: %[[ALLOC:.*]] = fir.call @_FortranAMalloc(%[[CST_I64]]) fastmath<contract> : (i64) -> i6443! CHECK: %[[ALLOC_I16:.*]] = fir.convert %[[ALLOC]] : (i64) -> i1644! CHECK: hlfir.assign %[[ALLOC_I16]] to %[[X_DECL]]#0 : i16, !fir.ref<i16>45! CHECK: return46 x = malloc(1)47end subroutine48 49 50! CHECK-LABEL: func.func @_QPmalloc_i32() {51subroutine malloc_i32()52 integer(kind=4) :: x53! CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFmalloc_i32Ex"}54! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFmalloc_i32Ex"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)55! CHECK: %[[CST:.*]] = arith.constant 1 : i3256! CHECK: %[[CST_I64:.*]] = fir.convert %[[CST]] : (i32) -> i6457! CHECK: %[[ALLOC:.*]] = fir.call @_FortranAMalloc(%[[CST_I64]]) fastmath<contract> : (i64) -> i6458! CHECK: %[[ALLOC_I32:.*]] = fir.convert %[[ALLOC]] : (i64) -> i3259! CHECK: hlfir.assign %[[ALLOC_I32]] to %[[X_DECL]]#0 : i32, !fir.ref<i32>60! CHECK: return61 x = malloc(1)62end subroutine63 64! CHECK-LABEL: func.func @_QPmalloc_i64() {65subroutine malloc_i64()66 integer(kind=8) :: x67! CHECK: %[[X:.*]] = fir.alloca i64 {bindc_name = "x", uniq_name = "_QFmalloc_i64Ex"}68! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFmalloc_i64Ex"} : (!fir.ref<i64>) -> (!fir.ref<i64>, !fir.ref<i64>)69! CHECK: %[[CST:.*]] = arith.constant 1 : i3270! CHECK: %[[CST_I64:.*]] = fir.convert %[[CST]] : (i32) -> i6471! CHECK: %[[ALLOC:.*]] = fir.call @_FortranAMalloc(%[[CST_I64]]) fastmath<contract> : (i64) -> i6472! CHECK: hlfir.assign %[[ALLOC]] to %[[X_DECL]]#0 : i64, !fir.ref<i64>73! CHECK: return74 x = malloc(1)75end subroutine76