<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/82684>82684</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang] static bounds checking of unreachable code
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
bcornille
</td>
</tr>
</table>
<pre>
The below code encounters a semantic error check in flang-new. It may require some Fortran language lawyers to verify its correctness, but no runtime out of bounds access can occur in this program. Can someone please comment on whether this is truly a semantic error of the program or if flang is being too aggressive in its restriction? I encountered this pattern in a large application code and at first glance it seems like it would be a lot of work to use the preprocessor or other mechanism to generate code that flang would accept.
bounds_unreachable.f90:
```Fortran
program main
implicit none
integer, parameter :: N = ONE_OR_TWO
integer :: array(N)
array(1) = 1
if (N > 1) then
array(2) = 2
endif
write(*,*) array
end program main
```
Compilation error:
```shell
>> flang-new -cpp -DONE_OR_TWO=1 bounds_unreachable.f90
error: Semantic errors in bounds_unreachable.f90
./bounds_unreachable.f90:9:5: error: Subscript 2 is greater than upper bound 1 for dimension 1 of array
array(2) = 2
^^^^^^^^
./bounds_unreachable.f90:5:14: Declaration of 'array'
integer :: array(N)
^^^^^
```
gfortran behavior:
```shell
>> gfortran -cpp -DONE_OR_TWO=1 bounds_unreachable.f90
bounds_unreachable.f90:9:10:
array(2) = 2
1
Warning: Array reference at (1) is out of bounds (2 > 1) in dimension 1
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVU1v4zgM_TXKhWjgyHYTH3zoNg0wlymwO8AcC1qmbW1lyUvJDfLvF7KdJtOv2Q0MG5FE8vE9UkTvdWuJSpH_IfL9CsfQOS4r5dhqY2hVufpU_ugIKjLuCMrVBGSVG20g9oDgqUcbtAJidgyqI_UM2kJj0LY3lo5r-BagxxMw_TNqJvCuJzg4DowW4qkRWwKDx1P0GBy8EOvmBDp4UI6ZVLDkvZD3UI0BrAMebdA9gRsDuAYqN9raAypF3oNCC06pkSOK0GkPA7uWsV_DPdopurMEgyH0BMr1PdkAzsKxo9ARzzbaQ-DRnN5n6BoIHZ2dgmPQzZxtNKpI2xaCc4Bty-S9fqEIJCbD5ANrFbSzIj3AtwuRVC9IMQRiGw0QDHJLgMNgtMJoNLOPtgYM0Gj2AVqDVhHoAJ6o92D08_Tv6EZTQ0XRjZtIOjp-juSOnhb8NLCLjMWcGNyUe0-qQ6t9H4-2ZIkx0Bw3dDHqlOfsPfI9hLVI9iK5m9-zEk-jZULVYWVo3RSJSJdtcZvMz6L-vHpmske9rIDuY9I6im1pWVs-oG2gljiWw4CMPQViiCHSO_gOIt3D4_eHp8c_n378fHxjcz6GzHgScvddyOKN9_PWRshicrZ59dFANAGRPsC0Gzo644WLoTwbymWPbK2bN1GOrAMJuRPyTsj76V0sHq4Pkq3hPTuvLF4zf-_6QZu5TKY6fU-678iYZS19iGm89ijcqGGAm_0Vc-l-A5_IOWNbgsBfv7SHj7X7ld1ayMOnZVKI9C6PTi_ex8or1kMAGdurZcIw9ShaGIeBeA4GG2gcQ617sj5ysIk1f80ofCmSyB8-fn6POeLdZBHrnpRBnjVwsVq2S7ztuax_W4a__j4E86H8bbPcpxV1-KL_m_yvRv9f_S8V3Fx1_CWtT7l__S2t9hPZattGhu6iDTA1xBTvOQxw7k3t31z_0fWlObW9LoY3VKzqMq2LtMAVlZttsrtNs2QnV12JWZbnsk6yYlslRVpISmWeVbcoM5Wnt9uVLmUis0RKKZM0y-Qa6yIriibZbtVmm-YosoR61GZtzEu_dtyutPcjlTt5u8tWBisyfhq2Uk7dJ6SMc5fLeP6mGlsvssRoH_zFQ9DBTBN6tsj34APGjlsyn2ZuHDuugStFpmt7NbIpuxAGHzWRByEPrQ7dWK2V64U8xCDL52Zg9zepIORhwuyFPEyw_w0AAP__QseGlg">