This was the last thing remaining on my cleanup list. As suggested by Steven and Jason in issue4550121, we should use REAL_IDENTIFIER_TYPE_VALUE for IDENTIFIER_NODEs instead of TREE_TYPE (although the former resolves to the later in its macro definition, this is more robust to potential later changes to TREE_TYPE in trunk). This patch does that change.
As mentionned by Steven in the same issue, we were accessing some fields directly instead of correctly using their corresponding accessor macros. This patch makes use of the correct accessor macros for pph_read/write_tree_body. There is no implementation change in this patch, every macro used resolves to what we it replaces, if anything this will make the pph code slightly more robust to trunk merges. Tested with boostrap and pph regression testing on x64. Cheers, Gab 2011-08-25 Gabriel Charette <gch...@google.com> * pph-streamer-in.c (pph_read_tree_body): Use accessor macros for all fields. Use REAL_IDENTIFIER_TYPE_VALUE instead of TREE_TYPE for the IDENTIFIER_NODE case. * pph-streamer-out.c (pph_write_tree_body): Likewise. diff --git a/gcc/cp/pph-streamer-in.c b/gcc/cp/pph-streamer-in.c index f37feaf..2fcb436 100644 --- a/gcc/cp/pph-streamer-in.c +++ b/gcc/cp/pph-streamer-in.c @@ -1826,14 +1826,11 @@ pph_read_tree_body (pph_stream *stream, tree expr) break; case IDENTIFIER_NODE: - { - struct lang_identifier *id = LANG_IDENTIFIER_CAST (expr); - id->namespace_bindings = pph_in_cxx_binding (stream); - id->bindings = pph_in_cxx_binding (stream); - id->class_template_info = pph_in_tree (stream); - id->label_value = pph_in_tree (stream); - TREE_TYPE (expr) = pph_in_tree (stream); - } + IDENTIFIER_NAMESPACE_BINDINGS (expr) = pph_in_cxx_binding (stream); + IDENTIFIER_BINDING (expr) = pph_in_cxx_binding (stream); + IDENTIFIER_TEMPLATE (expr) = pph_in_tree (stream); + IDENTIFIER_LABEL_VALUE (expr) = pph_in_tree (stream); + REAL_IDENTIFIER_TYPE_VALUE (expr) = pph_in_tree (stream); break; case BASELINK: @@ -1876,17 +1873,13 @@ pph_read_tree_body (pph_stream *stream, tree expr) break; case LAMBDA_EXPR: - { - struct tree_lambda_expr *e - = (struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (expr); - pph_in_tree_common (stream, expr); - e->locus = pph_in_location (stream); - e->capture_list = pph_in_tree (stream); - e->this_capture = pph_in_tree (stream); - e->return_type = pph_in_tree (stream); - e->extra_scope = pph_in_tree (stream); - e->discriminator = pph_in_uint (stream); - } + pph_in_tree_common (stream, expr); + LAMBDA_EXPR_LOCATION (expr) = pph_in_location (stream); + LAMBDA_EXPR_CAPTURE_LIST (expr) = pph_in_tree (stream); + LAMBDA_EXPR_THIS_CAPTURE (expr) = pph_in_tree (stream); + LAMBDA_EXPR_RETURN_TYPE (expr) = pph_in_tree (stream); + LAMBDA_EXPR_EXTRA_SCOPE (expr) = pph_in_tree (stream); + LAMBDA_EXPR_DISCRIMINATOR (expr) = pph_in_uint (stream); break; case TREE_VEC: @@ -1899,15 +1892,12 @@ pph_read_tree_body (pph_stream *stream, tree expr) break; case TEMPLATE_PARM_INDEX: - { - template_parm_index *p = TEMPLATE_PARM_INDEX_CAST (expr); - pph_in_tree_common (stream, expr); - p->index = pph_in_uint (stream); - p->level = pph_in_uint (stream); - p->orig_level = pph_in_uint (stream); - p->num_siblings = pph_in_uint (stream); - p->decl = pph_in_tree (stream); - } + pph_in_tree_common (stream, expr); + TEMPLATE_PARM_IDX (expr) = pph_in_uint (stream); + TEMPLATE_PARM_LEVEL (expr) = pph_in_uint (stream); + TEMPLATE_PARM_ORIG_LEVEL (expr) = pph_in_uint (stream); + TEMPLATE_PARM_NUM_SIBLINGS (expr) = pph_in_uint (stream); + TEMPLATE_PARM_DECL (expr) = pph_in_tree (stream); break; case DEFERRED_NOEXCEPT: diff --git a/gcc/cp/pph-streamer-out.c b/gcc/cp/pph-streamer-out.c index 3f7ac0c..27495e7 100644 --- a/gcc/cp/pph-streamer-out.c +++ b/gcc/cp/pph-streamer-out.c @@ -1612,14 +1612,11 @@ pph_write_tree_body (pph_stream *stream, tree expr) break; case IDENTIFIER_NODE: - { - struct lang_identifier *id = LANG_IDENTIFIER_CAST (expr); - pph_out_cxx_binding (stream, id->namespace_bindings); - pph_out_cxx_binding (stream, id->bindings); - pph_out_tree_1 (stream, id->class_template_info, 3); - pph_out_tree_1 (stream, id->label_value, 3); - pph_out_tree_1 (stream, TREE_TYPE (expr), 3); - } + pph_out_cxx_binding (stream, IDENTIFIER_NAMESPACE_BINDINGS (expr)); + pph_out_cxx_binding (stream, IDENTIFIER_BINDING (expr)); + pph_out_tree_1 (stream, IDENTIFIER_TEMPLATE (expr), 3); + pph_out_tree_1 (stream, IDENTIFIER_LABEL_VALUE (expr), 3); + pph_out_tree_1 (stream, REAL_IDENTIFIER_TYPE_VALUE (expr), 3); break; case BASELINK: @@ -1661,17 +1658,13 @@ pph_write_tree_body (pph_stream *stream, tree expr) break; case LAMBDA_EXPR: - { - struct tree_lambda_expr *e - = (struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (expr); - pph_out_tree_common (stream, expr); - pph_out_location (stream, e->locus); - pph_out_tree_1 (stream, e->capture_list, 3); - pph_out_tree_1 (stream, e->this_capture, 3); - pph_out_tree_1 (stream, e->return_type, 3); - pph_out_tree_1 (stream, e->extra_scope, 3); - pph_out_uint (stream, e->discriminator); - } + pph_out_tree_common (stream, expr); + pph_out_location (stream, LAMBDA_EXPR_LOCATION (expr)); + pph_out_tree_1 (stream, LAMBDA_EXPR_CAPTURE_LIST (expr), 3); + pph_out_tree_1 (stream, LAMBDA_EXPR_THIS_CAPTURE (expr), 3); + pph_out_tree_1 (stream, LAMBDA_EXPR_RETURN_TYPE (expr), 3); + pph_out_tree_1 (stream, LAMBDA_EXPR_EXTRA_SCOPE (expr), 3); + pph_out_uint (stream, LAMBDA_EXPR_DISCRIMINATOR (expr)); break; case TREE_VEC: @@ -1684,15 +1677,12 @@ pph_write_tree_body (pph_stream *stream, tree expr) break; case TEMPLATE_PARM_INDEX: - { - template_parm_index *p = TEMPLATE_PARM_INDEX_CAST (expr); - pph_out_tree_common (stream, expr); - pph_out_uint (stream, p->index); - pph_out_uint (stream, p->level); - pph_out_uint (stream, p->orig_level); - pph_out_uint (stream, p->num_siblings); - pph_out_tree_1 (stream, p->decl, 3); - } + pph_out_tree_common (stream, expr); + pph_out_uint (stream, TEMPLATE_PARM_IDX (expr)); + pph_out_uint (stream, TEMPLATE_PARM_LEVEL (expr)); + pph_out_uint (stream, TEMPLATE_PARM_ORIG_LEVEL (expr)); + pph_out_uint (stream, TEMPLATE_PARM_NUM_SIBLINGS (expr)); + pph_out_tree_1 (stream, TEMPLATE_PARM_DECL (expr), 3); break; case DEFERRED_NOEXCEPT: -- This patch is available for review at http://codereview.appspot.com/4965046