<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/106705>106705</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang][Semantics] Semantic error in Fortran code due to recursive reference in specification expression
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
inaki-amatria
</td>
</tr>
</table>
<pre>
- `flang-new` version is: `flang-new version 20.0.0git (https://github.com/llvm/llvm-project.git 46fe36a4295f05d5d3731762e31fc4e6e99863e9)`
- Reduced test case is:
```fortran
! foo.f90
module foo
real :: qux(10, 10, 10)
interface
module subroutine bar(i)
end
module function baz()
end
end interface
end
submodule (foo) foo_impl
contains
module procedure bar
qux(i, i, i) = baz()
end
module procedure baz
end
end
```
- `flang-new` invocation is: `flang-new foo.f90`
- Expected behavior is: The code compiles sucessfully without errors, as `baz` should be accessible through host association in `bar`.
- Actual behavior: Compilation fails with the following error:
```txt
error: Semantic errors in /foo.f90
foo.f90:17:22: error: The module function 'baz' may not be referenced recursively in a specification expression
qux(i, i, i) = baz()
^^^^^
```
- Additional information: Reordering the definitions of the procedures in the submodule seems to work around the issue for now.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVduS2ygTfhp802UVQgdLF7pw4vgB8v_3WwhaFhsEXg72TJ5-Cx3szGSmtjKlYgx94OuvP4B7ry4GsSPVF1KddjyG0bpOGf5D7fnEg1N811v52u2B1HTQ3Fz2Bu-kpnBD55U1oDwpjm-sDxOjGc3oRQUgrBlDuCZXws6EnS8qjLHPhJ0IO2t92_7tr87-jSJkKaqsByxqXrK2GmglK1kcivxQMyzyQZRYY9s2dYEtYS2pKaEnQo97-I4yCpQQ0AcQ3OMCcTEnv_kbrAuOm3WV5TBYmw3tmmUZJyujxmRZ5gAOuYaUrDjCP_GFsCanhH2F59j-mgBAmYBu4AK3BYA1q4-9szEog9BzR1ijHsHJC41cJxuKaERIrPb8J2HNJ87p5_tNH9Zl9LFfUxLWpNpYm0r8S01XvWUR1gSujP8N9dVZgTK6BfTDCisbKtGwDS2Q4vQfcD9M_HO1PvyeFWzt25r9XpXK3Kzg4RNhbj1-xn97uaIIKKHHkd-UdWvY_0cEYWUapqvS6MFHgd4PUetXuKsw2hgAnbPOp3K5Tzsl6DUFP9qoU0rgIgWpXiOE0dl4GWG0PgD33gq14jRLqCM1zTZcRxEi1w9UCdLXGckSM3Cl_QwDwpgUqrW9K3NZEP2u9vASViZXO_wPJ26CEmsNMwp2fnMItklxzA-kODKW4h4JEkPvpUnYYW73ASb-CsaGxIHDAR2adCQdiui8uqF-TRty8FcUalBrx_Dl6hJd1vyqrD_T1gd_pPr25vtYSUcpVULBNSgzWDfNmFKl39E6iS7Rm8iWOCgzu3qww7z0EO_MY1p5HjKPOHkIFu7W_QDubDRydlHex9Q6B8bes53sCtkWLd9hlx9YRfOiasvd2OVN25TVoW77tpE5p00rac8Pss2bhsqB71THKCtpU9Ccsroos7wWgvcy56Ks-YCclBQnrnSWLtjMustu3rrLaX2g1U7zHrWfnwDG5rNCGEuvgevmG7mPF09KqpUP_pkiqKDnd2OJqE6k-rJpypPq9E5giZfzcuUu50pGTKQ8FPGUSXL9TBe76HT3Zy8JYee5XE_Yea341rF_AwAA__956iYx">