Issue 208488
Summary [clang] Crash (in ASTContext::getTypeInfoImpl) with deleted function in call-chain
Labels clang
Assignees
Reporter VReichelt
    When compiling the invalid code snippet below, the compiler triggers an assertion after displaying a correct error message:

```
auto f() = delete;

auto g()
{
  auto x = f();
  return x;
}
```

```
bug.cc:5:12: error: call to deleted function 'f'
    5 |   auto x = f();
      | ^
bug.cc:1:6: note: candidate function has been explicitly deleted
    1 | auto f() = delete;
      |      ^
clang++: /LLVM/llvm-project-22.1.3.src/clang/lib/AST/ASTContext.cpp:2428: clang::TypeInfo clang::ASTContext::getTypeInfoImpl(const clang::Type*) const: Assertion `!A->getDeducedType().isNull() && "cannot request the size of an undeduced or dependent auto type"' failed.
```

Stack dump:
```
0.	Program arguments: /LLVM/LLVM-22.1.3/bin/clang++ -c bug.cc
1.	bug.cc:6:11: current parser token ';'
2.	bug.cc:4:1: parsing function body 'g'
3.	bug.cc:4:1: in compound statement ('{}')
 #0 0x000000000436d75b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/LLVM/LLVM-22.1.3/bin/clang+++0x436d75b)
 #1 0x000000000436af14 llvm::sys::CleanupOnSignal(unsigned long) (/LLVM/LLVM-22.1.3/bin/clang+++0x436af14)
 #2 0x000000000429da20 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f54cdabb990 __restore_rt (/lib64/libpthread.so.0+0x12990)
 #4 0x00007f54cc52a5af raise (/lib64/libc.so.6+0x4e5af)
 #5 0x00007f54cc4fdee5 abort (/lib64/libc.so.6+0x21ee5)
 #6 0x00007f54cc4fddb9 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21db9)
 #7 0x00007f54cc522f06 (/lib64/libc.so.6+0x46f06)
 #8 0x00000000078a4fe4 clang::ASTContext::getTypeInfoImpl(clang::Type const*) const (/LLVM/LLVM-22.1.3/bin/clang+++0x78a4fe4)
 #9 0x00000000078a0912 clang::ASTContext::getTypeInfo(clang::Type const*) const (/LLVM/LLVM-22.1.3/bin/clang+++0x78a0912)
#10 0x00000000078a0912 clang::ASTContext::getTypeInfo(clang::Type const*) const (/LLVM/LLVM-22.1.3/bin/clang+++0x78a0912)
#11 0x00000000078a4ae2 clang::ASTContext::getTypeAlignInChars(clang::QualType) const (/LLVM/LLVM-22.1.3/bin/clang+++0x78a4ae2)
#12 0x00000000072741f2 clang::Sema::getNamedReturnInfo(clang::VarDecl const*) (/LLVM/LLVM-22.1.3/bin/clang+++0x72741f2)
#13 0x0000000007274381 clang::Sema::getNamedReturnInfo(clang::Expr*&, clang::Sema::SimplerImplicitMoveMode) (/LLVM/LLVM-22.1.3/bin/clang+++0x7274381)
#14 0x0000000007288c42 clang::Sema::BuildReturnStmt(clang::SourceLocation, clang::Expr*, bool) (/LLVM/LLVM-22.1.3/bin/clang+++0x7288c42)
#15 0x000000000728a2af clang::Sema::ActOnReturnStmt(clang::SourceLocation, clang::Expr*, clang::Scope*) (/LLVM/LLVM-22.1.3/bin/clang+++0x728a2af)
#16 0x00000000069ff403 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 24u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::LabelDecl*) (/LLVM/LLVM-22.1.3/bin/clang+++0x69ff403)
#17 0x0000000006a0054b clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 24u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::LabelDecl*) (/LLVM/LLVM-22.1.3/bin/clang+++0x6a0054b)
#18 0x0000000006a01d9d clang::Parser::ParseCompoundStatementBody(bool) (/LLVM/LLVM-22.1.3/bin/clang+++0x6a01d9d)
#19 0x0000000006a02618 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/LLVM/LLVM-22.1.3/bin/clang+++0x6a02618)
#20 0x00000000068f5705 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) (/LLVM/LLVM-22.1.3/bin/clang+++0x68f5705)
#21 0x000000000693e584 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/LLVM/LLVM-22.1.3/bin/clang+++0x693e584)
#22 0x00000000068ee9a1 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/LLVM/LLVM-22.1.3/bin/clang+++0x68ee9a1)
#23 0x00000000068ef17f clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/LLVM/LLVM-22.1.3/bin/clang+++0x68ef17f)
#24 0x00000000068f87f1 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/LLVM/LLVM-22.1.3/bin/clang+++0x68f87f1)
#25 0x00000000068f982d clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/LLVM/LLVM-22.1.3/bin/clang+++0x68f982d)
#26 0x00000000068d734a clang::ParseAST(clang::Sema&, bool, bool) (/LLVM/LLVM-22.1.3/bin/clang+++0x68d734a)

[...]

clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 22.1.3
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /LLVM/LLVM-22.1.3/bin
Build config: +assertions
```

This happens since LLVM 16 and still affects today's trunk.

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to