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

            Bug ID: 89974
           Summary: ICE on a definition of a non-type specialization on a
                    struct object with pointer to member function
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

The following C++ 2a program causes an ICE.  An equivalent program using a
pointer to member data compiles successfully.  I came across this while testing
my patch for pr47488, pr89833, and pr89876.

$ cat z.C && gcc -c -O2 -Wall -Wextra -std=c++2a z.C
struct A { void (A::*p)(); };
template <A> struct X { };
X<A{ 0 }> x;

z.C:3:9: internal compiler error: canonical types differ for identical types
‘void (A::*)()’ and ‘void (A::*)()’
    3 | X<A{ 0 }> x;
      |         ^
0xb7ba72 comptypes(tree_node*, tree_node*, int)
        /src/gcc/git-svn/gcc/cp/typeck.c:1479
0x9b0829 find_substitution
        /src/gcc/git-svn/gcc/cp/mangle.c:692
0x9b8840 write_type
        /src/gcc/git-svn/gcc/cp/mangle.c:2054
0x9c10a7 write_template_arg_literal
        /src/gcc/git-svn/gcc/cp/mangle.c:3357
0x9bd561 write_expression
        /src/gcc/git-svn/gcc/cp/mangle.c:2890
0x9bfdcd write_expression
        /src/gcc/git-svn/gcc/cp/mangle.c:3150
0x9bfdcd write_expression
        /src/gcc/git-svn/gcc/cp/mangle.c:3150
0x9c572f mangle_template_parm_object(tree_node*)
        /src/gcc/git-svn/gcc/cp/mangle.c:4267
0xa8c265 get_template_parm_object
        /src/gcc/git-svn/gcc/cp/pt.c:6702
0xa8e048 convert_nontype_argument
        /src/gcc/git-svn/gcc/cp/pt.c:7160
0xa91795 convert_template_argument
        /src/gcc/git-svn/gcc/cp/pt.c:8070
0xa93370 coerce_template_parms
        /src/gcc/git-svn/gcc/cp/pt.c:8547
0xa93a65 coerce_innermost_template_parms
        /src/gcc/git-svn/gcc/cp/pt.c:8666
0xa96177 lookup_template_class_1
        /src/gcc/git-svn/gcc/cp/pt.c:9357
0xa9885d lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
        /src/gcc/git-svn/gcc/cp/pt.c:9716
0xb240c0 finish_template_type(tree_node*, tree_node*, int)
        /src/gcc/git-svn/gcc/cp/semantics.c:3312
0xa223e1 cp_parser_template_id
        /src/gcc/git-svn/gcc/cp/parser.c:16479
0xa2f9be cp_parser_class_name
        /src/gcc/git-svn/gcc/cp/parser.c:23274
0xa0d6d7 cp_parser_qualifying_entity
        /src/gcc/git-svn/gcc/cp/parser.c:6693
0xa0c6cd cp_parser_nested_name_specifier_opt
        /src/gcc/git-svn/gcc/cp/parser.c:6379
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