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

    <tr>
        <th>Summary</th>
        <td>
            clang 15.0.7: Out of memory compiling large array of atomics with -std=c++20
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          sliedes
      </td>
    </tr>
</table>

<pre>
    When compiling a large array with atomics, clang 15.0.7, installed from the Arch package archive, crashes with out of memory error. Making the array significantly smaller makes the crash go away. The crash only happens with -std=c++20 or -std=gnu++20, not with c++17 or c++14.

Test case:

```c++
#include <array>
#include <atomic>

using Array = std::array<std::atomic<int>, 1000000000>;

Array *arr;

int main() { arr = new Array(); }
```

Invocation:

```
$ /usr/bin/clang -c -std=c++20 -emit-llvm -Xclang -disable-llvm-passes crash.cpp
LLVM ERROR: out of memory
Allocation failed
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /usr/bin/clang -c -std=c++20 -emit-llvm -Xclang -disable-llvm-passes crash.cpp
1.      crash.cpp:8:33: current parser token '}'
2.      crash.cpp:8:12: parsing function body 'main'
3.      crash.cpp:8:12: in compound statement ('{}')
 #0 0x00007f5ac9d7c48a (/usr/lib/libLLVM-15.so+0xd7c48a)
 #1 0x00007f5ac9d79b1f llvm::sys::RunSignalHandlers() (/usr/lib/libLLVM-15.so+0xd79b1f)
 #2 0x00007f5ac9c5c5e9 (/usr/lib/libLLVM-15.so+0xc5c5e9)
 #3 0x00007f5ac8a51f50 (/usr/lib/libc.so.6+0x38f50)
 #4 0x00007f5ac8aa08ec (/usr/lib/libc.so.6+0x878ec)
 #5 0x00007f5ac8a51ea8 raise (/usr/lib/libc.so.6+0x38ea8)
 #6 0x00007f5ac8a3b53d abort (/usr/lib/libc.so.6+0x2253d)
 #7 0x00007f5ac9c75b46 (/usr/lib/libLLVM-15.so+0xc75b46)
 #8 0x00007f5ac9c75b6b (/usr/lib/libLLVM-15.so+0xc75b6b)
 #9 0x00007f5ac8ca74a5 operator new(unsigned long) /usr/src/debug/gcc/gcc/libstdc++-v3/libsupc++/new_op.cc:55:15
#10 0x00007f5ad156f1b3 (/usr/lib/libclang-cpp.so.15+0xb6f1b3)
#11 0x00007f5ad156cecc (/usr/lib/libclang-cpp.so.15+0xb6cecc)
#12 0x00007f5ad156d52d (/usr/lib/libclang-cpp.so.15+0xb6d52d)
#13 0x00007f5ad156eb37 (/usr/lib/libclang-cpp.so.15+0xb6eb37)
#14 0x00007f5ad156ede4 (/usr/lib/libclang-cpp.so.15+0xb6ede4)
#15 0x00007f5ad30b1a74 (/usr/lib/libclang-cpp.so.15+0x26b1a74)
#16 0x00007f5ad1570085 (/usr/lib/libclang-cpp.so.15+0xb70085)
#17 0x00007f5ad157caec (/usr/lib/libclang-cpp.so.15+0xb7caec)
#18 0x00007f5ad158129c (/usr/lib/libclang-cpp.so.15+0xb8129c)
#19 0x00007f5ad157ca07 (/usr/lib/libclang-cpp.so.15+0xb7ca07)
#20 0x00007f5ad1587ac9 (/usr/lib/libclang-cpp.so.15+0xb87ac9)
#21 0x00007f5ad1589c80 clang::Expr::EvaluateForOverflow(clang::ASTContext const&) const (/usr/lib/libclang-cpp.so.15+0xb89c80)
#22 0x00007f5ad19db9fc clang::Sema::CheckForIntOverflow(clang::Expr*) (/usr/lib/libclang-cpp.so.15+0xfdb9fc)
#23 0x00007f5ad19ecb9b clang::Sema::CheckCompletedExpr(clang::Expr*, clang::SourceLocation, bool) (/usr/lib/libclang-cpp.so.15+0xfecb9b)
#24 0x00007f5ad1c48a36 clang::Sema::ActOnFinishFullExpr(clang::Expr*, clang::SourceLocation, bool, bool) (/usr/lib/libclang-cpp.so.15+0x1248a36)
#25 0x00007f5ad1ddbd4c clang::Sema::ActOnExprStmt(clang::ActionResult<clang::Expr*, true>, bool) (/usr/lib/libclang-cpp.so.15+0x13dbd4c)
#26 0x00007f5ad12f0529 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) (/usr/lib/libclang-cpp.so.15+0x8f0529)
#27 0x00007f5ad12f101a clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) (/usr/lib/libclang-cpp.so.15+0x8f101a)
#28 0x00007f5ad12f5f8d clang::Parser::ParseCompoundStatementBody(bool) (/usr/lib/libclang-cpp.so.15+0x8f5f8d)
#29 0x00007f5ad12f7c3a clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/usr/lib/libclang-cpp.so.15+0x8f7c3a)
#30 0x00007f5ad12f8af4 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) (/usr/lib/libclang-cpp.so.15+0x8f8af4)
#31 0x00007f5ad12767c3 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/usr/lib/libclang-cpp.so.15+0x8767c3)
#32 0x00007f5ad12e7292 (/usr/lib/libclang-cpp.so.15+0x8e7292)
#33 0x00007f5ad12fd01c clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/usr/lib/libclang-cpp.so.15+0x8fd01c)
#34 0x00007f5ad12fd400 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/usr/lib/libclang-cpp.so.15+0x8fd400)
#35 0x00007f5ad1249169 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/libclang-cpp.so.15+0x849169)
#36 0x00007f5ad28e7479 clang::FrontendAction::Execute() (/usr/lib/libclang-cpp.so.15+0x1ee7479)
#37 0x00007f5ad288d14f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/libclang-cpp.so.15+0x1e8d14f)
#38 0x00007f5ad295209a clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/libclang-cpp.so.15+0x1f5209a)
#39 0x00005590ddc774d0 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang+0x104d0)
#40 0x00005590ddc7d197 (/usr/bin/clang+0x16197)
#41 0x00007f5ad25d5959 (/usr/lib/libclang-cpp.so.15+0x1bd5959)
#42 0x00007f5ac9c5c6b7 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib/libLLVM-15.so+0xc5c6b7)
#43 0x00007f5ad25db48f (/usr/lib/libclang-cpp.so.15+0x1bdb48f)
#44 0x00007f5ad259ebbe clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/lib/libclang-cpp.so.15+0x1b9ebbe)
#45 0x00007f5ad259ef7d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/usr/lib/libclang-cpp.so.15+0x1b9ef7d)
#46 0x00007f5ad25f815c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/usr/lib/libclang-cpp.so.15+0x1bf815c)
#47 0x00005590ddc7f7f9 clang_main(int, char**) (/usr/bin/clang+0x187f9)
#48 0x00007f5ac8a3c790 (/usr/lib/libc.so.6+0x23790)
#49 0x00007f5ac8a3c84a __libc_start_main (/usr/lib/libc.so.6+0x2384a)
#50 0x00005590ddc73d25 _start (/usr/bin/clang+0xcd25)
clang-15: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 15.0.7
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang-15: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-15: note: diagnostic msg: /tmp/crash-de1c94.cpp
clang-15: note: diagnostic msg: /tmp/crash-de1c94.sh
clang-15: note: diagnostic msg: 

********************
```

[crash-de1c94.cpp.gz](https://github.com/llvm/llvm-project/files/10831915/crash-de1c94.cpp.gz)
[crash-de1c94.sh.gz](https://github.com/llvm/llvm-project/files/10831925/crash-de1c94.sh.gz)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWl1z4ygW_TXKC2WXhCRLesiD48QzmcpsupLszL51Ibiy2UigBZRO9tdvgeQPFDsddc9ubVfKLWM499zD5YIAojXfCIDLIL0K0usL0pmtVJe65sBAX5SSvV3-uQWBqGxaXnOxQQTVRG0AEaXIG_rGzRYRIxtOdYBXiNZEbFCUzsN5Zr9zoQ2pa2CoUrJBZgtoqegWtYQ-E4dCt_wFXFNF9BZ0Dyk7g2SFGmikekOglFRz9Dt5tgwsSG_dkucVp0SY-g3pxlpSqCHPoF0tB4k2EpFv5G2OnvZFUtRvaEvaFsRgcKYNC-JrGuCrAF_hEEm1K9uIbldqeQpp-iZD3SizdXdfknkQXgfhsv98Am0QJRqCeHlcHizC_m9oNpTimAtadwxQEK-ci0F8c_I3p_jhR_fZaavO0ikTxNfIsV8G8XJAWh0KhuYrLowFwSsUhbt_tiC-OgYeILEFGv3EhUEN4SLAeYALFGRXtmuceQHfejL9b0F8hYLseuT_MdateJGUGC7FObV2UiQowOtOqwCvS2t73YfdjL7vxhk03Mzq-qVBs38M1RjXpKzBlc5aojXoPi7mtG17G3d3f_yObh4e7h-CeOlH46BJXQ9kUUV4Dawv_nJ3s3y8QborG24QQWW3QQpaqQwyEm2NabV1Dq8DvN5ws-3KOZVNgNeWy_DfrFXyn0BNgNdc6w50gNeICIZ2AXAI7ZLQZ6MIdQOoVdAqSUFrYEjLTvXFtiXRWlJODDCkOoE0Vbw1Q6Q-GkKfEeuadi97OA_C4ouSG0UaRNSma0AYS_y_rntkLR_K4mUexMs4tqZppxQIg1qiNChk5DMIFODMBhXO-ub4VPMI2-a2mR0fVSeo6zab3Gz7PnwHgPg8AO-zoOwEQ9oQA1YU5II7C7KrgQYueiAU4DhE4asdUVmVElqwjCY56RsMIta87D9tuM2idK5lgK_C176qhxWNsIoyqpALGjei9ZvuHx468cg3gtS_EsFqUHo3Mj9l1qJ6ZrFnlqY0hc9h9VU9rPgYKydpVKXhaSw613K-cDhxXqWhB5P4MCTMgX4XJs9yoB5MOmYDJEeKcA2f4AQk98AWPlhcpjFDpLTD_ntgGKcx88AyX_MsLZPF5zR3VT2s_B3Wovw01qL0sArPSUqyhKRItqCIkcqm-wDnnXALCoZqKTZ93A2GtKIBXjMou43NfZTuP2teasOG1DF7iYeirt1Njngt4NtX2c4pDeJlmtohme6nxeh4mLEoXVRRGZ-R3eahGW1bK3-UOkdLV3_vqAWMRoAU6LkIOwlo63uAeATIUsymANr6HmA8AoQyzqYA2voeYDIGZJBMAmSQeIDHw4vFYRmRbAIgXrgGHuLCp5iFYZ5OoOjqe4DZCJCSs4nkJKCt7wHmPmAe4WIKoKvvARbvGIZTutnVPwbEo6GSZ4SeSeenGdr6HuBoqOQFzcP-JaCfjm5eWzU8vZC6IwbWUt2_gKpqafPFUdXl49NKCgOvBlEptAmwTWX98xSOloLH0R99BSuLih5zfISG9E-rLdDntVS3wpzm6NzBy7MT6ilGlTPoMfKHbwG0LMoPGK1k09ZggPXmTxJaee3d4u9ut5rGK1RKWU9j7Uh5rP0cYVco8eI06yU192LNBdfbdVfXP0v7B-hH2NHz-HspKWKsZMmZOHD8LcdH05hRlLrF4wPorjZBvDrtk1EdDO9V05nHjpjH3E99uApTOzAOpr-4JfHR8-NufXqvroHWRDlFl5UBtTRG8bIz9rUiPywgH-3L8x9AjVS-W70Ezq0Yd86rxajf3plnttEwmL_Tx-MY6NsfkzxpbVxjgsC5k8_TNxvpG4UR-QF9_18EnSSG9dUTIx-JkVY5-5Dcangr2otyJZl96Z8c-rmz5ZEpRmQyGn_cM-vh9W5M5qiN7bEzgef1MZUtTA8uy_DYhTgcuZCTKvmUC9dQccGHwBo14GKzCzypPhNAT9C0NTFwKyp5NL-ebXVHDBxG2h3XZnpoWU89KfzVAs4WGY0_pG19_EXJrj2rwGNrF2FjTw7anB40388yn8pTA9W1VA9EbOBW8OkqORE8lfz1CoYMF3gCoKvvAcajCGRhRD-U_ebVgBKk9nPb5CztddHU4LEkPS-SsRdJGH7oxZNs7-AF6n68H9O_b8m_OvhiRpl5H20PUJ3My4cVwu-SdTXcNq1UxqWa6YnC8vcc9NcnOCmixftZfvn45PviOPVMf3i1lDtbHhlvyYFzyJLMI7NWdmAJ1q-HdisgoJ2V4vyO08kVDzh0z3zmm89ZlFTH5lfuPALUrdCGCAoegYGTJ9OI78TeisAx8Ch68yQuUhwWxH_1cWQOTPe72x6xd55MHClR5Sx71HazZpoWIWM0yxIWIkqjr8NW_WGV4jboXbiv6Jao3cywHFavfhleoRfJ2QmGR7vBPakwYV5wJ-GIEouK7GOIRVR4L6-JN3vglKVFOkWn0jXwEN_tbi7K7GhTdaWI3j4AlS-g3nYTyX6XlVRQv3li7raWvyonqNUK7Q4_bj67Cduz8GjGI8fLJK8mOW4beIiJj1hAWcJx7DLFX3a5tA9Q8m6Yr2TTEMH8aB41tBXOrTY-qLr0EtrkPYCodA55Hqdjj6uMTfX4N1nq8-7-Jku7TPLcPfk6cNu09fFpXEu4Gs7iJigU3xymqJ_Qqcq8BXfi5_20yqOUnuN0ffTsZbsTae6cvv9DnSYlC-e4p0w2ymBVVg0z4i6t7phtSb8R8P00mWeVn5Hy0UECzYrvn5HgOCv8bFuMYfKEoK9fbbOv2hBlHOVPAOeJN7Ok4zQeM5yiHvJDTynDh83XXvEoDeJlf7TvjvfcGWE1TNOIDv3YH672B-7wyu3wYoCi2G0mdxrQ7AUZiTQA4kcz7LEl9AJKcyl21xL6k3miNmCzOXrNF18Xyayls5qL7nW2Ed1QZauAMNRIBrU7QZSav-6OqodrDddcvTsWfeejkMYuUBDjZCOkNpyiRm9cu0HYn_g7OicfDp-XT0_L1a_o6dcbtL6_u7v_8_Zvv6D17d3NI3q6d8VXf_8FPdx8uX942h_5fjl1eJxrG8FnD5D3FRQgdxoODBGzh_ykBHhtmtYGi51tZwwiWiSHA-GfAdHbH-iLv6pHTt1wCNKrsZfzzb-D9DrA-eS7ARWv3dWAKMzjqLCJ652EFnw_eke29favMo3fme6xd5Yv2GXMirggF3AZLbIsTvIoW1xsL1mcFjSDnJCyTGgBkC7KuFrkZVGRLC8WF_wShzgOMU6jPMTpYp6TKE3jBSOYpDQp8iAJoSG8nluCc6k2F-7GxOUiLIr8oiYl1NrdbcJYwDfkfgwwDtLrC3XpnCq7jQ6SsOba6AOK4aaGS-8yU7xE996lpMOVqOMLUbLaXYc6fa_oolP15Y_fA3GO_ScAAP__RqUV2w">