Fwd: [cxx-conversion] Final trunk->branch merge
Tobias Burnus
burnus@net-b.de
Sun Aug 12 09:01:00 GMT 2012
For information. As mentioned before*, GCC will soon only build with a
C++ compiler.
* http://gcc.gnu.org/ml/fortran/2012-08/msg00014.html
Tobias
-------- original message --------
Subject: [cxx-conversion] Final trunk->branch merge
Date: Sat, 11 Aug 2012 19:43:00 -0400
From: Diego Novillo
To: gcc, Lawrence Crowl, Laurynas Biveinis
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.
Diego.
* 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 Fortran
mailing list