[cxx-conversion] Final trunk->branch merge

Diego Novillo dnovillo@google.com
Sat Aug 11 23:43:00 GMT 2012

This is the final merge from trunk before I start sending the
branch->trunk merge patches.

This merge required some non-mechanical fixes.  A recent patch
introduced DEF_VEC_A() for vectors of atomic types.  When a VEC
of an atomic type needs to be GC/PCH marked, the marker
needs to do nothing.

In trunk, this is done by creating a separate vec_t structure
that declares the type with GTY((atomic)).  In the branch, we can
do it a little simpler by providing explicit template
instantiations for the atomic type that do nothing.

The patch below does that.  When the user declares a vector with
DEF_VEC_A(), the macro expands to 3 instances of the gt_ggc_mx
and gt_pch_nx functions that do nothing.

After I get rid of the DEF_VEC_* macros in trunk, I will probably
provide the same feature by adding an additional parameter to the
vec_t class.

Tested on x86_64.  Committed to branch.


	* vec.h (DEF_VEC_A): Provide template instantiations for
	GC/PCH markers that do not traverse the vector.

diff --git a/svnclient/gcc/vec.h b/svnclient/gcc/vec.h
index b139053..5fdb859 100644
--- a/svnclient/gcc/vec.h
+++ b/svnclient/gcc/vec.h
@@ -231,8 +231,36 @@ gt_pch_nx (vec_t<T> *v, gt_pointer_operator op, void *cookie)
 #define DEF_VEC_ALLOC_O_STACK(T)	struct vec_swallow_trailing_semi
 #define DEF_VEC_ALLOC_I_STACK(T)	struct vec_swallow_trailing_semi
-/* Vectors of atomic types.  */
-#define DEF_VEC_A(T)			struct vec_swallow_trailing_semi
+/* Vectors of atomic types.  Atomic types do not need to have its
+   elements marked for GC and PCH.  To avoid unnecessary traversals,
+   we provide template instantiations for the GC/PCH functions that
+   do not traverse the vector.
+   FIXME cxx-conversion - Once vec_t users are converted this can
+   be provided in some other way (e.g., adding an additional template
+   parameter to the vec_t class).  */
+#define DEF_VEC_A(TYPE)						\
+template<typename T>						\
+void								\
+gt_ggc_mx (vec_t<TYPE> *v ATTRIBUTE_UNUSED)			\
+{								\
+}								\
+								\
+template<typename T>						\
+void								\
+gt_pch_nx (vec_t<TYPE> *v ATTRIBUTE_UNUSED)			\
+{								\
+}								\
+								\
+template<typename T>						\
+void								\
+gt_pch_nx (vec_t<TYPE> *v ATTRIBUTE_UNUSED,			\
+	   gt_pointer_operator op ATTRIBUTE_UNUSED,		\
+	   void *cookie ATTRIBUTE_UNUSED)			\
+{								\
+}								\
+struct vec_swallow_trailing_semi
 #define DEF_VEC_ALLOC_A(T,A)		struct vec_swallow_trailing_semi
 /* Support functions for stack vectors.  */

More information about the Gcc mailing list