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

            Bug ID: 79377
           Summary: [6/7 Regression] ICE with increment operator in
                    -fpermissive mode
           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 code snippet (compiled with "-fpermissive") triggers an ICE since
GCC 6.1.0:

=====================================
struct A
{
  A& operator++();
};

template<typename> void foo(A& a)
{
  a++;
}
=====================================

bug.cc: In function 'void foo(A&)':
bug.cc:8:4: warning: no 'operator++(int)' declared for postfix '++', trying
prefix operator instead [-fpermissive]
   a++;
   ~^~
bug.cc:8:4: internal compiler error: in build_min_non_dep_op_overload, at
cp/tree.c:2944
   a++;
    ^~
0x7d192a build_min_non_dep_op_overload(tree_code, tree_node*, tree_node*, ...)
        ../../gcc/gcc/cp/tree.c:2944
0x758c81 build_x_unary_op(unsigned int, tree_code, cp_expr, int)
        ../../gcc/gcc/cp/typeck.c:5490
0x79f980 finish_increment_expr(cp_expr, tree_code)
        ../../gcc/gcc/cp/semantics.c:2514
0x720389 cp_parser_postfix_expression
        ../../gcc/gcc/cp/parser.c:7057
0x72166d cp_parser_unary_expression
        ../../gcc/gcc/cp/parser.c:8098
0x7225c3 cp_parser_cast_expression
        ../../gcc/gcc/cp/parser.c:8775
0x722d17 cp_parser_binary_expression
        ../../gcc/gcc/cp/parser.c:8876
0x7235e4 cp_parser_assignment_expression
        ../../gcc/gcc/cp/parser.c:9163
0x727318 cp_parser_expression
        ../../gcc/gcc/cp/parser.c:9332
0x72c908 cp_parser_expression_statement
        ../../gcc/gcc/cp/parser.c:10880
0x7152cc cp_parser_statement
        ../../gcc/gcc/cp/parser.c:10696
0x7169cd cp_parser_statement_seq_opt
        ../../gcc/gcc/cp/parser.c:11022
0x716a9f cp_parser_compound_statement
        ../../gcc/gcc/cp/parser.c:10976
0x72abe3 cp_parser_function_body
        ../../gcc/gcc/cp/parser.c:21426
0x72abe3 cp_parser_ctor_initializer_opt_and_function_body
        ../../gcc/gcc/cp/parser.c:21464
0x733641 cp_parser_function_definition_after_declarator
        ../../gcc/gcc/cp/parser.c:26231
0x738e40 cp_parser_function_definition_from_specifiers_and_declarator
        ../../gcc/gcc/cp/parser.c:26143
0x738e40 cp_parser_init_declarator
        ../../gcc/gcc/cp/parser.c:19153
0x71297a cp_parser_single_declaration
        ../../gcc/gcc/cp/parser.c:26689
0x732c7c cp_parser_template_declaration_after_parameters
        ../../gcc/gcc/cp/parser.c:26293
Please submit a full bug report, [etc.]

Although the correct operator is missing, the code is deemed valid
in the "-fpermissive" mode, so I'm filing this under ice-on-valid-code.

Reply via email to