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 crashes at deducing auto type. #88329

Closed
bader opened this issue Apr 10, 2024 · 2 comments · Fixed by #88740
Closed

Clang crashes at deducing auto type. #88329

bader opened this issue Apr 10, 2024 · 2 comments · Fixed by #88740
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" confirmed Verified by a second party crash-on-invalid

Comments

@bader
Copy link
Contributor

bader commented Apr 10, 2024

Reproducer:

template <auto T> struct A {};
template <auto T> A<*T> operator *() { return {}; }

Output:

clang: /llvm/clang/lib/AST/ExprClassification.cpp:57: Cl clang::Expr::ClassifyImpl(clang::ASTContext&, clang::SourceLocation*) const: Assertion `isLValue()' 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: build-main/bin/clang -fsyntax-only /tmp/clang-crash.cpp
1.      /tmp/clang-crash.cpp:2:36: at annotation token
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  libLLVMSupport.so.18git       0x000014755e946f90 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 240
1  libLLVMSupport.so.18git       0x000014755e94439f llvm::sys::RunSignalHandlers() + 47
2  libLLVMSupport.so.18git       0x000014755e8492e8
3  libc.so.6                     0x000014755e349520
4  libc.so.6                     0x000014755e39da7c pthread_kill + 300
5  libc.so.6                     0x000014755e349476 raise + 22
6  libc.so.6                     0x000014755e32f7f3 abort + 211
7  libc.so.6                     0x000014755e32f71b
8  libc.so.6                     0x000014755e340e96
9  libclangAST.so.18git          0x000014755c85b3e3 clang::Expr::ClassifyImpl(clang::ASTContext&, clang::SourceLocation*) const + 1219
10 libclangSema.so.18git         0x000014755b794534 clang::Sema::DeduceAutoType(clang::TypeLoc, clang::Expr*, clang::QualType&, clang::sema::TemplateDeductionInfo&, bool, bool, clang::TemplateSpecCandidateSet*) + 2804
11 libclangSema.so.18git         0x000014755b691fed clang::Sema::CheckTemplateArgument(clang::NonTypeTemplateParmDecl*, clang::QualType, clang::Expr*, clang::TemplateArgument&, clang::TemplateArgument&, clang::Sema::CheckTemplateArgumentKind) + 1181
12 libclangSema.so.18git         0x000014755b69499d clang::Sema::CheckTemplateArgument(clang::NamedDecl*, clang::TemplateArgumentLoc&, clang::NamedDecl*, clang::SourceLocation, clang::SourceLocation, unsigned int, llvm::SmallVectorImpl<clang::TemplateArgument>&, llvm::SmallVectorImpl<clang::TemplateArgument>&, clang::Sema::CheckTemplateArgumentKind) + 1485
13 libclangSema.so.18git         0x000014755b6984e7 clang::Sema::CheckTemplateArgumentList(clang::TemplateDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo&, bool, llvm::SmallVectorImpl<clang::TemplateArgument>&, llvm::SmallVectorImpl<clang::TemplateArgument>&, bool, bool*) + 823
14 libclangSema.so.18git         0x000014755b6a16b8 clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo&) + 808
15 libclangSema.so.18git         0x000014755b6a3a4a clang::Sema::ActOnTemplateIdType(clang::Scope*, clang::CXXScopeSpec&, clang::SourceLocation, clang::OpaquePtr<clang::TemplateName>, clang::IdentifierInfo*, clang::SourceLocation, clang::SourceLocation, llvm::MutableArrayRef<clang::ParsedTemplateArgument>, clang::SourceLocation, bool, bool, clang::ImplicitTypenameContext) + 1338
16 libclangParse.so.18git        0x000014755bd510f5 clang::Parser::AnnotateTemplateIdTokenAsType(clang::CXXScopeSpec&, clang::ImplicitTypenameContext, bool) + 309
17 libclangParse.so.18git        0x000014755bc8aad8 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) + 5000
18 libclangParse.so.18git        0x000014755bd52313 clang::Parser::ParseSingleDeclarationAfterTemplate(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) + 979
19 libclangParse.so.18git        0x000014755bd601c7
20 libclangParse.so.18git        0x000014755bd604a6 clang::Parser::ParseDeclarationStartingWithTemplate(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) + 214
21 libclangParse.so.18git        0x000014755bc9926d clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) + 621
22 libclangParse.so.18git        0x000014755bd7817a clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) + 1082
23 libclangParse.so.18git        0x000014755bd790b5 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 693
24 libclangParse.so.18git        0x000014755bc66b5a clang::ParseAST(clang::Sema&, bool, bool) + 570
25 libclangFrontend.so.18git     0x00001475610e5279 clang::FrontendAction::Execute() + 201
26 libclangFrontend.so.18git     0x0000147561056315 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 405
27 libclangFrontendTool.so.18git 0x0000147562cc5145 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 421
28 clang                         0x00005585bd0682b9 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 6409
29 clang                         0x00005585bd0602e3
30 libclangDriver.so.18git       0x0000147560d34f6d
31 libLLVMSupport.so.18git       0x000014755e8497b0 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 160
32 libclangDriver.so.18git       0x0000147560d357ee
33 libclangDriver.so.18git       0x0000147560cf605a clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 170
34 libclangDriver.so.18git       0x0000147560cf6b2d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const + 253
35 libclangDriver.so.18git       0x0000147560d05ac4 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) + 404
36 clang                         0x00005585bd0657d0 clang_main(int, char**, llvm::ToolContext const&) + 9568
37 clang                         0x00005585bd05eee3 main + 51
38 libc.so.6                     0x000014755e330d90
39 libc.so.6                     0x000014755e330e40 __libc_start_main + 128
40 clang                         0x00005585bd05ef25 _start + 37
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 18.0.0 (https://github.com/intel/llvm.git af4751738db89a142a8880c782d12d4201b222a8)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /llvm/build-main/bin
clang: note: diagnostic msg: 
********************

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

********************

The issue is reproducible with the clang built with enabled assertions. I wasn't able to reproduce it with clang-17.

git bisect says that the issue is introduced by af47517.
@cor3ntin, could you take a look at this, please?

@github-actions github-actions bot added the clang Clang issues not falling into any other category label Apr 10, 2024
@EugeneZelenko EugeneZelenko added clang:frontend Language frontend issues, e.g. anything involving "Sema" crash Prefer [crash-on-valid] or [crash-on-invalid] and removed clang Clang issues not falling into any other category labels Apr 10, 2024
@llvmbot
Copy link
Collaborator

llvmbot commented Apr 10, 2024

@llvm/issue-subscribers-clang-frontend

Author: Alexey Bader (bader)

Reproducer: ```c++ template <auto T> struct A {}; template <auto T> A<*T> operator *() { return {}; } ``` Output: ``` clang: /llvm/clang/lib/AST/ExprClassification.cpp:57: Cl clang::Expr::ClassifyImpl(clang::ASTContext&, clang::SourceLocation*) const: Assertion `isLValue()' 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: build-main/bin/clang -fsyntax-only /tmp/clang-crash.cpp 1. /tmp/clang-crash.cpp:2:36: at annotation token 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 libLLVMSupport.so.18git 0x000014755e946f90 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 240 1 libLLVMSupport.so.18git 0x000014755e94439f llvm::sys::RunSignalHandlers() + 47 2 libLLVMSupport.so.18git 0x000014755e8492e8 3 libc.so.6 0x000014755e349520 4 libc.so.6 0x000014755e39da7c pthread_kill + 300 5 libc.so.6 0x000014755e349476 raise + 22 6 libc.so.6 0x000014755e32f7f3 abort + 211 7 libc.so.6 0x000014755e32f71b 8 libc.so.6 0x000014755e340e96 9 libclangAST.so.18git 0x000014755c85b3e3 clang::Expr::ClassifyImpl(clang::ASTContext&, clang::SourceLocation*) const + 1219 10 libclangSema.so.18git 0x000014755b794534 clang::Sema::DeduceAutoType(clang::TypeLoc, clang::Expr*, clang::QualType&, clang::sema::TemplateDeductionInfo&, bool, bool, clang::TemplateSpecCandidateSet*) + 2804 11 libclangSema.so.18git 0x000014755b691fed clang::Sema::CheckTemplateArgument(clang::NonTypeTemplateParmDecl*, clang::QualType, clang::Expr*, clang::TemplateArgument&, clang::TemplateArgument&, clang::Sema::CheckTemplateArgumentKind) + 1181 12 libclangSema.so.18git 0x000014755b69499d clang::Sema::CheckTemplateArgument(clang::NamedDecl*, clang::TemplateArgumentLoc&, clang::NamedDecl*, clang::SourceLocation, clang::SourceLocation, unsigned int, llvm::SmallVectorImpl<clang::TemplateArgument>&, llvm::SmallVectorImpl<clang::TemplateArgument>&, clang::Sema::CheckTemplateArgumentKind) + 1485 13 libclangSema.so.18git 0x000014755b6984e7 clang::Sema::CheckTemplateArgumentList(clang::TemplateDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo&, bool, llvm::SmallVectorImpl<clang::TemplateArgument>&, llvm::SmallVectorImpl<clang::TemplateArgument>&, bool, bool*) + 823 14 libclangSema.so.18git 0x000014755b6a16b8 clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo&) + 808 15 libclangSema.so.18git 0x000014755b6a3a4a clang::Sema::ActOnTemplateIdType(clang::Scope*, clang::CXXScopeSpec&, clang::SourceLocation, clang::OpaquePtr<clang::TemplateName>, clang::IdentifierInfo*, clang::SourceLocation, clang::SourceLocation, llvm::MutableArrayRef<clang::ParsedTemplateArgument>, clang::SourceLocation, bool, bool, clang::ImplicitTypenameContext) + 1338 16 libclangParse.so.18git 0x000014755bd510f5 clang::Parser::AnnotateTemplateIdTokenAsType(clang::CXXScopeSpec&, clang::ImplicitTypenameContext, bool) + 309 17 libclangParse.so.18git 0x000014755bc8aad8 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) + 5000 18 libclangParse.so.18git 0x000014755bd52313 clang::Parser::ParseSingleDeclarationAfterTemplate(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) + 979 19 libclangParse.so.18git 0x000014755bd601c7 20 libclangParse.so.18git 0x000014755bd604a6 clang::Parser::ParseDeclarationStartingWithTemplate(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) + 214 21 libclangParse.so.18git 0x000014755bc9926d clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) + 621 22 libclangParse.so.18git 0x000014755bd7817a clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) + 1082 23 libclangParse.so.18git 0x000014755bd790b5 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 693 24 libclangParse.so.18git 0x000014755bc66b5a clang::ParseAST(clang::Sema&, bool, bool) + 570 25 libclangFrontend.so.18git 0x00001475610e5279 clang::FrontendAction::Execute() + 201 26 libclangFrontend.so.18git 0x0000147561056315 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 405 27 libclangFrontendTool.so.18git 0x0000147562cc5145 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 421 28 clang 0x00005585bd0682b9 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 6409 29 clang 0x00005585bd0602e3 30 libclangDriver.so.18git 0x0000147560d34f6d 31 libLLVMSupport.so.18git 0x000014755e8497b0 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 160 32 libclangDriver.so.18git 0x0000147560d357ee 33 libclangDriver.so.18git 0x0000147560cf605a clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 170 34 libclangDriver.so.18git 0x0000147560cf6b2d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const + 253 35 libclangDriver.so.18git 0x0000147560d05ac4 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) + 404 36 clang 0x00005585bd0657d0 clang_main(int, char**, llvm::ToolContext const&) + 9568 37 clang 0x00005585bd05eee3 main + 51 38 libc.so.6 0x000014755e330d90 39 libc.so.6 0x000014755e330e40 __libc_start_main + 128 40 clang 0x00005585bd05ef25 _start + 37 clang: error: clang frontend command failed with exit code 134 (use -v to see invocation) clang version 18.0.0 (https://github.com/intel/llvm.git af47517) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /llvm/build-main/bin clang: note: diagnostic msg: ********************

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



The issue is reproducible with the clang built with enabled assertions. I wasn't able to reproduce it with clang-17.

git bisect says that the issue is introduced by af4751738db89a142a8880c782d12d4201b222a8.
@<!-- -->cor3ntin, could you take a look at this, please?
</details>

@shafik
Copy link
Collaborator

shafik commented Apr 11, 2024

It does look plausible this is the cause.

@shafik shafik added the confirmed Verified by a second party label Apr 11, 2024
cor3ntin added a commit to cor3ntin/llvm-project that referenced this issue Apr 15, 2024
This fixes an assertion in Expr::Classify when a
trying to deduce a dependent dereference operator.

Fixes llvm#88329
cor3ntin added a commit that referenced this issue Apr 15, 2024
…88740)

This fixes an assertion in Expr::Classify when a
trying to deduce a dependent dereference operator.

Fixes #88329
@EugeneZelenko EugeneZelenko removed the crash Prefer [crash-on-valid] or [crash-on-invalid] label Apr 15, 2024
aniplcc pushed a commit to aniplcc/llvm-project that referenced this issue Apr 15, 2024
…lvm#88740)

This fixes an assertion in Expr::Classify when a
trying to deduce a dependent dereference operator.

Fixes llvm#88329
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-invalid
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants