builtins.c (std_expand_builtin_va_arg): Remove.
authorRichard Henderson <rth@redhat.com>
Fri, 16 Jul 2004 23:25:51 +0000 (16:25 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 16 Jul 2004 23:25:51 +0000 (16:25 -0700)
        * builtins.c (std_expand_builtin_va_arg): Remove.
        (expand_builtin_va_arg): Remove.
        * expr.h: Don't declare them.
        * gimplify.c (mark_decls_volatile_r): Remove.
        (copy_if_shared_r): Don't call it.
        * target-def.h: Don't test EXPAND_BUILTIN_VA_ARG.
        * expr.c (expand_expr_real_1): Don't handle VA_ARG_EXPR.
        * gimple-low.c (lower_stmt): Likewise.
        * tree-cfg.c (cfg_remove_useless_stmts_bb): Likewise.
        * tree-gimple.c (is_gimple_tmp_rhs, is_gimple_stmt): Likewise.
        * tree-ssa-operands.c (get_expr_operands): Likewise.
        * doc/tm.texi (TARGET_GIMPLIFY_VA_ARG_EXPR): Don't mention
        EXPAND_BUILTIN_VA_ARG.
        * system.h (EXPAND_BUILTIN_VA_ARG): Poison.
        * config/alpha/alpha.h, config/alpha/unicosmk.h, config/i386/i386.h,
        config/ia64/ia64.h, config/rs6000/rs6000.h, config/s390/s390.h,
        config/sparc/sparc.h (EXPAND_BUILTIN_VA_ARG): Remove.

From-SVN: r84842

19 files changed:
gcc/ChangeLog
gcc/builtins.c
gcc/config/alpha/alpha.h
gcc/config/alpha/unicosmk.h
gcc/config/i386/i386.h
gcc/config/ia64/ia64.h
gcc/config/rs6000/rs6000.h
gcc/config/s390/s390.h
gcc/config/sparc/sparc.h
gcc/doc/tm.texi
gcc/expr.c
gcc/expr.h
gcc/gimple-low.c
gcc/gimplify.c
gcc/system.h
gcc/target-def.h
gcc/tree-cfg.c
gcc/tree-gimple.c
gcc/tree-ssa-operands.c

index a89927f3f143e634e4470f5d496b166c06a519a8..34dfd963b07f1b05b7da4b71faddd5d4dd499a30 100644 (file)
@@ -1,3 +1,23 @@
+2004-07-16  Richard Henderson  <rth@redhat.com>
+
+       * builtins.c (std_expand_builtin_va_arg): Remove.
+       (expand_builtin_va_arg): Remove.
+       * expr.h: Don't declare them.
+       * gimplify.c (mark_decls_volatile_r): Remove.
+       (copy_if_shared_r): Don't call it.
+       * target-def.h: Don't test EXPAND_BUILTIN_VA_ARG.
+       * expr.c (expand_expr_real_1): Don't handle VA_ARG_EXPR.
+       * gimple-low.c (lower_stmt): Likewise.
+       * tree-cfg.c (cfg_remove_useless_stmts_bb): Likewise.
+       * tree-gimple.c (is_gimple_tmp_rhs, is_gimple_stmt): Likewise.
+       * tree-ssa-operands.c (get_expr_operands): Likewise.
+       * doc/tm.texi (TARGET_GIMPLIFY_VA_ARG_EXPR): Don't mention
+       EXPAND_BUILTIN_VA_ARG.
+       * system.h (EXPAND_BUILTIN_VA_ARG): Poison.
+       * config/alpha/alpha.h, config/alpha/unicosmk.h, config/i386/i386.h,
+       config/ia64/ia64.h, config/rs6000/rs6000.h, config/s390/s390.h,
+       config/sparc/sparc.h (EXPAND_BUILTIN_VA_ARG): Remove.
+
 2004-07-16  Daniel Berlin  <dberlin@dberlin.org>
 
        * tree-ssa-pre.c (insert_aux): Break out if we hit
index d83b0de27dea0e57c8eabe702b05bcee4f125ca2..de2cca6de17c1589bc804b7027ab107ba607a1d0 100644 (file)
@@ -4288,186 +4288,6 @@ expand_builtin_va_start (tree arglist)
 /* The "standard" implementation of va_arg: read the value from the
    current (padded) address and increment by the (padded) size.  */
 
-rtx
-std_expand_builtin_va_arg (tree valist, tree type)
-{
-  tree addr_tree, t, type_size = NULL;
-  tree align, alignm1;
-  tree rounded_size;
-  rtx addr;
-  HOST_WIDE_INT boundary;
-
-  /* Compute the rounded size of the type.  */
-  align = size_int (PARM_BOUNDARY / BITS_PER_UNIT);
-  alignm1 = size_int (PARM_BOUNDARY / BITS_PER_UNIT - 1);
-  boundary = FUNCTION_ARG_BOUNDARY (TYPE_MODE (type), type);
-
-  /* va_list pointer is aligned to PARM_BOUNDARY.  If argument actually
-     requires greater alignment, we must perform dynamic alignment.  */
-
-  if (boundary > PARM_BOUNDARY)
-    {
-      if (!PAD_VARARGS_DOWN)
-       {
-         t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist,
-                     build2 (PLUS_EXPR, TREE_TYPE (valist), valist,
-                             build_int_2 (boundary / BITS_PER_UNIT - 1, 0)));
-         TREE_SIDE_EFFECTS (t) = 1;
-         expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-       }
-      t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist,
-                 build2 (BIT_AND_EXPR, TREE_TYPE (valist), valist,
-                         build_int_2 (~(boundary / BITS_PER_UNIT - 1), -1)));
-      TREE_SIDE_EFFECTS (t) = 1;
-      expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-    }
-  if (type == error_mark_node
-      || (type_size = TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (type))) == NULL
-      || TREE_OVERFLOW (type_size))
-    rounded_size = size_zero_node;
-  else
-    {
-      rounded_size = fold (build2 (PLUS_EXPR, sizetype, type_size, alignm1));
-      rounded_size = fold (build2 (TRUNC_DIV_EXPR, sizetype,
-                                  rounded_size, align));
-      rounded_size = fold (build2 (MULT_EXPR, sizetype,
-                                  rounded_size, align));
-    }
-
-  /* Get AP.  */
-  addr_tree = valist;
-  if (PAD_VARARGS_DOWN && ! integer_zerop (rounded_size))
-    {
-      /* Small args are padded downward.  */
-      addr_tree = fold (build2 (PLUS_EXPR, TREE_TYPE (addr_tree), addr_tree,
-                               fold (build3 (COND_EXPR, sizetype,
-                                             fold (build2 (GT_EXPR, sizetype,
-                                                           rounded_size,
-                                                           align)),
-                                             size_zero_node,
-                                             fold (build2 (MINUS_EXPR,
-                                                           sizetype,
-                                                           rounded_size,
-                                                           type_size))))));
-    }
-
-  addr = expand_expr (addr_tree, NULL_RTX, Pmode, EXPAND_NORMAL);
-  addr = copy_to_reg (addr);
-
-  /* Compute new value for AP.  */
-  if (! integer_zerop (rounded_size))
-    {
-      t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist,
-                 build2 (PLUS_EXPR, TREE_TYPE (valist), valist,
-                         rounded_size));
-      TREE_SIDE_EFFECTS (t) = 1;
-      expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-    }
-
-  return addr;
-}
-
-/* Expand __builtin_va_arg, which is not really a builtin function, but
-   a very special sort of operator.  */
-
-rtx
-expand_builtin_va_arg (tree valist, tree type)
-{
-  rtx addr, result;
-  tree promoted_type, want_va_type, have_va_type;
-
-  /* Verify that valist is of the proper type.  */
-
-  want_va_type = va_list_type_node;
-  have_va_type = TREE_TYPE (valist);
-  if (TREE_CODE (want_va_type) == ARRAY_TYPE)
-    {
-      /* If va_list is an array type, the argument may have decayed
-        to a pointer type, e.g. by being passed to another function.
-         In that case, unwrap both types so that we can compare the
-        underlying records.  */
-      if (TREE_CODE (have_va_type) == ARRAY_TYPE
-         || TREE_CODE (have_va_type) == POINTER_TYPE)
-       {
-         want_va_type = TREE_TYPE (want_va_type);
-         have_va_type = TREE_TYPE (have_va_type);
-       }
-    }
-  if (TYPE_MAIN_VARIANT (want_va_type) != TYPE_MAIN_VARIANT (have_va_type))
-    {
-      error ("first argument to `va_arg' not of type `va_list'");
-      addr = const0_rtx;
-    }
-
-  /* Generate a diagnostic for requesting data of a type that cannot
-     be passed through `...' due to type promotion at the call site.  */
-  else if ((promoted_type = lang_hooks.types.type_promotes_to (type))
-          != type)
-    {
-      const char *name = "<anonymous type>", *pname = 0;
-      static bool gave_help;
-
-      if (TYPE_NAME (type))
-       {
-         if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
-           name = IDENTIFIER_POINTER (TYPE_NAME (type));
-         else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
-                  && DECL_NAME (TYPE_NAME (type)))
-           name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
-       }
-      if (TYPE_NAME (promoted_type))
-       {
-         if (TREE_CODE (TYPE_NAME (promoted_type)) == IDENTIFIER_NODE)
-           pname = IDENTIFIER_POINTER (TYPE_NAME (promoted_type));
-         else if (TREE_CODE (TYPE_NAME (promoted_type)) == TYPE_DECL
-                  && DECL_NAME (TYPE_NAME (promoted_type)))
-           pname = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (promoted_type)));
-       }
-
-      /* Unfortunately, this is merely undefined, rather than a constraint
-        violation, so we cannot make this an error.  If this call is never
-        executed, the program is still strictly conforming.  */
-      warning ("`%s' is promoted to `%s' when passed through `...'",
-              name, pname);
-      if (! gave_help)
-       {
-         gave_help = true;
-         warning ("(so you should pass `%s' not `%s' to `va_arg')",
-                  pname, name);
-       }
-
-      /* We can, however, treat "undefined" any way we please.
-        Call abort to encourage the user to fix the program.  */
-      inform ("if this code is reached, the program will abort");
-      expand_builtin_trap ();
-
-      /* This is dead code, but go ahead and finish so that the
-        mode of the result comes out right.  */
-      addr = const0_rtx;
-    }
-  else
-    {
-      /* Make it easier for the backends by protecting the valist argument
-         from multiple evaluations.  */
-      valist = stabilize_va_list (valist, 0);
-
-#ifdef EXPAND_BUILTIN_VA_ARG
-      addr = EXPAND_BUILTIN_VA_ARG (valist, type);
-#else
-      addr = std_expand_builtin_va_arg (valist, type);
-#endif
-    }
-
-  addr = convert_memory_address (Pmode, addr);
-
-  result = gen_rtx_MEM (TYPE_MODE (type), addr);
-  set_mem_alias_set (result, get_varargs_alias_set ());
-
-  return result;
-}
-
-/* Like std_expand_builtin_va_arg, but gimplify instead of expanding.  */
-
 tree
 std_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
 {
@@ -4550,7 +4370,8 @@ dummy_object (tree type)
   return build1 (INDIRECT_REF, type, t);
 }
 
-/* Like expand_builtin_va_arg, but gimplify instead of expanding.  */
+/* Gimplify __builtin_va_arg, aka VA_ARG_EXPR, which is not really a
+   builtin function, but a very special sort of operator.  */
 
 enum gimplify_status
 gimplify_va_arg_expr (tree *expr_p, tree *pre_p, tree *post_p)
index b77a9bce2901ae1b9d472ac892cc1b1b429fe8c0..15b3a09d7a8f550356851e8801b0f9472d4d091c 100644 (file)
@@ -1675,9 +1675,6 @@ do {                                              \
 /* Implement `va_start' for varargs and stdarg.  */
 #define EXPAND_BUILTIN_VA_START(valist, nextarg) \
   alpha_va_start (valist, nextarg)
-
-/* Implement `va_arg'.  */
-#define EXPAND_BUILTIN_VA_ARG(valist, type) (abort (), NULL_RTX)
 \f
 /* Tell collect that the object format is ECOFF.  */
 #define OBJECT_FORMAT_COFF
index 7c9a6073fa653e03452922d424c17ac307905d67..c0aac5330e879f1e9998b1b8e2ba29d67b519dfc 100644 (file)
@@ -483,6 +483,5 @@ ssib_section (void)         \
 #define LIB_SPEC "-L/opt/ctl/craylibs/craylibs -lu -lm -lc -lsma"
 
 #undef EXPAND_BUILTIN_VA_START
-#undef EXPAND_BUILTIN_VA_ARG
 
 #define EH_FRAME_IN_DATA_SECTION 1
index c85c8892893ee1991653cdb1a35b60363a0e856f..da73bfefcd986582b4af328ec2a37decab8a68cf 100644 (file)
@@ -1769,9 +1769,6 @@ typedef struct ix86_args {
 #define EXPAND_BUILTIN_VA_START(VALIST, NEXTARG) \
   ix86_va_start (VALIST, NEXTARG)
 
-/* Implement `va_arg'.  */
-#define EXPAND_BUILTIN_VA_ARG(VALIST, TYPE) (abort (), NULL_RTX)
-
 #define TARGET_ASM_FILE_END ix86_file_end
 #define NEED_INDICATE_EXEC_STACK 0
 
index a0ff48065946b06a62ef56268f18732094f79b8a..d2a9ca3769f2727639fe1892998907b7b16461cd 100644 (file)
@@ -1386,9 +1386,6 @@ do {                                                                      \
 (((REGNO) >= AR_ARG_FIRST && (REGNO) < (AR_ARG_FIRST + MAX_ARGUMENT_SLOTS)) \
  || ((REGNO) >= FR_ARG_FIRST && (REGNO) < (FR_ARG_FIRST + MAX_ARGUMENT_SLOTS)))
 \f
-/* Implement `va_arg'.  */
-#define EXPAND_BUILTIN_VA_ARG(valist, type) (abort (), NULL_RTX)
-\f
 /* How Scalar Function Values are Returned */
 
 /* A C expression to create an RTX representing the place where a function
index fdf3d4afef9b636f3b90a5cfd072e4deb4457894..f69b10cc3c010a37be70b30c6aa91513bd570ec5 100644 (file)
@@ -1754,9 +1754,6 @@ typedef struct rs6000_args
 #define EXPAND_BUILTIN_VA_START(valist, nextarg) \
   rs6000_va_start (valist, nextarg)
 
-/* Implement `va_arg'.  */
-#define EXPAND_BUILTIN_VA_ARG(valist, type) (abort (), NULL_RTX)
-
 #define PAD_VARARGS_DOWN \
    (FUNCTION_ARG_PADDING (TYPE_MODE (type), type) == downward)
 
index 3c32f0c1588f5f0151f5dbc796ffd88dfb050d71..f4d91fa13bb9f3b38f5f0459c4ccedaf2816cc68 100644 (file)
@@ -704,10 +704,6 @@ CUMULATIVE_ARGS;
 #define EXPAND_BUILTIN_VA_START(valist, nextarg) \
   s390_va_start (valist, nextarg)
 
-#define EXPAND_BUILTIN_VA_ARG(valist, type) \
-  (abort (), NULL_RTX)
-
-
 /* Trampolines for nested functions.  */
 
 #define TRAMPOLINE_SIZE (TARGET_64BIT ? 36 : 20)
index 4b073377869324ddeb34ae611ffd90dcd4f92b33..db72f3511114172f55107a13278df39c527f67c3 100644 (file)
@@ -1860,9 +1860,6 @@ do {                                                                      \
 #define EXPAND_BUILTIN_VA_START(valist, nextarg) \
   sparc_va_start (valist, nextarg)
 
-/* Implement `va_arg'.  */
-#define EXPAND_BUILTIN_VA_ARG(valist, type) (abort (), NULL_RTX)
-
 /* Generate RTL to flush the register windows so as to make arbitrary frames
    available.  */
 #define SETUP_FRAME_ADDRESSES()                \
index dad9e9a8a500829d23f7e222350ba9334c3e67d8..30c58d6511e7747118523c6210cf407a59c56bb4 100644 (file)
@@ -3882,16 +3882,6 @@ This hook performs target-specific gimplification of
 @code{VA_ARG_EXPR}.  The first two parameters correspond to the
 arguments to @code{va_arg}; the latter two are as in
 @code{gimplify.c:gimplify_expr}.
-
-You only need to define this hook if you previously defined
-@code{EXPAND_BUILTIN_VA_ARG}; it is pretty easy to reuse the same code
-for both.  One significant difference is that
-@code{EXPAND_BUILTIN_VA_ARG} returns an address, whereas this hook
-produces an expression of type @var{type}, usually an @code{INDIRECT_REF}.
-
-Once you define this macro, you can change
-@code{EXPAND_BUILTIN_VA_ARG} to just abort, as it should never be
-called.
 @end deftypefn
 
 @node Scalar Return
index dd1aad9cc329727517f9b9679605c1777a69a933..417f69cfccced7fd809b80b928bebc70f7793e4c 100644 (file)
@@ -8541,12 +8541,10 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
     case WITH_CLEANUP_EXPR:
     case CLEANUP_POINT_EXPR:
     case TARGET_EXPR:
+    case VA_ARG_EXPR:
       /* Lowered by gimplify.c.  */
       abort ();
 
-    case VA_ARG_EXPR:
-      return expand_builtin_va_arg (TREE_OPERAND (exp, 0), type);
-
     case EXC_PTR_EXPR:
       return get_exception_pointer (cfun);
 
index ebd30c3b6f9b75a3959cc198e1f3c50ff5ec69e1..d3fab31fb4ab4b9a497933f9f8619af3a2566c0a 100644 (file)
@@ -351,8 +351,6 @@ extern rtx gen_cond_trap (enum rtx_code, rtx, rtx, rtx);
 extern rtx expand_builtin (tree, rtx, rtx, enum machine_mode, int);
 extern tree std_build_builtin_va_list (void);
 extern void std_expand_builtin_va_start (tree, rtx);
-extern rtx std_expand_builtin_va_arg (tree, tree);
-extern rtx expand_builtin_va_arg (tree, tree);
 extern rtx default_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
 extern void expand_builtin_setjmp_setup (rtx, rtx);
 extern void expand_builtin_setjmp_receiver (rtx);
index b3b6af71ab84d781cfd9455cda9f33c5126b38ca..f164bd92ef133a69949f18a90dd46dab5be970b7 100644 (file)
@@ -195,7 +195,6 @@ lower_stmt (tree_stmt_iterator *tsi, struct lower_data *data)
     case CALL_EXPR:
     case GOTO_EXPR:
     case LABEL_EXPR:
-    case VA_ARG_EXPR:
     case SWITCH_EXPR:
       break;
 
index 6cf5d486b3f261c1db676ac4fc994186c09eaec5..34f1b3e4dc2f288459d3389d0f92ca4a2ecb934d 100644 (file)
@@ -608,20 +608,6 @@ mostly_copy_tree_r (tree *tp, int *walk_subtrees, void *data)
   return NULL_TREE;
 }
 
-/* Mark all the _DECL nodes under *TP as volatile.  FIXME: This must die
-   after VA_ARG_EXPRs are properly lowered.  */
-
-static tree
-mark_decls_volatile_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
-                      void *data ATTRIBUTE_UNUSED)
-{
-  if (SSA_VAR_P (*tp))
-    TREE_THIS_VOLATILE (*tp) = 1;
-
-  return NULL_TREE;
-}
-
-
 /* Callback for walk_tree to unshare most of the shared trees rooted at
    *TP.  If *TP has been visited already (i.e., TREE_VISITED (*TP) == 1),
    then *TP is deep copied by calling copy_tree_r.
@@ -662,23 +648,7 @@ copy_if_shared_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
 
   /* Otherwise, mark the tree as visited and keep looking.  */
   else
-    {
-      TREE_VISITED (t) = 1;
-      if (TREE_CODE (*tp) == VA_ARG_EXPR
-         && targetm.gimplify_va_arg_expr == NULL)
-       {
-         /* Mark any _DECL inside the operand as volatile to avoid
-            the optimizers messing around with it. We have to do this
-            early, otherwise we might mark a variable as volatile
-            after we gimplify other statements that use the variable
-            assuming it's not volatile.  */
-
-         /* FIXME once most targets define the above hook, this should
-            go away (perhaps along with the #include "target.h").  */
-         walk_tree (&TREE_OPERAND (*tp, 0), mark_decls_volatile_r,
-                    NULL, NULL);
-       }
-    }
+    TREE_VISITED (t) = 1;
 
   return NULL_TREE;
 }
index 26dccf4c70aef32ce94b698b2ab3a9686cf71409..dfc8b089c7128db74f9caf519c2363b125c37ce0 100644 (file)
@@ -623,7 +623,7 @@ extern int snprintf (char *, size_t, const char *, ...);
        DBX_OUTPUT_STANDARD_TYPES BUILTIN_SETJMP_FRAME_VALUE               \
        SUNOS4_SHARED_LIBRARIES PROMOTE_FOR_CALL_ONLY                      \
        SPACE_AFTER_L_OPTION NO_RECURSIVE_FUNCTION_CSE                     \
-       DEFAULT_MAIN_RETURN TARGET_MEM_FUNCTIONS
+       DEFAULT_MAIN_RETURN TARGET_MEM_FUNCTIONS EXPAND_BUILTIN_VA_ARG
 
 /* Hooks that are no longer used.  */
  #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE  \
index 4cf40b5b8c61688ca28a0a1a606a10aed9a273ca..242d5351d34200d845496a07383263038c9b9ce6 100644 (file)
@@ -359,13 +359,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   default_pretend_outgoing_varargs_named
 #define TARGET_SPLIT_COMPLEX_ARG NULL
 
-#ifdef EXPAND_BUILTIN_VA_ARG
-/* If there's a target-specific va_arg expander, there needs to be a
-   target-specific gimplifier.  */
-#define TARGET_GIMPLIFY_VA_ARG_EXPR NULL
-#else
 #define TARGET_GIMPLIFY_VA_ARG_EXPR std_gimplify_va_arg_expr
-#endif
 
 #define TARGET_PASS_BY_REFERENCE hook_pass_by_reference_false
 
index f6bb8e01b60b9b2a89e8df78244860d2dde30f70..f3df4e2c221d649adadc19845e72ebbbe9ec734a 100644 (file)
@@ -1734,11 +1734,8 @@ cfg_remove_useless_stmts_bb (basic_block bb)
 
       /* Invalidate the var if we encounter something that could modify it.  */
       if (TREE_CODE (stmt) == ASM_EXPR
-         || TREE_CODE (stmt) == VA_ARG_EXPR
          || (TREE_CODE (stmt) == MODIFY_EXPR
-             && (TREE_OPERAND (stmt, 0) == var
-                 || TREE_OPERAND (stmt, 0) == val
-                 || TREE_CODE (TREE_OPERAND (stmt, 1)) == VA_ARG_EXPR)))
+             && TREE_OPERAND (stmt, 0) == var))
        return;
   
       bsi_next (&bsi);
index c081b5aabaed4910de27ec5110c1e844a2457bc5..488173fb6205c180164aa4c31833d4c3de04e25d 100644 (file)
@@ -219,8 +219,6 @@ is_gimple_tmp_rhs (tree t)
     case CALL_EXPR:
     case CONSTRUCTOR:
     case COMPLEX_EXPR:
-      /* FIXME lower VA_ARG_EXPR.  */
-    case VA_ARG_EXPR:
     case INTEGER_CST:
     case REAL_CST:
     case STRING_CST:
@@ -389,10 +387,6 @@ is_gimple_stmt (tree t)
       /* These are always void.  */
       return true;
 
-    case VA_ARG_EXPR:
-      /* FIXME this should be lowered.  */
-      return true;
-
     case CALL_EXPR:
     case MODIFY_EXPR:
       /* These are valid regardless of their type.  */
index 9b2974136a857deb77f5832c62ef39634c124c7a..c1c967a53a9f23f71e4ab9e7cef46cf0e551060c 100644 (file)
@@ -808,8 +808,8 @@ get_stmt_operands (tree stmt)
     default:
       /* Notice that if get_expr_operands tries to use &STMT as the operand
         pointer (which may only happen for USE operands), we will abort in
-        append_use.  This default will handle statements like empty statements,
-        CALL_EXPRs or VA_ARG_EXPRs that may appear on the RHS of a statement
+        append_use.  This default will handle statements like empty
+        statements, or CALL_EXPRs that may appear on the RHS of a statement
         or as statements themselves.  */
       get_expr_operands (stmt, &stmt, opf_none, &prev_vops);
       break;
@@ -964,13 +964,6 @@ get_expr_operands (tree stmt, tree *expr_p, int flags, voperands_t prev_vops)
        return;
       }
 
-    case VA_ARG_EXPR:
-      /* Mark VA_ARG_EXPR nodes as making volatile references.  FIXME,
-        this is needed because we currently do not gimplify VA_ARG_EXPR
-        properly.  */
-      stmt_ann (stmt)->has_volatile_ops = true;
-      return;
-
     case CONSTRUCTOR:
       {
        /* General aggregate CONSTRUCTORs have been decomposed, but they