Hi!

On Tue, Sep 20, 2016 at 06:12:26PM +0200, Jakub Jelinek wrote:
> 2016-09-20  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR c++/77467
>       * constexpr.c (enum constexpr_switch_state): New.
>       (struct constexpr_ctx): Add css_state field.
>       (label_matches): Add CTX and STMT arguments, remove I and
>       DEFAULT_LABEL.  For CASE_LABEL_EXPR assert ctx->css_state != NULL,
>       handle default labels according to css_state.
>       (cxx_eval_statement_list): Remove statement skipping, label_matches
>       and default_label handling code.
>       (cxx_eval_loop_expr): Exit after first iteration even if
>       switches (jump_target).
>       (cxx_eval_switch_expr): Set up css_state field in ctx, if default
>       label has been seen in the body, but no cases matched, evaluate
>       the body second time.
>       (cxx_eval_constant_expression): Handle stmt skipping and label_matches
>       here.  Handle PREDICT_EXPR.  For MODIFY_EXPR or INIT_EXPR, assert
>       statement is not skipped.  For COND_EXPR during skipping, don't
>       evaluate condition, just the then block and if still skipping at the
>       end also the else block.
>       (cxx_eval_outermost_constant_expr): Adjust constexpr_ctx initializer.
>       (is_sub_constant_expr): Likewise.
> 
>       * g++.dg/cpp1y/constexpr-77467.C: New test.

I'd like to ping this patch.  Ok for trunk?

        Jakub

Reply via email to