diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-09-28 21:21:47 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-09-28 21:21:47 +0200 |
commit | 4b3906980ac60781cddae5a787bf2908dd0920b7 (patch) | |
tree | 87190ab17a07d003e50e369e06ccb1875e978e4f /libjava/classpath/lib/java/sql/DataTruncation.class | |
parent | e0ab375340dc9a651e00e62e79e45152ff3f8bad (diff) | |
download | gcc-4b3906980ac60781cddae5a787bf2908dd0920b7.zip gcc-4b3906980ac60781cddae5a787bf2908dd0920b7.tar.gz gcc-4b3906980ac60781cddae5a787bf2908dd0920b7.tar.bz2 |
re PR c++/77467 (Segmentation fault with switch statement in constexpr function)
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.
From-SVN: r240591
Diffstat (limited to 'libjava/classpath/lib/java/sql/DataTruncation.class')
0 files changed, 0 insertions, 0 deletions