aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-09-16 22:21:29 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2016-09-16 22:21:29 +0200
commite7d61178099e49835d84fba9c5bffbace0f26099 (patch)
tree7db015ca2d93feb3ea5c7237e13ae42d442bd6ba /gcc/cp
parent146ec50fd5c73a6712d739697cd33567b42c2d3f (diff)
downloadgcc-e7d61178099e49835d84fba9c5bffbace0f26099.zip
gcc-e7d61178099e49835d84fba9c5bffbace0f26099.tar.gz
gcc-e7d61178099e49835d84fba9c5bffbace0f26099.tar.bz2
re PR c++/77375 (constant object with mutable subobject allocated in read-only memory)
PR c++/77375 * class.c (check_bases): Set CLASSTYPE_HAS_MUTABLE if any TYPE_HAS_MUTABLE_P for any bases. * g++.dg/cpp0x/mutable1.C: New test. From-SVN: r240195
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/class.c2
2 files changed, 8 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1b5140f..ee0818e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2016-09-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/77375
+ * class.c (check_bases): Set CLASSTYPE_HAS_MUTABLE if any
+ TYPE_HAS_MUTABLE_P for any bases.
+
2016-09-16 Jason Merrill <jason@redhat.com>
* class.c (check_bases, set_one_vmethod_tm_attributes): Use
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 150f46f..7362c73 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -1796,6 +1796,8 @@ check_bases (tree t,
SET_CLASSTYPE_REF_FIELDS_NEED_INIT
(t, CLASSTYPE_REF_FIELDS_NEED_INIT (t)
| CLASSTYPE_REF_FIELDS_NEED_INIT (basetype));
+ if (TYPE_HAS_MUTABLE_P (basetype))
+ CLASSTYPE_HAS_MUTABLE (t) = 1;
/* A standard-layout class is a class that:
...