c-common.def (GOTO_STMT, LABEL_STMT): Remove.
authorRichard Henderson <rth@redhat.com>
Wed, 16 Jun 2004 18:21:20 +0000 (11:21 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 16 Jun 2004 18:21:20 +0000 (11:21 -0700)
        * c-common.def (GOTO_STMT, LABEL_STMT): Remove.
        * c-common.c (c_add_case_label): Use LABEL_EXPR.
        * c-common.h (GOTO_FAKE_P, LABEL_STMT_LABEL): Remove.
        (c_common_stmt_codes): Remove GOTO_STMT, LABEL_STMT.
        * c-dump.c (c_dump_tree): Likewise.
        * c-gimplify.c (c_gimplify_stmt): Likewise.
        * c-pretty-print.c (pp_c_statement): Likewise.
        * c-parse.in (stmt): Use GOTO_EXPR.
        (label): Use LABEL_EXPR.
        * c-semantics.c (build_stmt): Set TREE_TYPE to void.
        * tree-inline.c (copy_body_r): Don't build empty BLOCKs.
cp/
        * decl.c (finish_destructor_body): Use LABEL_EXPR.
        * parser.c (cp_parser_statement): Update commentary.
        * pt.c (tsubst_expr): Use LABEL_EXPR, GOTO_EXPR.
        * semantics.c (finish_goto_stmt, finish_label_stmt): Likewise.
        * tree.c (mark_local_for_remap_r): Likewise.

From-SVN: r83255

16 files changed:
gcc/ChangeLog
gcc/c-common.c
gcc/c-common.def
gcc/c-common.h
gcc/c-dump.c
gcc/c-gimplify.c
gcc/c-parse.in
gcc/c-pretty-print.c
gcc/c-semantics.c
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/cp/semantics.c
gcc/cp/tree.c
gcc/tree-inline.c

index ace0f8d9a3c873bcccfe025a61afa43d674ce226..2e04fb230956d0f4b1905ff7bbbd52b923736d01 100644 (file)
@@ -1,3 +1,17 @@
+2004-06-16  Richard Henderson  <rth@redhat.com>
+
+       * c-common.def (GOTO_STMT, LABEL_STMT): Remove.
+       * c-common.c (c_add_case_label): Use LABEL_EXPR.
+       * c-common.h (GOTO_FAKE_P, LABEL_STMT_LABEL): Remove.
+       (c_common_stmt_codes): Remove GOTO_STMT, LABEL_STMT.
+       * c-dump.c (c_dump_tree): Likewise.
+       * c-gimplify.c (c_gimplify_stmt): Likewise.
+       * c-pretty-print.c (pp_c_statement): Likewise.
+       * c-parse.in (stmt): Use GOTO_EXPR.
+       (label): Use LABEL_EXPR.
+       * c-semantics.c (build_stmt): Set TREE_TYPE to void.
+       * tree-inline.c (copy_body_r): Don't build empty BLOCKs.
+
 2004-06-16  J"orn Rennecke <joern.rennecke@superh.com>
 
        * cfgcleanup.c (try_simplify_condjump): Update test to make
index 2b68c0aa5f80955921de5725c7c597cff927f044..3de00cff8697c1c7295cc376e7ecbbe51349a138 100644 (file)
@@ -3900,13 +3900,13 @@ c_add_case_label (splay_tree cases, tree cond, tree low_value,
   return case_label;
 
  error_out:
-  /* Add a label so that the back-end doesn't think that the beginning o
+  /* Add a label so that the back-end doesn't think that the beginning of
      the switch is unreachable.  Note that we do not add a case label, as
      that just leads to duplicates and thence to aborts later on.  */
   if (!cases->root)
     {
       tree t = create_artificial_label ();
-      add_stmt (build_stmt (LABEL_STMT, t));
+      add_stmt (build_stmt (LABEL_EXPR, t));
     }
   return error_mark_node;
 }
index 67730fb538c319044b92c0410fef13fa96004585..434af64fb9b0eaadcb3f864200113a795e8fdf4a 100644 (file)
@@ -71,13 +71,6 @@ DEFTREECODE (CONTINUE_STMT, "continue_stmt", 'e', 0)
    SWITCH_COND, SWITCH_BODY and SWITCH_TYPE, respectively.  */
 DEFTREECODE (SWITCH_STMT, "switch_stmt", 'e', 3)
 
-/* Used to represent a 'goto' statement. The operand is GOTO_DESTINATION.  */
-DEFTREECODE (GOTO_STMT, "goto_stmt", 'e', 1)
-
-/* Used to represent a 'label' statement. The operand is a LABEL_DECL
-   and can be obtained through the macro LABEL_STMT_LABEL.  */
-DEFTREECODE (LABEL_STMT, "label_stmt", 'e', 1)
-
 /* Used to represent an inline assembly statement.  */
 DEFTREECODE (ASM_STMT, "asm_stmt", 'e', 4)
 
index 59074b57b77db3d8282c79ae50b9cd9561debe3e..aa2b06fad1b9f12f1d36b619c5c815a88a5aede0 100644 (file)
@@ -961,9 +961,6 @@ extern void finish_file     (void);
 #define SWITCH_TYPE(NODE)      TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
 #define CASE_LABEL_DECL(NODE)   TREE_OPERAND (CASE_LABEL_CHECK (NODE), 2)
 
-/* True for goto created artificially by the compiler.  */
-#define GOTO_FAKE_P(NODE)      (TREE_LANG_FLAG_0 (GOTO_STMT_CHECK (NODE)))
-
 /* COMPOUND_STMT accessor. This gives access to the TREE_LIST of
    statements associated with a compound statement. The result is the
    first statement in the list. Succeeding nodes can be accessed by
@@ -981,10 +978,6 @@ extern void finish_file    (void);
 #define STMT_EXPR_NO_SCOPE(NODE) \
    TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
 
-/* LABEL_STMT accessor. This gives access to the label associated with
-   the given label statement.  */
-#define LABEL_STMT_LABEL(NODE)  TREE_OPERAND (LABEL_STMT_CHECK (NODE), 0)
-
 /* COMPOUND_LITERAL_EXPR accessors.  */
 #define COMPOUND_LITERAL_EXPR_DECL_STMT(NODE)          \
   TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
@@ -1016,8 +1009,7 @@ enum c_tree_code {
    DECL_STMT,          IF_STMT,        FOR_STMT,       \
    WHILE_STMT,         DO_STMT,        RETURN_STMT,    \
    BREAK_STMT,         CONTINUE_STMT,                  \
-   SWITCH_STMT,                GOTO_STMT,      LABEL_STMT,     \
-   ASM_STMT,           CASE_LABEL
+   SWITCH_STMT,                ASM_STMT,       CASE_LABEL
 
 /* TRUE if a code represents a statement.  The front end init
    langhook should take care of initialization of this array.  */
index 3d2004eb04c7618a422cbc78b3d1ed0a396b9c64..b0790efa2090e8a27b987e56207a035914506d95 100644 (file)
@@ -129,12 +129,6 @@ c_dump_tree (void *dump_info, tree t)
       dump_next_stmt (di, t);
       break;
 
-    case GOTO_STMT:
-      dump_stmt (di, t);
-      dump_child ("dest", GOTO_DESTINATION (t));
-      dump_next_stmt (di, t);
-      break;
-
     case IF_STMT:
       dump_stmt (di, t);
       dump_child ("cond", IF_COND (t));
@@ -143,12 +137,6 @@ c_dump_tree (void *dump_info, tree t)
       dump_next_stmt (di, t);
       break;
 
-    case LABEL_STMT:
-      dump_stmt (di, t);
-      dump_child ("labl", LABEL_STMT_LABEL (t));
-      dump_next_stmt (di, t);
-      break;
-
     case RETURN_STMT:
       dump_stmt (di, t);
       dump_child ("expr", RETURN_STMT_EXPR (t));
index 484cc7c772f0a35f6187e23f6623644a12cf2620..e0b262d03e8f6ac3a3e7d605a3c915a70e30ef1a 100644 (file)
@@ -264,16 +264,6 @@ c_gimplify_stmt (tree *stmt_p)
       ret = gimplify_decl_stmt (&stmt);
       break;
 
-    case LABEL_STMT:
-      stmt = build1 (LABEL_EXPR, void_type_node, LABEL_STMT_LABEL (stmt));
-      ret = GS_OK;
-      break;
-
-    case GOTO_STMT:
-      stmt = build1 (GOTO_EXPR, void_type_node, GOTO_DESTINATION (stmt));
-      ret = GS_OK;
-      break;
-
     case CASE_LABEL:
       {
        tree label = create_artificial_label ();
index 7589e738ef17185df15c4c7abd5e35d158df6f2d..147dbc009f409d2b2790625a5f83cbfcb4020a63 100644 (file)
@@ -2292,7 +2292,7 @@ stmt:
                  if (decl != 0)
                    {
                      TREE_USED (decl) = 1;
-                     $$ = add_stmt (build_stmt (GOTO_STMT, decl));
+                     $$ = add_stmt (build_stmt (GOTO_EXPR, decl));
                    }
                  else
                    $$ = NULL_TREE;
@@ -2302,7 +2302,7 @@ stmt:
                    pedwarn ("ISO C forbids `goto *expr;'");
                  stmt_count++;
                  $3 = convert (ptr_type_node, $3);
-                 $$ = add_stmt (build_stmt (GOTO_STMT, $3)); }
+                 $$ = add_stmt (build_stmt (GOTO_EXPR, $3)); }
        | ';'
                { $$ = NULL_TREE; }
 @@ifobjc
@@ -2379,7 +2379,7 @@ label:      CASE expr_no_commas ':'
                  if (label)
                    {
                      decl_attributes (&label, $4, 0);
-                     $$ = add_stmt (build_stmt (LABEL_STMT, label));
+                     $$ = add_stmt (build_stmt (LABEL_EXPR, label));
                    }
                  else
                    $$ = NULL_TREE;
index 06b8654ab24ef3d7161dca02ba4b27ee6f08a0e8..c1d9d60ee72ad69c3e7d5e34aaec17193a7b650f 100644 (file)
@@ -1913,28 +1913,22 @@ pp_c_statement (c_pretty_printer *pp, tree stmt)
              identifier : statement
              case constant-expression : statement
              default : statement   */
-    case LABEL_STMT:
     case CASE_LABEL:
       if (pp_needs_newline (pp))
         pp_newline_and_indent (pp, -3);
       else
         pp_indentation (pp) -= 3;
-      if (code == LABEL_STMT)
-       pp_c_tree_decl_identifier (pp, LABEL_STMT_LABEL (stmt));
-      else if (code == CASE_LABEL)
+      if (CASE_LOW (stmt) == NULL_TREE)
+       pp_identifier (pp, "default");
+      else
        {
-         if (CASE_LOW (stmt) == NULL_TREE)
-           pp_identifier (pp, "default");
-         else
+         pp_c_identifier (pp, "case");
+         pp_c_whitespace (pp);
+         pp_conditional_expression (pp, CASE_LOW (stmt));
+         if (CASE_HIGH (stmt))
            {
-             pp_c_identifier (pp, "case");
-             pp_c_whitespace (pp);
-             pp_conditional_expression (pp, CASE_LOW (stmt));
-             if (CASE_HIGH (stmt))
-               {
-                 pp_identifier (pp, "...");
-                 pp_conditional_expression (pp, CASE_HIGH (stmt));
-               }
+             pp_identifier (pp, "...");
+             pp_conditional_expression (pp, CASE_HIGH (stmt));
            }
        }
       pp_colon (pp);
@@ -2098,14 +2092,11 @@ pp_c_statement (c_pretty_printer *pp, tree stmt)
       break;
 
     case RETURN_STMT:
-    case GOTO_STMT:
       {
-       tree e = code == RETURN_STMT
-         ? RETURN_STMT_EXPR (stmt)
-         : GOTO_DESTINATION (stmt);
+       tree e = RETURN_STMT_EXPR (stmt);
         if (pp_needs_newline (pp))
           pp_newline_and_indent (pp, 0);
-       pp_c_identifier (pp, code == RETURN_STMT ? "return" : "goto");
+       pp_c_identifier (pp, "return");
         pp_c_whitespace (pp);
        if (e)
           {
index 4a48191670004ad0d60b3518d5f5e15f133f8d1e..8a67c67a33de1ceb9fc12106525cd743867400b5 100644 (file)
@@ -188,6 +188,7 @@ build_stmt (enum tree_code code, ...)
   va_start (p, code);
 
   ret = make_node (code);
+  TREE_TYPE (ret) = void_type_node;
   length = TREE_CODE_LENGTH (code);
   annotate_with_locus (ret, input_location);
 
index d700297e8315edb3a0f3b830b207cc46c775c5e4..3238043bab8b48e3e7e387fbd8552c136f3c4f29 100644 (file)
@@ -1,3 +1,11 @@
+2004-06-16  Richard Henderson  <rth@redhat.com>
+
+       * decl.c (finish_destructor_body): Use LABEL_EXPR.
+       * parser.c (cp_parser_statement): Update commentary.
+       * pt.c (tsubst_expr): Use LABEL_EXPR, GOTO_EXPR.
+       * semantics.c (finish_goto_stmt, finish_label_stmt): Likewise.
+       * tree.c (mark_local_for_remap_r): Likewise.
+
 2004-06-16  Richard Henderson  <rth@redhat.com>
 
        PR c++/16012
index 84ce0d74e941dd42dadae718c125684644f73349..4a402d43895b66b7704e09e849cd4bd0ec31fbd2 100644 (file)
@@ -10569,7 +10569,7 @@ finish_destructor_body (void)
 
   /* Any return from a destructor will end up here; that way all base
      and member cleanups will be run when the function returns.  */
-  add_stmt (build_stmt (LABEL_STMT, dtor_label));
+  add_stmt (build_stmt (LABEL_EXPR, dtor_label));
 
   /* In a virtual destructor, we must call delete.  */
   if (DECL_VIRTUAL_P (current_function_decl))
index 428762cb437801a0e482005906c304d259648a92..4d4561cebc2ee3a31657399d0c009a1e636ba3c9 100644 (file)
@@ -5721,7 +5721,7 @@ cp_parser_statement (cp_parser* parser, tree in_statement_expr)
      case constant-expression ... constant-expression : statement
 
    Returns the new CASE_LABEL, for a `case' or `default' label.  For
-   an ordinary label, returns a LABEL_STMT.  */
+   an ordinary label, returns a LABEL_EXPR.  */
 
 static tree
 cp_parser_labeled_statement (cp_parser* parser, tree in_statement_expr)
@@ -6241,8 +6241,7 @@ cp_parser_for_init_statement (cp_parser* parser)
    jump-statement:
      goto * expression ;
 
-   Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_STMT, or
-   GOTO_STMT.  */
+   Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_STMT, or GOTO_EXPR.  */
 
 static tree
 cp_parser_jump_statement (cp_parser* parser)
index c93184aa0c771518f1e68a3f03cbdb2a28cfd68a..0bbec66fa5fff3d92d08836f89956d1fcf6c1b72 100644 (file)
@@ -7979,12 +7979,12 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
                                      in_decl));
       break;
 
-    case LABEL_STMT:
+    case LABEL_EXPR:
       prep_stmt (t);
-      finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
+      finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
       break;
 
-    case GOTO_STMT:
+    case GOTO_EXPR:
       prep_stmt (t);
       tmp = GOTO_DESTINATION (t);
       if (TREE_CODE (tmp) != LABEL_DECL)
index ef82cb1bcb880d4ab14ca5f36ab8b971e595e729..1b4f46770163093e16420b5d415018ef9668c911 100644 (file)
@@ -435,7 +435,7 @@ finish_goto_stmt (tree destination)
   
   check_goto (destination);
 
-  return add_stmt (build_stmt (GOTO_STMT, destination));
+  return add_stmt (build_stmt (GOTO_EXPR, destination));
 }
 
 /* COND is the condition-expression for an if, while, etc.,
@@ -1086,7 +1086,7 @@ tree
 finish_label_stmt (tree name)
 {
   tree decl = define_label (input_location, name);
-  return add_stmt (build_stmt (LABEL_STMT, decl));
+  return add_stmt (build_stmt (LABEL_EXPR, decl));
 }
 
 /* Finish a series of declarations for local labels.  G++ allows users
index 81db7ca6389a9b7a9c0b0e6d7ca9e05a0009a0cc..86c585b2e44f403719d93ff1ce1acd587c3e1291 100644 (file)
@@ -2216,8 +2216,8 @@ mark_local_for_remap_r (tree* tp,
   if (TREE_CODE (t) == DECL_STMT
       && nonstatic_local_decl_p (DECL_STMT_DECL (t)))
     decl = DECL_STMT_DECL (t);
-  else if (TREE_CODE (t) == LABEL_STMT)
-    decl = LABEL_STMT_LABEL (t);
+  else if (TREE_CODE (t) == LABEL_EXPR)
+    decl = LABEL_EXPR_LABEL (t);
   else if (TREE_CODE (t) == TARGET_EXPR
           && nonstatic_local_decl_p (TREE_OPERAND (t, 0)))
     decl = TREE_OPERAND (t, 0);
index f4277931778ff93efe0de886ced20c28ed663b11..0ed3621e86961355c92a0c2da15ceee6667c354c 100644 (file)
@@ -467,8 +467,8 @@ copy_body_r (tree *tp, int *walk_subtrees, void *data)
       abort ();
 #endif
 
-  /* If this is a RETURN_STMT, change it into an EXPR_STMT and a
-     GOTO_STMT with the RET_LABEL as its target.  */
+  /* If this is a RETURN_EXPR, change it into a MODIFY_EXPR and a
+     GOTO_EXPR with the RET_LABEL as its target.  */
   if (TREE_CODE (*tp) == RETURN_EXPR && id->ret_label)
     {
       tree return_stmt = *tp;
@@ -489,8 +489,7 @@ copy_body_r (tree *tp, int *walk_subtrees, void *data)
            if (TREE_CODE (assignment) == RESULT_DECL)
              gimplify_stmt (&assignment);
 
-         *tp = build (BIND_EXPR, void_type_node, NULL_TREE, NULL_TREE,
-                      make_node (BLOCK));
+         *tp = build (BIND_EXPR, void_type_node, NULL, NULL, NULL);
          append_to_statement_list (assignment, &BIND_EXPR_BODY (*tp));
          append_to_statement_list (goto_stmt, &BIND_EXPR_BODY (*tp));
         }