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

    <tr>
        <th>Summary</th>
        <td>
            [Flang] Execution does not terminate when an array name enclosed in square brackets is used in where construct
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          ohno-fj
      </td>
    </tr>
</table>

<pre>
    ```
Version of flang : 21.0.0(9fe6f6a0d430b872750354c20f3e4a651bd1f135)/AArch64
```

When `array-constructor (an array name enclosed in square brackets)` is used in `where construct`, execution does not terminate after more than 20 minutes. 
Gfortran and ifx execute in less than a second.  
The above program is sngtar12_2.f90

According to the `Fortran standard 2023: 7.8 Construction of array values`, it seems correct to use array names enclosed in `square brackets`.

Execution terminates in the following cases:
 - Do not use where construct  
   The above program is sngtar12_21.f90
 - Do not use square brackets  
   The above program is sngtar12_23.f90

The following are the test program, Flang, Gfortran and ifx compilation/execution result.

sngtar12_2.f90:
```fortran
program main
  integer a(6000*400), b(6000*400)
  a=1
  where(a>0)
     b=[a]
     b=[a**1]
  end where
 if(b(6000*400)/=1) print *,'err1'
  print *,'pass'
end program
```

```
$ flang sngtar12_2.f90; time ./a.out -> Killed because execution does not terminate after more than 20 minutes
  C-c C-c
real 24m34.953s
user    24m9.212s
sys     0m25.710s

$
```

```
$ gfortran sngtar12_2.f90; time ./a.out
 pass

real    0m0.056s
user 0m0.033s
sys     0m0.023s
$
```

```
$ ifx sngtar12_2.f90; time ./a.out
 pass

real    0m0.255s
user    0m0.002s
sys 0m0.005s
$
```

sngtar12_21.f90:
```fortran
program main
  integer a(6000*400), b(6000*400)
  a=1
!  where(a>0)
     b=[a]
     b=[a**1]
! end where
  if(b(6000*400)/=1) print *,'err1'
  print *,'pass'
end program
```

```
$ flang sngtar12_21.f90; time ./a.out
 pass

real 0m0.146s
user    0m0.128s
sys 0m0.011s
$
```

sngtar12_23.f90:
```fortran
program main
  integer a(6000*400), b(6000*400)
  a=1
  where(a>0)
     b=a
     b=a**1
  end where
  if(b(6000*400)/=1) print *,'err1'
  print *,'pass'
end program
```

```
$ flang sngtar12_23.f90; time ./a.out
 pass

real 0m0.240s
user    0m0.185s
sys     0m0.001s
$
```


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVkFz4zYP_TX0BWMNCUqydfBBiePv8F132mOHkiCbW4l0SSrZ_PsOadmJ7W433c50MpPYImkAD-8REJT3em-INqx4YMV2oaZwsG5jD8Yu-6-LxnavG1by-Y_Xv5Dz2hqwPfSDMntgsgYUGc84w3XVU9mXine55M16hauCyyJvkfeSclUWoulEL2TBsGK4q2vXHsqc8fp9BMbrXw9kgJVcOadel601PripDdYBw7UykPbBqJGATDtYTx1oA_6PSTmCxqn2dwo-Bik5aA_T_ANW8pcDOYKLyxgSH4G-UTuFmFdnyYOxAQK5URsVCFQfyMFoHUE4KAPIYdRmCuQzYLz-X29dcBGV6UD332ZnFAMO5P3JSIGn1poug2jz5UCgGvtMcHR279QYUXqzD8oJ_A2zvpqZqNvWuk6bPQQL4UAxhd0czwdlOuU6QI4yyrDK1vB4zmwW6UTVsxom8nOyOoAnGj201jlqQ3Q9eXrHqr-ilZX8ltmSZyd8TxfiLnz5aBOh9nYY7EvE3ipPnsloAEvY2kRwDHmjRuIGAH5Aj5j5ufZ1g_GDvuQb11-uMKskN0EgH86mkb1dvPXx4U731o5HPajIBsPd25Vy5KchzITdiJw4udz-2SPj9RnrqLRJeWgTaE8OFMN1yTlnWOfxs4pQmrvNaKKY3Ir0lGiOpcPk0-UYABomt6x4UKzY3m1hzbAW5xMy3eyF16B7huv7mLhLAbGCo9MmQHLxyHBFzgmGq-To5uiovD8dxQhnmu8awtUS87n13HL5AEGPBBnDncrsFGDJ5BP8Xw8DddBQq-I1-clST-Afl238Z7x2pAbAfJR5VhUynk6eXCQQ87HKUGDc868-kcpHLLKV4H7OBv-i592muD9frx9lGZElGpObBCyF5BkvyguytJbyGhXPOKatDyGKd_znwWBRvKcpBecXlk7L4rtYbov_v6gbhuLfl050clU8n7B6xIe1jDKJvLwVUuD6SkghPiCk_CQNUF0vZvHumt4n1E3-I90w53e6rYu7hsC_r92i28iukpVa0Eas8ryocrGWi8OmoxWvuqZrujIvyqJtmqbHVZsr3pBUolroDXIseC5yLrDKZYal6PlacCEqykspWc5pVHrIhuF5zKzbL7T3E22ELIrVejGohgafZlTE_vQGxjiuuk00WDbT3rOcD9oH_-Yi6DCkwfb0zi628PR3zf8lTp0fni7fz5U3Y8xicsPmEMIxzTy4Y7jb63CYmqy1I8NdBDh_LY_OfqU2MNylhD3D3Zzz8wb_DAAA__8yy1gH">