Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

clang crash when mangle lambda expression in lambda expression #78542

Open
HerrCai0907 opened this issue Jan 18, 2024 · 2 comments
Open

clang crash when mangle lambda expression in lambda expression #78542

HerrCai0907 opened this issue Jan 18, 2024 · 2 comments
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" confirmed Verified by a second party crash-on-valid lambda C++11 lambda expressions

Comments

@HerrCai0907
Copy link
Contributor

https://godbolt.org/z/6M53v9njb

auto ICE = [](auto a) { return [=]<decltype(a) b>() { return 1; }; };
./build/bin/clang a.cpp -std=c++20
Assertion failed: (parmDepth < FunctionTypeDepth.getDepth()), function mangleFunctionParam, file ItaniumMangle.cpp, line 5693.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.

1.      ID/a.cpp:1:53: current parser token '{'
2.      ID/a.cpp:1:12: lambda expression parsing
3.      ID/a.cpp:1:23: in compound statement ('{}')
4.      ID/a.cpp:1:32: lambda expression parsing
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-18                 0x00000001034397f0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 88
1  clang-18                 0x0000000103439dd4 PrintStackTraceSignalHandler(void*) + 28
2  clang-18                 0x0000000103437abc llvm::sys::RunSignalHandlers() + 152
3  clang-18                 0x000000010343aec0 SignalHandler(int) + 276
4  libsystem_platform.dylib 0x000000018b991a24 _sigtramp + 56
5  libsystem_pthread.dylib  0x000000018b961cc0 pthread_kill + 288
6  libsystem_c.dylib        0x000000018b86da40 abort + 180
7  libsystem_c.dylib        0x000000018b86cd30 err + 0
8  clang-18                 0x0000000109dc5c7c (anonymous namespace)::CXXNameMangler::mangleFunctionParam(clang::ParmVarDecl const*) + 140
9  clang-18                 0x0000000109dc4ec8 (anonymous namespace)::CXXNameMangler::mangleExpression(clang::Expr const*, unsigned int, bool)::$_2::operator()(clang::NamedDecl const*) const + 216
10 clang-18                 0x0000000109dc1b8c (anonymous namespace)::CXXNameMangler::mangleExpression(clang::Expr const*, unsigned int, bool) + 9664
11 clang-18                 0x0000000109dbc5a8 (anonymous namespace)::CXXNameMangler::mangleType(clang::DecltypeType const*) + 212
12 clang-18                 0x0000000109db08bc (anonymous namespace)::CXXNameMangler::mangleType(clang::QualType) + 1020
13 clang-18                 0x0000000109dc7784 (anonymous namespace)::CXXNameMangler::mangleTemplateParamDecl(clang::NamedDecl const*) + 552
14 clang-18                 0x0000000109dccaf4 (anonymous namespace)::CXXNameMangler::mangleLambdaSig(clang::CXXRecordDecl const*) + 144
15 clang-18                 0x0000000109dac560 (anonymous namespace)::ItaniumMangleContextImpl::mangleLambdaSig(clang::CXXRecordDecl const*, llvm::raw_ostream&) + 88
16 clang-18                 0x0000000109da73f0 (anonymous namespace)::ItaniumNumberingContext::getManglingNumber(clang::CXXMethodDecl const*) + 168
17 clang-18                 0x00000001088cd68c clang::Sema::handleLambdaNumbering(clang::CXXRecordDecl*, clang::CXXMethodDecl*, std::__1::optional<clang::CXXRecordDecl::LambdaNumbering>) + 568
18 clang-18                 0x00000001088d1e18 clang::Sema::ActOnStartOfLambdaDefinition(clang::LambdaIntroducer&, clang::Declarator&, clang::DeclSpec const&) + 1276
19 clang-18                 0x0000000107932138 clang::Parser::ParseLambdaExpressionAfterIntroducer(clang::LambdaIntroducer&) + 4204
20 clang-18                 0x000000010792ff94 clang::Parser::ParseLambdaExpression() + 164
21 clang-18                 0x000000010791d970 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) + 19408
22 clang-18                 0x0000000107915acc clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) + 92
23 clang-18                 0x00000001079143c0 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) + 292
24 clang-18                 0x0000000107914268 clang::Parser::ParseExpression(clang::Parser::TypeCastState) + 36
25 clang-18                 0x00000001079a7e84 clang::Parser::ParseReturnStatement() + 720
26 clang-18                 0x00000001079a2374 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) + 2076
27 clang-18                 0x00000001079a19e8 clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) + 232
28 clang-18                 0x00000001079a980c clang::Parser::ParseCompoundStatementBody(bool) + 1028
29 clang-18                 0x00000001079321d0 clang::Parser::ParseLambdaExpressionAfterIntroducer(clang::LambdaIntroducer&) + 4356
30 clang-18                 0x000000010792ff94 clang::Parser::ParseLambdaExpression() + 164
31 clang-18                 0x000000010791d970 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) + 19408
32 clang-18                 0x0000000107915acc clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) + 92
33 clang-18                 0x00000001079143c0 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) + 292
34 clang-18                 0x00000001078bdb68 clang::Parser::ParseInitializer() + 56
35 clang-18                 0x00000001078bd08c clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) + 1992
36 clang-18                 0x00000001078bb0b8 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) + 1976
37 clang-18                 0x00000001079c94c0 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) + 1612
38 clang-18                 0x00000001079c89f4 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) + 244
39 clang-18                 0x00000001079c82c8 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) + 3468
40 clang-18                 0x00000001079c62e8 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 2032
41 clang-18                 0x00000001079c5a54 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 64
42 clang-18                 0x00000001078a120c clang::ParseAST(clang::Sema&, bool, bool) + 476
43 clang-18                 0x0000000104b46fe0 clang::ASTFrontendAction::ExecuteAction() + 300
44 clang-18                 0x000000010442df68 clang::CodeGenAction::ExecuteAction() + 100
45 clang-18                 0x0000000104b467a8 clang::FrontendAction::Execute() + 124
46 clang-18                 0x0000000104a661f8 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 824
47 clang-18                 0x0000000104c63e8c clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1056
48 clang-18                 0x00000001007b87d4 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1268
49 clang-18                 0x00000001007a6ff8 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) + 400
50 clang-18                 0x00000001007a5d24 clang_main(int, char**, llvm::ToolContext const&) + 648
51 clang-18                 0x00000001007e1efc main + 108
52 dyld                     0x000000018b5e10e0 start + 2360
clang: error: unable to execute command: Abort trap: 6
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 18.0.0git (https://github.com/llvm/llvm-project.git f6617091a982c0802e9b980f2ce7e11a1355c38b)
Target: arm64-apple-darwin23.2.0
Thread model: posix
clang: note: diagnostic msg: 
********************
@HerrCai0907 HerrCai0907 added clang:frontend Language frontend issues, e.g. anything involving "Sema" crash-on-valid labels Jan 18, 2024
@llvmbot
Copy link
Collaborator

llvmbot commented Jan 18, 2024

@llvm/issue-subscribers-clang-frontend

Author: Congcong Cai (HerrCai0907)

https://godbolt.org/z/6M53v9njb ```c++ auto ICE = [](auto a) { return [=]<decltype(a) b>() { return 1; }; }; ```
./build/bin/clang a.cpp -std=c++20
Assertion failed: (parmDepth &lt; FunctionTypeDepth.getDepth()), function mangleFunctionParam, file ItaniumMangle.cpp, line 5693.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.

1.      ID/a.cpp:1:53: current parser token '{'
2.      ID/a.cpp:1:12: lambda expression parsing
3.      ID/a.cpp:1:23: in compound statement ('{}')
4.      ID/a.cpp:1:32: lambda expression parsing
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-18                 0x00000001034397f0 llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) + 88
1  clang-18                 0x0000000103439dd4 PrintStackTraceSignalHandler(void*) + 28
2  clang-18                 0x0000000103437abc llvm::sys::RunSignalHandlers() + 152
3  clang-18                 0x000000010343aec0 SignalHandler(int) + 276
4  libsystem_platform.dylib 0x000000018b991a24 _sigtramp + 56
5  libsystem_pthread.dylib  0x000000018b961cc0 pthread_kill + 288
6  libsystem_c.dylib        0x000000018b86da40 abort + 180
7  libsystem_c.dylib        0x000000018b86cd30 err + 0
8  clang-18                 0x0000000109dc5c7c (anonymous namespace)::CXXNameMangler::mangleFunctionParam(clang::ParmVarDecl const*) + 140
9  clang-18                 0x0000000109dc4ec8 (anonymous namespace)::CXXNameMangler::mangleExpression(clang::Expr const*, unsigned int, bool)::$_2::operator()(clang::NamedDecl const*) const + 216
10 clang-18                 0x0000000109dc1b8c (anonymous namespace)::CXXNameMangler::mangleExpression(clang::Expr const*, unsigned int, bool) + 9664
11 clang-18                 0x0000000109dbc5a8 (anonymous namespace)::CXXNameMangler::mangleType(clang::DecltypeType const*) + 212
12 clang-18                 0x0000000109db08bc (anonymous namespace)::CXXNameMangler::mangleType(clang::QualType) + 1020
13 clang-18                 0x0000000109dc7784 (anonymous namespace)::CXXNameMangler::mangleTemplateParamDecl(clang::NamedDecl const*) + 552
14 clang-18                 0x0000000109dccaf4 (anonymous namespace)::CXXNameMangler::mangleLambdaSig(clang::CXXRecordDecl const*) + 144
15 clang-18                 0x0000000109dac560 (anonymous namespace)::ItaniumMangleContextImpl::mangleLambdaSig(clang::CXXRecordDecl const*, llvm::raw_ostream&amp;) + 88
16 clang-18                 0x0000000109da73f0 (anonymous namespace)::ItaniumNumberingContext::getManglingNumber(clang::CXXMethodDecl const*) + 168
17 clang-18                 0x00000001088cd68c clang::Sema::handleLambdaNumbering(clang::CXXRecordDecl*, clang::CXXMethodDecl*, std::__1::optional&lt;clang::CXXRecordDecl::LambdaNumbering&gt;) + 568
18 clang-18                 0x00000001088d1e18 clang::Sema::ActOnStartOfLambdaDefinition(clang::LambdaIntroducer&amp;, clang::Declarator&amp;, clang::DeclSpec const&amp;) + 1276
19 clang-18                 0x0000000107932138 clang::Parser::ParseLambdaExpressionAfterIntroducer(clang::LambdaIntroducer&amp;) + 4204
20 clang-18                 0x000000010792ff94 clang::Parser::ParseLambdaExpression() + 164
21 clang-18                 0x000000010791d970 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&amp;, clang::Parser::TypeCastState, bool, bool*) + 19408
22 clang-18                 0x0000000107915acc clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) + 92
23 clang-18                 0x00000001079143c0 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) + 292
24 clang-18                 0x0000000107914268 clang::Parser::ParseExpression(clang::Parser::TypeCastState) + 36
25 clang-18                 0x00000001079a7e84 clang::Parser::ParseReturnStatement() + 720
26 clang-18                 0x00000001079a2374 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector&lt;clang::Stmt*, 32u&gt;&amp;, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&amp;, clang::ParsedAttributes&amp;) + 2076
27 clang-18                 0x00000001079a19e8 clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector&lt;clang::Stmt*, 32u&gt;&amp;, clang::Parser::ParsedStmtContext, clang::SourceLocation*) + 232
28 clang-18                 0x00000001079a980c clang::Parser::ParseCompoundStatementBody(bool) + 1028
29 clang-18                 0x00000001079321d0 clang::Parser::ParseLambdaExpressionAfterIntroducer(clang::LambdaIntroducer&amp;) + 4356
30 clang-18                 0x000000010792ff94 clang::Parser::ParseLambdaExpression() + 164
31 clang-18                 0x000000010791d970 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&amp;, clang::Parser::TypeCastState, bool, bool*) + 19408
32 clang-18                 0x0000000107915acc clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) + 92
33 clang-18                 0x00000001079143c0 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) + 292
34 clang-18                 0x00000001078bdb68 clang::Parser::ParseInitializer() + 56
35 clang-18                 0x00000001078bd08c clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&amp;, clang::Parser::ParsedTemplateInfo const&amp;, clang::Parser::ForRangeInit*) + 1992
36 clang-18                 0x00000001078bb0b8 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&amp;, clang::DeclaratorContext, clang::ParsedAttributes&amp;, clang::SourceLocation*, clang::Parser::ForRangeInit*) + 1976
37 clang-18                 0x00000001079c94c0 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&amp;, clang::ParsedAttributes&amp;, clang::ParsingDeclSpec&amp;, clang::AccessSpecifier) + 1612
38 clang-18                 0x00000001079c89f4 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&amp;, clang::ParsedAttributes&amp;, clang::ParsingDeclSpec*, clang::AccessSpecifier) + 244
39 clang-18                 0x00000001079c82c8 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&amp;, clang::ParsedAttributes&amp;, clang::ParsingDeclSpec*) + 3468
40 clang-18                 0x00000001079c62e8 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr&lt;clang::DeclGroupRef&gt;&amp;, clang::Sema::ModuleImportState&amp;) + 2032
41 clang-18                 0x00000001079c5a54 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr&lt;clang::DeclGroupRef&gt;&amp;, clang::Sema::ModuleImportState&amp;) + 64
42 clang-18                 0x00000001078a120c clang::ParseAST(clang::Sema&amp;, bool, bool) + 476
43 clang-18                 0x0000000104b46fe0 clang::ASTFrontendAction::ExecuteAction() + 300
44 clang-18                 0x000000010442df68 clang::CodeGenAction::ExecuteAction() + 100
45 clang-18                 0x0000000104b467a8 clang::FrontendAction::Execute() + 124
46 clang-18                 0x0000000104a661f8 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&amp;) + 824
47 clang-18                 0x0000000104c63e8c clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1056
48 clang-18                 0x00000001007b87d4 cc1_main(llvm::ArrayRef&lt;char const*&gt;, char const*, void*) + 1268
49 clang-18                 0x00000001007a6ff8 ExecuteCC1Tool(llvm::SmallVectorImpl&lt;char const*&gt;&amp;, llvm::ToolContext const&amp;) + 400
50 clang-18                 0x00000001007a5d24 clang_main(int, char**, llvm::ToolContext const&amp;) + 648
51 clang-18                 0x00000001007e1efc main + 108
52 dyld                     0x000000018b5e10e0 start + 2360
clang: error: unable to execute command: Abort trap: 6
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 18.0.0git (https://github.com/llvm/llvm-project.git f6617091a982c0802e9b980f2ce7e11a1355c38b)
Target: arm64-apple-darwin23.2.0
Thread model: posix
clang: note: diagnostic msg: 
********************

@EugeneZelenko EugeneZelenko added the lambda C++11 lambda expressions label Jan 18, 2024
@shafik shafik added the confirmed Verified by a second party label Jan 18, 2024
@shafik
Copy link
Collaborator

shafik commented Jan 18, 2024

Confirmed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" confirmed Verified by a second party crash-on-valid lambda C++11 lambda expressions
Projects
Status: No status
Development

Successfully merging a pull request may close this issue.

4 participants