aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-03-10 07:26:34 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-03-10 07:26:34 +0000
commit1d719415f50716bb93edfafb789ee8d2fcf38bd1 (patch)
treea26c21de35f0a5274aeeaf713351a5bc07a214a1
parentf5d9895a069ebee45e9f656c7083bbc5d671baf0 (diff)
downloadgcc-1d719415f50716bb93edfafb789ee8d2fcf38bd1.zip
gcc-1d719415f50716bb93edfafb789ee8d2fcf38bd1.tar.gz
gcc-1d719415f50716bb93edfafb789ee8d2fcf38bd1.tar.bz2
re PR c++/9373 (ICE with -fstrict-aliasing in set_mem_alias_set, at emit-rtl.c:1932)
PR c++/9373 * g++.dg/opt/ptrmem2.C: New test. PR c++/9373 * cp-lang.c (cxx_get_alias_set): Use alias set zero for pointers to member functions. From-SVN: r64070
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/cp-lang.c10
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/opt/ptrmem2.C12
4 files changed, 27 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 257673f..72dcb9d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2003-03-09 Mark Mitchell <mark@codesourcery.com>
+ PR c++/9373
+ * cp-lang.c (cxx_get_alias_set): Use alias set zero for
+ pointers to member functions.
+
PR c++/8534
* decl.c (build_ptrmemfunc_type): Do not allow default arugments
in pointer-to-member-function types.
diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c
index 3671027..b35c31c 100644
--- a/gcc/cp/cp-lang.c
+++ b/gcc/cp/cp-lang.c
@@ -262,8 +262,14 @@ ok_to_generate_alias_set_for_type (tree t)
static HOST_WIDE_INT
cxx_get_alias_set (tree t)
{
- /* It's not yet safe to use alias sets for classes in C++. */
- if (!ok_to_generate_alias_set_for_type(t))
+
+ if (/* It's not yet safe to use alias sets for some classes in C++. */
+ !ok_to_generate_alias_set_for_type (t)
+ /* Nor is it safe to use alias sets for pointers-to-member
+ functions, due to the fact that there may be more than one
+ RECORD_TYPE type corresponding to the same pointer-to-member
+ type. */
+ || TYPE_PTRMEMFUNC_P (t))
return 0;
return c_common_get_alias_set (t);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 517f3b4..976ce7d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2003-03-09 Mark Mitchell <mark@codesourcery.com>
+ PR c++/9373
+ * g++.dg/opt/ptrmem2.C: New test.
+
PR c++/8534
* g++.dg/opt/ptrmem1.C: New test.
diff --git a/gcc/testsuite/g++.dg/opt/ptrmem2.C b/gcc/testsuite/g++.dg/opt/ptrmem2.C
new file mode 100644
index 0000000..19c43f7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/ptrmem2.C
@@ -0,0 +1,12 @@
+typedef unsigned int Mword;
+struct Thread
+{
+ Mword sys_ipc_log();
+ void hook_ipc_vector();
+ unsigned (Thread::*syscall_table)();
+};
+
+void Thread::hook_ipc_vector()
+{
+ syscall_table = &Thread::sys_ipc_log;
+}