From f893c16eeab350c284d0c079843ad32b3bb3bc8d Mon Sep 17 00:00:00 2001
From: Jason Merrill <jason@redhat.com>
Date: Wed, 23 Jan 2002 07:44:45 -0500
Subject: [PATCH] re PR c++/3331 (member pointer inherits const)

        * tree.c (build1): Don't set TREE_READONLY on INDIRECT_REF.
        PR c++/3331
        * cp/init.c (resolve_offset_ref): Use build_indirect_ref.

From-SVN: r49132
---
 gcc/ChangeLog    | 2 ++
 gcc/cp/ChangeLog | 7 ++++++-
 gcc/cp/init.c    | 5 ++---
 gcc/tree.c       | 6 ++++++
 4 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7d0e69cb7bc7..2d32d85660b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,7 @@
 2002-01-23  Jason Merrill  <jason@redhat.com>
 
+	* tree.c (build1): Don't set TREE_READONLY on INDIRECT_REF.
+
 	* function.c (assign_parms): Don't put args of inline functions
 	into registers when not optimizing.
 
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ff79b1338279..11d77ed87799 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,7 +1,12 @@
-2002-01-22  Jason Merrill  <jason@redhat.com>
+2002-01-23  Jason Merrill  <jason@redhat.com>
+
+	PR c++/3331
+	* init.c (resolve_offset_ref): Use build_indirect_ref.
 
 	* decl2.c (grokclassfn): Don't set DECL_REGISTER on 'this'.
 
+2002-01-22  Jason Merrill  <jason@redhat.com>
+
 	* parse.y (function_body): Suppress the block for the outermost
 	curly braces.
 	* decl.c (pushdecl): Don't try to skip it.
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index f159f446e365..4dd0f9d8ed15 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1880,9 +1880,8 @@ resolve_offset_ref (exp)
       
       member = cp_convert (ptrdiff_type_node, member);
 
-      return build1 (INDIRECT_REF, type,
-		     build (PLUS_EXPR, build_pointer_type (type),
-			    addr, member));
+      addr = build (PLUS_EXPR, build_pointer_type (type), addr, member);
+      return build_indirect_ref (addr, 0);
     }
   else if (TYPE_PTRMEMFUNC_P (TREE_TYPE (member)))
     {
diff --git a/gcc/tree.c b/gcc/tree.c
index 53d5889bbbd0..adaa9ab5d391 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -2507,6 +2507,12 @@ build1 (code, type, node)
       TREE_READONLY (t) = 0;
       break;
 
+    case INDIRECT_REF:
+      /* Whether a dereference is readonly has nothing to do with whether
+	 its operand is readonly.  */
+      TREE_READONLY (t) = 0;
+      break;
+
     default:
       if (TREE_CODE_CLASS (code) == '1' && node && TREE_CONSTANT (node))
 	TREE_CONSTANT (t) = 1;
-- 
GitLab