+2012-07-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/54026
+ * typeck.c (cp_apply_type_quals_to_decl): Check COMPLETE_TYPE_P.
+
2012-07-18 Jason Merrill <jason@redhat.com>
* method.c (process_subob_fn): Make sure no_implicit_p is non-null
constructor can produce constant init, so rely on cp_finish_decl to
clear TREE_READONLY if the variable has non-constant init. */
- /* If the type has a mutable component, that component might be
- modified. */
- if (TYPE_HAS_MUTABLE_P (type))
+ /* If the type has (or might have) a mutable component, that component
+ might be modified. */
+ if (TYPE_HAS_MUTABLE_P (type) || !COMPLETE_TYPE_P (type))
type_quals &= ~TYPE_QUAL_CONST;
c_apply_type_quals_to_decl (type_quals, decl);
+2012-07-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/54026
+ * g++.dg/init/mutable1.C: New.
+
2012-07-19 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/opt25.adb: New test.
--- /dev/null
+// PR c++/54026
+// { dg-final { scan-assembler-not "rodata" } }
+
+void non_const(int *);
+
+template <typename T>
+struct Foo {
+ T x;
+ mutable int y;
+ void func() const { non_const(&y); }
+};
+
+struct Bar {
+ int x;
+ mutable int y;
+ void func() const { non_const(&y); }
+};
+
+const Foo<int> foo = { 1, 2 };
+const Bar bar = { 3, 4 };