1a1425019SValentin Clement! Test lowering of pointer initial target 2f35f863aSjeanPerier! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s 3a1425019SValentin Clement 4a1425019SValentin Clement! This tests focus on the scope context of initial data target. 5a1425019SValentin Clement! More complete tests regarding the initial data target expression 6a1425019SValentin Clement! are done in pointer-initial-target.f90. 7a1425019SValentin Clement 82c8cb9acSJean Perier! Test pointer initial data target with pointer in common blocks 92c8cb9acSJean Perierblock data 102c8cb9acSJean Perier real, pointer :: p 112c8cb9acSJean Perier real, save, target :: b 122c8cb9acSJean Perier common /a/ p 132c8cb9acSJean Perier data p /b/ 14*c1654c38SValentin Clement (バレンタイン クレメン)! CHECK-LABEL: fir.global @a_ {alignment = 8 : i64} : tuple<!fir.box<!fir.ptr<f32>>> 1587e25210SjeanPerier ! CHECK: %[[undef:.*]] = fir.zero_bits tuple<!fir.box<!fir.ptr<f32>>> 162c8cb9acSJean Perier ! CHECK: %[[b:.*]] = fir.address_of(@_QEb) : !fir.ref<f32> 17de2811eeSJean Perier ! CHECK: %[[box:.*]] = fir.embox %[[b]] : (!fir.ref<f32>) -> !fir.box<f32> 18de2811eeSJean Perier ! CHECK: %[[rebox:.*]] = fir.rebox %[[box]] : (!fir.box<f32>) -> !fir.box<!fir.ptr<f32>> 19de2811eeSJean Perier ! CHECK: %[[a:.*]] = fir.insert_value %[[undef]], %[[rebox]], [0 : index] : (tuple<!fir.box<!fir.ptr<f32>>>, !fir.box<!fir.ptr<f32>>) -> tuple<!fir.box<!fir.ptr<f32>>> 202c8cb9acSJean Perier ! CHECK: fir.has_value %[[a]] : tuple<!fir.box<!fir.ptr<f32>>> 212c8cb9acSJean Perierend block data 222c8cb9acSJean Perier 232c8cb9acSJean Perier! Test two common depending on each others because of initial data 242c8cb9acSJean Perier! targets 252c8cb9acSJean Perierblock data tied 262c8cb9acSJean Perier real, target :: x1 = 42 272c8cb9acSJean Perier real, target :: x2 = 43 282c8cb9acSJean Perier real, pointer :: p1 => x2 292c8cb9acSJean Perier real, pointer :: p2 => x1 302c8cb9acSJean Perier common /c1/ x1, p1 312c8cb9acSJean Perier common /c2/ x2, p2 32*c1654c38SValentin Clement (バレンタイン クレメン)! CHECK-LABEL: fir.global @c1_ {alignment = 8 : i64} : tuple<f32, !fir.array<4xi8>, !fir.box<!fir.ptr<f32>>> 336ffea74fSjeanPerier ! CHECK: fir.address_of(@c2_) : !fir.ref<tuple<f32, !fir.array<4xi8>, !fir.box<!fir.ptr<f32>>>> 34*c1654c38SValentin Clement (バレンタイン クレメン)! CHECK-LABEL: fir.global @c2_ {alignment = 8 : i64} : tuple<f32, !fir.array<4xi8>, !fir.box<!fir.ptr<f32>>> 356ffea74fSjeanPerier ! CHECK: fir.address_of(@c1_) : !fir.ref<tuple<f32, !fir.array<4xi8>, !fir.box<!fir.ptr<f32>>>> 362c8cb9acSJean Perierend block data 372c8cb9acSJean Perier 382c8cb9acSJean Perier! Test pointer in a common with initial target in the same common. 393077d614SPeter Klauslerblock data bdsnake 402c8cb9acSJean Perier integer, target :: b = 42 412c8cb9acSJean Perier integer, pointer :: p => b 422c8cb9acSJean Perier common /snake/ p, b 43*c1654c38SValentin Clement (バレンタイン クレメン)! CHECK-LABEL: fir.global @snake_ {alignment = 8 : i64} : tuple<!fir.box<!fir.ptr<i32>>, i32> 4487e25210SjeanPerier ! CHECK: %[[tuple0:.*]] = fir.zero_bits tuple<!fir.box<!fir.ptr<i32>>, i32> 456ffea74fSjeanPerier ! CHECK: %[[snakeAddr:.*]] = fir.address_of(@snake_) : !fir.ref<tuple<!fir.box<!fir.ptr<i32>>, i32>> 462c8cb9acSJean Perier ! CHECK: %[[byteView:.*]] = fir.convert %[[snakeAddr:.*]] : (!fir.ref<tuple<!fir.box<!fir.ptr<i32>>, i32>>) -> !fir.ref<!fir.array<?xi8>> 472c8cb9acSJean Perier ! CHECK: %[[coor:.*]] = fir.coordinate_of %[[byteView]], %c24{{.*}} : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 482c8cb9acSJean Perier ! CHECK: %[[bAddr:.*]] = fir.convert %[[coor]] : (!fir.ref<i8>) -> !fir.ref<i32> 49de2811eeSJean Perier ! CHECK: %[[box:.*]] = fir.embox %[[bAddr]] : (!fir.ref<i32>) -> !fir.box<i32> 50de2811eeSJean Perier ! CHECK: %[[rebox:.*]] = fir.rebox %[[box]] : (!fir.box<i32>) -> !fir.box<!fir.ptr<i32>> 51de2811eeSJean Perier ! CHECK: %[[tuple1:.*]] = fir.insert_value %[[tuple0]], %[[rebox]], [0 : index] : (tuple<!fir.box<!fir.ptr<i32>>, i32>, !fir.box<!fir.ptr<i32>>) -> tuple<!fir.box<!fir.ptr<i32>>, i32> 522c8cb9acSJean Perier ! CHECK: %[[tuple2:.*]] = fir.insert_value %[[tuple1]], %c42{{.*}}, [1 : index] : (tuple<!fir.box<!fir.ptr<i32>>, i32>, i32) -> tuple<!fir.box<!fir.ptr<i32>>, i32> 532c8cb9acSJean Perier ! CHECK: fir.has_value %[[tuple2]] : tuple<!fir.box<!fir.ptr<i32>>, i32> 542c8cb9acSJean Perierend block data 552c8cb9acSJean Perier 56a1425019SValentin Clement! Test pointer initial data target in modules 57a1425019SValentin Clementmodule some_mod 58a1425019SValentin Clement real, target :: x(100) 59a1425019SValentin Clement real, pointer :: p(:) => x 60a1425019SValentin Clement! CHECK-LABEL: fir.global @_QMsome_modEp : !fir.box<!fir.ptr<!fir.array<?xf32>>> { 61a1425019SValentin Clement ! CHECK: %[[x:.*]] = fir.address_of(@_QMsome_modEx) : !fir.ref<!fir.array<100xf32>> 62a1425019SValentin Clement ! CHECK: %[[shape:.*]] = fir.shape %c100{{.*}} : (index) -> !fir.shape<1> 63de2811eeSJean Perier ! CHECK: %[[box:.*]] = fir.embox %[[x]](%[[shape]]) : (!fir.ref<!fir.array<100xf32>>, !fir.shape<1>) -> !fir.box<!fir.array<100xf32>> 64de2811eeSJean Perier ! CHECK: %[[rebox:.*]] = fir.rebox %[[box]] : (!fir.box<!fir.array<100xf32>>) -> !fir.box<!fir.ptr<!fir.array<?xf32>>> 65de2811eeSJean Perier ! CHECK: fir.has_value %[[rebox]] : !fir.box<!fir.ptr<!fir.array<?xf32>>> 66a1425019SValentin Clementend module 67a1425019SValentin Clement 68a1425019SValentin Clement! Test initial data target in a common block 69a1425019SValentin Clementmodule some_mod_2 70a1425019SValentin Clement real, target :: x(100), y(10:209) 71a1425019SValentin Clement common /com/ x, y 72a1425019SValentin Clement save :: /com/ 73a1425019SValentin Clement real, pointer :: p(:) => y 74a1425019SValentin Clement! CHECK-LABEL: fir.global @_QMsome_mod_2Ep : !fir.box<!fir.ptr<!fir.array<?xf32>>> { 756ffea74fSjeanPerier ! CHECK: %[[c:.*]] = fir.address_of(@com_) : !fir.ref<!fir.array<1200xi8>> 76a1425019SValentin Clement ! CHECK: %[[com:.*]] = fir.convert %[[c]] : (!fir.ref<!fir.array<1200xi8>>) -> !fir.ref<!fir.array<?xi8>> 77a1425019SValentin Clement ! CHECK: %[[yRaw:.*]] = fir.coordinate_of %[[com]], %c400{{.*}} : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 78a1425019SValentin Clement ! CHECK: %[[y:.*]] = fir.convert %[[yRaw]] : (!fir.ref<i8>) -> !fir.ref<!fir.array<200xf32>> 79a1425019SValentin Clement ! CHECK: %[[shape:.*]] = fir.shape_shift %c10{{.*}}, %c200{{.*}} : (index, index) -> !fir.shapeshift<1> 80de2811eeSJean Perier ! CHECK: %[[box:.*]] = fir.embox %[[y]](%[[shape]]) : (!fir.ref<!fir.array<200xf32>>, !fir.shapeshift<1>) -> !fir.box<!fir.array<200xf32>> 81de2811eeSJean Perier ! CHECK: %[[shift:.*]] = fir.shift %c10{{.*}} : (index) -> !fir.shift<1> 82de2811eeSJean Perier ! CHECK: %[[rebox:.*]] = fir.rebox %[[box]](%[[shift]]) : (!fir.box<!fir.array<200xf32>>, !fir.shift<1>) -> !fir.box<!fir.ptr<!fir.array<?xf32>>> 83de2811eeSJean Perier ! CHECK: fir.has_value %[[rebox]] : !fir.box<!fir.ptr<!fir.array<?xf32>>> 84a1425019SValentin Clementend module 85