diff --git a/Makefile b/Makefile
index a0bb687d41ef38b337d6f5f973284fd9c9616860..29a2de7f90d944787ffdd3b643e8d40bad9c71ab 100644
--- a/Makefile
+++ b/Makefile
@@ -53,11 +53,17 @@ plugin:
 test:
 	mkdir -p $(TESTD)
 	mkdir -p $(DOTD)
+	echo "\n"
 	$(MAKE) $(TESTD)/test
+	echo "\n"
 	$(MAKE) $(TESTD)/test2
+	echo "\n"
 	$(MAKE) $(TESTD)/test3
+	echo "\n"
 	$(MAKE) $(TESTD)/test4
-	$(MAKE) $(TESTD)/test_pragma1
+	echo "\n"
+	#$(MAKE) $(TESTD)/test_pragma1
+	echo "\n"
 	$(MAKE) $(TESTD)/test_pragma2
 
 .PHONY: dots
diff --git a/include/mpi_collective.hpp b/include/mpi_collective.hpp
index 3fb159dfc207fb0331a2a2cc2c3a68da44541e0c..b5b471231e84bed5dfd58a3c109e6c895e725d58 100644
--- a/include/mpi_collective.hpp
+++ b/include/mpi_collective.hpp
@@ -1,10 +1,16 @@
 #ifndef __MPI_COLLECTIVE_HPP_
 #define __MPI_COLLECTIVE_HPP_
 
+
+
 // dependance of tree-pass.H
 #include <gcc-plugin.h>
 // declare opt_pass
 #include <tree-pass.h>
+//cpp_ttype
+#include <c-family/c-pragma.h>
+//vectors
+#include <vec.h>
 
 /* Enum to represent the collective operations */
 #define DEFMPICOLLECTIVES(CODE, NAME) CODE,
@@ -126,9 +132,9 @@ public:
 	void get_mpi_coll_rank(
 	    function *fun, int rank, int mpi_code, bitmap mpi_coll);
 	//get gimple expr for warning format and location
-	gimple* get_first_stmt(basic_block bb);
-	gimple* get_mpi_stmt(basic_block bb);
-	gimple* get_first_non_mpi_stmt(basic_block bb);
+	gimple *get_first_stmt(basic_block bb);
+	gimple *get_mpi_stmt(basic_block bb);
+	gimple *get_first_non_mpi_stmt(basic_block bb);
 	// raise warnings when mpi collective are badly uses
 	void raise_warning_mpi_rank(function *fun);
 	void raise_warning_mpi_order(function *fun);
@@ -150,5 +156,6 @@ public:
 void register_mpicoll_check_pragma(void *event_data, void *data);
 void mpicoll_check_pragma(cpp_reader *);
 void verify_mpicoll_list(void *event_data, void *data);
+extern vec<tree> fun_vec; //function vector in pragma.
 
 #endif
diff --git a/log b/log
new file mode 100644
index 0000000000000000000000000000000000000000..35fc2e8fc3a37bbb66383bd74586901ca9ba6681
--- /dev/null
+++ b/log
@@ -0,0 +1,1397 @@
+In file included from ./include/mpi_collective.hpp:5,
+                 from src/mpi_collective_graph_utils.cpp:3:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:31:8: error: ‘size_t’ does not name a type
+   31 | extern size_t ggc_round_alloc_size (size_t requested_size);
+      |        ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1:1: note: ‘size_t’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+  +++ |+#include <cstddef>
+    1 | /* Vector API for GNU compiler.
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:32:35: error: ‘size_t’ has not been declared
+   32 | extern void *ggc_realloc (void *, size_t MEM_STAT_DECL);
+      |                                   ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:186:8: error: ‘htab_t’ does not name a type
+  186 | extern htab_t vec_mem_usage_hash;
+      |        ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:197:35: error: ‘size_t’ has not been declared
+  197 |   void register_overhead (void *, size_t, size_t CXX_MEM_STAT_INFO);
+      |                                   ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:197:43: error: ‘size_t’ has not been declared
+  197 |   void register_overhead (void *, size_t, size_t CXX_MEM_STAT_INFO);
+      |                                           ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:198:34: error: ‘size_t’ has not been declared
+  198 |   void release_overhead (void *, size_t, size_t, bool CXX_MEM_STAT_INFO);
+      |                                  ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:198:42: error: ‘size_t’ has not been declared
+  198 |   void release_overhead (void *, size_t, size_t, bool CXX_MEM_STAT_INFO);
+      |                                          ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In static member function ‘static unsigned int vec_prefix::calculate_allocation(vec_prefix*, unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:231:12: error: ‘MAX’ was not declared in this scope
+  231 |     return MAX (4, reserve);
+      |            ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:231:12: note: the macro ‘MAX’ had not yet been defined
+In file included from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/gcc-plugin.h:28,
+                 from ./include/mpi_collective.hpp:8:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/system.h:396: note: it was later defined here
+  396 | #define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
+      | 
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:277:19: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+  277 |                   MEM_STAT_DECL)
+      |                   ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In static member function ‘static void va_heap::reserve(vec<T, va_heap, vl_embed>*&, unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:279:3: error: ‘size_t’ was not declared in this scope; did you mean ‘std::size_t’?
+  279 |   size_t elt_size = sizeof (T);
+      |   ^~~~~~
+      |   std::size_t
+In file included from /usr/include/c++/12/bits/stl_algobase.h:59,
+                 from /usr/include/c++/12/list:60,
+                 from src/mpi_collective_graph_utils.cpp:1:
+/usr/include/x86_64-linux-gnu/c++/12/bits/c++config.h:298:33: note: ‘std::size_t’ declared here
+  298 |   typedef __SIZE_TYPE__         size_t;
+      |                                 ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:282:3: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+  282 |   gcc_checking_assert (alloc);
+      |   ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:282:3: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:284:7: error: ‘GATHER_STATISTICS’ was not declared in this scope
+  284 |   if (GATHER_STATISTICS && v)
+      |       ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:284:7: note: the macro ‘GATHER_STATISTICS’ had not yet been defined
+In file included from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/config.h:6,
+                 from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/gcc-plugin.h:27:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/auto-host.h:312: note: it was later defined here
+  312 | #define GATHER_STATISTICS 0
+      | 
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:285:38: error: ‘elt_size’ was not declared in this scope
+  285 |     v->m_vecpfx.release_overhead (v, elt_size * v->allocated (),
+      |                                      ^~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:288:9: error: expected ‘;’ before ‘size’
+  288 |   size_t size = vec<T, va_heap, vl_embed>::embedded_size (alloc);
+      |         ^~~~~
+      |         ;
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:290:63: error: ‘size’ was not declared in this scope; did you mean ‘std::size’?
+  290 |   v = static_cast <vec<T, va_heap, vl_embed> *> (xrealloc (v, size));
+      |                                                               ^~~~
+      |                                                               std::size
+In file included from /usr/include/c++/12/list:62:
+/usr/include/c++/12/bits/range_access.h:274:5: note: ‘std::size’ declared here
+  274 |     size(const _Tp (&)[_Nm]) noexcept
+      |     ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:293:7: error: ‘GATHER_STATISTICS’ was not declared in this scope
+  293 |   if (GATHER_STATISTICS)
+      |       ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:293:7: note: the macro ‘GATHER_STATISTICS’ had not yet been defined
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/auto-host.h:312: note: it was later defined here
+  312 | #define GATHER_STATISTICS 0
+      | 
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:294:46: error: ‘elt_size’ was not declared in this scope
+  294 |     v->m_vecpfx.register_overhead (v, alloc, elt_size PASS_MEM_STAT);
+      |                                              ^~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In static member function ‘static void va_heap::release(vec<T, va_heap, vl_embed>*&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:309:3: error: ‘size_t’ was not declared in this scope; did you mean ‘std::size_t’?
+  309 |   size_t elt_size = sizeof (T);
+      |   ^~~~~~
+      |   std::size_t
+/usr/include/x86_64-linux-gnu/c++/12/bits/c++config.h:298:33: note: ‘std::size_t’ declared here
+  298 |   typedef __SIZE_TYPE__         size_t;
+      |                                 ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:310:12: error: ‘NULL’ was not declared in this scope
+  310 |   if (v == NULL)
+      |            ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:310:12: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:313:7: error: ‘GATHER_STATISTICS’ was not declared in this scope
+  313 |   if (GATHER_STATISTICS)
+      |       ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:313:7: note: the macro ‘GATHER_STATISTICS’ had not yet been defined
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/auto-host.h:312: note: it was later defined here
+  312 | #define GATHER_STATISTICS 0
+      | 
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:314:38: error: ‘elt_size’ was not declared in this scope
+  314 |     v->m_vecpfx.release_overhead (v, elt_size * v->allocated (),
+      |                                      ^~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:316:5: error: ‘::free’ has not been declared
+  316 |   ::free (v);
+      |     ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1:1: note: ‘free’ is defined in header ‘<cstdlib>’; did you forget to ‘#include <cstdlib>’?
+  +++ |+#include <cstdlib>
+    1 | /* Vector API for GNU compiler.
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:317:7: error: ‘NULL’ was not declared in this scope
+  317 |   v = NULL;
+      |       ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:317:7: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In static member function ‘static void va_gc::release(vec<T, A, vl_embed>*&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:352:7: error: ‘NULL’ was not declared in this scope
+  352 |   v = NULL;
+      |       ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:352:7: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:364:17: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+  364 |                 MEM_STAT_DECL)
+      |                 ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In static member function ‘static void va_gc::reserve(vec<T, A, vl_embed>*&, unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:371:11: error: ‘NULL’ was not declared in this scope
+  371 |       v = NULL;
+      |           ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:371:11: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:376:3: error: ‘size_t’ was not declared in this scope; did you mean ‘std::size_t’?
+  376 |   size_t size = vec<T, A, vl_embed>::embedded_size (alloc);
+      |   ^~~~~~
+      |   std::size_t
+/usr/include/x86_64-linux-gnu/c++/12/bits/c++config.h:298:33: note: ‘std::size_t’ declared here
+  298 |   typedef __SIZE_TYPE__         size_t;
+      |                                 ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:379:3: error: ‘size’ was not declared in this scope; did you mean ‘std::size’?
+  379 |   size = ::ggc_round_alloc_size (size);
+      |   ^~~~
+      |   std::size
+/usr/include/c++/12/bits/range_access.h:274:5: note: ‘std::size’ declared here
+  274 |     size(const _Tp (&)[_Nm]) noexcept
+      |     ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:379:12: error: ‘::ggc_round_alloc_size’ has not been declared
+  379 |   size = ::ggc_round_alloc_size (size);
+      |            ^~~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:382:9: error: expected ‘;’ before ‘vec_offset’
+  382 |   size_t vec_offset = sizeof (vec_prefix);
+      |         ^~~~~~~~~~~
+      |         ;
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:383:9: error: expected ‘;’ before ‘elt_size’
+  383 |   size_t elt_size = sizeof (T);
+      |         ^~~~~~~~~
+      |         ;
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:384:19: error: ‘vec_offset’ was not declared in this scope
+  384 |   alloc = (size - vec_offset) / elt_size;
+      |                   ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:384:33: error: ‘elt_size’ was not declared in this scope
+  384 |   alloc = (size - vec_offset) / elt_size;
+      |                                 ^~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:390:66: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  390 |   v = static_cast <vec<T, A, vl_embed> *> (::ggc_realloc (v, size
+      |                                                          ~       ^
+      |                                                                  )
+  391 |                                                                PASS_MEM_STAT));
+      |                                                                ~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:418:20: error: expected initializer before ‘vec’
+  418 | struct GTY((user)) vec
+      |                    ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:445:20: error: wrong number of template arguments (1, should be 3)
+  445 | debug_helper (vec<T> &ref)
+      |                    ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void debug_helper(int&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:448:23: error: request for member ‘length’ in ‘ref’, which is of non-class type ‘int’
+  448 |   for (i = 0; i < ref.length (); ++i)
+      |                       ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:450:16: error: ‘stderr’ was not declared in this scope
+  450 |       fprintf (stderr, "[%d] = ", i);
+      |                ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1:1: note: ‘stderr’ is defined in header ‘<cstdio>’; did you forget to ‘#include <cstdio>’?
+  +++ |+#include <cstdio>
+    1 | /* Vector API for GNU compiler.
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:450:7: error: there are no arguments to ‘fprintf’ that depend on a template parameter, so a declaration of ‘fprintf’ must be available [-fpermissive]
+  450 |       fprintf (stderr, "[%d] = ", i);
+      |       ^~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:451:22: error: invalid types ‘int[unsigned int]’ for array subscript
+  451 |       debug_slim (ref[i]);
+      |                      ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:451:7: error: there are no arguments to ‘debug_slim’ that depend on a template parameter, so a declaration of ‘debug_slim’ must be available [-fpermissive]
+  451 |       debug_slim (ref[i]);
+      |       ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:452:7: error: there are no arguments to ‘fputc’ that depend on a template parameter, so a declaration of ‘fputc’ must be available [-fpermissive]
+  452 |       fputc ('\n', stderr);
+      |       ^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:463:27: error: wrong number of template arguments (2, should be 3)
+  463 | debug_helper (vec<T, va_gc> &ref)
+      |                           ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:463:1: error: redefinition of ‘template<class T> void debug_helper(int&)’
+  463 | debug_helper (vec<T, va_gc> &ref)
+      | ^~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:445:1: note: ‘template<class T> void debug_helper(int&)’ previously declared here
+  445 | debug_helper (vec<T> &ref)
+      | ^~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:583:20: error: expected initializer before ‘vec’
+  583 | struct GTY((user)) vec<T, A, vl_embed>
+      |                    ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘T* vec_safe_address(vec<T, A, vl_embed>*)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:676:30: error: ‘NULL’ was not declared in this scope
+  676 |   return v ? v->address () : NULL;
+      |                              ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:676:30: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:693:19: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  693 |                   CXX_MEM_STAT_INFO)
+      |                   ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘bool vec_safe_reserve(vec<T, A, vl_embed>*&, unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:697:33: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  697 |     A::reserve (v, nelems, exact PASS_MEM_STAT);
+      |                ~                ^~~~~~~~~~~~~~
+      |                                 )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:704:25: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  704 |                         CXX_MEM_STAT_INFO)
+      |                         ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘bool vec_safe_reserve_exact(vec<T, A, vl_embed>*&, unsigned int)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:706:43: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  706 |   return vec_safe_reserve (v, nelems, true PASS_MEM_STAT);
+      |                           ~               ^~~~~~~~~~~~~~
+      |                                           )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:715:53: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  715 | vec_alloc (vec<T, A, vl_embed> *&v, unsigned nelems CXX_MEM_STAT_INFO)
+      |                                                     ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void vec_alloc(vec<T, A, vl_embed>*&, unsigned int)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:717:7: error: ‘NULL’ was not declared in this scope
+  717 |   v = NULL;
+      |       ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:717:7: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:718:37: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  718 |   vec_safe_reserve (v, nelems, false PASS_MEM_STAT);
+      |                    ~                ^~~~~~~~~~~~~~
+      |                                     )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:736:35: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  736 |                bool exact = false CXX_MEM_STAT_INFO)
+      |                                   ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void vec_safe_grow(vec<T, A, vl_embed>*&, unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:739:3: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+  739 |   gcc_checking_assert (len >= oldlen);
+      |   ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:740:43: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  740 |   vec_safe_reserve (v, len - oldlen, exact PASS_MEM_STAT);
+      |                    ~                      ^~~~~~~~~~~~~~
+      |                                           )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:749:43: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  749 |                        bool exact = false CXX_MEM_STAT_INFO)
+      |                                           ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void vec_safe_grow_cleared(vec<T, A, vl_embed>*&, unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:752:31: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  752 |   vec_safe_grow (v, len, exact PASS_MEM_STAT);
+      |                 ~             ^~~~~~~~~~~~~~
+      |                               )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:762:57: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  762 |                        unsigned len, bool exact = false CXX_MEM_STAT_INFO)
+      |                                                         ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void vec_safe_grow_cleared(vec<T, va_heap, vl_ptr>*&, unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:764:35: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  764 |   v->safe_grow_cleared (len, exact PASS_MEM_STAT);
+      |                        ~          ^~~~~~~~~~~~~~
+      |                                   )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:773:19: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  773 |                   CXX_MEM_STAT_INFO)
+      |                   ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:811:54: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  811 | vec_safe_push (vec<T, A, vl_embed> *&v, const T &obj CXX_MEM_STAT_INFO)
+      |                                                      ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘T* vec_safe_push(vec<T, A, vl_embed>*&, const T&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:813:32: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  813 |   vec_safe_reserve (v, 1, false PASS_MEM_STAT);
+      |                    ~           ^~~~~~~~~~~~~~
+      |                                )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:823:18: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  823 |                  CXX_MEM_STAT_INFO)
+      |                  ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void vec_safe_insert(vec<T, A, vl_embed>*&, unsigned int, const T&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:825:32: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  825 |   vec_safe_reserve (v, 1, false PASS_MEM_STAT);
+      |                    ~           ^~~~~~~~~~~~~~
+      |                                )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:843:41: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  843 | vec_safe_copy (vec<T, A, vl_embed> *src CXX_MEM_STAT_INFO)
+      |                                         ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘vec<T, A, vl_embed>* vec_safe_copy(vec<T, A, vl_embed>*)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:845:27: error: ‘ALONE_PASS_MEM_STAT’ was not declared in this scope
+  845 |   return src ? src->copy (ALONE_PASS_MEM_STAT) : NULL;
+      |                           ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:845:27: note: the macro ‘ALONE_PASS_MEM_STAT’ had not yet been defined
+In file included from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/hash-table.h:246,
+                 from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/coretypes.h:486,
+                 from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/gcc-plugin.h:29:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/statistics.h:49: note: it was later defined here
+   49 | #define ALONE_PASS_MEM_STAT
+      | 
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:845:50: error: ‘NULL’ was not declared in this scope
+  845 |   return src ? src->copy (ALONE_PASS_MEM_STAT) : NULL;
+      |                                                  ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:845:50: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:853:18: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+  853 |                  CXX_MEM_STAT_INFO)
+      |                  ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void vec_safe_splice(vec<T, A, vl_embed>*&, const vec<T, A, vl_embed>*)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:858:67: error: expected ‘)’ before ‘PASS_MEM_STAT’
+  858 |       vec_safe_reserve_exact (dst, vec_safe_length (dst) + src_len
+      |                              ~                                    ^
+      |                                                                   )
+  859 |                               PASS_MEM_STAT);
+      |                               ~~~~~~~~~~~~~                        
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:879:47: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+  879 | vec<T, A, vl_embed>::operator[] (unsigned ix) const
+      |                                               ^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:887:45: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+  887 | vec<T, A, vl_embed>::operator[] (unsigned ix)
+      |                                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:898:32: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+  898 | vec<T, A, vl_embed>::last (void)
+      |                                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:913:46: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+  913 | vec<T, A, vl_embed>::space (unsigned nelems) const
+      |                                              ^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:928:52: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+  928 | vec<T, A, vl_embed>::iterate (unsigned ix, T *ptr) const
+      |                                                    ^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:954:53: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+  954 | vec<T, A, vl_embed>::iterate (unsigned ix, T **ptr) const
+      |                                                     ^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:973:47: error: template definition of non-template ‘vec<T, A, vl_embed>* vec<T, A, vl_embed>::copy’
+  973 | vec<T, A, vl_embed>::copy (ALONE_MEM_STAT_DECL) const
+      |                                               ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:973:28: error: ‘ALONE_MEM_STAT_DECL’ was not declared in this scope
+  973 | vec<T, A, vl_embed>::copy (ALONE_MEM_STAT_DECL) const
+      |                            ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:973:28: note: the macro ‘ALONE_MEM_STAT_DECL’ had not yet been defined
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/statistics.h:47: note: it was later defined here
+   47 | #define ALONE_MEM_STAT_DECL void
+      | 
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:992:60: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+  992 | vec<T, A, vl_embed>::splice (const vec<T, A, vl_embed> &src)
+      |                                                            ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1005:60: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1005 | vec<T, A, vl_embed>::splice (const vec<T, A, vl_embed> *src)
+      |                                                            ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1018:46: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1018 | vec<T, A, vl_embed>::quick_push (const T &obj)
+      |                                              ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1031:31: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1031 | vec<T, A, vl_embed>::pop (void)
+      |                               ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1043:45: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1043 | vec<T, A, vl_embed>::truncate (unsigned size)
+      |                                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1055:61: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1055 | vec<T, A, vl_embed>::quick_insert (unsigned ix, const T &obj)
+      |                                                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1071:49: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1071 | vec<T, A, vl_embed>::ordered_remove (unsigned ix)
+      |                                                 ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1118:51: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1118 | vec<T, A, vl_embed>::unordered_remove (unsigned ix)
+      |                                                   ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1130:61: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1130 | vec<T, A, vl_embed>::block_remove (unsigned ix, unsigned len)
+      |                                                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1144:68: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1144 | vec<T, A, vl_embed>::qsort (int (*cmp) (const void *, const void *))
+      |                                                                    ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1156:38: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1156 |                            void *data)
+      |                                      ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1168:65: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1168 |                                              void *), void *data)
+      |                                                                 ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1180:73: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1180 |                               int (*compar) (const void *, const void *))
+      |                                                                         ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1215:65: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1215 |                                              void *), void *data)
+      |                                                                 ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1248:49: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1248 | vec<T, A, vl_embed>::contains (const T &search) const
+      |                                                 ^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1266:3: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1266 |   const
+      |   ^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1303:8: error: ‘size_t’ does not name a type
+ 1303 | inline size_t
+      |        ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1303:8: note: ‘size_t’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1321:79: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1321 | vec<T, A, vl_embed>::embedded_init (unsigned alloc, unsigned num, unsigned aut)
+      |                                                                               ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1334:46: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1334 | vec<T, A, vl_embed>::quick_grow (unsigned len)
+      |                                              ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1346:54: error: invalid use of incomplete type ‘struct vec<T, A, vl_embed>’
+ 1346 | vec<T, A, vl_embed>::quick_grow_cleared (unsigned len)
+      |                                                      ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<T, A, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1359:24: error: wrong number of template arguments (2, should be 3)
+ 1359 | gt_ggc_mx (vec<T, va_gc> *v)
+      |                        ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void gt_ggc_mx(int*)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1362:31: error: request for member ‘length’ in ‘v->’, which is of non-class type ‘int’
+ 1362 |   for (unsigned i = 0; i < v->length (); i++)
+      |                               ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1363:20: error: invalid types ‘int[unsigned int]’ for array subscript
+ 1363 |     gt_ggc_mx ((*v)[i]);
+      |                    ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1368:46: error: expected ‘,’ or ‘...’ before ‘ATTRIBUTE_UNUSED’
+ 1368 | gt_ggc_mx (vec<T, va_gc_atomic, vl_embed> *v ATTRIBUTE_UNUSED)
+      |                                              ^~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1388:38: error: ‘gt_pointer_operator’ has not been declared
+ 1388 | gt_pch_nx (vec<T *, A, vl_embed> *v, gt_pointer_operator op, void *cookie)
+      |                                      ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void gt_pch_nx(vec<T*, A, vl_embed>*, int, void*)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1391:21: error: ‘NULL’ was not declared in this scope
+ 1391 |     op (&((*v)[i]), NULL, cookie);
+      |                     ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1391:21: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1396:36: error: ‘gt_pointer_operator’ has not been declared
+ 1396 | gt_pch_nx (vec<T, A, vl_embed> *v, gt_pointer_operator op, void *cookie)
+      |                                    ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void gt_pch_nx(vec<T, A, vl_embed>*, int, void*)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1398:31: error: ‘gt_pointer_operator’ has not been declared
+ 1398 |   extern void gt_pch_nx (T *, gt_pointer_operator, void *);
+      |                               ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1432:22: error: ‘size_t’ has not been declared
+ 1432 | template<typename T, size_t N = 0>
+      |                      ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1454:13: error: ‘size_t’ has not been declared
+ 1454 |   template <size_t N>
+      |             ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1455:20: error: ‘N’ was not declared in this scope
+ 1455 |   vec (auto_vec<T, N> &) = delete;
+      |                    ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1455:21: error: template argument 2 is invalid
+ 1455 |   vec (auto_vec<T, N> &) = delete;
+      |                     ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1457:13: error: ‘size_t’ has not been declared
+ 1457 |   template <size_t N>
+      |             ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1458:31: error: ‘N’ was not declared in this scope
+ 1458 |   void operator= (auto_vec<T, N> &) = delete;
+      |                               ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1458:32: error: template argument 2 is invalid
+ 1458 |   void operator= (auto_vec<T, N> &) = delete;
+      |                                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1462:32: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+ 1462 |   void create (unsigned nelems CXX_MEM_STAT_INFO);
+      |                                ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1505:13: error: ‘ALONE_CXX_MEM_STAT_INFO’ has not been declared
+ 1505 |   vec copy (ALONE_CXX_MEM_STAT_INFO) const;
+      |             ^~~~~~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1506:40: error: expected ‘,’ before ‘CXX_MEM_STAT_INFO’
+ 1506 |   bool reserve (unsigned, bool = false CXX_MEM_STAT_INFO);
+      |                                        ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1514:42: error: expected ‘,’ before ‘CXX_MEM_STAT_INFO’
+ 1514 |   void safe_grow (unsigned, bool = false CXX_MEM_STAT_INFO);
+      |                                          ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1515:50: error: expected ‘,’ before ‘CXX_MEM_STAT_INFO’
+ 1515 |   void safe_grow_cleared (unsigned, bool = false CXX_MEM_STAT_INFO);
+      |                                                  ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘bool vec<T, va_heap, vl_ptr>::exists() const’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1467:21: error: ‘NULL’ was not declared in this scope
+ 1467 |   { return m_vec != NULL; }
+      |                     ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1467:21: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘T* vec<T, va_heap, vl_ptr>::address()’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1476:39: error: ‘NULL’ was not declared in this scope
+ 1476 |   { return m_vec ? m_vec->m_vecdata : NULL; }
+      |                                       ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1476:39: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘const T* vec<T, va_heap, vl_ptr>::address() const’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1479:39: error: ‘NULL’ was not declared in this scope
+ 1479 |   { return m_vec ? m_vec->m_vecdata : NULL; }
+      |                                       ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1479:39: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1547:22: error: ‘size_t’ has not been declared
+ 1547 | template<typename T, size_t N /* = 0 */>
+      |                      ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1548:39: error: wrong number of template arguments (2, should be 3)
+ 1548 | class auto_vec : public vec<T, va_heap>
+      |                                       ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1590:45: error: wrong number of template arguments (2, should be 3)
+ 1590 | class auto_vec<T, 0> : public vec<T, va_heap>
+      |                                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1657:17: error: wrong number of template arguments (1, should be 3)
+ 1657 | vec_alloc (vec<T> *&v, unsigned nelems CXX_MEM_STAT_INFO)
+      |                 ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1657:40: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+ 1657 | vec_alloc (vec<T> *&v, unsigned nelems CXX_MEM_STAT_INFO)
+      |                                        ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void vec_alloc(int*&, unsigned int)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1659:16: error: wrong number of template arguments (1, should be 3)
+ 1659 |   v = new vec<T>;
+      |                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1660:6: error: request for member ‘create’ in ‘v->’, which is of non-class type ‘int’
+ 1660 |   v->create (nelems PASS_MEM_STAT);
+      |      ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1660:20: error: expected ‘)’ before ‘PASS_MEM_STAT’
+ 1660 |   v->create (nelems PASS_MEM_STAT);
+      |             ~      ^~~~~~~~~~~~~~
+      |                    )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1667:48: error: template argument 2 is invalid
+ 1667 | class auto_string_vec : public auto_vec <char *>
+      |                                                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1686:45: error: template argument 2 is invalid
+ 1686 | class auto_delete_vec : public auto_vec <T *>
+      |                                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1690:26: error: expected ‘)’ before ‘s’
+ 1690 |   auto_delete_vec (size_t s) : auto_vec <T *> (s) {}
+      |                   ~      ^~
+      |                          )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1695:3: error: ISO C++ forbids declaration of ‘DISABLE_COPY_AND_ASSIGN’ with no type [-fpermissive]
+ 1695 |   DISABLE_COPY_AND_ASSIGN(auto_delete_vec);
+      |   ^~~~~~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1702:32: error: wrong number of template arguments (2, should be 3)
+ 1702 | vec_check_alloc (vec<T, va_heap> *&vec, unsigned nelems CXX_MEM_STAT_INFO)
+      |                                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1702:57: error: expected ‘,’ or ‘...’ before ‘CXX_MEM_STAT_INFO’
+ 1702 | vec_check_alloc (vec<T, va_heap> *&vec, unsigned nelems CXX_MEM_STAT_INFO)
+      |                                                         ^~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void vec_check_alloc(int*&, unsigned int)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1705:27: error: expected ‘)’ before ‘PASS_MEM_STAT’
+ 1705 |     vec_alloc (vec, nelems PASS_MEM_STAT);
+      |               ~           ^~~~~~~~~~~~~~
+      |                           )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1705:15: error: no matching function for call to ‘vec_alloc(int*&, unsigned int&)’
+ 1705 |     vec_alloc (vec, nelems PASS_MEM_STAT);
+      |     ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:715:1: note: candidate: ‘template<class T, class A> void vec_alloc(vec<T, A, vl_embed>*&, unsigned int)’
+  715 | vec_alloc (vec<T, A, vl_embed> *&v, unsigned nelems CXX_MEM_STAT_INFO)
+      | ^~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:715:1: note:   template argument deduction/substitution failed:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1705:15: note:   mismatched types ‘vec<T, A, vl_embed>’ and ‘int’
+ 1705 |     vec_alloc (vec, nelems PASS_MEM_STAT);
+      |     ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1657:1: note: candidate: ‘template<class T> void vec_alloc(int*&, unsigned int)’
+ 1657 | vec_alloc (vec<T> *&v, unsigned nelems CXX_MEM_STAT_INFO)
+      | ^~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1657:1: note:   template argument deduction/substitution failed:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1705:15: note:   couldn’t deduce template parameter ‘T’
+ 1705 |     vec_alloc (vec, nelems PASS_MEM_STAT);
+      |     ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1713:16: error: wrong number of template arguments (1, should be 3)
+ 1713 | vec_free (vec<T> *&v)
+      |                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void vec_free(int*&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1715:12: error: ‘NULL’ was not declared in this scope
+ 1715 |   if (v == NULL)
+      |            ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1715:12: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1718:6: error: request for member ‘release’ in ‘v->’, which is of non-class type ‘int’
+ 1718 |   v->release ();
+      |      ^~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1720:7: error: ‘NULL’ was not declared in this scope
+ 1720 |   v = NULL;
+      |       ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1720:7: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In destructor ‘auto_string_vec::~auto_string_vec()’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1770:19: error: ‘class auto_string_vec’ has no member named ‘iterate’
+ 1770 |   for (I = 0; (V).iterate ((I), &(P)); ++(I))
+      |                   ^~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1798:3: note: in expansion of macro ‘FOR_EACH_VEC_ELT’
+ 1798 |   FOR_EACH_VEC_ELT (*this, i, str)
+      |   ^~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1799:5: error: ‘free’ was not declared in this scope
+ 1799 |     free (str);
+      |     ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1799:5: note: ‘free’ is defined in header ‘<cstdlib>’; did you forget to ‘#include <cstdlib>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1820:1: error: ‘vec<T, va_heap, vl_ptr> vec<T, va_heap, vl_ptr>::copy’ is not a static data member of ‘struct vec<T, va_heap, vl_ptr>’
+ 1820 | vec<T, va_heap, vl_ptr>::copy (ALONE_MEM_STAT_DECL) const
+      | ^~~~~~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1820:51: error: template definition of non-template ‘vec<T, va_heap, vl_ptr> vec<T, va_heap, vl_ptr>::copy’
+ 1820 | vec<T, va_heap, vl_ptr>::copy (ALONE_MEM_STAT_DECL) const
+      |                                                   ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1820:32: error: ‘ALONE_MEM_STAT_DECL’ was not declared in this scope
+ 1820 | vec<T, va_heap, vl_ptr>::copy (ALONE_MEM_STAT_DECL) const
+      |                                ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1820:32: note: the macro ‘ALONE_MEM_STAT_DECL’ had not yet been defined
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/statistics.h:47: note: it was later defined here
+   47 | #define ALONE_MEM_STAT_DECL void
+      | 
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1840:63: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+ 1840 | vec<T, va_heap, vl_ptr>::reserve (unsigned nelems, bool exact MEM_STAT_DECL)
+      |                                                               ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘bool vec<T, va_heap, vl_ptr>::reserve(unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1853:15: error: ‘NULL’ was not declared in this scope
+ 1853 |       m_vec = NULL;
+      |               ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1853:15: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1858:41: error: expected ‘)’ before ‘PASS_MEM_STAT’
+ 1858 |   va_heap::reserve (m_vec, nelems, exact PASS_MEM_STAT);
+      |                    ~                    ^~~~~~~~~~~~~~
+      |                                         )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1876:57: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+ 1876 | vec<T, va_heap, vl_ptr>::reserve_exact (unsigned nelems MEM_STAT_DECL)
+      |                                                         ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘bool vec<T, va_heap, vl_ptr>::reserve_exact(unsigned int)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1878:31: error: expected ‘)’ before ‘PASS_MEM_STAT’
+ 1878 |   return reserve (nelems, true PASS_MEM_STAT);
+      |                  ~            ^~~~~~~~~~~~~~
+      |                               )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1889:50: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+ 1889 | vec<T, va_heap, vl_ptr>::create (unsigned nelems MEM_STAT_DECL)
+      |                                                  ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘void vec<T, va_heap, vl_ptr>::create(unsigned int)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1891:11: error: ‘NULL’ was not declared in this scope
+ 1891 |   m_vec = NULL;
+      |           ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1891:11: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1893:26: error: expected ‘)’ before ‘PASS_MEM_STAT’
+ 1893 |     reserve_exact (nelems PASS_MEM_STAT);
+      |                   ~      ^~~~~~~~~~~~~~
+      |                          )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1937:39: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+ 1937 |                                       MEM_STAT_DECL)
+      |                                       ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1965:50: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+ 1965 | vec<T, va_heap, vl_ptr>::safe_push (const T &obj MEM_STAT_DECL)
+      |                                                  ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘T* vec<T, va_heap, vl_ptr>::safe_push(const T&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1967:20: error: expected ‘)’ before ‘PASS_MEM_STAT’
+ 1967 |   reserve (1, false PASS_MEM_STAT);
+      |           ~        ^~~~~~~~~~~~~~
+      |                    )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘void vec<T, va_heap, vl_ptr>::truncate(unsigned int)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1992:5: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+ 1992 |     gcc_checking_assert (size == 0);
+      |     ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2002:62: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+ 2002 | vec<T, va_heap, vl_ptr>::safe_grow (unsigned len, bool exact MEM_STAT_DECL)
+      |                                                              ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘void vec<T, va_heap, vl_ptr>::safe_grow(unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2005:3: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+ 2005 |   gcc_checking_assert (oldlen <= len);
+      |   ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2006:31: error: expected ‘)’ before ‘PASS_MEM_STAT’
+ 2006 |   reserve (len - oldlen, exact PASS_MEM_STAT);
+      |           ~                   ^~~~~~~~~~~~~~
+      |                               )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2010:5: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+ 2010 |     gcc_checking_assert (len == 0);
+      |     ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2021:45: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+ 2021 |                                             MEM_STAT_DECL)
+      |                                             ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘void vec<T, va_heap, vl_ptr>::safe_grow_cleared(unsigned int, bool)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2024:3: error: ‘size_t’ was not declared in this scope; did you mean ‘std::size_t’?
+ 2024 |   size_t growby = len - oldlen;
+      |   ^~~~~~
+      |   std::size_t
+/usr/include/x86_64-linux-gnu/c++/12/bits/c++config.h:298:33: note: ‘std::size_t’ declared here
+  298 |   typedef __SIZE_TYPE__         size_t;
+      |                                 ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2025:24: error: expected ‘)’ before ‘PASS_MEM_STAT’
+ 2025 |   safe_grow (len, exact PASS_MEM_STAT);
+      |             ~          ^~~~~~~~~~~~~~
+      |                        )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2026:7: error: ‘growby’ was not declared in this scope
+ 2026 |   if (growby != 0)
+      |       ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2072:65: error: expected ‘,’ or ‘...’ before ‘MEM_STAT_DECL’
+ 2072 | vec<T, va_heap, vl_ptr>::safe_insert (unsigned ix, const T &obj MEM_STAT_DECL)
+      |                                                                 ^~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘void vec<T, va_heap, vl_ptr>::safe_insert(unsigned int, const T&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2074:20: error: expected ‘)’ before ‘PASS_MEM_STAT’
+ 2074 |   reserve (1, false PASS_MEM_STAT);
+      |           ~        ^~~~~~~~~~~~~~
+      |                    )
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘T* vec<T, va_heap, vl_ptr>::bsearch(const void*, int (*)(const void*, const void*))’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2158:10: error: ‘NULL’ was not declared in this scope
+ 2158 |   return NULL;
+      |          ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2158:10: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘T* vec<T, va_heap, vl_ptr>::bsearch(const void*, int (*)(const void*, const void*, void*), void*)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2172:10: error: ‘NULL’ was not declared in this scope
+ 2172 |   return NULL;
+      |          ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2172:10: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2224:27: error: wrong number of template arguments (1, should be 3)
+ 2224 | release_vec_vec (vec<vec<T> > &vec)
+      |                           ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2224:29: error: wrong number of template arguments (1, should be 3)
+ 2224 | release_vec_vec (vec<vec<T> > &vec)
+      |                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In function ‘void release_vec_vec(int&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2226:32: error: request for member ‘length’ in ‘vec’, which is of non-class type ‘int’
+ 2226 |   for (unsigned i = 0; i < vec.length (); i++)
+      |                                ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2227:8: error: invalid types ‘int[unsigned int]’ for array subscript
+ 2227 |     vec[i].release ();
+      |        ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2229:7: error: request for member ‘release’ in ‘vec’, which is of non-class type ‘int’
+ 2229 |   vec.release ();
+      |       ^~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2260:12: error: ‘size_t’ has not been declared
+ 2260 |   template<size_t N>
+      |            ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2261:27: error: ‘N’ was not declared in this scope
+ 2261 |   array_slice (T (&array)[N]) : m_base (array), m_size (N) {}
+      |                           ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2264:32: error: wrong number of template arguments (1, should be 3)
+ 2264 |   array_slice (const vec<OtherT> &v)
+      |                                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2281:3: error: ‘size_t’ does not name a type
+ 2281 |   size_t size () const { return m_size; }
+      |   ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2281:3: note: ‘size_t’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2282:3: error: ‘size_t’ does not name a type
+ 2282 |   size_t size_bytes () const { return m_size * sizeof (T); }
+      |   ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2282:3: note: ‘size_t’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In constructor ‘array_slice<T>::array_slice(...)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2261:41: error: ‘array’ was not declared in this scope
+ 2261 |   array_slice (T (&array)[N]) : m_base (array), m_size (N) {}
+      |                                         ^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2261:57: error: ‘N’ was not declared in this scope
+ 2261 |   array_slice (T (&array)[N]) : m_base (array), m_size (N) {}
+      |                                                         ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In constructor ‘array_slice<T>::array_slice(const int&)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2265:17: error: request for member ‘address’ in ‘v’, which is of non-class type ‘const int’
+ 2265 |     : m_base (v.address ()), m_size (v.length ()) {}
+      |                 ^~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2265:40: error: request for member ‘length’ in ‘v’, which is of non-class type ‘const int’
+ 2265 |     : m_base (v.address ()), m_size (v.length ()) {}
+      |                                        ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘array_slice<T>::value_type& array_slice<T>::front()’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2301:3: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+ 2301 |   gcc_checking_assert (m_size);
+      |   ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘const array_slice<T>::value_type& array_slice<T>::front() const’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2309:3: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+ 2309 |   gcc_checking_assert (m_size);
+      |   ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘array_slice<T>::value_type& array_slice<T>::back()’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2317:3: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+ 2317 |   gcc_checking_assert (m_size);
+      |   ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘const array_slice<T>::value_type& array_slice<T>::back() const’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2325:3: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+ 2325 |   gcc_checking_assert (m_size);
+      |   ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘array_slice<T>::value_type& array_slice<T>::operator[](unsigned int)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2333:3: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+ 2333 |   gcc_checking_assert (i < m_size);
+      |   ^~~~~~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In member function ‘const array_slice<T>::value_type& array_slice<T>::operator[](unsigned int) const’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2341:3: error: there are no arguments to ‘gcc_checking_assert’ that depend on a template parameter, so a declaration of ‘gcc_checking_assert’ must be available [-fpermissive]
+ 2341 |   gcc_checking_assert (i < m_size);
+      |   ^~~~~~~~~~~~~~~~~~~
+In file included from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/backend.h:29,
+                 from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/gcc-plugin.h:30:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h:131:24: error: wrong number of template arguments (2, should be 3)
+  131 |   vec<rtx_insn *, va_gc> *x_forced_labels;
+      |                        ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h:145:19: error: wrong number of template arguments (2, should be 3)
+  145 |   vec<uchar, va_gc> *action_record_data;
+      |                   ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h:147:30: error: wrong number of template arguments (2, should be 3)
+  147 |   vec<call_site_record, va_gc> *call_site_record_v[2];
+      |                              ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h:230:29: error: wrong number of template arguments (2, should be 3)
+  230 |   vec<callinfo_callee, va_gc> *callees;
+      |                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h:234:29: error: wrong number of template arguments (2, should be 3)
+  234 |   vec<callinfo_dalloc, va_gc> *dallocs;
+      |                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h:288:18: error: wrong number of template arguments (2, should be 3)
+  288 |   vec<tree, va_gc> *local_decls;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h:497:31: error: wrong number of template arguments (2, should be 3)
+  497 | extern GTY(()) vec<tree, va_gc> *types_used_by_cur_var_decl;
+      |                               ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h:709:16: error: wrong number of template arguments (1, should be 3)
+  709 | extern vec<edge> convert_jumps_to_returns (basic_block last_bb, bool simple_p,
+      |                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/function.h:710:52: error: wrong number of template arguments (1, should be 3)
+  710 |                                            vec<edge> unconverted);
+      |                                                    ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+In file included from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/backend.h:32:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:119:18: error: wrong number of template arguments (2, should be 3)
+  119 |   vec<edge, va_gc> *preds;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:120:18: error: wrong number of template arguments (2, should be 3)
+  120 |   vec<edge, va_gc> *succs;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: In function ‘bool single_succ_p(const_basic_block)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: error: no matching function for call to ‘vec_safe_length(int* const&)’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:323:10: note: in expansion of macro ‘EDGE_COUNT’
+  323 |   return EDGE_COUNT (bb->succs) == 1;
+      |          ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note: candidate: ‘template<class T, class A> unsigned int vec_safe_length(const vec<T, A, vl_embed>*)’
+  665 | vec_safe_length (const vec<T, A, vl_embed> *v)
+      | ^~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note:   template argument deduction/substitution failed:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: note:   mismatched types ‘const vec<T, A, vl_embed>’ and ‘int’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:323:10: note: in expansion of macro ‘EDGE_COUNT’
+  323 |   return EDGE_COUNT (bb->succs) == 1;
+      |          ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: In function ‘bool single_pred_p(const_basic_block)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: error: no matching function for call to ‘vec_safe_length(int* const&)’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:331:10: note: in expansion of macro ‘EDGE_COUNT’
+  331 |   return EDGE_COUNT (bb->preds) == 1;
+      |          ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note: candidate: ‘template<class T, class A> unsigned int vec_safe_length(const vec<T, A, vl_embed>*)’
+  665 | vec_safe_length (const vec<T, A, vl_embed> *v)
+      | ^~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note:   template argument deduction/substitution failed:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: note:   mismatched types ‘const vec<T, A, vl_embed>’ and ‘int’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:331:10: note: in expansion of macro ‘EDGE_COUNT’
+  331 |   return EDGE_COUNT (bb->preds) == 1;
+      |          ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: In function ‘edge_def* single_succ_edge(const_basic_block)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:316:55: error: invalid types ‘int[int]’ for array subscript
+  316 | #define EDGE_SUCC(bb,i)                 (*(bb)->succs)[(i)]
+      |                                                       ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:341:10: note: in expansion of macro ‘EDGE_SUCC’
+  341 |   return EDGE_SUCC (bb, 0);
+      |          ^~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: In function ‘edge_def* single_pred_edge(const_basic_block)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:315:55: error: invalid types ‘int[int]’ for array subscript
+  315 | #define EDGE_PRED(bb,i)                 (*(bb)->preds)[(i)]
+      |                                                       ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:351:10: note: in expansion of macro ‘EDGE_PRED’
+  351 |   return EDGE_PRED (bb, 0);
+      |          ^~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:376:18: error: wrong number of template arguments (2, should be 3)
+  376 |   vec<edge, va_gc> **container;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:379:30: error: wrong number of template arguments (2, should be 3)
+  379 | static inline vec<edge, va_gc> *
+      |                              ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:391:28: error: wrong number of template arguments (2, should be 3)
+  391 | ei_start_1 (vec<edge, va_gc> **ev)
+      |                            ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:404:27: error: wrong number of template arguments (2, should be 3)
+  404 | ei_last_1 (vec<edge, va_gc> **ev)
+      |                           ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: In function ‘edge_iterator ei_last_1(int**)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: error: no matching function for call to ‘vec_safe_length(int*&)’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:408:13: note: in expansion of macro ‘EDGE_COUNT’
+  408 |   i.index = EDGE_COUNT (*ev) - 1;
+      |             ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note: candidate: ‘template<class T, class A> unsigned int vec_safe_length(const vec<T, A, vl_embed>*)’
+  665 | vec_safe_length (const vec<T, A, vl_embed> *v)
+      | ^~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note:   template argument deduction/substitution failed:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: note:   mismatched types ‘const vec<T, A, vl_embed>’ and ‘int’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:408:13: note: in expansion of macro ‘EDGE_COUNT’
+  408 |   i.index = EDGE_COUNT (*ev) - 1;
+      |             ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: In function ‘bool ei_end_p(edge_iterator)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: error: no matching function for call to ‘vec_safe_length(int*)’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:418:22: note: in expansion of macro ‘EDGE_COUNT’
+  418 |   return (i.index == EDGE_COUNT (ei_container (i)));
+      |                      ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note: candidate: ‘template<class T, class A> unsigned int vec_safe_length(const vec<T, A, vl_embed>*)’
+  665 | vec_safe_length (const vec<T, A, vl_embed> *v)
+      | ^~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note:   template argument deduction/substitution failed:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: note:   mismatched types ‘const vec<T, A, vl_embed>’ and ‘int’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:418:22: note: in expansion of macro ‘EDGE_COUNT’
+  418 |   return (i.index == EDGE_COUNT (ei_container (i)));
+      |                      ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: In function ‘bool ei_one_before_end_p(edge_iterator)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: error: no matching function for call to ‘vec_safe_length(int*)’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:426:26: note: in expansion of macro ‘EDGE_COUNT’
+  426 |   return (i.index + 1 == EDGE_COUNT (ei_container (i)));
+      |                          ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note: candidate: ‘template<class T, class A> unsigned int vec_safe_length(const vec<T, A, vl_embed>*)’
+  665 | vec_safe_length (const vec<T, A, vl_embed> *v)
+      | ^~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note:   template argument deduction/substitution failed:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: note:   mismatched types ‘const vec<T, A, vl_embed>’ and ‘int’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:426:26: note: in expansion of macro ‘EDGE_COUNT’
+  426 |   return (i.index + 1 == EDGE_COUNT (ei_container (i)));
+      |                          ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: In function ‘void ei_next(edge_iterator*)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: error: no matching function for call to ‘vec_safe_length(int*)’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/system.h:800:49: note: in definition of macro ‘gcc_checking_assert’
+  800 | #define gcc_checking_assert(EXPR) ((void)(0 && (EXPR)))
+      |                                                 ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:433:35: note: in expansion of macro ‘EDGE_COUNT’
+  433 |   gcc_checking_assert (i->index < EDGE_COUNT (ei_container (*i)));
+      |                                   ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note: candidate: ‘template<class T, class A> unsigned int vec_safe_length(const vec<T, A, vl_embed>*)’
+  665 | vec_safe_length (const vec<T, A, vl_embed> *v)
+      | ^~~~~~~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:665:1: note:   template argument deduction/substitution failed:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:313:57: note:   mismatched types ‘const vec<T, A, vl_embed>’ and ‘int’
+  313 | #define EDGE_COUNT(ev)                  vec_safe_length (ev)
+      |                                         ~~~~~~~~~~~~~~~~^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/system.h:800:49: note: in definition of macro ‘gcc_checking_assert’
+  800 | #define gcc_checking_assert(EXPR) ((void)(0 && (EXPR)))
+      |                                                 ^~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:433:35: note: in expansion of macro ‘EDGE_COUNT’
+  433 |   gcc_checking_assert (i->index < EDGE_COUNT (ei_container (*i)));
+      |                                   ^~~~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: In function ‘edge_def* ei_edge(edge_iterator)’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:314:46: error: invalid types ‘int[unsigned int]’ for array subscript
+  314 | #define EDGE_I(ev,i)                    (*ev)[(i)]
+      |                                              ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:449:10: note: in expansion of macro ‘EDGE_I’
+  449 |   return EDGE_I (ei_container (i), i.index);
+      |          ^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h: At global scope:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/basic-block.h:554:36: error: wrong number of template arguments (2, should be 3)
+  554 | find_fallthru_edge (vec<edge, va_gc> *edges)
+      |                                    ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+In file included from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/cfg.h:23,
+                 from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/backend.h:33:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/dominance.h:40:65: error: wrong number of template arguments (1, should be 3)
+   40 |                                                  vec<basic_block>);
+      |                                                                 ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/dominance.h:45:60: error: wrong number of template arguments (1, should be 3)
+   45 |                                             vec<basic_block>);
+      |                                                            ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/dominance.h:49:28: error: template argument 2 is invalid
+   49 | extern auto_vec<basic_block> get_dominated_by (enum cdi_direction, basic_block);
+      |                            ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/dominance.h:50:28: error: template argument 2 is invalid
+   50 | extern auto_vec<basic_block> get_dominated_by_region (enum cdi_direction,
+      |                            ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/dominance.h:53:28: error: template argument 2 is invalid
+   53 | extern auto_vec<basic_block> get_dominated_to_depth (enum cdi_direction,
+      |                            ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/dominance.h:55:28: error: template argument 2 is invalid
+   55 | extern auto_vec<basic_block> get_all_dominated_blocks (enum cdi_direction,
+      |                            ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/dominance.h:81:52: error: wrong number of template arguments (1, should be 3)
+   81 |                                     vec<basic_block> &, bool);
+      |                                                    ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/cfg.h:45:25: error: wrong number of template arguments (2, should be 3)
+   45 |   vec<basic_block, va_gc> *x_basic_block_info;
+      |                         ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/cfg.h:61:25: error: wrong number of template arguments (2, should be 3)
+   61 |   vec<basic_block, va_gc> *x_label_to_block_map;
+      |                         ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+In file included from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/gcc-plugin.h:31:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/cfghooks.h:174:64: error: wrong number of template arguments (1, should be 3)
+  174 |                                                        vec<edge> *, int);
+      |                                                                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/cfghooks.h:259:54: error: wrong number of template arguments (1, should be 3)
+  259 |                                              vec<edge> *to_remove, int flags);
+      |                                                      ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+In file included from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/gcc-plugin.h:34:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/cfganal.h:47:18: error: wrong number of template arguments (1, should be 3)
+   47 |   vec<bitmap_head> control_dependence_map;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/cfganal.h:48:27: error: wrong number of template arguments (1, should be 3)
+   48 |   vec<std::pair<int, int> > m_el;
+      |                           ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/cfganal.h:69:49: error: wrong number of template arguments (1, should be 3)
+   69 | extern void inverted_post_order_compute (vec<int> *postorder, sbitmap *start_points = 0);
+      |                                                 ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/cfganal.h:75:75: error: wrong number of template arguments (1, should be 3)
+   75 |                                                   vec<std::pair<int, int> > *);
+      |                                                                           ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+In file included from /usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/gcc-plugin.h:42:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/tree-core.h:1521:29: error: wrong number of template arguments (2, should be 3)
+ 1521 |   vec<constructor_elt, va_gc> *elts;
+      |                             ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/tree-core.h:1653:18: error: wrong number of template arguments (2, should be 3)
+ 1653 |   vec<tree, va_gc> *nonlocalized_vars;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/tree-core.h:1740:18: error: wrong number of template arguments (2, should be 3)
+ 1740 |   vec<tree, va_gc> *base_accesses;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/tree-core.h:1746:18: error: wrong number of template arguments (2, should be 3)
+ 1746 |   vec<tree, va_gc> base_binfos;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/tree-core.h:2175:18: error: wrong number of template arguments (2, should be 3)
+ 2175 |   vec<tree, va_gc> *pending_statics;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/tree-core.h:2216:18: error: wrong number of template arguments (2, should be 3)
+ 2216 |   vec<tree, va_gc> *to;
+      |                  ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/tree-core.h:2275:37: error: wrong number of template arguments (2, should be 3)
+ 2275 | extern GTY(()) vec<alias_pair, va_gc> *alias_pairs;
+      |                                     ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/tree-core.h:2289:32: error: wrong number of template arguments (2, should be 3)
+ 2289 | extern GTY (()) vec<tree, va_gc> *all_translation_units;
+      |                                ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+./include/mpi_collective.hpp:158:14: error: wrong number of template arguments (1, should be 3)
+  158 | vec<cpp_ttype> fun_vec; //function vector in pragma.
+      |              ^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: provided for ‘template<class, class, class> struct vec’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘unsigned int vec<T, va_heap, vl_ptr>::length() const [with T = ipa_ref]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:80:28:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1473:27: error: invalid use of incomplete type ‘struct vec<ipa_ref, va_heap, vl_embed>’
+ 1473 |   { return m_vec ? m_vec->length () : 0; }
+      |                    ~~~~~~~^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘T& vec<T, va_heap, vl_ptr>::operator[](unsigned int) [with T = ipa_ref]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:82:25:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1495:20: error: no match for ‘operator[]’ (operand types are ‘vec<ipa_ref, va_heap, vl_embed>’ and ‘unsigned int’)
+ 1495 |   { return (*m_vec)[ix]; }
+      |            ~~~~~~~~^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘unsigned int vec<T, va_heap, vl_ptr>::length() const [with T = ipa_ref*]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:88:27:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1473:27: error: invalid use of incomplete type ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+ 1473 |   { return m_vec ? m_vec->length () : 0; }
+      |                    ~~~~~~~^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘T& vec<T, va_heap, vl_ptr>::operator[](unsigned int) [with T = ipa_ref*]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:90:23:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1495:20: error: no match for ‘operator[]’ (operand types are ‘vec<ipa_ref*, va_heap, vl_embed>’ and ‘unsigned int’)
+ 1495 |   { return (*m_vec)[ix]; }
+      |            ~~~~~~~~^
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘bool vec<T, va_heap, vl_ptr>::reserve(unsigned int, bool) [with T = ipa_ref*]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1878:10:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve_exact(unsigned int) [with T = ipa_ref*]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1893:5:   required from ‘void vec<T, va_heap, vl_ptr>::create(unsigned int) [with T = ipa_ref*]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:122:22:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1854:25: error: invalid use of incomplete type ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+ 1854 |       oldsize = oldvec->length ();
+      |                 ~~~~~~~~^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1861:34: error: invalid use of incomplete type ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+ 1861 |       vec_copy_construct (m_vec->address (), oldvec->address (), oldsize);
+      |                           ~~~~~~~^~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1861:54: error: invalid use of incomplete type ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+ 1861 |       vec_copy_construct (m_vec->address (), oldvec->address (), oldsize);
+      |                                              ~~~~~~~~^~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1862:14: error: invalid use of incomplete type ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+ 1862 |       m_vec->m_vecpfx.m_num = oldsize;
+      |       ~~~~~~~^~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘bool vec<T, va_heap, vl_ptr>::reserve(unsigned int, bool) [with T = ipa_ref]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1878:10:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve_exact(unsigned int) [with T = ipa_ref]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1893:5:   required from ‘void vec<T, va_heap, vl_ptr>::create(unsigned int) [with T = ipa_ref]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:123:23:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1854:25: error: invalid use of incomplete type ‘struct vec<ipa_ref, va_heap, vl_embed>’
+ 1854 |       oldsize = oldvec->length ();
+      |                 ~~~~~~~~^~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1861:34: error: invalid use of incomplete type ‘struct vec<ipa_ref, va_heap, vl_embed>’
+ 1861 |       vec_copy_construct (m_vec->address (), oldvec->address (), oldsize);
+      |                           ~~~~~~~^~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1861:54: error: invalid use of incomplete type ‘struct vec<ipa_ref, va_heap, vl_embed>’
+ 1861 |       vec_copy_construct (m_vec->address (), oldvec->address (), oldsize);
+      |                                              ~~~~~~~~^~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1862:14: error: invalid use of incomplete type ‘struct vec<ipa_ref, va_heap, vl_embed>’
+ 1862 |       m_vec->m_vecpfx.m_num = oldsize;
+      |       ~~~~~~~^~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘bool vec<T, va_heap, vl_ptr>::space(int) const [with T = ipa_ref*]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1842:7:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve(unsigned int, bool) [with T = ipa_ref*]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1878:10:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve_exact(unsigned int) [with T = ipa_ref*]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1893:5:   required from ‘void vec<T, va_heap, vl_ptr>::create(unsigned int) [with T = ipa_ref*]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:122:22:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1501:27: error: invalid use of incomplete type ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+ 1501 |   { return m_vec ? m_vec->space (nelems) : nelems == 0; }
+      |                    ~~~~~~~^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘bool vec<T, va_heap, vl_ptr>::using_auto_storage() const [with T = ipa_ref*]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1850:35:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve(unsigned int, bool) [with T = ipa_ref*]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1878:10:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve_exact(unsigned int) [with T = ipa_ref*]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1893:5:   required from ‘void vec<T, va_heap, vl_ptr>::create(unsigned int) [with T = ipa_ref*]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:122:22:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2217:25: error: invalid use of incomplete type ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+ 2217 |   return m_vec ? m_vec->m_vecpfx.m_using_auto_storage : false;
+      |                  ~~~~~~~^~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref*, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘bool vec<T, va_heap, vl_ptr>::space(int) const [with T = ipa_ref]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1842:7:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve(unsigned int, bool) [with T = ipa_ref]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1878:10:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve_exact(unsigned int) [with T = ipa_ref]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1893:5:   required from ‘void vec<T, va_heap, vl_ptr>::create(unsigned int) [with T = ipa_ref]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:123:23:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1501:27: error: invalid use of incomplete type ‘struct vec<ipa_ref, va_heap, vl_embed>’
+ 1501 |   { return m_vec ? m_vec->space (nelems) : nelems == 0; }
+      |                    ~~~~~~~^~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h: In instantiation of ‘bool vec<T, va_heap, vl_ptr>::using_auto_storage() const [with T = ipa_ref]’:
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1850:35:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve(unsigned int, bool) [with T = ipa_ref]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1878:10:   required from ‘bool vec<T, va_heap, vl_ptr>::reserve_exact(unsigned int) [with T = ipa_ref]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:1893:5:   required from ‘void vec<T, va_heap, vl_ptr>::create(unsigned int) [with T = ipa_ref]’
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/ipa-ref.h:123:23:   required from here
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:2217:25: error: invalid use of incomplete type ‘struct vec<ipa_ref, va_heap, vl_embed>’
+ 2217 |   return m_vec ? m_vec->m_vecpfx.m_using_auto_storage : false;
+      |                  ~~~~~~~^~~~~~~~
+/usr/lib/gcc/x86_64-linux-gnu/12/plugin/include/vec.h:208:57: note: declaration of ‘struct vec<ipa_ref, va_heap, vl_embed>’
+  208 |   template <typename, typename, typename> friend struct vec;
+      |                                                         ^~~
+make[2]: *** [Makefile:78: obj/mpi_collective_graph_utils.o] Error 1
+make[1]: *** [Makefile:50: plugin] Error 2
+make: *** [Makefile:42: all] Error 2
diff --git a/src/mpi_collective_dominance.cpp b/src/mpi_collective_dominance.cpp
index 09a83bfe9107c5c0a6a11868cc829047af5b9733..f4fb07c31e7029b21c1b3484c0c1b0f124c838e9 100644
--- a/src/mpi_collective_dominance.cpp
+++ b/src/mpi_collective_dominance.cpp
@@ -144,7 +144,7 @@ void pass_mpi_collective::label_post_dom_front(function *fun)
 // the result in pds.
 // Take account of looping edge if it was previously calculated.
 void pass_mpi_collective::__is_post_dom_bitmap(function *fun,
-    basic_block bb, bitmap nodes, bitmap pds)
+        basic_block bb, bitmap nodes, bitmap pds)
 {
 	edge e;
 	edge_iterator ei;
@@ -206,7 +206,7 @@ void pass_mpi_collective::__is_post_dom_bitmap(function *fun,
 
 // wrapper of __is_post_dom_bitmap
 void pass_mpi_collective::get_post_dom_bitmap(function *fun,
-    bitmap nodes, bitmap pds)
+        bitmap nodes, bitmap pds)
 {
 	__is_post_dom_bitmap(fun, ENTRY_BLOCK_PTR_FOR_FN(fun),
 	                     nodes, pds);
@@ -216,7 +216,7 @@ void pass_mpi_collective::get_post_dom_bitmap(function *fun,
 // calculate post dominantion frontier of a post dominated set of nodes
 // in pds and put the result in pdf.
 void pass_mpi_collective::get_post_dom_frontier(function *fun,
-    bitmap pds, bitmap pdf)
+        bitmap pds, bitmap pdf)
 {
 	//we check each bb, if a bb is in the postdom set, we check its
 	//most adjacents preds. If a pred is not in the postdom set, it
diff --git a/src/mpi_collective_graphviz.cpp b/src/mpi_collective_graphviz.cpp
index 3eb238a68919721fec4d792a5ccb5449da86f798..54c7f5e1a39dd8fac6396d96c5d869a919341426 100644
--- a/src/mpi_collective_graphviz.cpp
+++ b/src/mpi_collective_graphviz.cpp
@@ -6,7 +6,7 @@
 
 /* Build a filename (as a string) based on function name */
 char *pass_mpi_collective::cfgviz_generate_filename(function *fun,
-    const char *suffix)
+        const char *suffix)
 {
 	char *target_filename;
 	int line;
diff --git a/src/mpi_collective_pragma.cpp b/src/mpi_collective_pragma.cpp
index feb1f65e0dcb40f39ad673d7492eb14e6bb36b44..d89c3af15bf1dd3f4b51b9fb984d14ce49a1295d 100644
--- a/src/mpi_collective_pragma.cpp
+++ b/src/mpi_collective_pragma.cpp
@@ -1,12 +1,13 @@
 #include <cstdio>
 
-// dependance de c-pragma.h
+// dependence of c-pragma.h
 #include <gcc-plugin.h>
 // c_register_pragma
 #include <c-family/c-pragma.h>
 // IDENTIFIER_POINTER
 #include <tree.h>
-
+//// vec
+//#include <vec.h>
 //gcc error
 #include <diagnostic.h>
 
@@ -20,6 +21,115 @@ void register_mpicoll_check_pragma(void *event_data, void *data)
 	c_register_pragma("ProjetCA", "mpicoll_check", mpicoll_check_pragma);
 }
 
+//simple function to print fun_vec elements.
+void print_fun_vec()
+{
+	tree x;
+	for (unsigned int ix=0;fun_vec.iterate(ix, &x);ix++)
+	{
+		printf("%s ",IDENTIFIER_POINTER(x));
+	}
+	printf("\n%i",fun_vec.length());	
+	printf("\n");
+}
+
+//add x if not present in fun_vec
+void add_to_fun_vec(tree x)
+{
+	//verify if a newly added name is not already present in fun_vec.
+	//raise warning if so.
+	if (fun_vec.contains(x))
+	{
+		warning (0,"repetition of function name %s in pragma"
+				, IDENTIFIER_POINTER(x));
+		return;
+	}  
+	fun_vec.quick_push(x);
+} 
+
+//By "taking inspiration", I just cc/cv and modified what was needed for
+//our needs.
+void mpicoll_check_pragma(cpp_reader *)
+{
+	location_t loc;
+	enum cpp_ttype token;
+	tree x;
+	bool close_paren_needed_p = false;
+	
+	//not possible to use pragma inside function
+	if (cfun)
+	{
+		error_at (cfun->function_start_locus
+		          , "pragma ProjetCA %s is not allowed inside functions"
+		          , "mpicoll_check");
+		return;
+	}
+
+	token = pragma_lex (&x, &loc);
+	if (token == CPP_OPEN_PAREN)
+	{
+		close_paren_needed_p = true;
+		token = pragma_lex (&x, &loc);
+	}
+
+	if (token != CPP_NAME)
+	{ error_at (loc, "%<#pragma ProjetCA mpicoll_check%> is not a valid name"); }
+
+	/* Strings are user options.  */
+	else
+	{
+		//tree args = NULL_TREE;
+
+		do
+		{
+			/* Build up the strings now as a tree linked list.  Skip empty
+			   strings.  */
+			if (IDENTIFIER_LENGTH (x) > 0) 
+			//I have no idea what type is CPP_NAME; But it doesn't seem to create
+			//a string since TREE_STRING_LENGTH fails ; IDENTIFIER_LENGTH works
+			//just fine for what we want.
+			//
+			//The Tree structure stuff is a mess.
+			{ 
+				if (token != CPP_NAME)
+				{
+					//turns out this never happens..
+					warning_at (loc, 0,"Unrecognized name %s", IDENTIFIER_POINTER(x));
+				}
+				//args = tree_cons (NULL_TREE, x, args);
+				inform (loc, "Registering name %s", IDENTIFIER_POINTER(x));	
+				add_to_fun_vec(x);
+				print_fun_vec();
+			}
+
+			token = pragma_lex (&x);
+			while (token == CPP_COMMA)
+			{ token = pragma_lex (&x); }
+		}
+		while (token == CPP_NAME);
+
+		if (close_paren_needed_p)
+		{
+			if (token == CPP_CLOSE_PAREN)
+			{ token = pragma_lex (&x,&loc); }
+			else
+				error ("%<#pragma ProjetCA %s (string [,string]...)%> does "
+				         "not have a final %<)%>", "mpicoll_check");
+		}
+
+		if (token != CPP_EOF)
+		{
+			error_at (loc,"%<#pragma ProjetCA %s%> string is badly formed"
+					, "mpicoll_check");
+			return;
+		}
+
+		/* put arguments in the order the user typed them.  */
+		//args = nreverse (args);
+	}
+}
+
+/* OLD - TODO : delete this
 void mpicoll_check_pragma(cpp_reader *)
 {
 	location_t loc;
@@ -30,8 +140,8 @@ void mpicoll_check_pragma(cpp_reader *)
 	if (cfun)
 	{
 		error_at (cfun->function_start_locus
-				, "pragma ProjectCA %s is not allowed inside functions"
-				, "mpicoll_check");
+		          , "pragma ProjectCA %s is not allowed inside functions"
+		          , "mpicoll_check");
 		return;
 	}
 
@@ -40,8 +150,8 @@ void mpicoll_check_pragma(cpp_reader *)
 	{
 		printf("adding %s to function to parse.\n", IDENTIFIER_POINTER(x));
 	}
-
 }
+*/
 
 void verify_mpicoll_list(void *event_data, void *data)
 {
diff --git a/src/mpi_collective_warnings.cpp b/src/mpi_collective_warnings.cpp
index ea89de75b9fc895a015b9ff6960d814a23054473..5f33a295b663a922bb870806a511e618a7e3fcca 100644
--- a/src/mpi_collective_warnings.cpp
+++ b/src/mpi_collective_warnings.cpp
@@ -44,8 +44,8 @@ void pass_mpi_collective::__rank_collective(basic_block bb)
 		{
 			__rank_collective(e->src); //recursion on parent nodes
 		}
-		
-		//(note that entering this for loop imply we already processed our 
+
+		//(note that entering this for loop imply we already processed our
 		//parent node)
 		for (int mpi_code = 0;
 		     mpi_code < LAST_AND_UNUSED_MPI_COLLECTIVE_CODE;
@@ -72,7 +72,7 @@ void pass_mpi_collective::__rank_collective(basic_block bb)
 
 //set in a bitmap the index of a bb that have the same rank for a collective
 void pass_mpi_collective::get_mpi_coll_rank(function *fun,
-    int rank, int mpi_code, bitmap mpi_coll)
+        int rank, int mpi_code, bitmap mpi_coll)
 {
 	basic_block bb;
 
@@ -89,14 +89,14 @@ void pass_mpi_collective::get_mpi_coll_rank(function *fun,
 }
 
 //get first gimple statement in bb
-gimple * pass_mpi_collective::get_first_stmt(basic_block bb)
+gimple *pass_mpi_collective::get_first_stmt(basic_block bb)
 {
 	return bb->il.gimple.seq;
-} 	
+}
 
 //get gimple statement in bb that is its mpi call
 //This obv only works with bb that have a mpi call inside it.
-gimple * pass_mpi_collective::get_mpi_stmt(basic_block bb)
+gimple *pass_mpi_collective::get_mpi_stmt(basic_block bb)
 {
 	gimple_stmt_iterator gsi;
 	gimple *stmt;
@@ -104,10 +104,10 @@ gimple * pass_mpi_collective::get_mpi_stmt(basic_block bb)
 	for (gsi = gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi))
 	{
 		stmt = gsi_stmt(gsi);
-		if(is_mpi_collec(stmt) == ((bb_data *) bb->aux)->mpi_code)
+		if (is_mpi_collec(stmt) == ((bb_data *) bb->aux)->mpi_code)
 		{
 			return stmt;
-		} 
+		}
 	}
 	//should not happen
 	printf("ARGSH");
@@ -116,7 +116,7 @@ gimple * pass_mpi_collective::get_mpi_stmt(basic_block bb)
 
 //get gimple statement in bb that is its mpi call
 //This obv only works with bb that have a mpi call inside it.
-gimple * pass_mpi_collective::get_first_non_mpi_stmt(basic_block bb)
+gimple *pass_mpi_collective::get_first_non_mpi_stmt(basic_block bb)
 {
 	gimple_stmt_iterator gsi;
 	gimple *stmt;
@@ -124,10 +124,10 @@ gimple * pass_mpi_collective::get_first_non_mpi_stmt(basic_block bb)
 	for (gsi = gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi))
 	{
 		stmt = gsi_stmt(gsi);
-		if(!is_mpi_func(stmt))
+		if (!is_mpi_func(stmt))
 		{
 			return stmt;
-		} 
+		}
 	}
 	//should not happen
 	printf("ARGSH");
@@ -157,7 +157,7 @@ void pass_mpi_collective::raise_warning_mpi_rank(function *fun)
 	for (mpi_code = 0; mpi_code < LAST_AND_UNUSED_MPI_COLLECTIVE_CODE;
 	     ++mpi_code)
 	{
-		//for a given set of nodes of of same mpi collective and rank, 
+		//for a given set of nodes of of same mpi collective and rank,
 		//we calculate its post-dominance frontier.
 		//A Warning occurs when its postdominance frontier is not empty :
 		//indeed, this mean that some path in our cfg does not necessarily go
@@ -182,19 +182,19 @@ void pass_mpi_collective::raise_warning_mpi_rank(function *fun)
 			{
 				//printf("MPI Collective %s incomplete rank at bbs: ",
 				//       mpi_collective_name[mpi_code]);
-				
+
 				//we add every call to this mpi collective in our stack.
 				EXECUTE_IF_SET_IN_BITMAP(nodes, 0, index, bi)
-				{	
+				{
 					bb_call_indx_stack.push(index);
 					//printf("%i, ", index);
 				}
 			}
-			
+
 
 			while (! bitmap_empty_p(pdf))
 			{
-				//we stack the iterative pdf into an other stack. 
+				//we stack the iterative pdf into an other stack.
 				EXECUTE_IF_SET_IN_BITMAP(pdf, 0, index, bi)
 				{
 					bb_pdf_indx_stack.push(index);
@@ -228,29 +228,29 @@ void pass_mpi_collective::raise_warning_mpi_rank(function *fun)
 				location_t loc;
 				//first divergence possible
 				loc = gimple_location(
-						get_first_non_mpi_stmt(get_bb_from_index(fun, bb_pdf_indx_stack.top())));
+				          get_first_non_mpi_stmt(get_bb_from_index(fun, bb_pdf_indx_stack.top())));
 				warning_at (loc
-					, 0
-					, "The MPI Collective %s(%i) might be unmatched in some MPI processes, diverging from here:"
-					, mpi_collective_name[mpi_code], rank);
+				            , 0
+				            , "The MPI Collective %s(%i) might be unmatched in some MPI processes, diverging from here:"
+				            , mpi_collective_name[mpi_code], rank);
 				bb_pdf_indx_stack.pop();
-				
-				while(!bb_call_indx_stack.empty())
+
+				while (!bb_call_indx_stack.empty())
 				{
 					loc = gimple_location(
-							get_mpi_stmt(get_bb_from_index(fun, bb_call_indx_stack.top())));
+					          get_mpi_stmt(get_bb_from_index(fun, bb_call_indx_stack.top())));
 					inform (loc, "MPI collective %s(%i) called here."
-							, mpi_collective_name[mpi_code], rank);
+					        , mpi_collective_name[mpi_code], rank);
 					bb_call_indx_stack.pop();
 				}
-				
-				while(!bb_pdf_indx_stack.empty())
+
+				while (!bb_pdf_indx_stack.empty())
 				{
 					loc = gimple_location(
-					get_first_non_mpi_stmt(get_bb_from_index(fun, bb_pdf_indx_stack.top()))); 
+					          get_first_non_mpi_stmt(get_bb_from_index(fun, bb_pdf_indx_stack.top())));
 					inform (loc, "Diverging point might also be later at:");
 					bb_pdf_indx_stack.pop();
-				} 
+				}
 			}
 		}
 	}
@@ -273,7 +273,7 @@ basic_block pass_mpi_collective::get_bb_from_index(function *fun, int index)
 
 //raise error if there is a collective order error
 void pass_mpi_collective::raise_warning_mpi_order(function *fun)
-{	
+{
 	int mpi_code;
 	int rank;
 
@@ -299,7 +299,7 @@ void pass_mpi_collective::raise_warning_mpi_order(function *fun)
 			// DONE: split in 2, get mpi set & find set post dom
 			get_mpi_coll_rank(fun, rank, mpi_code, nodes);
 			//debug_bitmap(nodes);
-		
+
 			for (cursor_code = 0;
 			     cursor_code < LAST_AND_UNUSED_MPI_COLLECTIVE_CODE;
 			     cursor_code++)
@@ -342,31 +342,31 @@ void pass_mpi_collective::raise_warning_mpi_order(function *fun)
 					//       mpi_collective_name[mpi_code], rank);
 
 					location_t loc = gimple_location(
-							get_mpi_stmt(get_bb_from_index(fun, diff_index)));
-					
+					                     get_mpi_stmt(get_bb_from_index(fun, diff_index)));
+
 					warning_at (loc
-							, 0
-							, "MPI Collective %s(%i) might not be reachable due to a precedent %s call:"
-							, mpi_collective_name[mpi_code]
-							, rank, mpi_collective_name[cursor_code]);
+					            , 0
+					            , "MPI Collective %s(%i) might not be reachable due to a precedent %s call:"
+					            , mpi_collective_name[mpi_code]
+					            , rank, mpi_collective_name[cursor_code]);
 
 					EXECUTE_IF_SET_IN_BITMAP(nodes, 0, index, bi)
 					{
-						if (index!=diff_index)
+						if (index != diff_index)
 						{
 							loc = gimple_location(
-									get_mpi_stmt(get_bb_from_index(fun, index)));
+							          get_mpi_stmt(get_bb_from_index(fun, index)));
 							inform (loc
-									, "reachable %s(%i) without a prior %s call:"
-									, mpi_collective_name[mpi_code]
-									, rank, mpi_collective_name[cursor_code]);
-						} 
+							        , "reachable %s(%i) without a prior %s call:"
+							        , mpi_collective_name[mpi_code]
+							        , rank, mpi_collective_name[cursor_code]);
+						}
 					}
 				}
 
 
 			}
-			
+
 			bitmap_clear(nodes);
 		}
 	}
diff --git a/src/plugin.cpp b/src/plugin.cpp
index 51c5b7954de89e5ff5d50a76fc01746c8db1c91a..edd224189f3aaf9f7f123e9b5f4e910be0aa65d8 100644
--- a/src/plugin.cpp
+++ b/src/plugin.cpp
@@ -33,6 +33,8 @@ void print_plugin_infos(struct plugin_name_args *plugin_info,
 	printf("\n\n");
 }
 
+vec<tree> fun_vec;
+
 /* Main entry point for plugin */
 int
 plugin_init(struct plugin_name_args *plugin_info,
@@ -59,7 +61,9 @@ plugin_init(struct plugin_name_args *plugin_info,
 	                  PLUGIN_PASS_MANAGER_SETUP,
 	                  NULL,
 	                  &pass_info);
-
+	
+	fun_vec.create(1);	
+	//fun_vec.quick_grow_cleared(20);
 	register_callback(plugin_info->base_name,
 	                  PLUGIN_PRAGMAS,
 	                  register_mpicoll_check_pragma,
@@ -69,6 +73,6 @@ plugin_init(struct plugin_name_args *plugin_info,
 	                  PLUGIN_FINISH_UNIT,
 	                  verify_mpicoll_list,
 	                  NULL);
-
+	//fun_vec.release(); //FIXME release memory in last pass
 	return 0;
 }
diff --git a/src/test/test_pragma1.c b/src/test/test_pragma1.c
index 49e26b8f7d886444c967a060fbe21baae07d06b3..c4ca3a8e6ca6eaac8ea1563dfeebf7b2c8afa2aa 100644
--- a/src/test/test_pragma1.c
+++ b/src/test/test_pragma1.c
@@ -1,7 +1,5 @@
 
 int main(){
-
 	#pragma ProjetCA mpicoll_check main
-
 	return 0;
 }
diff --git a/src/test/test_pragma2.c b/src/test/test_pragma2.c
index 083e1e5d04a2fa1ca8b404ad17df8185efd7437e..31bd1733b327fc8f38a760786c87de9f3f96b02d 100644
--- a/src/test/test_pragma2.c
+++ b/src/test/test_pragma2.c
@@ -1,6 +1,9 @@
 
 
-#pragma ProjetCA mpicoll_check main
+#pragma ProjetCA mpicoll_check (main,nothingdoing,bab,,bab,) 
 int main(){
 	return 0;
 }
+
+void nothingdoing(){
+}