optimize.c (initialize_inlined_parameters): Don't set TREE_READONLY for a VAR_DECL...
authorMark Mitchell <mark@codesourcery.com>
Wed, 23 May 2001 02:14:51 +0000 (02:14 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Wed, 23 May 2001 02:14:51 +0000 (02:14 +0000)
* optimize.c (initialize_inlined_parameters): Don't set
TREE_READONLY for a VAR_DECL taking the place of an inlined
PARM_DECL.

From-SVN: r42480

gcc/cp/ChangeLog
gcc/cp/optimize.c

index 956d01708c36a63cc62430600961167a08349282..4f3391eca8a62942f79d1063f795106e4c0fd882 100644 (file)
@@ -1,3 +1,9 @@
+2001-05-22  Mark Mitchell  <mark@codesourcery.com>
+
+       * optimize.c (initialize_inlined_parameters): Don't set
+       TREE_READONLY for a VAR_DECL taking the place of an inlined
+       PARM_DECL.
+
 2001-05-22  Jason Merrill  <jason_merrill@redhat.com>
 
        * class.c, cp-tree.h, rtti.c: Remove com_interface attribute support.
index b6b03b9423d57edd3912201e1eaa63d06b369fe5..f81d7e38ae33a3414b3840e96eb2812ef50e9f75 100644 (file)
@@ -498,6 +498,18 @@ initialize_inlined_parameters (id, args, fn)
        DECL_INITIAL (var) = value;
       else
        {
+         /* Even if P was TREE_READONLY, the new VAR should not be.
+            In the original code, we would have constructed a
+            temporary, and then the function body would have never
+            changed the value of P.  However, now, we will be
+            constructing VAR directly.  The constructor body may
+            change its value multiple times as it is being
+            constructed.  Therefore, it must not be TREE_READONLY;
+            the back-end assumes that TREE_READONLY variable is
+            assigned to only once.  */
+         TREE_READONLY (var) = 0;
+
+         /* Build a run-time initialization.  */
          init_stmt = build_stmt (EXPR_STMT,
                                  build (INIT_EXPR, TREE_TYPE (p),
                                         var, value));