From 5f11a50a53603f4888a981e4bc162ef9069bbcd8 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Fri, 11 Mar 2011 15:59:42 +0000 Subject: [PATCH] re PR c++/48073 (ICE with -flto in templated C++ code) 2011-03-11 Richard Guenther PR lto/48073 * tree.c (find_decls_types_r): Do not walk types only reachable from IDENTIFIER_NODEs. * g++.dg/lto/20110311-1_0.C: New testcase. From-SVN: r170875 --- gcc/ChangeLog | 6 +++ gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/g++.dg/lto/20110311-1_0.C | 51 +++++++++++++++++++++++++ gcc/tree.c | 3 +- 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/lto/20110311-1_0.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1da3589cc3f..dea9da94d07 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-03-11 Richard Guenther + + PR lto/48073 + * tree.c (find_decls_types_r): Do not walk types only reachable + from IDENTIFIER_NODEs. + 2011-03-11 Jakub Jelinek PR middle-end/48044 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7e7b9243da5..69b6ad51d63 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-03-11 Richard Guenther + + PR lto/48073 + * g++.dg/lto/20110311-1_0.C: New testcase. + 2011-03-11 Jakub Jelinek PR c++/48035 diff --git a/gcc/testsuite/g++.dg/lto/20110311-1_0.C b/gcc/testsuite/g++.dg/lto/20110311-1_0.C new file mode 100644 index 00000000000..c63951e5bd8 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/20110311-1_0.C @@ -0,0 +1,51 @@ +/* { dg-lto-do link } */ +/* { dg-extra-ld-options "-r -nostdlib" } */ + +struct NullType {}; + +template +struct TList +{ + typedef T Head; + typedef U Tail; +}; + +template +struct TListLength {}; + +template +struct TListLength > +{ + enum + { + Ret = 1 + TListLength::Ret + }; +}; + +template <> +struct TListLength +{ + enum + { + Ret = 0 + }; +}; + +template +class DDQMC +{ +public: + int* moves[TListLength::Ret]; + inline DDQMC(); +private: +}; + +template +DDQMC::DDQMC() +{ +} + +int main() +{ + typedef DDQMC< TList > > mytype; +} diff --git a/gcc/tree.c b/gcc/tree.c index d923ac89a76..be469909995 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -4822,7 +4822,8 @@ find_decls_types_r (tree *tp, int *ws, void *data) fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld); } - fld_worklist_push (TREE_TYPE (t), fld); + if (TREE_CODE (t) != IDENTIFIER_NODE) + fld_worklist_push (TREE_TYPE (t), fld); return NULL_TREE; } -- 2.30.2