aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/expr.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-08-22 12:58:25 -0400
committerJason Merrill <jason@gcc.gnu.org>2014-08-22 12:58:25 -0400
commit2d7d7f0fe49688f097720cd921ae65921034cd59 (patch)
treef630fb30ab136daa63badb4f992fceeb4416e73c /gcc/cp/expr.c
parent9b517712d78d2d457884dcf23519c7f65c3c28dd (diff)
downloadgcc-2d7d7f0fe49688f097720cd921ae65921034cd59.zip
gcc-2d7d7f0fe49688f097720cd921ae65921034cd59.tar.gz
gcc-2d7d7f0fe49688f097720cd921ae65921034cd59.tar.bz2
re PR c++/62129 (internal compiler error: in output_constant, at varasm.c:4755)
PR c++/62129 * class.c (outermost_open_class): New. * cp-tree.h: Declare it. * decl.c (maybe_register_incomplete_var): Use it. (complete_vars): Handle any constant variable. * expr.c (cplus_expand_constant): Handle CONSTRUCTOR. From-SVN: r214333
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 a62e0f9..99f8006 100644
--- a/gcc/cp/expr.c
+++ b/gcc/cp/expr.c
@@ -74,6 +74,14 @@ cplus_expand_constant (tree cst)
}
break;
+ case CONSTRUCTOR:
+ {
+ constructor_elt *elt;
+ unsigned HOST_WIDE_INT idx;
+ FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (cst), idx, elt)
+ elt->value = cplus_expand_constant (elt->value);
+ }
+
default:
/* There's nothing to do. */
break;