S_PER_CLUSTER];
  binding_slot slots[BINDING_VECTOR_SLOTS_PER_CLUSTER];
};

/* These two fields overlay lang flags.  So don't use those.  */
#define BINDING_VECTOR_ALLOC_CLUSTERS(NODE) \
  (BINDING_VECTOR_CHECK (NODE)->base.u.dependence_info.clique)
#define BINDING_VECTOR_NUM_CLUSTERS(NODE) \
  (BINDING_VECTOR_CHECK (NODE)->base.u.dependence_info.base)
#define BINDING_VECTOR_CLUSTER_BASE(NODE) \
  (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->vec)
#define BINDING_VECTOR_CLUSTER_LAST(NODE) \
  (&BINDING_VECTOR_CLUSTER (NODE, BINDING_VECTOR_NUM_CLUSTERS (NODE) - 1))
#define BINDING_VECTOR_CLUSTER(NODE,IX) \
  (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->vec[IX])

struct GTY(()) tree_binding_vec {
  struct tree_base base;
  tree name;
  binding_cluster GTY((length ("%h.base.u.dependence_info.base"))) vec[1];
};

/* The name of a module vector.  */
#define BINDING_VECTOR_NAME(NODE) \
  (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->name)

/* tree_binding_vec does uses  base.u.dependence_info.base field for
   length.  It does not have lang_flag etc available!  */

/* These two flags note if a module-vector contains deduplicated
   bindings (i.e. multiple declarations in different imports).  */
/* This binding contains duplicate references to a global module
   entity.  */
#define BINDING_VECTOR_GLOBAL_DUPS_P(NODE) \
  (BINDING_VECTOR_CHECK (NODE)->base.static_flag)
/* This binding contains duplicate references to a partioned module
   entity.  */
#define BINDING_VECTOR_PARTITION_DUPS_P(NODE) \
  (BINDING_VECTOR_CHECK (NODE)->base.volatile_flag)

/* These two flags indicate the provenence of the bindings on this
   particular vector slot.  We can of course determine this from slot
   number, but that's a relatively expensive lookup.  This avoids
   that when iterating.  */
/* This slot is part of the global module (a header unit).  */
#define MODULE_BINDING_GLOBAL_P(NODE) \
  (OVERLOAD_CHECK (NODE)->base.static_flag)
/* This slot is part of the current module (a partition or primary).  */
#define MODULE_BINDING_PARTITION_P(NODE)		\
  (OVERLOAD_CHECK (NODE)->base.volatile_flag)

extern void set_identifier_type_value (tree, tree);
extern void push_binding (tree, tree, cp_binding_level*);
extern void pop_local_binding (tree, tree);
extern void pop_bindings_and_leave_scope (void);
extern tree constructor_name (tree);
extern bool constructor_name_p (tree, tree);
