<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/96781>96781</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang] Preprocessor substitution in bind(C) names
</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>
### Issue:
flang does not substitute preprocessor tokens in BIND(C) names. This reproducer contains continuation lines in the same spirit as #78797. This appears to be a workaround in order to get token pasting inside character/string literals. Open to discussing whether this should be intended behavior, but it is used extensively in the a customer codebase and we'd need to find an alternative solution.
### Reproducer:
#### main.F90
```Fortran
program main
implicit none
#define TEMP_LETTER b
#define VAL c
integer, parameter :: a_&
&b_c = 1
write(*,*) a_b_c
contains
subroutine test_&
&TEMP_LETTER&
&_wrapper_&
&VAL&
& (input) &
bind(C, name="test_&
&TEMP_LETTER&
&_&
&VAL&
&_f")
use iso_c_binding
integer :: input
end subroutine test_&
&TEMP_LETTER&
&_wrapper_&
&VAL
end program main
```
#### preprocessor output
`flang-new -E main.F90`
```Fortran
program main
implicit none
integer, parameter :: a_b_c = 1
write(*,*) a_b_c
contains
subroutine test_b_wrapper_c(input) bind(C, name="test_TEMP_LETTER_&
&VAL_f")
use iso_c_binding
integer :: input
end subroutine test_b_wrapper_c
end program main
```
#### gfortran behavior
`gfortran -E main.F90`
```
program main
implicit none
integer, parameter :: a_&
&b_c = 1
write(*,*) a_b_c
contains
subroutine test_&
&b&
&_wrapper_&
&c&
& (input) &
bind(C, name="test_&
&b&
&_&
&c&
&_f")
use iso_c_binding
integer :: input
end subroutine test_&
&b&
&_wrapper_&
&c
end program main
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMll-PozgMwD9N-mJNRUOh5YGH7nQqrTR3t1qN9rUKxIXc0gTFZnr77U-BlqGz82dH2pMOIQqxYzv2r5YVkaksYi6STyLZzlTHtfN5UTpvTdPgrHD6Ry5kPNzwmahDEW9EtBXR5tAoW4F2SGAdA3UFseGOEVqPrXclEjkP7L6jJTAWPn3-cyvk-lbIDKw6Is3hoTYEvbbuSvRQOsvKWOpfjO0UG2ehMRZ7C1wjkDoiUGu8YVAEQsar9SpbnW2ptkXlCdhBgaDg5Px35V1nddjvvMYQEVTIQ2DQKmJjKzCWjEYoa-VVyeiF3BH7IGkMo1cNzeGvFm3YrQ2VHVEQnmrkOtgMzql2XaODY2MZrcbwXqtH47yQt1B0DIbBEHSEGvAfRkvmEZsfl7MpKDtid-wzobFQhKCshhMKudJgEXXwfzBWg7KgGkZvFZtHBHJNF5I1H4rzVLSvY3bHyo3CID8qY-e7LDqL0mi4d86zV3ZYbb2rvDr2usMKgDm2jSkNg3UWR7saD8YiPNz98WV_f_fwcPcViufCb5t7KEczlrHCPj-t8uqIjB5CpPEG1F7I9KIIIGRa7EsQ8RYWl9WTN4xCroXcCHnbPzNQ-2J_dnABaviirvCu4xAEI_GTeSHTScjT5f3JB6b8le63zf30E4RcG9t2HJxPQi6M1QPwtz3wIt4KKa89nw_2kvez6CfdqfeLzkFIKWR2XuwIwZDbl_sQgrHVs2xfEjwE3cvQavid6RmN_szOyNgLNF61DtfxGJ9Io77h3Fg8wc3dE7bpm-RCf73Eb7heYnjyPCu9SegzIqcb32Nz0LomdFh7XohiTHM5Re0NviblmvAz1OYalo8-hwhfI-x1wIZ9L2E2Pd1rTj9OUnUYOHhqwZcto-RNjD7W-a4S9L_pacW7f9XyN_ex4t3uVV7h-Kxx_Red61eS8CvdaqbzWGdxpmaYL1aLbLlI0iSa1XlRynWUFUm2zBa4lmqts4NShzJJ4nSZZquZyWUkl1Eq00UiV3E013K5jrPiUGKC2WqlxTLCozLNvGkej3Pnq5kJo1aepav1YtaoAhvqhzQp-yYYcpZsZz4P-jdFV5FYRo0hpicLbLjpJ7thR7KFL9PeOo5rYcAydlLj83A263yT18wthZTLnZC7ynDdFfPSHYXcBUfnn5vWu7-xZCF3fdwk5G4I_TGX_wYAAP__vyIF4w">