OSDN Git Service

* g++.old-deja/g++.benjamin/16077.C: Adjust warnings.
[pf3gnuchains/gcc-fork.git] / gcc / cp / cp-tree.h
index a0c4134..a45e546 100644 (file)
@@ -58,7 +58,7 @@ struct diagnostic_context;
       TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (in _TYPE).
       INHERITED_VALUE_BINDING_P (in CPLUS_BINDING)
       ICS_ELLIPSIS_FLAG (in _CONV)
-      BINFO_ACCESS (in BINFO)
+      BINFO_DEPENDENT_BASE_P (in BINFO)
       DECL_INITIALIZED_P (in VAR_DECL)
    2: IDENTIFIER_OPNAME_P.
       TYPE_POLYMORPHIC_P (in _TYPE)
@@ -79,7 +79,7 @@ struct diagnostic_context;
       NEED_TEMPORARY_P (in REF_BIND, BASE_CONV)
       IDENTIFIER_TYPENAME_P (in IDENTIFIER_NODE)
    5: C_IS_RESERVED_WORD (in IDENTIFIER_NODE)
-   6: BINFO_ACCESS (in BINFO)
+   6: For future expansion
 
    Usage of TYPE_LANG_FLAG_?:
    0: TYPE_DEPENDENT_P
@@ -222,6 +222,10 @@ struct diagnostic_context;
   (flag_abi_version == 0 || flag_abi_version >= (N))
 
 \f
+/* Datatype used to temporarily save C++ bindings (for implicit
+   instantiations purposes and like).  Implemented in decl.c.  */
+typedef struct cxx_saved_binding cxx_saved_binding;
+\f
 /* Language-dependent contents of an identifier.  */
 
 struct lang_identifier GTY(())
@@ -240,9 +244,6 @@ struct lang_identifier GTY(())
 
 #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_5 (ID)
 
-extern const short rid_to_yy[RID_MAX];
-#define C_RID_YYCODE(ID) rid_to_yy[C_RID_CODE (ID)]
-
 #define LANG_IDENTIFIER_CAST(NODE) \
        ((struct lang_identifier*)IDENTIFIER_NODE_CHECK (NODE))
 
@@ -595,15 +596,6 @@ enum cp_tree_index
     CPTI_GLOBAL_DELETE_FNDECL,
     CPTI_AGGR_TAG,
 
-    CPTI_ACCESS_DEFAULT,
-    CPTI_ACCESS_PUBLIC,
-    CPTI_ACCESS_PROTECTED,
-    CPTI_ACCESS_PRIVATE,
-    CPTI_ACCESS_DEFAULT_VIRTUAL,
-    CPTI_ACCESS_PUBLIC_VIRTUAL,
-    CPTI_ACCESS_PROTECTED_VIRTUAL,
-    CPTI_ACCESS_PRIVATE_VIRTUAL,
-
     CPTI_CTOR_IDENTIFIER,
     CPTI_COMPLETE_CTOR_IDENTIFIER,
     CPTI_BASE_CTOR_IDENTIFIER,
@@ -685,19 +677,6 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
 #define global_delete_fndecl           cp_global_trees[CPTI_GLOBAL_DELETE_FNDECL]
 #define current_aggr                   cp_global_trees[CPTI_AGGR_TAG]
 
-/* Define the sets of attributes that member functions and baseclasses
-   can have.  These are sensible combinations of {public,private,protected}
-   cross {virtual,non-virtual}.  */
-
-#define access_default_node             cp_global_trees[CPTI_ACCESS_DEFAULT]
-#define access_public_node              cp_global_trees[CPTI_ACCESS_PUBLIC]
-#define access_protected_node           cp_global_trees[CPTI_ACCESS_PROTECTED]
-#define access_private_node             cp_global_trees[CPTI_ACCESS_PRIVATE]
-#define access_default_virtual_node     cp_global_trees[CPTI_ACCESS_DEFAULT_VIRTUAL]
-#define access_public_virtual_node      cp_global_trees[CPTI_ACCESS_PUBLIC_VIRTUAL]
-#define access_protected_virtual_node   cp_global_trees[CPTI_ACCESS_PROTECTED_VIRTUAL]
-#define access_private_virtual_node     cp_global_trees[CPTI_ACCESS_PRIVATE_VIRTUAL]
-
 /* We cache these tree nodes so as to call get_identifier less
    frequently.  */
 
@@ -771,11 +750,16 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
 
 #define keyed_classes                   cp_global_trees[CPTI_KEYED_CLASSES]
 
+/* Node to indicate default access. This must be distinct from the
+   access nodes in tree.h.  */
+
+#define access_default_node            null_node
+
 /* Global state.  */
 
 struct saved_scope GTY(())
 {
-  tree old_bindings;
+  cxx_saved_binding *old_bindings;
   tree old_namespace;
   tree decl_ns_list;
   tree class_name;
@@ -1417,21 +1401,9 @@ struct lang_type GTY(())
 /* A chain of BINFOs for the direct and indirect virtual base classes
    that this type uses in a post-order depth-first left-to-right
    order.  (In other words, these bases appear in the order that they
-   should be initialized.)  If a virtual base is primary, then the
-   primary copy will appear on this list.  Thus, the BINFOs on this
-   list are all "real"; they are the same BINFOs that will be
-   encountered when using dfs_unmarked_real_bases_queue_p and related
-   functions.  */
+   should be initialized.)  */
 #define CLASSTYPE_VBASECLASSES(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->vbases)
 
-/* For a non-virtual BINFO, the BINFO itself; for a virtual BINFO, the
-   binfo_for_vbase.  C is the most derived class for the hierarchy
-   containing BINFO.  */
-#define CANONICAL_BINFO(BINFO, C)              \
-  (TREE_VIA_VIRTUAL (BINFO)                    \
-   ? binfo_for_vbase (BINFO_TYPE (BINFO), C)   \
-   : (BINFO))
-
 /* Number of direct baseclasses of NODE.  */
 #define CLASSTYPE_N_BASECLASSES(NODE) \
   (BINFO_N_BASETYPES (TYPE_BINFO (NODE)))
@@ -1554,63 +1526,28 @@ struct lang_type GTY(())
 /* Additional macros for inheritance information.  */
 
 /* The BINFO_INHERITANCE_CHAIN is used opposite to the description in
-   gcc/tree.h.  In particular if D is derived from B then the BINFO
-   for B (in D) will have a BINFO_INHERITANCE_CHAIN pointing to
-   D.  In tree.h, this pointer is described as pointing in other
-   direction.  There is a different BINFO for each path to a virtual
-   base; BINFOs for virtual bases are not shared.
-
-   We use TREE_VIA_PROTECTED and TREE_VIA_PUBLIC, but private
-   inheritance is indicated by the absence of the other two flags, not
-   by TREE_VIA_PRIVATE, which is unused.  */
-
-/* Mark the binfo, whether shared or not. Each instance of a virtual
-   base can be separately marked.  */
-#define BINFO_UNSHARED_MARKED(NODE) TREE_LANG_FLAG_0 (NODE)
+   gcc/tree.h.  In particular if D is non-virtually derived from B
+   then the BINFO for B (in D) will have a BINFO_INHERITANCE_CHAIN
+   pointing to D.  If D is virtually derived, its
+   BINFO_INHERITANCE_CHAIN will point to the most derived binfo. In
+   tree.h, this pointer is described as pointing in other
+   direction.  The binfos of virtual bases are shared.  */
 
 /* Nonzero means marked by DFS or BFS search.  */
-#define BINFO_MARKED(NODE)                     \
-  (TREE_VIA_VIRTUAL (NODE)                     \
-   ? CLASSTYPE_MARKED (BINFO_TYPE (NODE))      \
-   : TREE_LANG_FLAG_0 (NODE))
-/* Macros needed because of C compilers that don't allow conditional
-   expressions to be lvalues.  Grr!  */
-#define SET_BINFO_MARKED(NODE)                 \
-  (TREE_VIA_VIRTUAL(NODE)                      \
-   ? SET_CLASSTYPE_MARKED (BINFO_TYPE (NODE))  \
-   : (void)(TREE_LANG_FLAG_0 (NODE) = 1))
-#define CLEAR_BINFO_MARKED(NODE)               \
-  (TREE_VIA_VIRTUAL (NODE)                     \
-   ? CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (NODE))        \
-   : (void)(TREE_LANG_FLAG_0 (NODE) = 0))
+#define BINFO_MARKED(NODE)   TREE_LANG_FLAG_0 (NODE)
 
 /* Nonzero means that this class is on a path leading to a new vtable.  */
-#define BINFO_VTABLE_PATH_MARKED(NODE)         \
-  (TREE_VIA_VIRTUAL (NODE)                     \
-   ? CLASSTYPE_MARKED3 (BINFO_TYPE (NODE))     \
-   : TREE_LANG_FLAG_3 (NODE))
-#define SET_BINFO_VTABLE_PATH_MARKED(NODE)     \
-  (TREE_VIA_VIRTUAL(NODE)                      \
-   ? SET_CLASSTYPE_MARKED3 (BINFO_TYPE (NODE)) \
-   : (TREE_LANG_FLAG_3 (NODE) = 1))
-#define CLEAR_BINFO_VTABLE_PATH_MARKED(NODE)   \
-  (TREE_VIA_VIRTUAL (NODE)                     \
-   ? CLEAR_CLASSTYPE_MARKED3 (BINFO_TYPE (NODE))\
-   : (TREE_LANG_FLAG_3 (NODE) = 0))
-
-/* Nonzero means B (a BINFO) has its own vtable.  Under the old ABI,
-   secondary vtables are sometimes shared.  Any copies will not have
-   this flag set.
-
-   B is part of the hierarchy dominated by C.  */
-#define BINFO_NEW_VTABLE_MARKED(B, C) \
-  (TREE_LANG_FLAG_4 (CANONICAL_BINFO (B, C)))
+#define BINFO_VTABLE_PATH_MARKED(NODE) TREE_LANG_FLAG_3 (NODE)
+
+/* Nonzero means B (a BINFO) has its own vtable.  Any copies will not
+   have this flag set. */
+#define BINFO_NEW_VTABLE_MARKED(B) (TREE_LANG_FLAG_4 (B))
 
 /* Any subobject that needs a new vtable must have a vptr and must not
    be a non-virtual primary base (since it would then use the vtable from a
    derived class and never become non-primary.)  */
-#define SET_BINFO_NEW_VTABLE_MARKED(B, C)                               \
-  (BINFO_NEW_VTABLE_MARKED (B, C) = 1,                                  \
+#define SET_BINFO_NEW_VTABLE_MARKED(B)                                  \
+  (BINFO_NEW_VTABLE_MARKED (B) = 1,                                     \
    my_friendly_assert (!BINFO_PRIMARY_P (B)                             \
                       || TREE_VIA_VIRTUAL (B), 20000517),               \
    my_friendly_assert (CLASSTYPE_VFIELDS (BINFO_TYPE (B)) != NULL_TREE,  \
@@ -1618,8 +1555,6 @@ struct lang_type GTY(())
 
 /* Nonzero means this class has done dfs_pushdecls.  */
 #define BINFO_PUSHDECLS_MARKED(NODE) BINFO_VTABLE_PATH_MARKED (NODE)
-#define SET_BINFO_PUSHDECLS_MARKED(NODE) SET_BINFO_VTABLE_PATH_MARKED (NODE)
-#define CLEAR_BINFO_PUSHDECLS_MARKED(NODE) CLEAR_BINFO_VTABLE_PATH_MARKED (NODE)
 
 /* Nonzero if this BINFO is a primary base class.  Note, this can be
    set for non-canononical virtual bases. For a virtual primary base
@@ -1646,6 +1581,10 @@ struct lang_type GTY(())
 
 #define BINFO_LANG_ELTS (BINFO_ELTS + 3)
 
+/* Nonzero if this binfo is for a dependent base - one that should not
+   be searched.  */
+#define BINFO_DEPENDENT_BASE_P(NODE) TREE_LANG_FLAG_1(NODE)
+
 /* Nonzero if this binfo has lost its primary base binfo (because that
    is a nearly-empty virtual base that has been taken by some other
    base in the complete hierarchy.  */
@@ -2381,6 +2320,14 @@ struct lang_decl GTY(())
 #define ENUM_TI_ARGS(NODE)                     \
   TI_ARGS (ENUM_TEMPLATE_INFO (NODE))
 
+/* For a template instantiation TYPE, returns the TYPE corresponding
+   to the primary template.  Otherwise returns TYPE itself.  */
+#define CLASSTYPE_PRIMARY_TEMPLATE_TYPE(TYPE)                                          \
+  ((CLASSTYPE_USE_TEMPLATE ((TYPE)) && !CLASSTYPE_TEMPLATE_SPECIALIZATION ((TYPE)))    \
+   ? TREE_TYPE (DECL_TEMPLATE_RESULT (DECL_PRIMARY_TEMPLATE                            \
+                                     (CLASSTYPE_TI_TEMPLATE ((TYPE)))))                \
+   : (TYPE))
+
 /* Like DECL_TI_TEMPLATE, but for an ENUMERAL_, RECORD_, or UNION_TYPE.  */
 #define TYPE_TI_TEMPLATE(NODE)                 \
   (TI_TEMPLATE (TYPE_TEMPLATE_INFO (NODE)))
@@ -3080,7 +3027,7 @@ typedef enum tmpl_spec_kind {
 /* The various kinds of access.  BINFO_ACCESS depends on these being
    two bit quantities.  The numerical values are important; they are
    used to initialize RTTI data structures, so changing them changes
-   the ABI.  */
+   the ABI.   */
 typedef enum access_kind {
   ak_none = 0,             /* Inaccessible.  */
   ak_public = 1,           /* Accessible, as a `public' thing.  */
@@ -3617,6 +3564,7 @@ extern tree type_decays_to (tree);
 extern tree resolve_scoped_fn_name (tree, tree);
 extern tree build_user_type_conversion (tree, tree, int);
 extern tree build_new_function_call (tree, tree);
+extern tree build_operator_new_call (tree, tree, tree *, tree *);
 extern tree build_new_method_call (tree, tree, tree, tree, int);
 extern tree build_special_member_call (tree, tree, tree, tree, int);
 extern tree build_new_op (enum tree_code, int, tree, tree, tree);
@@ -3633,7 +3581,8 @@ extern tree type_passed_as (tree);
 extern tree convert_for_arg_passing (tree, tree);
 extern tree cp_convert_parm_for_inlining        (tree, tree, tree);
 extern bool is_properly_derived_from (tree, tree);
-extern tree initialize_reference (tree, tree);
+extern tree initialize_reference (tree, tree, tree);
+extern tree make_temporary_var_for_ref_to_temp (tree, tree);
 extern tree strip_top_quals (tree);
 extern tree perform_implicit_conversion (tree, tree);
 extern tree in_charge_arg_for_name (tree);
@@ -3695,7 +3644,7 @@ extern tree ocp_convert (tree, tree, int, int);
 extern tree cp_convert (tree, tree);
 extern tree convert_to_void (tree, const char */*implicit context*/);
 extern tree convert_force (tree, tree, int);
-extern tree build_type_conversion (tree, tree, int);
+extern tree build_type_conversion (tree, tree);
 extern tree build_expr_type_conversion (int, tree, bool);
 extern tree type_promotes_to (tree);
 extern tree perform_qualification_conversions (tree, tree);
@@ -3776,6 +3725,7 @@ extern tree lookup_name_current_level             (tree);
 extern tree lookup_type_current_level          (tree);
 extern tree lookup_name_real                    (tree, int, int, int, int);
 extern tree namespace_ancestor                 (tree, tree);
+extern bool is_ancestor                         (tree, tree);
 extern tree unqualified_namespace_lookup       (tree, int, tree *);
 extern tree check_for_out_of_scope_variable     (tree);
 extern bool lookup_using_namespace (tree, tree, tree, tree, int, tree *);
@@ -3886,7 +3836,6 @@ extern tree build_cleanup                 (tree);
 extern void finish_file                                (void);
 extern tree build_expr_from_tree               (tree);
 extern tree build_cleanup                      (tree);
-extern void finish_file                                (void);
 extern tree build_expr_from_tree               (tree);
 extern tree build_offset_ref_call_from_tree     (tree, tree);
 extern tree build_call_from_tree                (tree, tree, bool);
@@ -3903,7 +3852,7 @@ extern tree do_class_using_decl (tree);
 extern void do_using_directive (tree);
 extern void check_default_args (tree);
 extern void mark_used (tree);
-extern tree handle_class_head (enum tag_types, tree, tree, tree, bool, bool *);
+extern tree handle_class_head (enum tag_types, tree, tree, tree);
 extern tree lookup_arg_dependent (tree, tree, tree);
 extern void finish_static_data_member_decl (tree, tree, tree, int);
 extern tree cp_build_parm_decl (tree, tree);
@@ -3970,7 +3919,7 @@ extern tree build_init                            (tree, tree, int);
 extern int is_aggr_type                                (tree, int);
 extern tree get_aggr_from_typedef              (tree, int);
 extern tree get_type_value                     (tree);
-extern tree build_zero_init                    (tree, bool);
+extern tree build_zero_init                    (tree, tree, bool);
 extern tree build_member_call                  (tree, tree, tree);
 extern tree build_offset_ref                   (tree, tree);
 extern tree resolve_offset_ref                 (tree);
@@ -4016,7 +3965,7 @@ extern tree make_aggr_type                        (enum tree_code);
 extern void yyerror                            (const char *);
 extern void yyhook                             (int);
 extern int cp_type_qual_from_rid                (tree);
-extern const char *cxx_init                    (const char *);
+extern bool cxx_init                           (void);
 extern void cxx_finish (void);
 extern void cxx_init_options (void);
 
@@ -4146,28 +4095,24 @@ extern tree binfo_from_vbase                    (tree);
 extern tree look_for_overrides_here            (tree, tree);
 extern int check_final_overrider               (tree, tree);
 extern tree dfs_walk                            (tree,
-                                                      tree (*) (tree, void *),
-                                                      tree (*) (tree, void *),
-                                                      void *);
+                                                tree (*) (tree, void *),
+                                                tree (*) (tree, int, void *),
+                                                void *);
 extern tree dfs_walk_real                      (tree,
-                                                      tree (*) (tree, void *),
-                                                      tree (*) (tree, void *),
-                                                      tree (*) (tree, void *),
-                                                      void *);
+                                               tree (*) (tree, void *),
+                                               tree (*) (tree, void *),
+                                               tree (*) (tree, int, void *),
+                                               void *);
 extern tree dfs_unmark                          (tree, void *);
-extern tree markedp                             (tree, void *);
-extern tree unmarkedp                           (tree, void *);
-extern tree dfs_unmarked_real_bases_queue_p     (tree, void *);
-extern tree dfs_marked_real_bases_queue_p       (tree, void *);
-extern tree dfs_skip_vbases                     (tree, void *);
-extern tree marked_vtable_pathp                 (tree, void *);
-extern tree unmarked_vtable_pathp               (tree, void *);
-extern tree find_vbase_instance                 (tree, tree);
-extern tree binfo_for_vbase                     (tree, tree);
+extern tree markedp                             (tree, int, void *);
+extern tree unmarkedp                           (tree, int, void *);
 extern tree binfo_via_virtual                   (tree, tree);
 extern tree build_baselink                      (tree, tree, tree, tree);
 extern tree adjust_result_of_qualified_name_lookup
                                                 (tree, tree, tree);
+extern tree copied_binfo                       (tree, tree);
+extern tree original_binfo                     (tree, tree);
+
 /* in semantics.c */
 extern void push_deferring_access_checks       (bool defer_p);
 extern void resume_deferring_access_checks     (void);
@@ -4249,7 +4194,7 @@ extern void finish_default_args                 (void);
 extern tree finish_member_class_template        (tree);
 extern void finish_template_decl                (tree);
 extern tree finish_template_type                (tree, tree, int);
-extern tree finish_base_specifier               (tree, tree);
+extern tree finish_base_specifier               (tree, tree, bool);
 extern void finish_member_declaration           (tree);
 extern void check_multiple_declarators          (void);
 extern tree finish_typeof                      (tree);
@@ -4261,7 +4206,6 @@ extern void expand_body                         (tree);
 extern tree nullify_returns_r                (tree *, int *, void *);
 extern void do_pushlevel                        (scope_kind);
 extern tree do_poplevel                         (void);
-extern void begin_mem_initializers              (void);
 extern void finish_mem_initializers             (tree);
 extern void setup_vtbl_ptr                     (tree, tree);
 extern void clear_out_block                     (void);
@@ -4279,10 +4223,11 @@ extern void init_tree                           (void);
 extern int pod_type_p                          (tree);
 extern int zero_init_p                         (tree);
 extern tree canonical_type_variant              (tree);
-extern void unshare_base_binfos                        (tree);
+extern tree copy_base_binfos                   (tree, tree, tree);
 extern int member_p                            (tree);
 extern cp_lvalue_kind real_lvalue_p            (tree);
 extern int non_cast_lvalue_p                   (tree);
+extern cp_lvalue_kind real_non_cast_lvalue_p    (tree);
 extern int non_cast_lvalue_or_else             (tree, const char *);
 extern tree build_min                          (enum tree_code, tree,
                                                         ...);
@@ -4297,7 +4242,6 @@ extern tree hash_tree_cons                        (tree, tree, tree);
 extern tree hash_tree_chain                    (tree, tree);
 extern tree hash_chainon                       (tree, tree);
 extern tree make_binfo                         (tree, tree, tree, tree);
-extern tree reverse_path                       (tree);
 extern int count_functions                     (tree);
 extern int is_overloaded_fn                    (tree);
 extern tree get_first_fn                       (tree);
@@ -4381,8 +4325,6 @@ extern tree build_x_indirect_ref          (tree, const char *);
 extern tree build_indirect_ref                 (tree, const char *);
 extern tree build_array_ref                    (tree, tree);
 extern tree get_member_function_from_ptrfunc   (tree *, tree);
-extern tree build_function_call_real           (tree, tree, int, int);
-extern tree build_function_call_maybe          (tree, tree);
 extern tree convert_arguments                  (tree, tree, tree, int);
 extern tree build_x_binary_op                  (enum tree_code, tree, tree);
 extern tree build_x_unary_op                   (enum tree_code, tree);
@@ -4418,6 +4360,8 @@ extern tree check_return_expr                   (tree);
 #define cxx_sizeof(T)  cxx_sizeof_or_alignof_type (T, SIZEOF_EXPR, true)
 #define cxx_alignof(T) cxx_sizeof_or_alignof_type (T, ALIGNOF_EXPR, true)
 extern tree build_ptrmemfunc_access_expr       (tree, tree);
+extern tree build_address                       (tree);
+extern tree build_nop                           (tree, tree);
 
 /* in typeck2.c */
 extern void require_complete_eh_spec_types     (tree, tree);