From b602511f62e6f05166194ce08c1c02b21960930b Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 23 Apr 2002 19:51:30 -0400 Subject: [PATCH] re PR c++/6395 (gcc-3_1-branch regression for g++.old-deja/g++.jason/synth5.C) PR c++/6395 * decl.c (make_rtl_for_nonlocal_decl): Don't mess with #pragma i/i stuff for comdats. From-SVN: r52696 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 23 ++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 02745616578..971d0bd63f5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-04-24 Jason Merrill + + PR c++/6395 + * decl.c (make_rtl_for_nonlocal_decl): Don't mess with #pragma i/i + stuff for comdats. + 2002-04-23 Jakub Jelinek * parse.y (check_class_key): Allow KEY to be union/enum/struct/class diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 58d93bc143c..fe3b4a57f4c 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -7951,17 +7951,15 @@ make_rtl_for_nonlocal_decl (decl, init, asmspec) DECL_STMT is expanded. */ defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl); - /* We try to defer namespace-scope static constants and template - instantiations so that they are not emitted into the object file - unnecessarily. */ - if ((!DECL_VIRTUAL_P (decl) - && TREE_READONLY (decl) - && DECL_INITIAL (decl) != NULL_TREE - && DECL_INITIAL (decl) != error_mark_node - && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)) - && toplev - && !TREE_PUBLIC (decl)) - || DECL_COMDAT (decl)) + /* We try to defer namespace-scope static constants so that they are + not emitted into the object file unnecessarily. */ + if (!DECL_VIRTUAL_P (decl) + && TREE_READONLY (decl) + && DECL_INITIAL (decl) != NULL_TREE + && DECL_INITIAL (decl) != error_mark_node + && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)) + && toplev + && !TREE_PUBLIC (decl)) { /* Fool with the linkage of static consts according to #pragma interface. */ @@ -7973,6 +7971,9 @@ make_rtl_for_nonlocal_decl (decl, init, asmspec) defer_p = 1; } + /* Likewise for template instantiations. */ + else if (DECL_COMDAT (decl)) + defer_p = 1; /* If we're deferring the variable, we only need to make RTL if there's an ASMSPEC. Otherwise, we'll lazily create it later when -- 2.30.2