| ! Test lowering of nullify-statement |
| ! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s |
| |
| |
| ! ----------------------------------------------------------------------------- |
| ! Test NULLIFY(p) |
| ! ----------------------------------------------------------------------------- |
| |
| |
| ! CHECK-LABEL: func @_QPtest_scalar( |
| ! CHECK-SAME: %[[arg0:.*]]: !fir.ref<!fir.box<!fir.ptr<f32>>>{{.*}}) |
| subroutine test_scalar(p) |
| real, pointer :: p |
| ! CHECK: %[[p:.*]]:2 = hlfir.declare %[[arg0]] |
| ! CHECK: %[[null:.*]] = fir.zero_bits !fir.ptr<f32> |
| ! CHECK: %[[box:.*]] = fir.embox %[[null]] : (!fir.ptr<f32>) -> !fir.box<!fir.ptr<f32>> |
| ! CHECK: fir.store %[[box]] to %[[p]]#0 : !fir.ref<!fir.box<!fir.ptr<f32>>> |
| nullify(p) |
| end subroutine |
| |
| ! CHECK-LABEL: func @_QPtest_scalar_char( |
| ! CHECK-SAME: %[[arg0:.*]]: !fir.ref<!fir.box<!fir.ptr<!fir.char<1,?>>>>{{.*}}) |
| subroutine test_scalar_char(p) |
| character(:), pointer :: p |
| ! CHECK: %[[p:.*]]:2 = hlfir.declare %[[arg0]] |
| ! CHECK: %[[null:.*]] = fir.zero_bits !fir.ptr<!fir.char<1,?>> |
| ! CHECK: %[[box:.*]] = fir.embox %[[null]] typeparams %c0{{.*}} : (!fir.ptr<!fir.char<1,?>>, index) -> !fir.box<!fir.ptr<!fir.char<1,?>>> |
| ! CHECK: fir.store %[[box]] to %[[p]]#0 : !fir.ref<!fir.box<!fir.ptr<!fir.char<1,?>>>> |
| nullify(p) |
| end subroutine |
| |
| ! CHECK-LABEL: func @_QPtest_array( |
| ! CHECK-SAME: %[[arg0:.*]]: !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>{{.*}}) |
| subroutine test_array(p) |
| real, pointer :: p(:) |
| ! CHECK: %[[p:.*]]:2 = hlfir.declare %[[arg0]] |
| ! CHECK: %[[null:.*]] = fir.zero_bits !fir.ptr<!fir.array<?xf32>> |
| ! CHECK: %[[shape:.*]] = fir.shape %c0{{.*}} |
| ! CHECK: %[[box:.*]] = fir.embox %[[null]](%[[shape]]) : (!fir.ptr<!fir.array<?xf32>>, !fir.shape<1>) -> !fir.box<!fir.ptr<!fir.array<?xf32>>> |
| ! CHECK: fir.store %[[box]] to %[[p]]#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>> |
| nullify(p) |
| end subroutine |
| |
| ! CHECK-LABEL: func @_QPtest_list( |
| ! CHECK-SAME: %[[arg0:.*]]: !fir.ref<!fir.box<!fir.ptr<f32>>>{{.*}}, %[[arg1:.*]]: !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>{{.*}}) |
| subroutine test_list(p1, p2) |
| real, pointer :: p1, p2(:) |
| ! CHECK: %[[p1:.*]]:2 = hlfir.declare %[[arg0]] |
| ! CHECK: %[[p2:.*]]:2 = hlfir.declare %[[arg1]] |
| ! CHECK: fir.zero_bits !fir.ptr<f32> |
| ! CHECK: fir.store %{{.*}} to %[[p1]]#0 : !fir.ref<!fir.box<!fir.ptr<f32>>> |
| |
| ! CHECK: fir.zero_bits !fir.ptr<!fir.array<?xf32>> |
| ! CHECK: fir.store %{{.*}} to %[[p2]]#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>> |
| nullify(p1, p2) |
| end subroutine |