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.