diff mbox

VEC re-write [patch 11/25]

Message ID 20121115215350.B2C01C0916@torture.tor.corp.google.com
State New
Headers show

Commit Message

Diego Novillo Nov. 15, 2012, 9:53 p.m. UTC
2012-11-15  Diego Novillo  <dnovillo@google.com>

	Adjust for new vec API (http://gcc.gnu.org/wiki/cxx-conversion/cxx-vec)

	* objc-act.c: Use new vec API in vec.h.
	* objc-act.h: Likewise.
	* objc-gnu-runtime-abi-01.c: Likewise.
	* objc-next-runtime-abi-01.c: Likewise.
	* objc-next-runtime-abi-02.c: Likewise.
	* objc-runtime-hooks.h: Likewise.
	* objc-runtime-shared-support.c: Likewise.
	* objc-runtime-shared-support.h: Likewise.
diff mbox

Patch

diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index ed1a28f..3ef84cd 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -246,7 +246,7 @@  static char *errbuf;	/* Buffer for error diagnostics */
 
 /* An array of all the local variables in the current function that
    need to be marked as volatile.  */
-VEC(tree,gc) *local_variables_to_volatilize = NULL;
+vec<tree, va_gc> *local_variables_to_volatilize = NULL;
 
 /* Store all constructed constant strings in a hash table so that
    they get uniqued properly.  */
@@ -2067,7 +2067,7 @@  objc_build_struct (tree klass, tree fields, tree super_name)
   tree s = objc_start_struct (name);
   tree super = (super_name ? xref_tag (RECORD_TYPE, super_name) : NULL_TREE);
   tree t;
-  VEC(tree,heap) *objc_info = NULL;
+  vec<tree> objc_info = vec<tree>();
   int i;
 
   if (super)
@@ -2127,7 +2127,7 @@  objc_build_struct (tree klass, tree fields, tree super_name)
   for (t = TYPE_MAIN_VARIANT (s); t; t = TYPE_NEXT_VARIANT (t))
     {
       INIT_TYPE_OBJC_INFO (t);
-      VEC_safe_push (tree, heap, objc_info, TYPE_OBJC_INFO (t));
+      objc_info.safe_push (TYPE_OBJC_INFO (t));
     }
 
   s = objc_finish_struct (s, fields);
@@ -2158,12 +2158,12 @@  objc_build_struct (tree klass, tree fields, tree super_name)
       /* Replace TYPE_OBJC_INFO with the saved one.  This restores any
 	 protocol information that may have been associated with the
 	 type.  */
-      TYPE_OBJC_INFO (t) = VEC_index (tree, objc_info, i);
+      TYPE_OBJC_INFO (t) = objc_info[i];
       /* Replace the IDENTIFIER_NODE with an actual @interface now
 	 that we have it.  */
       TYPE_OBJC_INTERFACE (t) = klass;
     }
-  VEC_free (tree, heap, objc_info);
+  objc_info.release ();
 
   /* Use TYPE_BINFO structures to point at the super class, if any.  */
   objc_xref_basetypes (s, super);
@@ -2187,9 +2187,9 @@  objc_volatilize_decl (tree decl)
 	  || TREE_CODE (decl) == PARM_DECL))
     {
       if (local_variables_to_volatilize == NULL)
-	local_variables_to_volatilize = VEC_alloc (tree, gc, 8);
+	vec_alloc (local_variables_to_volatilize, 8);
 
-      VEC_safe_push (tree, gc, local_variables_to_volatilize, decl);
+      vec_safe_push (local_variables_to_volatilize, decl);
     }
 }
 
@@ -2208,7 +2208,7 @@  objc_finish_function (void)
     {
       int i;
       tree decl;
-      FOR_EACH_VEC_ELT (tree, local_variables_to_volatilize, i, decl)
+      FOR_EACH_VEC_ELT (*local_variables_to_volatilize, i, decl)
 	{
 	  tree t = TREE_TYPE (decl);
 
@@ -2223,7 +2223,7 @@  objc_finish_function (void)
 	}
 
       /* Now we delete the vector.  This sets it to NULL as well.  */
-      VEC_free (tree, gc, local_variables_to_volatilize);
+      vec_free (local_variables_to_volatilize);
     }
 }
 
@@ -2688,7 +2688,7 @@  objc_xref_basetypes (tree ref, tree basetype)
       tree base_binfo = objc_copy_binfo (TYPE_BINFO (basetype));
 
       BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
-      BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, 1);
+      vec_alloc (BINFO_BASE_ACCESSES (binfo), 1);
       BINFO_BASE_APPEND (binfo, base_binfo);
       BINFO_BASE_ACCESS_APPEND (binfo, access_public_node);
     }
@@ -3198,7 +3198,7 @@  objc_build_string_object (tree string)
    with type TYPE and elements ELTS.  */
 
 tree
-objc_build_constructor (tree type, VEC(constructor_elt,gc) *elts)
+objc_build_constructor (tree type, vec<constructor_elt, va_gc> *elts)
 {
   tree constructor = build_constructor (type, elts);
 
@@ -3209,7 +3209,7 @@  objc_build_constructor (tree type, VEC(constructor_elt,gc) *elts)
 #ifdef OBJCPLUS
   /* Adjust for impedance mismatch.  We should figure out how to build
      CONSTRUCTORs that consistently please both the C and C++ gods.  */
-  if (!VEC_index (constructor_elt, elts, 0).index)
+  if (!(*elts)[0].index)
     TREE_TYPE (constructor) = init_list_type_node;
 #endif
 
@@ -4995,7 +4995,7 @@  tree
 build_function_type_for_method (tree return_type, tree method,
 				int context, bool super_flag)
 {
-  VEC(tree,gc) *argtypes = make_tree_vector ();
+  vec<tree, va_gc> *argtypes = make_tree_vector ();
   tree t, ftype;
   bool is_varargs = false;
 
@@ -5016,7 +5016,7 @@  build_function_type_for_method (tree return_type, tree method,
          appropriate.  */
       arg_type = objc_decay_parm_type (arg_type);
 
-      VEC_safe_push (tree, gc, argtypes, arg_type);
+      vec_safe_push (argtypes, arg_type);
     }
 
   if (METHOD_ADD_ARGS (method))
@@ -5028,7 +5028,7 @@  build_function_type_for_method (tree return_type, tree method,
 
 	  arg_type = objc_decay_parm_type (arg_type);
 
-	  VEC_safe_push (tree, gc, argtypes, arg_type);
+	  vec_safe_push (argtypes, arg_type);
 	}
 
       if (METHOD_ADD_ARGS_ELLIPSIS_P (method))
diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h
index e958e66..b0c3d0a 100644
--- a/gcc/objc/objc-act.h
+++ b/gcc/objc/objc-act.h
@@ -254,7 +254,7 @@  struct GTY(()) hashed_entry {
 
 /* An array of all the local variables in the current function that
    need to be marked as volatile.  */
-extern GTY(()) VEC(tree,gc) *local_variables_to_volatilize;
+extern GTY(()) vec<tree, va_gc> *local_variables_to_volatilize;
 
 /* Objective-C/Objective-C++ @implementation list.  */
 
diff --git a/gcc/objc/objc-gnu-runtime-abi-01.c b/gcc/objc/objc-gnu-runtime-abi-01.c
index 6bdffac..5cd39ef 100644
--- a/gcc/objc/objc-gnu-runtime-abi-01.c
+++ b/gcc/objc/objc-gnu-runtime-abi-01.c
@@ -104,8 +104,8 @@  static tree gnu_runtime_abi_01_get_class_super_ref (location_t, struct imp_entry
 static tree gnu_runtime_abi_01_get_category_super_ref (location_t, struct imp_entry *, bool);
 
 static tree gnu_runtime_abi_01_receiver_is_class_object (tree);
-static void gnu_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **, tree,
-						       int, int);
+static void gnu_runtime_abi_01_get_arg_type_list_base (vec<tree, va_gc> **,
+						       tree, int, int);
 static tree gnu_runtime_abi_01_build_objc_method_call (location_t, tree, tree,
 							tree, tree, tree, int);
 
@@ -585,8 +585,8 @@  gnu_runtime_abi_01_get_class_reference (tree ident)
    prototype.  */
 
 static void
-gnu_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
-					   int context,
+gnu_runtime_abi_01_get_arg_type_list_base (vec<tree, va_gc> **argtypes,
+					   tree meth, int context,
 					   int superflag ATTRIBUTE_UNUSED)
 {
   tree receiver_type;
@@ -596,9 +596,9 @@  gnu_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
   else
     receiver_type = objc_object_type;
 
-  VEC_safe_push (tree, gc, *argtypes, receiver_type);
+  vec_safe_push (*argtypes, receiver_type);
   /* Selector type - will eventually change to `int'.  */
-  VEC_safe_push (tree, gc, *argtypes, objc_selector_type);
+  vec_safe_push (*argtypes, objc_selector_type);
 }
 
 /* Unused for GNU runtime.  */
@@ -662,8 +662,8 @@  build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
 			    : (flag_objc_direct_dispatch ? umsg_fast_decl
 							 : umsg_decl));
   tree rcv_p = (super_flag ? objc_super_type : objc_object_type);
-  VEC(tree, gc) *parms;
-  VEC(tree, gc) *tv;
+  vec<tree, va_gc> *parms;
+  vec<tree, va_gc> *tv;
   unsigned nparm = (method_params ? list_length (method_params) : 0);
 
   /* If a prototype for the method to be called exists, then cast
@@ -692,30 +692,30 @@  build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
   lookup_object = save_expr (lookup_object);
 
   /* Param list + 2 slots for object and selector.  */
-  parms = VEC_alloc (tree, gc, nparm + 2);
-  tv = VEC_alloc (tree, gc, 2);
+  vec_alloc (parms, nparm + 2);
+  vec_alloc (tv, 2);
 
   /* First, call the lookup function to get a pointer to the method,
      then cast the pointer, then call it with the method arguments.  */
-  VEC_quick_push (tree, tv, lookup_object);
-  VEC_quick_push (tree, tv, selector);
+  tv->quick_push (lookup_object);
+  tv->quick_push (selector);
   method = build_function_call_vec (loc, sender, tv, NULL);
-  VEC_free (tree, gc, tv);
+  vec_free (tv);
 
   /* Pass the appropriate object to the method.  */
-  VEC_quick_push (tree, parms, (super_flag ? self_decl : lookup_object));
+  parms->quick_push ((super_flag ? self_decl : lookup_object));
 
   /* Pass the selector to the method.  */
-  VEC_quick_push (tree, parms, selector);
+  parms->quick_push (selector);
   /* Now append the remainder of the parms.  */
   if (nparm)
     for (; method_params; method_params = TREE_CHAIN (method_params))
-      VEC_quick_push (tree, parms, TREE_VALUE (method_params));
+      parms->quick_push (TREE_VALUE (method_params));
 
   /* Build an obj_type_ref, with the correct cast for the method call.  */
   t = build3 (OBJ_TYPE_REF, sender_cast, method, lookup_object, size_zero_node);
   t = build_function_call_vec (loc, t, parms, NULL);
-  VEC_free (tree, gc, parms);
+  vec_free (parms);
   return t;
 }
 
@@ -900,7 +900,7 @@  gnu_runtime_abi_01_build_const_string_constructor (location_t loc, tree string,
 						   int length)
 {
   tree constructor, fields;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   /* GNU:    (NXConstantString *) & ((__builtin_ObjCString) { NULL, string, length })  */
   fields = TYPE_FIELDS (internal_const_str_type);
@@ -1087,7 +1087,7 @@  build_protocol_initializer (tree type, tree protocol_name, tree protocol_list,
 {
   tree expr, ttyp;
   location_t loc;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   /* TODO: pass the loc in or find it from args.  */
   loc = input_location;
@@ -1122,7 +1122,7 @@  static tree
 generate_protocol_list (tree i_or_p, tree klass_ctxt)
 {
   tree array_type, ptype, refs_decl, lproto, e, plist;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   char buf[BUFSIZE];
   int size = 0;
 
@@ -1200,7 +1200,7 @@  generate_v1_meth_descriptor_table (tree chain, tree protocol, const char *prefix
 {
   tree method_list_template, initlist, decl;
   int size;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   char buf[BUFSIZE];
 
   if (!chain || !prefix)
@@ -1348,7 +1348,7 @@  static tree
 generate_dispatch_table (tree chain, const char *name)
 {
   tree decl, method_list_template, initlist;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   int size = list_length (chain);
 
   if (!objc_method_template)
@@ -1380,7 +1380,7 @@  build_category_initializer (tree type, tree cat_name, tree class_name,
 {
   tree expr, ltyp;
   location_t loc;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   /* TODO: pass the loc in or find it from args.  */
   /* TODO: pass the loc in or find it from args.  */
@@ -1488,7 +1488,7 @@  build_shared_structure_initializer (tree type, tree isa, tree super,
 				    tree protocol_list)
 {
   tree expr, ltyp;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   /* isa = */
   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, isa);
@@ -1584,7 +1584,7 @@  generate_ivars_list (tree chain, const char *name)
 {
   tree initlist, ivar_list_template, decl;
   int size;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   if (!chain)
     return NULL_TREE;
@@ -1807,8 +1807,8 @@  static void
 build_gnu_selector_translation_table (void)
 {
   tree chain, expr;
-  VEC(constructor_elt,gc) *inits = NULL;
-  VEC(constructor_elt,gc) *v ;
+  vec<constructor_elt, va_gc> *inits = NULL;
+  vec<constructor_elt, va_gc> *v ;
 
   /* Cause the selector table (previously forward-declared)
      to be actually output.  */
@@ -1857,7 +1857,7 @@  generate_static_references (void)
     = build_array_type (build_pointer_type (void_type_node), NULL_TREE);
   int num_inst, num_class;
   char buf[BUFSIZE];
-  VEC(constructor_elt,gc) *decls = NULL;
+  vec<constructor_elt, va_gc> *decls = NULL;
 
   /* FIXME: Remove NeXT runtime code.  */
   if (flag_next_runtime)
@@ -1866,7 +1866,7 @@  generate_static_references (void)
   for (cl_chain = objc_static_instances, num_class = 0;
        cl_chain; cl_chain = TREE_CHAIN (cl_chain), num_class++)
     {
-      VEC(constructor_elt,gc) *v = NULL;
+      vec<constructor_elt, va_gc> *v = NULL;
 
       for (num_inst = 0, in_chain = TREE_PURPOSE (cl_chain);
 	   in_chain; num_inst++, in_chain = TREE_CHAIN (in_chain));
@@ -1917,7 +1917,7 @@  init_def_list (tree type)
   tree expr;
   struct imp_entry *impent;
   location_t loc;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   if (imp_count)
     for (impent = imp_list; impent; impent = impent->next)
@@ -2004,7 +2004,7 @@  init_objc_symtab (tree type)
 {
   tree field, expr, ltyp;
   location_t loc;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   loc = UNKNOWN_LOCATION;
 
@@ -2207,12 +2207,13 @@  static tree
 build_throw_stmt (location_t loc, tree throw_expr, bool rethrown ATTRIBUTE_UNUSED)
 {
   tree t;
-  VEC(tree, gc) *parms = VEC_alloc (tree, gc, 1);
+  vec<tree, va_gc> *parms;
+  vec_alloc (parms, 1);
   /* A throw is just a call to the runtime throw function with the
      object as a parameter.  */
-  VEC_quick_push (tree, parms, throw_expr);
+  parms->quick_push (throw_expr);
   t = build_function_call_vec (loc, objc_exception_throw_decl, parms, NULL);
-  VEC_free (tree, gc, parms);
+  vec_free (parms);
   return add_stmt (t);
 }
 
diff --git a/gcc/objc/objc-next-runtime-abi-01.c b/gcc/objc/objc-next-runtime-abi-01.c
index cf24591..598141c 100644
--- a/gcc/objc/objc-next-runtime-abi-01.c
+++ b/gcc/objc/objc-next-runtime-abi-01.c
@@ -123,8 +123,8 @@  static tree next_runtime_abi_01_get_class_super_ref (location_t, struct imp_entr
 static tree next_runtime_abi_01_get_category_super_ref (location_t, struct imp_entry *, bool);
 
 static tree next_runtime_abi_01_receiver_is_class_object (tree);
-static void next_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **, tree,
-							int, int);
+static void next_runtime_abi_01_get_arg_type_list_base (vec<tree, va_gc> **,
+							tree, int, int);
 static tree next_runtime_abi_01_build_objc_method_call (location_t, tree, tree,
 							tree, tree, tree, int);
 static bool next_runtime_abi_01_setup_const_string_class_decl (void);
@@ -730,8 +730,9 @@  next_runtime_abi_01_get_class_reference (tree ident)
    prototype.  */
 
 static void
-next_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
-					    int context, int superflag)
+next_runtime_abi_01_get_arg_type_list_base (vec<tree, va_gc> **argtypes,
+					    tree meth, int context,
+					    int superflag)
 {
   tree receiver_type;
 
@@ -742,9 +743,9 @@  next_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
   else
     receiver_type = objc_object_type;
 
-  VEC_safe_push (tree, gc, *argtypes, receiver_type);
+  vec_safe_push (*argtypes, receiver_type);
   /* Selector type - will eventually change to `int'.  */
-  VEC_safe_push (tree, gc, *argtypes, objc_selector_type);
+  vec_safe_push (*argtypes, objc_selector_type);
 }
 
 static tree
@@ -820,7 +821,7 @@  build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
 {
   tree sender, sender_cast, method, t;
   tree rcv_p = (super_flag ? objc_super_type : objc_object_type);
-  VEC(tree, gc) *parms;
+  vec<tree, va_gc> *parms;
   unsigned nparm = (method_params ? list_length (method_params) : 0);
 
   /* If a prototype for the method to be called exists, then cast
@@ -846,7 +847,7 @@  build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
   lookup_object = save_expr (lookup_object);
 
   /* Param list + 2 slots for object and selector.  */
-  parms = VEC_alloc (tree, gc, nparm + 2);
+  vec_alloc (parms, nparm + 2);
 
   /* If we are returning a struct in memory, and the address
      of that memory location is passed as a hidden first
@@ -869,19 +870,19 @@  build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
   method = build_fold_addr_expr_loc (loc, sender);
 
   /* Pass the object to the method.  */
-  VEC_quick_push (tree, parms, lookup_object);
+  parms->quick_push (lookup_object);
   /* Pass the selector to the method.  */
-  VEC_quick_push (tree, parms, selector);
+  parms->quick_push (selector);
   /* Now append the remainder of the parms.  */
   if (nparm)
     for (; method_params; method_params = TREE_CHAIN (method_params))
-      VEC_quick_push (tree, parms, TREE_VALUE (method_params));
+      parms->quick_push (TREE_VALUE (method_params));
 
   /* Build an obj_type_ref, with the correct cast for the method call.  */
   t = build3 (OBJ_TYPE_REF, sender_cast, method,
 			    lookup_object, size_zero_node);
   t = build_function_call_vec (loc, t, parms, NULL);
-  VEC_free (tree, gc, parms);
+  vec_free (parms);
   return t;
 }
 
@@ -1005,7 +1006,7 @@  next_runtime_abi_01_build_const_string_constructor (location_t loc, tree string,
 						   int length)
 {
   tree constructor, fields, var;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   /* NeXT:   (NSConstantString *) & ((__builtin_ObjCString) { isa, string, length })   */
   fields = TYPE_FIELDS (internal_const_str_type);
@@ -1145,7 +1146,7 @@  generate_v1_meth_descriptor_table (tree chain, tree protocol,
 {
   tree method_list_template, initlist, decl;
   int size;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   char buf[BUFSIZE];
 
   if (!chain || !prefix)
@@ -1186,7 +1187,7 @@  generate_v1_objc_protocol_extension (tree proto_interface,
 {
   int size;
   location_t loc;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   tree decl, expr;
   char buf[BUFSIZE];
 
@@ -1277,7 +1278,7 @@  static tree
 build_v1_property_table_initializer (tree type, tree context)
 {
   tree x;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   if (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE)
     x = CLASS_PROPERTY_DECL (context);
@@ -1286,7 +1287,7 @@  build_v1_property_table_initializer (tree type, tree context)
 
   for (; x; x = TREE_CHAIN (x))
     {
-      VEC(constructor_elt,gc) *elemlist = NULL;
+      vec<constructor_elt, va_gc> *elemlist = NULL;
       tree attribute, name_ident = PROPERTY_NAME (x);
 
       CONSTRUCTOR_APPEND_ELT (elemlist, NULL_TREE,
@@ -1313,7 +1314,7 @@  generate_v1_property_table (tree context, tree klass_ctxt)
 {
   tree x, decl, initlist, property_list_template;
   bool is_proto = false;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
   int init_val, size = 0;
   char buf[BUFSIZE];
 
@@ -1365,7 +1366,7 @@  generate_v1_protocol_list (tree i_or_p, tree klass_ctxt)
 {
   tree array_type, ptype, refs_decl, lproto, e, plist, attr;
   int size = 0;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   char buf[BUFSIZE];
 
   switch (TREE_CODE (i_or_p))
@@ -1447,7 +1448,7 @@  build_v1_protocol_initializer (tree type, tree protocol_name, tree protocol_list
 {
   tree expr, ttyp;
   location_t loc;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   if (!objc_protocol_extension_template)
     build_v1_objc_protocol_extension_template ();
@@ -1659,7 +1660,7 @@  static tree
 generate_dispatch_table (tree chain, const char *name, tree attr)
 {
   tree decl, method_list_template, initlist;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   int size;;
 
   if (!chain || !name || !(size = list_length (chain)))
@@ -1694,7 +1695,7 @@  build_v1_category_initializer (tree type, tree cat_name, tree class_name,
 				location_t loc)
 {
   tree expr, ltyp;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, cat_name);
   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, class_name);
@@ -1807,7 +1808,7 @@  generate_objc_class_ext (tree property_list, tree context)
   tree weak_ivar_layout_tree;
   int size;
   location_t loc;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   char buf[BUFSIZE];
 
   /* TODO: pass the loc in or find it from args.  */
@@ -1879,7 +1880,7 @@  build_v1_shared_structure_initializer (tree type, tree isa, tree super,
 {
   tree expr, ltyp;
   location_t loc;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   /* TODO: fish the location out of the input data.  */
   loc = UNKNOWN_LOCATION;
@@ -1964,7 +1965,7 @@  generate_ivars_list (tree chain, const char *name, tree attr)
 {
   tree initlist, ivar_list_template, decl;
   int size;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   if (!chain)
     return NULL_TREE;
@@ -2138,7 +2139,7 @@  init_def_list (tree type)
   tree expr;
   location_t loc;
   struct imp_entry *impent;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   if (imp_count)
     for (impent = imp_list; impent; impent = impent->next)
@@ -2215,7 +2216,7 @@  build_objc_symtab_template (void)
 static tree
 init_objc_symtab (tree type)
 {
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   /* sel_ref_cnt = { ..., 5, ... } */
 
@@ -2345,7 +2346,7 @@  generate_objc_image_info (void)
   int flags
     = ((flag_replace_objc_classes && imp_count ? 1 : 0)
        | (flag_objc_gc ? 2 : 0));
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   tree array_type;
 
   array_type  = build_sized_array_type (integer_type_node, 2);
@@ -2892,12 +2893,13 @@  static tree
 build_throw_stmt (location_t loc, tree throw_expr, bool rethrown ATTRIBUTE_UNUSED)
 {
   tree t;
-  VEC(tree, gc) *parms = VEC_alloc (tree, gc, 1);
+  vec<tree, va_gc> *parms;
+  vec_alloc (parms, 1);
   /* A throw is just a call to the runtime throw function with the
      object as a parameter.  */
-  VEC_quick_push (tree, parms, throw_expr);
+  parms->quick_push (throw_expr);
   t = build_function_call_vec (loc, objc_exception_throw_decl, parms, NULL);
-  VEC_free (tree, gc, parms);
+  vec_free (parms);
   return add_stmt (t);
 }
 
diff --git a/gcc/objc/objc-next-runtime-abi-02.c b/gcc/objc/objc-next-runtime-abi-02.c
index cf899d3..636c3cf 100644
--- a/gcc/objc/objc-next-runtime-abi-02.c
+++ b/gcc/objc/objc-next-runtime-abi-02.c
@@ -208,8 +208,8 @@  static tree next_runtime_abi_02_get_class_super_ref (location_t, struct imp_entr
 static tree next_runtime_abi_02_get_category_super_ref (location_t, struct imp_entry *, bool);
 
 static tree next_runtime_abi_02_receiver_is_class_object (tree);
-static void next_runtime_abi_02_get_arg_type_list_base (VEC(tree,gc) **, tree,
-							int, int);
+static void next_runtime_abi_02_get_arg_type_list_base (vec<tree, va_gc> **,
+							tree, int, int);
 static tree next_runtime_abi_02_build_objc_method_call (location_t, tree, tree,
 							tree, tree, tree, int);
 static bool next_runtime_abi_02_setup_const_string_class_decl (void);
@@ -1015,8 +1015,6 @@  typedef struct GTY(()) ident_data_tuple {
   tree ident;
   tree data;
 } ident_data_tuple ;
-DEF_VEC_O(ident_data_tuple);
-DEF_VEC_ALLOC_O(ident_data_tuple, gc);
 
 /* This routine creates a file scope static variable of type 'Class'
    to hold the address of a class.  */
@@ -1038,7 +1036,7 @@  build_v2_class_reference_decl (tree ident)
    ident is replaced with address of the class metadata (of type
    'Class') in the output routine.  */
 
-static GTY (()) VEC (ident_data_tuple, gc) * classrefs;
+static GTY (()) vec<ident_data_tuple, va_gc> *classrefs;
 
 static tree
 objc_v2_get_class_reference (tree ident)
@@ -1049,7 +1047,7 @@  objc_v2_get_class_reference (tree ident)
     {
       int count;
       ident_data_tuple *ref;
-      FOR_EACH_VEC_ELT (ident_data_tuple, classrefs, count, ref)
+      FOR_EACH_VEC_ELT (*classrefs, count, ref)
 	{
 	  if (ref->ident == ident)
 	    {
@@ -1061,14 +1059,14 @@  objc_v2_get_class_reference (tree ident)
     }
   else
     /* Somewhat arbitrary initial provision.  */
-    classrefs = VEC_alloc (ident_data_tuple, gc, 16);
+    vec_alloc (classrefs, 16);
 
   /* We come here if we don't find the entry - or if the table was yet
      to be created.  */
   decl = build_v2_class_reference_decl (ident);
   e.ident = ident;
   e.data = decl;
-  VEC_safe_push (ident_data_tuple, gc, classrefs, e);
+  vec_safe_push (classrefs, e);
   return decl;
 }
 
@@ -1080,17 +1078,17 @@  next_runtime_abi_02_get_class_reference (tree ident)
   else
     {
       /* We fall back to using objc_getClass ().  */
-      VEC(tree,gc) *vec =  VEC_alloc (tree, gc, 1);
+      vec<tree, va_gc> *v;
+      vec_alloc (v, 1);
       tree t;
       /* ??? add_class_reference (ident); - is pointless, since the
          system lib does not export the equivalent symbols.  Maybe we
          need to build a class ref anyway.  */
       t = my_build_string_pointer (IDENTIFIER_LENGTH (ident) + 1,
 				   IDENTIFIER_POINTER (ident));
-      VEC_quick_push (tree, vec, t);
-      t = build_function_call_vec (input_location, objc_get_class_decl,
-				   vec, NULL);
-      VEC_free (tree, gc, vec);
+      v->quick_push (t);
+      t = build_function_call_vec (input_location, objc_get_class_decl, v, 0);
+      vec_free (v);
       return t;
     }
 }
@@ -1103,8 +1101,9 @@  next_runtime_abi_02_get_class_reference (tree ident)
    prototype.  */
 
 static void
-next_runtime_abi_02_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
-					    int context, int superflag)
+next_runtime_abi_02_get_arg_type_list_base (vec<tree, va_gc> **argtypes,
+					    tree meth, int context,
+					    int superflag)
 {
   tree receiver_type;
 
@@ -1115,12 +1114,11 @@  next_runtime_abi_02_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
   else
     receiver_type = objc_object_type;
 
-  VEC_safe_push (tree, gc, *argtypes, receiver_type);
+  vec_safe_push (*argtypes, receiver_type);
   /* Selector type - will eventually change to `int'.  */
-  VEC_safe_push (tree, gc, *argtypes,
-		 (superflag
-		  ? objc_v2_super_selector_type
-		  : objc_v2_selector_type));
+  vec_safe_push (*argtypes,
+		 superflag ? objc_v2_super_selector_type
+		           : objc_v2_selector_type);
 }
 
 /* TODO: Merge this with the message refs.  */
@@ -1201,10 +1199,8 @@  typedef struct GTY(()) msgref_entry {
   tree selname;
   tree refdecl;
 } msgref_entry;
-DEF_VEC_O(msgref_entry);
-DEF_VEC_ALLOC_O(msgref_entry, gc);
 
-static GTY (()) VEC (msgref_entry, gc) * msgrefs;
+static GTY (()) vec<msgref_entry, va_gc> *msgrefs;
 
 /* Build the list of (objc_msgSend_fixup_xxx, selector name), used
    later on to initialize the table of 'struct message_ref_t'
@@ -1219,13 +1215,13 @@  build_v2_selector_messenger_reference (tree sel_name, tree message_func_decl)
     {
       int count;
       msgref_entry *ref;
-      FOR_EACH_VEC_ELT (msgref_entry, msgrefs, count, ref)
+      FOR_EACH_VEC_ELT (*msgrefs, count, ref)
 	if (ref->func == message_func_decl && ref->selname == sel_name)
 	  return ref->refdecl;
     }
   else
     /* Somewhat arbitrary initial provision.  */
-    msgrefs = VEC_alloc (msgref_entry, gc, 32);
+    vec_alloc (msgrefs, 32);
 
   /* We come here if we don't find a match or at the start.  */
   decl = build_v2_message_reference_decl (sel_name,
@@ -1233,7 +1229,7 @@  build_v2_selector_messenger_reference (tree sel_name, tree message_func_decl)
   e.func = message_func_decl;
   e.selname = sel_name;
   e.refdecl = decl;
-  VEC_safe_push (msgref_entry, gc, msgrefs, e);
+  vec_safe_push (msgrefs, e);
   return decl;
 }
 
@@ -1258,9 +1254,7 @@  typedef struct GTY(()) prot_list_entry {
   tree id;
   tree refdecl;
 } prot_list_entry;
-DEF_VEC_O(prot_list_entry);
-DEF_VEC_ALLOC_O(prot_list_entry, gc);
-static GTY (()) VEC (prot_list_entry, gc) * protrefs;
+static GTY (()) vec<prot_list_entry, va_gc> *protrefs;
 
 static tree
 objc_v2_get_protocol_reference (tree ident)
@@ -1271,7 +1265,7 @@  objc_v2_get_protocol_reference (tree ident)
     {
       int count;
       prot_list_entry *ref;
-      FOR_EACH_VEC_ELT (prot_list_entry, protrefs, count, ref)
+      FOR_EACH_VEC_ELT (*protrefs, count, ref)
 	{
 	  if (ref->id == ident)
 	    {
@@ -1283,14 +1277,14 @@  objc_v2_get_protocol_reference (tree ident)
     }
   else
     /* Somewhat arbitrary initial provision.  */
-    protrefs = VEC_alloc (prot_list_entry, gc, 32);
+    vec_alloc (protrefs, 32);
 
   /* We come here if we don't find the entry - or if the table was yet
      to be created.  */
   decl = build_v2_protocollist_ref_decl (ident);
   e.id = ident;
   e.refdecl = decl;
-  VEC_safe_push (prot_list_entry, gc, protrefs, e);
+  vec_safe_push (protrefs, e);
   return decl;
 }
 
@@ -1436,8 +1430,8 @@  build_v2_superclass_ref_decl (tree ident, bool inst)
   return decl;
 }
 
-static GTY (()) VEC (ident_data_tuple, gc) * class_super_refs;
-static GTY (()) VEC (ident_data_tuple, gc) * metaclass_super_refs;
+static GTY (()) vec<ident_data_tuple, va_gc> *class_super_refs;
+static GTY (()) vec<ident_data_tuple, va_gc> *metaclass_super_refs;
 
 static tree
 next_runtime_abi_02_get_class_super_ref (location_t loc ATTRIBUTE_UNUSED,
@@ -1446,14 +1440,14 @@  next_runtime_abi_02_get_class_super_ref (location_t loc ATTRIBUTE_UNUSED,
   tree decl;
   ident_data_tuple e;
   tree id = CLASS_NAME (imp->imp_context);
-  VEC (ident_data_tuple, gc) *list = inst_meth  ? class_super_refs
+  vec<ident_data_tuple, va_gc> *list = inst_meth  ? class_super_refs
 						: metaclass_super_refs;
 
   if (list)
     {
       int count;
       ident_data_tuple *ref;
-      FOR_EACH_VEC_ELT (ident_data_tuple, list, count, ref)
+      FOR_EACH_VEC_ELT (*list, count, ref)
 	{
 	  if (ref->ident == id)
 	    {
@@ -1467,16 +1461,22 @@  next_runtime_abi_02_get_class_super_ref (location_t loc ATTRIBUTE_UNUSED,
     {
       /* Somewhat arbitrary initial provision.  */
       if (inst_meth)
-        list = class_super_refs = VEC_alloc (ident_data_tuple, gc, 16);
+	{
+	  vec_alloc (class_super_refs, 16);
+	  list = class_super_refs;
+	}
       else
-        list = metaclass_super_refs = VEC_alloc (ident_data_tuple, gc, 16);
+	{
+	  vec_alloc (metaclass_super_refs, 16);
+	  list = metaclass_super_refs;
+	}
     }
   /* We come here if we don't find the entry - or if the table was yet
      to be created.  */
   decl = build_v2_superclass_ref_decl (id, inst_meth);
   e.ident = id;
   e.data = decl;
-  VEC_safe_push (ident_data_tuple, gc, list, e);
+  vec_safe_push (list, e);
   return decl;
 }
 
@@ -1522,13 +1522,12 @@  next_runtime_abi_02_receiver_is_class_object (tree receiver)
 {
   if (TREE_CODE (receiver) == VAR_DECL
       && IS_CLASS (TREE_TYPE (receiver))
-      && classrefs
-      && VEC_length (ident_data_tuple, classrefs))
+      && vec_safe_length (classrefs))
     {
       int count;
       ident_data_tuple *ref;
       /* The receiver is a variable created by build_class_reference_decl.  */
-      FOR_EACH_VEC_ELT (ident_data_tuple, classrefs, count, ref)
+      FOR_EACH_VEC_ELT (*classrefs, count, ref)
 	if (ref->data == receiver)
 	  return ref->ident;
     }
@@ -1626,7 +1625,7 @@  build_v2_build_objc_method_call (int super_flag, tree method_prototype,
       if (TREE_CODE (ret_type) == RECORD_TYPE
 	  || TREE_CODE (ret_type) == UNION_TYPE)
 	{
-	  VEC(constructor_elt,gc) *rtt = NULL;
+	  vec<constructor_elt, va_gc> *rtt = NULL;
 	  /* ??? CHECKME. hmmm..... think we need something more
 	     here.  */
 	  CONSTRUCTOR_APPEND_ELT (rtt, NULL_TREE, NULL_TREE);
@@ -1748,7 +1747,7 @@  next_runtime_abi_02_build_const_string_constructor (location_t loc, tree string,
 						   int length)
 {
   tree constructor, fields, var;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   /* NeXT: (NSConstantString *) & ((__builtin_ObjCString) { isa, string, length }) */
   fields = TYPE_FIELDS (internal_const_str_type);
@@ -1896,12 +1895,12 @@  void build_v2_message_ref_translation_table (void)
   int count;
   msgref_entry *ref;
 
-  if (!msgrefs || !VEC_length (msgref_entry,msgrefs))
+  if (!vec_safe_length (msgrefs))
     return;
 
-  FOR_EACH_VEC_ELT (msgref_entry, msgrefs, count, ref)
+  FOR_EACH_VEC_ELT (*msgrefs, count, ref)
     {
-      VEC(constructor_elt,gc) *initializer;
+      vec<constructor_elt, va_gc> *initializer;
       tree expr, constructor;
       tree struct_type = TREE_TYPE (ref->refdecl);
       location_t loc = DECL_SOURCE_LOCATION (ref->refdecl);
@@ -1929,10 +1928,10 @@  build_v2_classrefs_table (void)
   int count;
   ident_data_tuple *ref;
 
-  if (!classrefs || !VEC_length (ident_data_tuple, classrefs))
+  if (!vec_safe_length (classrefs))
     return;
 
-  FOR_EACH_VEC_ELT (ident_data_tuple, classrefs, count, ref)
+  FOR_EACH_VEC_ELT (*classrefs, count, ref)
     {
       tree expr = ref->ident;
       tree decl = ref->data;
@@ -1960,13 +1959,13 @@  build_v2_super_classrefs_table (bool metaclass)
 {
   int count;
   ident_data_tuple *ref;
-  VEC (ident_data_tuple, gc) *list = metaclass  ? metaclass_super_refs
+  vec<ident_data_tuple, va_gc> *list = metaclass  ? metaclass_super_refs
 						: class_super_refs;
 
-  if (!list || !VEC_length (ident_data_tuple, list))
+  if (!vec_safe_length (list))
     return;
 
-  FOR_EACH_VEC_ELT (ident_data_tuple, list, count, ref)
+  FOR_EACH_VEC_ELT (*list, count, ref)
     {
       tree expr = ref->ident;
       tree decl = ref->data;
@@ -1986,17 +1985,15 @@  build_v2_super_classrefs_table (bool metaclass)
 /* Add the global class meta-data declaration to the list which later
    on ends up in the __class_list section.  */
 
-static GTY(()) VEC(tree,gc) *class_list;
+static GTY(()) vec<tree, va_gc> *class_list;
 
 static void
 objc_v2_add_to_class_list (tree global_class_decl)
 {
-  if (!class_list)
-    class_list = VEC_alloc (tree, gc, imp_count?imp_count:1);
-  VEC_safe_push (tree, gc, class_list, global_class_decl);
+  vec_safe_push (class_list, global_class_decl);
 }
 
-static GTY(()) VEC(tree,gc) *nonlazy_class_list;
+static GTY(()) vec<tree, va_gc> *nonlazy_class_list;
 
 /* Add the global class meta-data declaration to the list which later
    on ends up in the __nonlazy_class section.  */
@@ -2004,12 +2001,10 @@  static GTY(()) VEC(tree,gc) *nonlazy_class_list;
 static void
 objc_v2_add_to_nonlazy_class_list (tree global_class_decl)
 {
-  if (!nonlazy_class_list)
-    nonlazy_class_list = VEC_alloc (tree, gc, imp_count?imp_count:1);
-  VEC_safe_push (tree, gc, nonlazy_class_list, global_class_decl);
+  vec_safe_push (nonlazy_class_list, global_class_decl);
 }
 
-static GTY(()) VEC(tree,gc) *category_list;
+static GTY(()) vec<tree, va_gc> *category_list;
 
 /* Add the category meta-data declaration to the list which later on
    ends up in the __nonlazy_category section.  */
@@ -2017,12 +2012,10 @@  static GTY(()) VEC(tree,gc) *category_list;
 static void
 objc_v2_add_to_category_list (tree decl)
 {
-  if (!category_list)
-    category_list = VEC_alloc (tree, gc, cat_count?cat_count:1);
-  VEC_safe_push (tree, gc, category_list, decl);
+  vec_safe_push (category_list, decl);
 }
 
-static GTY(()) VEC(tree,gc) *nonlazy_category_list;
+static GTY(()) vec<tree, va_gc> *nonlazy_category_list;
 
 /* Add the category meta-data declaration to the list which later on
    ends up in the __category_list section.  */
@@ -2030,9 +2023,7 @@  static GTY(()) VEC(tree,gc) *nonlazy_category_list;
 static void
 objc_v2_add_to_nonlazy_category_list (tree decl)
 {
-  if (!nonlazy_category_list)
-    nonlazy_category_list = VEC_alloc (tree, gc, cat_count?cat_count:1);
-  VEC_safe_push (tree, gc, nonlazy_category_list, decl);
+  vec_safe_push (nonlazy_category_list, decl);
 }
 
 static bool
@@ -2054,16 +2045,16 @@  has_load_impl (tree clsmeth)
    all @implemented {class,category} meta-data.  */
 
 static void
-build_v2_address_table (VEC(tree,gc) *src, const char *nam, tree attr)
+build_v2_address_table (vec<tree, va_gc> *src, const char *nam, tree attr)
 {
   int count=0;
   tree type, decl, expr;
-  VEC(constructor_elt,gc) *initlist = NULL;
+  vec<constructor_elt, va_gc> *initlist = NULL;
 
-  if (!src || !VEC_length(tree,src))
+  if (!vec_safe_length (src))
     return;
 
-  FOR_EACH_VEC_ELT (tree, src, count, decl)
+  FOR_EACH_VEC_ELT (*src, count, decl)
     {
 #ifndef OBJCPLUS
       tree purpose = build_int_cst (NULL_TREE, count);
@@ -2098,7 +2089,7 @@  build_v2_protocol_list_translation_table (void)
   if (!protrefs)
     return;
 
-  FOR_EACH_VEC_ELT (prot_list_entry, protrefs, count, ref)
+  FOR_EACH_VEC_ELT (*protrefs, count, ref)
     {
       char buf[BUFSIZE];
       tree expr;
@@ -2112,7 +2103,7 @@  build_v2_protocol_list_translation_table (void)
   /* TODO: Maybe we could explicitly delete the vec. now?  */
 }
 
-static GTY (()) VEC (prot_list_entry, gc) * protlist;
+static GTY (()) vec<prot_list_entry, va_gc> *protlist;
 
 /* Add the local protocol meta-data declaration to the list which
    later on ends up in the __protocol_list section.  */
@@ -2123,10 +2114,10 @@  objc_add_to_protocol_list (tree protocol_interface_decl, tree protocol_decl)
   prot_list_entry e;
   if (!protlist)
     /* Arbitrary init count.  */
-    protlist = VEC_alloc (prot_list_entry, gc, 32);
+    vec_alloc (protlist, 32);
   e.id = protocol_interface_decl;
   e.refdecl = protocol_decl;
-  VEC_safe_push (prot_list_entry, gc, protlist, e);
+  vec_safe_push (protlist, e);
 }
 
 /* Build the __protocol_list section table containing address of all
@@ -2137,10 +2128,10 @@  build_v2_protocol_list_address_table (void)
 {
   int count;
   prot_list_entry *ref;
-  if (!protlist || !VEC_length (prot_list_entry, protlist))
+  if (!vec_safe_length (protlist))
     return;
 
-  FOR_EACH_VEC_ELT (prot_list_entry, protlist, count, ref)
+  FOR_EACH_VEC_ELT (*protlist, count, ref)
     {
       tree decl, expr;
       char buf[BUFSIZE];
@@ -2165,7 +2156,7 @@  generate_v2_protocol_list (tree i_or_p, tree klass_ctxt)
 {
   tree refs_decl, lproto, e, plist, ptempl_p_t;
   int size = 0;
-  VEC(constructor_elt,gc) *initlist = NULL;
+  vec<constructor_elt, va_gc> *initlist = NULL;
   char buf[BUFSIZE];
 
   if (TREE_CODE (i_or_p) == CLASS_INTERFACE_TYPE
@@ -2243,10 +2234,10 @@  generate_v2_protocol_list (tree i_or_p, tree klass_ctxt)
 static tree
 build_v2_descriptor_table_initializer (tree type, tree entries)
 {
-  VEC(constructor_elt,gc) *initlist = NULL;
+  vec<constructor_elt, va_gc> *initlist = NULL;
   do
     {
-      VEC(constructor_elt,gc) *eltlist = NULL;
+      vec<constructor_elt, va_gc> *eltlist = NULL;
       CONSTRUCTOR_APPEND_ELT (eltlist, NULL_TREE,
 			      build_selector (METHOD_SEL_NAME (entries)));
       CONSTRUCTOR_APPEND_ELT (eltlist, NULL_TREE,
@@ -2301,7 +2292,7 @@  generate_v2_meth_descriptor_table (tree chain, tree protocol,
 {
   tree method_list_template, initlist, decl, methods;
   int size, entsize;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   char buf[BUFSIZE];
 
   if (!chain || !prefix)
@@ -2345,7 +2336,7 @@  static tree
 build_v2_property_table_initializer (tree type, tree context)
 {
   tree x;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
   if (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE)
     x = CLASS_PROPERTY_DECL (context);
   else
@@ -2353,7 +2344,7 @@  build_v2_property_table_initializer (tree type, tree context)
 
   for (; x; x = TREE_CHAIN (x))
     {
-      VEC(constructor_elt,gc) *elemlist = NULL;
+      vec<constructor_elt, va_gc> *elemlist = NULL;
       /* NOTE! sections where property name/attribute go MUST change
 	 later.  */
       tree attribute, name_ident = PROPERTY_NAME (x);
@@ -2412,7 +2403,7 @@  generate_v2_property_table (tree context, tree klass_ctxt)
 {
   tree x, decl, initlist, property_list_template;
   bool is_proto = false;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
   int init_val, size = 0;
   char buf[BUFSIZE];
 
@@ -2468,7 +2459,7 @@  build_v2_protocol_initializer (tree type, tree protocol_name, tree protocol_list
 {
   tree expr, ttyp;
   location_t loc;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   /* TODO: find a better representation of location from the inputs.  */
   loc = UNKNOWN_LOCATION;
@@ -2615,7 +2606,7 @@  static tree
 generate_v2_dispatch_table (tree chain, const char *name, tree attr)
 {
   tree decl, method_list_template, initlist;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   int size, init_val;
 
   if (!chain || !name || !(size = list_length (chain)))
@@ -2649,7 +2640,7 @@  build_v2_category_initializer (tree type, tree cat_name, tree class_name,
 				location_t loc)
 {
   tree expr, ltyp;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, cat_name);
   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, class_name);
@@ -2766,10 +2757,8 @@  typedef struct GTY(()) ivarref_entry
   tree decl;
   tree offset;
 } ivarref_entry;
-DEF_VEC_O(ivarref_entry);
-DEF_VEC_ALLOC_O(ivarref_entry, gc);
 
-static GTY (()) VEC (ivarref_entry, gc) * ivar_offset_refs;
+static GTY (()) vec<ivarref_entry, va_gc> *ivar_offset_refs;
 
 static tree
 ivar_offset_ref (tree class_name, tree field_decl)
@@ -2786,13 +2775,13 @@  ivar_offset_ref (tree class_name, tree field_decl)
     {
       int count;
       ivarref_entry *ref;
-      FOR_EACH_VEC_ELT (ivarref_entry, ivar_offset_refs, count, ref)
+      FOR_EACH_VEC_ELT (*ivar_offset_refs, count, ref)
 	if (DECL_NAME (ref->decl) == field_decl_id)
 	  return ref->decl;
     }
   else
     /* Somewhat arbitrary initial provision.  */
-    ivar_offset_refs = VEC_alloc (ivarref_entry, gc, 32);
+    vec_alloc (ivar_offset_refs, 32);
 
   /* We come here if we don't find a match or at the start.  */
   global_var = (TREE_PUBLIC (field_decl) || TREE_PROTECTED (field_decl));
@@ -2806,7 +2795,7 @@  ivar_offset_ref (tree class_name, tree field_decl)
 
   e.decl = decl;
   e.offset = byte_position (field_decl);
-  VEC_safe_push (ivarref_entry, gc, ivar_offset_refs, e);
+  vec_safe_push (ivar_offset_refs, e);
   return decl;
 }
 
@@ -2818,11 +2807,11 @@  ivar_offset_ref (tree class_name, tree field_decl)
 static tree
 build_v2_ivar_list_initializer (tree class_name, tree type, tree field_decl)
 {
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   do
     {
-      VEC(constructor_elt,gc) *ivar = NULL;
+      vec<constructor_elt, va_gc> *ivar = NULL;
       int val;
       tree id;
 
@@ -2914,7 +2903,7 @@  static tree
 generate_v2_ivars_list (tree chain, const char *name, tree attr, tree templ)
 {
   tree decl, initlist, ivar_list_template;
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
   int size, ivar_t_size;
 
   if (!chain || !name || !(size = ivar_list_length (chain)))
@@ -2947,7 +2936,7 @@  static tree
 build_v2_class_t_initializer (tree type, tree isa, tree superclass,
 			      tree ro, tree cache, tree vtable)
 {
-  VEC(constructor_elt,gc) *initlist = NULL;
+  vec<constructor_elt, va_gc> *initlist = NULL;
 
   /* isa */
   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, isa);
@@ -2985,7 +2974,7 @@  build_v2_class_ro_t_initializer (tree type, tree name,
 {
   tree expr, unsigned_char_star, ltyp;
   location_t loc;
-  VEC(constructor_elt,gc) *initlist = NULL;
+  vec<constructor_elt, va_gc> *initlist = NULL;
 
   /* TODO: fish out the real location from somewhere.  */
   loc = UNKNOWN_LOCATION;
@@ -3059,7 +3048,7 @@  build_v2_class_ro_t_initializer (tree type, tree name,
   return objc_build_constructor (type, initlist);
 }
 
-static GTY (()) VEC (ident_data_tuple, gc) * ehtype_list;
+static GTY (()) vec<ident_data_tuple, va_gc> *ehtype_list;
 
 /* Record a name as needing a catcher.  */
 static void
@@ -3071,18 +3060,18 @@  objc_v2_add_to_ehtype_list (tree name)
       int count = 0;
       ident_data_tuple *ref;
 
-      FOR_EACH_VEC_ELT (ident_data_tuple, ehtype_list, count, ref)
+      FOR_EACH_VEC_ELT (*ehtype_list, count, ref)
 	if (ref->ident == name)
 	  return; /* Already entered.  */
      }
   else
     /* Arbitrary initial count.  */
-    ehtype_list = VEC_alloc (ident_data_tuple, gc, 8);
+    vec_alloc (ehtype_list, 8);
 
   /* Not found, or new list.  */
   e.ident = name;
   e.data = NULL_TREE;
-  VEC_safe_push (ident_data_tuple, gc, ehtype_list, e);
+  vec_safe_push (ehtype_list, e);
 }
 
 static void
@@ -3333,10 +3322,10 @@  build_v2_ivar_offset_ref_table (void)
   int count;
   ivarref_entry *ref;
 
-  if (!ivar_offset_refs || !VEC_length (ivarref_entry, ivar_offset_refs))
+  if (!vec_safe_length (ivar_offset_refs))
     return;
 
-  FOR_EACH_VEC_ELT (ivarref_entry, ivar_offset_refs, count, ref)
+  FOR_EACH_VEC_ELT (*ivar_offset_refs, count, ref)
     finish_var_decl (ref->decl, ref->offset);
 }
 
@@ -3346,7 +3335,7 @@  static void
 generate_v2_objc_image_info (void)
 {
   tree decl, array_type;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
   int flags =
 	((flag_replace_objc_classes && imp_count ? 1 : 0)
 	  | (flag_objc_gc ? 2 : 0));
@@ -3467,7 +3456,7 @@  build_v2_ehtype_template (void)
 static tree
 objc2_build_ehtype_initializer (tree name, tree cls)
 {
-  VEC(constructor_elt,gc) *initlist = NULL;
+  vec<constructor_elt, va_gc> *initlist = NULL;
   tree addr, offs;
 
   /* This is done the same way as c++, missing the two first entries
@@ -3555,10 +3544,10 @@  static void build_v2_eh_catch_objects (void)
   int count=0;
   ident_data_tuple *ref;
 
-  if (!ehtype_list || !VEC_length (ident_data_tuple, ehtype_list))
+  if (!vec_safe_length (ehtype_list))
     return;
 
-  FOR_EACH_VEC_ELT (ident_data_tuple, ehtype_list, count, ref)
+  FOR_EACH_VEC_ELT (*ehtype_list, count, ref)
     {
       char buf[BUFSIZE];
       bool impl = is_implemented (ref->ident);
@@ -3579,10 +3568,10 @@  lookup_ehtype_ref (tree id)
   int count=0;
   ident_data_tuple *ref;
 
-  if (!ehtype_list || !VEC_length (ident_data_tuple, ehtype_list))
+  if (!vec_safe_length (ehtype_list))
     return NULL_TREE;
 
-  FOR_EACH_VEC_ELT (ident_data_tuple, ehtype_list, count, ref)
+  FOR_EACH_VEC_ELT (*ehtype_list, count, ref)
     if (ref->ident == id)
       return ref->data;
   return NULL_TREE;
@@ -3662,10 +3651,11 @@  build_throw_stmt (location_t loc, tree throw_expr, bool rethrown)
   else
     {
       /* Throw like the others...  */
-      VEC(tree, gc) *parms = VEC_alloc (tree, gc, 1);
-      VEC_quick_push (tree, parms, throw_expr);
-      t = build_function_call_vec (loc, objc_exception_throw_decl, parms, NULL);
-      VEC_free (tree, gc, parms);
+      vec<tree, va_gc> *parms;
+      vec_alloc (parms, 1);
+      parms->quick_push (throw_expr);
+      t = build_function_call_vec (loc, objc_exception_throw_decl, parms, 0);
+      vec_free (parms);
     }
   return add_stmt (t);
 }
diff --git a/gcc/objc/objc-runtime-hooks.h b/gcc/objc/objc-runtime-hooks.h
index 9145681..8f307cf 100644
--- a/gcc/objc/objc-runtime-hooks.h
+++ b/gcc/objc/objc-runtime-hooks.h
@@ -75,7 +75,7 @@  typedef struct _objc_runtime_hooks_r
   /* Receiver is class Object, check runtime-specific.  */
   tree (*receiver_is_class_object) (tree);
   /* Get the start of a method argument type list (receiver, _cmd).  */
-  void (*get_arg_type_list_base) (VEC(tree,gc) **, tree, int, int);
+  void (*get_arg_type_list_base) (vec<tree, va_gc> **, tree, int, int);
   /* Build method call.  */
   tree (*build_objc_method_call) (location_t, tree, tree, tree, tree, tree, int);
 
diff --git a/gcc/objc/objc-runtime-shared-support.c b/gcc/objc/objc-runtime-shared-support.c
index 0b6f937..594b66b 100644
--- a/gcc/objc/objc-runtime-shared-support.c
+++ b/gcc/objc/objc-runtime-shared-support.c
@@ -346,11 +346,11 @@  add_objc_string (tree ident, string_section section)
 tree
 build_descriptor_table_initializer (tree type, tree entries)
 {
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   do
     {
-      VEC(constructor_elt,gc) *elts = NULL;
+      vec<constructor_elt, va_gc> *elts = NULL;
 
       CONSTRUCTOR_APPEND_ELT (elts, NULL_TREE,
 			      build_selector (METHOD_SEL_NAME (entries)));
@@ -371,11 +371,11 @@  build_descriptor_table_initializer (tree type, tree entries)
 tree
 build_dispatch_table_initializer (tree type, tree entries)
 {
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   do
     {
-      VEC(constructor_elt,gc) *elems = NULL;
+      vec<constructor_elt, va_gc> *elems = NULL;
       tree expr;
 
       CONSTRUCTOR_APPEND_ELT (elems, NULL_TREE,
@@ -433,7 +433,7 @@  init_module_descriptor (tree type, long vers)
 {
   tree expr, ltyp;
   location_t loc;
-  VEC(constructor_elt,gc) *v = NULL;
+  vec<constructor_elt, va_gc> *v = NULL;
 
   /* No really useful place to point to.  */
   loc = UNKNOWN_LOCATION;
@@ -528,11 +528,11 @@  build_module_descriptor (long vers, tree attr)
 tree
 build_ivar_list_initializer (tree type, tree field_decl)
 {
-  VEC(constructor_elt,gc) *inits = NULL;
+  vec<constructor_elt, va_gc> *inits = NULL;
 
   do
     {
-      VEC(constructor_elt,gc) *ivar = NULL;
+      vec<constructor_elt, va_gc> *ivar = NULL;
       tree id;
 
       /* Set name.  */
diff --git a/gcc/objc/objc-runtime-shared-support.h b/gcc/objc/objc-runtime-shared-support.h
index 0db8bed..e5dc644 100644
--- a/gcc/objc/objc-runtime-shared-support.h
+++ b/gcc/objc/objc-runtime-shared-support.h
@@ -29,7 +29,7 @@  extern tree add_field_decl (tree, const char *, tree **);
 extern tree build_sized_array_type (tree, int);
 
 extern tree lookup_interface (tree);
-extern tree objc_build_constructor (tree, VEC(constructor_elt,gc) *);
+extern tree objc_build_constructor (tree, vec<constructor_elt, va_gc> *);
 
 extern tree start_var_decl (tree, const char *);
 extern void finish_var_decl (tree, tree);