<html>
<head>
<base href="http://llvm.org/bugs/" />
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW --- - Assertion failure when taking the size of ill-formed lambda"
href="http://llvm.org/bugs/show_bug.cgi?id=20731">20731</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Assertion failure when taking the size of ill-formed lambda
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Linux
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>Frontend
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>rtrieu@google.com
</td>
</tr>
<tr>
<th>CC</th>
<td>llvmbugs@cs.uiuc.edu
</td>
</tr>
<tr>
<th>Classification</th>
<td>Unclassified
</td>
</tr></table>
<p>
<div>
<pre>Code:
template <class L, int X = sizeof(L)>
void Job(L l);
template <typename... Args>
void Logger(Args&&... args) {
auto len = Invalid_Function((args)...);
Job([len]() {});
}
void GetMethod() {
Logger();
}
Clang is attempting to calculate the sizeof(L) on line 2, reaches the undeduced
auto type of len, and asserts.
Commandline:
clang s1.cpp -std=c++11
Assertion:
tools/clang/lib/AST/ASTContext.cpp:1694: 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.
Output:
s1.cpp:6:14: error: use of undeclared identifier 'Invalid_Function'
auto len = Invalid_Function((args)...);
^
s1.cpp:11:3: note: in instantiation of function template specialization
'Logger<>' requested here
Logger();
^
0 clang 0x00000000011a94e5 llvm::sys::PrintStackTrace(_IO_FILE*) +
37
1 clang 0x00000000011a9933
2 libpthread.so.0 0x00007f5c57f06cb0
3 clang 0x00000000020f079f
clang::ASTContext::getTypeInfoImpl(clang::Type const*) const + 1231
4 clang 0x00000000020f019b
clang::ASTContext::getTypeInfo(clang::Type const*) const + 187
5 clang 0x00000000020f0074
clang::ASTContext::getTypeInfoInChars(clang::Type const*) const + 132
6 clang 0x000000000222cda1
7 clang 0x0000000002227f0b
clang::ASTContext::getASTRecordLayout(clang::RecordDecl const*) const + 1099
8 clang 0x00000000020f0921
clang::ASTContext::getTypeInfoImpl(clang::Type const*) const + 1617
9 clang 0x00000000020f019b
clang::ASTContext::getTypeInfo(clang::Type const*) const + 187
10 clang 0x00000000020f0776
clang::ASTContext::getTypeInfoImpl(clang::Type const*) const + 1190
11 clang 0x00000000020f019b
clang::ASTContext::getTypeInfo(clang::Type const*) const + 187
12 clang 0x00000000020f0074
clang::ASTContext::getTypeInfoInChars(clang::Type const*) const + 132
13 clang 0x00000000021caa95
14 clang 0x00000000021c2082
15 clang 0x00000000021be60d
16 clang 0x00000000021c19b9
clang::Expr::isCXX11ConstantExpr(clang::ASTContext const&, clang::APValue*,
clang::SourceLocation*) const + 377
17 clang 0x00000000021c06da
18 clang 0x00000000021c17e1
clang::Expr::isIntegerConstantExpr(llvm::APSInt&, clang::ASTContext const&,
clang::SourceLocation*, bool) const + 49
19 clang 0x0000000001da6868
clang::StandardConversionSequence::getNarrowingKind(clang::ASTContext&,
clang::Expr const*, clang::APValue&, clang::QualType&) const + 824
20 clang 0x0000000001db2267
clang::Sema::CheckConvertedConstantExpression(clang::Expr*, clang::QualType,
llvm::APSInt&, clang::Sema::CCEKind) + 1095
21 clang 0x0000000001e05822
clang::Sema::CheckTemplateArgument(clang::NonTypeTemplateParmDecl*,
clang::QualType, clang::Expr*, clang::TemplateArgument&,
clang::Sema::CheckTemplateArgumentKind) + 466
22 clang 0x0000000001e16f7f
clang::Sema::CheckTemplateArgument(clang::NamedDecl*,
clang::TemplateArgumentLoc&, clang::NamedDecl*, clang::SourceLocation,
clang::SourceLocation, unsigned int,
llvm::SmallVectorImpl<clang::TemplateArgument>&,
clang::Sema::CheckTemplateArgumentKind) + 2271
23 clang 0x0000000001e515ec
clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*,
llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int,
clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&,
llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*) + 1692
24 clang 0x0000000001e53451
clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*,
clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>,
clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&) + 2977
25 clang 0x0000000001db7055
clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*,
clang::DeclAccessPair, clang::TemplateArgumentListInfo*,
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool) + 309
26 clang 0x0000000001dc45f2
clang::Sema::AddOverloadedCallCandidates(clang::UnresolvedLookupExpr*,
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool) + 354
27 clang 0x0000000001dc4700
clang::Sema::buildOverloadedCallSet(clang::Scope*, clang::Expr*,
clang::UnresolvedLookupExpr*, llvm::MutableArrayRef<clang::Expr*>,
clang::SourceLocation, clang::OverloadCandidateSet*,
clang::ActionResult<clang::Expr*, true>*) + 144
28 clang 0x0000000001dc4abd
clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*,
clang::UnresolvedLookupExpr*, clang::SourceLocation,
llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool)
+ 509
29 clang 0x0000000001c9a3af clang::Sema::ActOnCallExpr(clang::Scope*,
clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>,
clang::SourceLocation, clang::Expr*, bool) + 1295
30 clang 0x0000000001e919f7
31 clang 0x0000000001e817a9
32 clang 0x0000000001e80f44
33 clang 0x0000000001e8fd81
34 clang 0x0000000001e80ef1 clang::Sema::SubstStmt(clang::Stmt*,
clang::MultiLevelTemplateArgumentList const&) + 65
35 clang 0x0000000001ea6ed2
clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation,
clang::FunctionDecl*, bool, bool) + 3650
36 clang 0x0000000001ea7a7e
clang::Sema::PerformPendingInstantiations(bool) + 430
37 clang 0x0000000001b15b4d clang::Sema::ActOnEndOfTranslationUnit()
+ 525
38 clang 0x000000000198a338
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) + 168
39 clang 0x00000000019861f6 clang::ParseAST(clang::Sema&, bool, bool)
+ 422
40 clang 0x0000000001313c39 clang::FrontendAction::Execute() + 57
41 clang 0x00000000012e7ee3
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 787
42 clang 0x000000000138012c
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 2844
43 clang 0x00000000006c5963 cc1_main(llvm::ArrayRef<char const*>,
char const*, void*) + 675
44 clang 0x00000000006c3b54 main + 7732
45 libc.so.6 0x00007f5c5742f78d __libc_start_main + 237
46 clang 0x00000000006c1bf1
Stack dump:
0. Program arguments: clang -cc1 s1.cpp -std=c++11
1. <eof> parser at end of file
2. s1.cpp:5:6: instantiating function definition 'Logger'
Segmentation fault (core dumped)</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>