[Bug c++/80667] New: [c++1z] ice segfault on partial specialization with non-type template parameter
mathias at gaunard dot com
gcc-bugzilla@gcc.gnu.org
Mon May 8 13:13:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80667
Bug ID: 80667
Summary: [c++1z] ice segfault on partial specialization with
non-type template parameter
Product: gcc
Version: 7.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: mathias at gaunard dot com
Target Milestone: ---
Building the following code with std=c++1z
#include <type_traits>
template<class T>
struct traits
{
static constexpr T const_min = 0;
};
template <typename T, typename>
class Impl;
template<typename T, T MaxValue>
struct Impl<T, std::integral_constant<T, MaxValue>>
{
};
template<typename T>
struct Impl<T, std::integral_constant<T, traits<T>::const_min>>
{
};
Impl<unsigned char, std::integral_constant<unsigned char, 0>> foo()
{
return {};
}
gives
test.cpp: In function ‘Impl<unsigned char, std::integral_constant<unsigned
char, 0> > foo()’:
test.cpp:22:67: internal compiler error: Segmentation fault
Impl<unsigned char, std::integral_constant<unsigned char, 0>> foo()
^
0xb118ef crash_signal
../../gcc-src/gcc/toplev.c:337
0x61b925 unify
../../gcc-src/gcc/cp/pt.c:20292
0x61c8d1 unify
../../gcc-src/gcc/cp/pt.c:20573
0x61c319 unify
../../gcc-src/gcc/cp/pt.c:20764
0x61c4d7 unify
../../gcc-src/gcc/cp/pt.c:20843
0x61c319 unify
../../gcc-src/gcc/cp/pt.c:20764
0x61d971 get_partial_spec_bindings
../../gcc-src/gcc/cp/pt.c:21561
0x61db83 more_specialized_partial_spec
../../gcc-src/gcc/cp/pt.c:21436
0x61ddd9 most_specialized_partial_spec
../../gcc-src/gcc/cp/pt.c:21856
0x62e66b instantiate_class_template_1
../../gcc-src/gcc/cp/pt.c:10230
0x62e66b instantiate_class_template(tree_node*)
../../gcc-src/gcc/cp/pt.c:10798
0x691e75 complete_type(tree_node*)
../../gcc-src/gcc/cp/typeck.c:133
0x5ecffc check_function_type
../../gcc-src/gcc/cp/decl.c:14662
0x5ecffc start_preparsed_function(tree_node*, tree_node*, int)
../../gcc-src/gcc/cp/decl.c:14883
0x6000f3 start_function(cp_decl_specifier_seq*, cp_declarator const*,
tree_node*)
../../gcc-src/gcc/cp/decl.c:15199
0x686c97 cp_parser_function_definition_from_specifiers_and_declarator
../../gcc-src/gcc/cp/parser.c:26129
0x686c97 cp_parser_init_declarator
../../gcc-src/gcc/cp/parser.c:19159
0x68796d cp_parser_simple_declaration
../../gcc-src/gcc/cp/parser.c:12777
0x688575 cp_parser_block_declaration
../../gcc-src/gcc/cp/parser.c:12602
0x666ec4 cp_parser_declaration
../../gcc-src/gcc/cp/parser.c:12500
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Works fine without std=c++1z, alternatively a workaround is to add a cast in
the second partial specialization.
More information about the Gcc-bugs
mailing list