Blame SOURCES/gcc48-pr77375.patch

5ed81e
2017-05-30  Jakub Jelinek  <jakub@redhat.com>
5ed81e
 
5ed81e
 	Backported from mainline
5ed81e
	2016-09-16  Jakub Jelinek  <jakub@redhat.com>
5ed81e
5ed81e
	PR c++/77375
5ed81e
	* class.c (check_bases): Set CLASSTYPE_HAS_MUTABLE if any
5ed81e
	TYPE_HAS_MUTABLE_P for any bases.
5ed81e
5ed81e
	* g++.dg/cpp0x/mutable1.C: New test.
5ed81e
5ed81e
--- gcc/cp/class.c	2017-10-17 17:27:32.287980595 +0200
5ed81e
+++ gcc/cp/class.c	2017-10-17 17:29:11.104213281 +0200
5ed81e
@@ -1479,6 +1479,8 @@ check_bases (tree t,
5ed81e
 	|= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
5ed81e
       TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
5ed81e
 				    || TYPE_HAS_COMPLEX_DFLT (basetype));
5ed81e
+      if (TYPE_HAS_MUTABLE_P (basetype))
5ed81e
+	CLASSTYPE_HAS_MUTABLE (t) = 1;
5ed81e
 
5ed81e
       /*  A standard-layout class is a class that:
5ed81e
 	  ...
5ed81e
--- /dev/null
5ed81e
+++ gcc/testsuite/g++.dg/cpp0x/mutable1.C
5ed81e
@@ -0,0 +1,12 @@
5ed81e
+// PR c++/77375
5ed81e
+// { dg-do run { target c++11 } }
5ed81e
+
5ed81e
+struct Base { mutable int i; };
5ed81e
+struct Derived : Base {};
5ed81e
+const Derived foo{};
5ed81e
+
5ed81e
+int
5ed81e
+main ()
5ed81e
+{
5ed81e
+  foo.i = 42;
5ed81e
+}