This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/86931] constexpr variable initialization: internal compiler error: in reshape_init_r, at cp/decl.c:6042


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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice-on-valid-code

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
commit cf72f34dc248e4dea971f08dc370b07c9d7601e5
Author: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Mon Oct 27 17:42:12 2014 +0000

            Implement N3653 (Member initializers and aggregates) and fix
            references to 'this' in constexpr constructors.
            * class.c (check_field_decls): In C++14 an NSDMI does not make the
            class non-aggregate.
            * constexpr.c (struct constexpr_ctx): New.
            (cxx_bind_parameters_in_call): Handle 'this'.
            (cxx_eval_call_expression): Create new constexpr_ctx.
            (cxx_eval_component_reference): Check CONSTRUCTOR_NO_IMPLICIT_ZERO.
            (initialized_type, init_subob_ctx, verify_ctor_sanity): New.
            (cxx_eval_bare_aggregate): Use them.  Build CONSTRUCTOR early.
            (cxx_eval_vec_init_1): Likewise.
            (cxx_eval_constant_expression) [PARM_DECL]: Allow 'this'.
            [TARGET_EXPR]: Build new constexpr_ctx.
            [PLACEHOLDER_EXPR]: New.
            (cxx_eval_outermost_constant_expr): Build new constexpr_ctx.  Add
            object parameter.
            (is_sub_constant_expr): Build new constexpr_ctx.
            (potential_constant_expression_1): Handle PLACEHOLDER_EXPR.
            Allow 'this'.
            * cp-gimplify.c (cp_gimplify_init_expr): Call replace_placeholders.
            * cp-tree.h (CONSTRUCTOR_NO_IMPLICIT_ZERO): New.
            * error.c (dump_expr): Handle PLACEHOLDER_EXPR.
            * init.c (get_nsdmi): Generate PLACEHOLDER_EXPR.
            * tree.c (lvalue_kind): Handle PLACEHOLDER_EXPR.
            (build_ctor_subob_ref, replace_placeholders): New.
            * typeck2.c (store_init_value): Use replace_placeholders.
            (process_init_constructor_record): Make zero-init before NSDMI
            explicit.

    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216750
138bc75d-0d04-0410-961f-82ee72b054a4

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]