aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2004-12-14 02:15:55 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2004-12-14 02:15:55 +0000
commit532b37d9b8042da2c173b24403412e355e05b5a8 (patch)
treea576a3c948c951c87c3cfaad1438a0c51beda0d1 /gcc
parentfd2ad93d8f325612254ac9c4e434e442bc6aba4a (diff)
downloadgcc-532b37d9b8042da2c173b24403412e355e05b5a8.zip
gcc-532b37d9b8042da2c173b24403412e355e05b5a8.tar.gz
gcc-532b37d9b8042da2c173b24403412e355e05b5a8.tar.bz2
re PR target/18925 (Invalid gprel relocation in PIC)
PR c++/18925 * class.c (layout_class_type): Determine the visibility of static data members. PR c++/18925 * g++.dg/ext/visibility/staticdatamem.C: New test. From-SVN: r92120
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/class.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C20
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 55b467c..71cce5f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2004-12-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/18925
+ * class.c (layout_class_type): Determine the visibility of static
+ data members.
+
2004-12-12 Roger Sayle <roger@eyesopen.com>
PR middle-end/12454
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 886d301..f7e5c7b 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4553,7 +4553,13 @@ layout_class_type (tree t, tree *virtuals_p)
At this point, finish_record_layout will be called, but
S1 is still incomplete.) */
if (TREE_CODE (field) == VAR_DECL)
- maybe_register_incomplete_var (field);
+ {
+ maybe_register_incomplete_var (field);
+ /* The visibility of static data members is determined
+ at their point of declaration, not their point of
+ definition. */
+ determine_visibility (field);
+ }
continue;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2341dec..957c5eb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/18925
+ * g++.dg/ext/visibility/staticdatamem.C: New test.
+
2004-12-13 Kelley Cook <kcook@gcc.gnu.org>
* gcc.target/xstormy16/below100.S: Remove DOS line endings.
diff --git a/gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C b/gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C
new file mode 100644
index 0000000..4ec9479
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C
@@ -0,0 +1,20 @@
+// PR c++/18925
+// { dg-do compile { target ia64-*-linux* } }
+// { dg-options "-fPIC -fvisibility=hidden" }
+// { dg-final { scan-assembler-not "gprel" } }
+
+class __attribute__ ((visibility("default"))) Type
+{
+ private:
+ static long _staticTypeCount;
+ public:
+ Type() { _staticTypeCount++; }
+ ~Type();
+};
+
+long Type::_staticTypeCount = 0;
+
+Type::~Type()
+{
+ _staticTypeCount--;
+}