From cac67c0835c7cf87ca6bb62b5fab0a781ac006b4 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek <jakub@redhat.com>
Date: Thu, 3 Jan 2008 11:28:30 +0100
Subject: [PATCH] re PR c++/34619 (ICE with "-fmudflap" and templates)

	PR c++/34619
	* cgraphunit.c (cgraph_build_static_cdtor): set_cfun back to NULL
	before returning.

	* testsuite/libmudflap.c++/pass61-frag.cxx: New test.

From-SVN: r131302
---
 gcc/ChangeLog                                 |  4 ++++
 gcc/cgraphunit.c                              |  4 +++-
 libmudflap/ChangeLog                          |  5 +++++
 .../testsuite/libmudflap.c++/pass61-frag.cxx  | 20 +++++++++++++++++++
 4 files changed, 32 insertions(+), 1 deletion(-)
 create mode 100644 libmudflap/testsuite/libmudflap.c++/pass61-frag.cxx

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e7098d095f9a..952d851121da 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
 2008-01-03  Jakub Jelinek  <jakub@redhat.com>
 
+	PR c++/34619
+	* cgraphunit.c (cgraph_build_static_cdtor): set_cfun back to NULL
+	before returning.
+
 	PR tree-optimization/29484
 	* tree-inline.c (inline_forbidden_p_2): New function.
 	(inline_forbidden_p): Disallow inlining if some static var
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 7215f1a10f85..5d81f5682d6c 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1,5 +1,6 @@
 /* Callgraph based interprocedural optimizations.
-   Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
+   Free Software Foundation, Inc.
    Contributed by Jan Hubicka
 
 This file is part of GCC.
@@ -1515,6 +1516,7 @@ cgraph_build_static_cdtor (char which, tree body, int priority)
 
   cgraph_add_new_function (decl, false);
   cgraph_mark_needed_node (cgraph_node (decl));
+  set_cfun (NULL);
 }
 
 void
diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog
index 081f14c2ed5e..1c7313a38e42 100644
--- a/libmudflap/ChangeLog
+++ b/libmudflap/ChangeLog
@@ -1,3 +1,8 @@
+2008-01-03  Jakub Jelinek  <jakub@redhat.com>
+
+	PR c++/34619
+	* testsuite/libmudflap.c++/pass61-frag.cxx: New test.
+
 2008-01-01  Volker Reichelt  <v.reichelt@netcologne.de>
 
 	PR libmudflap/26442
diff --git a/libmudflap/testsuite/libmudflap.c++/pass61-frag.cxx b/libmudflap/testsuite/libmudflap.c++/pass61-frag.cxx
new file mode 100644
index 000000000000..03046112c46d
--- /dev/null
+++ b/libmudflap/testsuite/libmudflap.c++/pass61-frag.cxx
@@ -0,0 +1,20 @@
+// PR c++/34619
+// { dg-do compile }
+
+template <typename> struct A
+{
+  typedef int X;
+  static const int N = 1;
+};
+
+template <typename T> struct B
+{
+  typedef typename A <int [A <T>::N]>::X Y;
+  template <typename U> B (Y, U) {}
+};
+
+int main ()
+{
+}
+
+B <int>b (0, 0);
-- 
GitLab