[Bug c++/65202] New: [5.0 regression]ICE segfault with constexpr/noexcept

lucdanton at free dot fr gcc-bugzilla@gcc.gnu.org
Wed Feb 25 10:42:00 GMT 2015


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

            Bug ID: 65202
           Summary: [5.0 regression]ICE segfault with constexpr/noexcept
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lucdanton at free dot fr

Created attachment 34866
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34866&action=edit
Reduced testcase

Using:

$ g++-trunk --version
g++-trunk (GCC) 5.0.0 20150223 (experimental)

----------

I get the following trace:

$ g++-trunk -std=c++1y main.cpp
main.cpp: In instantiation of 'decltype (adl::adl_swap(l, r)) adl::swap(L&, R&)
[with L = adl::ns::foo<adl::ns::bar>; R = adl::ns::foo<adl::ns::bar>; decltype
(adl::adl_swap(l, r)) = void]':
main.cpp:22:19:   required from here
main.cpp:12:54:   in constexpr expansion of
'adl::adl_swap<adl::ns::foo<adl::ns::bar>, adl::ns::foo<adl::ns::bar>, {}>((* &
l), (* & r))'
main.cpp:12:6: internal compiler error: Segmentation fault
 auto swap(L &l, R &r) noexcept(noexcept(adl::adl_swap(l, r)))
      ^
0xa93f2f crash_signal
    ../../gcc/gcc/toplev.c:383
0x6f0cfa cxx_eval_constant_expression
    ../../gcc/gcc/cp/constexpr.c:2943
0x6f138a cxx_eval_constant_expression
    ../../gcc/gcc/cp/constexpr.c:3118
0x6f068b cxx_eval_call_expression
    ../../gcc/gcc/cp/constexpr.c:1392
0x6f0e44 cxx_eval_constant_expression
    ../../gcc/gcc/cp/constexpr.c:3022
0x6f3627 is_sub_constant_expr(tree_node*)
    ../../gcc/gcc/cp/constexpr.c:3604
0x69761d check_noexcept_r
    ../../gcc/gcc/cp/except.c:1178
0xc8c7c4 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, default_hashset_traits>*, tree_node*
(*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*,
hash_set<tree_node*, default_hashset_traits>*))
    ../../gcc/gcc/tree.c:11086
0xc8df58 walk_tree_without_duplicates_1(tree_node**, tree_node*
(*)(tree_node**, int*, void*), void*, tree_node* (*)(tree_node**, int*,
tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*,
default_hashset_traits>*))
    ../../gcc/gcc/tree.c:11416
0x69732f expr_noexcept_p(tree_node*, int)
    ../../gcc/gcc/cp/except.c:1255
0x697492 finish_noexcept_expr(tree_node*, int)
    ../../gcc/gcc/cp/except.c:1240
0x60c308 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
    ../../gcc/gcc/cp/pt.c:14895
0x625e9d maybe_instantiate_noexcept(tree_node*)
    ../../gcc/gcc/cp/pt.c:20012
0x64104f mark_used(tree_node*, int)
    ../../gcc/gcc/cp/decl2.c:4941
0x5da459 build_over_call
    ../../gcc/gcc/cp/call.c:7489
0x5e3261 build_new_function_call(tree_node*, vec<tree_node*, va_gc,
vl_embed>**, bool, int)
    ../../gcc/gcc/cp/call.c:4104
0x6ac979 finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
    ../../gcc/gcc/cp/semantics.c:2407
0x660689 cp_parser_postfix_expression
    ../../gcc/gcc/cp/parser.c:6368
0x66274a cp_parser_unary_expression
    ../../gcc/gcc/cp/parser.c:7438
0x6632e8 cp_parser_binary_expression
    ../../gcc/gcc/cp/parser.c:8173
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.

----------

Instead, I would expect the compiler to complain due to e.g. the namespaces
left
unclosed. (The testcase has been mechanically reduced so is nonsensical.) This
is what happens with 4.8 and 4.9.



More information about the Gcc-bugs mailing list