<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 --- - Crash when parsing a recursive decltype() return"
href="http://llvm.org/bugs/show_bug.cgi?id=15346">15346</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Crash when parsing a recursive decltype() return
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>Macintosh
</td>
</tr>
<tr>
<th>OS</th>
<td>MacOS X
</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>C++11
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>alexmac@adobe.com
</td>
</tr>
<tr>
<th>CC</th>
<td>dgregor@apple.com, llvmbugs@cs.uiuc.edu
</td>
</tr>
<tr>
<th>Classification</th>
<td>Unclassified
</td>
</tr></table>
<p>
<div>
<pre>Created <span class=""><a href="attachment.cgi?id=10068" name="attach_10068" title="testcase showing the crash">attachment 10068</a> <a href="attachment.cgi?id=10068&action=edit" title="testcase showing the crash">[details]</a></span>
testcase showing the crash
Compiling the attached cut-down test case results in a crash, but I would
expect a compile error instead (might be a stack overflow due to the recursion
in the decltype expression?)
Command: clang -cc1 -std=c++11 b2.cpp
Stack trace:
* thread #1: tid = 0x1c03, 0x000000010097e9a8
clang`DeduceTemplateArgumentsByTypeMatch(S=0x0000000108045200,
TemplateParams=0x0000000108062528, ParamIn=(null), ArgIn=(null),
Info=0x00007fff5f401658, Deduced=0x00007fff5f4013c8, TDF=13,
PartialOrdering=false, RefParamComparisons=0x0000000000000000) + 104 at
SemaTemplateDeduction.cpp:909, stop reason = EXC_BAD_ACCESS (code=2,
address=0x7fff5f3ffd38)
frame #0: 0x000000010097e9a8
clang`DeduceTemplateArgumentsByTypeMatch(S=0x0000000108045200,
TemplateParams=0x0000000108062528, ParamIn=(null), ArgIn=(null),
Info=0x00007fff5f401658, Deduced=0x00007fff5f4013c8, TDF=13,
PartialOrdering=false, RefParamComparisons=0x0000000000000000) + 104 at
SemaTemplateDeduction.cpp:909
frame #1: 0x000000010097d553
clang`clang::Sema::DeduceTemplateArguments(this=0x0000000108045200,
FunctionTemplate=0x0000000108062a50, ExplicitTemplateArgs=0x0000000000000000,
Args=(null), Specialization=0x00007fff5f401648, Info=0x00007fff5f401658) + 1763
at SemaTemplateDeduction.cpp:3172
frame #2: 0x000000010089f031
clang`clang::Sema::AddTemplateOverloadCandidate(this=0x0000000108045200,
FunctionTemplate=0x0000000108062a50, FoundDecl=(null),
ExplicitTemplateArgs=0x0000000000000000, Args=(null),
CandidateSet=0x00007fff5f402020, SuppressUserConversions=false) + 241 at
SemaOverload.cpp:5669
frame #3: 0x00000001008a6c24
clang`clang::Sema::AddArgumentDependentLookupCandidates(this=0x0000000108045200,
Name=(null), Operator=true, Loc=(null), Args=(null),
ExplicitTemplateArgs=0x0000000000000000, CandidateSet=0x00007fff5f402020,
PartialOverloading=false) + 868 at SemaOverload.cpp:7775
frame #4: 0x00000001008aedbe
clang`clang::Sema::CreateOverloadedBinOp(this=0x0000000108045200, OpLoc=(null),
OpcIn=3, Fns=0x00007fff5f403538, LHS=0x0000000000000000,
RHS=0x0000000000000000) + 2302 at SemaOverload.cpp:10306
frame #5: 0x0000000100757ee8
clang`BuildOverloadedBinOp(S=0x0000000108045200, Sc=0x0000000000000000,
OpLoc=(null), Opc=BO_Div, LHS=0x0000000108186388, RHS=0x00000001081863b0) + 280
at SemaExpr.cpp:8737
frame #6: 0x0000000100757d82
clang`clang::Sema::BuildBinOp(this=0x0000000108045200, S=0x0000000000000000,
OpLoc=(null), Opc=BO_Div, LHSExpr=0x0000000108186388,
RHSExpr=0x00000001081863b0) + 1218 at SemaExpr.cpp:8811
frame #7: 0x00000001009e5279
clang`clang::TreeTransform<(this=0x00007fff5f404640, OpLoc=(null), Opc=BO_Div,
LHS=0x0000000108186388,
RHS=0x00000001081863b0)::TemplateInstantiator>::RebuildBinaryOperator(clang::SourceLocation,
clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) + 73 at
TreeTransform.h:1578
frame #8: 0x00000001009d13f2
clang`clang::TreeTransform<(this=0x00007fff5f404640,
E=0x0000000108062878)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*)
+ 466 at TreeTransform.h:6534
frame #9: 0x00000001009c6fee
clang`clang::TreeTransform<(this=0x00007fff5f404640,
E=0x0000000108062878)::TemplateInstantiator>::TransformExpr(clang::Expr*) + 510
at StmtNodes.inc:151
frame #10: 0x00000001009ee0b9
clang`clang::TreeTransform<(this=0x00007fff5f404640, TLB=0x00007fff5f4045f0,
TL=(null))::TemplateInstantiator>::TransformDecltypeType(clang::TypeLocBuilder&,
clang::DecltypeTypeLoc) + 137 at TreeTransform.h:4427
frame #11: 0x00000001009c0601
clang`clang::TreeTransform<(this=0x00007fff5f404640, TLB=0x00007fff5f4045f0,
T=(null))::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&,
clang::TypeLoc) + 2273 at TypeNodes.def:86
frame #12: 0x00000001009f3a84
clang`clang::TreeTransform<(this=0x00007fff5f404640, TLB=0x00007fff5f4045f0,
TL=(null), ThisContext=0x0000000000000000,
ThisTypeQuals=0)::TemplateInstantiator>::TransformFunctionProtoType(clang::TypeLocBuilder&,
clang::FunctionProtoTypeLoc, clang::CXXRecordDecl*, unsigned int) + 468 at
TreeTransform.h:4244
frame #13: 0x00000001009c1556 clang`(this=0x00007fff5f404640,
TLB=0x00007fff5f4045f0, TL=(null), ThisContext=0x0000000000000000,
ThisTypeQuals=0)::TemplateInstantiator::TransformFunctionProtoType(clang::TypeLocBuilder&,
clang::FunctionProtoTypeLoc, clang::CXXRecordDecl*, unsigned int) + 150 at
SemaTemplateInstantiate.cpp:1363
frame #14: 0x00000001009c11d0
clang`clang::Sema::SubstFunctionDeclType(this=0x0000000108045200,
T=0x0000000108062960, Args=0x00007fff5f405528, Loc=(null), Entity=(null),
ThisContext=0x0000000000000000, ThisTypeQuals=0) + 496 at
SemaTemplateInstantiate.cpp:1622
frame #15: 0x0000000100a06f36
clang`clang::TemplateDeclInstantiator::SubstFunctionType(this=0x00007fff5f4051d0,
D=0x0000000108062990, Params=0x00007fff5f405058) + 454 at
SemaTemplateInstantiateDecl.cpp:2370
frame #16: 0x0000000100a0567f
clang`clang::TemplateDeclInstantiator::VisitFunctionDecl(this=0x00007fff5f4051d0,
D=0x0000000108062990, TemplateParams=0x0000000000000000) + 479 at
SemaTemplateInstantiateDecl.cpp:1135
frame #17: 0x00000001009f4ea7
clang`clang::declvisitor::Base<clang::declvisitor::make_ptr,
clang::TemplateDeclInstantiator, clang::Decl*>::Visit(this=0x00007fff5f4051d0,
D=0x0000000108062990) + 1191 at DeclNodes.inc:333
frame #18: 0x0000000100a0a454
clang`clang::Sema::SubstDecl(this=0x0000000108045200, D=0x0000000108062990,
Owner=0x0000000108061d68, TemplateArgs=0x00007fff5f405528) + 132 at
SemaTemplateInstantiateDecl.cpp:2192
frame #19: 0x000000010097c02b
clang`clang::Sema::FinishTemplateArgumentDeduction(this=0x0000000108045200,
FunctionTemplate=0x0000000108062a50, Deduced=0x00007fff5f406118,
NumExplicitlySpecified=0, Specialization=0x00007fff5f406398,
Info=0x00007fff5f4063a8, OriginalCallArgs=0x00007fff5f406040) + 2859 at
SemaTemplateDeduction.cpp:2712
frame #20: 0x000000010097dfd9
clang`clang::Sema::DeduceTemplateArguments(this=0x0000000108045200,
FunctionTemplate=0x0000000108062a50, ExplicitTemplateArgs=0x0000000000000000,
Args=(null), Specialization=0x00007fff5f406398, Info=0x00007fff5f4063a8) + 4457
at SemaTemplateDeduction.cpp:3291
frame #21: 0x000000010089f031
clang`clang::Sema::AddTemplateOverloadCandidate(this=0x0000000108045200,
FunctionTemplate=0x0000000108062a50, FoundDecl=(null),
ExplicitTemplateArgs=0x0000000000000000, Args=(null),
CandidateSet=0x00007fff5f406d70, SuppressUserConversions=false) + 241 at
SemaOverload.cpp:5669
frame #22: 0x00000001008a6c24
clang`clang::Sema::AddArgumentDependentLookupCandidates(this=0x0000000108045200,
Name=(null), Operator=true, Loc=(null), Args=(null),
ExplicitTemplateArgs=0x0000000000000000, CandidateSet=0x00007fff5f406d70,
PartialOverloading=false) + 868 at SemaOverload.cpp:7775
frame #23: 0x00000001008aedbe
clang`clang::Sema::CreateOverloadedBinOp(this=0x0000000108045200, OpLoc=(null),
OpcIn=3, Fns=0x00007fff5f408288, LHS=0x0000000000000000,
RHS=0x0000000000000000) + 2302 at SemaOverload.cpp:10306
frame #24: 0x0000000100757ee8
clang`BuildOverloadedBinOp(S=0x0000000108045200, Sc=0x0000000000000000,
OpLoc=(null), Opc=BO_Div, LHS=0x00000001081860f8, RHS=0x0000000108186120) + 280
at SemaExpr.cpp:8737
frame #25: 0x0000000100757d82
clang`clang::Sema::BuildBinOp(this=0x0000000108045200, S=0x0000000000000000,
OpLoc=(null), Opc=BO_Div, LHSExpr=0x00000001081860f8,
RHSExpr=0x0000000108186120) + 1218 at SemaExpr.cpp:8811
frame #26: 0x00000001009e5279
clang`clang::TreeTransform<(this=0x00007fff5f409390, OpLoc=(null), Opc=BO_Div,
LHS=0x00000001081860f8,
RHS=0x0000000108186120)::TemplateInstantiator>::RebuildBinaryOperator(clang::SourceLocation,
clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) + 73 at
TreeTransform.h:1578
frame #27: 0x00000001009d13f2
clang`clang::TreeTransform<(this=0x00007fff5f409390,
E=0x0000000108062878)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*)
+ 466 at TreeTransform.h:6534
frame #28: 0x00000001009c6fee
clang`clang::TreeTransform<(this=0x00007fff5f409390,
E=0x0000000108062878)::TemplateInstantiator>::TransformExpr(clang::Expr*) + 510
at StmtNodes.inc:151
frame #29: 0x00000001009ee0b9
clang`clang::TreeTransform<(this=0x00007fff5f409390, TLB=0x00007fff5f409340,
TL=(null))::TemplateInstantiator>::TransformDecltypeType(clang::TypeLocBuilder&,
clang::DecltypeTypeLoc) + 137 at TreeTransform.h:4427
frame #30: 0x00000001009c0601
clang`clang::TreeTransform<(this=0x00007fff5f409390, TLB=0x00007fff5f409340,
T=(null))::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&,
clang::TypeLoc) + 2273 at TypeNodes.def:86
frame #31: 0x00000001009f3a84
clang`clang::TreeTransform<(this=0x00007fff5f409390, TLB=0x00007fff5f409340,
TL=(null), ThisContext=0x0000000000000000,
ThisTypeQuals=0)::TemplateInstantiator>::TransformFunctionProtoType(clang::TypeLocBuilder&,
clang::FunctionProtoTypeLoc, clang::CXXRecordDecl*, unsigned int) + 468 at
TreeTransform.h:4244
frame #32: 0x00000001009c1556 clang`(this=0x00007fff5f409390,
TLB=0x00007fff5f409340, TL=(null), ThisContext=0x0000000000000000,
ThisTypeQuals=0)::TemplateInstantiator::TransformFunctionProtoType(clang::TypeLocBuilder&,
clang::FunctionProtoTypeLoc, clang::CXXRecordDecl*, unsigned int) + 150 at
SemaTemplateInstantiate.cpp:1363
frame #33: 0x00000001009c11d0
clang`clang::Sema::SubstFunctionDeclType(this=0x0000000108045200,
T=0x0000000108062960, Args=0x00007fff5f40a278, Loc=(null), Entity=(null),
ThisContext=0x0000000000000000, ThisTypeQuals=0) + 496 at
SemaTemplateInstantiate.cpp:1622
frame #34: 0x0000000100a06f36
clang`clang::TemplateDeclInstantiator::SubstFunctionType(this=0x00007fff5f409f20,
D=0x0000000108062990, Params=0x00007fff5f409da8) + 454 at
SemaTemplateInstantiateDecl.cpp:2370
frame #35: 0x0000000100a0567f
clang`clang::TemplateDeclInstantiator::VisitFunctionDecl(this=0x00007fff5f409f20,
D=0x0000000108062990, TemplateParams=0x0000000000000000) + 479 at
SemaTemplateInstantiateDecl.cpp:1135
frame #36: 0x00000001009f4ea7
clang`clang::declvisitor::Base<clang::declvisitor::make_ptr,
clang::TemplateDeclInstantiator, clang::Decl*>::Visit(this=0x00007fff5f409f20,
D=0x0000000108062990) + 1191 at DeclNodes.inc:333
frame #37: 0x0000000100a0a454
clang`clang::Sema::SubstDecl(this=0x0000000108045200, D=0x0000000108062990,
Owner=0x0000000108061d68, TemplateArgs=0x00007fff5f40a278) + 132 at
SemaTemplateInstantiateDecl.cpp:2192
frame #38: 0x000000010097c02b
clang`clang::Sema::FinishTemplateArgumentDeduction(this=0x0000000108045200,
FunctionTemplate=0x0000000108062a50, Deduced=0x00007fff5f40ae68,
NumExplicitlySpecified=0, Specialization=0x00007fff5f40b0e8,
Info=0x00007fff5f40b0f8, OriginalCallArgs=0x00007fff5f40ad90) + 2859 at
SemaTemplateDeduction.cpp:2712
frame #39: 0x000000010097dfd9
clang`clang::Sema::DeduceTemplateArguments(this=0x0000000108045200,
FunctionTemplate=0x0000000108062a50, ExplicitTemplateArgs=0x0000000000000000,
Args=(null), Specialization=0x00007fff5f40b0e8, Info=0x00007fff5f40b0f8) + 4457
at SemaTemplateDeduction.cpp:3291
frame #40: 0x000000010089f031
clang`clang::Sema::AddTemplateOverloadCandidate(this=0x0000000108045200,
FunctionTemplate=0x0000000108062a50, FoundDecl=(null),
ExplicitTemplateArgs=0x0000000000000000, Args=(null),
CandidateSet=0x00007fff5f40bac0, SuppressUserConversions=false) + 241 at
SemaOverload.cpp:5669
frame #41: 0x00000001008a6c24
clang`clang::Sema::AddArgumentDependentLookupCandidates(this=0x0000000108045200,
Name=(null), Operator=true, Loc=(null), Args=(null),
ExplicitTemplateArgs=0x0000000000000000, CandidateSet=0x00007fff5f40bac0,
PartialOverloading=false) + 868 at SemaOverload.cpp:7775
frame #42: 0x00000001008aedbe
clang`clang::Sema::CreateOverloadedBinOp(this=0x0000000108045200, OpLoc=(null),
OpcIn=3, Fns=0x00007fff5f40cfd8, LHS=0x0000000000000000,
RHS=0x0000000000000000) + 2302 at SemaOverload.cpp:10306
frame #43: 0x0000000100757ee8
clang`BuildOverloadedBinOp(S=0x0000000108045200, Sc=0x0000000000000000,
OpLoc=(null), Opc=BO_Div, LHS=0x0000000108185e68, RHS=0x0000000108185e90) + 280
at SemaExpr.cpp:8737
frame #44: 0x0000000100757d82
clang`clang::Sema::BuildBinOp(this=0x0000000108045200, S=0x0000000000000000,
OpLoc=(null), Opc=BO_Div, LHSExpr=0x0000000108185e68,
RHSExpr=0x0000000108185e90) + 1218 at SemaExpr.cpp:8811
frame #45: 0x00000001009e5279
clang`clang::TreeTransform<(this=0x00007fff5f40e0e0, OpLoc=(null), Opc=BO_Div,
LHS=0x0000000108185e68,
RHS=0x0000000108185e90)::TemplateInstantiator>::RebuildBinaryOperator(clang::SourceLocation,
clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) + 73 at
TreeTransform.h:1578
frame #46: 0x00000001009d13f2
clang`clang::TreeTransform<(this=0x00007fff5f40e0e0,
E=0x0000000108062878)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*)
+ 466 at TreeTransform.h:6534
frame #47: 0x00000001009c6fee
clang`clang::TreeTransform<(this=0x00007fff5f40e0e0,
E=0x0000000108062878)::TemplateInstantiator>::TransformExpr(clang::Expr*) + 510
at StmtNodes.inc:151
frame #48: 0x00000001009ee0b9
clang`clang::TreeTransform<(this=0x00007fff5f40e0e0, TLB=0x00007fff5f40e090,
TL=(null))::TemplateInstantiator>::TransformDecltypeType(clang::TypeLocBuilder&,
clang::DecltypeTypeLoc) + 137 at TreeTransform.h:4427
frame #49: 0x00000001009c0601
clang`clang::TreeTransform<(this=0x00007fff5f40e0e0, TLB=0x00007fff5f40e090,
T=(null))::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&,
clang::TypeLoc) + 2273 at TypeNodes.def:86
frame #50: 0x00000001009f3a84
clang`clang::TreeTransform<(this=0x00007fff5f40e0e0, TLB=0x00007fff5f40e090,
TL=(null), ThisContext=0x0000000000000000,
ThisTypeQuals=0)::TemplateInstantiator>::TransformFunctionProtoType(clang::TypeLocBuilder&,
clang::FunctionProtoTypeLoc, clang::CXXRecordDecl*, unsigned int) + 468 at
TreeTransform.h:4244</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>