]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/8342 (g++.jason/pmf7.C fails on i586-pc-linux-gnu)
authorGlen Nakamura <glen@imodulo.com>
Thu, 21 Nov 2002 21:42:40 +0000 (21:42 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Thu, 21 Nov 2002 21:42:40 +0000 (21:42 +0000)
PR c++/8342
* typeck.c (get_member_function_from_ptrfunc): Make sure that a
SAVE_EXPR for instance_ptr doesn't get evaluated first inside one
of the branches of a COND_EXPR.

From-SVN: r59360

gcc/cp/ChangeLog
gcc/cp/typeck.c

index d370dbd669b444ee92808305c96c7bc906268791..ca4839cb84ac46c465babb0b9249c5f5d0737a6d 100644 (file)
@@ -1,3 +1,10 @@
+2002-11-21  Glen Nakamura  <glen@imodulo.com>
+
+       PR c++/8342
+       * typeck.c (get_member_function_from_ptrfunc): Make sure that a
+       SAVE_EXPR for instance_ptr doesn't get evaluated first inside one
+       of the branches of a COND_EXPR.
+
 2002-11-19  Mark Mitchell  <mark@codesourcery.com>
 
        * pt.c (for_each_template_parm): Free allocated memory.
index 55b6dbda87c5a954d246ec3fba2b08494b735a84..c0e3fa6647261d7682bb20d5aaaefe01bef3cf65 100644 (file)
@@ -2541,6 +2541,7 @@ get_member_function_from_ptrfunc (instance_ptrptr, function)
       tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
 
       tree instance_ptr = *instance_ptrptr;
+      tree instance_save_expr = 0;
       if (instance_ptr == error_mark_node)
        {
          if (TREE_CODE (function) == PTRMEM_CST)
@@ -2560,7 +2561,7 @@ get_member_function_from_ptrfunc (instance_ptrptr, function)
        }
 
       if (TREE_SIDE_EFFECTS (instance_ptr))
-       instance_ptr = save_expr (instance_ptr);
+       instance_ptr = instance_save_expr = save_expr (instance_ptr);
 
       if (TREE_SIDE_EFFECTS (function))
        function = save_expr (function);
@@ -2621,9 +2622,9 @@ get_member_function_from_ptrfunc (instance_ptrptr, function)
       
       /* Make sure this doesn't get evaluated first inside one of the
         branches of the COND_EXPR.  */
-      if (TREE_CODE (instance_ptr) == SAVE_EXPR)
+      if (instance_save_expr)
        e1 = build (COMPOUND_EXPR, TREE_TYPE (e1),
-                   instance_ptr, e1);
+                   instance_save_expr, e1);
 
       function = e1;
     }