diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c18e056a75..fa56bf092b5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ +2011-06-10 Paolo Carlini + + * tree.h (error_operand_p): Add. + * dbxout.c (dbxout_type_fields): Use the latter. + * c-decl.c (add_stmt): Likewise. + * gimplify.c (omp_add_variable, omp_notice_variable, + gimplify_scan_omp_clauses): Likewise. + 2011-06-10 Georg-Johann Lay - + * config/avr/avr.c (avr_function_arg_advance): Fix thinko about when a value is actually passed in regs. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 1d43126fd46..e42a3c54b4e 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -565,7 +565,7 @@ add_stmt (tree t) static bool decl_jump_unsafe (tree decl) { - if (decl == error_mark_node || TREE_TYPE (decl) == error_mark_node) + if (error_operand_p (decl)) return false; /* Always warn about crossing variably modified types. */ diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index dcea35ad838..116e470ec3a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2011-06-10 Paolo Carlini + + * cp-tree.h (error_operand_p): Remove. + 2011-06-09 David Krauss PR c++/49118 diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index f7bcd0d42de..06b5926faa8 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -1123,12 +1123,6 @@ struct GTY(()) language_function { #define ansi_assopname(CODE) \ (assignment_operator_name_info[(int) (CODE)].identifier) -/* True if NODE is an erroneous expression. */ - -#define error_operand_p(NODE) \ - ((NODE) == error_mark_node \ - || ((NODE) && TREE_TYPE ((NODE)) == error_mark_node)) - /* TRUE if a tree code represents a statement. */ extern bool statement_code_p[MAX_TREE_CODES]; diff --git a/gcc/dbxout.c b/gcc/dbxout.c index be43ed3dae7..9160fb3ded9 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -1510,7 +1510,7 @@ dbxout_type_fields (tree type) { /* If one of the nodes is an error_mark or its type is then return early. */ - if (tem == error_mark_node || TREE_TYPE (tem) == error_mark_node) + if (error_operand_p (tem)) return; /* Omit here local type decls until we know how to support them. */ diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 31e0daf3d41..bc6d32179a6 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -5448,7 +5448,7 @@ omp_add_variable (struct gimplify_omp_ctx *ctx, tree decl, unsigned int flags) unsigned int nflags; tree t; - if (decl == error_mark_node || TREE_TYPE (decl) == error_mark_node) + if (error_operand_p (decl)) return; /* Never elide decls whose type has TREE_ADDRESSABLE set. This means @@ -5573,7 +5573,7 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code) unsigned flags = in_code ? GOVD_SEEN : 0; bool ret = false, shared; - if (decl == error_mark_node || TREE_TYPE (decl) == error_mark_node) + if (error_operand_p (decl)) return false; /* Threadprivate variables are predetermined. */ @@ -5830,7 +5830,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p, do_add: decl = OMP_CLAUSE_DECL (c); - if (decl == error_mark_node || TREE_TYPE (decl) == error_mark_node) + if (error_operand_p (decl)) { remove = true; break; @@ -5889,7 +5889,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p, case OMP_CLAUSE_COPYIN: case OMP_CLAUSE_COPYPRIVATE: decl = OMP_CLAUSE_DECL (c); - if (decl == error_mark_node || TREE_TYPE (decl) == error_mark_node) + if (error_operand_p (decl)) { remove = true; break; diff --git a/gcc/tree.h b/gcc/tree.h index 4615d7664c4..30c77d8b8ef 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -4053,6 +4053,12 @@ enum ptrmemfunc_vbit_where_t #define NULL_TREE (tree) NULL +/* True if NODE is an erroneous expression. */ + +#define error_operand_p(NODE) \ + ((NODE) == error_mark_node \ + || ((NODE) && TREE_TYPE ((NODE)) == error_mark_node)) + extern tree decl_assembler_name (tree); extern bool decl_assembler_name_equal (tree decl, const_tree asmname); extern hashval_t decl_assembler_name_hash (const_tree asmname);