summaryrefslogtreecommitdiff
path: root/gcc48-pr77375.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gcc48-pr77375.patch')
-rw-r--r--gcc48-pr77375.patch37
1 files changed, 37 insertions, 0 deletions
diff --git a/gcc48-pr77375.patch b/gcc48-pr77375.patch
new file mode 100644
index 0000000..09158e2
--- /dev/null
+++ b/gcc48-pr77375.patch
@@ -0,0 +1,37 @@
+2017-05-30 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 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.
+
+ * g++.dg/cpp0x/mutable1.C: New test.
+
+--- gcc/cp/class.c 2017-10-17 17:27:32.287980595 +0200
++++ gcc/cp/class.c 2017-10-17 17:29:11.104213281 +0200
+@@ -1479,6 +1479,8 @@ check_bases (tree t,
+ |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
+ TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
+ || TYPE_HAS_COMPLEX_DFLT (basetype));
++ if (TYPE_HAS_MUTABLE_P (basetype))
++ CLASSTYPE_HAS_MUTABLE (t) = 1;
+
+ /* A standard-layout class is a class that:
+ ...
+--- /dev/null
++++ gcc/testsuite/g++.dg/cpp0x/mutable1.C
+@@ -0,0 +1,12 @@
++// PR c++/77375
++// { dg-do run { target c++11 } }
++
++struct Base { mutable int i; };
++struct Derived : Base {};
++const Derived foo{};
++
++int
++main ()
++{
++ foo.i = 42;
++}