From c3e5898be3e730343aa0803f62c1c432f9b1949e Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 20 Apr 2005 19:59:16 +0000 Subject: [PATCH] c-common.def: Remove STMT_EXPR (moved to cp/cp-tree.def). ./ * c-common.def: Remove STMT_EXPR (moved to cp/cp-tree.def). * c-common.h (STMT_EXPR_STMT): Don't define. (STMT_EXPR_NO_SCOPE): Don't define. * c-dump.c (c_dump_tree): Don't handle STMT_EXPR. * c-pretty-print.c (pp_c_primary_expression): Likewise. (pp_c_expression): Likewise. cp/ * cp-tree.def: Add STMT_EXPR. * cp-tree.h (STMT_EXPR_NO_SCOPE): Define. (STMT_EXPR_STMT): Define. * cxx-pretty-print.c (pp_cxx_primary_expression): Handle STMT_EXPR. (pp_cxx_expression): Likewise. (pp_cxx_statement): Call pp_cxx_statement, not pp_statement. * dump.c (cp_dump_tree): Handle STMT_EXPR. From-SVN: r98469 --- gcc/ChangeLog | 9 +++++++++ gcc/c-common.def | 4 ---- gcc/c-common.h | 8 -------- gcc/c-dump.c | 4 ---- gcc/c-pretty-print.c | 7 ------- gcc/cp/ChangeLog | 11 +++++++++++ gcc/cp/cp-tree.def | 5 +++++ gcc/cp/cp-tree.h | 8 ++++++++ gcc/cp/cxx-pretty-print.c | 17 ++++++++++++----- gcc/cp/dump.c | 4 ++++ 10 files changed, 49 insertions(+), 28 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 74b8e35192c..4181cbeb8f3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2005-04-20 Ian Lance Taylor + + * c-common.def: Remove STMT_EXPR (moved to cp/cp-tree.def). + * c-common.h (STMT_EXPR_STMT): Don't define. + (STMT_EXPR_NO_SCOPE): Don't define. + * c-dump.c (c_dump_tree): Don't handle STMT_EXPR. + * c-pretty-print.c (pp_c_primary_expression): Likewise. + (pp_c_expression): Likewise. + 2005-04-20 Richard Henderson PR target/21100 diff --git a/gcc/c-common.def b/gcc/c-common.def index b352364e95a..4f34a70ac17 100644 --- a/gcc/c-common.def +++ b/gcc/c-common.def @@ -29,10 +29,6 @@ cp-tree.def in the cp subdir. */ obtain the expression. */ DEFTREECODE (EXPR_STMT, "expr_stmt", tcc_expression, 1) -/* A STMT_EXPR represents a statement-expression. The - STMT_EXPR_STMT is the statement given by the expression. */ -DEFTREECODE (STMT_EXPR, "stmt_expr", tcc_expression, 1) - /* A COMPOUND_LITERAL_EXPR represents a C99 compound literal. The COMPOUND_LITERAL_EXPR_DECL_STMT is the a DECL_STMT containing the decl for the anonymous object represented by the COMPOUND_LITERAL; diff --git a/gcc/c-common.h b/gcc/c-common.h index 9d98ffb65d1..80de15d3ef8 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -30,7 +30,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA 0: TREE_NEGATED_INT (in INTEGER_CST). IDENTIFIER_MARKED (used by search routines). DECL_PRETTY_FUNCTION_P (in VAR_DECL) - STMT_EXPR_NO_SCOPE (in STMT_EXPR) 1: C_DECLARED_LABEL_FLAG (in LABEL_DECL) STMT_IS_FULL_EXPR_P (in _STMT) STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST) @@ -713,13 +712,6 @@ extern void finish_file (void); expression statement. */ #define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0) -/* STMT_EXPR accessor. */ -#define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0) - -/* Nonzero if this statement-expression does not have an associated scope. */ -#define STMT_EXPR_NO_SCOPE(NODE) \ - TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE)) - /* COMPOUND_LITERAL_EXPR accessors. */ #define COMPOUND_LITERAL_EXPR_DECL_STMT(NODE) \ TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0) diff --git a/gcc/c-dump.c b/gcc/c-dump.c index 09850e6c810..1b1bb7f31c5 100644 --- a/gcc/c-dump.c +++ b/gcc/c-dump.c @@ -59,10 +59,6 @@ c_dump_tree (void *dump_info, tree t) dump_child ("expr", EXPR_STMT_EXPR (t)); break; - case STMT_EXPR: - dump_child ("stmt", STMT_EXPR_STMT (t)); - break; - default: break; } diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c index 24220ce6241..811a7bac154 100644 --- a/gcc/c-pretty-print.c +++ b/gcc/c-pretty-print.c @@ -1013,12 +1013,6 @@ pp_c_primary_expression (c_pretty_printer *pp, tree e) pp_c_right_paren (pp); break; - case STMT_EXPR: - pp_c_left_paren (pp); - pp_statement (pp, STMT_EXPR_STMT (e)); - pp_c_right_paren (pp); - break; - default: /* FIXME: Make sure we won't get into an infinie loop. */ pp_c_left_paren (pp); @@ -1786,7 +1780,6 @@ pp_c_expression (c_pretty_printer *pp, tree e) case FIELD_DECL: case LABEL_DECL: case ERROR_MARK: - case STMT_EXPR: pp_primary_expression (pp, e); break; diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b0532982d03..d8e77cca3ff 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,14 @@ +2005-04-20 Ian Lance Taylor + + * cp-tree.def: Add STMT_EXPR. + * cp-tree.h (STMT_EXPR_NO_SCOPE): Define. + (STMT_EXPR_STMT): Define. + * cxx-pretty-print.c (pp_cxx_primary_expression): Handle + STMT_EXPR. + (pp_cxx_expression): Likewise. + (pp_cxx_statement): Call pp_cxx_statement, not pp_statement. + * dump.c (cp_dump_tree): Handle STMT_EXPR. + 2005-04-18 Kazu Hirata * decl.c (expand_static_init): Call build2 and build3 instead diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def index ffcc9a51622..e50bf3c682c 100644 --- a/gcc/cp/cp-tree.def +++ b/gcc/cp/cp-tree.def @@ -331,6 +331,11 @@ DEFTREECODE (ARROW_EXPR, "arrow_expr", tcc_expression, 1) expansion. */ DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", tcc_unary, 1) +/* A STMT_EXPR represents a statement-expression during template + expansion. This is the GCC extension { ( ... ) }. The + STMT_EXPR_STMT is the statement given by the expression. */ +DEFTREECODE (STMT_EXPR, "stmt_expr", tcc_expression, 1) + /* Local variables: mode:c diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 3765a4bcd61..a27ee193747 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -47,6 +47,7 @@ struct diagnostic_context; KOENIG_LOOKUP_P (in CALL_EXPR) STATEMENT_LIST_NO_SCOPE (in STATEMENT_LIST). EXPR_STMT_STMT_EXPR_RESULT (in EXPR_STMT) + STMT_EXPR_NO_SCOPE (in STMT_EXPR) BIND_EXPR_TRY_BLOCK (in BIND_EXPR) TYPENAME_IS_ENUM_P (in TYPENAME_TYPE) REFERENCE_REF_P (in INDIRECT_EXPR) @@ -262,6 +263,10 @@ typedef struct ptrmem_cst * ptrmem_cst_t; #define EXPR_STMT_STMT_EXPR_RESULT(NODE) \ TREE_LANG_FLAG_0 (EXPR_STMT_CHECK (NODE)) +/* Nonzero if this statement-expression does not have an associated scope. */ +#define STMT_EXPR_NO_SCOPE(NODE) \ + TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE)) + /* Returns nonzero iff TYPE1 and TYPE2 are the same type, in the usual sense of `same'. */ #define same_type_p(TYPE1, TYPE2) \ @@ -2940,6 +2945,9 @@ struct lang_decl GTY(()) #define SWITCH_STMT_BODY(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1) #define SWITCH_STMT_TYPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2) +/* STMT_EXPR accessor. */ +#define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0) + /* An enumeration of the kind of tags that C++ accepts. */ enum tag_types { none_type = 0, /* Not a tag type. */ diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 854efeccd36..2bffb735a26 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -345,6 +345,12 @@ pp_cxx_primary_expression (cxx_pretty_printer *pp, tree t) pp_cxx_unqualified_id (pp, t); break; + case STMT_EXPR: + pp_cxx_left_paren (pp); + pp_cxx_statement (pp, STMT_EXPR_STMT (t)); + pp_cxx_right_paren (pp); + break; + default: pp_c_primary_expression (pp_c_base (pp), t); break; @@ -863,6 +869,7 @@ pp_cxx_expression (cxx_pretty_printer *pp, tree t) case TEMPLATE_TYPE_PARM: case TEMPLATE_PARM_INDEX: case TEMPLATE_TEMPLATE_PARM: + case STMT_EXPR: pp_cxx_primary_expression (pp, t); break; @@ -1584,7 +1591,7 @@ pp_cxx_statement (cxx_pretty_printer *pp, tree t) pp_cxx_right_paren (pp); pp_indentation (pp) += 3; pp_needs_newline (pp) = true; - pp_statement (pp, SWITCH_STMT_BODY (t)); + pp_cxx_statement (pp, SWITCH_STMT_BODY (t)); pp_newline_and_indent (pp, -3); break; @@ -1600,7 +1607,7 @@ pp_cxx_statement (cxx_pretty_printer *pp, tree t) pp_expression (pp, WHILE_COND (t)); pp_cxx_right_paren (pp); pp_newline_and_indent (pp, 3); - pp_statement (pp, WHILE_BODY (t)); + pp_cxx_statement (pp, WHILE_BODY (t)); pp_indentation (pp) -= 3; pp_needs_newline (pp) = true; break; @@ -1608,7 +1615,7 @@ pp_cxx_statement (cxx_pretty_printer *pp, tree t) case DO_STMT: pp_cxx_identifier (pp, "do"); pp_newline_and_indent (pp, 3); - pp_statement (pp, DO_BODY (t)); + pp_cxx_statement (pp, DO_BODY (t)); pp_newline_and_indent (pp, -3); pp_cxx_identifier (pp, "while"); pp_space (pp); @@ -1624,7 +1631,7 @@ pp_cxx_statement (cxx_pretty_printer *pp, tree t) pp_space (pp); pp_cxx_left_paren (pp); if (FOR_INIT_STMT (t)) - pp_statement (pp, FOR_INIT_STMT (t)); + pp_cxx_statement (pp, FOR_INIT_STMT (t)); else pp_cxx_semicolon (pp); pp_needs_newline (pp) = false; @@ -1638,7 +1645,7 @@ pp_cxx_statement (cxx_pretty_printer *pp, tree t) pp_expression (pp, FOR_EXPR (t)); pp_cxx_right_paren (pp); pp_newline_and_indent (pp, 3); - pp_statement (pp, FOR_BODY (t)); + pp_cxx_statement (pp, FOR_BODY (t)); pp_indentation (pp) -= 3; pp_needs_newline (pp) = true; break; diff --git a/gcc/cp/dump.c b/gcc/cp/dump.c index f653d3ab3e7..20c7ace5e8c 100644 --- a/gcc/cp/dump.c +++ b/gcc/cp/dump.c @@ -455,6 +455,10 @@ cp_dump_tree (void* dump_info, tree t) dump_child ("body", WHILE_BODY (t)); break; + case STMT_EXPR: + dump_child ("stmt", STMT_EXPR_STMT (t)); + break; + default: break; } -- 2.30.2