aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/expr.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2018-06-02 21:01:47 -0400
committerJason Merrill <jason@gcc.gnu.org>2018-06-02 21:01:47 -0400
commit57ea03ad4a0dde989d1c38a0028378964104bbd7 (patch)
tree9e2732b8029516dcd3e0e3f298aeb9a2d18828fc /gcc/cp/expr.c
parentdd39af4425fc44f73364faf7a1f9d79240c98c10 (diff)
downloadgcc-57ea03ad4a0dde989d1c38a0028378964104bbd7.zip
gcc-57ea03ad4a0dde989d1c38a0028378964104bbd7.tar.gz
gcc-57ea03ad4a0dde989d1c38a0028378964104bbd7.tar.bz2
PR c++/85761 - ICE with ill-formed use of const outer variable.
* expr.c (mark_use): Handle location wrappers. From-SVN: r261121
Diffstat (limited to 'gcc/cp/expr.c')
-rw-r--r--gcc/cp/expr.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/cp/expr.c b/gcc/cp/expr.c
index 0d0a10ec..9780b75 100644
--- a/gcc/cp/expr.c
+++ b/gcc/cp/expr.c
@@ -139,6 +139,9 @@ mark_use (tree expr, bool rvalue_p, bool read_p,
break;
}
}
+ temp_override<location_t> l (input_location);
+ if (loc != UNKNOWN_LOCATION)
+ input_location = loc;
expr = process_outer_var_ref (expr, tf_warning_or_error, true);
if (!(TREE_TYPE (oexpr)
&& TYPE_REF_P (TREE_TYPE (oexpr))))
@@ -184,6 +187,11 @@ mark_use (tree expr, bool rvalue_p, bool read_p,
}
break;
default:
+ if (location_wrapper_p (expr))
+ {
+ loc = EXPR_LOCATION (expr);
+ recurse_op[0] = true;
+ }
break;
}