]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
decl.c (start_cleanup_fn): Clear interface_only before start_function, restore it...
authorJakub Jelinek <jakub@redhat.com>
Wed, 4 Sep 2002 08:50:16 +0000 (10:50 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 4 Sep 2002 08:50:16 +0000 (10:50 +0200)
* decl.c (start_cleanup_fn): Clear interface_only before
start_function, restore it afterwards.

* g++.dg/other/cxa-atexit1.C: New test.

From-SVN: r56790

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/cxa-atexit1.C [new file with mode: 0644]

index 5a4ce9762e50a923228bdc8f3e8bf241e47564a0..c701767f0eba55adb65b39bf36c0262c1312ef9c 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-04  Jakub Jelinek  <jakub@redhat.com>
+
+       * decl.c (start_cleanup_fn): Clear interface_only before
+       start_function, restore it afterwards.
+
 2002-08-31  Jason Merrill  <jason@redhat.com>
 
        * cp-lang.c (cp_expr_size): Allow initialization from a
index bb0abbdf83fe3dbe62eeafec634be3eff748a958..f3b4d8756cc8509bd1b91354e7cec7e948b99733 100644 (file)
@@ -8445,6 +8445,7 @@ static tree
 start_cleanup_fn ()
 {
   static int counter = 0;
+  int old_interface_only = interface_only;
   int old_interface_unknown = interface_unknown;
   char name[32];
   tree parmtypes;
@@ -8456,6 +8457,7 @@ start_cleanup_fn ()
   /* No need to mangle this.  */
   push_lang_context (lang_name_c);
 
+  interface_only = 0;
   interface_unknown = 1;
 
   /* Build the parameter-types.  */
@@ -8496,6 +8498,7 @@ start_cleanup_fn ()
   start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
 
   interface_unknown = old_interface_unknown;
+  interface_only = old_interface_only;
 
   pop_lang_context ();
 
index b1f4655c3e509a376408a983ba887bb78ff3b0b4..c4900bdf74fb3d4cce3c9697815ed9389ce99eaf 100644 (file)
@@ -1,3 +1,7 @@
+2002-09-04  Jakub Jelinek  <jakub@redhat.com>
+
+       * g++.dg/other/cxa-atexit1.C: New test.
+
 2002-09-03  Neil Booth  <neil@daikokuya.co.uk>
 
        * gcc.dg/cpp/_Pragma4.c: New test.
diff --git a/gcc/testsuite/g++.dg/other/cxa-atexit1.C b/gcc/testsuite/g++.dg/other/cxa-atexit1.C
new file mode 100644 (file)
index 0000000..a51f334
--- /dev/null
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-O2 -fuse-cxa-atexit" }
+
+# 1 "cxa-atexit1.C"
+struct A
+{
+  struct B
+  {
+    B ();
+    ~B ();
+  };
+};
+static A::B b;
+# 1 "cxa-atexit1.h" 1
+#pragma interface
+template <class T> struct C
+{
+  ~C (void);
+};
+struct D : public C<bool>
+{
+  D (void) : C<bool> () { }
+};
+# 55 "cxa-atexit1.C" 2
+
+// { dg-final { scan-assembler-not ".gnu.linkonce.t.__tcf_" } }