aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/semantics.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2015-06-09 11:27:01 -0400
committerJason Merrill <jason@gcc.gnu.org>2015-06-09 11:27:01 -0400
commit5af874fb6518ed3e21c1e0f750fac86788fdafa3 (patch)
tree9daa2e07f2106d90a2a2ea5325b24c470fbb6ef0 /gcc/cp/semantics.c
parentebcf592c841f47aa38ce0a9d95b4f04af975b0ac (diff)
downloadgcc-5af874fb6518ed3e21c1e0f750fac86788fdafa3.zip
gcc-5af874fb6518ed3e21c1e0f750fac86788fdafa3.tar.gz
gcc-5af874fb6518ed3e21c1e0f750fac86788fdafa3.tar.bz2
re PR c++/66387 (ICE in make_decl_rtl with lambda)
PR c++/66387 * semantics.c (process_outer_var_ref): Make sure the value is actually constant before returning it. * typeck.c (cp_build_array_ref): Allow subscripting non-lvalue array. From-SVN: r224287
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r--gcc/cp/semantics.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 650ef4c..59ec9047 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -3128,7 +3128,11 @@ process_outer_var_ref (tree decl, tsubst_flags_t complain)
form, so wait until instantiation time. */
return decl;
else if (decl_constant_var_p (decl))
- return scalar_constant_value (decl);
+ {
+ tree t = maybe_constant_value (convert_from_reference (decl));
+ if (TREE_CONSTANT (t))
+ return t;
+ }
}
if (parsing_nsdmi ())