I discovered we were not correctly marking the TS array for
language-specific _EXPR nodes. We got away with this because the GC
marking used other means for dealing with such nodes. I, however, was
relying on it for modules streaming.
applying to trunk.
nathan
--
Nathan Sidwell
2019-04-30 Nathan Sidwell <nat...@acm.org>
gcc/
* tree.h (MARK_TS_EXP): New.
gcc/c-family/
* c-common.c (c_common_init_ts): Use MARK_TS_EXP. Mark SIZEOF_EXPR.
gcc/cp/
* cp-objcp-common.c (cp_common_init_ts): Use MARK_TS_EXP for _EXPR
nodes. Call c_common_init_ts.
Index: gcc/c-family/c-common.c
===================================================================
--- gcc/c-family/c-common.c (revision 270708)
+++ gcc/c-family/c-common.c (working copy)
@@ -7907,8 +7907,9 @@ keyword_is_decl_specifier (enum rid keyw
void
c_common_init_ts (void)
{
- MARK_TS_TYPED (C_MAYBE_CONST_EXPR);
- MARK_TS_TYPED (EXCESS_PRECISION_EXPR);
+ MARK_TS_EXP (SIZEOF_EXPR);
+ MARK_TS_EXP (C_MAYBE_CONST_EXPR);
+ MARK_TS_EXP (EXCESS_PRECISION_EXPR);
}
/* Build a user-defined numeric literal out of an integer constant type VALUE
Index: gcc/cp/cp-objcp-common.c
===================================================================
--- gcc/cp/cp-objcp-common.c (revision 270708)
+++ gcc/cp/cp-objcp-common.c (working copy)
@@ -386,67 +386,88 @@ cp_common_init_ts (void)
MARK_TS_COMMON (BOUND_TEMPLATE_TEMPLATE_PARM);
MARK_TS_COMMON (UNBOUND_CLASS_TEMPLATE);
- MARK_TS_TYPED (EXPR_PACK_EXPANSION);
MARK_TS_TYPED (SWITCH_STMT);
MARK_TS_TYPED (IF_STMT);
MARK_TS_TYPED (FOR_STMT);
MARK_TS_TYPED (RANGE_FOR_STMT);
- MARK_TS_TYPED (AGGR_INIT_EXPR);
- MARK_TS_TYPED (EXPR_STMT);
MARK_TS_TYPED (EH_SPEC_BLOCK);
MARK_TS_TYPED (CLEANUP_STMT);
MARK_TS_TYPED (SCOPE_REF);
- MARK_TS_TYPED (CAST_EXPR);
- MARK_TS_TYPED (NON_DEPENDENT_EXPR);
- MARK_TS_TYPED (MODOP_EXPR);
MARK_TS_TYPED (TRY_BLOCK);
- MARK_TS_TYPED (THROW_EXPR);
MARK_TS_TYPED (HANDLER);
- MARK_TS_TYPED (REINTERPRET_CAST_EXPR);
- MARK_TS_TYPED (CONST_CAST_EXPR);
- MARK_TS_TYPED (STATIC_CAST_EXPR);
- MARK_TS_TYPED (DYNAMIC_CAST_EXPR);
- MARK_TS_TYPED (IMPLICIT_CONV_EXPR);
- MARK_TS_TYPED (TEMPLATE_ID_EXPR);
- MARK_TS_TYPED (ARROW_EXPR);
- MARK_TS_TYPED (SIZEOF_EXPR);
- MARK_TS_TYPED (ALIGNOF_EXPR);
- MARK_TS_TYPED (AT_ENCODE_EXPR);
- MARK_TS_TYPED (UNARY_PLUS_EXPR);
- MARK_TS_TYPED (TRAIT_EXPR);
MARK_TS_TYPED (TYPE_ARGUMENT_PACK);
MARK_TS_TYPED (NOEXCEPT_EXPR);
- MARK_TS_TYPED (NONTYPE_ARGUMENT_PACK);
MARK_TS_TYPED (WHILE_STMT);
- MARK_TS_TYPED (NEW_EXPR);
- MARK_TS_TYPED (VEC_NEW_EXPR);
MARK_TS_TYPED (BREAK_STMT);
- MARK_TS_TYPED (MEMBER_REF);
- MARK_TS_TYPED (DOTSTAR_EXPR);
MARK_TS_TYPED (DO_STMT);
- MARK_TS_TYPED (DELETE_EXPR);
- MARK_TS_TYPED (VEC_DELETE_EXPR);
MARK_TS_TYPED (CONTINUE_STMT);
- MARK_TS_TYPED (TAG_DEFN);
- MARK_TS_TYPED (PSEUDO_DTOR_EXPR);
- MARK_TS_TYPED (TYPEID_EXPR);
- MARK_TS_TYPED (MUST_NOT_THROW_EXPR);
- MARK_TS_TYPED (STMT_EXPR);
- MARK_TS_TYPED (OFFSET_REF);
- MARK_TS_TYPED (OFFSETOF_EXPR);
- MARK_TS_TYPED (ADDRESSOF_EXPR);
MARK_TS_TYPED (PTRMEM_CST);
- MARK_TS_TYPED (EMPTY_CLASS_EXPR);
- MARK_TS_TYPED (VEC_INIT_EXPR);
MARK_TS_TYPED (USING_STMT);
- MARK_TS_TYPED (LAMBDA_EXPR);
- MARK_TS_TYPED (CTOR_INITIALIZER);
- MARK_TS_TYPED (REQUIRES_EXPR);
- MARK_TS_TYPED (UNARY_LEFT_FOLD_EXPR);
- MARK_TS_TYPED (UNARY_RIGHT_FOLD_EXPR);
- MARK_TS_TYPED (BINARY_LEFT_FOLD_EXPR);
- MARK_TS_TYPED (BINARY_RIGHT_FOLD_EXPR);
MARK_TS_TYPED (OMP_DEPOBJ);
+
+ MARK_TS_EXP (AGGR_INIT_EXPR);
+ MARK_TS_EXP (CTOR_INITIALIZER);
+ MARK_TS_EXP (EXPR_STMT);
+ MARK_TS_EXP (TAG_DEFN);
+ MARK_TS_EXP (EMPTY_CLASS_EXPR);
+ MARK_TS_EXP (MODOP_EXPR);
+ MARK_TS_EXP (THROW_EXPR);
+ MARK_TS_EXP (CAST_EXPR);
+ MARK_TS_EXP (TYPE_EXPR);
+ MARK_TS_EXP (REINTERPRET_CAST_EXPR);
+ MARK_TS_EXP (CONST_CAST_EXPR);
+ MARK_TS_EXP (STATIC_CAST_EXPR);
+ MARK_TS_EXP (DYNAMIC_CAST_EXPR);
+ MARK_TS_EXP (IMPLICIT_CONV_EXPR);
+ MARK_TS_EXP (TEMPLATE_ID_EXPR);
+ MARK_TS_EXP (ARROW_EXPR);
+ MARK_TS_EXP (UNARY_PLUS_EXPR);
+ MARK_TS_EXP (TRAIT_EXPR);
+
+ MARK_TS_EXP (NON_DEPENDENT_EXPR);
+ MARK_TS_EXP (NEW_EXPR);
+ MARK_TS_EXP (VEC_NEW_EXPR);
+ MARK_TS_EXP (MEMBER_REF);
+ MARK_TS_EXP (DOTSTAR_EXPR);
+ MARK_TS_EXP (DELETE_EXPR);
+ MARK_TS_EXP (VEC_DELETE_EXPR);
+ MARK_TS_EXP (PSEUDO_DTOR_EXPR);
+ MARK_TS_EXP (TYPEID_EXPR);
+ MARK_TS_EXP (MUST_NOT_THROW_EXPR);
+ MARK_TS_EXP (STMT_EXPR);
+ MARK_TS_EXP (OFFSET_REF);
+ MARK_TS_EXP (OFFSETOF_EXPR);
+ MARK_TS_EXP (ADDRESSOF_EXPR);
+ MARK_TS_EXP (VEC_INIT_EXPR);
+ MARK_TS_EXP (LAMBDA_EXPR);
+
+ MARK_TS_EXP (ALIGNOF_EXPR);
+ MARK_TS_EXP (AT_ENCODE_EXPR);
+
+ MARK_TS_EXP (NONTYPE_ARGUMENT_PACK);
+ MARK_TS_EXP (EXPR_PACK_EXPANSION);
+ MARK_TS_EXP (UNARY_LEFT_FOLD_EXPR);
+ MARK_TS_EXP (UNARY_RIGHT_FOLD_EXPR);
+ MARK_TS_EXP (BINARY_LEFT_FOLD_EXPR);
+ MARK_TS_EXP (BINARY_RIGHT_FOLD_EXPR);
+
+ MARK_TS_EXP (REQUIRES_EXPR);
+ MARK_TS_EXP (SIMPLE_REQ);
+ MARK_TS_EXP (TYPE_REQ);
+ MARK_TS_EXP (COMPOUND_REQ);
+ MARK_TS_EXP (NESTED_REQ);
+ MARK_TS_EXP (PRED_CONSTR);
+ MARK_TS_EXP (CHECK_CONSTR);
+ MARK_TS_EXP (EXPR_CONSTR);
+ MARK_TS_EXP (TYPE_CONSTR);
+ MARK_TS_EXP (ICONV_CONSTR);
+ MARK_TS_EXP (DEDUCT_CONSTR);
+ MARK_TS_EXP (EXCEPT_CONSTR);
+ MARK_TS_EXP (PARM_CONSTR);
+ MARK_TS_EXP (CONJ_CONSTR);
+ MARK_TS_EXP (DISJ_CONSTR);
+
+ c_common_init_ts ();
}
#include "gt-cp-cp-objcp-common.h"
Index: gcc/tree.h
===================================================================
--- gcc/tree.h (revision 270708)
+++ gcc/tree.h (working copy)
@@ -114,6 +114,10 @@ as_internal_fn (combined_fn code)
(MARK_TS_DECL_WITH_VIS (C), \
tree_contains_struct[C][TS_DECL_NON_COMMON] = true)
+#define MARK_TS_EXP(C) \
+ (MARK_TS_TYPED (C), \
+ tree_contains_struct[C][TS_EXP] = true)
+
/* Returns the string representing CLASS. */
#define TREE_CODE_CLASS_STRING(CLASS)\