OSDN Git Service

PR c++/44059
[pf3gnuchains/gcc-fork.git] / gcc / config / alpha / elf.h
index d2bf732..57ab91e 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008,
 /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008,
-   2009 Free Software Foundation, Inc.
+   2009, 2010 Free Software Foundation, Inc.
    Contributed by Richard Henderson (rth@tamu.edu).
 
 This file is part of GCC.
    Contributed by Richard Henderson (rth@tamu.edu).
 
 This file is part of GCC.
@@ -284,10 +284,12 @@ do {                                                                      \
     HOST_WIDE_INT size;                                                        \
                                                                        \
     /* For template static data member instantiations or               \
     HOST_WIDE_INT size;                                                        \
                                                                        \
     /* For template static data member instantiations or               \
-       inline fn local statics, use gnu_unique_object so that          \
-       they will be combined even under RTLD_LOCAL.  */                        \
-    if (USE_GNU_UNIQUE_OBJECT                                          \
-       && !DECL_ARTIFICIAL (DECL) && DECL_ONE_ONLY (DECL))             \
+       inline fn local statics and their guard variables, use          \
+       gnu_unique_object so that they will be combined even under      \
+       RTLD_LOCAL.  Don't use gnu_unique_object for typeinfo,          \
+       vtables and other read-only artificial decls.  */               \
+    if (USE_GNU_UNIQUE_OBJECT  && DECL_ONE_ONLY (DECL)                 \
+       && (!DECL_ARTIFICIAL (DECL) || !TREE_READONLY (DECL)))          \
       ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "gnu_unique_object");     \
     else                                                               \
       ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                        \
       ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "gnu_unique_object");     \
     else                                                               \
       ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                        \