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

    <tr>
        <th>Summary</th>
        <td>
            [clang] assertion failure at clang::TypeInfo clang::ASTContext::getTypeInfoImpl
        </td>
    </tr>

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

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

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

<pre>
    The following code:

```cpp
template <unsigned Size> struct S : public CBdVfsImpl {
  double A[Size];
};
template <unsigned Size> struct SS {
 S<Size> A[Size];
void foo() { SS<-123> ss; }
}
```

Resulted in this output:
```
/tmp/test.cpp:1:44: error: expected class name
    1 | template <unsigned Size> struct S : public CBdVfsImpl {
      | ^
/tmp/test.cpp:3:2: error: expected ';' after struct
    3 | }
      |  ^
      |  ;
/tmp/test.cpp:6:28: error: expected '}'
    6 | void foo() { SS<-123> ss; }
      | ^
/tmp/test.cpp:4:36: note: to match this '{'
    4 | template <unsigned Size> struct SS {
      | ^
/tmp/test.cpp:6:17: error: non-type template argument evaluates to -123, which cannot be narrowed to type 'unsigned int' [-Wc++11-narrowing]
    6 | void foo() { SS<-123> ss; }
      |                 ^
clang++: /home/fuzz/WorkSpace/fusion-fuzz/projects/clang/llvm-project/clang/lib/AST/ASTContext.cpp:2143: clang::TypeInfo clang::ASTContext::getTypeInfoImpl(const clang::Type*) const: Assertion `(Size == 0 || EltInfo.Width <= (uint64_t)(-1) / Size) && "Overflow in array type bit size evaluation"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and dumped files.
Stack dump:
0.      Program arguments: /home/fuzz/WorkSpace/fusion-fuzz/projects/clang/llvm-clang-install/bin/clang++ -S -o /dev/null -O3 -std=c++20 /tmp/test.cpp
1.      /tmp/test.cpp:6:25: current parser token ';'
2.      /tmp/test.cpp:4:26: parsing struct/union/class body 'SS'
3.      /tmp/test.cpp:6:12: parsing function body 'SS::foo'
4.      /tmp/test.cpp:6:12: in compound statement ('{}')
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  clang++ 0x0000559b5a84a0f9 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 121
1  clang++   0x0000559b5a846dcc llvm::sys::RunSignalHandlers() + 76
2 clang++   0x0000559b5a847678 llvm::sys::CleanupOnSignal(unsigned long) + 216
3  clang++   0x0000559b5a789f88
4  libc.so.6 0x00007f9adb482520
5 libc.so.6 0x00007f9adb4d69fc pthread_kill + 300
6  libc.so.6 0x00007f9adb482476 raise + 22
7  libc.so.6 0x00007f9adb4687f3 abort + 211
8 libc.so.6 0x00007f9adb46871b
9  libc.so.6 0x00007f9adb479e96
10 clang++ 0x0000559b5e004531 clang::ASTContext::getTypeInfoImpl(clang::Type const*) const + 4817
11 clang++   0x0000559b5e0015e9 clang::ASTContext::getTypeInfo(clang::Type const*) const + 105
12 clang++ 0x0000559b5e0031b2 clang::ASTContext::getTypeAlignInChars(clang::QualType) const + 34
13 clang++   0x0000559b5d24248b clang::Sema::CheckArgAlignment(clang::SourceLocation, clang::NamedDecl*, llvm::StringRef, clang::QualType, clang::QualType) + 443
14 clang++ 0x0000559b5d271be0 clang::Sema::CheckConstructorCall(clang::FunctionDecl*, clang::QualType, llvm::ArrayRef<clang::Expr const*>, clang::FunctionProtoType const*, clang::SourceLocation) + 464
15 clang++   0x0000559b5d44b080 clang::Sema::CompleteConstructorCall(clang::CXXConstructorDecl*, clang::QualType, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, llvm::SmallVectorImpl<clang::Expr*>&, bool, bool) + 448
16 clang++ 0x0000559b5d6d6dac
17 clang++   0x0000559b5d6e710e clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) + 6238
18 clang++ 0x0000559b5d46c6d8
19 clang++   0x0000559b5d46d194
20 clang++ 0x0000559b5d49e56b clang::Sema::SetCtorInitializers(clang::CXXConstructorDecl*, bool, llvm::ArrayRef<clang::CXXCtorInitializer*>) + 2779
21 clang++ 0x0000559b5d4b5806 clang::Sema::DefineImplicitDefaultConstructor(clang::SourceLocation, clang::CXXConstructorDecl*) + 630
22 clang++   0x0000559b5eb9ace5 clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 69
23 clang++   0x0000559b5d6d7288
24 clang++   0x0000559b5d6e710e clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) + 6238
25 clang++ 0x0000559b5d3be640
26 clang++   0x0000559b5d012d1c clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) + 380
27 clang++   0x0000559b5d02d5bc clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) + 2844
28 clang++   0x0000559b5d03079c clang::Parser::ParseSimpleDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, bool, clang::Parser::ForRangeInit*, clang::SourceLocation*) + 860
29 clang++ 0x0000559b5d030ca3 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) + 307
30 clang++   0x0000559b5d0e7bfa clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 24u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::LabelDecl*) + 5674
31 clang++   0x0000559b5d0e854b clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 24u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::LabelDecl*) + 363
32 clang++   0x0000559b5d0f07f7 clang::Parser::ParseCompoundStatementBody(bool) + 1639
33 clang++ 0x0000559b5d0f104f clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) + 207
34 clang++   0x0000559b5cffa11c clang::Parser::ParseLexedMethodDef(clang::Parser::LexedMethod&) + 684
35 clang++   0x0000559b5cff8c7d clang::Parser::ParseLexedMethodDefs(clang::Parser::ParsingClass&) + 125
36 clang++   0x0000559b5d04fa99 clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) + 1561
37 clang++   0x0000559b5d0524ff clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) + 8191
38 clang++   0x0000559b5d021732 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::LateParsedAttrList*, clang::ImplicitTypenameContext) + 2994
39 clang++   0x0000559b5d0fe339 clang::Parser::ParseDeclarationAfterTemplate(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo&, clang::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) + 2361
40 clang++   0x0000559b5d10a5e8
41 clang++   0x0000559b5d10aa0a clang::Parser::ParseDeclarationStartingWithTemplate(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&) + 250
42 clang++ 0x0000559b5d030df1 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) + 641
43 clang++   0x0000559b5cfe98d8 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) + 1288
44 clang++ 0x0000559b5cfea7df clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 575
45 clang++   0x0000559b5cfc770a clang::ParseAST(clang::Sema&, bool, bool) + 586
46 clang++ 0x0000559b5b540071 clang::FrontendAction::Execute() + 65
47 clang++ 0x0000559b5b4c9c65 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1589
48 clang++   0x0000559b5b61bea3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 467
49 clang++ 0x0000559b5921ec96 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 7046
50 clang++   0x0000559b59214a2a
51 clang++   0x0000559b59214bbf
52 clang++   0x0000559b5b25135d
53 clang++   0x0000559b5a78a3a0 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 160
54 clang++   0x0000559b5b2521b3
55 clang++   0x0000559b5b207987 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 167
56 clang++ 0x0000559b5b20c1e0 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const + 304
57 clang++   0x0000559b5b219e44 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) + 404
58 clang++   0x0000559b5921a2d3 clang_main(int, char**, llvm::ToolContext const&) + 7267
59 clang++   0x0000559b5916c7a1 main + 113
60 libc.so.6 0x00007f9adb469d90
61 libc.so.6 0x00007f9adb469e40 __libc_start_main + 128
62 clang++   0x0000559b59214055 _start + 37
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 24.0.0git (https://github.com/llvm/llvm-project.git aefba88f46a6e55645c848f58f6ba56944d5ae62)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/fuzz/WorkSpace/fusion-fuzz/projects/clang/llvm-clang-install/bin
Build config: +assertions
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT:
clang++: note: diagnostic msg: /tmp/test-639661.cpp
clang++: note: diagnostic msg: /tmp/test-639661.sh
clang++: note: diagnostic msg: 

********************
Aborted (core dumped)
```

To reproduce:
```
/home/fuzz/WorkSpace/fusion-fuzz/projects/clang/llvm-clang-install/bin/clang++ ./test.cpp
```

Compiler version:
```
clang version 24.0.0git (https://github.com/llvm/llvm-project.git aefba88f46a6e55645c848f58f6ba56944d5ae62)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/fuzz/WorkSpace/fusion-fuzz/projects/clang/llvm-clang-install/bin
Build config: +assertions
```

*This bug was found by [fusion-fuzz](https://github.com/fusion-fuzz/fusion-fuzz)*
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW91zozqW_2vIiyopIb4f8kAc-3bupifZ2HO7Z19SAg62Nhh5hEgn_ddvHQEx2IZOuu_dmpqarlTaBnE-fudT4oRXlViXAJeWd2V512e81hupLv9R8zLdQLn-XfByfZbI7PVytQGSy6KQ30S5JqnMwHJii5ofnzY_6W5n0VjDdldwDcRyZnVpGGRkKb6D5cxJpVWdarIklhOTXZ0UIiWzq-yPvLrZ7gpiBVcWjQnJZJ0UQGLLuzJPeteWg3esoP3wLibLjt7ScmbdzSOaz1JkJJfSYqHFInyELPGBc5s5hlplOVcEOTf8ewo3-j9AVRcaMiJKojeiIrLWu1q3-PTXsoXe7vA3VPoC0XJi23Ji10U0QCmpzIeXHaRILy14VZGSb8GAQohNrGBG_gyA8R_Ssrz5iGCO5cTstFwWCxA6FhCea1Atz5au09A1QO35tIz6FxqDnuDsI-dwnHVwjb8bYr4h9hETvkd3tIeDYpBSanR0oiXZcp1uGgMbKa72Urjvt8vyAyZACexgAEQpy3P9uoM9M67W9RZKTeCZFzXXUKGwRnM2I982It2QlJel1CQBUnKl5DfIcI2hY7HgTVZRajSq5V2df0ktdmWxK9s-bx4R5Roj5tdRP_zXqJ8WvFw3LFFNiy02cgsWW-T19-8WW3yR6mm542lzqRKyPG_v7JT8X0h1ZbFFS2RRFM_b8_Z6_7JILLaIl6vm90yWGl46rJntoseTZrETW068et3BTZnL_rX9c833NehuGcaXxcJUlpU-JGOxGCEy95BLXFWgtJAlwczAQvQSYjnXlnNNKMKESM0LjXQvvohMb9Cp8K7FwlqU2ncftcUii4XntgGfLRpXM599i_nEYuzuGVReyG-YmbhS_LWxeSI0qZBj6zJClhZjaPqciwKyC4vG97fzeDknVZ1shSacJPWaKNhJpdF1NlrvKlSPLSy2WAu9qZOLVG5b8I9tIKqqBrQR4SU6WlrUGRC9AZIqXm1IwtMnrXgK5n5Wb3eQkVwUUKEwS83TJ3O1Sar0wqLRvZJrxbdvAVD9SY5jvpyLstK8KCy2SES5X4IOSs6X5FwiqwyeLbYo66Ig53cOOa90ZjnXbegwSo6DmsY2yj6a9jzjg7VSGNE7ripQRMsnKPdJ16IxG6OBiYuZxIXPYqVuczNb1KUx86IpKljTkeRy2VB0pqSyWZ9iXpepcd0eDePoJhUgMffHxERJUrndybrMSKW5BpPCTCYxqbXJ8SwaGJ98E3oja02q120iC1MZMRmHUFa1AvIqa7Lhz0CMHZtF4jso5PYqa0Xu49UnIhWpQBvfg_JZKFka3s9cYTDe3v7x-XH5j89Xd7c3_zN_eMRHLJ-i0--kKI33CxN6jScS0vcM-kIppZ4XJR4PXU7zyMjS4FO9Vs2HeyVKbdRaKeOZ4X6R4t8eZaUV8K2J41mTlTGqr4jNbPSgIU9ywNXP0vQU14e6XIp1yYtPvMwKUFWXt9kVCXz0qkmygR-Ep8jOCuBlvbtriWN-6upJIZFaw4HZyMKZEj0IozwM0X8IKUSSXlTywm9XBHnEs8QNmcewk_LGFmR-lKdkpzcKePb4JIrCcHcoPuVP0HUDnyguKmikZRaNg9HlfhjkDuEJZsNGObRLOLHcTiwaR6MEgwgixMemY-4ElLqeY3-wFg2rUFt_erXISO-GNkatbY_bBii1PYjeyf3dnG3qIWM2obRjJ-wdbONCrMubcrbhxq97D_x3zYumBPc5Oy4ydsY1zpjL3DDps17Clrc-v4H0KVZrwxWzx5DlUtYqhVuZtqV11qfyN76F7BrSwqAx64XUUitRrh8gP3hir8HI5SbCXNdBndwxMDMW2AnQCY1mCA-WC6lmpvb1lVq0ab8n-oiMe41i7DlQIWfWWzt_2am9QzjzA1Ido3sltTxwnsHCQ5hbGHxjWm_CtK6b0HAMCLndFaBhEovZ16-9-x9B5HOteVLAODAnITl2qJ7XbHlR_AEoiIn6UYqmmCRSFvv_O8fBpGv7o47jZ37GU1wTTKDqQ2BT6It9UwoteCG-G7GX8M8ayhTaGggql2p7EDhohkbQU2Qgm5da6NfOIUYXGn7_JcpssPJXrbC3aNxB5zPHYBeOYuf6qZ-ZNdGUR_qZHaHfstECkLkReP5IQlqCnqEDvCF1mAVHPbZziB8FLRIYcugwaut7EGCzxuxx-RMvpP5p-a8hFyWg_4pU6GvIeV3onsAfyK8jmrb2crAPYBOdDiQRT8EbiImd2vxlw-sK-bXtU9uu1eUXoTfLOs9FKqBt69oNx7TMe8S7jvpRGdTNvrppznoA-wbeqYrlZwEz_RNz_xOmp8KUeaPO6STgu8Y3_AnsqM0yO-0zuzdbtN5ndDiujGZxrkF136WKyyzWWomk1nAQnftFx2gdcchW7dFPczZxGuP-UwupHni5BsS9B4oTGn2nUjplmZf8WN_flKx3Q43um80i3l3uID0WcK9y186dUGAA2MeAOV5_GIGHBfsdkLHQNUk6nMLMoUE0jdlSYI_R85QxbzgNzaEiJ4H5MXTHK7pa8F5QfgRvA1pozr5ZNBp71KEpd94bVf8iWL1Hc4eaoxU65S0QJDmf9pbueOROHSaXQT452RIOc-ZSbzvLMbfed4WTUYUPvQ_ckxH1i-De8gSKgyru-QGGoTOxYc0ohJ6b_ASw_5JInkLB8XG_50z0MhnNaZAHk0LN2lO4NzCuZPZqsbC_QbB9B5sPxxkP4dymbj7JqNvWHTI6CObpvNzYLZVY3f23rNyE2UTTk-Y5t39QuG_hBbLPoDcyu8Yt-GE16xb31vVk8EPjkRO7zjTPwzTIPiBDNS5EW15nBa-qnhQ281CKyRbGzXkUTbvE16-fYZuAwsotcpGeyLuTLfjkzZGQH76EOmoVen5ve76NWk42Lh5z82l_NNi1GsLBBkPLp-bDSj6B6VA_ouF40_PRliVOUxgI-cMa3fH-QFPVVmk7MqhOtjbMDhz23kL9JvaJZvcvg-enYLnlGvbQ3IpTh03d3hR3FiXfwhulNgdFZvvuTG3yaQ6OMx16hwW-0_9jTc9Hcew16w_xzc1d0ry0-1Gf8_FifmSwFjzHRLQ71SjZlHtgXg5MVX2bck6n26m-h2qutCjXuIP_OaR_CpJWaQ_bYnf07Bvb4iy3_w3bYt811p44ykhziMIsnNR9_qJBlbwYxeDP0OFoG7uvQs1Rizt63J7mwINsugat5O4WnrvOri_83Y7_s4Z7fdB2vu22zXHIiaZzf6T2WWZ1ATfbnVTa9Fw93_MC7BPcyW4lDYITkWSmJ0bOgk6dLXuhj5xGz5YTz6U0GHj5QqHLllls2sXm2vwF0toE55sTGQ2CUbpuGqX-4BgPO11RgLopK83fDrhayi2z4RuPoSC9NssLsR92J2pl4tsJDDe1Lae9GM_yVGd1JObe51zfvF0f3UlHzIY08kma2o9bLoZbmf4p2oYfv4AZXGPNdE-Pd0BdtKQ3kaMjZruccVw1kaNxVZLkuGpi65Iwz3a8DFdN5AkehNzhtHdkOFO82jxAKp9BvQ5eFD7U5ZLnULwOUHnX0attTjC8iQ1GwjxmJ7gf8yaCKmE0iMLBfixT4rlLCY3l-ZHXz-R2y7EFDccfxAVjZ4ETS-NB6A5ezRpf88YDl9HUHr5NfI8uv8ukGlfkd5lg9zVyHHz8psvM2-CtHReYKY_3DpO6O_PDF2ODV8QUOzpvYpuRMDuCtwpwxO-693kQ_Ceifgy7_0cM2hzTaD2R2iJmc5a1UdnlmY7rhptD-cNX2yspizYae8ZtMwtrXG2idY5sPw24TZBZ4502xppPRycuoiwyEx_2-ApwKXl8xNuPFTaCj3vqDEu7P5GeMIlRzyPNk427BMdjjG9jm-Y6yduCQtLWCs24HclqIFqSygzQmAm_Csj5s7kGQESvUkQdE_IMqhKyJMy9oBd0Lcz01Mfm8i7wKQ55wsMwd33ug-f5rpeGbph7Ye4n3PMj1808Dj5reK-4WoMZYXwJ_UffPa_Lp1J-K88LUdYv5-uyxkVm-oZsZQaFmRyTlXixaHzTzNRBdi3UXzisR-OrWhTGx3Oxbhhd8W7isjo2Uzfkmwm-LmWlRUq2VfMgjTt3_qkfMx_ejlLGq1U8-0RWn-ZkcXd7e_fl5m-_kdlDvPxEHub3D3fXf5_NH8ji5na-JKs7s-7q77_hvbuHlWWmzd4vd3_47tx3It-32_nDX6NRbT4K3y8jGCdSNaPfYSoVtMOhjTseTOKvJFGwUzKr0-7PE4bj93_9bOjFcNrzQMCuueui91jI_wT3rwb3AeQWi1cbUZkB5m-8IrmZOU1eieVd9cXwrqchHoo8-BZZLD7LLp0sciJ-Bpd2EHohC5kXnW0uWWQnLLIjlkSRjagnLgSh72Sh6_AA4ExcMsp8GlKXBsy1owtI89TPXJ-GCQ996lsuhS0XxQWCciHV-sxMU18y2wk976zgCRSV-RMexlr8mOVdn6lLg2JSryvLpYWodLUnoYUuzN_9NE941-QNRFOWagWEH82xf3Ac_qxWxeXPz4q3Cj5fsv8LAAD__2SY1rg">