<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">