<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/101348>101348</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang][Module] Miss definition of inline function in implementation units
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
24bit-xjkp
</td>
</tr>
</table>
<pre>
## Information
clang version 20.0.0git (https://github.com/llvm/llvm-project.git 73c72f2c6505d5bc8b47bb0420f6cba5b24270fe)
Target: x86_64-unknown-windows-gnu
Thread model: posix
InstalledDir: D:/Tools/clang/bin
OS: Windows11 24H2
Here is my code:
```c++
// a.cpp
import B;
int main()
{
g<void>();
}
// b.cppm
export module B;
import :C;
export template <typename T> inline void g() noexcept
{
return f<T>();
}
// c.cppm
module B:C;
template<typename> inline void f() noexcept {}
```
I can compile these code with gcc and msvc, but when I compile with clang:
```shell
mkdir build
clang++ -std=c++26 c.cppm --precompile -o build/c.pcm
clang++ -std=c++26 b.cppm "-fmodule-file=B:C=build/c.pcm" --precompile -o build/b.pcm
clang++ -std=c++26 a.cpp "-fmodule-file=B=build/b.pcm" "-fmodule-file=B:C=build/c.pcm"
```
Then I receive errors below:
```log
In module 'B' imported from a.cpp:1:
C:/Users/2283/Desktop/test/c.cppm:4:13: warning: inline function 'f<void>' is not defined [-Wundefined-inline]
4 | inline void f() noexcept
| ^
C:/Users/2283/Desktop/test/b.cppm:7:12: note: used here
7 | return f<T>();
| ^
1 warning generated.
ld.lld: error: undefined symbol: void f@B<void>()
>>> referenced by C:/Users/2283/AppData/Local/Temp/a-7d0622.o:(void g@B<void>())
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
```
Clang doesn't generate code correctly for the inline function `f<void>` therefore lld can't find the symbol `f@B<void>()` while linking objects.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVk1v2zgT_jX0ZSBDGn05Bx8cO0YDvMV72Cx6XEjkyGZDkQJJ2cm_X1CUHadNum0gJAg5nOeZr4dsnJMHTbRm5T0rd4tm9Edj11i00icv35-HRWvE65phzjCHR90Z2zdeGs3SHUs38TdXjT7AiayTRgOmy3SZHqQHhquj94Nj-YbhnuH-IP1xbJfc9Az3Sp0uf5LBmu_E_TKcqnNeY4e8KtNSlC1ftUXdtmmBaVfxtilbLLBOO2J4F-GfGnsgz_INvKyqf6oiGfWzNmednKUW5uySgx5ny6OlRkBvBKlgPxgnX-LWo3a-UYrETtqwtYukn4xRjuF-CpHhvpVz5P__K1h9iwhZBlh8wducfCFLIB30r8CNoODtZpdVafw4w_vwxdUpSdAs-TDEFdkPxnq4Z_lsIrWHvpGa4eoaP6vnTTiwfHsyUrD8YTa4nGP17h1GGzD6uEQvE0hvxKjoFiuCs3yzva7Ntp76QTWegOVb_zqQbnqCJ5Y_gNRKaoLAAg6RBGhDL5wG_yNdALDkR6uhY_n26b9Z8xvWb3Rv6F143dD6kVT3AykIfK44l7rcFusReKOBm36QisAfydFUUzhLf4QD59BoAb07cYZbaEcP5yNpeLwemexiB33SBu5ISs1xPQtpoR2lEjfTFdsEEucFy3dz12A1ZwSSZLB0gUvMfBz3fDnw_jfcxHYAhph0MbFJJxWxfDfnd_feI-KnkO1vQk5d_gni7r0zxD9h9otKPsW6WOIkTwRkrbEOWlLm_FlllDlcBOIyIQzre4Y1xPkgAZ01_Ty1-Sa7etpGCfnbkQ0SgrjKGe535J69GRjuPTk_8Z6aOt8U4XQeZOXcWC2nbrm0bjdqHmQ3gHe3U14HkdHGg6BOahLAyvvk26jnf5N4npW7t5krgNXbX87Emy1Mtrc_rHz4o_DaS3h1CA9DTNqECd3A6EjAkSy94dVXvF8rw4fcrtSySwbhQJps40ks444SS6VEAJ-KP7G45Arca9-a6WKYs1Kk9z8pamyP_CF-YKkjS5qTgPYVPs7JZhh2jW8Y7v9neKPCtUJ9SFGT1CKtEJdmOreaVfMj2AvyzUy9i0JJ_Uw2SE4f1KhrpCIRlYdepI-ClYUreXQEyQm8AUcEUp8Mjzf6NbiPRmc73fHCkNMMa39NbHTMjbXEvXqFztggkT_3bZXe9m2VBitLnbEESokgsZPfTmoxOYjFiOc-SkiVwvkYtCdEHkpt2vCEcMuFWOfiLr9rFrTOasQiX92tssVxLdKqEFjhilc1ilVXdHdUVStelXVHWZ0v5BpTLNI6z7IyqzBbYkaloCwTKc8FrjJWpNQ3Ui3Do2Vp7GEhnRtpnaVZXqwWqmlJuekphTgXCsOryq6nV047HhwrUiWdd28uvPRqen9NKQ6TWt5_nZSGlTv4Kp2Lsy2nPJrup9RKHaRIUU_aT5WEUUvvFqNV6z97fzHcTwGF3p1jOq3x3wAAAP___Q_6Nw">