re PR c++/17155 (Another link problem with function-local classes)
authorMark Mitchell <mark@codesourcery.com>
Wed, 25 Aug 2004 20:06:30 +0000 (20:06 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Wed, 25 Aug 2004 20:06:30 +0000 (20:06 +0000)
PR c++/17155
* lex.c (build_lang_decl): Set DECL_NO_STATIC_CHAIN for all C++
functions.

PR c++/17155
* g++.dg/inherit/local2.C: New test.

From-SVN: r86571

gcc/cp/ChangeLog
gcc/cp/lex.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/inherit/local2.C [new file with mode: 0644]

index 3b5498e2635e3fcc32e69296fe9e270ba1389f51..c895d54698c307caf082b3b392535d948a4b0426 100644 (file)
@@ -1,5 +1,9 @@
 2004-08-25  Mark Mitchell  <mark@codesourcery.com>
 
+       PR c++/17155
+       * lex.c (build_lang_decl): Set DECL_NO_STATIC_CHAIN for all C++
+       functions.
+
        * mangle.c (get_identifier_nocopy): Add cast.
 
        * cp-tree.h (mangle_type): Remove.
index fe220f2ae24a67a88971d17813a31f74df7afa3f..fc0a5abb5c3dc7776a01875ba30fea38ccc602ee 100644 (file)
@@ -649,6 +649,11 @@ build_lang_decl (enum tree_code code, tree name, tree type)
   t = build_decl (code, name, type);
   retrofit_lang_decl (t);
 
+  /* All nesting of C++ functions is lexical; there is never a "static
+     chain" in the sense of GNU C nested functions.  */
+  if (code == FUNCTION_DECL) 
+    DECL_NO_STATIC_CHAIN (t) = 1;
+
   return t;
 }
 
index 888b38a94d2191fe384b2bf1e49b39c086f8beb6..0b6efa8dd15fb39577dd28056d06b18b0946f28c 100644 (file)
@@ -1,3 +1,8 @@
+2004-08-25  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/17155
+       * g++.dg/inherit/local2.C: New test.
+
 2004-08-25  Paul Brook  <paul@codesourcery.com>
 
        PR fortran/17144
diff --git a/gcc/testsuite/g++.dg/inherit/local2.C b/gcc/testsuite/g++.dg/inherit/local2.C
new file mode 100644 (file)
index 0000000..82d812c
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/17155
+// { dg-do link }
+
+struct A {
+  virtual ~A() {}
+};
+
+
+void tsk_tsk(void)
+{
+  struct B : public A {
+    B(int) {}
+  };
+}
+
+int main () {}