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

Reply via email to