aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2002-04-23 19:51:30 -0400
committerJason Merrill <jason@gcc.gnu.org>2002-04-23 19:51:30 -0400
commitb602511f62e6f05166194ce08c1c02b21960930b (patch)
tree4e4586edf49f208a2bbde301aa1bd7c4e5b85dd2
parentcff277959486d14a4bd62a0eea2237654fc8fdce (diff)
downloadgcc-b602511f62e6f05166194ce08c1c02b21960930b.zip
gcc-b602511f62e6f05166194ce08c1c02b21960930b.tar.gz
gcc-b602511f62e6f05166194ce08c1c02b21960930b.tar.bz2
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
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c23
2 files changed, 18 insertions, 11 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 0274561..971d0bd 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2002-04-24 Jason Merrill <jason@redhat.com>
+
+ 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 <jakub@redhat.com>
* 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 58d93bc..fe3b4a5 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