re PR middle-end/18683 (seg fault in local allocate)
authorRoger Sayle <roger@eyesopen.com>
Tue, 21 Dec 2004 01:37:35 +0000 (01:37 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Tue, 21 Dec 2004 01:37:35 +0000 (01:37 +0000)
PR middle-end/18683
* function.c (pop_function_context_from): Don't reset reg_renumber.

* g++.dg/opt/pr18683-1.C: New test case.

From-SVN: r92452

gcc/ChangeLog
gcc/function.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr18683-1.C [new file with mode: 0644]

index d5e223c5b32b47e635863dcde668c50acfcc95d7..5026be960a782d6fe8b88def708d7d93d0050135 100644 (file)
@@ -1,3 +1,8 @@
+2004-12-20  Roger Sayle  <roger@eyesopen.com>
+
+       PR middle-end/18683
+       * function.c (pop_function_context_from): Don't reset reg_renumber.
+
 2004-12-20  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        PR middle-end/18776
index 9251071d6f8bad1e55fa62cf49e86f4a94aaf9e4..a7dc2236bf66c62a14f68906ff1c054ca64a38a5 100644 (file)
@@ -286,7 +286,6 @@ pop_function_context_from (tree context ATTRIBUTE_UNUSED)
   outer_function_chain = p->outer;
 
   current_function_decl = p->decl;
-  reg_renumber = 0;
 
   lang_hooks.function.leave_nested (p);
 
index d05d4ef1422b8724ad294f162ab9bfd9cd1d20a8..138785b2a89e542fbb384479f18b61a8ebf4dd5b 100644 (file)
@@ -1,3 +1,8 @@
+2004-12-20  Roger Sayle  <roger@eyesopen.com>
+
+       PR middle-end/18683
+       * g++.dg/opt/pr18683-1.C: New test case.
+
 2004-12-20  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR other/19093
diff --git a/gcc/testsuite/g++.dg/opt/pr18683-1.C b/gcc/testsuite/g++.dg/opt/pr18683-1.C
new file mode 100644 (file)
index 0000000..847a4d3
--- /dev/null
@@ -0,0 +1,29 @@
+// PR middle-end/18683
+// { dg-do compile }
+// { dg-options "-O0" }
+
+template<typename _CharT>
+struct basic_ostream
+{
+  basic_ostream& operator<<(int __n);
+};
+
+extern basic_ostream<char>  cout;
+
+template<int> struct linear_congruential
+{
+  template<class CharT>
+  friend basic_ostream<CharT>&
+  operator<<(basic_ostream<CharT>& os,
+             const linear_congruential& lcg)
+  {
+    return os << 1;
+  }
+};
+
+void instantiate_all()
+{
+  linear_congruential<0> lcf;
+  cout << lcf;
+}
+