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