diff options
| author | Jason Merrill <jason@redhat.com> | 2016-07-08 16:25:31 -0400 |
|---|---|---|
| committer | Jason Merrill <jason@gcc.gnu.org> | 2016-07-08 16:25:31 -0400 |
| commit | d0cf395a999499cfdc785cdb920bfdf401a628aa (patch) | |
| tree | f26032d4656084707e134821ce7a0fc9c5c21ae5 /gcc/cp/call.c | |
| parent | 8a1b7b7fd75a38474a335a98ac97d674b4c38b20 (diff) | |
| download | gcc-d0cf395a999499cfdc785cdb920bfdf401a628aa.zip gcc-d0cf395a999499cfdc785cdb920bfdf401a628aa.tar.gz gcc-d0cf395a999499cfdc785cdb920bfdf401a628aa.tar.bz2 | |
P0145: Refining Expression Order for C++ (-fstrong-eval-order).
gcc/c-family/
* c.opts (-fargs-in-order): Rename to -fstrong-eval-order.
* c-opts.c: Adjust.
gcc/cp/
* call.c (op_is_ordered, build_over_call): Adjust for
-fargs-in-order renaming to -fstrong-eval-order.
* cp-gimplify.c (cp_gimplify_expr): Likewise.
From-SVN: r238176
Diffstat (limited to 'gcc/cp/call.c')
| -rw-r--r-- | gcc/cp/call.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/gcc/cp/call.c b/gcc/cp/call.c index d77092b..8b93c61 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -5378,14 +5378,15 @@ add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args, static int op_is_ordered (tree_code code) { - if (!flag_args_in_order) - return 0; - switch (code) { // 5. b @= a case MODIFY_EXPR: - return -1; + return (flag_strong_eval_order > 1 ? -1 : 0); + + // 6. a[b] + case ARRAY_REF: + return (flag_strong_eval_order > 1 ? 1 : 0); // 1. a.b // Not overloadable (yet). @@ -5393,13 +5394,11 @@ op_is_ordered (tree_code code) // Only one argument. // 3. a->*b case MEMBER_REF: - // 6. a[b] - case ARRAY_REF: // 7. a << b case LSHIFT_EXPR: // 8. a >> b case RSHIFT_EXPR: - return 1; + return (flag_strong_eval_order ? 1 : 0); default: return 0; @@ -7830,9 +7829,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag); if (call != error_mark_node - && !magic - && (flag_args_in_order > 1 - || (cand->flags & LOOKUP_LIST_INIT_CTOR))) + && cand->flags & LOOKUP_LIST_INIT_CTOR) { tree c = extract_call_expr (call); /* build_new_op_1 will clear this when appropriate. */ |
