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>; ///////////////////////////////////////////////////////////////