[Bug c++/57325] New: [4.7/4.8/4.9 Regression] ICE in strip_typedefs, at cp/tree.c:1306
ppluzhnikov at google dot com
gcc-bugzilla@gcc.gnu.org
Sat May 18 18:50:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57325
Bug ID: 57325
Summary: [4.7/4.8/4.9 Regression] ICE in strip_typedefs, at
cp/tree.c:1306
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 reference: b/9018720
Compiles fine with with gcc-4.6 and Clang.
ICE's with 4.7, 4.8, 4.9 (current trunk @r199023):
g++ -c test.ii
test.ii: In instantiation of ‘void TestJets(JetsT*) [with JetsT =
SimpleJets<double>]’:
test.ii:37:17: required from here
test.ii:25:27: internal compiler error: in strip_typedefs, at cp/tree.c:1306
scoped_ptr < JetT[] > a;
^
0x6b1af0 strip_typedefs(tree_node*)
../../gcc/cp/tree.c:1306
0x55736c canonicalize_type_argument
../../gcc/cp/pt.c:6151
0x57f12d coerce_template_parms
../../gcc/cp/pt.c:6722
0x587878 lookup_template_class_1
../../gcc/cp/pt.c:7286
0x587878 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
../../gcc/cp/pt.c:7583
0x58ced1 tsubst_aggr_type
../../gcc/cp/pt.c:9844
0x5805b5 tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/cp/pt.c:11183
0x591021 tsubst_decl
../../gcc/cp/pt.c:10655
0x580cf4 tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/cp/pt.c:11104
0x576a9f tsubst_expr
../../gcc/cp/pt.c:12934
0x57605b tsubst_expr
../../gcc/cp/pt.c:12883
0x576e34 tsubst_expr
../../gcc/cp/pt.c:13073
0x574a0b instantiate_decl(tree_node*, int, bool)
../../gcc/cp/pt.c:19108
0x5aff5f instantiate_pending_templates(int)
../../gcc/cp/pt.c:19207
0x5eaef9 cp_write_global_declarations()
../../gcc/cp/decl2.c:4037
Please submit a full bug report,
test.ii:
class valarray { int _M_data; };
template < typename > struct SimpleJet { valarray partials; };
template < class C > struct scoped_ptr_impl
{
scoped_ptr_impl (C *):data_ () { }
struct Data
{
C ptr;
};
Data data_;
};
template < class, class = int >struct scoped_ptr;
template < class C, class D > struct scoped_ptr <C[], D >
{
scoped_ptr ():impl_ (0) { }
scoped_ptr_impl < C > impl_;
};
template < typename JetsT > void
TestJets (JetsT *)
{
typedef typename JetsT::JetType JetT;
scoped_ptr < JetT[] > a;
}
template < typename T > struct SimpleJets
{
typedef SimpleJet < T > JetType;
scoped_ptr < SimpleJet < T >[] > vars_;
};
void fn ()
{
SimpleJets < double >b;
TestJets (&b);
}
More information about the Gcc-bugs
mailing list