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