diff options
author | Ian Lance Taylor <ian@airs.com> | 2005-05-28 01:38:11 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2005-05-28 01:38:11 +0000 |
commit | ed3d0b14125f1ff9f29d6cb14f6734ceeed6f622 (patch) | |
tree | fd13f92af3cb33e0387f4cd14cef0ef59efafcfc /gcc/cp | |
parent | 5d336d6dc025c6a9b1310aeb07a1a909c818116d (diff) | |
download | gcc-ed3d0b14125f1ff9f29d6cb14f6734ceeed6f622.zip gcc-ed3d0b14125f1ff9f29d6cb14f6734ceeed6f622.tar.gz gcc-ed3d0b14125f1ff9f29d6cb14f6734ceeed6f622.tar.bz2 |
c-decl.c (add_stmt): Add C frontend specific version.
./: * c-decl.c (add_stmt): Add C frontend specific version.
(stmts_are_full_exprs_p): Remove.
* c-common.h (STMT_IS_FULL_EXPR_P): Remove.
(stmts_are_full_exprs_p): Don't declare.
* c-semantics.c (add_stmt): Remove.
cp/:
* semantics.c (add_stmt): Add C++ frontend specific version.
* cp-tree.h (STMT_IS_FULL_EXPR_P): Define.
(stmts_are_full_exprs_p): Declare.
From-SVN: r100289
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 7 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 26 |
3 files changed, 39 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 29bd600..2a9b216 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-05-27 Ian Lance Taylor <ian@airs.com> + + * semantics.c (add_stmt): Add C++ frontend specific version. + * cp-tree.h (STMT_IS_FULL_EXPR_P): Define. + (stmts_are_full_exprs_p): Declare. + 2005-05-27 Roger Sayle <roger@eyesopen.com> Giovanni Bajo <giovannibajo@gcc.gnu.org> diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index fc0e20c..f4f5a12 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -59,6 +59,7 @@ struct diagnostic_context; ICS_ELLIPSIS_FLAG (in _CONV) DECL_INITIALIZED_P (in VAR_DECL) TYPENAME_IS_CLASS_P (in TYPENAME_TYPE) + STMT_IS_FULL_EXPR_P (in _STMT) 2: IDENTIFIER_OPNAME_P (in IDENTIFIER_NODE) ICS_THIS_FLAG (in _CONV) DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (in VAR_DECL) @@ -259,6 +260,11 @@ typedef struct ptrmem_cst * ptrmem_cst_t; #define STATEMENT_LIST_TRY_BLOCK(NODE) \ TREE_LANG_FLAG_2 (STATEMENT_LIST_CHECK (NODE)) +/* Nonzero if this statement should be considered a full-expression, + i.e., if temporaries created during this statement should have + their destructors run at the end of this statement. */ +#define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE)) + /* Marks the result of a statement expression. */ #define EXPR_STMT_STMT_EXPR_RESULT(NODE) \ TREE_LANG_FLAG_0 (EXPR_STMT_CHECK (NODE)) @@ -4063,6 +4069,7 @@ extern tree get_deferred_access_checks (void); extern void pop_to_parent_deferring_access_checks (void); extern void perform_deferred_access_checks (void); extern void perform_or_defer_access_check (tree, tree); +extern int stmts_are_full_exprs_p (void); extern void init_cp_semantics (void); extern tree do_poplevel (tree); extern void add_decl_expr (tree); diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 1316ef3..d969a24 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -340,6 +340,32 @@ stmts_are_full_exprs_p (void) return current_stmt_tree ()->stmts_are_full_exprs_p; } +/* T is a statement. Add it to the statement-tree. This is the C++ + version. The C/ObjC frontends have a slightly different version of + this function. */ + +tree +add_stmt (tree t) +{ + enum tree_code code = TREE_CODE (t); + + if (EXPR_P (t) && code != LABEL_EXPR) + { + if (!EXPR_HAS_LOCATION (t)) + SET_EXPR_LOCATION (t, input_location); + + /* When we expand a statement-tree, we must know whether or not the + statements are full-expressions. We record that fact here. */ + STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p (); + } + + /* Add T to the statement-tree. Non-side-effect statements need to be + recorded during statement expressions. */ + append_to_statement_list_force (t, &cur_stmt_list); + + return t; +} + /* Returns the stmt_tree (if any) to which statements are currently being added. If there is no active statement-tree, NULL is returned. */ |