@@ -348,21 +348,25 @@ subroutine char1(a)
348
348
res = reduce(a, red_char1)
349
349
end subroutine
350
350
351
- ! CHECK: fir.call @_FortranAReduceChar1
351
+ ! CHECK: %[[CHRTMP:.*]] = fir.alloca !fir.char<1> {bindc_name = ".chrtmp"}
352
+ ! CHECK: %[[RESULT:.*]] = fir.convert %[[CHRTMP]] : (!fir.ref<!fir.char<1>>) -> !fir.ref<i8>
353
+ ! CHECK: fir.call @_FortranAReduceChar1(%[[RESULT]], {{.*}})
352
354
353
355
pure function red_char2 (a ,b )
354
- character (kind= 2 ), intent (in ) :: a, b
355
- character (kind= 2 ) :: red_char2
356
+ character (kind= 2 , len = 10 ), intent (in ) :: a, b
357
+ character (kind= 2 , len = 10 ) :: red_char2
356
358
red_char2 = a // b
357
359
end function
358
360
359
361
subroutine char2 (a )
360
- character (kind= 2 ), intent (in ) :: a(:)
361
- character (kind= 2 ) :: res
362
+ character (kind= 2 , len = 10 ), intent (in ) :: a(:)
363
+ character (kind= 2 , len = 10 ) :: res
362
364
res = reduce(a, red_char2)
363
365
end subroutine
364
366
365
- ! CHECK: fir.call @_FortranAReduceChar2
367
+ ! CHECK: %[[CHRTMP:.*]] = fir.alloca !fir.char<2,10> {bindc_name = ".chrtmp"}
368
+ ! CHECK: %[[RESULT:.*]] = fir.convert %[[CHRTMP]] : (!fir.ref<!fir.char<2,10>>) -> !fir.ref<i16>
369
+ ! CHECK: fir.call @_FortranAReduceChar2(%[[RESULT]], {{.*}})
366
370
367
371
pure function red_char4 (a ,b )
368
372
character (kind= 4 ), intent (in ) :: a, b
@@ -598,8 +602,8 @@ subroutine char1dim(a)
598
602
! CHECK: fir.call @_FortranAReduceCharacter1Dim
599
603
600
604
subroutine char2dim (a )
601
- character (kind= 2 ), intent (in ) :: a(:, :)
602
- character (kind= 2 ), allocatable :: res(:)
605
+ character (kind= 2 , len = 10 ), intent (in ) :: a(:, :)
606
+ character (kind= 2 , len = 10 ), allocatable :: res(:)
603
607
res = reduce(a, red_char2, 2 )
604
608
end subroutine
605
609
@@ -613,4 +617,22 @@ subroutine char4dim(a)
613
617
614
618
! CHECK: fir.call @_FortranAReduceCharacter4Dim
615
619
620
+ pure function red_char_dyn (a , b )
621
+ character (* ), intent (In ) :: a, b
622
+ character (max (len (a),len (b))) :: red_char_dyn
623
+ red_char_dyn = max (a, b)
624
+ end function
625
+
626
+ subroutine charDyn ()
627
+ character (5 ) :: res
628
+ character (:), allocatable :: a(:)
629
+ allocate (character (10 ):: a(10 ))
630
+ res = reduce(a, red_char_dyn)
631
+ end subroutine
632
+
633
+ ! CHECK: %[[BOX_ELESIZE:.*]] = fir.box_elesize %{{.*}} : (!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>) -> index
634
+ ! CHECK: %[[CHRTMP:.*]] = fir.alloca !fir.char<1,?>(%[[BOX_ELESIZE]] : index) {bindc_name = ".chrtmp"}
635
+ ! CHECK: %[[RESULT:.*]] = fir.convert %[[CHRTMP]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
636
+ ! CHECK: fir.call @_FortranAReduceChar1(%[[RESULT]], {{.*}})
637
+
616
638
end module
0 commit comments