https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68608
Bug ID: 68608
Summary: [concepts] ICE with with explicit class instantiation
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ryan.burn at gmail dot com
Target Milestone: ---
The below code causes this ICE when compiled with
rnburn@localhost ~/test/explicit_concept $ g++17 --version
g++ (GCC) 6.0.0 20151123 (experimental)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
main.cpp:13:23: error: Two symbols with same comdat_group are not linked by the
same_comdat_group list.
template struct A<int>;
^
_ZN1AIiE1fEv/2 (int A<T>::f() requires predicate(!(C<T>)) [with T = int])
@0x7f63087cf2e0
Type: function definition analyzed
Visibility: forced_by_abi public weak comdat_group:_ZN1AIiE1fEv one_only
previous sharing asm name: 1
References:
Referring:
First run: 0
Function flags: body
Called by:
Calls:
_ZN1AIiE1fEv/1 (int A<T>::f() requires predicate( C<T>) [with T = int])
@0x7f63087cf170
Type: function definition analyzed
Visibility: forced_by_abi public weak comdat_group:_ZN1AIiE1fEv one_only
next sharing asm name: 2
References:
Referring:
First run: 0
Function flags: body
Called by:
Calls:
main.cpp:13:23: internal compiler error: symtab_node::verify failed
0x934e59 symtab_node::verify_symtab_nodes()
../../src-fix/gcc/symtab.c:1120
0x94823b symtab_node::checking_verify_symtab_nodes()
../../src-fix/gcc/cgraph.h:566
0x94823b symbol_table::compile()
../../src-fix/gcc/cgraphunit.c:2358
0x94a952 symbol_table::compile()
../../src-fix/gcc/cgraphunit.c:2514
0x94a952 symbol_table::finalize_compilation_unit()
../../src-fix/gcc/cgraphunit.c:2540
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.
///////////////////////////////////////////////////////////////
template <class T> concept constexpr bool C = true;
template <class T>
struct A {
int f() requires C<T> { return 1; }
int f() requires !C<T> { return 2; }
};
int main() {
return 0;
}
template struct A<int>;
///////////////////////////////////////////////////////////////