<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/78797>78797</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [flang] Failed substitution with preprocessor
        </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 a preprocessor variable in a snake case Fortran variable. In order to get substitution some codes use continuation lines so that the preprocessor variable can be inserted in-between underscores in code. flang appears to concatenate continuation lines prior to applying the preprocessor substitutions so the substitution does not occur.

### Reproducer:
#### main.F90
```Fortran
program main
  implicit none
#define LETTER b
  integer, parameter :: a_&
    &LETTER&
    &_c = 1
  write(*,*) a_b_c
end program main
```
#### compilation:
```shell
>> flang-new -c main.F90
error: Semantic errors in main.F90
./main.F90:8:14: error: No explicit type declared for 'a_b_c'
    write(*,*) a_b_c
 ^^^^^
```
#### preprocessed source:
```
>> flang-new -E main.F90
#line "./main.F90" 1
      program main
      implicit none
      integer, parameter :: a_LETTER_c = 1
      write(*,*) a_b_c
      end program main
```
#### GNU behavior:
```
>> gfortran -E main.F90
# 1 "main.F90"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.F90"
program main
  implicit none
 integer, parameter :: a_&
    &b&
    &_c = 1
  write(*,*) a_b_c
end program main
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0lcGO4ygTx58GX0qJbJzEnYMP-TrJp5FWc5idPbcKqDjsYrAAd2-__Qrb7XTSme2ZwyLkRFVF-V8_CoMh6MYS1Wz9P7beZ9jHs_O1kM5bbQxlwqnXmvFynPAlhJ5YuWP5nuW7k0HbgHIUwLoIoRch6thHAoTOU-edpBCch2f0GoUh0BYQgsW_CCQGgqPz0aOdA5bwxYLzijxEBw29S6qdheBaAukUBehD-mejtj0OPqMtBQgO4hkjxDP9QIJECyIpCeQjKdB2ISi-EFnorSIfpPMUktL0oiWMRWLXEfqQVElnJUayGO8q6Lx2g3rsOvOqbfNRy_uaJsl0XejM1EnZ--WIe3rOm_EtpVS9JD_vyOxM_ha1XR63-eTa5OOcmI_WzrvGYzvEjhYA3XZGSx3BOktzXkUnbQl-O3z_fvgGYg62kRryjD9Chx5biuQh6Sl3gE-Mb94CARjfjKtvrU8SWLmH4s344nUkxh8Y3zH-ODy3gE_iSY4RZBV8FD4XeAeFdG2nzbBNF1Zv8eFMxky28sDKw7jnC0svsJA3GMl7l3jD79SijVrCYBka5jpyyfhxtpS7B1builVaOaf46oD-nljH145AkTToScHJeWC8Gmvm1YXWZ2iArQ9X81M0l84kBcH1XtJHRD-ic7htMl6mUwCM86vyOb_sbhr32i6NO603Of61zca2um2jn-I1jF9vqP9__QMEnfFZO_8JruY0feTu0YIisXrH6cbDykfRaxMX2qZ09_zStS1atUjg78Z8yP6Th_4Xz7b4j491pupSbcstZlQXVb6u8jKveHauV5timxMVojitK7VZryvEbbXCTVmKkguV6ZrnfJUXxZZzviqLJRV5zjdqg9tC5KuSs1VOLWqzNOa5XTrfZDpddHX1UG2rzKAgE4YrkvOh-RPJ9T7zdYpfiL4JbJUbHWK4ZIg6muFeHVes93BEbdIZe_-hf9HxfHU5ZL039TnGLiTQ_Mj4sdHx3IuldC3jx5R_-ll03v1JMjJ-HOQGxo-D4n8CAAD__zVOTd4">