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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] Major build regression due to OOM on windows
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          h-vetinari
      </td>
    </tr>
</table>

<pre>
    I've been building the LLVM 20 stack from `main` in conda-forge (mainly for testing #110217), and I've run into a regression that makes it impossible for us to build clang in our infrastructure. Granted, our free agents from azure-pipelines are quite puny (2 cores, 7-8GB memory, 6h time limit), but this has sufficed for many years to piece together LLVM, even though we have to slice things into several pieces (e.g. libllvm, clang, mlir, compiler-rt, libcxx, openmp, lld, etc.), both to stay under the 6h timeout, but also for packaging reasons.

Following the various stages of #110217, I've built sets of packages based off the following commits:
* 87bfa58a5a4b85416d2486797d0f21fc67da5cf3 ✅ 
* d6ec7c82f383ae4268f350f4d2e267af45fae8c0 ✅ 
* 3c464d23682b0f9e6f70965e8f8f3861c9ba5417 ❌ 
* 33b910cde3b305a49c98c6de88dbc22ced9dea61 ❌ 

(The ✅ / ❌ here only refer to building clang on windows, the other plaforms were fine)

After reproducing the problem 5+ times (happens 100% of the time), the failure looks as follows:
```
[144/2145] Building CXX object lib\Basic\CMakeFiles\obj.clangBasic.dir\Targets.cpp.obj
##[warning]Free memory is lower than 5%; Currently used: 95.37%
##[warning]Free memory is lower than 5%; Currently used: 97.49%
##[warning]Free disk space on D:\ is lower than 5%; Currently used: 95.05%
##[warning]Free disk space on D:\ is lower than 5%; Currently used: 95.05%
[145/2145] Building CXX object lib\Basic\CMakeFiles\obj.clangBasic.dir\Targets\AArch64.cpp.obj
FAILED: lib/Basic/CMakeFiles/obj.clangBasic.dir/Targets/AArch64.cpp.obj 
C:\PROGRA~1\MICROS~2\2022\ENTERP~1\VC\Tools\MSVC\1429~1.301\bin\HostX64\x64\cl.exe  /nologo /TP -DCLANG_BUILD_STATIC -DUNICODE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_HAS_EXCEPTIONS=0 -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I%SRC_DIR%\clang\build\lib\Basic -I%SRC_DIR%\clang\lib\Basic -I%SRC_DIR%\clang\include -I%SRC_DIR%\clang\build\include -I%PREFIX%\Library\include -MD  /DWIN32 /D_WINDOWS   /Zc:inline /Zc:preprocessor /Zc:__cplusplus /Oi /bigobj /permissive- /W4 -wd4141 -wd4146 -wd4244 -wd4267 -wd4291 -wd4351 -wd4456 -wd4457 -wd4458 -wd4459 -wd4503 -wd4624 -wd4722 -wd4100 -wd4127 -wd4512 -wd4505 -wd4610 -wd4510 -wd4702 -wd4245 -wd4706 -wd4310 -wd4701 -wd4703 -wd4389 -wd4611 -wd4805 -wd4204 -wd4577 -wd4091 -wd4592 -wd4319 -wd4709 -wd5105 -wd4324 -wd4251 -wd4275 -w14062 -we4238 /Gw /O2 /Ob2 /DNDEBUG -std:c++17 -MD  /EHs-c- /GR /showIncludes /Folib\Basic\CMakeFiles\obj.clangBasic.dir\Targets\AArch64.cpp.obj /Fdlib\Basic\CMakeFiles\obj.clangBasic.dir\ /FS -c %SRC_DIR%\clang\lib\Basic\Targets\AArch64.cpp
%SRC_DIR%\clang\build\include\clang/Basic/arm_sve_builtins.inc(7787): fatal error C1060: compiler is out of heap space
ninja: build stopped: subcommand failed.
```

This is despite already using a ~16GB swapfile, and having reduced parallelism to `-j1`. It might be that somehing in `include/clang/Basic/arm_sve_builtins.inc` goes haywire? I wasn't able to check as that file is generated and not checked-in.

The problem is that we cannot even easily switch to compile with clang, because that creates a cycle from the POV of our build tool (clang building clang). Of course, that tool could be improved, and there are possible work-arounds, but it's still a pretty major regression IMO if even a single-threaded build cannot build `clang` with 8GB memory (+16GB swap) anymore.

FWIW, our [build](https://github.com/conda-forge/clangdev-feedstock/pull/332) looks roughly as follows (against an existing `libllvm` & `libcxx` compiled from the same version or commit):
<details>

```batch
mkdir build
cd build

set "CXX=cl.exe"
set "CC=cl.exe"
cmake -G "Ninja" ^
    -DCMAKE_BUILD_TYPE="Release" ^
    -DCMAKE_PREFIX_PATH=%LIBRARY_PREFIX% ^
    -DCMAKE_INSTALL_PREFIX:PATH=%LIBRARY_PREFIX% ^
    -DCLANG_FORCE_MATCHING_LIBCLANG_SOVERSION=OFF ^
    -DCLANG_INCLUDE_TESTS=OFF ^
    -DCLANG_INCLUDE_DOCS=OFF ^
    -DLLVM_INCLUDE_TESTS=OFF ^
    -DLLVM_INCLUDE_DOCS=OFF ^
    -DLLVM_ENABLE_LIBXML2=FORCE_ON ^
    -DLLVM_ENABLE_ZLIB=FORCE_ON ^
    -DLLVM_ENABLE_ZSTD=FORCE_ON ^
    -DPython3_EXECUTABLE=%BUILD_PREFIX%\python ^
    ../clang
if %ERRORLEVEL% neq 0 exit 1

:: also tried with -j1; still OOMs
ninja -j%CPU_COUNT%
if %ERRORLEVEL% neq 0 exit 1
```

</details>
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8WFtz4j6y_zTKiwrKli-YhzwYAxnqcEkBmcnuCyXbbdDEtrySHIbzMJ_9VMsmYWZnZvOv-p-tSpAtdbf6plb_zLUWxxrgngQTEkzveGtOUt2fBq9gRM2VuEtlfrlfEDZ6BZoC1DRtRZmL-kjNCehy-XlFmUO14dkLLZSsKAmdiouahA4VNc1knfNBIdURKGERrpQXWkhFDWiDYgjzXNdh7oiwMWEJ5XVO-_1UW1NRG0k5VXBUoLWQNTUnbmjFX0BTYaioGqm1SEuwUltNjex0pFnJ6yMqIVtFRV0oro1qM9MqGNIHxWsDOe6Iy4UCoPwItdGdGfx_WwWDRjRQiho05Qrov1phgDZtfUFbGM2kAo0SRoPoYUIrqKS64Ht4okZUQEtRCdPblbaGmpPQ9MQ11W1RiAxyq3PF6wu9AFdW90ZABtTII5gTKOthZIdXQNNlezzRM9ATf0UiqkuB1CdRH3XnKw2voHjZydGoKAyPQ1qKtCxfKxRl_YIPVSmUnZBVI0pQA2XwtRRp9u2b9UwDddXYudK6Ckw2vNojzclqYPiFtnUOymZEb7pszdVoXmpp7Wx49sKPGHMFXMtaD4kTEyeey7KU52tKvXIlZKtR7hE0lcVthiTX1MAIG6rBWIpOMmiacg05lUVhRRVvgjNZVcJo4uF-hMU0GqUFDyIecD-NAt8Nc-ZH4Wg8yp2CuUUWjnIeZIVHyYyRcUKigPaceQjZKItY4UUeB5-FUeEFTuHnDFg44oUfFByizPl3Ti_zQz9nXhix1CnGEBYjZxwGEBVR4UWhm41THvjuqOOckih54_TSsetkOXip5wTcH2fjKAtziKI8zRjLIB_nwEP3J05kjvYnuFWFzW-ITqCASjyRCgoMoHw_3t3pkTU9izqXZ5vn6FRp07IpeSFVpekZRRSiBkwLu2dcGFBUQaNk3mbXsDZKpiVUNCBsYjPEpuaJNw3UmrqOQ1iAoURaXO6zzIaRi7JVQEspXzTluo_rNZqh0_85MQkmru8TNmeuH5BgSidXa5LnZyrTr5AZTG8SJBOuRUaCJFnxF5iLEjQJEpl-HVq77eowF4oEyZ6rIxg9zJpmKNOv1qse_gWTM1e1qI8kmM6xfnQFgApNS3m254HXaHBAvAlNWqWgNuWFthpy4sV0HAy9Ea7-fRJHQ3_8Z4m50C9UNzzDwNMp-jBI_orKTvDf2gCDGfz_BJMESRyr7BT6N2Gdx4vlDBW2Utm8k8rmN1LZ_BdS2fwqlc1_korHMOlc8LjdPGzj7y4JktUi2W523xkJEuYwHGbr_Wz7aBc_J6imlCUqudrZV9dn4-_u0HOQIBU1CZJPUpvn0CdB8s3-ZuUQvgHFA17LUh4lPu0f6WCaLOP1w2HytFhOD7t9vF8kdDB9Wi-SzXRGB9NDst0f1pv1bj9NDuvNYTp73M6SeP-rtS_xdr1YP-yuS7tZ8rSd_ZLrfemW6VO8O8yek9njfrFZ74g3dXB2lyx_J-rHpVtRNxYcrH4J6hmv94dVjO59X5hvtqv436eXi9XifXZBWLDbJofpYovphw7FWzJIbEEkQXKTaX-g_hiVqLOyzeEDu_5A-bidzRfPHeFSpIqryy3JamrDP_2yWHvMPh2-LNbTzZcdtQv_zIgXixr7mbfXxtbpDLSW6m3ycMiastX4j3Mbgb-pONqEZvMGVCW0Fq8wwNcvPh2cc9_13X4M7cj8bp6Fo24cd-te0I1-EPbjqB-jfhzbMXA8O4askzNirJPvON3IOr7AZT190NG7Tj_fjSOH9foE_Xu3r_e27vZjt58XjXs53XzUy2VOp0cw6vZ1enuCMevljXs5dgzcns_r9We93WyE867vhMgHPvMi9OLD2braxm2TduFbT2eTpwc60AZrY0bYhLCJO3qL9OyTHmQ2Bg9b_NUneV502WADN5d_W3m04vK_Ks5y7eggox84L7_b3t41HzolbyvvtZur6qBf4WD7RVHroagzwqLRKLJ4w4tpwQ0vKSglFU1cJ3Rw8toR470lW4ONyQl4091rxIlrUX_lSNghDW1k03QXmG5TbDYRxWDfAvnw5x7FifcIA4SmOegGEQUvFfAcL0G83Tj97oYPE6rPvClECVdQdOKvXe-ct4gcGq54WUIpdIV9GwmdwVeXhM6QLgytxPFkaAodWNKyAkQIiIVI6Fy9xeYf8lbo0KMExC2Xs1BAvDld0DPXNWEjQzkiLyNpdoLsBZszuyPqjRYeoQbFDeTWglqajg7ygaiHV2e8N4eiZz8DzXiN5Bb2ANeivFB9FiazmKMPDz0Lc3qHMylkvNW9zZkCbhC30eySIThEUIfd5OPmM4YTQV8XPCNlib1o1_D-2P8SNh7STUEz2SoNXUPKTceSybbM0ceiapR87bAkmmlsW42A8Q2anqV6GXAl2zrXV1yEyHCEOEeUJeW0UWDMhVb8q1S3cHex2lBRdI7gFDOkhIE5YcZAfkW6nbO6FxI6ne6h0znoHZuimVhCrulF2Jjy-lJJBVcs9mXx5YqJSTDpD9gUW3VjGttyszlh86MwpzYdZrLCNHoH-dekyuF1UADk2sjsBe-MtiwJm3sewz27Tl4hmC0vNx096sePXNTaUF5T-Cb6bwShc8WvoUMJC_sZhKmhc02H_D3ImldAX0FZD0rV47_uxKOhXpKD4aLUxJv1SOl6RFNushNx4uolF32KECfO8rdH4sQaDCWMJc_PxJt2nRdh7GYh-Wk-q_gL0MEDLq5t7WCMkgD3ppRik7aK_2fWN2n7fzzOiDcljG2hBI559yvirhs4PMb7T5Y6WC4m23j7j8Nbm_ALpgX2SMvllcaLP8xuu8j5ZpvMDqt4n3xarB8Oy8Wkm99tPs-2u8VmTbzpZj7_BedinSyfprPDfrbb7_4j1XST_Ipoufy8-o-SfiD6k6DZOp4sZ2jE82rJiDftrNusf0v6z-Vi8iG63X76O7rHiznJ2jvMnmfJ0x7JO_d3sb9t8RpLecM8HL7VbCcWBV6qs-12s13OPs-WGLAa_kUdPDaGun1ae_jXfYMxSkDelQS8KrxJX3s2m5W-3ml08JWwIHl8OiSbp_W-Q2If2erHG454CWHz9zN2l997-dgb8zu4d0ee7_jYAN2d7sOxz8M08l0fxmE2Sr0oTR1wAu6lUR744Z24Zw7zXeYyxlzHCYZ-iC1dFPIoLIrUiYjvQMVFOcTyMJTqeCe0buHedcejyL0reQqlvn7fVPdINUjboya-Uwpt9DufEaa0X0KTrr2Y0pUtxl1ZvSnJeWuvvM1mdfN95K5V5f0fimT39c0Og0ZJRK-Eza2uCBx7dV_v2f8FAAD__-xFkMs">