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