OSDN Git Service

PR middle-end/41674
[pf3gnuchains/gcc-fork.git] / gcc / c-semantics.c
index c7933be..683655f 100644 (file)
@@ -1,7 +1,5 @@
-/* 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).
 
@@ -28,23 +26,15 @@ along with GCC; see the file COPYING3.  If not see
 #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.  */
 
@@ -71,6 +61,8 @@ pop_stmt_list (tree 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;
@@ -102,12 +94,12 @@ pop_stmt_list (tree t)
 
 /* 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;
@@ -122,7 +114,7 @@ build_stmt (enum tree_code code, ...)
   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
@@ -144,27 +136,11 @@ build_stmt (enum tree_code code, ...)
   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);
 }