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

    <tr>
        <th>Summary</th>
        <td>
            Clang runs OOM when checking for constant initialization of array of unions.
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          john-carter
      </td>
    </tr>
</table>

<pre>
    Closely related to https://github.com/llvm/llvm-project/issues/51054 which has been fixed.

This case is very similar, but with union instead of struct.

echo '

   union elements {
      char charValue;
 void * pointer;
   };
elements foo[1<<30];
' | /usr/bin/time -v clang -c -x c++ -std=c++23 -

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: clang -c -x c++ -std=c++23 -
1.      <stdin>:7:20: current parser token ';'
 #0 0x0000753c707a63bf llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) build-llvm/tools/clang/stage2-bins/llvm/lib/Support/Unix/Signals.inc:723:13
 #1 0x0000753c707a44f9 llvm::sys::RunSignalHandlers() build-llvm/tools/clang/stage2-bins/llvm/lib/Support/Signals.cpp:106:18
 #2 0x0000753c706f0227 HandleCrash build-llvm/tools/clang/stage2-bins/llvm/lib/Support/CrashRecoveryContext.cpp:73:5
 #3 0x0000753c706f0227 CrashRecoverySignalHandler build-llvm/tools/clang/stage2-bins/llvm/lib/Support/CrashRecoveryContext.cpp:390:51
 #4 0x0000753c6f245320 (/lib/x86_64-linux-gnu/libc.so.6+0x45320)
 #5 0x0000753c6f29eb1c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #6 0x0000753c6f29eb1c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #7 0x0000753c6f29eb1c pthread_kill ./nptl/pthread_kill.c:89:10
 #8 0x0000753c6f24526e raise ./signal/../sysdeps/posix/raise.c:27:6
 #9 0x0000753c6f2288ff abort ./stdlib/abort.c:81:7
#10 0x0000753c706fe22d lock /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_mutex.h:117:2
#11 0x0000753c706fe22d lock_guard /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_mutex.h:249:19
#12 0x0000753c706fe22d llvm::report_bad_alloc_error(char const*, bool) build-llvm/tools/clang/stage2-bins/llvm/lib/Support/ErrorHandling.cpp:153:33
#13 0x0000753c706fe289 (/usr/lib/llvm-18/bin/../lib/libLLVM.so.18.1+0xcfe289)
#14 0x0000753c6f6bb5f3 operator new(unsigned long) /build/gcc-14-OQFzmN/gcc-14-14-20240412/build/x86_64-linux-gnu/libstdc++-v3/libsupc++/../../../../src/libstdc++-v3/libsupc++/new_op.cc:55:15
#15 0x0000753c77e6b024 clang::APValue::Arr::Arr(unsigned int, unsigned int) build-llvm/tools/clang/stage2-bins/clang/lib/AST/APValue.cpp:295:8
#16 0x0000753c77e6bff6 clang::APValue::MakeArray(unsigned int, unsigned int) build-llvm/tools/clang/stage2-bins/clang/lib/AST/APValue.cpp:1084:8
#17 0x0000753c780d6732 VisitCXXConstructExpr build-llvm/tools/clang/stage2-bins/clang/lib/AST/ExprConstant.cpp:11195:30
#18 0x0000753c780a106b EvaluateArray build-llvm/tools/clang/stage2-bins/clang/lib/AST/ExprConstant.cpp:0:49
#19 0x0000753c780a106b EvaluateInPlace build-llvm/tools/clang/stage2-bins/clang/lib/AST/ExprConstant.cpp:15419:14
#20 0x0000753c780a1a92 clang::Expr::EvaluateAsInitializer(clang::APValue&, clang::ASTContext const&, clang::VarDecl const*, llvm::SmallVectorImpl<std::pair<clang::SourceLocation, clang::PartialDiagnostic>>&, bool) const build-llvm/tools/clang/stage2-bins/clang/lib/AST/ExprConstant.cpp:0:12
#21 0x0000753c78014c15 clang::VarDecl::evaluateValueImpl(llvm::SmallVectorImpl<std::pair<clang::SourceLocation, clang::PartialDiagnostic>>&, bool) const build-llvm/tools/clang/stage2-bins/clang/lib/AST/Decl.cpp:2578:32
#22 0x0000753c78014d78 clang::VarDecl::checkForConstantInitialization(llvm::SmallVectorImpl<std::pair<clang::SourceLocation, clang::PartialDiagnostic>>&) const build-llvm/tools/clang/stage2-bins/clang/lib/AST/Decl.cpp:2642:35
#23 0x0000753c7879600e clang::Sema::CheckCompleteVariableDeclaration(clang::VarDecl*) build-llvm/tools/clang/stage2-bins/clang/lib/Sema/SemaDecl.cpp:0:27
#24 0x0000753c7877b6b4 clang::Sema::ActOnUninitializedDecl(clang::Decl*) build-llvm/tools/clang/stage2-bins/clang/lib/Sema/SemaDecl.cpp:0:5
#25 0x0000753c77dae7ff clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDecl.cpp:0:13
#26 0x0000753c77dac512 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDecl.cpp:2337:21
#27 0x0000753c77e6307f clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:0:10
#28 0x0000753c77e62a39 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:1266:12
#29 0x0000753c77e61c65 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:0:14
#30 0x0000753c77e5ff7b clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:760:10
#31 0x0000753c77d9747e clang::ParseAST(clang::Sema&, bool, bool) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseAST.cpp:162:5
#32 0x0000753c79c0662c clang::FrontendAction::Execute() build-llvm/tools/clang/stage2-bins/clang/lib/Frontend/FrontendAction.cpp:1073:10
#33 0x0000753c79b830b4 getPtr build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Error.h:279:12
#34 0x0000753c79b830b4 operator bool build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Error.h:239:16
#35 0x0000753c79b830b4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) build-llvm/tools/clang/stage2-bins/clang/lib/Frontend/CompilerInstance.cpp:1057:23
#36 0x0000753c79c8263d clang::ExecuteCompilerInvocation(clang::CompilerInstance*) build-llvm/tools/clang/stage2-bins/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:272:25
#37 0x0000560e5339942e cc1_main(llvm::ArrayRef<char const*>, char const*, void*) build-llvm/tools/clang/stage2-bins/clang/tools/driver/cc1_main.cpp:294:15
#38 0x0000560e53396894 ExecuteCC1Tool build-llvm/tools/clang/stage2-bins/clang/tools/driver/driver.cpp:365:12
#39 0x0000753c79833972 operator() build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Job.cpp:440:30
#40 0x0000753c79833972 callback_fn<(lambda at clang/lib/Driver/Job.cpp:440:22)> build-llvm/tools/clang/stage2-bins/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#41 0x0000753c706eff77 operator() build-llvm/tools/clang/stage2-bins/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#42 0x0000753c706eff77 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) build-llvm/tools/clang/stage2-bins/llvm/lib/Support/CrashRecoveryContext.cpp:426:3
#43 0x0000753c79833237 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Job.cpp:440:7
#44 0x0000753c797fb518 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Compilation.cpp:199:15
#45 0x0000753c797fb77f clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Compilation.cpp:253:13
#46 0x0000753c79817c20 empty build-llvm/tools/clang/stage2-bins/llvm/include/llvm/ADT/SmallVector.h:94:46
#47 0x0000753c79817c20 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) build-llvm/tools/clang/stage2-bins/clang/lib/Driver/Driver.cpp:1921:23
#48 0x0000560e533961ec clang_main(int, char**, llvm::ToolContext const&) build-llvm/tools/clang/stage2-bins/clang/tools/driver/driver.cpp:540:21
#49 0x0000560e533a3383 main build-llvm/tools/clang/stage2-bins/build-llvm/tools/clang/stage2-bins/tools/clang/tools/driver/clang-driver.cpp:17:10
#50 0x0000753c6f22a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#51 0x0000753c6f22a28b call_init ./csu/../csu/libc-start.c:128:20
#52 0x0000753c6f22a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#53 0x0000560e53393255 _start (/usr/lib/llvm-18/bin/clang+0xe255)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Ubuntu clang version 18.1.3 (1ubuntu1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang: note: diagnostic msg: Error generating preprocessed source(s) - ignoring input from stdin.
clang: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
Command exited with non-zero status 1
        Command being timed: "clang -c -x c++ -std=c++23 -"
        User time (seconds): 1.28
        System time (seconds): 0.15
        Percent of CPU this job got: 99%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.44
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 622000
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 120228
        Voluntary context switches: 4
        Involuntary context switches: 20
        Swaps: 0
        File system inputs: 0
        File system outputs: 24
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 1
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUW11z46yS_jXKDWWXBPq8yIXHiXfnrZmd7CQzde5cCCGbNxLoAEqc99dvAZL1ESeTTJLZOjeOLaB5eLrpblAHK8V2nNJzL_rkRRdnuNV7Ic__Fnu-IFhqKs9yUTycryuhaPUAJK2wpgXQAuy1bpSHVh7ceHCzY3rf5ksiag9uququ_7NopPibEu3BDVOqpcqDmyjwoxDc7xnZgz1WIKeUg5IdaLH0_AvPX7nPmz1TgGBFAVPgjsoHoFjNKiw9uAZ5q8E903vQciY4YFxpigsgSqC0bImeSKJkL4AHk_EzALqhtKI15VoBL_l0bAIAkD2W9uMnrlrqob7xTrACeHAFGsG4pnJoAcBLLo4_j3JLIbzoU-ChtYfWyPeioY8HE-Ala-DBTaukBzc54x7caFZTsLgDpMJ8BxYELA6AePCTBz-BhdKFhy66nxCBxXhVX778_Aouv3__9t1DKyBabRipaS3kg-uwqipBsDYLLzGraOEeX325XF1fAtXmNdMAg7zdAUkbIfXbVA0wLwDjpGoLCvSeAiKx2oMck1stMaFGlY2kjRSEKkULoEQr3WMzEislCLMWJ1sOFJGs6VV7rTG5BUVbNwaZfeQvPT-7kmIncQ2w3LVWAYaJ1zAZGCkeWitdMO6hSw-tEg-toG8FtVJSrkGDpaISaHFLuTUt9OloYMCDyAf-wfd9P4kQSfwExygvgSULrTy0Ug_KfbmSjGu7lBvHRzp0kvh-K5SWFNcejA0njGsPZiBvWVUsOuq1EJWh2i7Rgxul8Y7CRc64GumH5R7cXLeNUakHNz84O5gHbMdxpZaME7NKiDy0CtCwimC2ijAss1Or-N5yJ-q_MS8qKpUH0_cB2iMkjVFz4MfmMx0QwgnCuPQhTIBDsXam9mYIVs53SoTxQWvBNT3oDk9iCIsGNOgUmsn4CU0fCw5lxmKjYIAXjuDFJQwjBH1gVdXJPaTxNg4XFePtYbHjrWsgSyWWsQc_-Qc7xIPZIDOaysxoHhCw3TZ6LykutresqrasbpwzdI5n6cENb3Tlwc2429LYYBgaWuNBfvwS-cYPc1w9KzlJrQENkpNTksfDnhWXZjNx6ZxcGFMgMVPUylFW8R7cLO2vB1XQxui1EcpuRdvTSjbOZDViIJsKhmlalgDnxjdbUbpwyrOPHLbA-qwuxKDAn5klhbAAlSC3Q-BxInaEnLaCAPXIZx-dbzdm6_xo3zlnWjl027rV9LDcG74C60kHZMFTyLa7FsviT-ODodVqNgCc-xcHcHDRNkZuc1xssYmsWyqlkB5MXfYguNIeXNmERYjqfVzipZnCehDGd71jjIwnQmgAPndFFKZZt9fHjNrAHaTH1MOS1jWx3KQTZvMH6TKw-59YOUcHYCaaOpU4z6MSAdFQibWQgNN7D6Ytt2mmUa1ZpwGysUQ4nS6CcPHtfzf_1P8z_A7CBfRh6IcBHHU-7aCULjrtLu5Q96htBoWfMgwlycsGc3q_Fc2SmI0VRZbrYfFj75ckNM59GLpkw9nH6qrLHu0PKYcvI1JsVF-D6e9XWUr_1CludX1jPt3UnYHAzEBPB-TxHHlZxk8i_4pv6UpK_PCnYQd-Gk5xj712kvpFnCAIfjLF9Ppf_1qbDWfS_8tD86roegqJkWEFYt6H1CAILI_IHwClU0A48OMcXN7hqsXakfYBQExkD0ebMHsOxGd-VWFCP4KPKAysxwyPUKA_h4IzODYsI6b71pOkPnOmGa7YP9T6zsdW6NLfccP1TZft9F523uMnlheUVBMnPDju6xpX1U9KtJCf66Zy6b5rajCTHlqPRF3bQ8mX7uA0m-cKS4P9guEdF0ozYo8Mlx2g3u1bFB9kCMEQUGEwZT8ISRCdYMX9oJ0CLMeWhvHx4z-SIrO43uVFNuVDI3bgnJ0iSZ9kh-wpud2II-NHI-2W-Mep-gCK4hAaioaIBid5Q5pkse_TMcBrWmP3bW34WQuT2xsTkgznFTXCsewZOkGt2YhvCBJ2evdntA7fpc3HRYTTRSR5nIenF7Ei-hv_wdnRARUO5Rj6x-IecT_NJgpMk7KcGYeicvR9xPaq1FT2v4Vc8WKltWR5q6l6vBzX6bHTfDRDcUPrprJBpBRPudrxqI2Q3zHfUbNb3kqaldv_ndEWDLkujGe8kSiAv-Ttv6Romykzpo3xnWm9bih5vNCBui74nCJiQvxcwnzzr_6fqYQI2SNZMLCZzDJD5Ce_tsJvctNyYtZ0QcvP3Xn8MbvPk_OyHs9qaEUIVcq0sZKZbOK9OJNj2xvSP5jO2IIYZS_dsxPSrAuae80P4Wxucx_OWQDjeJanZDPaAhJHz9J2eXA29WSA-SiqPsSAhnx5elOc0Kgsk_xZJm5E84Xe0epxoPrW4H-39ErPEo6jt_tOyyHtOhkOv4qirUwqKKS-1ljTLvF4XwqSeLaLphfNSZElYUIfkWDTl3SOe5xE_tY1yzOAV9c3vQnHcBKrpxfPGfHjGJIx4o00EYIXK7u_-6MPJa3h9LWX41OIvejRVzfL8dBs76XH_E6yuixPkZ-HYEf1lf6dS-jhUq17MLuccndpSTbd85Pr5yOI402R0dyHYUEWSzxgiU5hGanP5LWsovKzzf0JnSiw0-nEFmf6fuO2Gal4juSo5MgG7iENmlyVJxlJYYyK6cnboh8E3h3TkPS5pb_RC_ZrubFbc_Mkij4jSaA9vA3r6hOSKPZphFCWhZACQoJtjdn0HGavW6yXW08vYI3XW4NHl7J3ghW_v7y-VyHZnQmbmx7T8c4tnF4XHt8R9CuJ0ywEPSHr4OaVW-BJIO5L_x4ojmYbcRJ8sxShLIHHjfhW73TRg_hL5B2CMPSnl2ahfwoBwVWVY3K7LbmH1kaxuM4LDLAGL5wCQg9mHrp8Dz-yujCH5eubL32OhqvLg5ZYWY8SzjgNZ28yaFkmyRs4_T1Us9ugEJ4CNWyXUy8Phxe6uKTVw2R7ld2cW2m3WFcJkTrO3-flxjPvM0NoksjB34VobkQQJWN_120Ht9R1sBZ1jXkxD8Unvcfx-kY0jmQPrUfXPVoyvuuyKedajgO2W3I4BIH7kWPFyFbZ7p1PmnQ2D7ZaYqZV3zwTh129hpCjdtNl9E5p9Q43Q0_uqOFSJZyG76TMoyB9km7r3fGj1KfXwSTgzAaaDk_dNDzTdfW-14lHRkZL6UNvlk39ehjNqUmmR-aXUPOXyNXTvPwl8i9MTS-7X3P_2L2seSmVH3A_-wyhMELTG51wmsqkQUKgD2jd6Fe9TPmFEx1Is87TRutwyBHD5BSIJxi8GH2fZDgnEqynrOEPavU94vvFOMkIMhhM09HwUbIT0O6E1CduPXzrFleP3tGYdOjxS573SdUmGVLkkofhDizMptgxQikCBvVrJn9F13nr49TSNCwmqG0txeiQF_mzQhEcEAy224rlJgZhqbcmw7Lk28oRotrH9ShdvcupQXaXJOEkCEfBfFKY5jaT2zLO9Hwe99UIX1jhtlwlgKmrrzsKhaeETlZyahEnhaMwmRzcIzQzSwSjCDipL6iP6BT0yT9QGEXHQoh-BwJX_3GsOCy7sw8g3V50RZeudJUemDHsgoIAhWbuVtmyTy2AohSw0fmsm-ZH3nLddrLvqFRMcBCky2CJzPigte3Bsf8NljtqUjrQFU40ZFQ70VXZSooLUIuCVqajq0eyTfYAWFW0uGB2SZMq1emyudDmiAyK43srUCvbYg_hYEe5yYQZ350u90yV2dgLwHZcmGQJMN602tBXA1uHufygCbkYteO8om5m1c3Xu1Cjql5tXPDFP1QKoDTWrQK92_CzvndOzbya1bRwvEGnsV_Wn0J4lPXDlpeymhrFKkoEL5RNtFcgWML02O_6QWlaP9HTXx6zFD-7opJQbiuC11c_gN4zBf4WOdgJayFZ5sGh82WFG8OXB9N7XFWAVILcGsr6iYwvqI2jVgoICdy3flpzFAmWYXgUt7qjEu8oUHssaQGsS1fsHyvpNn-wl7Hd0PmQlneDCqzxSwcpWxz8ws5aaFz9qvNXfGB1WwNJFSsMjYo-sYQYQt9_PMuvB44n-1tI0y7pv1tmN8RnD26-GQU0RliJ28pVNo8GMd4PIhVmtRmFQSlxTU-MC6APR2b0U1Qt11g-mEjr1HPPNNlT23lQ5Gd-92xPOOC5vsfNDOKGVRQoZ7Funz3dLlrdd4DD_NeC3FINarNbd1QBRbmeypj3kJRQdud24qiXqysGBa1MSJ03X1kj6pQ01lHoZ_GwSYwDd17AUnpWnKMiQxk-o-dBAqMoi8MoPtufh0UaFGEa5RFJizBL_DQscj8oaZEEIUyLM3Zui90yP_ZD6EfxEqMSYeSXBS4DiJLSC31aY1YtTUBaCrk7szX254GfREF8VuGcVsr-F0fnbIwviS7O5LmNYHm7U17oV0xpNYjQTFf0fG19k2y5At--fQX3e8qBrX0wBlSK7sYMcw3YpALCOBJs65tE6f6XQi3PWlmd__6_C3SruTuH_xcAAP__SRWLDQ">