public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: [pph] Various Tree Fields (issue4550064)
@ 2011-05-21  9:20 dnovillo
  2011-05-24 22:31 ` Lawrence Crowl
  0 siblings, 1 reply; 4+ messages in thread
From: dnovillo @ 2011-05-21  9:20 UTC (permalink / raw)
  To: crowl; +Cc: gcc-patches, reply


http://codereview.appspot.com/4550064/diff/1/gcc/cp/pph-streamer-in.c
File gcc/cp/pph-streamer-in.c (right):

http://codereview.appspot.com/4550064/diff/1/gcc/cp/pph-streamer-in.c#newcode251
gcc/cp/pph-streamer-in.c:251: {
+static VEC(qualified_typedef_usage_t,gc) *
+pph_stream_read_qual_use_vec (pph_stream *stream)
+{

This breaks bootstrap.  This function is never used.  I think you meant
to call it from the TEMPLATE_INFO handler, right?

Does this look like the right fix?


diff --git a/gcc/cp/pph-streamer-in.c b/gcc/cp/pph-streamer-in.c
index d40fd17..c426466 100644
--- a/gcc/cp/pph-streamer-in.c
+++ b/gcc/cp/pph-streamer-in.c
@@ -904,7 +904,7 @@ pph_stream_read_tree (struct lto_input_block *ib
ATTRIBUTE_UNUSED,
    else if (TREE_CODE (expr) == TEMPLATE_INFO)
      {
        TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (expr)
-          = pph_stream_read_tree_vec (stream);
+          = pph_stream_read_qual_use_vec (stream);
      }
    else if (TREE_CODE (expr) == TREE_LIST)
      ; /* FIXME pph: already handled?  */

http://codereview.appspot.com/4550064/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [pph] Various Tree Fields (issue4550064)
  2011-05-21  9:20 [pph] Various Tree Fields (issue4550064) dnovillo
@ 2011-05-24 22:31 ` Lawrence Crowl
  0 siblings, 0 replies; 4+ messages in thread
From: Lawrence Crowl @ 2011-05-24 22:31 UTC (permalink / raw)
  To: crowl, dnovillo, gcc-patches, reply

On 5/20/11, dnovillo@google.com <dnovillo@google.com> wrote:
>
> http://codereview.appspot.com/4550064/diff/1/gcc/cp/pph-streamer-in.c
> File gcc/cp/pph-streamer-in.c (right):
>
> http://codereview.appspot.com/4550064/diff/1/gcc/cp/pph-streamer-in.c#newcode251
> gcc/cp/pph-streamer-in.c:251: {
> +static VEC(qualified_typedef_usage_t,gc) *
> +pph_stream_read_qual_use_vec (pph_stream *stream)
> +{
>
> This breaks bootstrap.  This function is never used.  I think you meant
> to call it from the TEMPLATE_INFO handler, right?
>
> Does this look like the right fix?
>
>
> diff --git a/gcc/cp/pph-streamer-in.c b/gcc/cp/pph-streamer-in.c
> index d40fd17..c426466 100644
> --- a/gcc/cp/pph-streamer-in.c
> +++ b/gcc/cp/pph-streamer-in.c
> @@ -904,7 +904,7 @@ pph_stream_read_tree (struct lto_input_block *ib
> ATTRIBUTE_UNUSED,
>     else if (TREE_CODE (expr) == TEMPLATE_INFO)
>       {
>         TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (expr)
> -          = pph_stream_read_tree_vec (stream);
> +          = pph_stream_read_qual_use_vec (stream);
>       }
>     else if (TREE_CODE (expr) == TREE_LIST)
>       ; /* FIXME pph: already handled?  */
>
> http://codereview.appspot.com/4550064/
>

LGTM

-- 
Lawrence Crowl

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [pph] Various Tree Fields (issue4550064)
  2011-05-21  6:17 Lawrence Crowl
@ 2011-05-21  9:19 ` Diego Novillo
  0 siblings, 0 replies; 4+ messages in thread
From: Diego Novillo @ 2011-05-21  9:19 UTC (permalink / raw)
  To: Lawrence Crowl; +Cc: reply, gcc-patches

On Fri, May 20, 2011 at 17:09, Lawrence Crowl <crowl@google.com> wrote:
> Split C++ test x1funcstatic.cc into a C test and a C++ test.
> Stream out and in various C++ tree members.
>
> Index: gcc/testsuite/ChangeLog.pph
>
> 2011-05-20  Lawrence Crowl  <crowl@google.com>
>
>        * x1funcstatic.h: Rename to c1funcstatic.h, as contents are C only.
>        * x1funcstatic.c: Use c1funcstatic.h instead of x1funcstatic.h.
>        * c1funcstatic.c: Add to test C functionality.
>
> Index: gcc/cp/ChangeLog.pph
>
> 2011-05-20  Lawrence Crowl <crowl@google.com>
>
>        * pph-streamer-in.c (pph_stream_read_qual_use_vec): Add.
>        (pph_stream_read_tree_vec_none): Add.
>        (pph_stream_read_tree): Add read of various C++ fields.
>        * pph-streamer-out.c (pph_stream_write_qual_use_vec): Add.
>        (pph_stream_write_tree_vec_none): Add.
>        (pph_stream_write_tree): Add write of various C++ fields.

Thanks.

As we chatted off list, you can now get rid off of the TREE_BINFO
handling code.  That's already handled in the gimple streamer.

> +    }
> +  else if (TREE_CODE (expr) == TREE_LIST)
> +    ; /* FIXME pph: already handled?  */

Yes, TREE_LIST is handled already.

> +  else if (flag_pph_debug >= 2)
> +    fprintf (pph_logfile, "PPH: unimplemented read of %s\n",
> +             tree_code_name[TREE_CODE (expr)]);

This will print everything.  This hook is called from tree_on every
node, regardless of whether it was handled or not.

> @@ -788,6 +825,9 @@ pph_stream_write_tree (struct output_blo
>   if (DECL_P (expr))
>     {
>       pph_output_tree_or_ref_1 (stream, DECL_INITIAL (expr), ref_p, 3);
> +      /* FIXME pph:
> +      pph_output_tree_or_ref_1 (stream, DECL_NAME (expr), ref_p, 3);
> +      */

DECL_NAME is already handled in the gimple streamer.

>
>       if (TREE_CODE (expr) == FUNCTION_DECL
>          || TREE_CODE (expr) == NAMESPACE_DECL
> @@ -828,6 +868,57 @@ pph_stream_write_tree (struct output_blo
>           pph_output_tree_or_ref_1 (stream, TYPE_BINFO (expr), ref_p, 3);
>         }
>     }
> +  else if (TREE_CODE (expr) == OVERLOAD)
> +    {
> +      pph_output_tree_or_ref_1 (stream, OVL_CURRENT (expr), ref_p, 3);
> +    }
> +  else if (TREE_CODE (expr) == IDENTIFIER_NODE)
> +    {
> +      struct lang_identifier *id = LANG_IDENTIFIER_CAST(expr);
> +      pph_output_tree_or_ref_1 (stream, TREE_TYPE (expr), ref_p, 3);
> +      pph_output_string_with_length (stream, IDENTIFIER_POINTER (expr),
> +                                             IDENTIFIER_LENGTH (expr));
> +      pph_stream_write_cxx_binding (stream, id->namespace_bindings, ref_p);
> +      pph_stream_write_cxx_binding (stream, id->bindings, ref_p);
> +      pph_output_tree_or_ref_1 (stream, id->class_template_info, ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, id->label_value, ref_p, 3);

factor out?  (similarly on the reading side.

> +    }
> +  else if (TREE_CODE (expr) == BASELINK)
> +    {
> +      pph_output_tree_or_ref_1 (stream, BASELINK_BINFO (expr), ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, BASELINK_FUNCTIONS (expr), ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, BASELINK_ACCESS_BINFO (expr), ref_p, 3);
> +    }

Likewise.

> +  else if (TREE_CODE (expr) == TREE_BINFO)
> +    {
> +      pph_output_tree_or_ref_1 (stream, BINFO_OFFSET (expr), ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, BINFO_VTABLE (expr), ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, BINFO_VIRTUALS (expr), ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, BINFO_VPTR_FIELD (expr), ref_p, 3);
> +      pph_stream_write_tree_vec (stream, BINFO_BASE_ACCESSES (expr), ref_p);
> +      pph_output_tree_or_ref_1 (stream, BINFO_INHERITANCE_CHAIN (expr),
> +                                        ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, BINFO_SUBVTT_INDEX (expr), ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, BINFO_VPTR_INDEX (expr), ref_p, 3);
> +      pph_stream_write_tree_vec_none (stream, BINFO_BASE_BINFOS (expr), ref_p);
> +    }
> +  else if (TREE_CODE (expr) == TEMPLATE_DECL)
> +    {
> +      pph_output_tree_or_ref_1 (stream, DECL_TEMPLATE_RESULT (expr), ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, DECL_TEMPLATE_PARMS (expr), ref_p, 3);
> +      pph_output_tree_or_ref_1 (stream, DECL_CONTEXT (expr), ref_p, 3);
> +      /* FIXME pph: what of bit DECL_MEMBER_TEMPLATE_P (expr) */

Just write it out as an unsigned char.

> +    }
> +  else if (TREE_CODE (expr) == TEMPLATE_INFO)
> +    {
> +      pph_stream_write_qual_use_vec (stream,
> +          TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (expr), ref_p);
> +    }
> +  else if (TREE_CODE (expr) == TREE_LIST)
> +    ; /* FIXME pph: already handled?  */

Yes, already handled.


Diego.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [pph] Various Tree Fields (issue4550064)
@ 2011-05-21  6:17 Lawrence Crowl
  2011-05-21  9:19 ` Diego Novillo
  0 siblings, 1 reply; 4+ messages in thread
From: Lawrence Crowl @ 2011-05-21  6:17 UTC (permalink / raw)
  To: reply, dnovillo, gcc-patches

Split C++ test x1funcstatic.cc into a C test and a C++ test.
Stream out and in various C++ tree members.

Index: gcc/testsuite/ChangeLog.pph

2011-05-20  Lawrence Crowl  <crowl@google.com>

	* x1funcstatic.h: Rename to c1funcstatic.h, as contents are C only.
	* x1funcstatic.c: Use c1funcstatic.h instead of x1funcstatic.h.
	* c1funcstatic.c: Add to test C functionality.

Index: gcc/cp/ChangeLog.pph

2011-05-20  Lawrence Crowl <crowl@google.com>

	* pph-streamer-in.c (pph_stream_read_qual_use_vec): Add.
	(pph_stream_read_tree_vec_none): Add.
	(pph_stream_read_tree): Add read of various C++ fields.
	* pph-streamer-out.c (pph_stream_write_qual_use_vec): Add.
	(pph_stream_write_tree_vec_none): Add.
	(pph_stream_write_tree): Add write of various C++ fields.



Index: gcc/testsuite/g++.dg/pph/c1funcstatic.cc
===================================================================
--- gcc/testsuite/g++.dg/pph/c1funcstatic.cc	(revision 0)
+++ gcc/testsuite/g++.dg/pph/c1funcstatic.cc	(revision 0)
@@ -0,0 +1,2 @@
+#include "c1funcstatic.h"
+int g() { return f(); }
Index: gcc/testsuite/g++.dg/pph/c1funcstatic.h
===================================================================
--- gcc/testsuite/g++.dg/pph/c1funcstatic.h	(revision 0)
+++ gcc/testsuite/g++.dg/pph/c1funcstatic.h	(revision 0)
@@ -0,0 +1,7 @@
+#ifndef C1FUNCSTATIC_H
+#define C1FUNCSTATIC_H
+static int f() {
+    static int x = 3;
+    return x++;
+}
+#endif
Index: gcc/testsuite/g++.dg/pph/x1funcstatic.h
===================================================================
--- gcc/testsuite/g++.dg/pph/x1funcstatic.h	(revision 173763)
+++ gcc/testsuite/g++.dg/pph/x1funcstatic.h	(working copy)
@@ -1,7 +0,0 @@
-#ifndef X1FUNCSTATIC_H
-#define X1FUNCSTATIC_H
-static int f() {
-    static int x = 3;
-    return x++;
-}
-#endif
Index: gcc/testsuite/g++.dg/pph/x1funcstatic.cc
===================================================================
--- gcc/testsuite/g++.dg/pph/x1funcstatic.cc	(revision 173763)
+++ gcc/testsuite/g++.dg/pph/x1funcstatic.cc	(working copy)
@@ -1,2 +1,2 @@
-#include "x1funcstatic.h"
+#include "c1funcstatic.h"
 int a = f();
Index: gcc/cp/pph-streamer-in.c
===================================================================
--- gcc/cp/pph-streamer-in.c	(revision 173763)
+++ gcc/cp/pph-streamer-in.c	(working copy)
@@ -224,7 +224,7 @@ pph_stream_read_ld_min (pph_stream *stre
 }
 
 
-/* Read and return a VEC of trees from STREAM.  */
+/* Read and return a gc VEC of trees from STREAM.  */
 
 VEC(tree,gc) *
 pph_stream_read_tree_vec (pph_stream *stream)
@@ -243,6 +243,46 @@ pph_stream_read_tree_vec (pph_stream *st
   return v;
 }
 
+
+/* Read and return a gc VEC of qualified_typedef_usage_t from STREAM.  */
+
+static VEC(qualified_typedef_usage_t,gc) *
+pph_stream_read_qual_use_vec (pph_stream *stream)
+{
+  unsigned i, num;
+  VEC(qualified_typedef_usage_t,gc) *v;
+
+  num = pph_input_uint (stream);
+  v = NULL;
+  for (i = 0; i < num; i++)
+    {
+      qualified_typedef_usage_t q;
+      q.typedef_decl = pph_input_tree (stream);
+      q.context = pph_input_tree (stream);
+      /* FIXME pph: also read location.  */
+      VEC_safe_push (qualified_typedef_usage_t, gc, v, &q);
+    }
+
+  return v;
+}
+
+
+/* Read a trees from STREAM and write into a none VEC v.  */
+
+static VEC(tree,none) *
+pph_stream_read_tree_vec_none (pph_stream *stream, VEC(tree,none) *v)
+{
+  unsigned i, num;
+
+  num = pph_input_uint (stream);
+  VEC_embedded_init (tree, v, num);
+  for (i = 0; i < num; i++)
+    VEC_quick_push (tree, v, pph_input_tree (stream));
+
+  return v;
+}
+
+
 /* Forward declaration to break cyclic dependencies.  */
 static struct cp_binding_level *pph_stream_read_binding_level (pph_stream *);
 
@@ -784,6 +824,7 @@ pph_stream_read_tree (struct lto_input_b
   if (DECL_P (expr))
     {
       DECL_INITIAL (expr) = pph_input_tree (stream);
+      /* FIXME pph: DECL_NAME (expr) = pph_input_tree (stream); */
 
       if (TREE_CODE (expr) == FUNCTION_DECL
 	  || TREE_CODE (expr) == NAMESPACE_DECL
@@ -817,4 +858,57 @@ pph_stream_read_tree (struct lto_input_b
           TYPE_BINFO (expr) = pph_input_tree (stream);
         }
     }
+  else if (TREE_CODE (expr) == OVERLOAD)
+    {
+      OVL_FUNCTION (expr) = pph_input_tree (stream);
+    }
+  else if (TREE_CODE (expr) == IDENTIFIER_NODE)
+    {
+      const char *str;
+      struct lang_identifier *id = LANG_IDENTIFIER_CAST(expr);
+      TREE_TYPE (expr) = pph_input_tree (stream);
+      str = pph_input_string (stream);
+      /* FIXME pph: There must be a better way.  */
+      IDENTIFIER_NODE_CHECK (expr)->identifier.id.str
+          = (const unsigned char *)str;
+      IDENTIFIER_LENGTH (expr) = strlen (str);
+      id->namespace_bindings = pph_stream_read_cxx_binding (stream);
+      id->bindings = pph_stream_read_cxx_binding (stream);
+      id->class_template_info = pph_input_tree (stream);
+      id->label_value = pph_input_tree (stream);
+    }
+  else if (TREE_CODE (expr) == BASELINK)
+    {
+      BASELINK_BINFO (expr) = pph_input_tree (stream);
+      BASELINK_FUNCTIONS (expr) = pph_input_tree (stream);
+      BASELINK_ACCESS_BINFO (expr) = pph_input_tree (stream);
+    }
+  else if (TREE_CODE (expr) == TREE_BINFO)
+    {
+      BINFO_OFFSET (expr) = pph_input_tree (stream);
+      BINFO_VTABLE (expr) = pph_input_tree (stream);
+      BINFO_VIRTUALS (expr) = pph_input_tree (stream);
+      BINFO_VPTR_FIELD (expr) = pph_input_tree (stream);
+      BINFO_BASE_ACCESSES (expr) = pph_stream_read_tree_vec (stream);
+      BINFO_INHERITANCE_CHAIN (expr) = pph_input_tree (stream);
+      BINFO_SUBVTT_INDEX (expr) = pph_input_tree (stream);
+      BINFO_VPTR_INDEX (expr) = pph_input_tree (stream);
+      pph_stream_read_tree_vec_none (stream, BINFO_BASE_BINFOS (expr) );
+    }
+  else if (TREE_CODE (expr) == TEMPLATE_DECL)
+    {
+      DECL_TEMPLATE_RESULT (expr) = pph_input_tree (stream);
+      DECL_TEMPLATE_PARMS (expr) = pph_input_tree (stream);
+      DECL_CONTEXT (expr) = pph_input_tree (stream);
+    }
+  else if (TREE_CODE (expr) == TEMPLATE_INFO)
+    {
+      TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (expr)
+          = pph_stream_read_tree_vec (stream);
+    }
+  else if (TREE_CODE (expr) == TREE_LIST)
+    ; /* FIXME pph: already handled?  */
+  else if (flag_pph_debug >= 2)
+    fprintf (pph_logfile, "PPH: unimplemented read of %s\n",
+             tree_code_name[TREE_CODE (expr)]);
 }
Index: gcc/cp/pph-streamer-out.c
===================================================================
--- gcc/cp/pph-streamer-out.c	(revision 173763)
+++ gcc/cp/pph-streamer-out.c	(working copy)
@@ -262,8 +262,8 @@ pph_stream_write_ld_min (pph_stream *str
 }
 
 
-/* Write all the trees in VEC V to STREAM.  REF_P is true if the trees should
-   be written as references.  */
+/* Write all the trees in gc VEC V to STREAM.  REF_P is true if the
+   trees should be written as references. */
 
 void
 pph_stream_write_tree_vec (pph_stream *stream, VEC(tree,gc) *v, bool ref_p)
@@ -276,6 +276,43 @@ pph_stream_write_tree_vec (pph_stream *s
     pph_output_tree_or_ref (stream, t, ref_p);
 }
 
+
+/* Write all the qualified_typedef_usage_t in VEC V to STREAM.
+   REF_P is true if the trees should be written as references. */
+
+static void
+pph_stream_write_qual_use_vec (pph_stream *stream,
+    VEC(qualified_typedef_usage_t,gc) *v, bool ref_p)
+{
+  unsigned i;
+  qualified_typedef_usage_t *q;
+
+  pph_output_uint (stream, VEC_length (qualified_typedef_usage_t, v));
+  for (i = 0; VEC_iterate (qualified_typedef_usage_t, v, i, q); i++)
+    {
+      pph_output_tree_or_ref (stream, q->typedef_decl, ref_p);
+      pph_output_tree_or_ref (stream, q->context, ref_p);
+      /* FIXME pph: also write location?  */
+    }
+}
+
+
+/* Write all the trees in non VEC V to STREAM.  REF_P is true if the
+   trees should be written as references. */
+
+static void
+pph_stream_write_tree_vec_none (pph_stream *stream, VEC(tree,none) *v,
+                                bool ref_p)
+{
+  unsigned i;
+  tree t;
+
+  pph_output_uint (stream, VEC_length (tree, v));
+  for (i = 0; VEC_iterate (tree, v, i, t); i++)
+    pph_output_tree_or_ref (stream, t, ref_p);
+}
+
+
 /* Forward declaration to break cyclic dependencies.  */
 static void pph_stream_write_binding_level (pph_stream *,
 					    struct cp_binding_level *, bool);
@@ -788,6 +825,9 @@ pph_stream_write_tree (struct output_blo
   if (DECL_P (expr))
     {
       pph_output_tree_or_ref_1 (stream, DECL_INITIAL (expr), ref_p, 3);
+      /* FIXME pph:
+      pph_output_tree_or_ref_1 (stream, DECL_NAME (expr), ref_p, 3);
+      */
 
       if (TREE_CODE (expr) == FUNCTION_DECL
 	  || TREE_CODE (expr) == NAMESPACE_DECL
@@ -828,6 +868,57 @@ pph_stream_write_tree (struct output_blo
           pph_output_tree_or_ref_1 (stream, TYPE_BINFO (expr), ref_p, 3);
         }
     }
+  else if (TREE_CODE (expr) == OVERLOAD)
+    {
+      pph_output_tree_or_ref_1 (stream, OVL_CURRENT (expr), ref_p, 3);
+    }
+  else if (TREE_CODE (expr) == IDENTIFIER_NODE)
+    {
+      struct lang_identifier *id = LANG_IDENTIFIER_CAST(expr);
+      pph_output_tree_or_ref_1 (stream, TREE_TYPE (expr), ref_p, 3);
+      pph_output_string_with_length (stream, IDENTIFIER_POINTER (expr),
+                                             IDENTIFIER_LENGTH (expr));
+      pph_stream_write_cxx_binding (stream, id->namespace_bindings, ref_p);
+      pph_stream_write_cxx_binding (stream, id->bindings, ref_p);
+      pph_output_tree_or_ref_1 (stream, id->class_template_info, ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, id->label_value, ref_p, 3);
+    }
+  else if (TREE_CODE (expr) == BASELINK)
+    {
+      pph_output_tree_or_ref_1 (stream, BASELINK_BINFO (expr), ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, BASELINK_FUNCTIONS (expr), ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, BASELINK_ACCESS_BINFO (expr), ref_p, 3);
+    }
+  else if (TREE_CODE (expr) == TREE_BINFO)
+    {
+      pph_output_tree_or_ref_1 (stream, BINFO_OFFSET (expr), ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, BINFO_VTABLE (expr), ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, BINFO_VIRTUALS (expr), ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, BINFO_VPTR_FIELD (expr), ref_p, 3);
+      pph_stream_write_tree_vec (stream, BINFO_BASE_ACCESSES (expr), ref_p);
+      pph_output_tree_or_ref_1 (stream, BINFO_INHERITANCE_CHAIN (expr),
+                                        ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, BINFO_SUBVTT_INDEX (expr), ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, BINFO_VPTR_INDEX (expr), ref_p, 3);
+      pph_stream_write_tree_vec_none (stream, BINFO_BASE_BINFOS (expr), ref_p);
+    }
+  else if (TREE_CODE (expr) == TEMPLATE_DECL)
+    {
+      pph_output_tree_or_ref_1 (stream, DECL_TEMPLATE_RESULT (expr), ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, DECL_TEMPLATE_PARMS (expr), ref_p, 3);
+      pph_output_tree_or_ref_1 (stream, DECL_CONTEXT (expr), ref_p, 3);
+      /* FIXME pph: what of bit DECL_MEMBER_TEMPLATE_P (expr) */
+    }
+  else if (TREE_CODE (expr) == TEMPLATE_INFO)
+    {
+      pph_stream_write_qual_use_vec (stream,
+          TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (expr), ref_p);
+    }
+  else if (TREE_CODE (expr) == TREE_LIST)
+    ; /* FIXME pph: already handled?  */
+  else if (flag_pph_debug >= 2)
+    fprintf (pph_logfile, "PPH: unimplemented write of %s\n",
+             tree_code_name[TREE_CODE (expr)]);
 }
 
 

--
This patch is available for review at http://codereview.appspot.com/4550064

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-05-24 21:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-21  9:20 [pph] Various Tree Fields (issue4550064) dnovillo
2011-05-24 22:31 ` Lawrence Crowl
  -- strict thread matches above, loose matches on Subject: below --
2011-05-21  6:17 Lawrence Crowl
2011-05-21  9:19 ` Diego Novillo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).