<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/154579>154579</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang][OpenMP] 'declare target' appears to require an explicit interface for subroutine calls.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
scamp-nvidia
</td>
</tr>
</table>
<pre>
Consider the following snippet of code:
```
program prog_generic
integer :: val_n = 8
!$omp declare target(worker)
!$omp target
call worker(val_n)
!$omp end target
end program
subroutine worker(val_n)
!$omp declare target
integer :: val_n
print*,"hello from worker"
end subroutine
```
Attempting to compile this snippet with latest flang results in an unexpected failure in comparison to gfortran (14.1) or nvhpc (25.7):
```
scamp:$ gfortran test.F90 -fopenmp -o test
scamp:$ nvfortran test.F90 -fopenmp -o test
scamp:$ flang test.F90 -fopenmp -o test
error: Semantic errors in test.F90
./test.F90:5:12: error: Cannot call function 'worker' like a subroutine
call worker(val_n)
^^^^^^
./test.F90:3:22: Implicit declaration of 'worker'
!$omp declare target(worker)
^^^^^^
```
Note all flang openmp-versions I tried resulted in the same behavior. The only way I can actually get the code to compile and run is to add an explicit interface:
```
program prog_generic
implicit none
integer :: val_n = 8
interface
subroutine worker(val_n)
integer :: val_n
end subroutine worker
end interface
!$omp declare target(worker)
!$omp target
call worker(val_n)
!$omp end target
end program prog_generic
subroutine worker(val_n)
!$omp declare target
integer :: val_n
print*, "hello from worker"
end subroutine worker
```
I suspect that Flang requiring an additional interface that other compilers do not require, with no warning or hints would be a major porting issue for users. Unless otherwise suggested, I believe the original code should compile with Flang in the same way it does with gfortran and nvhpc.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVk2PozgQ_TXOpRQEJjTkwIGZ3kh92A9pd88jBxfgGWOzZZNM__uVHdJJ92TSPRFSFNtV9fxe1QvCOdUbxJoVn1jxuBKzHyzVrhXjtDYHJZVY7a18rj9b45REAj8gdFZre1SmB2fUNKEH20FrJbK8AZY24XlIlydtJrI9iRHC95ceDZJqWdoo47FHApY3Ie4g9BcDLH-EKsTzjPGNHSeQ2GpBCF5Qj57x6mjpGxLjW5Y2AHA5uZyIqwDQCq3hfLiK6W8EoZGXwPBjQcvSxs17srNXBm-m-SnE21c745pIGc94w_hnxvmAWlvoyI4vNfgC5FL-DZ-N9zhOPvDvLbR2nJRG8INyL3oclR9AC4_OQ6eF6YHQzdo7UAaEgdng9wlbjxI6ofRMGDZCKkHKWRMS950lT8IA41W2STLGt2AJzGGY2rDGi6QMTOTNj5LHBgo7fHPJE9Aku20K685OaMYJ1jYuvgkwh1-NOF3x3mkkshS0-BtHYbxqIa5EPs5xLG0SxncvP_OmYHmT8RD2Ev9ZGGP9qbm62bRe2cBQeVavBK2-IYjX8gG815Os-O3t8wOcnOUNj3CexkmrVvml9UREYbtXQGLWD4_Rrc9NTNcy_2E9QmQiCnBifX1AcsoaB0_gSaFceg9lJHtAcGJE2OMgDspSAv8MCNboZziKZ3iCVhgQrZ-F1s_Qo48hwV2uu10YCTQbUC6sCilDV-P3hZUwf9SJ9tcMCUCdaTV2ke2uSV3VWTh8xzIWXu_Zw-vJP2cJm2HnuuCHtf2JQ97xx_ft8S137178jlveIeTKLOGjbnnh7FpzljZP4GYXXA_8IDzsFl_8b1YUvDS0nZQqjJLQF6ZPh60fkM7dRw6khWADp2gM8KLlGgtHQSakswSDMt7B0c5awj54wii-WoLJUjRv5dwc_kwJZofkEvjXaHTuVOuoHIKb-x6dRxkKPMEetcIDxoGwpHoVgMbJcEMscp6OiOV0v-uRC_MVPMOiOx15seYwTtHYE1jJOpfbfCtWWGdlUZRZWvJiNdQ5f9g-tHKbyk0lO5HxskurhzzbpkWJedWuVM1TXqQVT7OSF7xIuirvqn0hHjAtNxmXbJPiKJROtD6MiaV-FSmos2JTlNuVFnvULr6KcB4dJchbPK6oDgHr_dw7tkm1ct5dUnjldXx_OUUUj6z49OeE5ve_WPEYDPHtdJQgpgkFRedYBLztHlGbq8YKE-OS1Uy6HryfXPz32TG-65Uf5n3S2pHxXUC2fK0nsl-x9Yzv4k0d47vlsoea_x8AAP__nGQPHA">