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

    <tr>
        <th>Summary</th>
        <td>
            [Clang][ICE] crashes when enum class is based on a decltype depending on a static class member
        </td>
    </tr>

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

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

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

<pre>
    ```c++
#include <cstdint>
#include <cstddef>
#include <type_traits>

enum Flags : uint64_t
{
    LowMemoryNotification = (1 << 0),
 AlignedAllocation = (1 << 1),
    LazyCommit = (1 << 2),
 NoAllocation = (1 << 3),
    Entropy = (1 << 4),
    Time = (1 << 5),
    CoreDump = (1 << 6),
    WaitOnAddress = (1 << 7),
};

struct A {
    static constexpr uint64_t features = LowMemoryNotification | WaitOnAddress;
    using T = int;
};

struct B {
    static constexpr uint64_t features = 0;
};

template<Flags F, typename T>
static constexpr bool supports = (T::features & F) == F;




struct AA {
 template <class T>
    static auto helper() {
        if constexpr(supports<Flags::WaitOnAddress, T>)
            return typename T::T {};
        else {
            return char{};
        }
 }

    enum class TA : decltype(helper<A>()) {
        A, B, C, D
    };
    enum class TB : decltype(helper<B>()) {
        A, B, C, D
    };
};
```

Stacktraces:

```
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++-20 ice.cc -c
1. ice.cc:46:6: current parser token ';'
2.      ice.cc:34:1: parsing struct/union/class body 'AA'
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  libLLVM.so.20.0 0x0000794ff9c4d69f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 63
1  libLLVM.so.20.0      0x0000794ff9c4b3b9 llvm::sys::RunSignalHandlers() + 89
2  libLLVM.so.20.0 0x0000794ff9b92757
3  libc.so.6            0x0000794ff8782320
4 libclang-cpp.so.20.0 0x0000795001b42576 clang::ASTContext::getTypeInfoImpl(clang::Type const*) const + 3814
5 libclang-cpp.so.20.0 0x0000795001b4218b clang::ASTContext::getTypeInfoImpl(clang::Type const*) const + 2811
6 libclang-cpp.so.20.0 0x0000795001b65fd5 clang::ASTContext::getIntWidth(clang::QualType) const + 405
7 libclang-cpp.so.20.0 0x000079500259080f clang::Sema::ActOnEnumBody(clang::SourceLocation, clang::SourceRange, clang::Decl*, llvm::ArrayRef<clang::Decl*>, clang::Scope*, clang::ParsedAttributesView const&) + 1327
8  libclang-cpp.so.20.0 0x0000795001a6da4b clang::Parser::ParseEnumBody(clang::SourceLocation, clang::Decl*) + 3883
9  libclang-cpp.so.20.0 0x0000795001a69583 clang::Parser::ParseEnumSpecifier(clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext) + 6547
10 libclang-cpp.so.20.0 0x0000795001a6473f clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) + 9215
11 libclang-cpp.so.20.0 0x0000795001a89b9b clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::ParsingDeclRAIIObject*) + 2347
12 libclang-cpp.so.20.0 0x0000795001a8c54c clang::Parser::ParseCXXClassMemberDeclarationWithPragmas(clang::AccessSpecifier&, clang::ParsedAttributes&, clang::TypeSpecifierType, clang::Decl*) + 892
13 libclang-cpp.so.20.0 0x0000795001a86884 clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) + 3828
14 libclang-cpp.so.20.0 0x0000795001a8441e clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) + 8190
15 libclang-cpp.so.20.0 0x0000795001a634d5 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) + 4501
16 libclang-cpp.so.20.0 0x0000795001b1f2bc clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) + 204
17 libclang-cpp.so.20.0 0x0000795001b1efc5 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) + 565
18 libclang-cpp.so.20.0 0x0000795001b1e184 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) + 2164
19 libclang-cpp.so.20.0 0x0000795001b1c558 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 1576
20 libclang-cpp.so.20.0 0x0000795001a4739e clang::ParseAST(clang::Sema&, bool, bool) + 814
21 libclang-cpp.so.20.0 0x0000795003b9e56c clang::FrontendAction::Execute() + 92
22 libclang-cpp.so.20.0 0x0000795003b10ad4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 996
23 libclang-cpp.so.20.0 0x0000795003c1d85c clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 700
24 clang++-20           0x00005ead8b4ee1a2 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 5586
25 clang++-20 0x00005ead8b4eb174
26 libclang-cpp.so.20.0 0x000079500379be22
27 libLLVM.so.20.0      0x0000794ff9b924a7 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 151
28 libclang-cpp.so.20.0 0x000079500379b6b6 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const + 406
29 libclang-cpp.so.20.0 0x0000795003760be9 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 921
30 libclang-cpp.so.20.0 0x0000795003760e5f clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const + 159
31 libclang-cpp.so.20.0 0x000079500377de60 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) + 352
32 clang++-20           0x00005ead8b4eab9b clang_main(int, char**, llvm::ToolContext const&) + 6699
33 clang++-20 0x00005ead8b4f85e3 main + 131
34 libc.so.6 0x0000794ff87671ca
35 libc.so.6            0x0000794ff876728b __libc_start_main + 139
36 clang++-20           0x00005ead8b4e8d75 _start + 37
clang++-20: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Ubuntu clang version 20.0.0 (++20240827082329+cb9267f05515-1~exp1~20240827082434.375)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-20/bin
clang++-20: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++-20: note: diagnostic msg: /tmp/ice-80506b.cpp
clang++-20: note: diagnostic msg: /tmp/ice-80506b.sh
clang++-20: note: diagnostic msg: 

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

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWktz4zYS_jX0BWUXCb4PPlCylXHWE3ttJZPNRQWCLQkbEuACoMfOIb99CyQokZL1mNee1uWSZaKB7v668aEBkCjFVhzg2gknTnhzQRq9FvL6ma6lKBhfgfxj3Vzkoni7diK3-6UOnphf98ZxMwf7jNOyKQA5_pQqXTCuHf_2UGsBywOt-q2GhZaEabWVaD-BNxWalWSlkONnqGFcR8FCW5HYWoIQQvfi80eohHz7RWi2ZJRoJjhy_Bvk4MQzWhx_ilwHpw6e2m5ZaRAosrIUB-S9kbxRQ_56m4qqYnpPFo9kfxFHhvV3h73lWor6bU8w2BWcswr2pMJdqamQcNNU9Z5ktCv5iTD9wLOikKDUnng8FHfiG8efDKOjtGyoRhkaRUJpohlFVHCl4bWWm6ihJRDdSOj0HAhYPB3btFFphm4U4ys0b_u3yTY5Ydrkq0xzjwysoapLosHxp11ezhw8RSaDOakAzTcJvKcrF6JEqqlrIfUG6rnjZ46fbdXjyIyYmnYjMttRv__ZB2EYhd7IduqVRKmBXQMcSKMFWkNZg3Rw0modomV-2HLrgYOT3vze-876ccDwtNOG0_FQ5keCbiQfwWUGmLeKB1j38lAq2DdqMBJdE3mgr3nWPdh82wq0xGKhyVpuKYCWxi4HJxYSf5q1fiTtLHgHnMz4OjEfU_Nxs23dtWeobnJQ3eR7qBt974l76P6zJvRPLQmFNnzDhBqLP97fZs-3SDW5oTuC8maFJJj4I5M3WtftAHjm4NmK6XWTX1FROXhWli_9n8tain8D1Q6eMaUaUA6eIcIL1NO_XgOikqg1ynuzjHO1hFoKCkpBgZRoZPfY9CRKCcqIhgLJhiNFJav11cA3VDRVvXHNverQe5RiJUmFiFw1FXCTw5kJCV91i9oldhGjcEUpuqRdV-_KPnH8LIgcP4vaPo2UwDWqiVQgkRZ_AkcOjg3qOO56Yqt0090PHD_zTHfTzbBYN28dPGs4E9zBsy49zIJrRsuyzWBbp9Bnptei0Ui9VbkokZlDhjMS4KqRgN5Eg9bkBVALfSfE_gKJGDdtEj1m8w9ISKRAt8gDf2FScIMHeiESOZF7f__bx8Xzvz5OHu7v_rh9WpguTuSakNeC8Tb2TJsc3SCMUMly0-9KiSvsXrnIfXVd143TYLlMaVBE6bI1qZvt6s3yxqNkXLfezbu4J1shST4vhNISSOXgyMTeEL6ZFniCIt8GaF9z-zNWn_t5-p76p4Y_sxUn5QfCixKk6kkQT1BiyQsf9y1PcRzaMPmtKDVy0ZCpBvJJnGAf2-kVtOImAS9pXe8NH7qulwc4jCObpa3N2fN8KriGV939vwI9f6vhji_FXVWXDk4Gwqalo28HZ8az9nvrn594QWdGeJYZXpL_CDNw4nmdGdEZZkThsghPmHHH9SdW6PXYhH82pJy3bDvUHrhhpzw-qRyHqZu4y6HyZ6iINYPqB37Lm2oiirex4ueWuu5tIWjSeK_xifAV7LTcAC1bsKaDxM2kJG9PpoqeviNqlo7x6FQYh7Odx4-GtopMa8nyRoP6jcHnPjpRn_6e35NPgk4HhkQFCfI9JXLw_SvQ2WCQ2oxN7KxPzzIpDRP_pEnPNVC2ZG398yV2mX6Wlo6pKOa2EDMTYwDyqFdGzTI3sOTgmL3mPud7NgwDGyzPPQeZIPaXR802eohsfd-YpcYIfS0I39X9g5L3RMM2z--ZZZ6RvOEpRlnLW2Yd3QE1xZ4lB887A9QkzdPjM2D6--9Ts8J_hCoHOYB4DOwZcAwm77fD_9iVI8aep-zu7iHvqrXNtMP-JrnwOTjQMKBfh8MnptePkqwqok5A8q7PR1ExQd4M0C0Ex7gmSbH12T_H5yhJglM-d-5aG-g7gT9jpTjQeMD9hrcHPEVXOB2nVpxYf88oSkgSBB4c99cE-AC3avGnjYkpnP_BePElvv5Q3jE79G_jn90o2HTyUlvzeWdUWyTyg3GZ83-Cfoegg9C1paN3Tu3oLXF-nJiM9Q9y1nBqcL2B5R3XIDnZqWbPpOCTEpZ034_RHuaWjF1btHunK1Yv92BJz86jkeeMs32C-iGO7wb9gONh1C_GyVmOeycI-fa1C-3BZfhHOWvj6EV9INNz_KFhmBz1Zy7qe3iBsiP2oSMPNflPA49a7u8afpKiqZ-6U_k947e7m4-iaEq4q2ohzWZdw3CfEMaR3SifU3oGsZ_urxzZ83xnKTS6O4t6Su7-9nRqwcOnKzM_TyGMRhN_Jg2R8CJrs717dvsKtDGeJdv6z-o4XfX4ueeSYpRwU1HVrAR5x5UmnMJIi1U8cnnHqC3CadoDfLoU8alXJOHIWatya8-LeK_42LN3m6uxa9cuHOwel-2ecYRAiiQPADyCEaXeoiKMj051hlvYNZHbUwG7ex09w1P0IlgxsCUMkx6NcNeYsQm5F_dJcnp18OM0B9wHPD59ppSnOCDxYGs-lUStn4CKF5BvoyOJp4Y_kyWUbyMclpZrF7LFwriJ7Mlve3JuJ5dd4PBp0jMuRPnoqKiQ7KUnienUm4qqIrzYzfd3Y6O0lRO1sZKUjj_dCj5ryfjKEkcXuE2HxYK-vnpe909OFKML1YrbiI-EzYPNvV_XvDMc6e7QhBy0G5FsywnZ7plOnyGnmdWPIzeH9CBo7aQgeyzRIzmaQTsdjcChDf8R0WxEe0O_UmyTwT9NtMYvCJdf6tfPIleHnfpZ5KZOGzk1yImKlOVvQLWQ7QHgIIdqwkz49nchR3GwgT6Ahhfa81n_jCUgjguI3EOabwbfR2z5Dk0eQvF_iIbdsYWWrXx8LimTzQFFT8u9De20zPaOG-dClJbK9s4HoyjtA-AfJeJlEoKPjEJ7rthncTA4LB-dkEexR4kVCs84UY9inORosTCSC6WJ1IuBut7K6FyYkiIOUTdOh7Q9_Rh3d_wMgZSGl-wlElraFRxRG7wlYSUU7ZUNgldmQCzAmGSYvlGALl-QFkgBIDZYlq3Fv-YN140d-wWkYoIjk9pXbrdSGEuwiwM3wbGbYB-nDp7QPMVRvHTD0Asvvb_htfb-HggFfnDlx-FGyZzIFZiFCr0m0SIKLmt6WTLevF6ueGNF1hJIgSpRQNleXwnFXrumtlgoSyhuWIuDg2eNkg6elSzvr_-w6-BZzvghELnQ0F6HMrLiQmlGUaVW7Wj2RZFv-B1cbdq7zGw-z6Yf0PzDLZo93N8_fLr75Sc0u7u_fUbzh_bx5Nef0NPt48NTezXd9X3vLjJRZi4cvI_cCEhA7RIGBSJ6M-QXAYFnuqodPGMULhM3dKP8itb19xlIrb86Mt8rPuNL54vi2i9SPyUXcO3Fvot9P4y8i_V1QEnh5VGS-rHnFjT0o5y6GEMYRmkSufEFuzaZ7rk4xS6OXO8q90ieuC7xaJHjII-cwIWKsPLKZOaVkKuL9kr62vMCDwcXJcmhVO3rUBhbPLAT3lzI6zaV82alnMAtmdJqO4RmumzfoZq2PcIbJ5zcTW-d8Ka71gaFPq-BD98AYArlxOSS4IhsXgRABdTAC8ZX3fP-_ZG2S9WeHl40srz--nt36-fLNf5vAAAA__-e_Cwa">