http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60992
Bug ID: 60992
Summary: [4.9/4.10 Regression] ICE in tsubst_copy, at
cp/pt.c:12637
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ppluzhnikov at google dot com
Google ref: b/14350545
Test:
/// --- cut ---
struct ScopeGuardGenerator { };
struct FF
{
template < class F, class ... Ts >
void
operator () (F & ...)
{
const int n = sizeof ... (Ts);
void *mutexes[n];
auto _on_scope_exit_var_0 =
ScopeGuardGenerator () + [&mutexes] { };
}
};
template < class F >
int operator+ (ScopeGuardGenerator, F) { return 1; }
struct D
{
template < class T0, class T1, class T2, class ... T >
void
operator () (T0, T1, const T2 & t2, T & ... t)
{
base (t2, t ...);
}
FF base;
};
D run_with_locks;
void Fn ()
{
run_with_locks ([] { }, 0, 0);
}
/// ---cut---
Using current trunk (r209848):
g++ -c -std=c++11 t2.ii
t2.ii: In instantiation of ‘FF::operator()(F&, ...)::<lambda()> [with F = const
int; Ts = {}]’:
t2.ii:12:34: required from ‘struct FF::operator()(F&, ...) [with F = const
int; Ts = {}]::<lambda()>’
t2.ii:12:30: required from ‘void FF::operator()(F&, ...) [with F = const int;
Ts = {}]’
t2.ii:25:5: required from ‘void D::operator()(T0, T1, const T2&, T& ...)
[with T0 = Fn()::<lambda()>; T1 = int; T2 = int; T = {}]’
t2.ii:34:31: required from here
t2.ii:12:43: internal compiler error: in tsubst_copy, at cp/pt.c:12637
ScopeGuardGenerator () + [&mutexes] { };
^
0x5d35cd tsubst_copy
../../gcc/cp/pt.c:12637
0x5af80b tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
../../gcc/cp/pt.c:15150
0x5ba6f6 tsubst_expr
../../gcc/cp/pt.c:13979
0x5c4097 tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/cp/pt.c:11596
0x5c33f5 tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/cp/pt.c:12045
0x5c2c4b tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/cp/pt.c:11561
0x5d55a0 tsubst_decl
../../gcc/cp/pt.c:11043
0x5c388f tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/cp/pt.c:11492
0x5bb12c tsubst_expr
../../gcc/cp/pt.c:13438
0x5bb249 tsubst_expr
../../gcc/cp/pt.c:13586
0x5b8399 instantiate_decl(tree_node*, int, bool)
../../gcc/cp/pt.c:19875
0x5f4147 instantiate_class_template_1
../../gcc/cp/pt.c:9334
0x5f4147 instantiate_class_template(tree_node*)
../../gcc/cp/pt.c:9402
0x6879f3 complete_type(tree_node*)
../../gcc/cp/typeck.c:134
0x5afa30 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
../../gcc/cp/pt.c:15247
0x5b19bb tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
../../gcc/cp/pt.c:14362
0x5ba6f6 tsubst_expr
../../gcc/cp/pt.c:13979
0x5bd579 tsubst_expr
../../gcc/cp/pt.c:13489
0x5ba0a3 tsubst_expr
../../gcc/cp/pt.c:13381
0x5bb249 tsubst_expr
../../gcc/cp/pt.c:13586
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
The test compiles cleanly with Clang and gcc-4.8 (at least the version I have).