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

            Bug ID: 79361
           Summary: [5/6/7 Regression] ICE redefining a template function
                    as defaulted or deleted
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Keywords: ice-on-invalid-code
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: reichelt at gcc dot gnu.org
  Target Milestone: ---

The following two invalid testcases trigger ICEs on trunk:

===========================================
template<typename T> void foo(T);

template<> void foo<int>(int) {}
template<> void foo<int>(int) = delete;
===========================================

bug.cc:4:17: error: redefinition of 'void foo(T) [with T = int]'
 template<> void foo<int>(int) = delete;
                 ^~~~~~~~
bug.cc:3:17: note: 'void foo(T) [with T = int]' previously declared here
 template<> void foo<int>(int) {}
                 ^~~~~~~~
bug.cc: In function 'void foo(T) [with T = int]':
bug.cc:3:17: internal compiler error: tree check: expected block, have
error_mark in lower_function_body, at gimple-low.c:98
0x102f4bc tree_check_failed(tree_node const*, char const*, int, char const*,
...)
        ../../gcc/gcc/tree.c:9814
0x14904c7 tree_check(tree_node*, char const*, int, char const*, tree_code)
        ../../gcc/gcc/tree.h:3060
0x14904c7 lower_function_body
        ../../gcc/gcc/gimple-low.c:98
0x14904c7 execute
        ../../gcc/gcc/gimple-low.c:181
Please submit a full bug report, [etc.]


===========================================
template<typename T> void foo(T);

template<> void foo<int>(int) {}
template<> void foo<int>(int) = default;
===========================================

bug.cc:4:17: error: redefinition of 'void foo(T) [with T = int]'
 template<> void foo<int>(int) = default;
                 ^~~~~~~~
bug.cc:3:17: note: 'void foo(T) [with T = int]' previously declared here
 template<> void foo<int>(int) {}
                 ^~~~~~~~
bug.cc:4:33: error: a template cannot be defaulted
 template<> void foo<int>(int) = default;
                                 ^~~~~~~
bug.cc: In function 'void foo(T) [with T = int]':
bug.cc:3:17: internal compiler error: Segmentation fault
 template<> void foo<int>(int) {}
                 ^~~~~~~~
0xd9292f crash_signal
        ../../gcc/gcc/toplev.c:333
0x14901ae tree_check(tree_node*, char const*, int, char const*, tree_code)
        ../../gcc/gcc/tree.h:3059
0x14901ae lower_function_body
        ../../gcc/gcc/gimple-low.c:98
0x14901ae execute
        ../../gcc/gcc/gimple-low.c:181
Please submit a full bug report, [etc.]


These bugs appeared in GCC 4.5.0.

Reply via email to