https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89766

            Bug ID: 89766
           Summary: ICE: canonical types differ for identical types,
                    -std=c++17
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rimvydas.jas at gmail dot com
  Target Milestone: ---

Using gcc-8 branch c++17 three different(?) ICEs with -fchecking while
compiling boost:

$ /opt/gcc8/bin/g++ --version # on DragonFlyBSD
g++ (GCC) 8.3.1 20190318 [gcc-8-branch revision
5d34f779cb1:731cdfacfef:2f978d6d097b6ad2a2fdff05d1f20a86ab674ceb]

                 from libs/contract/src/contract.cpp:11:
./boost/function/function_template.hpp:523:9: internal compiler error:
canonical types differ for identical types 'F' and 'FunctionPtr'
Reduced testcase:
$ cat creduce_contract.ii
template <template <class> class a> struct b {
  template <class> static int c;
  decltype(c<a>);
};
template <typename> struct d {
  template <typename a, typename> bool e() const;
  template <typename, typename> bool e() const;
}
/opt/gcc8/bin/g++ -std=c++17 -c creduce_contract.ii
creduce_contract.ii:7:47: internal compiler error: canonical types differ for
identical types 'a' and '<template-parameter-2-1>'
   template <typename, typename> bool e() const;
                                               ^
0x9c13e8 comptypes(tree_node*, tree_node*, int)
 /zzz/gcc/gcc_git/gcc/cp/typeck.c:1480
0x933082 comp_template_parms(tree_node const*, tree_node const*)
 /zzz/gcc/gcc_git/gcc/cp/pt.c:3302
0x823f67 add_method(tree_node*, tree_node*, bool)
 /zzz/gcc/gcc_git/gcc/cp/class.c:1062
0x99276e finish_member_declaration(tree_node*)
 /zzz/gcc/gcc_git/gcc/cp/semantics.c:3114
0x929c87 cp_parser_template_declaration_after_parameters
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27077
0x92a4bc cp_parser_explicit_template_declaration
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27236
0x92a4bc cp_parser_template_declaration_after_export
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27255
0x914fed cp_parser_member_declaration
 /zzz/gcc/gcc_git/gcc/cp/parser.c:23552
0x915eda cp_parser_member_specification_opt
...

                 from libs/log/src/severity_level.cpp:18:
./boost/parameter/aux_/tagged_argument.hpp:132:5: internal compiler error:
canonical types differ for identical types 'Default' and 'F'
Reduced testcase:
$ cat creduce_severity_level.ii
template <typename, template <typename> class> struct a;
template <template <typename> class b> struct a<int, b>;
template <class> struct c {
  template <class> int operator[](int) const;
  template <class b> int operator[](int) const;
};
/opt/gcc8/bin/g++ -std=c++17 -c creduce_severity_level.ii
creduce_severity_level.ii:5:47: internal compiler error: canonical types differ
for identical types '<template-parameter-2-1>' and 'b'
   template <class b> int operator[](int) const;
                                               ^
0x9c13e8 comptypes(tree_node*, tree_node*, int)
 /zzz/gcc/gcc_git/gcc/cp/typeck.c:1480
0x933082 comp_template_parms(tree_node const*, tree_node const*)
 /zzz/gcc/gcc_git/gcc/cp/pt.c:3302
0x823f67 add_method(tree_node*, tree_node*, bool)
 /zzz/gcc/gcc_git/gcc/cp/class.c:1062
0x99276e finish_member_declaration(tree_node*)
 /zzz/gcc/gcc_git/gcc/cp/semantics.c:3114
0x929c87 cp_parser_template_declaration_after_parameters
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27077
0x92a4bc cp_parser_explicit_template_declaration
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27236
0x92a4bc cp_parser_template_declaration_after_export
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27255
0x914fed cp_parser_member_declaration
 /zzz/gcc/gcc_git/gcc/cp/parser.c:23552
0x915eda cp_parser_member_specification_opt
...

                 from libs/log/src/setup/default_filter_factory.cpp:22:
./boost/spirit/home/support/action_dispatch.hpp:180:9: internal compiler error:
canonical types differ for identical types 'F' and 'Eval'
Reduced testcase:
$ cat creduce_default_filter_factory.ii
template <typename, template <typename, typename> class> struct a;
template <template <typename, typename> class b> struct a<int, b>;
template <typename> struct c {
  template <typename b, typename, typename> bool operator()();
  template <typename, typename, typename> bool operator()();
};
$ /opt/gcc8/bin/g++ -std=c++17 -c creduce_default_filter_factory.ii
creduce_default_filter_factory.ii:5:60: internal compiler error: canonical
types differ for identical types 'b' and '<template-parameter-2-1>'
   template <typename, typename, typename> bool operator()();
                                                            ^
0x9c13e8 comptypes(tree_node*, tree_node*, int)
 /zzz/gcc/gcc_git/gcc/cp/typeck.c:1480
0x933082 comp_template_parms(tree_node const*, tree_node const*)
 /zzz/gcc/gcc_git/gcc/cp/pt.c:3302
0x823f67 add_method(tree_node*, tree_node*, bool)
 /zzz/gcc/gcc_git/gcc/cp/class.c:1062
0x99276e finish_member_declaration(tree_node*)
 /zzz/gcc/gcc_git/gcc/cp/semantics.c:3114
0x929c87 cp_parser_template_declaration_after_parameters
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27077
0x92a4bc cp_parser_explicit_template_declaration
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27236
0x92a4bc cp_parser_template_declaration_after_export
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27255
0x914fed cp_parser_member_declaration
 /zzz/gcc/gcc_git/gcc/cp/parser.c:23552
0x915eda cp_parser_member_specification_opt
 /zzz/gcc/gcc_git/gcc/cp/parser.c:23479
0x915eda cp_parser_class_specifier_1
 /zzz/gcc/gcc_git/gcc/cp/parser.c:22610
0x917f39 cp_parser_class_specifier
 /zzz/gcc/gcc_git/gcc/cp/parser.c:22872
0x917f39 cp_parser_type_specifier
 /zzz/gcc/gcc_git/gcc/cp/parser.c:16788
0x925256 cp_parser_decl_specifier_seq
 /zzz/gcc/gcc_git/gcc/cp/parser.c:13626
0x929895 cp_parser_single_declaration
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27307
0x929c0c cp_parser_template_declaration_after_parameters
 /zzz/gcc/gcc_git/gcc/cp/parser.c:26999
0x92a4bc cp_parser_explicit_template_declaration
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27236
0x92a4bc cp_parser_template_declaration_after_export
 /zzz/gcc/gcc_git/gcc/cp/parser.c:27255
0x92f8ba cp_parser_declaration
 /zzz/gcc/gcc_git/gcc/cp/parser.c:12724
0x92fb8a cp_parser_declaration_seq_opt
 /zzz/gcc/gcc_git/gcc/cp/parser.c:12651
0x92fe5c cp_parser_translation_unit
 /zzz/gcc/gcc_git/gcc/cp/parser.c:4563
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.

Reply via email to