-/* This file contains the definitions and documentation for the common
- tree codes used in the GNU C and C++ compilers (see c-common.def
- for the standard codes).
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007
+/* This file contains subroutine used by the C front-end to construct GENERIC.
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
Free Software Foundation, Inc.
Written by Benjamin Chelf (chelf@codesourcery.com).
#include "tree.h"
#include "function.h"
#include "splay-tree.h"
-#include "varray.h"
#include "c-common.h"
-#include "except.h"
/* In order for the format checking to accept the C frontend
diagnostic framework extensions, you must define this token before
including toplev.h. */
#define GCC_DIAG_STYLE __gcc_cdiag__
#include "toplev.h"
#include "flags.h"
-#include "ggc.h"
-#include "rtl.h"
#include "output.h"
-#include "timevar.h"
-#include "predict.h"
-#include "tree-inline.h"
-#include "tree-gimple.h"
-#include "langhooks.h"
+#include "tree-iterator.h"
/* Create an empty statement tree rooted at T. */
{
chain = TREE_CHAIN (u);
TREE_CHAIN (u) = NULL_TREE;
+ if (chain)
+ STATEMENT_LIST_HAS_LABEL (chain) |= STATEMENT_LIST_HAS_LABEL (u);
if (t == u)
break;
u = chain;
/* Build a generic statement based on the given type of node and
arguments. Similar to `build_nt', except that we set
- EXPR_LOCATION to be the current source location. */
+ EXPR_LOCATION to LOC. */
/* ??? This should be obsolete with the lineno_stmt productions
in the grammar. */
tree
-build_stmt (enum tree_code code, ...)
+build_stmt (location_t loc, enum tree_code code, ...)
{
tree ret;
int length, i;
ret = make_node (code);
TREE_TYPE (ret) = void_type_node;
length = TREE_CODE_LENGTH (code);
- SET_EXPR_LOCATION (ret, input_location);
+ SET_EXPR_LOCATION (ret, loc);
/* TREE_SIDE_EFFECTS will already be set for statements with
implicit side effects. Here we make sure it is set for other
return ret;
}
-/* Let the back-end know about DECL. */
-
-void
-emit_local_var (tree decl)
-{
- /* Create RTL for this variable. */
- if (!DECL_RTL_SET_P (decl))
- {
- if (DECL_HARD_REGISTER (decl))
- /* The user specified an assembler name for this variable.
- Set that up now. */
- rest_of_decl_compilation (decl, 0, 0);
- else
- expand_decl (decl);
- }
-}
-
/* Create a CASE_LABEL_EXPR tree node and return it. */
tree
-build_case_label (tree low_value, tree high_value, tree label_decl)
+build_case_label (location_t loc,
+ tree low_value, tree high_value, tree label_decl)
{
- return build_stmt (CASE_LABEL_EXPR, low_value, high_value, label_decl);
+ return build_stmt (loc, CASE_LABEL_EXPR, low_value, high_value, label_decl);
}