+2007-06-20 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/31809
+ PR c++/31806
+ Backport from mainline:
+ 2007-05-31 Jakub Jelinek <jakub@redhat.com>
+
+ * decl.c (cp_finish_decl): Also clear was_readonly if a static var
+ needs runtime initialization.
+
+ 2007-05-30 Jakub Jelinek <jakub@redhat.com>
+
+ * decl.c (cp_finish_decl): Clear TREE_READONLY flag on TREE_STATIC
+ variables that need runtime initialization.
+
2007-04-28 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR C++/30221
initializer. It is not legal to redeclare a static data
member, so this issue does not arise in that case. */
if (var_definition_p && TREE_STATIC (decl))
- expand_static_init (decl, init);
+ {
+ if (init)
+ {
+ if (TREE_READONLY (decl))
+ TREE_READONLY (decl) = 0;
+ was_readonly = 0;
+ }
+ expand_static_init (decl, init);
+ }
}
}
+2007-06-20 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/31806
+ PR c++/31809
+ * g++.dg/opt/static5.C: New test.
+ * g++.dg/opt/static6.C: New test.
+
2007-06-20 Jakub Jelinek <jakub@redhat.com>
PR inline-asm/32109
--- /dev/null
+// PR c++/31809
+// { dg-do run }
+// { dg-options "-O2" }
+
+struct S
+{
+ unsigned v;
+ static inline S f (unsigned a);
+};
+
+inline S
+S::f (unsigned a)
+{
+ static S t = { a };
+ return t;
+}
+
+const static S s = S::f (26);
+
+extern "C" void abort (void);
+
+int
+main ()
+{
+ S t = s;
+ if (t.v != 26)
+ abort ();
+ return 0;
+}
--- /dev/null
+// PR c++/31806
+// { dg-do run }
+// { dg-options "-O2 -fno-inline -fno-threadsafe-statics" }
+
+extern "C" void abort(void);
+
+struct A
+{
+ void *d;
+};
+
+static const A& staticA()
+{
+ static A s_static;
+ return s_static;
+}
+
+void assert_failed()
+{
+ abort();
+}
+
+A testMethod()
+{
+ static const A& s = staticA( );
+ if (&s == 0)
+ assert_failed();
+ return s;
+}
+
+int main()
+{
+ testMethod();
+ return 0;
+}