From 0a2695dba70df002f4ed8c0bad2a7c3403dd43df Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Fri, 12 Nov 2004 16:37:52 +0000 Subject: [PATCH] re PR c++/18416 (ICE in import_export_decl) PR c++/18416 * passes.c (rest_of_decl_compilation): Do not look at DECL_RTL when deciding whether to pass a variable to cgraph_varpool_finalize_decl or assemble_variable. * toplev.c (check_global_declarations): Do not clear DECL_RTL. PR c++/18416 * g++.dg/init/global1.C: New test. From-SVN: r90532 --- gcc/ChangeLog | 8 ++++++++ gcc/passes.c | 9 +-------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/init/global1.C | 16 ++++++++++++++++ gcc/toplev.c | 7 ------- 5 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 gcc/testsuite/g++.dg/init/global1.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9994394..3710463 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2004-11-12 Mark Mitchell + + PR c++/18416 + * passes.c (rest_of_decl_compilation): Do not look at DECL_RTL + when deciding whether to pass a variable to + cgraph_varpool_finalize_decl or assemble_variable. + * toplev.c (check_global_declarations): Do not clear DECL_RTL. + 2004-11-12 Kazu Hirata * tree-vectorizer.c: Fix a comment typo. diff --git a/gcc/passes.c b/gcc/passes.c index 9a486b7..e634372 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -229,14 +229,7 @@ rest_of_decl_compilation (tree decl, && !DECL_EXTERNAL (decl)) { if (flag_unit_at_a_time && !cgraph_global_info_ready - && TREE_CODE (decl) != FUNCTION_DECL && top_level - /* If we defer processing of decls that have had their - DECL_RTL set above (say, in make_decl_rtl), - check_global_declarations() will clear it before - assemble_variable has a chance to act on it. This - would remove all traces of the register name in a - global register variable, for example. */ - && !DECL_RTL_SET_P (decl)) + && TREE_CODE (decl) != FUNCTION_DECL && top_level) cgraph_varpool_finalize_decl (decl); else assemble_variable (decl, top_level, at_end, 0); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f04c8ab..d24479b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-11-12 Mark Mitchell + + PR c++/18416 + * g++.dg/init/global1.C: New test. + 2004-11-12 Eric Botcazou * gcc.c-torture/execute/20041112-1.c: New test. diff --git a/gcc/testsuite/g++.dg/init/global1.C b/gcc/testsuite/g++.dg/init/global1.C new file mode 100644 index 0000000..21f1cac --- /dev/null +++ b/gcc/testsuite/g++.dg/init/global1.C @@ -0,0 +1,16 @@ +// PR c++/18416 + +class errarg { + enum { EMPTY } type; +public: + errarg(); +}; +extern errarg empty_errarg; +extern void errprint(const char *, + const errarg &arg1 = empty_errarg, + const errarg &arg2 = empty_errarg, + const errarg &arg3 = empty_errarg); +errarg::errarg() : type(EMPTY) +{ +} +errarg empty_errarg; diff --git a/gcc/toplev.c b/gcc/toplev.c index 4ce593a..29ae065 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -819,13 +819,6 @@ check_global_declarations (tree *vec, int len) { decl = vec[i]; - if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl) - && ! TREE_ASM_WRITTEN (decl)) - /* Cancel the RTL for this decl so that, if debugging info - output for global variables is still to come, - this one will be omitted. */ - SET_DECL_RTL (decl, NULL_RTX); - /* Warn about any function declared static but not defined. We don't warn about variables, -- 2.7.4