<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/150319>150319</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang refuses to inline one-liners
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
StreetwareGames
</td>
</tr>
</table>
<pre>
Hello, I have a very simple program that when compiled even with optimization flags, is unable to inline a function that just calls another function. I am using the latest version of Clang.
```
clang version 21.1.0-rc1
Target: x86_64-pc-windows-msvc
Thread model: posix
```
Here is the code:
```cpp
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "ucrt.lib")
#pragma comment(lib, "vcruntime.lib")
#define CONST_VTABLE
#define INITGUID
#define OEMRESOURCE
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#define __STDC_WANT_IEC_60559_TYPES_EXT__
#include <Windows.h>
namespace {
static inline void foo() {
MessageBoxW(nullptr, L"Hello from the underworld", nullptr, MB_OK | MB_ICONEXCLAMATION);
}
}
[[noreturn]]
void WinMainCRTStartup() {
foo();
ExitProcess(0);
}
```
And the flags passed to the compiler (placed into a .cmd file):
(and yes I know some are redundant/useless)
```cmd
@echo off
set CPP_STANDARD=-std=gnu++2c
set COMPILE_FLAGS_COMMON=^
-fenable-matrix ^
-ffast-math ^
-ffp-model=aggressive ^
-flto ^
-fmerge-all-constants ^
-fms-extensions ^
-fno-asynchronous-unwind-tables ^
-fno-exceptions ^
-fno-pic ^
-fno-pie ^
-fno-rtti ^
-fno-semantic-interposition ^
-fno-stack-protector ^
-fno-threadsafe-statics ^
-fno-unwind-tables ^
-fstrict-aliasing ^
-nostdlib ^
-nostdlib++ ^
-fuse-ld=lld ^
-mno-stack-arg-probe ^
-w
set COMPILE_FLAGS_WINDOWS=^
-mpopcnt ^
-mf16c ^
-mfma ^
-mavx2 ^
-Xlinker -opt:icf^
-Xlinker -stack:0x100000,0x100000 ^
-Xlinker -heap:0x0,0x0 ^
-Xlinker -safeseh:no ^
-Xlinker -fixed ^
-Xlinker -subsystem:windows
set COMPILE_FLAGS=%CPP_STANDARD% %COMPILE_FLAGS_COMMON% %COMPILE_FLAGS_WINDOWS%
clang++ -g3 .cpp -o g3.exe %COMPILE_FLAGS%
clang++ -Oz .cpp -o Oz.exe %COMPILE_FLAGS% -Rpass=inline -Rpass-missed=inline -Rpass-analysis=inline
clang++ -O3 .cpp -o O3.exe %COMPILE_FLAGS% -Rpass=inline -Rpass-missed=inline -Rpass-analysis=inline
llvm-strip --strip-all Oz.exe
llvm-strip --strip-all O3.exe
rem just to see what's going on
clang++ -S -fno-verbose-asm -masm=intel -Oz .cpp -o Oz.s -mllvm --x86-asm-syntax=intel %COMPILE_FLAGS%
```
And the output (both -O3 and -Oz fail):
```
.cpp:26:2: remark: '?foo@?A0xADF4186C@@YAXXZ' not inlined into '?WinMainCRTStartup@@YAXXZ' because too costly to inline
(cost=20, threshold=0) [-Rpass-missed=inline]
26 | foo();
| ^
.cpp:26:2: remark: '?foo@?A0xADF4186C@@YAXXZ' not inlined into '?WinMainCRTStartup@@YAXXZ' because too costly to inline
(cost=20, threshold=0) [-Rpass-missed=inline]
26 | foo();
| ^
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsV19v6joS_zTuixUUHP4-8BAC3Iu2QFU42959iYwzSXyPY0e2A_R8-pUd2gKluzrSPi5CEM_8Zjwez79QY3ghASaoP0X92QNtbKn0ZGs1gD1SDX_QCszDXmVvkz9BCIVIgpe4pAfAFB9Av2HDq1oArrUqNK2wLanFxxIkZqqquYAMwwEkPnJbYlVbXvFf1HIlcS5oYZw-bnAj6V4AtgpzKbh0yvNGMo_zGv9ujMWMCmEwlcqWoD8AHbzEtMKN4bLAtgQsqAVjnXXGyascJ4LKooPC2H0H4fkbxszRP4Ck2-l2wkCzLgrjHdUFWBTF-DQapINeULPgyGWmjiaozIE5SKmBZrhSGQgHrJXhp5sdUBj_CRrcGZ1pTGWAoiszWF27JYlqTYuKOrdVIC0iI8H3zj2IkJ-gJYiIdDyJIDL-ryJFxn8L3xjQvyfAtP0N-IHpRlpewbWMF8sgd3eebNbbXfrPXTx9nF8xluvl7o8fy9kVcTNfPc-3mx_PyTV4u3teJrsr0o_1MtnMrmEvy3VE0sd5vE7j9SxdzeP1rT1put3NkvQlXu_S5TxJB2G_P053fz3Nt-n8dZemHwJcMtFkgFGUvLQx0ilRNG_50qVQTRlgNJx60thYajl7j_WD4hnOlUJkhMj4E4XC8QqMoQVM1ekFkZFshKitdh59RIT4hMS5VpWPrUZmoI9Ki8y7N8EX8NU03fwDo6F_Wiab9fw1eYxX8W65WbubiN63HHont79h7KvCVCoNttES9WfuG8be4BcuV5TL5Hm3tVTbpr41_-NE79odcX7i9kkrBsYgMgo_ue2W15kTy8yfzFcKXFNjIHM1os0kX100RmRUC8ogw1xahSnusCrDORfglbc3NKIyw29g8BL_lOqIjaoAUw1YQ9bIjLpgXTQGhLdrfFMpWJW5ZS8EViqs8rzlG7A4eXpKt7t4PYufZyiaBcZmKJoVskFkisiUsAvoZvW0fJyni8f4j22abFarzRpFM9Rv42Qc5OCrYFBRq_kJXzByaqwjl1fEOjiXnhktCg3G8ANcAoRVl8sKdAEBFSJgShpLpTVXbBPAyYJ0pfCKIVVAzZtkpVZSNSZopKuDgXW23gLhxKC2dzTUnH2hwA1FW8tvSAYqKi1nAZcWtCuwviXcgCxlP4NaKwvMKn3Dtb5KG5pD0KbdrWnfnsdYzZkNqODU95ZPllTGZoLv75Dae79U0xgIhIsKIbILevVhOdWFs35_6Y_jd3HzslzPNi_bq8CpalUzaS-V590Bu1pX9HJJDydysX4VXP4EjQNVu5bHWX6H541FURyeuqH7IJK8P95TVQKtPboF3sW4WzFQoiiW6h4_5yfI7go2e_NmLFQois9d-RuHOUeR_lWakj52pHvpeI_17nHSb7fwQ8P5moMiwh1W1zhQuIg6cIIv8q3cldDm14fQ5td3Qjh4dhUPRbNzm2jXQcVdGfxCppKKN8M_8V82_bR0862l_4NNhThUgUudGgftv6s554P-B3505qMw1lC1A59V2ADgY0ktIkODC-XyUMnbs22xz-QD6L0yEFBT4aCipvJ2WRC3Ljc4qJwdOAhOo4HDB-ZNWnr6ELh_i9-3KNXYurGuGe2VLb23Xctx--aUi89WdCHuDEJRTAbuxw2QGiqqXYphRIYoWrgO2gtRtIjDUzxb9LqjQeIIvfCv-PX1X4gMsVT2PEac-18r-bU5X4vtgdHGuIFbYaaMFW-fszcKY-w_iIwcD0Uz4nIYu0pqSuVrWehbfX96Pz7aMQFjTAZ-6Hj_3IwE522GyTnF_--QG4d8RMtDNomycTSmDzDpDvtRFEa9UfehnOTZuD8MaZZHvWgQ9Vk-pIwM-zRkeTaAfPDAJyQk_XBIIhL2er1uZz_usmjfJ4PhqMeiQebGmopy0XEJ0VG6eODGNDDp9sOoO34QdA_C-PdDQs5JR9yrop74TN43hUG9UHBjzacKy62AiX_twhpcCzQXL3dKQuAetHlotJiU1tbGpQdZILIouC2bfYepCpGFU3j-cy3yb2BuUPMGGkQWZxsPE_LvAAAA__99Bmwr">