Import gcc-4.7.2 to new vendor branch
[dragonfly.git] / contrib / gcc-4.7 / gcc / objc / objc-next-metadata-tags.h
1 /* Declarations for meta-data attribute tags.
2    Copyright (C) 2011 Free Software Foundation, Inc.
3    Contributed by Iain Sandoe
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 /* These are identifiers used to flag meta-data attributes such that they
22    survive LTO and might be placed in correct sections for the target.  */
23
24 enum objc_runtime_tree_index
25 {
26   OCTI_RT_OBJC_META,
27   OCTI_RT_META_BASE,
28
29   OCTI_RT_META_CLASS,
30   OCTI_RT_META_METACLASS,
31   OCTI_RT_META_CATEGORY,
32   OCTI_RT_META_PROTOCOL,
33
34   OCTI_RT_META_CLASS_CLS_VARS,
35   OCTI_RT_META_CLASS_NST_VARS,
36
37   OCTI_RT_META_CLASS_CLS_METH,
38   OCTI_RT_META_CLASS_NST_METH,
39   OCTI_RT_META_CATEG_CLS_METH,
40   OCTI_RT_META_CATEG_NST_METH,
41   OCTI_RT_META_PROTO_CLS_METH,
42   OCTI_RT_META_PROTO_NST_METH,
43
44   OCTI_RT_META_CLASS_PROT,
45   OCTI_RT_META_CATEG_PROT,
46   OCTI_RT_META_PROT_REFS,
47
48   OCTI_RT_META_MSG_REFS,
49   OCTI_RT_META_SEL_REFS,
50
51   OCTI_RT_META_CLSLST_REFS,
52   OCTI_RT_META_CLASS_REF,
53   OCTI_RT_META_SUPER_REF,
54   OCTI_RT_META_CLSLST_NLZY_LAB,
55   OCTI_RT_META_CLSLST_LAB,
56   OCTI_RT_META_LAB_PROTOLIST,
57   OCTI_RT_META_LAB_NLZY_CAT,
58   OCTI_RT_META_LAB_CAT,
59
60   OCTI_RT_META_PROPERTY_LIST,
61   OCTI_RT_META_PROTOCOL_EXT,
62   OCTI_RT_META_CLASS_EXT,
63
64   OCTI_RT_META_CLASS_NAME,
65   OCTI_RT_META_METHD_NAME,
66   OCTI_RT_META_METHD_TYPE,
67   OCTI_RT_META_PROPN_ATTR,
68
69   OCTI_RT_META_MODULES,
70   OCTI_RT_META_SYMTAB,
71   OCTI_RT_META_INFO,
72
73   OCTI_RT_META_EHTYPE,
74
75   OCTI_RT_META_CONST_STR,
76
77   OCTI_RT_META_MAX
78 };
79
80 /* Tags for the META data so that the backend can put them in the correct
81    sections for targets/runtimes (Darwin/NeXT) that require this.
82    This information also survives LTO - which might produce mixed language
83    output.  */
84
85 /* Objective-C meta data attribute tag */
86 #define objc_meta       objc_rt_trees[OCTI_RT_OBJC_META]
87 /* Attribute values, base = default section. */
88 #define meta_base       objc_rt_trees[OCTI_RT_META_BASE]
89
90   /* CLASS.  */
91 #define meta_class      objc_rt_trees[OCTI_RT_META_CLASS]
92  /* METACLASS.  */
93 #define meta_metaclass  objc_rt_trees[OCTI_RT_META_METACLASS]
94   /* CLASS.  */
95 #define meta_category   objc_rt_trees[OCTI_RT_META_CATEGORY]
96   /* PROTOCOL.  */
97 #define meta_protocol   objc_rt_trees[OCTI_RT_META_PROTOCOL]
98
99  /* Class class vars section.  */
100 #define meta_clac_vars  objc_rt_trees[OCTI_RT_META_CLASS_CLS_VARS]
101  /* Class instance vars section.  */
102 #define meta_clai_vars  objc_rt_trees[OCTI_RT_META_CLASS_NST_VARS]
103  /* Class class methods section.  */
104 #define meta_clac_meth  objc_rt_trees[OCTI_RT_META_CLASS_CLS_METH]
105  /* Class instance methods section.  */
106 #define meta_clai_meth  objc_rt_trees[OCTI_RT_META_CLASS_NST_METH]
107  /* Category class methods section.  */
108 #define meta_catc_meth  objc_rt_trees[OCTI_RT_META_CATEG_CLS_METH]
109  /* Category instance methods section.  */
110 #define meta_cati_meth  objc_rt_trees[OCTI_RT_META_CATEG_NST_METH]
111 #define meta_proto_cls_meth \
112                         objc_rt_trees[OCTI_RT_META_PROTO_CLS_METH]
113 #define meta_proto_nst_meth \
114                         objc_rt_trees[OCTI_RT_META_PROTO_NST_METH]
115
116  /* Class protocols.  */
117 #define meta_clas_prot  objc_rt_trees[OCTI_RT_META_CLASS_PROT]
118  /* Category protocols.  */
119 #define meta_catg_prot  objc_rt_trees[OCTI_RT_META_CATEG_PROT]
120  /* Protocol references.  */
121 #define meta_proto_ref  objc_rt_trees[OCTI_RT_META_PROT_REFS]
122
123  /* Message refs.  */
124 #define meta_mref       objc_rt_trees[OCTI_RT_META_MSG_REFS]
125  /* Selector refs.  */
126 #define meta_sel_refs   objc_rt_trees[OCTI_RT_META_SEL_REFS]
127
128  /* Class list refs.  */
129 #define meta_class_ref  objc_rt_trees[OCTI_RT_META_CLSLST_REFS]
130 #define meta_class_reference \
131                         objc_rt_trees[OCTI_RT_META_CLASS_REF]
132 #define meta_superclass_ref \
133                         objc_rt_trees[OCTI_RT_META_SUPER_REF]
134  /* Class list Label.  */
135 #define meta_label_classlist \
136                         objc_rt_trees[OCTI_RT_META_CLSLST_LAB]
137  /* Class list Label (non lazy).  */
138 #define meta_label_nonlazy_classlist \
139                         objc_rt_trees[OCTI_RT_META_CLSLST_NLZY_LAB]
140 #define meta_label_categorylist \
141                         objc_rt_trees[OCTI_RT_META_LAB_CAT]
142 #define meta_label_nonlazy_categorylist \
143                         objc_rt_trees[OCTI_RT_META_LAB_NLZY_CAT]
144
145 #define meta_label_protocollist \
146                         objc_rt_trees[OCTI_RT_META_LAB_PROTOLIST]
147
148
149 /* V1 - property list.  */
150 #define meta_proplist   objc_rt_trees[OCTI_RT_META_PROPERTY_LIST]
151 #define meta_protocol_extension \
152                         objc_rt_trees[OCTI_RT_META_PROTOCOL_EXT]
153 #define meta_class_extension \
154                         objc_rt_trees[OCTI_RT_META_CLASS_EXT]
155  /* String sections.  */
156 #define meta_class_name objc_rt_trees[OCTI_RT_META_CLASS_NAME]
157 #define meta_meth_name  objc_rt_trees[OCTI_RT_META_METHD_NAME]
158 #define meta_meth_type  objc_rt_trees[OCTI_RT_META_METHD_TYPE]
159 #define meta_prop_name_attr \
160                         objc_rt_trees[OCTI_RT_META_PROPN_ATTR]
161
162 #define meta_modules    objc_rt_trees[OCTI_RT_META_MODULES]
163 #define meta_symtab     objc_rt_trees[OCTI_RT_META_SYMTAB]
164 #define meta_info       objc_rt_trees[OCTI_RT_META_INFO]
165
166 #define meta_ehtype     objc_rt_trees[OCTI_RT_META_EHTYPE]
167
168 #define meta_const_str  objc_rt_trees[OCTI_RT_META_CONST_STR]
169
170 #define OBJCMETA(DECL,VERS,KIND)                                        \
171   if (VERS)                                                             \
172     DECL_ATTRIBUTES (DECL) = build_tree_list ((VERS), (KIND));