/* Build expressions with type checking for C compiler.
- Copyright (C) 1987, 88, 89, 92, 93, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996
+ 1997, 1998, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
both their declarations and the expansion of statements using them. */
#include "config.h"
-#include <stdio.h>
+#include "system.h"
#include "tree.h"
#include "c-tree.h"
#include "flags.h"
#include "obstack.h"
#include "rtl.h"
+#include "toplev.h"
+#include "expr.h"
\f
/*
KEEPING TRACK OF EXPANSIONS
/* During collect_iterators, a list of SAVE_EXPRs already scanned. */
static tree save_exprs;
-static void expand_stmt_with_iterators_1 PROTO((tree, tree));
-static tree collect_iterators PROTO((tree, tree));
-static void iterator_loop_prologue PROTO((tree, rtx *, rtx *));
-static void iterator_loop_epilogue PROTO((tree, rtx *, rtx *));
-static int top_level_ixpansion_p PROTO((void));
-static void isn_append PROTO((struct iter_stack_node *,
- struct iter_stack_node *));
-static void istack_sublevel_to_current PROTO((void));
-static void add_ixpansion PROTO((tree, rtx, rtx, rtx, rtx));
-static void delete_ixpansion PROTO((tree));
+static void expand_stmt_with_iterators_1 PARAMS ((tree, tree));
+static tree collect_iterators PARAMS ((tree, tree));
+static void iterator_loop_prologue PARAMS ((tree, rtx *, rtx *));
+static void iterator_loop_epilogue PARAMS ((tree, rtx *, rtx *));
+static int top_level_ixpansion_p PARAMS ((void));
+static void isn_append PARAMS ((struct iter_stack_node *,
+ struct iter_stack_node *));
+static void istack_sublevel_to_current PARAMS ((void));
+static void add_ixpansion PARAMS ((tree, rtx, rtx, rtx, rtx));
+static void delete_ixpansion PARAMS ((tree));
\f
/* Initialize our obstack once per compilation. */
break;
case RTL_EXPR:
return list;
+ default:
+ break;
}
for (i = 0; i < num_args; i++)
/* Force the save_expr in DECL_INITIAL to be calculated
if it hasn't been calculated yet. */
- expand_expr (DECL_INITIAL (idecl), const0_rtx, VOIDmode, 0);
+ expand_expr (DECL_INITIAL (idecl), const0_rtx, VOIDmode,
+ EXPAND_NORMAL);
if (DECL_RTL (idecl) == 0)
expand_decl (idecl);
/* Initialize counter. */
expr = build (MODIFY_EXPR, TREE_TYPE (idecl), idecl, integer_zero_node);
TREE_SIDE_EFFECTS (expr) = 1;
- expand_expr (expr, const0_rtx, VOIDmode, 0);
+ expand_expr (expr, const0_rtx, VOIDmode, EXPAND_NORMAL);
expand_start_loop_continue_elsewhere (1);
incr = build_binary_op (PLUS_EXPR, idecl, integer_one_node, 0);
incr = build (MODIFY_EXPR, TREE_TYPE (idecl), idecl, incr);
TREE_SIDE_EFFECTS (incr) = 1;
- expand_expr (incr, const0_rtx, VOIDmode, 0);
+ expand_expr (incr, const0_rtx, VOIDmode, EXPAND_NORMAL);
test = build_binary_op (LT_EXPR, idecl, DECL_INITIAL (idecl), 0);
expand_exit_loop_if_false (0, test);
expand_end_loop ();
fprintf (stderr, dname);
}
else
- fprintf (stderr, "<<Not a Decl!!!>>");
+ fprintf (stderr, "<<?>>");
}
else
- fprintf (stderr, "<<NULL!!>>");
+ fprintf (stderr, "<<0>>");
}
/* Print Iterator List -- names only */