<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/159149>159149</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [flang] Modifying dummy argument via its global actual argument failed for array case with 2 or more elements
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang:frontend
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          DanielCChen
      </td>
    </tr>
</table>

<pre>
    Consider the following code:
```
module m
    type base
        integer*4 :: id = -1
        contains
        procedure :: print => printBase
 procedure :: increaseID => increaseBaseID
    end type

    type, extends (base) :: child
        character*20 :: name = 'default'
        contains
 procedure :: print => printChild
    end type

    class (base), pointer :: b1_m (:)

    type (child), save, target :: c1_m (1)
    type (child), save, target :: c2_m (2)

    class (base), pointer :: b1_m_s
 type (child), save, target :: c1_m_s

    contains
    elemental subroutine increaseBaseID (b, i1)
        class (base), intent(inout) :: b
 integer*4, intent(in) :: i1

        b%id = b%id + i1
    end subroutine

    subroutine printBase (b)
        class (base), intent(in) :: b

        print *, b%id
    end subroutine

    subroutine printChild (b)
        class (child), intent(in) :: b

        print *, b%id, b%name
    end subroutine

    subroutine test1 (b)
        type (base), target, intent(inout) :: b (:)

        call b1_m%increaseID (10)
 call b(1)%print
    end subroutine

    subroutine test1_s (b)
 type (base), target, intent(inout) :: b

        call b1_m_s%increaseID (10)
        call b%print
    end subroutine
end module


program fArg033a3
use m

    c1_m = (/child (1,'c1_m')/)
    c2_m = (/(child (i,'c1_m'), i=1,2)/)

    b1_m => c2_m              !! ERROR case: array of 2 elements
    call test1 (b1_m)

    b1_m => c1_m              !! WORKING case: array of 1 element
    call test1 (b1_m)

    c1_m_s = child (1,'c1_m') !! WORKING case: scalar
    b1_m_s => c1_m_s
    call test1_s (b1_m_s)
end
```

Flang failed to update the global variable `c2_m` that is an array of 2 elements in the ERROR case. 
It works fine for the `c1_m` case that is an array of 1 element.
It works fine for the `c1_m_s`, the scalar case.

Flang outputs
```
> a.out
 1
 11
 11
```

Expected output
```
> a.out
 11
 11
 11
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVl1vqzgQ_TXOy6iRbfJBHnigSbOqVrtX6ss-RgYb8K7ByDbt7b9f2YaGtE1vc1HVBDJz5pzxGWNmraw7ITK0vkfrw4INrtEmO7BOCrXfN6JbFJq_ZnvdWcmFAdcIqLRS-kV2NZSaC5TkCOdog8c_nLeaD0pAi3AOAOBeewEFs2K895fsnKiFQTRfgQdIcpAcUHKAOzILK3XnmOzs7FFvdCn4YMSU1xvZOZ-Kkod4cz_W-hAqu9IIZsXjYYqfntyHp2MZ0fFA2ss6S0B0D-KnEx23gGgaBNHdBF02UvE584YZVrogkeIpqmOtCCoR3XJRsUE5RLdXBH9D6X5W9SPrUjE75-oV9Nq33kyQBTm1PsLf0t2lYP88yoqplj2HJjhmauHehI8IJObfmExjMr0o_k3ep9Cl25iGnKnMpbmEEq3oHFNgh8LowclOvPNH4OSB5UztNcaeb-cQTWWnBzezSuETZwPwLngWKcmZrb8KRNfjmExf6X2Mmhxw5n5Onel5m49Ryg0i3im4GMngS5r7jEjsRkbBx19Rmq_ub3Mav_kh_D4_J6wjn1CbfDdrVrTb12v_2bAFpUyp4GpPdbZN0ZTgsXAMmUaNroPEG4Wc7FzKb2q4wvxkr3O_iP0Vd_8gvkNiJYTz3ujasBaq3NQ4SViCcD7Y-I6ZxjlsRGFvTRE9lpOlCKJ7RLdl6O02yDyeWcUd6C1rspq_lR8T9yBRcvCIdA40YhUjA789B9yLC1GCKIGHp6cfT1D6jic5MGPYK-gK6LT_TNtRaNXZfIHEtVrkSq1_fjz9-fj3Hx-rkana94rFnTO06XpbrxW1JVPMzGhHpIn46aPg0aSjpXbREe_OGAjnR8W6GiomleDgNAw9Z06EE0qtdMEUPDMjWaEEoA32C4I2GFzDHEgLrPus-SC7AHBepSUgnD86eNHmPwuVn6RKx3OQRyUR1Ud-Cv3W6eWvYE7WK_Mj2IixaZHAXK0eXD8Ej1w0I3kAtvRTinMIbwNy_v-uaw8_e1E6wUeoL5GuQi14lvBdsmMLkZHtOsWr7S6hiyYjK0HKqkr5Jl0VVZUKRlNWEL5dr3YVLulCZhTTNd6RDUmTdE2XG7LhVVolnOFNualStMKiZVItlXpul9rUC2ntIDKy3pHVbqFYIZQNx1VKK98TlOSV0X6z4ohSf4g1mc-9K4baohVW0jp7RnPSqXDcjcnrA_yluaxe_XGWD237CszUg18xeJYMpLOTm1jpBv8x_Tw6zy9jXO5gghfpGqCgDbTaiDdjLQajssa53obd_4josZauGYplqVtEj57f-HHXG_2vKB2ixyDdInoc1T9n9P8AAAD__939WYU">