(expand_builtin, case BUILT_IN_NEXT_ARG): Strip off INDIRECT_REF when
authorRichard Kenner <kenner@gcc.gnu.org>
Wed, 31 Jan 1996 13:42:23 +0000 (08:42 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Wed, 31 Jan 1996 13:42:23 +0000 (08:42 -0500)
checking second arg.

From-SVN: r11139

gcc/expr.c

index 2fe100c73ec1571d42c9c507aaf1375d07368fe9..342fa3751356c643ce60e03e0771cef37817416e 100644 (file)
@@ -8047,10 +8047,13 @@ expand_builtin (exp, target, subtarget, mode, ignore)
            tree arg = TREE_VALUE (arglist);
 
            /* Strip off all nops for the sake of the comparison.  This
-              is not quite the same as STRIP_NOPS.  It does more.  */
+              is not quite the same as STRIP_NOPS.  It does more.  
+              We must also strip off INDIRECT_EXPR for C++ reference
+              parameters.  */
            while (TREE_CODE (arg) == NOP_EXPR
                   || TREE_CODE (arg) == CONVERT_EXPR
-                  || TREE_CODE (arg) == NON_LVALUE_EXPR)
+                  || TREE_CODE (arg) == NON_LVALUE_EXPR
+                  || TREE_CODE (arg) == INDIRECT_REF)
              arg = TREE_OPERAND (arg, 0);
            if (arg != last_parm)
              warning ("second parameter of `va_start' not last named argument");