http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55580



--- Comment #1 from vlukas at gmx dot de 2012-12-03 22:42:06 UTC ---

I believe the following reduced snippet reproduces the original crash:

-------------------------------------------------------------------



template<int> struct V { };



template<typename...> struct F { };



template<typename... Ps>

template<int I>

struct F<V<I>, Ps...>

{ };



F<V<0>> x;

--------------------------------------------------------------------



With gcc version 4.8.0 20121122 (experimental) (GCC) I get the following:

--------------------------------------------------------------------

55580.cc:10:9: internal compiler error: tree check: expected class

'expression', have 'constant' (integer_cst) in tree_operand_check, at

tree.h:4113

 F<V<0>> x;

         ^

0xc8eb59 tree_class_check_failed(tree_node const*, tree_code_class, char

const*, int, char const*)

        ../../gcc_svn/gcc/tree.c:9006

0x4e32ed expr_check

        ../../gcc_svn/gcc/tree.h:3849

0x4e32ed tree_operand_check

        ../../gcc_svn/gcc/tree.h:4113

0x5af3f5 tree_operand_check

        ../../gcc_svn/gcc/tree.h:3870

0x5af3f5 unify_pack_expansion

        ../../gcc_svn/gcc/cp/pt.c:16058

0x5b385f unify

        ../../gcc_svn/gcc/cp/pt.c:16737

0x5b19cf unify

        ../../gcc_svn/gcc/cp/pt.c:16579

0x5b22ac unify

        ../../gcc_svn/gcc/cp/pt.c:16729

0x5b49fe get_class_bindings

        ../../gcc_svn/gcc/cp/pt.c:17439

0x5b566c most_specialized_class

        ../../gcc_svn/gcc/cp/pt.c:17688

0x5c2840 instantiate_class_template_1

        ../../gcc_svn/gcc/cp/pt.c:8514

0x5c2840 instantiate_class_template(tree_node*)

        ../../gcc_svn/gcc/cp/pt.c:9019

0x64d83b complete_type(tree_node*)

        ../../gcc_svn/gcc/cp/typeck.c:134

0x54c385 start_decl_1(tree_node*, bool)

        ../../gcc_svn/gcc/cp/decl.c:4665

0x56bd42 start_decl(cp_declarator const*, cp_decl_specifier_seq*, int,

tree_node*, tree_node*, tree_node**)

        ../../gcc_svn/gcc/cp/decl.c:4628

0x63a538 cp_parser_init_declarator

        ../../gcc_svn/gcc/cp/parser.c:15882

0x63aede cp_parser_simple_declaration

        ../../gcc_svn/gcc/cp/parser.c:10546

0x63cd87 cp_parser_block_declaration

        ../../gcc_svn/gcc/cp/parser.c:10427

0x645c0b cp_parser_declaration

        ../../gcc_svn/gcc/cp/parser.c:10324

0x64483d cp_parser_declaration_seq_opt

        ../../gcc_svn/gcc/cp/parser.c:10210

Please submit a full bug report,

with preprocessed source if appropriate.

Please include the complete backtrace with any bug report.

See <http://gcc.gnu.org/bugs.html> for instructions.

------------------------------------------------------------------------------



The backtrace I get from the original testcase is slightly different, but the

toplevel is the same ("internal compiler error: tree check: expected class

'expression', have 'constant' (integer_cst) in tree_operand_check, at

tree.h:4113").





I do not know whether the introduction of a second template parameter list  for

the partial specialization is valid C++. It can be made to work by changing it

to:

------------------------------------------------

template< typename ... _Rest, int const _speed >

//template< int const _speed >

struct Features<  ConstValue< _speed >,  _Rest  ... >

----------------------------------------------



I hope that helps.

Reply via email to