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

            Bug ID: 79639
           Summary: [6/7 Regression] ICE with -O and constexpr
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-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 valid testcase (compiled with "-std=c++1y -O")
triggers an ICE since GCC 6.1.0:

========================================
struct A
{
  void foo() {}
};

constexpr void bar(void (A::*f)())
{
  f = 0;
}

void baz()
{
  bar(&A::foo);
}
========================================

bug.cc: In function 'void baz()':
bug.cc:13:6:   in constexpr expansion of 'bar(&A::foo)'
bug.cc:14:1: internal compiler error: tree check: expected constructor, have
ptrmem_cst in cxx_eval_store_expression, at cp/constexpr.c:3540
 }
 ^
0xffc2ac tree_check_failed(tree_node const*, char const*, int, char const*,
...)
        ../../gcc/gcc/tree.c:9813
0x83efbb tree_check(tree_node*, char const*, int, char const*, tree_code)
        ../../gcc/gcc/tree.h:3064
0x83efbb cxx_eval_store_expression
        ../../gcc/gcc/cp/constexpr.c:3540
0x83a118 cxx_eval_constant_expression
        ../../gcc/gcc/cp/constexpr.c:4049
0x83b8fa cxx_eval_constant_expression
        ../../gcc/gcc/cp/constexpr.c:4341
0x83a160 cxx_eval_constant_expression
        ../../gcc/gcc/cp/constexpr.c:4538
0x83a160 cxx_eval_constant_expression
        ../../gcc/gcc/cp/constexpr.c:4538
0x839052 cxx_eval_call_expression
        ../../gcc/gcc/cp/constexpr.c:1641
0x83aca3 cxx_eval_constant_expression
        ../../gcc/gcc/cp/constexpr.c:3971
0x840a2e cxx_eval_outermost_constant_expr
        ../../gcc/gcc/cp/constexpr.c:4613
0x843c26 maybe_constant_value(tree_node*, tree_node*)
        ../../gcc/gcc/cp/constexpr.c:4828
0x81d9cb cp_fold
        ../../gcc/gcc/cp/cp-gimplify.c:2336
0x81dfee cp_fold_r
        ../../gcc/gcc/cp/cp-gimplify.c:1014
0x1020f13 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node*
(*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*,
hash_set<tree_node*, default_hash_traits<tree_node*> >*))
        ../../gcc/gcc/tree.c:11796
0x821140 cp_fold_function(tree_node*)
        ../../gcc/gcc/cp/cp-gimplify.c:1085
0x639150 finish_function(int)
        ../../gcc/gcc/cp/decl.c:15598
0x7190fe cp_parser_function_definition_after_declarator
        ../../gcc/gcc/cp/parser.c:26276
0x719dcd cp_parser_function_definition_from_specifiers_and_declarator
        ../../gcc/gcc/cp/parser.c:26182
0x719dcd cp_parser_init_declarator
        ../../gcc/gcc/cp/parser.c:19177
0x73dc1c cp_parser_simple_declaration
        ../../gcc/gcc/cp/parser.c:12795
Please submit a full bug report, [etc.]

The testcase compiles fine with GCC 5.1.0

Reply via email to