<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55735>55735</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang][OpenMP][OpenACC] The lowering for stop statement in a region is not supported yet
</td>
</tr>
<tr>
<th>Labels</th>
<td>
openmp,
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
PeixinQiao
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
PeixinQiao
</td>
</tr>
</table>
<pre>
```
program m
use omp_lib
!$omp parallel num_threads(4)
stop omp_get_thread_num()
!$omp end parallel
end
```
```
$ bbc -emit-fir -fopenmp test.f90 && cat test.mlir
func.func @_QQmain() {
%c4_i32 = arith.constant 4 : i32
omp.parallel num_threads(%c4_i32 : i32) {
%0 = fir.call @omp_get_thread_num() : () -> i32
%false = arith.constant false
%false_0 = arith.constant false
%1 = fir.call @_FortranAStopStatement(%0, %false, %false_0) : (i32, i1, i1) -> none
fir.unreachable
}
return
}
```
The problem is the fir.unreachable in the parallel region. Change it into "omp.terminator" by hand:
```
func.func @_QQmain() {
%c4_i32 = arith.constant 4 : i32
omp.parallel num_threads(%c4_i32 : i32) {
%0 = fir.call @omp_get_thread_num() : () -> i32
%false = arith.constant false
%false_0 = arith.constant false
%1 = fir.call @_FortranAStopStatement(%0, %false, %false_0) : (i32, i1, i1) -> none
omp.terminator
}
return
}
```
```
tco test.mlir -o test.ll
$ clang++ -L/path-to-lib -lFortran_main -lFortranRuntime -lFortranDecimal -lomp test.ll
$ ./a.out
Fortran STOP: code 1
Fortran STOP: code 3
IEEE arithmetic exceptions signaled: INEXACT
IEEE arithmetic exceptions signaled: INEXACT
Fortran STOP: code 2
IEEE arithmetic exceptions signaled: INEXACT
Fortran STOP
IEEE arithmetic exceptions signaled:
```
This is expected.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVUuPqzYU_jVkcwQiJgxhwSKTh3SltnemM4vukDEGXBkb2aad-fc9vEJu7ozU3q4qVbKS8_J3nj4UunzPvIdwPuHJCw-d0bWhLbQTC9BbDrrtcimKReSRrUd2KISOGioll6D6NneN4bS0HtnvPJIuxgDW6W6EqLmbjXK0R7sbsxWTq_KKO2lRMhF3sd6zZAdFwcDnrXB-JQz4le64QkzHrQuqNEQ3D3iAUTfJWinMdLvqFQuGH_B2Yf783FKhphDBSx7XMGO2y0VEwItOQI1wTcC0so4qBzsUHgCVizWmE1xLBHdFuoWabn3ranQWjn4wl4AhyhDaZ4UcUWbS96LzbRwjVEUltvKDsEfF96Z5-PeMt9-FmF-0cYaqwwt2_sVRx1uu3JRy6JHj1cUtnYc3SYzVOILYLr9zTkqrG-eDz15hGVhDC3lVeMlpIQ13vVHzeCziu7F5bTjg1CNAC8KCQ_YOGIQaxddWGl4LrQI4NlTVqHZo4TQGToaOO25aoajTBgVQvANalZjYh97_H7v_3Njd9fjHpu6OdUyvCwn8mZFy3WxM4qx55BEP-D955NJR1_hO-7iYwZdz7vkwPyv7a6-caPkqOHEmWipRoJe1OBTv6iVAYBro3s2y-Rq8vH59GorEdMlhO9t_bhHdWnw5n89TP1vuBAP-xnjn8AFZsKJWVPLhdcCXX86_HY6vP37nw0jIv43kG9R_jPXJxsE9g4e_dZw5XgabMovKNErpxgkneebFj9XY7viE5Ff8hv38tNKH4xEZGPaW1H9yI1QNlTbTd9Yucz8sLTpvqsGZ0g5s33WYDi_hnbtNb2TWONfZIU5ywVNjNn2Brw4f90XKP5Y_H_fj7xgqssLanuMeucRxEsWbJqPlnqZJxdI02caMViyM0oeqYmVRxfukSDeSFlzaIadhP47fYySmN0imNJGNTxuRkZCQMCYIFD2QbUDjKq3C_T7Z74p9kjB84xznWwZDTIE29cZkY3hFX1tUSmGdXZXUDo3gfHb9xMWbUM-C6tkf7V2jTbbKN2Ny2ZjZX1dEsF4">