File: | build/gcc/cp/name-lookup.cc |
Warning: | line 1991, column 7 Called C++ object pointer is null |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* Definitions for C++ name lookup routines. | ||||
2 | Copyright (C) 2003-2023 Free Software Foundation, Inc. | ||||
3 | Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net> | ||||
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 | #include "config.h" | ||||
22 | #define INCLUDE_MEMORY | ||||
23 | #include "system.h" | ||||
24 | #include "coretypes.h" | ||||
25 | #include "cp-tree.h" | ||||
26 | #include "timevar.h" | ||||
27 | #include "stringpool.h" | ||||
28 | #include "print-tree.h" | ||||
29 | #include "attribs.h" | ||||
30 | #include "debug.h" | ||||
31 | #include "c-family/c-pragma.h" | ||||
32 | #include "gcc-rich-location.h" | ||||
33 | #include "spellcheck-tree.h" | ||||
34 | #include "parser.h" | ||||
35 | #include "c-family/name-hint.h" | ||||
36 | #include "c-family/known-headers.h" | ||||
37 | #include "c-family/c-spellcheck.h" | ||||
38 | #include "bitmap.h" | ||||
39 | |||||
40 | static cxx_binding *cxx_binding_make (tree value, tree type); | ||||
41 | static cp_binding_level *innermost_nonclass_level (void); | ||||
42 | static void set_identifier_type_value_with_scope (tree id, tree decl, | ||||
43 | cp_binding_level *b); | ||||
44 | static name_hint maybe_suggest_missing_std_header (location_t location, | ||||
45 | tree name); | ||||
46 | static name_hint suggest_alternatives_for_1 (location_t location, tree name, | ||||
47 | bool suggest_misspellings); | ||||
48 | |||||
49 | /* Slots in BINDING_VECTOR. */ | ||||
50 | enum binding_slots | ||||
51 | { | ||||
52 | BINDING_SLOT_CURRENT, /* Slot for current TU. */ | ||||
53 | BINDING_SLOT_GLOBAL, /* Slot for merged global module. */ | ||||
54 | BINDING_SLOT_PARTITION, /* Slot for merged partition entities | ||||
55 | (optional). */ | ||||
56 | |||||
57 | /* Number of always-allocated slots. */ | ||||
58 | BINDING_SLOTS_FIXED = BINDING_SLOT_GLOBAL + 1 | ||||
59 | }; | ||||
60 | |||||
61 | /* Create an overload suitable for recording an artificial TYPE_DECL | ||||
62 | and another decl. We use this machanism to implement the struct | ||||
63 | stat hack. */ | ||||
64 | |||||
65 | #define STAT_HACK_P(N)((N) && ((enum tree_code) (N)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 65, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 65, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_4)) ((N) && TREE_CODE (N)((enum tree_code) (N)->base.code) == OVERLOAD && OVL_LOOKUP_P (N)((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 65, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 65, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_4)) | ||||
66 | #define STAT_TYPE_VISIBLE_P(N)(((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 66, __FUNCTION__, (OVERLOAD))))->base.used_flag) TREE_USED (OVERLOAD_CHECK (N))(((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 66, __FUNCTION__, (OVERLOAD))))->base.used_flag) | ||||
67 | #define STAT_TYPE(N)((contains_struct_check ((N), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 67, __FUNCTION__))->typed.type) TREE_TYPE (N)((contains_struct_check ((N), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 67, __FUNCTION__))->typed.type) | ||||
68 | #define STAT_DECL(N)(((struct tree_overload*)(tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 68, __FUNCTION__, (OVERLOAD))))->function) OVL_FUNCTION (N)(((struct tree_overload*)(tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 68, __FUNCTION__, (OVERLOAD))))->function) | ||||
69 | #define STAT_VISIBLE(N)(((struct tree_overload*)(tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 69, __FUNCTION__, (OVERLOAD))))->common.chain) OVL_CHAIN (N)(((struct tree_overload*)(tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 69, __FUNCTION__, (OVERLOAD))))->common.chain) | ||||
70 | #define MAYBE_STAT_DECL(N)(((N) && ((enum tree_code) (N)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 70, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 70, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_4)) ? (((struct tree_overload*)(tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 70, __FUNCTION__, (OVERLOAD))))->function) : N) (STAT_HACK_P (N)((N) && ((enum tree_code) (N)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 70, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 70, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_4)) ? STAT_DECL (N)(((struct tree_overload*)(tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 70, __FUNCTION__, (OVERLOAD))))->function) : N) | ||||
71 | #define MAYBE_STAT_TYPE(N)(((N) && ((enum tree_code) (N)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 71, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 71, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_4)) ? ((contains_struct_check ((N), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 71, __FUNCTION__))->typed.type) : (tree) nullptr) (STAT_HACK_P (N)((N) && ((enum tree_code) (N)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 71, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 71, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_4)) ? STAT_TYPE (N)((contains_struct_check ((N), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 71, __FUNCTION__))->typed.type) : NULL_TREE(tree) nullptr) | ||||
72 | |||||
73 | /* When a STAT_HACK_P is true, OVL_USING_P and OVL_EXPORT_P are valid | ||||
74 | and apply to the hacked type. */ | ||||
75 | |||||
76 | /* For regular (maybe) overloaded functions, we have OVL_HIDDEN_P. | ||||
77 | But we also need to indicate hiddenness on implicit type decls | ||||
78 | (injected friend classes), and (coming soon) decls injected from | ||||
79 | block-scope externs. It is too awkward to press the existing | ||||
80 | overload marking for that. If we have a hidden non-function, we | ||||
81 | always create a STAT_HACK, and use these two markers as needed. */ | ||||
82 | #define STAT_TYPE_HIDDEN_P(N)((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 82, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 82, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_2) OVL_HIDDEN_P (N)((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 82, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 82, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_2) | ||||
83 | #define STAT_DECL_HIDDEN_P(N)((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 83, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 83, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_0) OVL_DEDUP_P (N)((tree_not_check2 (((tree_check ((N), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 83, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 83, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_0) | ||||
84 | |||||
85 | /* Create a STAT_HACK node with DECL as the value binding and TYPE as | ||||
86 | the type binding. */ | ||||
87 | |||||
88 | static tree | ||||
89 | stat_hack (tree decl = NULL_TREE(tree) nullptr, tree type = NULL_TREE(tree) nullptr) | ||||
90 | { | ||||
91 | tree result = make_node (OVERLOAD); | ||||
92 | |||||
93 | /* Mark this as a lookup, so we can tell this is a stat hack. */ | ||||
94 | OVL_LOOKUP_P (result)((tree_not_check2 (((tree_check ((result), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 94, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 94, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits. lang_flag_4) = true; | ||||
95 | STAT_DECL (result)(((struct tree_overload*)(tree_check ((result), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 95, __FUNCTION__, (OVERLOAD))))->function) = decl; | ||||
96 | STAT_TYPE (result)((contains_struct_check ((result), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 96, __FUNCTION__))->typed.type) = type; | ||||
97 | return result; | ||||
98 | } | ||||
99 | |||||
100 | /* Create a local binding level for NAME. */ | ||||
101 | |||||
102 | static cxx_binding * | ||||
103 | create_local_binding (cp_binding_level *level, tree name) | ||||
104 | { | ||||
105 | cxx_binding *binding = cxx_binding_make (NULLnullptr, NULLnullptr); | ||||
106 | |||||
107 | LOCAL_BINDING_P (binding)((binding)->is_local) = true; | ||||
108 | binding->scope = level; | ||||
109 | binding->previous = IDENTIFIER_BINDING (name)(((struct lang_identifier*)(tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 109, __FUNCTION__, (IDENTIFIER_NODE))))->bindings); | ||||
110 | |||||
111 | IDENTIFIER_BINDING (name)(((struct lang_identifier*)(tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 111, __FUNCTION__, (IDENTIFIER_NODE))))->bindings) = binding; | ||||
112 | |||||
113 | return binding; | ||||
114 | } | ||||
115 | |||||
116 | /* Find the binding for NAME in namespace NS. If CREATE_P is true, | ||||
117 | make an empty binding if there wasn't one. */ | ||||
118 | |||||
119 | static tree * | ||||
120 | find_namespace_slot (tree ns, tree name, bool create_p = false) | ||||
121 | { | ||||
122 | tree *slot = DECL_NAMESPACE_BINDINGS (ns)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((ns), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 122, __FUNCTION__))->decl_common.lang_specific); if (((enum tree_code) (ns)->base.code) != NAMESPACE_DECL || lt->u .base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 122, __FUNCTION__); <->u.ns; })->bindings) | ||||
123 | ->find_slot_with_hash (name, name ? IDENTIFIER_HASH_VALUE (name)((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 123, __FUNCTION__, (IDENTIFIER_NODE)))->identifier.id.hash_value ) : 0, | ||||
124 | create_p ? INSERT : NO_INSERT); | ||||
125 | return slot; | ||||
126 | } | ||||
127 | |||||
128 | static tree | ||||
129 | find_namespace_value (tree ns, tree name) | ||||
130 | { | ||||
131 | tree *b = find_namespace_slot (ns, name); | ||||
132 | |||||
133 | return b ? MAYBE_STAT_DECL (*b)(((*b) && ((enum tree_code) (*b)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((*b), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 133, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 133, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? (((struct tree_overload*)(tree_check ((*b), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 133, __FUNCTION__, (OVERLOAD))))->function) : *b) : NULL_TREE(tree) nullptr; | ||||
134 | } | ||||
135 | |||||
136 | /* Look in *SLOT for a the binding of NAME in imported module IX. | ||||
137 | Returns pointer to binding's slot, or NULL if not found. Does a | ||||
138 | binary search, as this is mainly used for random access during | ||||
139 | importing. Do not use for the fixed slots. */ | ||||
140 | |||||
141 | static binding_slot * | ||||
142 | search_imported_binding_slot (tree *slot, unsigned ix) | ||||
143 | { | ||||
144 | gcc_assert (ix)((void)(!(ix) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 144, __FUNCTION__), 0 : 0)); | ||||
145 | |||||
146 | if (!*slot) | ||||
147 | return NULLnullptr; | ||||
148 | |||||
149 | if (TREE_CODE (*slot)((enum tree_code) (*slot)->base.code) != BINDING_VECTOR) | ||||
150 | return NULLnullptr; | ||||
151 | |||||
152 | unsigned clusters = BINDING_VECTOR_NUM_CLUSTERS (*slot)((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 152, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base); | ||||
153 | binding_cluster *cluster = BINDING_VECTOR_CLUSTER_BASE (*slot)(((tree_binding_vec *)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 153, __FUNCTION__, (BINDING_VECTOR))))->vec); | ||||
154 | |||||
155 | if (BINDING_VECTOR_SLOTS_PER_CLUSTER2 == BINDING_SLOTS_FIXED) | ||||
156 | { | ||||
157 | clusters--; | ||||
158 | cluster++; | ||||
159 | } | ||||
160 | |||||
161 | while (clusters > 1) | ||||
162 | { | ||||
163 | unsigned half = clusters / 2; | ||||
164 | gcc_checking_assert (cluster[half].indices[0].span)((void)(!(cluster[half].indices[0].span) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 164, __FUNCTION__), 0 : 0)); | ||||
165 | if (cluster[half].indices[0].base > ix) | ||||
166 | clusters = half; | ||||
167 | else | ||||
168 | { | ||||
169 | clusters -= half; | ||||
170 | cluster += half; | ||||
171 | } | ||||
172 | } | ||||
173 | |||||
174 | if (clusters) | ||||
175 | /* Is it in this cluster? */ | ||||
176 | for (unsigned off = 0; off != BINDING_VECTOR_SLOTS_PER_CLUSTER2; off++) | ||||
177 | { | ||||
178 | if (!cluster->indices[off].span) | ||||
179 | break; | ||||
180 | if (cluster->indices[off].base > ix) | ||||
181 | break; | ||||
182 | |||||
183 | if (cluster->indices[off].base + cluster->indices[off].span > ix) | ||||
184 | return &cluster->slots[off]; | ||||
185 | } | ||||
186 | |||||
187 | return NULLnullptr; | ||||
188 | } | ||||
189 | |||||
190 | static void | ||||
191 | init_global_partition (binding_cluster *cluster, tree decl) | ||||
192 | { | ||||
193 | bool named = true; | ||||
194 | |||||
195 | if (header_module_p ()) | ||||
196 | named = false; | ||||
197 | else if (TREE_PUBLIC (decl)((decl)->base.public_flag) | ||||
198 | && TREE_CODE (decl)((enum tree_code) (decl)->base.code) == NAMESPACE_DECL | ||||
199 | && !DECL_NAMESPACE_ALIAS (decl)((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 199, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 199, __FUNCTION__))->decl_common.abstract_origin)) | ||||
200 | named = false; | ||||
201 | else if (!get_originating_module (decl)) | ||||
202 | named = false; | ||||
203 | |||||
204 | binding_slot *mslot; | ||||
205 | if (named) | ||||
206 | mslot = &cluster[BINDING_SLOT_PARTITION | ||||
207 | / BINDING_VECTOR_SLOTS_PER_CLUSTER2] | ||||
208 | .slots[BINDING_SLOT_PARTITION | ||||
209 | % BINDING_VECTOR_SLOTS_PER_CLUSTER2]; | ||||
210 | else | ||||
211 | mslot = &cluster[0].slots[BINDING_SLOT_GLOBAL]; | ||||
212 | |||||
213 | if (*mslot) | ||||
214 | decl = ovl_make (decl, *mslot); | ||||
215 | *mslot = decl; | ||||
216 | |||||
217 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == CONST_DECL) | ||||
218 | { | ||||
219 | tree type = TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 219, __FUNCTION__))->typed.type); | ||||
220 | if (TREE_CODE (type)((enum tree_code) (type)->base.code) == ENUMERAL_TYPE | ||||
221 | && IDENTIFIER_ANON_P (DECL_NAME (TYPE_NAME (type)))((tree_check ((((contains_struct_check ((((tree_class_check ( (type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 221, __FUNCTION__))->type_common.name)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 221, __FUNCTION__))->decl_minimal.name)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 221, __FUNCTION__, (IDENTIFIER_NODE)))->base.private_flag ) | ||||
222 | && decl == TREE_VALUE (TYPE_VALUES (type))((tree_check ((((tree_check ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 222, __FUNCTION__, (ENUMERAL_TYPE)))->type_non_common.values )), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 222, __FUNCTION__, (TREE_LIST)))->list.value)) | ||||
223 | /* Anonymous enums are keyed by their first enumerator, put | ||||
224 | the TYPE_DECL here too. */ | ||||
225 | *mslot = ovl_make (TYPE_NAME (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 225, __FUNCTION__))->type_common.name), *mslot); | ||||
226 | } | ||||
227 | } | ||||
228 | |||||
229 | /* Get the fixed binding slot IX. Creating the vector if CREATE is | ||||
230 | non-zero. If CREATE is < 0, make sure there is at least 1 spare | ||||
231 | slot for an import. (It is an error for CREATE < 0 and the slot to | ||||
232 | already exist.) */ | ||||
233 | |||||
234 | static tree * | ||||
235 | get_fixed_binding_slot (tree *slot, tree name, unsigned ix, int create) | ||||
236 | { | ||||
237 | gcc_checking_assert (ix <= BINDING_SLOT_PARTITION)((void)(!(ix <= BINDING_SLOT_PARTITION) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 237, __FUNCTION__), 0 : 0)); | ||||
238 | |||||
239 | /* An assumption is that the fixed slots all reside in one cluster. */ | ||||
240 | gcc_checking_assert (BINDING_VECTOR_SLOTS_PER_CLUSTER >= BINDING_SLOTS_FIXED)((void)(!(2 >= BINDING_SLOTS_FIXED) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 240, __FUNCTION__), 0 : 0)); | ||||
241 | |||||
242 | if (!*slot || TREE_CODE (*slot)((enum tree_code) (*slot)->base.code) != BINDING_VECTOR) | ||||
243 | { | ||||
244 | if (ix == BINDING_SLOT_CURRENT) | ||||
245 | /* The current TU can just use slot directly. */ | ||||
246 | return slot; | ||||
247 | |||||
248 | if (!create) | ||||
249 | return NULLnullptr; | ||||
250 | |||||
251 | /* The partition slot is only needed when we're a named | ||||
252 | module. */ | ||||
253 | bool partition_slot = named_module_p (); | ||||
254 | unsigned want = ((BINDING_SLOTS_FIXED + partition_slot + (create < 0) | ||||
255 | + BINDING_VECTOR_SLOTS_PER_CLUSTER2 - 1) | ||||
256 | / BINDING_VECTOR_SLOTS_PER_CLUSTER2); | ||||
257 | tree new_vec = make_binding_vec (name, want); | ||||
258 | BINDING_VECTOR_NUM_CLUSTERS (new_vec)((tree_check ((new_vec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 258, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base) = want; | ||||
259 | binding_cluster *cluster = BINDING_VECTOR_CLUSTER_BASE (new_vec)(((tree_binding_vec *)(tree_check ((new_vec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 259, __FUNCTION__, (BINDING_VECTOR))))->vec); | ||||
260 | |||||
261 | /* Initialize the fixed slots. */ | ||||
262 | for (unsigned jx = BINDING_SLOTS_FIXED; jx--;) | ||||
263 | { | ||||
264 | cluster[0].indices[jx].base = 0; | ||||
265 | cluster[0].indices[jx].span = 1; | ||||
266 | cluster[0].slots[jx] = NULL_TREE(tree) nullptr; | ||||
267 | } | ||||
268 | |||||
269 | if (partition_slot) | ||||
270 | { | ||||
271 | unsigned off = BINDING_SLOT_PARTITION % BINDING_VECTOR_SLOTS_PER_CLUSTER2; | ||||
272 | unsigned ind = BINDING_SLOT_PARTITION / BINDING_VECTOR_SLOTS_PER_CLUSTER2; | ||||
273 | cluster[ind].indices[off].base = 0; | ||||
274 | cluster[ind].indices[off].span = 1; | ||||
275 | cluster[ind].slots[off] = NULL_TREE(tree) nullptr; | ||||
276 | } | ||||
277 | |||||
278 | if (tree orig = *slot) | ||||
279 | { | ||||
280 | /* Propagate existing value to current slot. */ | ||||
281 | |||||
282 | /* Propagate global & module entities to the global and | ||||
283 | partition slots. */ | ||||
284 | if (tree type = MAYBE_STAT_TYPE (orig)(((orig) && ((enum tree_code) (orig)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((orig), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 284, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 284, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? ((contains_struct_check ((orig), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 284, __FUNCTION__))->typed.type) : (tree) nullptr)) | ||||
285 | init_global_partition (cluster, type); | ||||
286 | |||||
287 | for (ovl_iterator iter (MAYBE_STAT_DECL (orig)(((orig) && ((enum tree_code) (orig)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((orig), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 287, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 287, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? (((struct tree_overload*)(tree_check ((orig) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 287, __FUNCTION__, (OVERLOAD))))->function) : orig)); iter; ++iter) | ||||
288 | { | ||||
289 | tree decl = *iter; | ||||
290 | |||||
291 | /* Internal linkage entities are in deduplicateable. */ | ||||
292 | init_global_partition (cluster, decl); | ||||
293 | } | ||||
294 | |||||
295 | if (cluster[0].slots[BINDING_SLOT_GLOBAL] | ||||
296 | && !(TREE_CODE (orig)((enum tree_code) (orig)->base.code) == NAMESPACE_DECL | ||||
297 | && !DECL_NAMESPACE_ALIAS (orig)((contains_struct_check (((tree_check ((orig), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 297, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 297, __FUNCTION__))->decl_common.abstract_origin))) | ||||
298 | { | ||||
299 | /* Note that we had some GMF entries. */ | ||||
300 | if (!STAT_HACK_P (orig)((orig) && ((enum tree_code) (orig)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((orig), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 300, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 300, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
301 | orig = stat_hack (orig); | ||||
302 | |||||
303 | MODULE_BINDING_GLOBAL_P (orig)((tree_check ((orig), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 303, __FUNCTION__, (OVERLOAD)))->base.static_flag) = true; | ||||
304 | } | ||||
305 | |||||
306 | cluster[0].slots[BINDING_SLOT_CURRENT] = orig; | ||||
307 | } | ||||
308 | |||||
309 | *slot = new_vec; | ||||
310 | } | ||||
311 | else | ||||
312 | gcc_checking_assert (create >= 0)((void)(!(create >= 0) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 312, __FUNCTION__), 0 : 0)); | ||||
313 | |||||
314 | unsigned off = ix % BINDING_VECTOR_SLOTS_PER_CLUSTER2; | ||||
315 | binding_cluster &cluster | ||||
316 | = BINDING_VECTOR_CLUSTER (*slot, ix / BINDING_VECTOR_SLOTS_PER_CLUSTER)(((tree_binding_vec *)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 316, __FUNCTION__, (BINDING_VECTOR))))->vec[ix / 2]); | ||||
317 | |||||
318 | /* There must always be slots for these indices */ | ||||
319 | gcc_checking_assert (cluster.indices[off].span == 1((void)(!(cluster.indices[off].span == 1 && !cluster. indices[off].base && !cluster.slots[off].is_lazy ()) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 321, __FUNCTION__), 0 : 0)) | ||||
320 | && !cluster.indices[off].base((void)(!(cluster.indices[off].span == 1 && !cluster. indices[off].base && !cluster.slots[off].is_lazy ()) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 321, __FUNCTION__), 0 : 0)) | ||||
321 | && !cluster.slots[off].is_lazy ())((void)(!(cluster.indices[off].span == 1 && !cluster. indices[off].base && !cluster.slots[off].is_lazy ()) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 321, __FUNCTION__), 0 : 0)); | ||||
322 | |||||
323 | return reinterpret_cast<tree *> (&cluster.slots[off]); | ||||
324 | } | ||||
325 | |||||
326 | /* *SLOT is a namespace binding slot. Append a slot for imported | ||||
327 | module IX. */ | ||||
328 | |||||
329 | static binding_slot * | ||||
330 | append_imported_binding_slot (tree *slot, tree name, unsigned ix) | ||||
331 | { | ||||
332 | gcc_checking_assert (ix)((void)(!(ix) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 332, __FUNCTION__), 0 : 0)); | ||||
333 | |||||
334 | if (!*slot || TREE_CODE (*slot)((enum tree_code) (*slot)->base.code) != BINDING_VECTOR) | ||||
335 | /* Make an initial module vector. */ | ||||
336 | get_fixed_binding_slot (slot, name, BINDING_SLOT_GLOBAL, -1); | ||||
337 | else if (!BINDING_VECTOR_CLUSTER_LAST (*slot)(&(((tree_binding_vec *)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 337, __FUNCTION__, (BINDING_VECTOR))))->vec[((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 337, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base) - 1])) | ||||
338 | ->indices[BINDING_VECTOR_SLOTS_PER_CLUSTER2 - 1].span) | ||||
339 | /* There is space in the last cluster. */; | ||||
340 | else if (BINDING_VECTOR_NUM_CLUSTERS (*slot)((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 340, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base) | ||||
341 | != BINDING_VECTOR_ALLOC_CLUSTERS (*slot)((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 341, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .clique)) | ||||
342 | /* There is space in the vector. */ | ||||
343 | BINDING_VECTOR_NUM_CLUSTERS (*slot)((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 343, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base)++; | ||||
344 | else | ||||
345 | { | ||||
346 | /* Extend the vector. */ | ||||
347 | unsigned have = BINDING_VECTOR_NUM_CLUSTERS (*slot)((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 347, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base); | ||||
348 | unsigned want = (have * 3 + 1) / 2; | ||||
349 | |||||
350 | if (want > (unsigned short)~0) | ||||
351 | want = (unsigned short)~0; | ||||
352 | |||||
353 | tree new_vec = make_binding_vec (name, want); | ||||
354 | BINDING_VECTOR_NUM_CLUSTERS (new_vec)((tree_check ((new_vec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 354, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base) = have + 1; | ||||
355 | memcpy (BINDING_VECTOR_CLUSTER_BASE (new_vec)(((tree_binding_vec *)(tree_check ((new_vec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 355, __FUNCTION__, (BINDING_VECTOR))))->vec), | ||||
356 | BINDING_VECTOR_CLUSTER_BASE (*slot)(((tree_binding_vec *)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 356, __FUNCTION__, (BINDING_VECTOR))))->vec), | ||||
357 | have * sizeof (binding_cluster)); | ||||
358 | *slot = new_vec; | ||||
359 | } | ||||
360 | |||||
361 | binding_cluster *last = BINDING_VECTOR_CLUSTER_LAST (*slot)(&(((tree_binding_vec *)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 361, __FUNCTION__, (BINDING_VECTOR))))->vec[((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 361, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base) - 1])); | ||||
362 | for (unsigned off = 0; off != BINDING_VECTOR_SLOTS_PER_CLUSTER2; off++) | ||||
363 | if (!last->indices[off].span) | ||||
364 | { | ||||
365 | /* Fill the free slot of the cluster. */ | ||||
366 | last->indices[off].base = ix; | ||||
367 | last->indices[off].span = 1; | ||||
368 | last->slots[off] = NULL_TREE(tree) nullptr; | ||||
369 | /* Check monotonicity. */ | ||||
370 | gcc_checking_assert (last[off ? 0 : -1]((void)(!(last[off ? 0 : -1] .indices[off ? off - 1 : 2 - 1] . base < ix) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 373, __FUNCTION__), 0 : 0)) | ||||
371 | .indices[off ? off - 1((void)(!(last[off ? 0 : -1] .indices[off ? off - 1 : 2 - 1] . base < ix) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 373, __FUNCTION__), 0 : 0)) | ||||
372 | : BINDING_VECTOR_SLOTS_PER_CLUSTER - 1]((void)(!(last[off ? 0 : -1] .indices[off ? off - 1 : 2 - 1] . base < ix) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 373, __FUNCTION__), 0 : 0)) | ||||
373 | .base < ix)((void)(!(last[off ? 0 : -1] .indices[off ? off - 1 : 2 - 1] . base < ix) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 373, __FUNCTION__), 0 : 0)); | ||||
374 | return &last->slots[off]; | ||||
375 | } | ||||
376 | |||||
377 | gcc_unreachable ()(fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 377, __FUNCTION__)); | ||||
378 | } | ||||
379 | |||||
380 | /* Add DECL to the list of things declared in binding level B. */ | ||||
381 | |||||
382 | static void | ||||
383 | add_decl_to_level (cp_binding_level *b, tree decl) | ||||
384 | { | ||||
385 | gcc_assert (b->kind != sk_class)((void)(!(b->kind != sk_class) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 385, __FUNCTION__), 0 : 0)); | ||||
386 | |||||
387 | /* Make sure we don't create a circular list. xref_tag can end | ||||
388 | up pushing the same artificial decl more than once. We | ||||
389 | should have already detected that in update_binding. (This isn't a | ||||
390 | complete verification of non-circularity.) */ | ||||
391 | gcc_assert (b->names != decl)((void)(!(b->names != decl) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 391, __FUNCTION__), 0 : 0)); | ||||
392 | |||||
393 | /* We build up the list in reverse order, and reverse it later if | ||||
394 | necessary. */ | ||||
395 | TREE_CHAIN (decl)((contains_struct_check ((decl), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 395, __FUNCTION__))->common.chain) = b->names; | ||||
396 | b->names = decl; | ||||
397 | |||||
398 | /* If appropriate, add decl to separate list of statics. We include | ||||
399 | extern variables because they might turn out to be static later. | ||||
400 | It's OK for this list to contain a few false positives. */ | ||||
401 | if (b->kind == sk_namespace | ||||
402 | && ((VAR_P (decl)(((enum tree_code) (decl)->base.code) == VAR_DECL) && (TREE_STATIC (decl)((decl)->base.static_flag) || DECL_EXTERNAL (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 402, __FUNCTION__))->decl_common.decl_flag_1))) | ||||
403 | || (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == FUNCTION_DECL | ||||
404 | && (!TREE_PUBLIC (decl)((decl)->base.public_flag) | ||||
405 | || decl_internal_context_p (decl) | ||||
406 | || DECL_DECLARED_INLINE_P (decl)((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 406, __FUNCTION__, (FUNCTION_DECL)))->function_decl.declared_inline_flag ))))) | ||||
407 | vec_safe_push (static_decls, decl); | ||||
408 | } | ||||
409 | |||||
410 | /* Find the binding for NAME in the local binding level B. */ | ||||
411 | |||||
412 | static cxx_binding * | ||||
413 | find_local_binding (cp_binding_level *b, tree name) | ||||
414 | { | ||||
415 | if (cxx_binding *binding = IDENTIFIER_BINDING (name)(((struct lang_identifier*)(tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 415, __FUNCTION__, (IDENTIFIER_NODE))))->bindings)) | ||||
416 | for (;; b = b->level_chain) | ||||
417 | { | ||||
418 | if (binding->scope == b) | ||||
419 | return binding; | ||||
420 | |||||
421 | /* Cleanup contours are transparent to the language. */ | ||||
422 | if (b->kind != sk_cleanup) | ||||
423 | break; | ||||
424 | } | ||||
425 | return NULLnullptr; | ||||
426 | } | ||||
427 | |||||
428 | class name_lookup | ||||
429 | { | ||||
430 | public: | ||||
431 | typedef std::pair<tree, tree> using_pair; | ||||
432 | typedef auto_vec<using_pair, 16> using_queue; | ||||
433 | |||||
434 | public: | ||||
435 | tree name; /* The identifier being looked for. */ | ||||
436 | |||||
437 | /* Usually we just add things to the VALUE binding, but we record | ||||
438 | (hidden) IMPLICIT_TYPEDEFs on the type binding, which is used for | ||||
439 | using-decl resolution. */ | ||||
440 | tree value; /* A (possibly ambiguous) set of things found. */ | ||||
441 | tree type; /* A type that has been found. */ | ||||
442 | |||||
443 | LOOK_want want; /* What kind of entity we want. */ | ||||
444 | |||||
445 | bool deduping; /* Full deduping is needed because using declarations | ||||
446 | are in play. */ | ||||
447 | vec<tree, va_heap, vl_embed> *scopes; | ||||
448 | name_lookup *previous; /* Previously active lookup. */ | ||||
449 | |||||
450 | protected: | ||||
451 | /* Marked scope stack for outermost name lookup. */ | ||||
452 | static vec<tree, va_heap, vl_embed> *shared_scopes; | ||||
453 | /* Currently active lookup. */ | ||||
454 | static name_lookup *active; | ||||
455 | |||||
456 | public: | ||||
457 | name_lookup (tree n, LOOK_want w = LOOK_want::NORMAL) | ||||
458 | : name (n), value (NULL_TREE(tree) nullptr), type (NULL_TREE(tree) nullptr), | ||||
459 | want (w), | ||||
460 | deduping (false), scopes (NULLnullptr), previous (NULLnullptr) | ||||
461 | { | ||||
462 | preserve_state (); | ||||
463 | } | ||||
464 | ~name_lookup () | ||||
465 | { | ||||
466 | gcc_checking_assert (!deduping)((void)(!(!deduping) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 466, __FUNCTION__), 0 : 0)); | ||||
467 | restore_state (); | ||||
468 | } | ||||
469 | |||||
470 | private: /* Uncopyable, unmovable, unassignable. I am a rock. */ | ||||
471 | name_lookup (const name_lookup &); | ||||
472 | name_lookup &operator= (const name_lookup &); | ||||
473 | |||||
474 | public: | ||||
475 | /* Turn on or off deduping mode. */ | ||||
476 | void dedup (bool state) | ||||
477 | { | ||||
478 | if (deduping != state) | ||||
479 | { | ||||
480 | deduping = state; | ||||
481 | lookup_mark (value, state); | ||||
482 | } | ||||
483 | } | ||||
484 | |||||
485 | protected: | ||||
486 | static bool seen_p (tree scope) | ||||
487 | { | ||||
488 | return LOOKUP_SEEN_P (scope)((scope)->base.visited); | ||||
489 | } | ||||
490 | static bool found_p (tree scope) | ||||
491 | { | ||||
492 | return LOOKUP_FOUND_P (scope)((tree_not_check2 (((tree_check4 ((scope), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 492, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 492, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4); | ||||
493 | } | ||||
494 | |||||
495 | void mark_seen (tree scope); /* Mark and add to scope vector. */ | ||||
496 | static void mark_found (tree scope) | ||||
497 | { | ||||
498 | gcc_checking_assert (seen_p (scope))((void)(!(seen_p (scope)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 498, __FUNCTION__), 0 : 0)); | ||||
499 | LOOKUP_FOUND_P (scope)((tree_not_check2 (((tree_check4 ((scope), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 499, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 499, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4) = true; | ||||
500 | } | ||||
501 | bool see_and_mark (tree scope) | ||||
502 | { | ||||
503 | bool ret = seen_p (scope); | ||||
504 | if (!ret) | ||||
505 | mark_seen (scope); | ||||
506 | return ret; | ||||
507 | } | ||||
508 | bool find_and_mark (tree scope); | ||||
509 | |||||
510 | private: | ||||
511 | void preserve_state (); | ||||
512 | void restore_state (); | ||||
513 | |||||
514 | private: | ||||
515 | static tree ambiguous (tree thing, tree current); | ||||
516 | void add_overload (tree fns); | ||||
517 | void add_value (tree new_val); | ||||
518 | void add_type (tree new_type); | ||||
519 | bool process_binding (tree val_bind, tree type_bind); | ||||
520 | unsigned process_module_binding (tree val_bind, tree type_bind, unsigned); | ||||
521 | /* Look in only namespace. */ | ||||
522 | bool search_namespace_only (tree scope); | ||||
523 | /* Look in namespace and its (recursive) inlines. Ignore using | ||||
524 | directives. Return true if something found (inc dups). */ | ||||
525 | bool search_namespace (tree scope); | ||||
526 | /* Look in the using directives of namespace + inlines using | ||||
527 | qualified lookup rules. */ | ||||
528 | bool search_usings (tree scope); | ||||
529 | |||||
530 | private: | ||||
531 | void queue_namespace (using_queue& queue, int depth, tree scope); | ||||
532 | void queue_usings (using_queue& queue, int depth, vec<tree, va_gc> *usings); | ||||
533 | |||||
534 | private: | ||||
535 | void add_fns (tree); | ||||
536 | |||||
537 | private: | ||||
538 | void adl_expr (tree); | ||||
539 | void adl_type (tree); | ||||
540 | void adl_template_arg (tree); | ||||
541 | void adl_class (tree); | ||||
542 | void adl_enum (tree); | ||||
543 | void adl_bases (tree); | ||||
544 | void adl_class_only (tree); | ||||
545 | void adl_namespace (tree); | ||||
546 | void adl_class_fns (tree); | ||||
547 | void adl_namespace_fns (tree, bitmap); | ||||
548 | |||||
549 | public: | ||||
550 | /* Search namespace + inlines + maybe usings as qualified lookup. */ | ||||
551 | bool search_qualified (tree scope, bool usings = true); | ||||
552 | |||||
553 | /* Search namespace + inlines + usings as unqualified lookup. */ | ||||
554 | bool search_unqualified (tree scope, cp_binding_level *); | ||||
555 | |||||
556 | /* ADL lookup of ARGS. */ | ||||
557 | tree search_adl (tree fns, vec<tree, va_gc> *args); | ||||
558 | }; | ||||
559 | |||||
560 | /* Scope stack shared by all outermost lookups. This avoids us | ||||
561 | allocating and freeing on every single lookup. */ | ||||
562 | vec<tree, va_heap, vl_embed> *name_lookup::shared_scopes; | ||||
563 | |||||
564 | /* Currently active lookup. */ | ||||
565 | name_lookup *name_lookup::active; | ||||
566 | |||||
567 | /* Name lookup is recursive, becase ADL can cause template | ||||
568 | instatiation. This is of course a rare event, so we optimize for | ||||
569 | it not happening. When we discover an active name-lookup, which | ||||
570 | must be an ADL lookup, we need to unmark the marked scopes and also | ||||
571 | unmark the lookup we might have been accumulating. */ | ||||
572 | |||||
573 | void | ||||
574 | name_lookup::preserve_state () | ||||
575 | { | ||||
576 | previous = active; | ||||
577 | if (previous) | ||||
578 | { | ||||
579 | unsigned length = vec_safe_length (previous->scopes); | ||||
580 | vec_safe_reserve (previous->scopes, length * 2); | ||||
581 | for (unsigned ix = length; ix--;) | ||||
582 | { | ||||
583 | tree decl = (*previous->scopes)[ix]; | ||||
584 | |||||
585 | gcc_checking_assert (LOOKUP_SEEN_P (decl))((void)(!(((decl)->base.visited)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 585, __FUNCTION__), 0 : 0)); | ||||
586 | LOOKUP_SEEN_P (decl)((decl)->base.visited) = false; | ||||
587 | |||||
588 | /* Preserve the FOUND_P state on the interrupted lookup's | ||||
589 | stack. */ | ||||
590 | if (LOOKUP_FOUND_P (decl)((tree_not_check2 (((tree_check4 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 590, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 590, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) | ||||
591 | { | ||||
592 | LOOKUP_FOUND_P (decl)((tree_not_check2 (((tree_check4 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 592, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 592, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4) = false; | ||||
593 | previous->scopes->quick_push (decl); | ||||
594 | } | ||||
595 | } | ||||
596 | |||||
597 | /* Unmark the outer partial lookup. */ | ||||
598 | if (previous->deduping) | ||||
599 | lookup_mark (previous->value, false); | ||||
600 | } | ||||
601 | else | ||||
602 | scopes = shared_scopes; | ||||
603 | active = this; | ||||
604 | } | ||||
605 | |||||
606 | /* Restore the marking state of a lookup we interrupted. */ | ||||
607 | |||||
608 | void | ||||
609 | name_lookup::restore_state () | ||||
610 | { | ||||
611 | gcc_checking_assert (!deduping)((void)(!(!deduping) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 611, __FUNCTION__), 0 : 0)); | ||||
612 | |||||
613 | /* Unmark and empty this lookup's scope stack. */ | ||||
614 | for (unsigned ix = vec_safe_length (scopes); ix--;) | ||||
615 | { | ||||
616 | tree decl = scopes->pop (); | ||||
617 | gcc_checking_assert (LOOKUP_SEEN_P (decl))((void)(!(((decl)->base.visited)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 617, __FUNCTION__), 0 : 0)); | ||||
618 | LOOKUP_SEEN_P (decl)((decl)->base.visited) = false; | ||||
619 | LOOKUP_FOUND_P (decl)((tree_not_check2 (((tree_check4 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 619, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 619, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4) = false; | ||||
620 | } | ||||
621 | |||||
622 | active = previous; | ||||
623 | if (previous) | ||||
624 | { | ||||
625 | free (scopes); | ||||
626 | |||||
627 | unsigned length = vec_safe_length (previous->scopes); | ||||
628 | for (unsigned ix = 0; ix != length; ix++) | ||||
629 | { | ||||
630 | tree decl = (*previous->scopes)[ix]; | ||||
631 | if (LOOKUP_SEEN_P (decl)((decl)->base.visited)) | ||||
632 | { | ||||
633 | /* The remainder of the scope stack must be recording | ||||
634 | FOUND_P decls, which we want to pop off. */ | ||||
635 | do | ||||
636 | { | ||||
637 | tree decl = previous->scopes->pop (); | ||||
638 | gcc_checking_assert (LOOKUP_SEEN_P (decl)((void)(!(((decl)->base.visited) && !((tree_not_check2 (((tree_check4 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 639, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 639, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 639, __FUNCTION__), 0 : 0)) | ||||
639 | && !LOOKUP_FOUND_P (decl))((void)(!(((decl)->base.visited) && !((tree_not_check2 (((tree_check4 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 639, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 639, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 639, __FUNCTION__), 0 : 0)); | ||||
640 | LOOKUP_FOUND_P (decl)((tree_not_check2 (((tree_check4 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 640, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 640, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4) = true; | ||||
641 | } | ||||
642 | while (++ix != length); | ||||
643 | break; | ||||
644 | } | ||||
645 | |||||
646 | gcc_checking_assert (!LOOKUP_FOUND_P (decl))((void)(!(!((tree_not_check2 (((tree_check4 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 646, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 646, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 646, __FUNCTION__), 0 : 0)); | ||||
647 | LOOKUP_SEEN_P (decl)((decl)->base.visited) = true; | ||||
648 | } | ||||
649 | |||||
650 | /* Remark the outer partial lookup. */ | ||||
651 | if (previous->deduping) | ||||
652 | lookup_mark (previous->value, true); | ||||
653 | } | ||||
654 | else | ||||
655 | shared_scopes = scopes; | ||||
656 | } | ||||
657 | |||||
658 | void | ||||
659 | name_lookup::mark_seen (tree scope) | ||||
660 | { | ||||
661 | gcc_checking_assert (!seen_p (scope))((void)(!(!seen_p (scope)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 661, __FUNCTION__), 0 : 0)); | ||||
662 | LOOKUP_SEEN_P (scope)((scope)->base.visited) = true; | ||||
663 | vec_safe_push (scopes, scope); | ||||
664 | } | ||||
665 | |||||
666 | bool | ||||
667 | name_lookup::find_and_mark (tree scope) | ||||
668 | { | ||||
669 | bool result = LOOKUP_FOUND_P (scope)((tree_not_check2 (((tree_check4 ((scope), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 669, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 669, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4); | ||||
670 | if (!result) | ||||
671 | { | ||||
672 | LOOKUP_FOUND_P (scope)((tree_not_check2 (((tree_check4 ((scope), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 672, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (ENUMERAL_TYPE ), (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 672, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4) = true; | ||||
673 | if (!LOOKUP_SEEN_P (scope)((scope)->base.visited)) | ||||
674 | vec_safe_push (scopes, scope); | ||||
675 | } | ||||
676 | |||||
677 | return result; | ||||
678 | } | ||||
679 | |||||
680 | /* THING and CURRENT are ambiguous, concatenate them. */ | ||||
681 | |||||
682 | tree | ||||
683 | name_lookup::ambiguous (tree thing, tree current) | ||||
684 | { | ||||
685 | if (TREE_CODE (current)((enum tree_code) (current)->base.code) != TREE_LIST) | ||||
686 | { | ||||
687 | current = build_tree_list (NULL_TREE(tree) nullptr, current); | ||||
688 | TREE_TYPE (current)((contains_struct_check ((current), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 688, __FUNCTION__))->typed.type) = error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||
689 | } | ||||
690 | current = tree_cons (NULL_TREE(tree) nullptr, thing, current); | ||||
691 | TREE_TYPE (current)((contains_struct_check ((current), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 691, __FUNCTION__))->typed.type) = error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||
692 | |||||
693 | return current; | ||||
694 | } | ||||
695 | |||||
696 | /* FNS is a new overload set to add to the exising set. */ | ||||
697 | |||||
698 | void | ||||
699 | name_lookup::add_overload (tree fns) | ||||
700 | { | ||||
701 | if (!deduping && TREE_CODE (fns)((enum tree_code) (fns)->base.code) == OVERLOAD) | ||||
702 | { | ||||
703 | tree probe = fns; | ||||
704 | if (!bool (want & LOOK_want::HIDDEN_FRIEND)) | ||||
705 | probe = ovl_skip_hidden (probe); | ||||
706 | if (probe && TREE_CODE (probe)((enum tree_code) (probe)->base.code) == OVERLOAD | ||||
707 | && OVL_DEDUP_P (probe)((tree_not_check2 (((tree_check ((probe), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 707, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 707, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)) | ||||
708 | /* We're about to add something found by multiple paths, so need to | ||||
709 | engage deduping mode. */ | ||||
710 | dedup (true); | ||||
711 | } | ||||
712 | |||||
713 | value = lookup_maybe_add (fns, value, deduping); | ||||
714 | } | ||||
715 | |||||
716 | /* Add a NEW_VAL, a found value binding into the current value binding. */ | ||||
717 | |||||
718 | void | ||||
719 | name_lookup::add_value (tree new_val) | ||||
720 | { | ||||
721 | if (OVL_P (new_val)(((enum tree_code) (new_val)->base.code) == FUNCTION_DECL || ((enum tree_code) (new_val)->base.code) == OVERLOAD) && (!value || OVL_P (value)(((enum tree_code) (value)->base.code) == FUNCTION_DECL || ((enum tree_code) (value)->base.code) == OVERLOAD))) | ||||
722 | add_overload (new_val); | ||||
723 | else if (!value) | ||||
724 | value = new_val; | ||||
725 | else if (value == new_val) | ||||
726 | ; | ||||
727 | else if ((TREE_CODE (value)((enum tree_code) (value)->base.code) == TYPE_DECL | ||||
728 | && TREE_CODE (new_val)((enum tree_code) (new_val)->base.code) == TYPE_DECL | ||||
729 | && same_type_p (TREE_TYPE (value), TREE_TYPE (new_val))comptypes ((((contains_struct_check ((value), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 729, __FUNCTION__))->typed.type)), (((contains_struct_check ((new_val), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 729, __FUNCTION__))->typed.type)), 0))) | ||||
730 | /* Typedefs to the same type. */; | ||||
731 | else if (TREE_CODE (value)((enum tree_code) (value)->base.code) == NAMESPACE_DECL | ||||
732 | && TREE_CODE (new_val)((enum tree_code) (new_val)->base.code) == NAMESPACE_DECL | ||||
733 | && ORIGINAL_NAMESPACE (value)(((contains_struct_check (((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 733, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 733, __FUNCTION__))->decl_common.abstract_origin) ? ((contains_struct_check (((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 733, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 733, __FUNCTION__))->decl_common.abstract_origin) : (value )) == ORIGINAL_NAMESPACE (new_val)(((contains_struct_check (((tree_check ((new_val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 733, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 733, __FUNCTION__))->decl_common.abstract_origin) ? ((contains_struct_check (((tree_check ((new_val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 733, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 733, __FUNCTION__))->decl_common.abstract_origin) : (new_val ))) | ||||
734 | /* Namespace (possibly aliased) to the same namespace. Locate | ||||
735 | the namespace*/ | ||||
736 | value = ORIGINAL_NAMESPACE (value)(((contains_struct_check (((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 736, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 736, __FUNCTION__))->decl_common.abstract_origin) ? ((contains_struct_check (((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 736, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 736, __FUNCTION__))->decl_common.abstract_origin) : (value )); | ||||
737 | else | ||||
738 | { | ||||
739 | /* Disengage deduping mode. */ | ||||
740 | dedup (false); | ||||
741 | value = ambiguous (new_val, value); | ||||
742 | } | ||||
743 | } | ||||
744 | |||||
745 | /* Add a NEW_TYPE, a found type binding into the current type binding. */ | ||||
746 | |||||
747 | void | ||||
748 | name_lookup::add_type (tree new_type) | ||||
749 | { | ||||
750 | if (!type) | ||||
751 | type = new_type; | ||||
752 | else if (TREE_CODE (type)((enum tree_code) (type)->base.code) == TREE_LIST | ||||
753 | || !same_type_p (TREE_TYPE (type), TREE_TYPE (new_type))comptypes ((((contains_struct_check ((type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 753, __FUNCTION__))->typed.type)), (((contains_struct_check ((new_type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 753, __FUNCTION__))->typed.type)), 0)) | ||||
754 | type = ambiguous (new_type, type); | ||||
755 | } | ||||
756 | |||||
757 | /* Process a found binding containing NEW_VAL and NEW_TYPE. Returns | ||||
758 | true if we actually found something noteworthy. Hiddenness has | ||||
759 | already been handled in the caller. */ | ||||
760 | |||||
761 | bool | ||||
762 | name_lookup::process_binding (tree new_val, tree new_type) | ||||
763 | { | ||||
764 | /* Did we really see a type? */ | ||||
765 | if (new_type | ||||
766 | && (want & LOOK_want::TYPE_NAMESPACE) == LOOK_want::NAMESPACE) | ||||
767 | new_type = NULL_TREE(tree) nullptr; | ||||
768 | |||||
769 | /* Do we really see a value? */ | ||||
770 | if (new_val) | ||||
771 | switch (TREE_CODE (new_val)((enum tree_code) (new_val)->base.code)) | ||||
772 | { | ||||
773 | case TEMPLATE_DECL: | ||||
774 | /* If we expect types or namespaces, and not templates, | ||||
775 | or this is not a template class. */ | ||||
776 | if (bool (want & LOOK_want::TYPE_NAMESPACE) | ||||
777 | && !DECL_TYPE_TEMPLATE_P (new_val)(((enum tree_code) (new_val)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((new_val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 777, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((new_val ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 777, __FUNCTION__, (TEMPLATE_DECL))))))))->result)->base .code) == TYPE_DECL)) | ||||
778 | new_val = NULL_TREE(tree) nullptr; | ||||
779 | break; | ||||
780 | case TYPE_DECL: | ||||
781 | if ((want & LOOK_want::TYPE_NAMESPACE) == LOOK_want::NAMESPACE | ||||
782 | || (new_type && bool (want & LOOK_want::TYPE))) | ||||
783 | new_val = NULL_TREE(tree) nullptr; | ||||
784 | break; | ||||
785 | case NAMESPACE_DECL: | ||||
786 | if ((want & LOOK_want::TYPE_NAMESPACE) == LOOK_want::TYPE) | ||||
787 | new_val = NULL_TREE(tree) nullptr; | ||||
788 | break; | ||||
789 | default: | ||||
790 | if (bool (want & LOOK_want::TYPE_NAMESPACE)) | ||||
791 | new_val = NULL_TREE(tree) nullptr; | ||||
792 | } | ||||
793 | |||||
794 | if (!new_val) | ||||
795 | { | ||||
796 | new_val = new_type; | ||||
797 | new_type = NULL_TREE(tree) nullptr; | ||||
798 | } | ||||
799 | |||||
800 | /* Merge into the lookup */ | ||||
801 | if (new_val) | ||||
802 | add_value (new_val); | ||||
803 | if (new_type) | ||||
804 | add_type (new_type); | ||||
805 | |||||
806 | return new_val != NULL_TREE(tree) nullptr; | ||||
807 | } | ||||
808 | |||||
809 | /* If we're importing a module containing this binding, add it to the | ||||
810 | lookup set. The trickiness is with namespaces, we only want to | ||||
811 | find it once. */ | ||||
812 | |||||
813 | unsigned | ||||
814 | name_lookup::process_module_binding (tree new_val, tree new_type, | ||||
815 | unsigned marker) | ||||
816 | { | ||||
817 | /* Optimize for (re-)finding a public namespace. We only need to | ||||
818 | look once. */ | ||||
819 | if (new_val && !new_type | ||||
820 | && TREE_CODE (new_val)((enum tree_code) (new_val)->base.code) == NAMESPACE_DECL | ||||
821 | && TREE_PUBLIC (new_val)((new_val)->base.public_flag) | ||||
822 | && !DECL_NAMESPACE_ALIAS (new_val)((contains_struct_check (((tree_check ((new_val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 822, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 822, __FUNCTION__))->decl_common.abstract_origin)) | ||||
823 | { | ||||
824 | if (marker & 2) | ||||
825 | return marker; | ||||
826 | marker |= 2; | ||||
827 | } | ||||
828 | |||||
829 | if (new_type || new_val) | ||||
830 | marker |= process_binding (new_val, new_type); | ||||
831 | |||||
832 | return marker; | ||||
833 | } | ||||
834 | |||||
835 | /* Look in exactly namespace SCOPE. */ | ||||
836 | |||||
837 | bool | ||||
838 | name_lookup::search_namespace_only (tree scope) | ||||
839 | { | ||||
840 | bool found = false; | ||||
841 | if (tree *binding = find_namespace_slot (scope, name)) | ||||
842 | { | ||||
843 | tree val = *binding; | ||||
844 | if (TREE_CODE (val)((enum tree_code) (val)->base.code) == BINDING_VECTOR) | ||||
845 | { | ||||
846 | /* I presume the binding list is going to be sparser than | ||||
847 | the import bitmap. Hence iterate over the former | ||||
848 | checking for bits set in the bitmap. */ | ||||
849 | bitmap imports = get_import_bitmap (); | ||||
850 | binding_cluster *cluster = BINDING_VECTOR_CLUSTER_BASE (val)(((tree_binding_vec *)(tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 850, __FUNCTION__, (BINDING_VECTOR))))->vec); | ||||
851 | int marker = 0; | ||||
852 | int dup_detect = 0; | ||||
853 | |||||
854 | if (tree bind = cluster->slots[BINDING_SLOT_CURRENT]) | ||||
855 | { | ||||
856 | if (!deduping) | ||||
857 | { | ||||
858 | if (named_module_purview_p ()) | ||||
859 | { | ||||
860 | dup_detect |= 2; | ||||
861 | |||||
862 | if (STAT_HACK_P (bind)((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 862, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 862, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) && MODULE_BINDING_GLOBAL_P (bind)((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 862, __FUNCTION__, (OVERLOAD)))->base.static_flag)) | ||||
863 | dup_detect |= 1; | ||||
864 | } | ||||
865 | else | ||||
866 | dup_detect |= 1; | ||||
867 | } | ||||
868 | tree type = NULL_TREE(tree) nullptr; | ||||
869 | tree value = bind; | ||||
870 | |||||
871 | if (STAT_HACK_P (bind)((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 871, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 871, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
872 | { | ||||
873 | type = STAT_TYPE (bind)((contains_struct_check ((bind), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 873, __FUNCTION__))->typed.type); | ||||
874 | value = STAT_DECL (bind)(((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 874, __FUNCTION__, (OVERLOAD))))->function); | ||||
875 | |||||
876 | if (!bool (want & LOOK_want::HIDDEN_FRIEND)) | ||||
877 | { | ||||
878 | if (STAT_TYPE_HIDDEN_P (bind)((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 878, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 878, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) | ||||
879 | type = NULL_TREE(tree) nullptr; | ||||
880 | if (STAT_DECL_HIDDEN_P (bind)((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 880, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 880, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)) | ||||
881 | value = NULL_TREE(tree) nullptr; | ||||
882 | else | ||||
883 | value = ovl_skip_hidden (value); | ||||
884 | } | ||||
885 | } | ||||
886 | else if (!bool (want & LOOK_want::HIDDEN_FRIEND)) | ||||
887 | value = ovl_skip_hidden (value); | ||||
888 | |||||
889 | marker = process_module_binding (value, type, marker); | ||||
890 | } | ||||
891 | |||||
892 | /* Scan the imported bindings. */ | ||||
893 | unsigned ix = BINDING_VECTOR_NUM_CLUSTERS (val)((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 893, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base); | ||||
894 | if (BINDING_VECTOR_SLOTS_PER_CLUSTER2 == BINDING_SLOTS_FIXED) | ||||
895 | { | ||||
896 | ix--; | ||||
897 | cluster++; | ||||
898 | } | ||||
899 | |||||
900 | /* Do this in forward order, so we load modules in an order | ||||
901 | the user expects. */ | ||||
902 | for (; ix--; cluster++) | ||||
903 | for (unsigned jx = 0; jx != BINDING_VECTOR_SLOTS_PER_CLUSTER2; jx++) | ||||
904 | { | ||||
905 | /* Are we importing this module? */ | ||||
906 | if (unsigned base = cluster->indices[jx].base) | ||||
907 | if (unsigned span = cluster->indices[jx].span) | ||||
908 | do | ||||
909 | if (bitmap_bit_p (imports, base)) | ||||
910 | goto found; | ||||
911 | while (++base, --span); | ||||
912 | continue; | ||||
913 | |||||
914 | found:; | ||||
915 | /* Is it loaded? */ | ||||
916 | if (cluster->slots[jx].is_lazy ()) | ||||
917 | { | ||||
918 | gcc_assert (cluster->indices[jx].span == 1)((void)(!(cluster->indices[jx].span == 1) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 918, __FUNCTION__), 0 : 0)); | ||||
919 | lazy_load_binding (cluster->indices[jx].base, | ||||
920 | scope, name, &cluster->slots[jx]); | ||||
921 | } | ||||
922 | tree bind = cluster->slots[jx]; | ||||
923 | if (!bind) | ||||
924 | /* Load errors could mean there's nothing here. */ | ||||
925 | continue; | ||||
926 | |||||
927 | /* Extract what we can see from here. If there's no | ||||
928 | stat_hack, then everything was exported. */ | ||||
929 | tree type = NULL_TREE(tree) nullptr; | ||||
930 | |||||
931 | |||||
932 | /* If STAT_HACK_P is false, everything is visible, and | ||||
933 | there's no duplication possibilities. */ | ||||
934 | if (STAT_HACK_P (bind)((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 934, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 934, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
935 | { | ||||
936 | if (!deduping) | ||||
937 | { | ||||
938 | /* Do we need to engage deduplication? */ | ||||
939 | int dup = 0; | ||||
940 | if (MODULE_BINDING_GLOBAL_P (bind)((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 940, __FUNCTION__, (OVERLOAD)))->base.static_flag)) | ||||
941 | dup = 1; | ||||
942 | else if (MODULE_BINDING_PARTITION_P (bind)((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 942, __FUNCTION__, (OVERLOAD)))->base.volatile_flag)) | ||||
943 | dup = 2; | ||||
944 | if (unsigned hit = dup_detect & dup) | ||||
945 | { | ||||
946 | if ((hit & 1 && BINDING_VECTOR_GLOBAL_DUPS_P (val)((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 946, __FUNCTION__, (BINDING_VECTOR)))->base.static_flag)) | ||||
947 | || (hit & 2 | ||||
948 | && BINDING_VECTOR_PARTITION_DUPS_P (val)((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 948, __FUNCTION__, (BINDING_VECTOR)))->base.volatile_flag ))) | ||||
949 | dedup (true); | ||||
950 | } | ||||
951 | dup_detect |= dup; | ||||
952 | } | ||||
953 | |||||
954 | if (STAT_TYPE_VISIBLE_P (bind)(((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 954, __FUNCTION__, (OVERLOAD))))->base.used_flag)) | ||||
955 | type = STAT_TYPE (bind)((contains_struct_check ((bind), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 955, __FUNCTION__))->typed.type); | ||||
956 | bind = STAT_VISIBLE (bind)(((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 956, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
957 | } | ||||
958 | |||||
959 | /* And process it. */ | ||||
960 | marker = process_module_binding (bind, type, marker); | ||||
961 | } | ||||
962 | found |= marker & 1; | ||||
963 | } | ||||
964 | else | ||||
965 | { | ||||
966 | /* Only a current module binding, visible from the current module. */ | ||||
967 | tree bind = *binding; | ||||
968 | tree value = bind, type = NULL_TREE(tree) nullptr; | ||||
969 | |||||
970 | if (STAT_HACK_P (bind)((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 970, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 970, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
971 | { | ||||
972 | type = STAT_TYPE (bind)((contains_struct_check ((bind), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 972, __FUNCTION__))->typed.type); | ||||
973 | value = STAT_DECL (bind)(((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 973, __FUNCTION__, (OVERLOAD))))->function); | ||||
974 | |||||
975 | if (!bool (want & LOOK_want::HIDDEN_FRIEND)) | ||||
976 | { | ||||
977 | if (STAT_TYPE_HIDDEN_P (bind)((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 977, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 977, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) | ||||
978 | type = NULL_TREE(tree) nullptr; | ||||
979 | if (STAT_DECL_HIDDEN_P (bind)((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 979, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 979, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)) | ||||
980 | value = NULL_TREE(tree) nullptr; | ||||
981 | else | ||||
982 | value = ovl_skip_hidden (value); | ||||
983 | } | ||||
984 | } | ||||
985 | else if (!bool (want & LOOK_want::HIDDEN_FRIEND)) | ||||
986 | value = ovl_skip_hidden (value); | ||||
987 | |||||
988 | found |= process_binding (value, type); | ||||
989 | } | ||||
990 | } | ||||
991 | |||||
992 | return found; | ||||
993 | } | ||||
994 | |||||
995 | /* Conditionally look in namespace SCOPE and inline children. */ | ||||
996 | |||||
997 | bool | ||||
998 | name_lookup::search_namespace (tree scope) | ||||
999 | { | ||||
1000 | if (see_and_mark (scope)) | ||||
1001 | /* We've visited this scope before. Return what we found then. */ | ||||
1002 | return found_p (scope); | ||||
1003 | |||||
1004 | /* Look in exactly namespace. */ | ||||
1005 | bool found = search_namespace_only (scope); | ||||
1006 | |||||
1007 | /* Don't look into inline children, if we're looking for an | ||||
1008 | anonymous name -- it must be in the current scope, if anywhere. */ | ||||
1009 | if (name) | ||||
1010 | /* Recursively look in its inline children. */ | ||||
1011 | if (vec<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((scope), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1011, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (scope)->base.code) != NAMESPACE_DECL || lt ->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1011, __FUNCTION__); <->u.ns; })->inlinees)) | ||||
1012 | for (unsigned ix = inlinees->length (); ix--;) | ||||
1013 | found |= search_namespace ((*inlinees)[ix]); | ||||
1014 | |||||
1015 | if (found) | ||||
1016 | mark_found (scope); | ||||
1017 | |||||
1018 | return found; | ||||
1019 | } | ||||
1020 | |||||
1021 | /* Recursively follow using directives of SCOPE & its inline children. | ||||
1022 | Such following is essentially a flood-fill algorithm. */ | ||||
1023 | |||||
1024 | bool | ||||
1025 | name_lookup::search_usings (tree scope) | ||||
1026 | { | ||||
1027 | /* We do not check seen_p here, as that was already set during the | ||||
1028 | namespace_only walk. */ | ||||
1029 | if (found_p (scope)) | ||||
1030 | return true; | ||||
1031 | |||||
1032 | bool found = false; | ||||
1033 | if (vec<tree, va_gc> *usings = NAMESPACE_LEVEL (scope)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((scope), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1033, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (scope)->base.code) != NAMESPACE_DECL || lt ->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1033, __FUNCTION__); <->u.ns; })->level)->using_directives) | ||||
1034 | for (unsigned ix = usings->length (); ix--;) | ||||
1035 | found |= search_qualified ((*usings)[ix], true); | ||||
1036 | |||||
1037 | /* Look in its inline children. */ | ||||
1038 | if (vec<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((scope), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1038, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (scope)->base.code) != NAMESPACE_DECL || lt ->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1038, __FUNCTION__); <->u.ns; })->inlinees)) | ||||
1039 | for (unsigned ix = inlinees->length (); ix--;) | ||||
1040 | found |= search_usings ((*inlinees)[ix]); | ||||
1041 | |||||
1042 | if (found) | ||||
1043 | mark_found (scope); | ||||
1044 | |||||
1045 | return found; | ||||
1046 | } | ||||
1047 | |||||
1048 | /* Qualified namespace lookup in SCOPE. | ||||
1049 | 1) Look in SCOPE (+inlines). If found, we're done. | ||||
1050 | 2) Otherwise, if USINGS is true, | ||||
1051 | recurse for every using directive of SCOPE (+inlines). | ||||
1052 | |||||
1053 | Trickiness is (a) loops and (b) multiple paths to same namespace. | ||||
1054 | In both cases we want to not repeat any lookups, and know whether | ||||
1055 | to stop the caller's step #2. Do this via the FOUND_P marker. */ | ||||
1056 | |||||
1057 | bool | ||||
1058 | name_lookup::search_qualified (tree scope, bool usings) | ||||
1059 | { | ||||
1060 | bool found = false; | ||||
1061 | |||||
1062 | if (seen_p (scope)) | ||||
1063 | found = found_p (scope); | ||||
1064 | else | ||||
1065 | { | ||||
1066 | found = search_namespace (scope); | ||||
1067 | if (!found && usings) | ||||
1068 | found = search_usings (scope); | ||||
1069 | } | ||||
1070 | |||||
1071 | dedup (false); | ||||
1072 | |||||
1073 | return found; | ||||
1074 | } | ||||
1075 | |||||
1076 | /* Add SCOPE to the unqualified search queue, recursively add its | ||||
1077 | inlines and those via using directives. */ | ||||
1078 | |||||
1079 | void | ||||
1080 | name_lookup::queue_namespace (using_queue& queue, int depth, tree scope) | ||||
1081 | { | ||||
1082 | if (see_and_mark (scope)) | ||||
1083 | return; | ||||
1084 | |||||
1085 | /* Record it. */ | ||||
1086 | tree common = scope; | ||||
1087 | while (SCOPE_DEPTH (common)((tree_check ((common), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1087, __FUNCTION__, (NAMESPACE_DECL)))->base.u.bits.address_space ) > depth) | ||||
1088 | common = CP_DECL_CONTEXT (common)(!(! (((contains_struct_check ((common), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1088, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((common), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1088, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((common ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1088, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]); | ||||
1089 | queue.safe_push (using_pair (common, scope)); | ||||
1090 | |||||
1091 | /* Queue its inline children. */ | ||||
1092 | if (vec<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((scope), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1092, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (scope)->base.code) != NAMESPACE_DECL || lt ->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1092, __FUNCTION__); <->u.ns; })->inlinees)) | ||||
1093 | for (unsigned ix = inlinees->length (); ix--;) | ||||
1094 | queue_namespace (queue, depth, (*inlinees)[ix]); | ||||
1095 | |||||
1096 | /* Queue its using targets. */ | ||||
1097 | queue_usings (queue, depth, NAMESPACE_LEVEL (scope)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((scope), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1097, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (scope)->base.code) != NAMESPACE_DECL || lt ->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1097, __FUNCTION__); <->u.ns; })->level)->using_directives); | ||||
1098 | } | ||||
1099 | |||||
1100 | /* Add the namespaces in USINGS to the unqualified search queue. */ | ||||
1101 | |||||
1102 | void | ||||
1103 | name_lookup::queue_usings (using_queue& queue, int depth, vec<tree, va_gc> *usings) | ||||
1104 | { | ||||
1105 | if (usings) | ||||
1106 | for (unsigned ix = usings->length (); ix--;) | ||||
1107 | queue_namespace (queue, depth, (*usings)[ix]); | ||||
1108 | } | ||||
1109 | |||||
1110 | /* Unqualified namespace lookup in SCOPE. | ||||
1111 | 1) add scope+inlins to worklist. | ||||
1112 | 2) recursively add target of every using directive | ||||
1113 | 3) for each worklist item where SCOPE is common ancestor, search it | ||||
1114 | 4) if nothing find, scope=parent, goto 1. */ | ||||
1115 | |||||
1116 | bool | ||||
1117 | name_lookup::search_unqualified (tree scope, cp_binding_level *level) | ||||
1118 | { | ||||
1119 | using_queue queue; | ||||
1120 | bool found = false; | ||||
1121 | |||||
1122 | /* Queue local using-directives. */ | ||||
1123 | for (; level->kind != sk_namespace; level = level->level_chain) | ||||
1124 | queue_usings (queue, SCOPE_DEPTH (scope)((tree_check ((scope), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1124, __FUNCTION__, (NAMESPACE_DECL)))->base.u.bits.address_space ), level->using_directives); | ||||
1125 | |||||
1126 | for (; !found; scope = CP_DECL_CONTEXT (scope)(!(! (((contains_struct_check ((scope), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1126, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((scope), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1126, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((scope ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1126, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])) | ||||
1127 | { | ||||
1128 | gcc_assert (!DECL_NAMESPACE_ALIAS (scope))((void)(!(!((contains_struct_check (((tree_check ((scope), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1128, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1128, __FUNCTION__))->decl_common.abstract_origin)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1128, __FUNCTION__), 0 : 0)); | ||||
1129 | int depth = SCOPE_DEPTH (scope)((tree_check ((scope), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1129, __FUNCTION__, (NAMESPACE_DECL)))->base.u.bits.address_space ); | ||||
1130 | |||||
1131 | /* Queue namespaces reachable from SCOPE. */ | ||||
1132 | queue_namespace (queue, depth, scope); | ||||
1133 | |||||
1134 | /* Search every queued namespace where SCOPE is the common | ||||
1135 | ancestor. Adjust the others. */ | ||||
1136 | unsigned ix = 0; | ||||
1137 | do | ||||
1138 | { | ||||
1139 | using_pair &pair = queue[ix]; | ||||
1140 | while (pair.first == scope) | ||||
1141 | { | ||||
1142 | found |= search_namespace_only (pair.second); | ||||
1143 | pair = queue.pop (); | ||||
1144 | if (ix == queue.length ()) | ||||
1145 | goto done; | ||||
1146 | } | ||||
1147 | /* The depth is the same as SCOPE, find the parent scope. */ | ||||
1148 | if (SCOPE_DEPTH (pair.first)((tree_check ((pair.first), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1148, __FUNCTION__, (NAMESPACE_DECL)))->base.u.bits.address_space ) == depth) | ||||
1149 | pair.first = CP_DECL_CONTEXT (pair.first)(!(! (((contains_struct_check ((pair.first), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((pair.first), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((pair. first), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]); | ||||
1150 | ix++; | ||||
1151 | } | ||||
1152 | while (ix < queue.length ()); | ||||
1153 | done:; | ||||
1154 | if (scope == global_namespacecp_global_trees[CPTI_GLOBAL]) | ||||
1155 | break; | ||||
1156 | |||||
1157 | /* If looking for hidden friends, we only look in the innermost | ||||
1158 | namespace scope. [namespace.memdef]/3 If a friend | ||||
1159 | declaration in a non-local class first declares a class, | ||||
1160 | function, class template or function template the friend is a | ||||
1161 | member of the innermost enclosing namespace. See also | ||||
1162 | [basic.lookup.unqual]/7 */ | ||||
1163 | if (bool (want & LOOK_want::HIDDEN_FRIEND)) | ||||
1164 | break; | ||||
1165 | } | ||||
1166 | |||||
1167 | dedup (false); | ||||
1168 | |||||
1169 | return found; | ||||
1170 | } | ||||
1171 | |||||
1172 | /* FNS is a value binding. If it is a (set of overloaded) functions, | ||||
1173 | add them into the current value. */ | ||||
1174 | |||||
1175 | void | ||||
1176 | name_lookup::add_fns (tree fns) | ||||
1177 | { | ||||
1178 | if (!fns) | ||||
1179 | return; | ||||
1180 | else if (TREE_CODE (fns)((enum tree_code) (fns)->base.code) == OVERLOAD) | ||||
1181 | { | ||||
1182 | if (TREE_TYPE (fns)((contains_struct_check ((fns), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1182, __FUNCTION__))->typed.type) != unknown_type_nodecp_global_trees[CPTI_UNKNOWN_TYPE]) | ||||
1183 | fns = OVL_FUNCTION (fns)(((struct tree_overload*)(tree_check ((fns), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1183, __FUNCTION__, (OVERLOAD))))->function); | ||||
1184 | } | ||||
1185 | else if (!DECL_DECLARES_FUNCTION_P (fns)(((enum tree_code) (fns)->base.code) == FUNCTION_DECL || ( ((enum tree_code) (fns)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((fns), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1185, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((fns) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1185, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL))) | ||||
1186 | return; | ||||
1187 | |||||
1188 | add_overload (fns); | ||||
1189 | } | ||||
1190 | |||||
1191 | /* Add the overloaded fns of SCOPE. */ | ||||
1192 | |||||
1193 | void | ||||
1194 | name_lookup::adl_namespace_fns (tree scope, bitmap imports) | ||||
1195 | { | ||||
1196 | if (tree *binding = find_namespace_slot (scope, name)) | ||||
1197 | { | ||||
1198 | tree val = *binding; | ||||
1199 | if (TREE_CODE (val)((enum tree_code) (val)->base.code) != BINDING_VECTOR) | ||||
1200 | add_fns (ovl_skip_hidden (MAYBE_STAT_DECL (val)(((val) && ((enum tree_code) (val)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1200, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1200, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? (((struct tree_overload*)(tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1200, __FUNCTION__, (OVERLOAD))))->function) : val))); | ||||
1201 | else | ||||
1202 | { | ||||
1203 | /* I presume the binding list is going to be sparser than | ||||
1204 | the import bitmap. Hence iterate over the former | ||||
1205 | checking for bits set in the bitmap. */ | ||||
1206 | binding_cluster *cluster = BINDING_VECTOR_CLUSTER_BASE (val)(((tree_binding_vec *)(tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1206, __FUNCTION__, (BINDING_VECTOR))))->vec); | ||||
1207 | int dup_detect = 0; | ||||
1208 | |||||
1209 | if (tree bind = cluster->slots[BINDING_SLOT_CURRENT]) | ||||
1210 | { | ||||
1211 | /* The current TU's bindings must be visible, we don't | ||||
1212 | need to check the bitmaps. */ | ||||
1213 | |||||
1214 | if (!deduping) | ||||
1215 | { | ||||
1216 | if (named_module_purview_p ()) | ||||
1217 | { | ||||
1218 | dup_detect |= 2; | ||||
1219 | |||||
1220 | if (STAT_HACK_P (bind)((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1220, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1220, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) && MODULE_BINDING_GLOBAL_P (bind)((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1220, __FUNCTION__, (OVERLOAD)))->base.static_flag)) | ||||
1221 | dup_detect |= 1; | ||||
1222 | } | ||||
1223 | else | ||||
1224 | dup_detect |= 1; | ||||
1225 | } | ||||
1226 | |||||
1227 | add_fns (ovl_skip_hidden (MAYBE_STAT_DECL (bind)(((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1227, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1227, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? (((struct tree_overload*)(tree_check ((bind) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1227, __FUNCTION__, (OVERLOAD))))->function) : bind))); | ||||
1228 | } | ||||
1229 | |||||
1230 | /* Scan the imported bindings. */ | ||||
1231 | unsigned ix = BINDING_VECTOR_NUM_CLUSTERS (val)((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1231, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base); | ||||
1232 | if (BINDING_VECTOR_SLOTS_PER_CLUSTER2 == BINDING_SLOTS_FIXED) | ||||
1233 | { | ||||
1234 | ix--; | ||||
1235 | cluster++; | ||||
1236 | } | ||||
1237 | |||||
1238 | /* Do this in forward order, so we load modules in an order | ||||
1239 | the user expects. */ | ||||
1240 | for (; ix--; cluster++) | ||||
1241 | for (unsigned jx = 0; jx != BINDING_VECTOR_SLOTS_PER_CLUSTER2; jx++) | ||||
1242 | { | ||||
1243 | /* Functions are never on merged slots. */ | ||||
1244 | if (!cluster->indices[jx].base | ||||
1245 | || cluster->indices[jx].span != 1) | ||||
1246 | continue; | ||||
1247 | |||||
1248 | /* Is this slot visible? */ | ||||
1249 | if (!bitmap_bit_p (imports, cluster->indices[jx].base)) | ||||
1250 | continue; | ||||
1251 | |||||
1252 | /* Is it loaded. */ | ||||
1253 | if (cluster->slots[jx].is_lazy ()) | ||||
1254 | lazy_load_binding (cluster->indices[jx].base, | ||||
1255 | scope, name, &cluster->slots[jx]); | ||||
1256 | |||||
1257 | tree bind = cluster->slots[jx]; | ||||
1258 | if (!bind) | ||||
1259 | /* Load errors could mean there's nothing here. */ | ||||
1260 | continue; | ||||
1261 | |||||
1262 | if (STAT_HACK_P (bind)((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1262, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1262, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
1263 | { | ||||
1264 | if (!deduping) | ||||
1265 | { | ||||
1266 | /* Do we need to engage deduplication? */ | ||||
1267 | int dup = 0; | ||||
1268 | if (MODULE_BINDING_GLOBAL_P (bind)((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1268, __FUNCTION__, (OVERLOAD)))->base.static_flag)) | ||||
1269 | dup = 1; | ||||
1270 | else if (MODULE_BINDING_PARTITION_P (bind)((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1270, __FUNCTION__, (OVERLOAD)))->base.volatile_flag)) | ||||
1271 | dup = 2; | ||||
1272 | if (unsigned hit = dup_detect & dup) | ||||
1273 | if ((hit & 1 && BINDING_VECTOR_GLOBAL_DUPS_P (val)((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1273, __FUNCTION__, (BINDING_VECTOR)))->base.static_flag )) | ||||
1274 | || (hit & 2 | ||||
1275 | && BINDING_VECTOR_PARTITION_DUPS_P (val)((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1275, __FUNCTION__, (BINDING_VECTOR)))->base.volatile_flag ))) | ||||
1276 | dedup (true); | ||||
1277 | dup_detect |= dup; | ||||
1278 | } | ||||
1279 | |||||
1280 | bind = STAT_VISIBLE (bind)(((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1280, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
1281 | } | ||||
1282 | |||||
1283 | add_fns (bind); | ||||
1284 | } | ||||
1285 | } | ||||
1286 | } | ||||
1287 | } | ||||
1288 | |||||
1289 | /* Add the hidden friends of SCOPE. */ | ||||
1290 | |||||
1291 | void | ||||
1292 | name_lookup::adl_class_fns (tree type) | ||||
1293 | { | ||||
1294 | /* Add friends. */ | ||||
1295 | for (tree list = DECL_FRIENDLIST (TYPE_MAIN_DECL (type))(((contains_struct_check ((((((contains_struct_check (((tree_class_check ((((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1295, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1295, __FUNCTION__))), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1295, __FUNCTION__))->common.chain)))), (TS_DECL_COMMON) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1295, __FUNCTION__))->decl_common.initial)); | ||||
1296 | list; list = TREE_CHAIN (list)((contains_struct_check ((list), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1296, __FUNCTION__))->common.chain)) | ||||
1297 | if (name == FRIEND_NAME (list)(((tree_check ((list), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1297, __FUNCTION__, (TREE_LIST)))->list.purpose))) | ||||
1298 | { | ||||
1299 | tree context = NULL_TREE(tree) nullptr; /* Lazily computed. */ | ||||
1300 | for (tree friends = FRIEND_DECLS (list)(((tree_check ((list), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1300, __FUNCTION__, (TREE_LIST)))->list.value)); friends; | ||||
1301 | friends = TREE_CHAIN (friends)((contains_struct_check ((friends), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1301, __FUNCTION__))->common.chain)) | ||||
1302 | { | ||||
1303 | tree fn = TREE_VALUE (friends)((tree_check ((friends), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1303, __FUNCTION__, (TREE_LIST)))->list.value); | ||||
1304 | |||||
1305 | /* Only interested in global functions with potentially hidden | ||||
1306 | (i.e. unqualified) declarations. */ | ||||
1307 | if (!context) | ||||
1308 | context = decl_namespace_context (type); | ||||
1309 | if (CP_DECL_CONTEXT (fn)(!(! (((contains_struct_check ((fn), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1309, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((fn), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1309, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((fn), ( TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1309, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]) != context) | ||||
1310 | continue; | ||||
1311 | |||||
1312 | dedup (true); | ||||
1313 | |||||
1314 | /* Template specializations are never found by name lookup. | ||||
1315 | (Templates themselves can be found, but not template | ||||
1316 | specializations.) */ | ||||
1317 | if (TREE_CODE (fn)((enum tree_code) (fn)->base.code) == FUNCTION_DECL && DECL_USE_TEMPLATE (fn)(((contains_struct_check ((fn), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1317, __FUNCTION__))->decl_common.lang_specific)->u.base .use_template)) | ||||
1318 | continue; | ||||
1319 | |||||
1320 | add_fns (fn); | ||||
1321 | } | ||||
1322 | } | ||||
1323 | } | ||||
1324 | |||||
1325 | /* Find the containing non-inlined namespace, add it and all its | ||||
1326 | inlinees. */ | ||||
1327 | |||||
1328 | void | ||||
1329 | name_lookup::adl_namespace (tree scope) | ||||
1330 | { | ||||
1331 | if (see_and_mark (scope)) | ||||
1332 | return; | ||||
1333 | |||||
1334 | /* Look down into inline namespaces. */ | ||||
1335 | if (vec<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((scope), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1335, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (scope)->base.code) != NAMESPACE_DECL || lt ->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1335, __FUNCTION__); <->u.ns; })->inlinees)) | ||||
1336 | for (unsigned ix = inlinees->length (); ix--;) | ||||
1337 | adl_namespace ((*inlinees)[ix]); | ||||
1338 | |||||
1339 | if (DECL_NAMESPACE_INLINE_P (scope)((tree_not_check2 (((tree_check ((scope), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1339, __FUNCTION__, (NAMESPACE_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1339, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)) | ||||
1340 | /* Mark parent. */ | ||||
1341 | adl_namespace (CP_DECL_CONTEXT (scope)(!(! (((contains_struct_check ((scope), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1341, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((scope), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1341, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((scope ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1341, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])); | ||||
1342 | } | ||||
1343 | |||||
1344 | /* Adds the class and its friends to the lookup structure. */ | ||||
1345 | |||||
1346 | void | ||||
1347 | name_lookup::adl_class_only (tree type) | ||||
1348 | { | ||||
1349 | /* Backend-built structures, such as __builtin_va_list, aren't | ||||
1350 | affected by all this. */ | ||||
1351 | if (!CLASS_TYPE_P (type)(((((enum tree_code) (type)->base.code)) == RECORD_TYPE || (((enum tree_code) (type)->base.code)) == UNION_TYPE) && ((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1351, __FUNCTION__))->type_common.lang_flag_5))) | ||||
1352 | return; | ||||
1353 | |||||
1354 | type = TYPE_MAIN_VARIANT (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1354, __FUNCTION__))->type_common.main_variant); | ||||
1355 | |||||
1356 | if (see_and_mark (type)) | ||||
1357 | return; | ||||
1358 | |||||
1359 | tree context = decl_namespace_context (type); | ||||
1360 | adl_namespace (context); | ||||
1361 | } | ||||
1362 | |||||
1363 | /* Adds the class and its bases to the lookup structure. | ||||
1364 | Returns true on error. */ | ||||
1365 | |||||
1366 | void | ||||
1367 | name_lookup::adl_bases (tree type) | ||||
1368 | { | ||||
1369 | adl_class_only (type); | ||||
1370 | |||||
1371 | /* Process baseclasses. */ | ||||
1372 | if (tree binfo = TYPE_BINFO (type)((tree_check3 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1372, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))->type_non_common.maxval)) | ||||
1373 | { | ||||
1374 | tree base_binfo; | ||||
1375 | int i; | ||||
1376 | |||||
1377 | for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo)((&(tree_check ((binfo), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1377, __FUNCTION__, (TREE_BINFO)))->binfo.base_binfos)-> iterate ((i), &(base_binfo))); i++) | ||||
1378 | adl_bases (BINFO_TYPE (base_binfo)((contains_struct_check (((tree_check ((base_binfo), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1378, __FUNCTION__, (TREE_BINFO)))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1378, __FUNCTION__))->typed.type)); | ||||
1379 | } | ||||
1380 | } | ||||
1381 | |||||
1382 | /* Adds everything associated with a class argument type to the lookup | ||||
1383 | structure. | ||||
1384 | |||||
1385 | If T is a class type (including unions), its associated classes are: the | ||||
1386 | class itself; the class of which it is a member, if any; and its direct | ||||
1387 | and indirect base classes. Its associated namespaces are the namespaces | ||||
1388 | of which its associated classes are members. Furthermore, if T is a | ||||
1389 | class template specialization, its associated namespaces and classes | ||||
1390 | also include: the namespaces and classes associated with the types of | ||||
1391 | the template arguments provided for template type parameters (excluding | ||||
1392 | template template parameters); the namespaces of which any template | ||||
1393 | template arguments are members; and the classes of which any member | ||||
1394 | templates used as template template arguments are members. [ Note: | ||||
1395 | non-type template arguments do not contribute to the set of associated | ||||
1396 | namespaces. --end note] */ | ||||
1397 | |||||
1398 | void | ||||
1399 | name_lookup::adl_class (tree type) | ||||
1400 | { | ||||
1401 | /* Backend build structures, such as __builtin_va_list, aren't | ||||
1402 | affected by all this. */ | ||||
1403 | if (!CLASS_TYPE_P (type)(((((enum tree_code) (type)->base.code)) == RECORD_TYPE || (((enum tree_code) (type)->base.code)) == UNION_TYPE) && ((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1403, __FUNCTION__))->type_common.lang_flag_5))) | ||||
1404 | return; | ||||
1405 | |||||
1406 | type = TYPE_MAIN_VARIANT (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1406, __FUNCTION__))->type_common.main_variant); | ||||
1407 | |||||
1408 | /* We don't set found here because we have to have set seen first, | ||||
1409 | which is done in the adl_bases walk. */ | ||||
1410 | if (found_p (type)) | ||||
1411 | return; | ||||
1412 | |||||
1413 | complete_type (type); | ||||
1414 | adl_bases (type); | ||||
1415 | mark_found (type); | ||||
1416 | |||||
1417 | if (TYPE_CLASS_SCOPE_P (type)(((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1417, __FUNCTION__))->type_common.context) && (tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1417, __FUNCTION__))->type_common.context))->base.code ))] == tcc_type))) | ||||
1418 | adl_class_only (TYPE_CONTEXT (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1418, __FUNCTION__))->type_common.context)); | ||||
1419 | |||||
1420 | /* Process template arguments. */ | ||||
1421 | if (CLASSTYPE_TEMPLATE_INFO (type)(((tree_class_check (((tree_check3 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1421, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1421, __FUNCTION__))->type_non_common.lang_1)) | ||||
1422 | && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))(((((contains_struct_check ((((tree_check ((((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((((struct tree_template_info*)(tree_check (((((tree_class_check (((tree_check3 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1422, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1422, __FUNCTION__))->type_non_common.lang_1))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1422, __FUNCTION__, (TEMPLATE_INFO))))->tmpl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1422, __FUNCTION__, (TEMPLATE_DECL))))))))->arguments), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1422, __FUNCTION__, (TREE_LIST)))->list.value)), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1422, __FUNCTION__))->typed.type))) == (((struct tree_template_info *)(tree_check (((((tree_class_check (((tree_check3 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1422, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1422, __FUNCTION__))->type_non_common.lang_1))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1422, __FUNCTION__, (TEMPLATE_INFO))))->tmpl))) | ||||
1423 | { | ||||
1424 | tree list = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type))(get_innermost_template_args ((((struct tree_template_info*)( tree_check (((((tree_class_check (((tree_check3 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1424, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1424, __FUNCTION__))->type_non_common.lang_1))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1424, __FUNCTION__, (TEMPLATE_INFO))))->args), 1)); | ||||
1425 | for (int i = 0; i < TREE_VEC_LENGTH (list)((tree_check ((list), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1425, __FUNCTION__, (TREE_VEC)))->base.u.length); ++i) | ||||
1426 | adl_template_arg (TREE_VEC_ELT (list, i)(*((const_cast<tree *> (tree_vec_elt_check ((list), (i) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1426, __FUNCTION__)))))); | ||||
1427 | } | ||||
1428 | } | ||||
1429 | |||||
1430 | void | ||||
1431 | name_lookup::adl_enum (tree type) | ||||
1432 | { | ||||
1433 | type = TYPE_MAIN_VARIANT (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1433, __FUNCTION__))->type_common.main_variant); | ||||
1434 | if (see_and_mark (type)) | ||||
1435 | return; | ||||
1436 | |||||
1437 | if (TYPE_CLASS_SCOPE_P (type)(((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1437, __FUNCTION__))->type_common.context) && (tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1437, __FUNCTION__))->type_common.context))->base.code ))] == tcc_type))) | ||||
1438 | adl_class_only (TYPE_CONTEXT (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1438, __FUNCTION__))->type_common.context)); | ||||
1439 | else | ||||
1440 | adl_namespace (decl_namespace_context (type)); | ||||
1441 | } | ||||
1442 | |||||
1443 | void | ||||
1444 | name_lookup::adl_expr (tree expr) | ||||
1445 | { | ||||
1446 | if (!expr) | ||||
1447 | return; | ||||
1448 | |||||
1449 | gcc_assert (!TYPE_P (expr))((void)(!(!(tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) (expr)->base.code))] == tcc_type)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1449, __FUNCTION__), 0 : 0)); | ||||
1450 | |||||
1451 | if (TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1451, __FUNCTION__))->typed.type) != unknown_type_nodecp_global_trees[CPTI_UNKNOWN_TYPE]) | ||||
1452 | { | ||||
1453 | adl_type (unlowered_expr_type (expr)); | ||||
1454 | return; | ||||
1455 | } | ||||
1456 | |||||
1457 | if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == ADDR_EXPR) | ||||
1458 | expr = TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1458, __FUNCTION__))))); | ||||
1459 | if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == COMPONENT_REF | ||||
1460 | || TREE_CODE (expr)((enum tree_code) (expr)->base.code) == OFFSET_REF) | ||||
1461 | expr = TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1461, __FUNCTION__))))); | ||||
1462 | expr = MAYBE_BASELINK_FUNCTIONS (expr)((((enum tree_code) (expr)->base.code) == BASELINK) ? (((struct tree_baselink*) (tree_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1462, __FUNCTION__, (BASELINK))))->functions) : expr); | ||||
1463 | |||||
1464 | if (OVL_P (expr)(((enum tree_code) (expr)->base.code) == FUNCTION_DECL || ( (enum tree_code) (expr)->base.code) == OVERLOAD)) | ||||
1465 | for (lkp_iterator iter (expr); iter; ++iter) | ||||
1466 | adl_type (TREE_TYPE (*iter)((contains_struct_check ((*iter), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1466, __FUNCTION__))->typed.type)); | ||||
1467 | else if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == TEMPLATE_ID_EXPR) | ||||
1468 | { | ||||
1469 | /* The working paper doesn't currently say how to handle | ||||
1470 | template-id arguments. The sensible thing would seem to be | ||||
1471 | to handle the list of template candidates like a normal | ||||
1472 | overload set, and handle the template arguments like we do | ||||
1473 | for class template specializations. */ | ||||
1474 | |||||
1475 | /* First the templates. */ | ||||
1476 | adl_expr (TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1476, __FUNCTION__)))))); | ||||
1477 | |||||
1478 | /* Now the arguments. */ | ||||
1479 | if (tree args = TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1479, __FUNCTION__)))))) | ||||
1480 | for (int ix = TREE_VEC_LENGTH (args)((tree_check ((args), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1480, __FUNCTION__, (TREE_VEC)))->base.u.length); ix--;) | ||||
1481 | adl_template_arg (TREE_VEC_ELT (args, ix)(*((const_cast<tree *> (tree_vec_elt_check ((args), (ix ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1481, __FUNCTION__)))))); | ||||
1482 | } | ||||
1483 | } | ||||
1484 | |||||
1485 | void | ||||
1486 | name_lookup::adl_type (tree type) | ||||
1487 | { | ||||
1488 | if (!type) | ||||
1489 | return; | ||||
1490 | |||||
1491 | if (TYPE_PTRDATAMEM_P (type)(((enum tree_code) (type)->base.code) == OFFSET_TYPE)) | ||||
1492 | { | ||||
1493 | /* Pointer to member: associate class type and value type. */ | ||||
1494 | adl_type (TYPE_PTRMEM_CLASS_TYPE (type)((((enum tree_code) (type)->base.code) == OFFSET_TYPE) ? ( (tree_check ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1494, __FUNCTION__, (OFFSET_TYPE)))->type_non_common.maxval ) : ((tree_check2 ((((contains_struct_check (((cp_build_qualified_type (((contains_struct_check ((((tree_check3 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1494, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))->type_non_common.values)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1494, __FUNCTION__))->typed.type), cp_type_quals (type)) )), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1494, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1494, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))->type_non_common .maxval))); | ||||
1495 | adl_type (TYPE_PTRMEM_POINTED_TO_TYPE (type)((((enum tree_code) (type)->base.code) == OFFSET_TYPE) ? ( (contains_struct_check ((type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1495, __FUNCTION__))->typed.type) : ((contains_struct_check (((cp_build_qualified_type (((contains_struct_check ((((tree_check3 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1495, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))->type_non_common.values)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1495, __FUNCTION__))->typed.type), cp_type_quals (type)) )), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1495, __FUNCTION__))->typed.type))); | ||||
1496 | return; | ||||
1497 | } | ||||
1498 | |||||
1499 | switch (TREE_CODE (type)((enum tree_code) (type)->base.code)) | ||||
1500 | { | ||||
1501 | case RECORD_TYPE: | ||||
1502 | if (TYPE_PTRMEMFUNC_P (type)(((enum tree_code) (type)->base.code) == RECORD_TYPE && (((tree_class_check (((tree_check ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1502, __FUNCTION__, (RECORD_TYPE)))), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1502, __FUNCTION__))->type_common.lang_flag_2)))) | ||||
1503 | { | ||||
1504 | adl_type (TYPE_PTRMEMFUNC_FN_TYPE (type)(cp_build_qualified_type (((contains_struct_check ((((tree_check3 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1504, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))->type_non_common.values)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1504, __FUNCTION__))->typed.type), cp_type_quals (type)) )); | ||||
1505 | return; | ||||
1506 | } | ||||
1507 | /* FALLTHRU */ | ||||
1508 | case UNION_TYPE: | ||||
1509 | adl_class (type); | ||||
1510 | return; | ||||
1511 | |||||
1512 | case METHOD_TYPE: | ||||
1513 | /* The basetype is referenced in the first arg type, so just | ||||
1514 | fall through. */ | ||||
1515 | case FUNCTION_TYPE: | ||||
1516 | /* Associate the parameter types. */ | ||||
1517 | for (tree args = TYPE_ARG_TYPES (type)((tree_check2 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1517, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))->type_non_common .values); args; args = TREE_CHAIN (args)((contains_struct_check ((args), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1517, __FUNCTION__))->common.chain)) | ||||
1518 | adl_type (TREE_VALUE (args)((tree_check ((args), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1518, __FUNCTION__, (TREE_LIST)))->list.value)); | ||||
1519 | /* FALLTHROUGH */ | ||||
1520 | |||||
1521 | case POINTER_TYPE: | ||||
1522 | case REFERENCE_TYPE: | ||||
1523 | case ARRAY_TYPE: | ||||
1524 | adl_type (TREE_TYPE (type)((contains_struct_check ((type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1524, __FUNCTION__))->typed.type)); | ||||
1525 | return; | ||||
1526 | |||||
1527 | case ENUMERAL_TYPE: | ||||
1528 | adl_enum (type); | ||||
1529 | return; | ||||
1530 | |||||
1531 | case LANG_TYPE: | ||||
1532 | gcc_assert (type == unknown_type_node((void)(!(type == cp_global_trees[CPTI_UNKNOWN_TYPE] || type == cp_global_trees[CPTI_INIT_LIST_TYPE]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1533, __FUNCTION__), 0 : 0)) | ||||
1533 | || type == init_list_type_node)((void)(!(type == cp_global_trees[CPTI_UNKNOWN_TYPE] || type == cp_global_trees[CPTI_INIT_LIST_TYPE]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1533, __FUNCTION__), 0 : 0)); | ||||
1534 | return; | ||||
1535 | |||||
1536 | case TYPE_PACK_EXPANSION: | ||||
1537 | adl_type (PACK_EXPANSION_PATTERN (type)(((enum tree_code) ((tree_check2 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1537, __FUNCTION__, (TYPE_PACK_EXPANSION), (EXPR_PACK_EXPANSION ))))->base.code) == TYPE_PACK_EXPANSION ? ((contains_struct_check ((type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1537, __FUNCTION__))->typed.type) : (*((const_cast<tree *> (tree_operand_check ((type), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1537, __FUNCTION__))))))); | ||||
1538 | return; | ||||
1539 | |||||
1540 | default: | ||||
1541 | break; | ||||
1542 | } | ||||
1543 | } | ||||
1544 | |||||
1545 | /* Adds everything associated with a template argument to the lookup | ||||
1546 | structure. */ | ||||
1547 | |||||
1548 | void | ||||
1549 | name_lookup::adl_template_arg (tree arg) | ||||
1550 | { | ||||
1551 | /* [basic.lookup.koenig] | ||||
1552 | |||||
1553 | If T is a template-id, its associated namespaces and classes are | ||||
1554 | ... the namespaces and classes associated with the types of the | ||||
1555 | template arguments provided for template type parameters | ||||
1556 | (excluding template template parameters); the namespaces in which | ||||
1557 | any template template arguments are defined; and the classes in | ||||
1558 | which any member templates used as template template arguments | ||||
1559 | are defined. [Note: non-type template arguments do not | ||||
1560 | contribute to the set of associated namespaces. ] */ | ||||
1561 | |||||
1562 | /* Consider first template template arguments. */ | ||||
1563 | if (TREE_CODE (arg)((enum tree_code) (arg)->base.code) == TEMPLATE_TEMPLATE_PARM | ||||
1564 | || TREE_CODE (arg)((enum tree_code) (arg)->base.code) == UNBOUND_CLASS_TEMPLATE) | ||||
1565 | ; | ||||
1566 | else if (TREE_CODE (arg)((enum tree_code) (arg)->base.code) == TEMPLATE_DECL) | ||||
1567 | { | ||||
1568 | tree ctx = CP_DECL_CONTEXT (arg)(!(! (((contains_struct_check ((arg), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1568, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((arg), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1568, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((arg), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1568, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]); | ||||
1569 | |||||
1570 | /* It's not a member template. */ | ||||
1571 | if (TREE_CODE (ctx)((enum tree_code) (ctx)->base.code) == NAMESPACE_DECL) | ||||
1572 | adl_namespace (ctx); | ||||
1573 | /* Otherwise, it must be member template. */ | ||||
1574 | else | ||||
1575 | adl_class_only (ctx); | ||||
1576 | } | ||||
1577 | /* It's an argument pack; handle it recursively. */ | ||||
1578 | else if (ARGUMENT_PACK_P (arg)(((enum tree_code) (arg)->base.code) == TYPE_ARGUMENT_PACK || ((enum tree_code) (arg)->base.code) == NONTYPE_ARGUMENT_PACK )) | ||||
1579 | { | ||||
1580 | tree args = ARGUMENT_PACK_ARGS (arg)(((enum tree_code) ((tree_check2 ((arg), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1580, __FUNCTION__, (TYPE_ARGUMENT_PACK), (NONTYPE_ARGUMENT_PACK ))))->base.code) == TYPE_ARGUMENT_PACK ? ((contains_struct_check ((arg), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1580, __FUNCTION__))->typed.type) : (*((const_cast<tree *> (tree_operand_check ((arg), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1580, __FUNCTION__)))))); | ||||
1581 | int i, len = TREE_VEC_LENGTH (args)((tree_check ((args), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1581, __FUNCTION__, (TREE_VEC)))->base.u.length); | ||||
1582 | for (i = 0; i < len; ++i) | ||||
1583 | adl_template_arg (TREE_VEC_ELT (args, i)(*((const_cast<tree *> (tree_vec_elt_check ((args), (i) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1583, __FUNCTION__)))))); | ||||
1584 | } | ||||
1585 | /* It's not a template template argument, but it is a type template | ||||
1586 | argument. */ | ||||
1587 | else if (TYPE_P (arg)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (arg)->base.code))] == tcc_type)) | ||||
1588 | adl_type (arg); | ||||
1589 | } | ||||
1590 | |||||
1591 | /* Perform ADL lookup. FNS is the existing lookup result and ARGS are | ||||
1592 | the call arguments. */ | ||||
1593 | |||||
1594 | tree | ||||
1595 | name_lookup::search_adl (tree fns, vec<tree, va_gc> *args) | ||||
1596 | { | ||||
1597 | gcc_checking_assert (!vec_safe_length (scopes))((void)(!(!vec_safe_length (scopes)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1597, __FUNCTION__), 0 : 0)); | ||||
1598 | |||||
1599 | /* Gather each associated entity onto the lookup's scope list. */ | ||||
1600 | unsigned ix; | ||||
1601 | tree arg; | ||||
1602 | |||||
1603 | FOR_EACH_VEC_ELT_REVERSE (*args, ix, arg)for (ix = (*args).length () - 1; (*args).iterate ((ix), & (arg)); (ix)--) | ||||
1604 | /* OMP reduction operators put an ADL-significant type as the | ||||
1605 | first arg. */ | ||||
1606 | if (TYPE_P (arg)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (arg)->base.code))] == tcc_type)) | ||||
1607 | adl_type (arg); | ||||
1608 | else | ||||
1609 | adl_expr (arg); | ||||
1610 | |||||
1611 | if (vec_safe_length (scopes)) | ||||
1612 | { | ||||
1613 | /* Now do the lookups. */ | ||||
1614 | value = fns; | ||||
1615 | if (fns) | ||||
1616 | dedup (true); | ||||
1617 | |||||
1618 | /* INST_PATH will be NULL, if this is /not/ 2nd-phase ADL. */ | ||||
1619 | bitmap inst_path = NULLnullptr; | ||||
1620 | /* VISIBLE is the regular import bitmap. */ | ||||
1621 | bitmap visible = visible_instantiation_path (&inst_path); | ||||
1622 | |||||
1623 | for (unsigned ix = scopes->length (); ix--;) | ||||
1624 | { | ||||
1625 | tree scope = (*scopes)[ix]; | ||||
1626 | if (TREE_CODE (scope)((enum tree_code) (scope)->base.code) == NAMESPACE_DECL) | ||||
1627 | adl_namespace_fns (scope, visible); | ||||
1628 | else | ||||
1629 | { | ||||
1630 | if (RECORD_OR_UNION_TYPE_P (scope)(((enum tree_code) (scope)->base.code) == RECORD_TYPE || ( (enum tree_code) (scope)->base.code) == UNION_TYPE || ((enum tree_code) (scope)->base.code) == QUAL_UNION_TYPE)) | ||||
1631 | adl_class_fns (scope); | ||||
1632 | |||||
1633 | /* During 2nd phase ADL: Any exported declaration D in N | ||||
1634 | declared within the purview of a named module M | ||||
1635 | (10.2) is visible if there is an associated entity | ||||
1636 | attached to M with the same innermost enclosing | ||||
1637 | non-inline namespace as D. | ||||
1638 | [basic.lookup.argdep]/4.4 */ | ||||
1639 | |||||
1640 | if (!inst_path) | ||||
1641 | /* Not 2nd phase. */ | ||||
1642 | continue; | ||||
1643 | |||||
1644 | tree ctx = CP_DECL_CONTEXT (TYPE_NAME (scope))(!(! (((contains_struct_check ((((tree_class_check ((scope), ( tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1644, __FUNCTION__))->type_common.name)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1644, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((((tree_class_check ((scope), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1644, __FUNCTION__))->type_common.name)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1644, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((((tree_class_check ((scope), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1644, __FUNCTION__))->type_common.name)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1644, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]); | ||||
1645 | if (TREE_CODE (ctx)((enum tree_code) (ctx)->base.code) != NAMESPACE_DECL) | ||||
1646 | /* Not namespace-scope class. */ | ||||
1647 | continue; | ||||
1648 | |||||
1649 | tree origin = get_originating_module_decl (TYPE_NAME (scope)((tree_class_check ((scope), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1649, __FUNCTION__))->type_common.name)); | ||||
1650 | tree not_tmpl = STRIP_TEMPLATE (origin)(((enum tree_code) (origin)->base.code) == TEMPLATE_DECL ? ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((origin), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1650, __FUNCTION__, (TEMPLATE_DECL))))))))->result : origin ); | ||||
1651 | if (!DECL_LANG_SPECIFIC (not_tmpl)((contains_struct_check ((not_tmpl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1651, __FUNCTION__))->decl_common.lang_specific) | ||||
1652 | || !DECL_MODULE_IMPORT_P (not_tmpl)(((contains_struct_check (((tree_not_check ((not_tmpl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1652, __FUNCTION__, (TEMPLATE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1652, __FUNCTION__))->decl_common.lang_specific)->u.base .module_import_p)) | ||||
1653 | /* Not imported. */ | ||||
1654 | continue; | ||||
1655 | |||||
1656 | unsigned module = get_importing_module (origin); | ||||
1657 | |||||
1658 | if (!bitmap_bit_p (inst_path, module)) | ||||
1659 | /* Not on path of instantiation. */ | ||||
1660 | continue; | ||||
1661 | |||||
1662 | if (bitmap_bit_p (visible, module)) | ||||
1663 | /* If the module was in the visible set, we'll look at | ||||
1664 | its namespace partition anyway. */ | ||||
1665 | continue; | ||||
1666 | |||||
1667 | if (tree *slot = find_namespace_slot (ctx, name, false)) | ||||
1668 | if (binding_slot *mslot = search_imported_binding_slot (slot, module)) | ||||
1669 | { | ||||
1670 | if (mslot->is_lazy ()) | ||||
1671 | lazy_load_binding (module, ctx, name, mslot); | ||||
1672 | |||||
1673 | if (tree bind = *mslot) | ||||
1674 | { | ||||
1675 | /* We must turn on deduping, because some other class | ||||
1676 | from this module might also be in this namespace. */ | ||||
1677 | dedup (true); | ||||
1678 | |||||
1679 | /* Add the exported fns */ | ||||
1680 | if (STAT_HACK_P (bind)((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1680, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1680, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
1681 | add_fns (STAT_VISIBLE (bind)(((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1681, __FUNCTION__, (OVERLOAD))))->common.chain)); | ||||
1682 | } | ||||
1683 | } | ||||
1684 | } | ||||
1685 | } | ||||
1686 | |||||
1687 | fns = value; | ||||
1688 | dedup (false); | ||||
1689 | } | ||||
1690 | |||||
1691 | return fns; | ||||
1692 | } | ||||
1693 | |||||
1694 | static bool qualified_namespace_lookup (tree, name_lookup *); | ||||
1695 | static void consider_binding_level (tree name, | ||||
1696 | best_match <tree, const char *> &bm, | ||||
1697 | cp_binding_level *lvl, | ||||
1698 | bool look_within_fields, | ||||
1699 | enum lookup_name_fuzzy_kind kind); | ||||
1700 | |||||
1701 | /* ADL lookup of NAME. FNS is the result of regular lookup, and we | ||||
1702 | don't add duplicates to it. ARGS is the vector of call | ||||
1703 | arguments (which will not be empty). */ | ||||
1704 | |||||
1705 | tree | ||||
1706 | lookup_arg_dependent (tree name, tree fns, vec<tree, va_gc> *args) | ||||
1707 | { | ||||
1708 | auto_cond_timevar tv (TV_NAME_LOOKUP); | ||||
1709 | name_lookup lookup (name); | ||||
1710 | return lookup.search_adl (fns, args); | ||||
1711 | } | ||||
1712 | |||||
1713 | /* FNS is an overload set of conversion functions. Return the | ||||
1714 | overloads converting to TYPE. */ | ||||
1715 | |||||
1716 | static tree | ||||
1717 | extract_conversion_operator (tree fns, tree type) | ||||
1718 | { | ||||
1719 | tree convs = NULL_TREE(tree) nullptr; | ||||
1720 | tree tpls = NULL_TREE(tree) nullptr; | ||||
1721 | |||||
1722 | for (ovl_iterator iter (fns); iter; ++iter) | ||||
1723 | { | ||||
1724 | if (same_type_p (DECL_CONV_FN_TYPE (*iter), type)comptypes ((((contains_struct_check (((((void)(!(((((tree_not_check2 (((tree_check ((((contains_struct_check ((*iter), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__))->decl_minimal.name)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((((contains_struct_check ((*iter), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__))->decl_minimal.name)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1) & (!((tree_not_check2 (((tree_check ((((contains_struct_check ((*iter), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__))->decl_minimal.name)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__), 0 : 0)), ((contains_struct_check ((*iter ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__))->decl_minimal.name))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1724, __FUNCTION__))->typed.type)), (type), 0)) | ||||
1725 | convs = lookup_add (*iter, convs); | ||||
1726 | |||||
1727 | if (TREE_CODE (*iter)((enum tree_code) (*iter)->base.code) == TEMPLATE_DECL) | ||||
1728 | tpls = lookup_add (*iter, tpls); | ||||
1729 | } | ||||
1730 | |||||
1731 | if (!convs) | ||||
1732 | convs = tpls; | ||||
1733 | |||||
1734 | return convs; | ||||
1735 | } | ||||
1736 | |||||
1737 | /* Binary search of (ordered) MEMBER_VEC for NAME. */ | ||||
1738 | |||||
1739 | static tree | ||||
1740 | member_vec_binary_search (vec<tree, va_gc> *member_vec, tree name) | ||||
1741 | { | ||||
1742 | for (unsigned lo = 0, hi = member_vec->length (); lo < hi;) | ||||
1743 | { | ||||
1744 | unsigned mid = (lo + hi) / 2; | ||||
1745 | tree binding = (*member_vec)[mid]; | ||||
1746 | tree binding_name = OVL_NAME (binding)((contains_struct_check ((ovl_first (binding)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1746, __FUNCTION__))->decl_minimal.name); | ||||
1747 | |||||
1748 | if (binding_name > name) | ||||
1749 | hi = mid; | ||||
1750 | else if (binding_name < name) | ||||
1751 | lo = mid + 1; | ||||
1752 | else | ||||
1753 | return binding; | ||||
1754 | } | ||||
1755 | |||||
1756 | return NULL_TREE(tree) nullptr; | ||||
1757 | } | ||||
1758 | |||||
1759 | /* Linear search of (unordered) MEMBER_VEC for NAME. */ | ||||
1760 | |||||
1761 | static tree | ||||
1762 | member_vec_linear_search (vec<tree, va_gc> *member_vec, tree name) | ||||
1763 | { | ||||
1764 | for (int ix = member_vec->length (); ix--;) | ||||
1765 | if (tree binding = (*member_vec)[ix]) | ||||
1766 | if (OVL_NAME (binding)((contains_struct_check ((ovl_first (binding)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1766, __FUNCTION__))->decl_minimal.name) == name) | ||||
1767 | return binding; | ||||
1768 | |||||
1769 | return NULL_TREE(tree) nullptr; | ||||
1770 | } | ||||
1771 | |||||
1772 | /* Linear search of (partially ordered) fields of KLASS for NAME. */ | ||||
1773 | |||||
1774 | static tree | ||||
1775 | fields_linear_search (tree klass, tree name, bool want_type) | ||||
1776 | { | ||||
1777 | for (tree fields = TYPE_FIELDS (klass)((tree_check3 ((klass), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1777, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))->type_non_common.values); fields; fields = DECL_CHAIN (fields)(((contains_struct_check (((contains_struct_check ((fields), ( TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1777, __FUNCTION__))), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1777, __FUNCTION__))->common.chain))) | ||||
1778 | { | ||||
1779 | tree decl = fields; | ||||
1780 | |||||
1781 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == FIELD_DECL | ||||
1782 | && ANON_AGGR_TYPE_P (TREE_TYPE (decl))((((((enum tree_code) (((contains_struct_check ((decl), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1782, __FUNCTION__))->typed.type))->base.code)) == RECORD_TYPE || (((enum tree_code) (((contains_struct_check ((decl), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1782, __FUNCTION__))->typed.type))->base.code)) == UNION_TYPE ) && ((tree_class_check ((((contains_struct_check ((decl ), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1782, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1782, __FUNCTION__))->type_common.lang_flag_5)) && (((tree_class_check ((((contains_struct_check ((decl), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1782, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1782, __FUNCTION__))->type_with_lang_specific.lang_specific ))->anon_aggr)) | ||||
1783 | { | ||||
1784 | if (tree temp = search_anon_aggr (TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1784, __FUNCTION__))->typed.type), name, want_type)) | ||||
1785 | return temp; | ||||
1786 | } | ||||
1787 | |||||
1788 | if (DECL_NAME (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1788, __FUNCTION__))->decl_minimal.name) != name) | ||||
1789 | continue; | ||||
1790 | |||||
1791 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == USING_DECL) | ||||
1792 | { | ||||
1793 | decl = strip_using_decl (decl); | ||||
1794 | if (is_overloaded_fn (decl)) | ||||
1795 | continue; | ||||
1796 | } | ||||
1797 | |||||
1798 | if (DECL_DECLARES_FUNCTION_P (decl)(((enum tree_code) (decl)->base.code) == FUNCTION_DECL || ( ((enum tree_code) (decl)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1798, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1798, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL))) | ||||
1799 | /* Functions are found separately. */ | ||||
1800 | continue; | ||||
1801 | |||||
1802 | if (!want_type || DECL_DECLARES_TYPE_P (decl)(((enum tree_code) (decl)->base.code) == TYPE_DECL || (((enum tree_code) (decl)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1802, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1802, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == TYPE_DECL))) | ||||
1803 | return decl; | ||||
1804 | } | ||||
1805 | |||||
1806 | return NULL_TREE(tree) nullptr; | ||||
1807 | } | ||||
1808 | |||||
1809 | /* Look for NAME member inside of anonymous aggregate ANON. Although | ||||
1810 | such things should only contain FIELD_DECLs, we check that too | ||||
1811 | late, and would give very confusing errors if we weren't | ||||
1812 | permissive here. */ | ||||
1813 | |||||
1814 | tree | ||||
1815 | search_anon_aggr (tree anon, tree name, bool want_type) | ||||
1816 | { | ||||
1817 | gcc_assert (COMPLETE_TYPE_P (anon))((void)(!((((tree_class_check ((anon), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1817, __FUNCTION__))->type_common.size) != (tree) nullptr )) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1817, __FUNCTION__), 0 : 0)); | ||||
1818 | tree ret = get_class_binding_direct (anon, name, want_type); | ||||
1819 | return ret; | ||||
1820 | } | ||||
1821 | |||||
1822 | /* Look for NAME as an immediate member of KLASS (including | ||||
1823 | anon-members or unscoped enum member). TYPE_OR_FNS is zero for | ||||
1824 | regular search. >0 to get a type binding (if there is one) and <0 | ||||
1825 | if you want (just) the member function binding. | ||||
1826 | |||||
1827 | Use this if you do not want lazy member creation. */ | ||||
1828 | |||||
1829 | tree | ||||
1830 | get_class_binding_direct (tree klass, tree name, bool want_type) | ||||
1831 | { | ||||
1832 | gcc_checking_assert (RECORD_OR_UNION_TYPE_P (klass))((void)(!((((enum tree_code) (klass)->base.code) == RECORD_TYPE || ((enum tree_code) (klass)->base.code) == UNION_TYPE || ((enum tree_code) (klass)->base.code) == QUAL_UNION_TYPE) ) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1832, __FUNCTION__), 0 : 0)); | ||||
1833 | |||||
1834 | /* Conversion operators can only be found by the marker conversion | ||||
1835 | operator name. */ | ||||
1836 | bool conv_op = IDENTIFIER_CONV_OP_P (name)((((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1836, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1836, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1836, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1836, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1) & (!((tree_not_check2 (((tree_check ((name) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1836, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1836, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0))); | ||||
1837 | tree lookup = conv_op ? conv_op_identifiercp_global_trees[CPTI_CONV_OP_IDENTIFIER] : name; | ||||
1838 | tree val = NULL_TREE(tree) nullptr; | ||||
1839 | vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1839, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members); | ||||
1840 | |||||
1841 | if (COMPLETE_TYPE_P (klass)(((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1841, __FUNCTION__))->type_common.size) != (tree) nullptr ) && member_vec) | ||||
1842 | { | ||||
1843 | val = member_vec_binary_search (member_vec, lookup); | ||||
1844 | if (!val) | ||||
1845 | ; | ||||
1846 | else if (STAT_HACK_P (val)((val) && ((enum tree_code) (val)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1846, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1846, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
1847 | val = want_type ? STAT_TYPE (val)((contains_struct_check ((val), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1847, __FUNCTION__))->typed.type) : STAT_DECL (val)(((struct tree_overload*)(tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1847, __FUNCTION__, (OVERLOAD))))->function); | ||||
1848 | else if (want_type && !DECL_DECLARES_TYPE_P (val)(((enum tree_code) (val)->base.code) == TYPE_DECL || (((enum tree_code) (val)->base.code) == TEMPLATE_DECL && ( (struct tree_template_decl *)(const_cast<union tree_node * > ((((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1848, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((val) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1848, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == TYPE_DECL))) | ||||
1849 | val = NULL_TREE(tree) nullptr; | ||||
1850 | } | ||||
1851 | else | ||||
1852 | { | ||||
1853 | if (member_vec && !want_type) | ||||
1854 | val = member_vec_linear_search (member_vec, lookup); | ||||
1855 | |||||
1856 | if (!val || (TREE_CODE (val)((enum tree_code) (val)->base.code) == OVERLOAD && OVL_DEDUP_P (val)((tree_not_check2 (((tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1856, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1856, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0))) | ||||
1857 | /* Dependent using declarations are a 'field', make sure we | ||||
1858 | return that even if we saw an overload already. */ | ||||
1859 | if (tree field_val = fields_linear_search (klass, lookup, want_type)) | ||||
1860 | { | ||||
1861 | if (!val) | ||||
1862 | val = field_val; | ||||
1863 | else if (TREE_CODE (field_val)((enum tree_code) (field_val)->base.code) == USING_DECL) | ||||
1864 | val = ovl_make (field_val, val); | ||||
1865 | } | ||||
1866 | } | ||||
1867 | |||||
1868 | /* Extract the conversion operators asked for, unless the general | ||||
1869 | conversion operator was requested. */ | ||||
1870 | if (val && conv_op) | ||||
1871 | { | ||||
1872 | gcc_checking_assert (OVL_FUNCTION (val) == conv_op_marker)((void)(!((((struct tree_overload*)(tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1872, __FUNCTION__, (OVERLOAD))))->function) == cp_global_trees [CPTI_CONV_OP_MARKER]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1872, __FUNCTION__), 0 : 0)); | ||||
1873 | val = OVL_CHAIN (val)(((struct tree_overload*)(tree_check ((val), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1873, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
1874 | if (tree type = TREE_TYPE (name)((contains_struct_check ((name), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1874, __FUNCTION__))->typed.type)) | ||||
1875 | val = extract_conversion_operator (val, type); | ||||
1876 | } | ||||
1877 | |||||
1878 | return val; | ||||
1879 | } | ||||
1880 | |||||
1881 | /* We're about to lookup NAME in KLASS. Make sure any lazily declared | ||||
1882 | members are now declared. */ | ||||
1883 | |||||
1884 | static void | ||||
1885 | maybe_lazily_declare (tree klass, tree name) | ||||
1886 | { | ||||
1887 | /* See big comment anout module_state::write_pendings regarding adding a check | ||||
1888 | bit. */ | ||||
1889 | if (modules_p ()) | ||||
1890 | lazy_load_pendings (TYPE_NAME (klass)((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1890, __FUNCTION__))->type_common.name)); | ||||
1891 | |||||
1892 | /* Lazily declare functions, if we're going to search these. */ | ||||
1893 | if (IDENTIFIER_CTOR_P (name)(((!((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1893, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1893, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1893, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1893, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1)) & (!((tree_not_check2 (((tree_check ((name ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1893, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1893, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)))) | ||||
1894 | { | ||||
1895 | if (CLASSTYPE_LAZY_DEFAULT_CTOR (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1895, __FUNCTION__))->type_with_lang_specific.lang_specific ))->lazy_default_ctor)) | ||||
1896 | lazily_declare_fn (sfk_constructor, klass); | ||||
1897 | if (CLASSTYPE_LAZY_COPY_CTOR (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1897, __FUNCTION__))->type_with_lang_specific.lang_specific ))->lazy_copy_ctor)) | ||||
1898 | lazily_declare_fn (sfk_copy_constructor, klass); | ||||
1899 | if (CLASSTYPE_LAZY_MOVE_CTOR (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1899, __FUNCTION__))->type_with_lang_specific.lang_specific ))->lazy_move_ctor)) | ||||
1900 | lazily_declare_fn (sfk_move_constructor, klass); | ||||
1901 | } | ||||
1902 | else if (IDENTIFIER_DTOR_P (name)(((!((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1902, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1902, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1902, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1902, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1)) & ((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1902, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1902, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0))) | ||||
1903 | { | ||||
1904 | if (CLASSTYPE_LAZY_DESTRUCTOR (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1904, __FUNCTION__))->type_with_lang_specific.lang_specific ))->lazy_destructor)) | ||||
1905 | lazily_declare_fn (sfk_destructor, klass); | ||||
1906 | } | ||||
1907 | else if (name == assign_op_identifier(ovl_op_info[true][OVL_OP_NOP_EXPR].identifier)) | ||||
1908 | { | ||||
1909 | if (CLASSTYPE_LAZY_COPY_ASSIGN (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1909, __FUNCTION__))->type_with_lang_specific.lang_specific ))->lazy_copy_assign)) | ||||
1910 | lazily_declare_fn (sfk_copy_assignment, klass); | ||||
1911 | if (CLASSTYPE_LAZY_MOVE_ASSIGN (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1911, __FUNCTION__))->type_with_lang_specific.lang_specific ))->lazy_move_assign)) | ||||
1912 | lazily_declare_fn (sfk_move_assignment, klass); | ||||
1913 | } | ||||
1914 | } | ||||
1915 | |||||
1916 | /* Look for NAME's binding in exactly KLASS. See | ||||
1917 | get_class_binding_direct for argument description. Does lazy | ||||
1918 | special function creation as necessary. */ | ||||
1919 | |||||
1920 | tree | ||||
1921 | get_class_binding (tree klass, tree name, bool want_type /*=false*/) | ||||
1922 | { | ||||
1923 | klass = complete_type (klass); | ||||
1924 | |||||
1925 | if (COMPLETE_TYPE_P (klass)(((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1925, __FUNCTION__))->type_common.size) != (tree) nullptr )) | ||||
1926 | maybe_lazily_declare (klass, name); | ||||
1927 | |||||
1928 | return get_class_binding_direct (klass, name, want_type); | ||||
1929 | } | ||||
1930 | |||||
1931 | /* Find the slot containing overloads called 'NAME'. If there is no | ||||
1932 | such slot and the class is complete, create an empty one, at the | ||||
1933 | correct point in the sorted member vector. Otherwise return NULL. | ||||
1934 | Deals with conv_op marker handling. */ | ||||
1935 | |||||
1936 | tree * | ||||
1937 | find_member_slot (tree klass, tree name) | ||||
1938 | { | ||||
1939 | bool complete_p = COMPLETE_TYPE_P (klass)(((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1939, __FUNCTION__))->type_common.size) != (tree) nullptr ); | ||||
| |||||
1940 | |||||
1941 | vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1941, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members); | ||||
1942 | if (!member_vec) | ||||
1943 | { | ||||
1944 | vec_alloc (member_vec, 8); | ||||
1945 | CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1945, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members) = member_vec; | ||||
1946 | if (complete_p) | ||||
1947 | /* If the class is complete but had no member_vec, we need to | ||||
1948 | add the TYPE_FIELDS into it. We're also most likely to be | ||||
1949 | adding ctors & dtors, so ask for 6 spare slots (the | ||||
1950 | abstract cdtors and their clones). */ | ||||
1951 | member_vec = set_class_bindings (klass, 6); | ||||
1952 | } | ||||
1953 | |||||
1954 | if (IDENTIFIER_CONV_OP_P (name)((((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1954, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1954, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1954, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1954, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1) & (!((tree_not_check2 (((tree_check ((name) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1954, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1954, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)))) | ||||
1955 | name = conv_op_identifiercp_global_trees[CPTI_CONV_OP_IDENTIFIER]; | ||||
1956 | |||||
1957 | unsigned ix, length = member_vec->length (); | ||||
1958 | for (ix = 0; ix < length; ix++) | ||||
1959 | { | ||||
1960 | tree *slot = &(*member_vec)[ix]; | ||||
1961 | tree fn_name = OVL_NAME (*slot)((contains_struct_check ((ovl_first (*slot)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1961, __FUNCTION__))->decl_minimal.name); | ||||
1962 | |||||
1963 | if (fn_name == name) | ||||
1964 | { | ||||
1965 | /* If we found an existing slot, it must be a function set. | ||||
1966 | Even with insertion after completion, because those only | ||||
1967 | happen with artificial fns that have unspellable names. | ||||
1968 | This means we do not have to deal with the stat hack | ||||
1969 | either. */ | ||||
1970 | gcc_checking_assert (OVL_P (*slot))((void)(!((((enum tree_code) (*slot)->base.code) == FUNCTION_DECL || ((enum tree_code) (*slot)->base.code) == OVERLOAD)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1970, __FUNCTION__), 0 : 0)); | ||||
1971 | if (name == conv_op_identifiercp_global_trees[CPTI_CONV_OP_IDENTIFIER]) | ||||
1972 | { | ||||
1973 | gcc_checking_assert (OVL_FUNCTION (*slot) == conv_op_marker)((void)(!((((struct tree_overload*)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1973, __FUNCTION__, (OVERLOAD))))->function) == cp_global_trees [CPTI_CONV_OP_MARKER]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1973, __FUNCTION__), 0 : 0)); | ||||
1974 | /* Skip the conv-op marker. */ | ||||
1975 | slot = &OVL_CHAIN (*slot)(((struct tree_overload*)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1975, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
1976 | } | ||||
1977 | return slot; | ||||
1978 | } | ||||
1979 | |||||
1980 | if (complete_p && fn_name > name) | ||||
1981 | break; | ||||
1982 | } | ||||
1983 | |||||
1984 | /* No slot found, add one if the class is complete. */ | ||||
1985 | if (complete_p
| ||||
1986 | { | ||||
1987 | /* Do exact allocation, as we don't expect to add many. */ | ||||
1988 | gcc_assert (name != conv_op_identifier)((void)(!(name != cp_global_trees[CPTI_CONV_OP_IDENTIFIER]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1988, __FUNCTION__), 0 : 0)); | ||||
1989 | vec_safe_reserve_exact (member_vec, 1); | ||||
1990 | CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 1990, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members) = member_vec; | ||||
1991 | member_vec->quick_insert (ix, NULL_TREE(tree) nullptr); | ||||
| |||||
1992 | return &(*member_vec)[ix]; | ||||
1993 | } | ||||
1994 | |||||
1995 | return NULLnullptr; | ||||
1996 | } | ||||
1997 | |||||
1998 | /* KLASS is an incomplete class to which we're adding a method NAME. | ||||
1999 | Add a slot and deal with conv_op marker handling. */ | ||||
2000 | |||||
2001 | tree * | ||||
2002 | add_member_slot (tree klass, tree name) | ||||
2003 | { | ||||
2004 | gcc_assert (!COMPLETE_TYPE_P (klass))((void)(!(!(((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2004, __FUNCTION__))->type_common.size) != (tree) nullptr )) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2004, __FUNCTION__), 0 : 0)); | ||||
2005 | |||||
2006 | vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2006, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members); | ||||
2007 | vec_safe_push (member_vec, NULL_TREE(tree) nullptr); | ||||
2008 | CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2008, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members) = member_vec; | ||||
2009 | |||||
2010 | tree *slot = &member_vec->last (); | ||||
2011 | if (IDENTIFIER_CONV_OP_P (name)((((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2011, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2011, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2011, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2011, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1) & (!((tree_not_check2 (((tree_check ((name) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2011, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2011, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)))) | ||||
2012 | { | ||||
2013 | /* Install the marker prefix. */ | ||||
2014 | *slot = ovl_make (conv_op_markercp_global_trees[CPTI_CONV_OP_MARKER], NULL_TREE(tree) nullptr); | ||||
2015 | slot = &OVL_CHAIN (*slot)(((struct tree_overload*)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2015, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
2016 | } | ||||
2017 | |||||
2018 | return slot; | ||||
2019 | } | ||||
2020 | |||||
2021 | /* Comparison function to compare two MEMBER_VEC entries by name. | ||||
2022 | Because we can have duplicates during insertion of TYPE_FIELDS, we | ||||
2023 | do extra checking so deduping doesn't have to deal with so many | ||||
2024 | cases. */ | ||||
2025 | |||||
2026 | static int | ||||
2027 | member_name_cmp (const void *a_p, const void *b_p) | ||||
2028 | { | ||||
2029 | tree a = *(const tree *)a_p; | ||||
2030 | tree b = *(const tree *)b_p; | ||||
2031 | tree name_a = DECL_NAME (TREE_CODE (a) == OVERLOAD ? OVL_FUNCTION (a) : a)((contains_struct_check ((((enum tree_code) (a)->base.code ) == OVERLOAD ? (((struct tree_overload*)(tree_check ((a), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2031, __FUNCTION__, (OVERLOAD))))->function) : a), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2031, __FUNCTION__))->decl_minimal.name); | ||||
2032 | tree name_b = DECL_NAME (TREE_CODE (b) == OVERLOAD ? OVL_FUNCTION (b) : b)((contains_struct_check ((((enum tree_code) (b)->base.code ) == OVERLOAD ? (((struct tree_overload*)(tree_check ((b), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2032, __FUNCTION__, (OVERLOAD))))->function) : b), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2032, __FUNCTION__))->decl_minimal.name); | ||||
2033 | |||||
2034 | gcc_checking_assert (name_a && name_b)((void)(!(name_a && name_b) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2034, __FUNCTION__), 0 : 0)); | ||||
2035 | if (name_a != name_b) | ||||
2036 | return name_a < name_b ? -1 : +1; | ||||
2037 | |||||
2038 | if (name_a == conv_op_identifiercp_global_trees[CPTI_CONV_OP_IDENTIFIER]) | ||||
2039 | { | ||||
2040 | /* Strip the conv-op markers. */ | ||||
2041 | gcc_checking_assert (OVL_FUNCTION (a) == conv_op_marker((void)(!((((struct tree_overload*)(tree_check ((a), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2041, __FUNCTION__, (OVERLOAD))))->function) == cp_global_trees [CPTI_CONV_OP_MARKER] && (((struct tree_overload*)(tree_check ((b), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2042, __FUNCTION__, (OVERLOAD))))->function) == cp_global_trees [CPTI_CONV_OP_MARKER]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2042, __FUNCTION__), 0 : 0)) | ||||
2042 | && OVL_FUNCTION (b) == conv_op_marker)((void)(!((((struct tree_overload*)(tree_check ((a), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2041, __FUNCTION__, (OVERLOAD))))->function) == cp_global_trees [CPTI_CONV_OP_MARKER] && (((struct tree_overload*)(tree_check ((b), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2042, __FUNCTION__, (OVERLOAD))))->function) == cp_global_trees [CPTI_CONV_OP_MARKER]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2042, __FUNCTION__), 0 : 0)); | ||||
2043 | a = OVL_CHAIN (a)(((struct tree_overload*)(tree_check ((a), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2043, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
2044 | b = OVL_CHAIN (b)(((struct tree_overload*)(tree_check ((b), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2044, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
2045 | } | ||||
2046 | |||||
2047 | if (TREE_CODE (a)((enum tree_code) (a)->base.code) == OVERLOAD) | ||||
2048 | a = OVL_FUNCTION (a)(((struct tree_overload*)(tree_check ((a), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2048, __FUNCTION__, (OVERLOAD))))->function); | ||||
2049 | if (TREE_CODE (b)((enum tree_code) (b)->base.code) == OVERLOAD) | ||||
2050 | b = OVL_FUNCTION (b)(((struct tree_overload*)(tree_check ((b), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2050, __FUNCTION__, (OVERLOAD))))->function); | ||||
2051 | |||||
2052 | /* We're in STAT_HACK or USING_DECL territory (or possibly error-land). */ | ||||
2053 | if (TREE_CODE (a)((enum tree_code) (a)->base.code) != TREE_CODE (b)((enum tree_code) (b)->base.code)) | ||||
2054 | { | ||||
2055 | /* If one of them is a TYPE_DECL, it loses. */ | ||||
2056 | if (TREE_CODE (a)((enum tree_code) (a)->base.code) == TYPE_DECL) | ||||
2057 | return +1; | ||||
2058 | else if (TREE_CODE (b)((enum tree_code) (b)->base.code) == TYPE_DECL) | ||||
2059 | return -1; | ||||
2060 | |||||
2061 | /* If one of them is a USING_DECL, it loses. */ | ||||
2062 | if (TREE_CODE (a)((enum tree_code) (a)->base.code) == USING_DECL) | ||||
2063 | return +1; | ||||
2064 | else if (TREE_CODE (b)((enum tree_code) (b)->base.code) == USING_DECL) | ||||
2065 | return -1; | ||||
2066 | |||||
2067 | /* There are no other cases with different kinds of decls, as | ||||
2068 | duplicate detection should have kicked in earlier. However, | ||||
2069 | some erroneous cases get though. */ | ||||
2070 | gcc_assert (errorcount)((void)(!((global_dc)->diagnostic_count[(int) (DK_ERROR)]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2070, __FUNCTION__), 0 : 0)); | ||||
2071 | } | ||||
2072 | |||||
2073 | /* Using source location would be the best thing here, but we can | ||||
2074 | get identically-located decls in the following circumstances: | ||||
2075 | |||||
2076 | 1) duplicate artificial type-decls for the same type. | ||||
2077 | |||||
2078 | 2) pack expansions of using-decls. | ||||
2079 | |||||
2080 | We should not be doing #1, but in either case it doesn't matter | ||||
2081 | how we order these. Use UID as a proxy for source ordering, so | ||||
2082 | that identically-located decls still have a well-defined stable | ||||
2083 | ordering. */ | ||||
2084 | if (DECL_UID (a)((contains_struct_check ((a), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2084, __FUNCTION__))->decl_minimal.uid) != DECL_UID (b)((contains_struct_check ((b), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2084, __FUNCTION__))->decl_minimal.uid)) | ||||
2085 | return DECL_UID (a)((contains_struct_check ((a), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2085, __FUNCTION__))->decl_minimal.uid) < DECL_UID (b)((contains_struct_check ((b), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2085, __FUNCTION__))->decl_minimal.uid) ? -1 : +1; | ||||
2086 | gcc_assert (a == b)((void)(!(a == b) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2086, __FUNCTION__), 0 : 0)); | ||||
2087 | return 0; | ||||
2088 | } | ||||
2089 | |||||
2090 | static struct { | ||||
2091 | gt_pointer_operator new_value; | ||||
2092 | void *cookie; | ||||
2093 | } resort_data; | ||||
2094 | |||||
2095 | /* This routine compares two fields like member_name_cmp but using the | ||||
2096 | pointer operator in resort_field_decl_data. We don't have to deal | ||||
2097 | with duplicates here. */ | ||||
2098 | |||||
2099 | static int | ||||
2100 | resort_member_name_cmp (const void *a_p, const void *b_p) | ||||
2101 | { | ||||
2102 | tree a = *(const tree *)a_p; | ||||
2103 | tree b = *(const tree *)b_p; | ||||
2104 | tree name_a = OVL_NAME (a)((contains_struct_check ((ovl_first (a)), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2104, __FUNCTION__))->decl_minimal.name); | ||||
2105 | tree name_b = OVL_NAME (b)((contains_struct_check ((ovl_first (b)), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2105, __FUNCTION__))->decl_minimal.name); | ||||
2106 | |||||
2107 | resort_data.new_value (&name_a, &name_a, resort_data.cookie); | ||||
2108 | resort_data.new_value (&name_b, &name_b, resort_data.cookie); | ||||
2109 | |||||
2110 | gcc_checking_assert (name_a != name_b)((void)(!(name_a != name_b) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2110, __FUNCTION__), 0 : 0)); | ||||
2111 | |||||
2112 | return name_a < name_b ? -1 : +1; | ||||
2113 | } | ||||
2114 | |||||
2115 | /* Resort CLASSTYPE_MEMBER_VEC because pointers have been reordered. */ | ||||
2116 | |||||
2117 | void | ||||
2118 | resort_type_member_vec (void *obj, void */*orig_obj*/, | ||||
2119 | gt_pointer_operator new_value, void* cookie) | ||||
2120 | { | ||||
2121 | if (vec<tree, va_gc> *member_vec = (vec<tree, va_gc> *) obj) | ||||
2122 | { | ||||
2123 | resort_data.new_value = new_value; | ||||
2124 | resort_data.cookie = cookie; | ||||
2125 | member_vec->qsort (resort_member_name_cmp)qsort (resort_member_name_cmp); | ||||
2126 | } | ||||
2127 | } | ||||
2128 | |||||
2129 | /* Recursively count the number of fields in KLASS, including anonymous | ||||
2130 | union members. */ | ||||
2131 | |||||
2132 | static unsigned | ||||
2133 | count_class_fields (tree klass) | ||||
2134 | { | ||||
2135 | unsigned n_fields = 0; | ||||
2136 | |||||
2137 | for (tree fields = TYPE_FIELDS (klass)((tree_check3 ((klass), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2137, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))->type_non_common.values); fields; fields = DECL_CHAIN (fields)(((contains_struct_check (((contains_struct_check ((fields), ( TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2137, __FUNCTION__))), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2137, __FUNCTION__))->common.chain))) | ||||
2138 | if (DECL_DECLARES_FUNCTION_P (fields)(((enum tree_code) (fields)->base.code) == FUNCTION_DECL || (((enum tree_code) (fields)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((fields), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2138, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((fields ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2138, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL))) | ||||
2139 | /* Functions are dealt with separately. */; | ||||
2140 | else if (TREE_CODE (fields)((enum tree_code) (fields)->base.code) == FIELD_DECL | ||||
2141 | && ANON_AGGR_TYPE_P (TREE_TYPE (fields))((((((enum tree_code) (((contains_struct_check ((fields), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2141, __FUNCTION__))->typed.type))->base.code)) == RECORD_TYPE || (((enum tree_code) (((contains_struct_check ((fields), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2141, __FUNCTION__))->typed.type))->base.code)) == UNION_TYPE ) && ((tree_class_check ((((contains_struct_check ((fields ), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2141, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2141, __FUNCTION__))->type_common.lang_flag_5)) && (((tree_class_check ((((contains_struct_check ((fields), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2141, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2141, __FUNCTION__))->type_with_lang_specific.lang_specific ))->anon_aggr)) | ||||
2142 | n_fields += count_class_fields (TREE_TYPE (fields)((contains_struct_check ((fields), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2142, __FUNCTION__))->typed.type)); | ||||
2143 | else if (DECL_NAME (fields)((contains_struct_check ((fields), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2143, __FUNCTION__))->decl_minimal.name)) | ||||
2144 | n_fields += 1; | ||||
2145 | |||||
2146 | return n_fields; | ||||
2147 | } | ||||
2148 | |||||
2149 | /* Append all the nonfunction members fields of KLASS to MEMBER_VEC. | ||||
2150 | Recurse for anonymous members. MEMBER_VEC must have space. */ | ||||
2151 | |||||
2152 | static void | ||||
2153 | member_vec_append_class_fields (vec<tree, va_gc> *member_vec, tree klass) | ||||
2154 | { | ||||
2155 | for (tree fields = TYPE_FIELDS (klass)((tree_check3 ((klass), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2155, __FUNCTION__, (RECORD_TYPE), (UNION_TYPE), (QUAL_UNION_TYPE )))->type_non_common.values); fields; fields = DECL_CHAIN (fields)(((contains_struct_check (((contains_struct_check ((fields), ( TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2155, __FUNCTION__))), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2155, __FUNCTION__))->common.chain))) | ||||
2156 | if (DECL_DECLARES_FUNCTION_P (fields)(((enum tree_code) (fields)->base.code) == FUNCTION_DECL || (((enum tree_code) (fields)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((fields), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2156, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((fields ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2156, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL))) | ||||
2157 | /* Functions are handled separately. */; | ||||
2158 | else if (TREE_CODE (fields)((enum tree_code) (fields)->base.code) == FIELD_DECL | ||||
2159 | && ANON_AGGR_TYPE_P (TREE_TYPE (fields))((((((enum tree_code) (((contains_struct_check ((fields), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2159, __FUNCTION__))->typed.type))->base.code)) == RECORD_TYPE || (((enum tree_code) (((contains_struct_check ((fields), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2159, __FUNCTION__))->typed.type))->base.code)) == UNION_TYPE ) && ((tree_class_check ((((contains_struct_check ((fields ), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2159, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2159, __FUNCTION__))->type_common.lang_flag_5)) && (((tree_class_check ((((contains_struct_check ((fields), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2159, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2159, __FUNCTION__))->type_with_lang_specific.lang_specific ))->anon_aggr)) | ||||
2160 | member_vec_append_class_fields (member_vec, TREE_TYPE (fields)((contains_struct_check ((fields), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2160, __FUNCTION__))->typed.type)); | ||||
2161 | else if (DECL_NAME (fields)((contains_struct_check ((fields), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2161, __FUNCTION__))->decl_minimal.name)) | ||||
2162 | { | ||||
2163 | tree field = fields; | ||||
2164 | /* Mark a conv-op USING_DECL with the conv-op-marker. */ | ||||
2165 | if (TREE_CODE (field)((enum tree_code) (field)->base.code) == USING_DECL | ||||
2166 | && IDENTIFIER_CONV_OP_P (DECL_NAME (field))((((tree_not_check2 (((tree_check ((((contains_struct_check ( (field), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2166, __FUNCTION__))->decl_minimal.name)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2166, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2166, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((((contains_struct_check ((field), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2166, __FUNCTION__))->decl_minimal.name)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2166, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2166, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1) & (!((tree_not_check2 (((tree_check ((((contains_struct_check ((field), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2166, __FUNCTION__))->decl_minimal.name)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2166, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2166, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)))) | ||||
2167 | field = ovl_make (conv_op_markercp_global_trees[CPTI_CONV_OP_MARKER], field); | ||||
2168 | member_vec->quick_push (field); | ||||
2169 | } | ||||
2170 | } | ||||
2171 | |||||
2172 | /* Append all of the enum values of ENUMTYPE to MEMBER_VEC. | ||||
2173 | MEMBER_VEC must have space. */ | ||||
2174 | |||||
2175 | static void | ||||
2176 | member_vec_append_enum_values (vec<tree, va_gc> *member_vec, tree enumtype) | ||||
2177 | { | ||||
2178 | for (tree values = TYPE_VALUES (enumtype)((tree_check ((enumtype), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2178, __FUNCTION__, (ENUMERAL_TYPE)))->type_non_common.values ); | ||||
2179 | values; values = TREE_CHAIN (values)((contains_struct_check ((values), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2179, __FUNCTION__))->common.chain)) | ||||
2180 | member_vec->quick_push (TREE_VALUE (values)((tree_check ((values), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2180, __FUNCTION__, (TREE_LIST)))->list.value)); | ||||
2181 | } | ||||
2182 | |||||
2183 | /* MEMBER_VEC has just had new DECLs added to it, but is sorted. | ||||
2184 | DeDup adjacent DECLS of the same name. We already dealt with | ||||
2185 | conflict resolution when adding the fields or methods themselves. | ||||
2186 | There are three cases (which could all be combined): | ||||
2187 | 1) a TYPE_DECL and non TYPE_DECL. Deploy STAT_HACK as appropriate. | ||||
2188 | 2) a USING_DECL and an overload. If the USING_DECL is dependent, | ||||
2189 | it wins. Otherwise the OVERLOAD does. | ||||
2190 | 3) two USING_DECLS. ... | ||||
2191 | |||||
2192 | member_name_cmp will have ordered duplicates as | ||||
2193 | <fns><using><type> */ | ||||
2194 | |||||
2195 | static void | ||||
2196 | member_vec_dedup (vec<tree, va_gc> *member_vec) | ||||
2197 | { | ||||
2198 | unsigned len = member_vec->length (); | ||||
2199 | unsigned store = 0; | ||||
2200 | |||||
2201 | if (!len) | ||||
2202 | return; | ||||
2203 | |||||
2204 | tree name = OVL_NAME ((*member_vec)[0])((contains_struct_check ((ovl_first ((*member_vec)[0])), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2204, __FUNCTION__))->decl_minimal.name); | ||||
2205 | for (unsigned jx, ix = 0; ix < len; ix = jx) | ||||
2206 | { | ||||
2207 | tree current = NULL_TREE(tree) nullptr; | ||||
2208 | tree to_type = NULL_TREE(tree) nullptr; | ||||
2209 | tree to_using = NULL_TREE(tree) nullptr; | ||||
2210 | tree marker = NULL_TREE(tree) nullptr; | ||||
2211 | |||||
2212 | for (jx = ix; jx < len; jx++) | ||||
2213 | { | ||||
2214 | tree next = (*member_vec)[jx]; | ||||
2215 | if (jx != ix) | ||||
2216 | { | ||||
2217 | tree next_name = OVL_NAME (next)((contains_struct_check ((ovl_first (next)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2217, __FUNCTION__))->decl_minimal.name); | ||||
2218 | if (next_name != name) | ||||
2219 | { | ||||
2220 | name = next_name; | ||||
2221 | break; | ||||
2222 | } | ||||
2223 | } | ||||
2224 | |||||
2225 | if (IDENTIFIER_CONV_OP_P (name)((((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2225, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2225, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2225, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2225, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1) & (!((tree_not_check2 (((tree_check ((name) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2225, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2225, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)))) | ||||
2226 | { | ||||
2227 | marker = next; | ||||
2228 | next = OVL_CHAIN (next)(((struct tree_overload*)(tree_check ((next), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2228, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
2229 | } | ||||
2230 | |||||
2231 | if (TREE_CODE (next)((enum tree_code) (next)->base.code) == USING_DECL) | ||||
2232 | { | ||||
2233 | if (IDENTIFIER_CTOR_P (name)(((!((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2233, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2233, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2233, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2233, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1)) & (!((tree_not_check2 (((tree_check ((name ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2233, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2233, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)))) | ||||
2234 | /* Dependent inherited ctor. */ | ||||
2235 | continue; | ||||
2236 | |||||
2237 | next = strip_using_decl (next); | ||||
2238 | if (TREE_CODE (next)((enum tree_code) (next)->base.code) == USING_DECL) | ||||
2239 | { | ||||
2240 | to_using = next; | ||||
2241 | continue; | ||||
2242 | } | ||||
2243 | |||||
2244 | if (is_overloaded_fn (next)) | ||||
2245 | continue; | ||||
2246 | } | ||||
2247 | |||||
2248 | if (DECL_DECLARES_TYPE_P (next)(((enum tree_code) (next)->base.code) == TYPE_DECL || (((enum tree_code) (next)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((next), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2248, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((next ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2248, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == TYPE_DECL))) | ||||
2249 | { | ||||
2250 | to_type = next; | ||||
2251 | continue; | ||||
2252 | } | ||||
2253 | |||||
2254 | if (!current) | ||||
2255 | current = next; | ||||
2256 | } | ||||
2257 | |||||
2258 | if (to_using) | ||||
2259 | { | ||||
2260 | if (!current) | ||||
2261 | current = to_using; | ||||
2262 | else | ||||
2263 | current = ovl_make (to_using, current); | ||||
2264 | } | ||||
2265 | |||||
2266 | if (to_type) | ||||
2267 | { | ||||
2268 | if (!current) | ||||
2269 | current = to_type; | ||||
2270 | else | ||||
2271 | current = stat_hack (current, to_type); | ||||
2272 | } | ||||
2273 | |||||
2274 | if (current) | ||||
2275 | { | ||||
2276 | if (marker) | ||||
2277 | { | ||||
2278 | OVL_CHAIN (marker)(((struct tree_overload*)(tree_check ((marker), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2278, __FUNCTION__, (OVERLOAD))))->common.chain) = current; | ||||
2279 | current = marker; | ||||
2280 | } | ||||
2281 | (*member_vec)[store++] = current; | ||||
2282 | } | ||||
2283 | } | ||||
2284 | |||||
2285 | while (store++ < len) | ||||
2286 | member_vec->pop (); | ||||
2287 | } | ||||
2288 | |||||
2289 | /* Add the non-function members to CLASSTYPE_MEMBER_VEC. If there is | ||||
2290 | no existing MEMBER_VEC and fewer than 8 fields, do nothing. We | ||||
2291 | know there must be at least 1 field -- the self-reference | ||||
2292 | TYPE_DECL, except for anon aggregates, which will have at least | ||||
2293 | one field anyway. If EXTRA < 0, always create the vector. */ | ||||
2294 | |||||
2295 | vec<tree, va_gc> * | ||||
2296 | set_class_bindings (tree klass, int extra) | ||||
2297 | { | ||||
2298 | unsigned n_fields = count_class_fields (klass); | ||||
2299 | vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2299, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members); | ||||
2300 | |||||
2301 | if (member_vec || n_fields >= 8 || extra < 0) | ||||
2302 | { | ||||
2303 | /* Append the new fields. */ | ||||
2304 | vec_safe_reserve_exact (member_vec, n_fields + (extra >= 0 ? extra : 0)); | ||||
2305 | member_vec_append_class_fields (member_vec, klass); | ||||
2306 | } | ||||
2307 | |||||
2308 | if (member_vec) | ||||
2309 | { | ||||
2310 | CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2310, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members) = member_vec; | ||||
2311 | member_vec->qsort (member_name_cmp)qsort (member_name_cmp); | ||||
2312 | member_vec_dedup (member_vec); | ||||
2313 | } | ||||
2314 | |||||
2315 | return member_vec; | ||||
2316 | } | ||||
2317 | |||||
2318 | /* Insert lately defined enum ENUMTYPE into KLASS for the sorted case. */ | ||||
2319 | |||||
2320 | void | ||||
2321 | insert_late_enum_def_bindings (tree klass, tree enumtype) | ||||
2322 | { | ||||
2323 | int n_fields; | ||||
2324 | vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2324, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members); | ||||
2325 | |||||
2326 | /* The enum bindings will already be on the TYPE_FIELDS, so don't | ||||
2327 | count them twice. */ | ||||
2328 | if (!member_vec) | ||||
2329 | n_fields = count_class_fields (klass); | ||||
2330 | else | ||||
2331 | n_fields = list_length (TYPE_VALUES (enumtype)((tree_check ((enumtype), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2331, __FUNCTION__, (ENUMERAL_TYPE)))->type_non_common.values )); | ||||
2332 | |||||
2333 | if (member_vec || n_fields >= 8) | ||||
2334 | { | ||||
2335 | vec_safe_reserve_exact (member_vec, n_fields); | ||||
2336 | if (CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2336, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members)) | ||||
2337 | member_vec_append_enum_values (member_vec, enumtype); | ||||
2338 | else | ||||
2339 | member_vec_append_class_fields (member_vec, klass); | ||||
2340 | CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2340, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members) = member_vec; | ||||
2341 | member_vec->qsort (member_name_cmp)qsort (member_name_cmp); | ||||
2342 | member_vec_dedup (member_vec); | ||||
2343 | } | ||||
2344 | } | ||||
2345 | |||||
2346 | /* The binding oracle; see cp-tree.h. */ | ||||
2347 | |||||
2348 | cp_binding_oracle_function *cp_binding_oracle; | ||||
2349 | |||||
2350 | /* If we have a binding oracle, ask it for all namespace-scoped | ||||
2351 | definitions of NAME. */ | ||||
2352 | |||||
2353 | static inline void | ||||
2354 | query_oracle (tree name) | ||||
2355 | { | ||||
2356 | if (!cp_binding_oracle) | ||||
2357 | return; | ||||
2358 | |||||
2359 | /* LOOKED_UP holds the set of identifiers that we have already | ||||
2360 | looked up with the oracle. */ | ||||
2361 | static hash_set<tree> looked_up; | ||||
2362 | if (looked_up.add (name)) | ||||
2363 | return; | ||||
2364 | |||||
2365 | cp_binding_oracle (CP_ORACLE_IDENTIFIER, name); | ||||
2366 | } | ||||
2367 | |||||
2368 | #ifndef ENABLE_SCOPE_CHECKING0 | ||||
2369 | # define ENABLE_SCOPE_CHECKING0 0 | ||||
2370 | #else | ||||
2371 | # define ENABLE_SCOPE_CHECKING0 1 | ||||
2372 | #endif | ||||
2373 | |||||
2374 | /* A free list of "cxx_binding"s, connected by their PREVIOUS. */ | ||||
2375 | |||||
2376 | static GTY((deletable)) cxx_binding *free_bindings; | ||||
2377 | |||||
2378 | /* Initialize VALUE and TYPE field for BINDING, and set the PREVIOUS | ||||
2379 | field to NULL. */ | ||||
2380 | |||||
2381 | static inline void | ||||
2382 | cxx_binding_init (cxx_binding *binding, tree value, tree type) | ||||
2383 | { | ||||
2384 | binding->value = value; | ||||
2385 | binding->type = type; | ||||
2386 | binding->previous = NULLnullptr; | ||||
2387 | } | ||||
2388 | |||||
2389 | /* (GC)-allocate a binding object with VALUE and TYPE member initialized. */ | ||||
2390 | |||||
2391 | static cxx_binding * | ||||
2392 | cxx_binding_make (tree value, tree type) | ||||
2393 | { | ||||
2394 | cxx_binding *binding = free_bindings; | ||||
2395 | |||||
2396 | if (binding) | ||||
2397 | free_bindings = binding->previous; | ||||
2398 | else | ||||
2399 | binding = ggc_alloc<cxx_binding> (); | ||||
2400 | |||||
2401 | /* Clear flags by default. */ | ||||
2402 | LOCAL_BINDING_P (binding)((binding)->is_local) = false; | ||||
2403 | INHERITED_VALUE_BINDING_P (binding)((binding)->value_is_inherited) = false; | ||||
2404 | HIDDEN_TYPE_BINDING_P (binding)((binding)->type_is_hidden) = false; | ||||
2405 | |||||
2406 | cxx_binding_init (binding, value, type); | ||||
2407 | |||||
2408 | return binding; | ||||
2409 | } | ||||
2410 | |||||
2411 | /* Put BINDING back on the free list. */ | ||||
2412 | |||||
2413 | static inline void | ||||
2414 | cxx_binding_free (cxx_binding *binding) | ||||
2415 | { | ||||
2416 | binding->scope = NULLnullptr; | ||||
2417 | binding->previous = free_bindings; | ||||
2418 | free_bindings = binding; | ||||
2419 | } | ||||
2420 | |||||
2421 | /* Create a new binding for NAME (with the indicated VALUE and TYPE | ||||
2422 | bindings) in the class scope indicated by SCOPE. */ | ||||
2423 | |||||
2424 | static cxx_binding * | ||||
2425 | new_class_binding (tree name, tree value, tree type, cp_binding_level *scope) | ||||
2426 | { | ||||
2427 | cp_class_binding cb = {cxx_binding_make (value, type), name}; | ||||
2428 | cxx_binding *binding = cb.base; | ||||
2429 | vec_safe_push (scope->class_shadowed, cb); | ||||
2430 | binding->scope = scope; | ||||
2431 | return binding; | ||||
2432 | } | ||||
2433 | |||||
2434 | /* Make DECL the innermost binding for ID. The LEVEL is the binding | ||||
2435 | level at which this declaration is being bound. */ | ||||
2436 | |||||
2437 | void | ||||
2438 | push_binding (tree id, tree decl, cp_binding_level* level) | ||||
2439 | { | ||||
2440 | cxx_binding *binding; | ||||
2441 | |||||
2442 | if (level != class_binding_levelscope_chain->class_bindings) | ||||
2443 | { | ||||
2444 | binding = cxx_binding_make (decl, NULL_TREE(tree) nullptr); | ||||
2445 | binding->scope = level; | ||||
2446 | } | ||||
2447 | else | ||||
2448 | binding = new_class_binding (id, decl, /*type=*/NULL_TREE(tree) nullptr, level); | ||||
2449 | |||||
2450 | /* Now, fill in the binding information. */ | ||||
2451 | binding->previous = IDENTIFIER_BINDING (id)(((struct lang_identifier*)(tree_check ((id), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2451, __FUNCTION__, (IDENTIFIER_NODE))))->bindings); | ||||
2452 | LOCAL_BINDING_P (binding)((binding)->is_local) = (level != class_binding_levelscope_chain->class_bindings); | ||||
2453 | |||||
2454 | /* And put it on the front of the list of bindings for ID. */ | ||||
2455 | IDENTIFIER_BINDING (id)(((struct lang_identifier*)(tree_check ((id), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2455, __FUNCTION__, (IDENTIFIER_NODE))))->bindings) = binding; | ||||
2456 | } | ||||
2457 | |||||
2458 | /* Remove the binding for DECL which should be the innermost binding | ||||
2459 | for ID. */ | ||||
2460 | |||||
2461 | void | ||||
2462 | pop_local_binding (tree id, tree decl) | ||||
2463 | { | ||||
2464 | if (!id || IDENTIFIER_ANON_P (id)((tree_check ((id), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2464, __FUNCTION__, (IDENTIFIER_NODE)))->base.private_flag )) | ||||
2465 | /* It's easiest to write the loops that call this function without | ||||
2466 | checking whether or not the entities involved have names. We | ||||
2467 | get here for such an entity. */ | ||||
2468 | return; | ||||
2469 | |||||
2470 | /* Get the innermost binding for ID. */ | ||||
2471 | cxx_binding *binding = IDENTIFIER_BINDING (id)(((struct lang_identifier*)(tree_check ((id), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2471, __FUNCTION__, (IDENTIFIER_NODE))))->bindings); | ||||
2472 | |||||
2473 | /* The name should be bound. */ | ||||
2474 | gcc_assert (binding != NULL)((void)(!(binding != nullptr) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2474, __FUNCTION__), 0 : 0)); | ||||
2475 | |||||
2476 | /* The DECL will be either the ordinary binding or the type binding | ||||
2477 | for this identifier. Remove that binding. We don't have to | ||||
2478 | clear HIDDEN_TYPE_BINDING_P, as the whole binding will be going | ||||
2479 | away. */ | ||||
2480 | if (binding->value == decl) | ||||
2481 | binding->value = NULL_TREE(tree) nullptr; | ||||
2482 | else | ||||
2483 | { | ||||
2484 | gcc_checking_assert (binding->type == decl)((void)(!(binding->type == decl) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2484, __FUNCTION__), 0 : 0)); | ||||
2485 | binding->type = NULL_TREE(tree) nullptr; | ||||
2486 | } | ||||
2487 | |||||
2488 | if (!binding->value && !binding->type) | ||||
2489 | { | ||||
2490 | /* We're completely done with the innermost binding for this | ||||
2491 | identifier. Unhook it from the list of bindings. */ | ||||
2492 | IDENTIFIER_BINDING (id)(((struct lang_identifier*)(tree_check ((id), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2492, __FUNCTION__, (IDENTIFIER_NODE))))->bindings) = binding->previous; | ||||
2493 | |||||
2494 | /* Add it to the free list. */ | ||||
2495 | cxx_binding_free (binding); | ||||
2496 | } | ||||
2497 | } | ||||
2498 | |||||
2499 | /* Remove the bindings for the decls of the current level and leave | ||||
2500 | the current scope. */ | ||||
2501 | |||||
2502 | void | ||||
2503 | pop_bindings_and_leave_scope (void) | ||||
2504 | { | ||||
2505 | for (tree t = get_local_decls (); t; t = DECL_CHAIN (t)(((contains_struct_check (((contains_struct_check ((t), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2505, __FUNCTION__))), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2505, __FUNCTION__))->common.chain))) | ||||
2506 | { | ||||
2507 | tree decl = TREE_CODE (t)((enum tree_code) (t)->base.code) == TREE_LIST ? TREE_VALUE (t)((tree_check ((t), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2507, __FUNCTION__, (TREE_LIST)))->list.value) : t; | ||||
2508 | tree name = OVL_NAME (decl)((contains_struct_check ((ovl_first (decl)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2508, __FUNCTION__))->decl_minimal.name); | ||||
2509 | |||||
2510 | pop_local_binding (name, decl); | ||||
2511 | } | ||||
2512 | |||||
2513 | leave_scope (); | ||||
2514 | } | ||||
2515 | |||||
2516 | /* Strip non dependent using declarations. If DECL is dependent, | ||||
2517 | surreptitiously create a typename_type and return it. */ | ||||
2518 | |||||
2519 | tree | ||||
2520 | strip_using_decl (tree decl) | ||||
2521 | { | ||||
2522 | if (decl == NULL_TREE(tree) nullptr) | ||||
2523 | return NULL_TREE(tree) nullptr; | ||||
2524 | |||||
2525 | while (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == USING_DECL && !DECL_DEPENDENT_P (decl)((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2525, __FUNCTION__, (USING_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2525, __FUNCTION__))->decl_common.lang_flag_0)) | ||||
2526 | decl = USING_DECL_DECLS (decl)((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2526, __FUNCTION__, (USING_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2526, __FUNCTION__))->decl_common.initial); | ||||
2527 | |||||
2528 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == USING_DECL && DECL_DEPENDENT_P (decl)((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2528, __FUNCTION__, (USING_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2528, __FUNCTION__))->decl_common.lang_flag_0) | ||||
2529 | && USING_DECL_TYPENAME_P (decl)((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2529, __FUNCTION__, (USING_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2529, __FUNCTION__))->decl_common.lang_flag_1)) | ||||
2530 | { | ||||
2531 | /* We have found a type introduced by a using | ||||
2532 | declaration at class scope that refers to a dependent | ||||
2533 | type. | ||||
2534 | |||||
2535 | using typename :: [opt] nested-name-specifier unqualified-id ; | ||||
2536 | */ | ||||
2537 | decl = make_typename_type (USING_DECL_SCOPE (decl)((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2537, __FUNCTION__, (USING_DECL)))), (TS_DECL_NON_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2537, __FUNCTION__))->decl_non_common.result), | ||||
2538 | DECL_NAME (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2538, __FUNCTION__))->decl_minimal.name), | ||||
2539 | typename_type, tf_error); | ||||
2540 | if (decl != error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
2541 | decl = TYPE_NAME (decl)((tree_class_check ((decl), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2541, __FUNCTION__))->type_common.name); | ||||
2542 | } | ||||
2543 | |||||
2544 | return decl; | ||||
2545 | } | ||||
2546 | |||||
2547 | /* Return true if OVL is an overload for an anticipated builtin. */ | ||||
2548 | |||||
2549 | static bool | ||||
2550 | anticipated_builtin_p (tree ovl) | ||||
2551 | { | ||||
2552 | return (TREE_CODE (ovl)((enum tree_code) (ovl)->base.code) == OVERLOAD | ||||
2553 | && OVL_HIDDEN_P (ovl)((tree_not_check2 (((tree_check ((ovl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2553, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2553, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2) | ||||
2554 | && DECL_IS_UNDECLARED_BUILTIN (OVL_FUNCTION (ovl))(((contains_struct_check (((((struct tree_overload*)(tree_check ((ovl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2554, __FUNCTION__, (OVERLOAD))))->function)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2554, __FUNCTION__))->decl_minimal.locus) <= ((location_t ) 1))); | ||||
2555 | } | ||||
2556 | |||||
2557 | /* BINDING records an existing declaration for a name in the current scope. | ||||
2558 | But, DECL is another declaration for that same identifier in the | ||||
2559 | same scope. This is the `struct stat' hack whereby a non-typedef | ||||
2560 | class name or enum-name can be bound at the same level as some other | ||||
2561 | kind of entity. | ||||
2562 | 3.3.7/1 | ||||
2563 | |||||
2564 | A class name (9.1) or enumeration name (7.2) can be hidden by the | ||||
2565 | name of an object, function, or enumerator declared in the same scope. | ||||
2566 | If a class or enumeration name and an object, function, or enumerator | ||||
2567 | are declared in the same scope (in any order) with the same name, the | ||||
2568 | class or enumeration name is hidden wherever the object, function, or | ||||
2569 | enumerator name is visible. | ||||
2570 | |||||
2571 | It's the responsibility of the caller to check that | ||||
2572 | inserting this name is valid here. Returns nonzero if the new binding | ||||
2573 | was successful. */ | ||||
2574 | |||||
2575 | static bool | ||||
2576 | supplement_binding (cxx_binding *binding, tree decl) | ||||
2577 | { | ||||
2578 | auto_cond_timevar tv (TV_NAME_LOOKUP); | ||||
2579 | |||||
2580 | tree bval = binding->value; | ||||
2581 | bool ok = true; | ||||
2582 | tree target_bval = strip_using_decl (bval); | ||||
2583 | tree target_decl = strip_using_decl (decl); | ||||
2584 | |||||
2585 | if (TREE_CODE (target_decl)((enum tree_code) (target_decl)->base.code) == TYPE_DECL && DECL_ARTIFICIAL (target_decl)((contains_struct_check ((target_decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2585, __FUNCTION__))->decl_common.artificial_flag) | ||||
2586 | && target_decl != target_bval | ||||
2587 | && (TREE_CODE (target_bval)((enum tree_code) (target_bval)->base.code) != TYPE_DECL | ||||
2588 | /* We allow pushing an enum multiple times in a class | ||||
2589 | template in order to handle late matching of underlying | ||||
2590 | type on an opaque-enum-declaration followed by an | ||||
2591 | enum-specifier. */ | ||||
2592 | || (processing_template_declscope_chain->x_processing_template_decl | ||||
2593 | && TREE_CODE (TREE_TYPE (target_decl))((enum tree_code) (((contains_struct_check ((target_decl), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2593, __FUNCTION__))->typed.type))->base.code) == ENUMERAL_TYPE | ||||
2594 | && TREE_CODE (TREE_TYPE (target_bval))((enum tree_code) (((contains_struct_check ((target_bval), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2594, __FUNCTION__))->typed.type))->base.code) == ENUMERAL_TYPE | ||||
2595 | && (dependent_type_p (ENUM_UNDERLYING_TYPE((contains_struct_check (((tree_check ((((contains_struct_check ((target_decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2596, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2596, __FUNCTION__, (ENUMERAL_TYPE)))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2596, __FUNCTION__))->typed.type) | ||||
2596 | (TREE_TYPE (target_decl))((contains_struct_check (((tree_check ((((contains_struct_check ((target_decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2596, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2596, __FUNCTION__, (ENUMERAL_TYPE)))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2596, __FUNCTION__))->typed.type)) | ||||
2597 | || dependent_type_p (ENUM_UNDERLYING_TYPE((contains_struct_check (((tree_check ((((contains_struct_check ((target_bval), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2598, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2598, __FUNCTION__, (ENUMERAL_TYPE)))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2598, __FUNCTION__))->typed.type) | ||||
2598 | (TREE_TYPE (target_bval))((contains_struct_check (((tree_check ((((contains_struct_check ((target_bval), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2598, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2598, __FUNCTION__, (ENUMERAL_TYPE)))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2598, __FUNCTION__))->typed.type)))))) | ||||
2599 | /* The new name is the type name. */ | ||||
2600 | binding->type = decl; | ||||
2601 | else if (/* TARGET_BVAL is null when push_class_level_binding moves | ||||
2602 | an inherited type-binding out of the way to make room | ||||
2603 | for a new value binding. */ | ||||
2604 | !target_bval | ||||
2605 | /* TARGET_BVAL is error_mark_node when TARGET_DECL's name | ||||
2606 | has been used in a non-class scope prior declaration. | ||||
2607 | In that case, we should have already issued a | ||||
2608 | diagnostic; for graceful error recovery purpose, pretend | ||||
2609 | this was the intended declaration for that name. */ | ||||
2610 | || target_bval == error_mark_nodeglobal_trees[TI_ERROR_MARK] | ||||
2611 | /* If TARGET_BVAL is anticipated but has not yet been | ||||
2612 | declared, pretend it is not there at all. */ | ||||
2613 | || anticipated_builtin_p (target_bval)) | ||||
2614 | binding->value = decl; | ||||
2615 | else if (TREE_CODE (target_bval)((enum tree_code) (target_bval)->base.code) == TYPE_DECL | ||||
2616 | && DECL_ARTIFICIAL (target_bval)((contains_struct_check ((target_bval), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2616, __FUNCTION__))->decl_common.artificial_flag) | ||||
2617 | && target_decl != target_bval | ||||
2618 | && (TREE_CODE (target_decl)((enum tree_code) (target_decl)->base.code) != TYPE_DECL | ||||
2619 | || same_type_p (TREE_TYPE (target_decl),comptypes ((((contains_struct_check ((target_decl), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2619, __FUNCTION__))->typed.type)), (((contains_struct_check ((target_bval), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2620, __FUNCTION__))->typed.type)), 0) | ||||
2620 | TREE_TYPE (target_bval))comptypes ((((contains_struct_check ((target_decl), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2619, __FUNCTION__))->typed.type)), (((contains_struct_check ((target_bval), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2620, __FUNCTION__))->typed.type)), 0))) | ||||
2621 | { | ||||
2622 | /* The old binding was a type name. It was placed in | ||||
2623 | VALUE field because it was thought, at the point it was | ||||
2624 | declared, to be the only entity with such a name. Move the | ||||
2625 | type name into the type slot; it is now hidden by the new | ||||
2626 | binding. */ | ||||
2627 | binding->type = bval; | ||||
2628 | binding->value = decl; | ||||
2629 | binding->value_is_inherited = false; | ||||
2630 | } | ||||
2631 | else if (TREE_CODE (target_bval)((enum tree_code) (target_bval)->base.code) == TYPE_DECL | ||||
2632 | && TREE_CODE (target_decl)((enum tree_code) (target_decl)->base.code) == TYPE_DECL | ||||
2633 | && DECL_NAME (target_decl)((contains_struct_check ((target_decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2633, __FUNCTION__))->decl_minimal.name) == DECL_NAME (target_bval)((contains_struct_check ((target_bval), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2633, __FUNCTION__))->decl_minimal.name) | ||||
2634 | && binding->scope->kind != sk_class | ||||
2635 | && (same_type_p (TREE_TYPE (target_decl), TREE_TYPE (target_bval))comptypes ((((contains_struct_check ((target_decl), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2635, __FUNCTION__))->typed.type)), (((contains_struct_check ((target_bval), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2635, __FUNCTION__))->typed.type)), 0) | ||||
2636 | /* If either type involves template parameters, we must | ||||
2637 | wait until instantiation. */ | ||||
2638 | || uses_template_parms (TREE_TYPE (target_decl)((contains_struct_check ((target_decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2638, __FUNCTION__))->typed.type)) | ||||
2639 | || uses_template_parms (TREE_TYPE (target_bval)((contains_struct_check ((target_bval), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2639, __FUNCTION__))->typed.type)))) | ||||
2640 | /* We have two typedef-names, both naming the same type to have | ||||
2641 | the same name. In general, this is OK because of: | ||||
2642 | |||||
2643 | [dcl.typedef] | ||||
2644 | |||||
2645 | In a given scope, a typedef specifier can be used to redefine | ||||
2646 | the name of any type declared in that scope to refer to the | ||||
2647 | type to which it already refers. | ||||
2648 | |||||
2649 | However, in class scopes, this rule does not apply due to the | ||||
2650 | stricter language in [class.mem] prohibiting redeclarations of | ||||
2651 | members. */ | ||||
2652 | ok = false; | ||||
2653 | /* There can be two block-scope declarations of the same variable, | ||||
2654 | so long as they are `extern' declarations. However, there cannot | ||||
2655 | be two declarations of the same static data member: | ||||
2656 | |||||
2657 | [class.mem] | ||||
2658 | |||||
2659 | A member shall not be declared twice in the | ||||
2660 | member-specification. */ | ||||
2661 | else if (VAR_P (target_decl)(((enum tree_code) (target_decl)->base.code) == VAR_DECL) | ||||
2662 | && VAR_P (target_bval)(((enum tree_code) (target_bval)->base.code) == VAR_DECL) | ||||
2663 | && DECL_EXTERNAL (target_decl)((contains_struct_check ((target_decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2663, __FUNCTION__))->decl_common.decl_flag_1) && DECL_EXTERNAL (target_bval)((contains_struct_check ((target_bval), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2663, __FUNCTION__))->decl_common.decl_flag_1) | ||||
2664 | && !DECL_CLASS_SCOPE_P (target_decl)(((contains_struct_check ((target_decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2664, __FUNCTION__))->decl_minimal.context) && ( tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (((contains_struct_check ((target_decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2664, __FUNCTION__))->decl_minimal.context))->base.code ))] == tcc_type))) | ||||
2665 | { | ||||
2666 | duplicate_decls (decl, binding->value); | ||||
2667 | ok = false; | ||||
2668 | } | ||||
2669 | else if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == NAMESPACE_DECL | ||||
2670 | && TREE_CODE (bval)((enum tree_code) (bval)->base.code) == NAMESPACE_DECL | ||||
2671 | && DECL_NAMESPACE_ALIAS (decl)((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2671, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2671, __FUNCTION__))->decl_common.abstract_origin) | ||||
2672 | && DECL_NAMESPACE_ALIAS (bval)((contains_struct_check (((tree_check ((bval), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2672, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2672, __FUNCTION__))->decl_common.abstract_origin) | ||||
2673 | && ORIGINAL_NAMESPACE (bval)(((contains_struct_check (((tree_check ((bval), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2673, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2673, __FUNCTION__))->decl_common.abstract_origin) ? ((contains_struct_check (((tree_check ((bval), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2673, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2673, __FUNCTION__))->decl_common.abstract_origin) : (bval )) == ORIGINAL_NAMESPACE (decl)(((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2673, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2673, __FUNCTION__))->decl_common.abstract_origin) ? ((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2673, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2673, __FUNCTION__))->decl_common.abstract_origin) : (decl ))) | ||||
2674 | /* [namespace.alias] | ||||
2675 | |||||
2676 | In a declarative region, a namespace-alias-definition can be | ||||
2677 | used to redefine a namespace-alias declared in that declarative | ||||
2678 | region to refer only to the namespace to which it already | ||||
2679 | refers. */ | ||||
2680 | ok = false; | ||||
2681 | else if (TREE_CODE (bval)((enum tree_code) (bval)->base.code) == USING_DECL | ||||
2682 | && CONST_DECL_USING_P (decl)(((enum tree_code) (decl)->base.code) == CONST_DECL && ((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2682, __FUNCTION__))->typed.type) && ((enum tree_code ) (((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2682, __FUNCTION__))->typed.type))->base.code) == ENUMERAL_TYPE && ((contains_struct_check ((decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2682, __FUNCTION__))->decl_minimal.context) != ((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2682, __FUNCTION__))->typed.type))) | ||||
2683 | /* Let the clone hide the using-decl that introduced it. */ | ||||
2684 | binding->value = decl; | ||||
2685 | else | ||||
2686 | { | ||||
2687 | if (!error_operand_p (bval)) | ||||
2688 | diagnose_name_conflict (decl, bval); | ||||
2689 | ok = false; | ||||
2690 | } | ||||
2691 | |||||
2692 | return ok; | ||||
2693 | } | ||||
2694 | |||||
2695 | /* Diagnose a name conflict between DECL and BVAL. | ||||
2696 | |||||
2697 | This is non-static so maybe_push_used_methods can use it and avoid changing | ||||
2698 | the diagnostic for inherit/using4.C; otherwise it should not be used from | ||||
2699 | outside this file. */ | ||||
2700 | |||||
2701 | void | ||||
2702 | diagnose_name_conflict (tree decl, tree bval) | ||||
2703 | { | ||||
2704 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == TREE_CODE (bval)((enum tree_code) (bval)->base.code) | ||||
2705 | && TREE_CODE (decl)((enum tree_code) (decl)->base.code) != NAMESPACE_DECL | ||||
2706 | && !DECL_DECLARES_FUNCTION_P (decl)(((enum tree_code) (decl)->base.code) == FUNCTION_DECL || ( ((enum tree_code) (decl)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2706, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2706, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL)) | ||||
2707 | && (TREE_CODE (decl)((enum tree_code) (decl)->base.code) != TYPE_DECL | ||||
2708 | || DECL_ARTIFICIAL (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2708, __FUNCTION__))->decl_common.artificial_flag) == DECL_ARTIFICIAL (bval)((contains_struct_check ((bval), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2708, __FUNCTION__))->decl_common.artificial_flag)) | ||||
2709 | && CP_DECL_CONTEXT (decl)(!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2709, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2709, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2709, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]) == CP_DECL_CONTEXT (bval)(!(! (((contains_struct_check ((bval), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2709, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((bval), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2709, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((bval) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2709, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])) | ||||
2710 | { | ||||
2711 | if (concept_definition_p (decl)) | ||||
2712 | error ("redeclaration of %q#D with different template parameters", | ||||
2713 | decl); | ||||
2714 | else | ||||
2715 | error ("redeclaration of %q#D", decl); | ||||
2716 | } | ||||
2717 | else | ||||
2718 | error ("%q#D conflicts with a previous declaration", decl); | ||||
2719 | |||||
2720 | inform (location_of (bval), "previous declaration %q#D", bval); | ||||
2721 | } | ||||
2722 | |||||
2723 | /* Replace BINDING's current value on its scope's name list with | ||||
2724 | NEWVAL. */ | ||||
2725 | |||||
2726 | static void | ||||
2727 | update_local_overload (cxx_binding *binding, tree newval) | ||||
2728 | { | ||||
2729 | tree *d; | ||||
2730 | |||||
2731 | for (d = &binding->scope->names; ; d = &TREE_CHAIN (*d)((contains_struct_check ((*d), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2731, __FUNCTION__))->common.chain)) | ||||
2732 | if (*d == binding->value) | ||||
2733 | { | ||||
2734 | /* Stitch new list node in. */ | ||||
2735 | *d = tree_cons (DECL_NAME (*d)((contains_struct_check ((*d), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2735, __FUNCTION__))->decl_minimal.name), NULL_TREE(tree) nullptr, TREE_CHAIN (*d)((contains_struct_check ((*d), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2735, __FUNCTION__))->common.chain)); | ||||
2736 | break; | ||||
2737 | } | ||||
2738 | else if (TREE_CODE (*d)((enum tree_code) (*d)->base.code) == TREE_LIST && TREE_VALUE (*d)((tree_check ((*d), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2738, __FUNCTION__, (TREE_LIST)))->list.value) == binding->value) | ||||
2739 | break; | ||||
2740 | |||||
2741 | TREE_VALUE (*d)((tree_check ((*d), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2741, __FUNCTION__, (TREE_LIST)))->list.value) = newval; | ||||
2742 | } | ||||
2743 | |||||
2744 | /* Compares the parameter-type-lists of ONE and TWO and | ||||
2745 | returns false if they are different. If the DECLs are template | ||||
2746 | functions, the return types and the template parameter lists are | ||||
2747 | compared too (DR 565). */ | ||||
2748 | |||||
2749 | static bool | ||||
2750 | matching_fn_p (tree one, tree two) | ||||
2751 | { | ||||
2752 | if (TREE_CODE (one)((enum tree_code) (one)->base.code) != TREE_CODE (two)((enum tree_code) (two)->base.code)) | ||||
2753 | return false; | ||||
2754 | |||||
2755 | if (!compparms (TYPE_ARG_TYPES (TREE_TYPE (one))((tree_check2 ((((contains_struct_check ((one), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2755, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2755, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))->type_non_common .values), | ||||
2756 | TYPE_ARG_TYPES (TREE_TYPE (two))((tree_check2 ((((contains_struct_check ((two), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2756, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2756, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))->type_non_common .values))) | ||||
2757 | return false; | ||||
2758 | |||||
2759 | if (TREE_CODE (one)((enum tree_code) (one)->base.code) == TEMPLATE_DECL) | ||||
2760 | { | ||||
2761 | /* Compare template parms. */ | ||||
2762 | if (!comp_template_parms (DECL_TEMPLATE_PARMS (one)((struct tree_template_decl *)(const_cast<union tree_node * > ((((tree_check ((one), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2762, __FUNCTION__, (TEMPLATE_DECL))))))))->arguments, | ||||
2763 | DECL_TEMPLATE_PARMS (two)((struct tree_template_decl *)(const_cast<union tree_node * > ((((tree_check ((two), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2763, __FUNCTION__, (TEMPLATE_DECL))))))))->arguments)) | ||||
2764 | return false; | ||||
2765 | |||||
2766 | /* And return type. */ | ||||
2767 | if (!same_type_p (TREE_TYPE (TREE_TYPE (one)),comptypes ((((contains_struct_check ((((contains_struct_check ((one), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2767, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2767, __FUNCTION__))->typed.type)), (((contains_struct_check ((((contains_struct_check ((two), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2768, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2768, __FUNCTION__))->typed.type)), 0) | ||||
2768 | TREE_TYPE (TREE_TYPE (two)))comptypes ((((contains_struct_check ((((contains_struct_check ((one), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2767, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2767, __FUNCTION__))->typed.type)), (((contains_struct_check ((((contains_struct_check ((two), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2768, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2768, __FUNCTION__))->typed.type)), 0)) | ||||
2769 | return false; | ||||
2770 | } | ||||
2771 | |||||
2772 | if (!equivalently_constrained (one, two)) | ||||
2773 | return false; | ||||
2774 | |||||
2775 | return true; | ||||
2776 | } | ||||
2777 | |||||
2778 | /* Push DECL into nonclass LEVEL BINDING or SLOT. OLD is the current | ||||
2779 | binding value (possibly with anticipated builtins stripped). | ||||
2780 | Diagnose conflicts and return updated decl. */ | ||||
2781 | |||||
2782 | static tree | ||||
2783 | update_binding (cp_binding_level *level, cxx_binding *binding, tree *slot, | ||||
2784 | tree old, tree decl, bool hiding = false) | ||||
2785 | { | ||||
2786 | tree old_type = NULL_TREE(tree) nullptr; | ||||
2787 | bool hide_type = false; | ||||
2788 | bool hide_value = false; | ||||
2789 | |||||
2790 | if (!slot) | ||||
2791 | { | ||||
2792 | old_type = binding->type; | ||||
2793 | hide_type = HIDDEN_TYPE_BINDING_P (binding)((binding)->type_is_hidden); | ||||
2794 | if (!old_type) | ||||
2795 | hide_value = hide_type, hide_type = false; | ||||
2796 | } | ||||
2797 | else if (STAT_HACK_P (*slot)((*slot) && ((enum tree_code) (*slot)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((*slot) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2797, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2797, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
2798 | { | ||||
2799 | old_type = STAT_TYPE (*slot)((contains_struct_check ((*slot), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2799, __FUNCTION__))->typed.type); | ||||
2800 | hide_type = STAT_TYPE_HIDDEN_P (*slot)((tree_not_check2 (((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2800, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2800, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2); | ||||
2801 | hide_value = STAT_DECL_HIDDEN_P (*slot)((tree_not_check2 (((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2801, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2801, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0); | ||||
2802 | } | ||||
2803 | |||||
2804 | tree to_val = decl; | ||||
2805 | tree to_type = old_type; | ||||
2806 | bool local_overload = false; | ||||
2807 | |||||
2808 | gcc_assert (!level || level->kind == sk_namespace ? !binding((void)(!(!level || level->kind == sk_namespace ? !binding : level->kind != sk_class && !slot) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2809, __FUNCTION__), 0 : 0)) | ||||
2809 | : level->kind != sk_class && !slot)((void)(!(!level || level->kind == sk_namespace ? !binding : level->kind != sk_class && !slot) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2809, __FUNCTION__), 0 : 0)); | ||||
2810 | |||||
2811 | if (old == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
2812 | old = NULL_TREE(tree) nullptr; | ||||
2813 | |||||
2814 | if (DECL_IMPLICIT_TYPEDEF_P (decl)(((enum tree_code) (decl)->base.code) == TYPE_DECL && ((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2814, __FUNCTION__))->decl_common.lang_flag_2))) | ||||
2815 | { | ||||
2816 | /* Pushing an artificial decl. We should not find another | ||||
2817 | artificial decl here already -- lookup_elaborated_type will | ||||
2818 | have already found it. */ | ||||
2819 | gcc_checking_assert (!to_type((void)(!(!to_type && !(old && (((enum tree_code ) (old)->base.code) == TYPE_DECL && ((contains_struct_check ((old), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2820, __FUNCTION__))->decl_common.lang_flag_2)))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2820, __FUNCTION__), 0 : 0)) | ||||
2820 | && !(old && DECL_IMPLICIT_TYPEDEF_P (old)))((void)(!(!to_type && !(old && (((enum tree_code ) (old)->base.code) == TYPE_DECL && ((contains_struct_check ((old), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2820, __FUNCTION__))->decl_common.lang_flag_2)))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2820, __FUNCTION__), 0 : 0)); | ||||
2821 | |||||
2822 | if (old) | ||||
2823 | { | ||||
2824 | /* Put DECL into the type slot. */ | ||||
2825 | gcc_checking_assert (!to_type)((void)(!(!to_type) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2825, __FUNCTION__), 0 : 0)); | ||||
2826 | hide_type = hiding; | ||||
2827 | to_type = decl; | ||||
2828 | to_val = old; | ||||
2829 | } | ||||
2830 | else | ||||
2831 | hide_value = hiding; | ||||
2832 | |||||
2833 | goto done; | ||||
2834 | } | ||||
2835 | |||||
2836 | if (old && DECL_IMPLICIT_TYPEDEF_P (old)(((enum tree_code) (old)->base.code) == TYPE_DECL && ((contains_struct_check ((old), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2836, __FUNCTION__))->decl_common.lang_flag_2))) | ||||
2837 | { | ||||
2838 | /* OLD is an implicit typedef. Move it to to_type. */ | ||||
2839 | gcc_checking_assert (!to_type)((void)(!(!to_type) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2839, __FUNCTION__), 0 : 0)); | ||||
2840 | |||||
2841 | to_type = old; | ||||
2842 | hide_type = hide_value; | ||||
2843 | old = NULL_TREE(tree) nullptr; | ||||
2844 | hide_value = false; | ||||
2845 | } | ||||
2846 | |||||
2847 | if (DECL_DECLARES_FUNCTION_P (decl)(((enum tree_code) (decl)->base.code) == FUNCTION_DECL || ( ((enum tree_code) (decl)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2847, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2847, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL))) | ||||
2848 | { | ||||
2849 | if (!old) | ||||
2850 | ; | ||||
2851 | else if (OVL_P (old)(((enum tree_code) (old)->base.code) == FUNCTION_DECL || ( (enum tree_code) (old)->base.code) == OVERLOAD)) | ||||
2852 | { | ||||
2853 | for (ovl_iterator iter (old); iter; ++iter) | ||||
2854 | { | ||||
2855 | tree fn = *iter; | ||||
2856 | |||||
2857 | if (iter.using_p () && matching_fn_p (fn, decl)) | ||||
2858 | { | ||||
2859 | gcc_checking_assert (!iter.hidden_p ())((void)(!(!iter.hidden_p ()) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2859, __FUNCTION__), 0 : 0)); | ||||
2860 | /* If a function declaration in namespace scope or | ||||
2861 | block scope has the same name and the same | ||||
2862 | parameter-type- list (8.3.5) as a function | ||||
2863 | introduced by a using-declaration, and the | ||||
2864 | declarations do not declare the same function, | ||||
2865 | the program is ill-formed. [namespace.udecl]/14 */ | ||||
2866 | if (tree match = duplicate_decls (decl, fn, hiding)) | ||||
2867 | return match; | ||||
2868 | else | ||||
2869 | /* FIXME: To preserve existing error behavior, we | ||||
2870 | still push the decl. This might change. */ | ||||
2871 | diagnose_name_conflict (decl, fn); | ||||
2872 | } | ||||
2873 | } | ||||
2874 | } | ||||
2875 | else | ||||
2876 | goto conflict; | ||||
2877 | |||||
2878 | if (to_type != old_type | ||||
2879 | && warn_shadowglobal_options.x_warn_shadow | ||||
2880 | && MAYBE_CLASS_TYPE_P (TREE_TYPE (to_type))((((enum tree_code) (((contains_struct_check ((to_type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type))->base.code) == TEMPLATE_TYPE_PARM || ((enum tree_code) (((contains_struct_check ((to_type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type))->base.code) == TYPENAME_TYPE || ((enum tree_code) (((contains_struct_check ((to_type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type))->base.code) == TYPEOF_TYPE || ((enum tree_code) (((contains_struct_check ((to_type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type))->base.code) == BOUND_TEMPLATE_TEMPLATE_PARM || ((enum tree_code) (((contains_struct_check ((to_type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type))->base.code) == DECLTYPE_TYPE || ((enum tree_code) (((contains_struct_check ((to_type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type))->base.code) == TRAIT_TYPE || ((enum tree_code) (((contains_struct_check ((to_type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type))->base.code) == DEPENDENT_OPERATOR_TYPE ) || (((((enum tree_code) (((contains_struct_check ((to_type) , (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type))->base.code)) == RECORD_TYPE || (((enum tree_code) (((contains_struct_check ((to_type), ( TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type))->base.code)) == UNION_TYPE ) && ((tree_class_check ((((contains_struct_check ((to_type ), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2880, __FUNCTION__))->type_common.lang_flag_5))) | ||||
2881 | && !(DECL_IN_SYSTEM_HEADER (decl)(in_system_header_at (((contains_struct_check ((decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2881, __FUNCTION__))->decl_minimal.locus))) | ||||
2882 | && DECL_IN_SYSTEM_HEADER (to_type)(in_system_header_at (((contains_struct_check ((to_type), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2882, __FUNCTION__))->decl_minimal.locus))))) | ||||
2883 | warning (OPT_Wshadow, "%q#D hides constructor for %q#D", | ||||
2884 | decl, to_type); | ||||
2885 | |||||
2886 | local_overload = old && level && level->kind != sk_namespace; | ||||
2887 | to_val = ovl_insert (decl, old, -int (hiding)); | ||||
2888 | } | ||||
2889 | else if (old) | ||||
2890 | { | ||||
2891 | if (TREE_CODE (old)((enum tree_code) (old)->base.code) != TREE_CODE (decl)((enum tree_code) (decl)->base.code)) | ||||
2892 | /* Different kinds of decls conflict. */ | ||||
2893 | goto conflict; | ||||
2894 | else if (TREE_CODE (old)((enum tree_code) (old)->base.code) == TYPE_DECL) | ||||
2895 | { | ||||
2896 | if (same_type_p (TREE_TYPE (old), TREE_TYPE (decl))comptypes ((((contains_struct_check ((old), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2896, __FUNCTION__))->typed.type)), (((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2896, __FUNCTION__))->typed.type)), 0)) | ||||
2897 | /* Two type decls to the same type. Do nothing. */ | ||||
2898 | return old; | ||||
2899 | else | ||||
2900 | goto conflict; | ||||
2901 | } | ||||
2902 | else if (TREE_CODE (old)((enum tree_code) (old)->base.code) == NAMESPACE_DECL) | ||||
2903 | { | ||||
2904 | /* Two maybe-aliased namespaces. If they're to the same target | ||||
2905 | namespace, that's ok. */ | ||||
2906 | if (ORIGINAL_NAMESPACE (old)(((contains_struct_check (((tree_check ((old), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2906, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2906, __FUNCTION__))->decl_common.abstract_origin) ? ((contains_struct_check (((tree_check ((old), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2906, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2906, __FUNCTION__))->decl_common.abstract_origin) : (old )) != ORIGINAL_NAMESPACE (decl)(((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2906, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2906, __FUNCTION__))->decl_common.abstract_origin) ? ((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2906, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2906, __FUNCTION__))->decl_common.abstract_origin) : (decl ))) | ||||
2907 | goto conflict; | ||||
2908 | |||||
2909 | /* The new one must be an alias at this point. */ | ||||
2910 | gcc_assert (DECL_NAMESPACE_ALIAS (decl))((void)(!(((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2910, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2910, __FUNCTION__))->decl_common.abstract_origin)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2910, __FUNCTION__), 0 : 0)); | ||||
2911 | return old; | ||||
2912 | } | ||||
2913 | else if (TREE_CODE (old)((enum tree_code) (old)->base.code) == VAR_DECL) | ||||
2914 | { | ||||
2915 | /* There can be two block-scope declarations of the same | ||||
2916 | variable, so long as they are `extern' declarations. */ | ||||
2917 | if (!DECL_EXTERNAL (old)((contains_struct_check ((old), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2917, __FUNCTION__))->decl_common.decl_flag_1) || !DECL_EXTERNAL (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2917, __FUNCTION__))->decl_common.decl_flag_1)) | ||||
2918 | goto conflict; | ||||
2919 | else if (tree match = duplicate_decls (decl, old)) | ||||
2920 | { | ||||
2921 | gcc_checking_assert (!hide_value && !hiding)((void)(!(!hide_value && !hiding) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2921, __FUNCTION__), 0 : 0)); | ||||
2922 | return match; | ||||
2923 | } | ||||
2924 | else | ||||
2925 | goto conflict; | ||||
2926 | } | ||||
2927 | else | ||||
2928 | { | ||||
2929 | conflict: | ||||
2930 | diagnose_name_conflict (decl, old); | ||||
2931 | to_val = NULL_TREE(tree) nullptr; | ||||
2932 | } | ||||
2933 | } | ||||
2934 | else if (hiding) | ||||
2935 | hide_value = true; | ||||
2936 | |||||
2937 | done: | ||||
2938 | if (to_val) | ||||
2939 | { | ||||
2940 | if (local_overload) | ||||
2941 | { | ||||
2942 | gcc_checking_assert (binding->value && OVL_P (binding->value))((void)(!(binding->value && (((enum tree_code) (binding ->value)->base.code) == FUNCTION_DECL || ((enum tree_code ) (binding->value)->base.code) == OVERLOAD)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2942, __FUNCTION__), 0 : 0)); | ||||
2943 | update_local_overload (binding, to_val); | ||||
2944 | } | ||||
2945 | else if (level | ||||
2946 | && !(TREE_CODE (decl)((enum tree_code) (decl)->base.code) == NAMESPACE_DECL | ||||
2947 | && !DECL_NAMESPACE_ALIAS (decl)((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2947, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2947, __FUNCTION__))->decl_common.abstract_origin))) | ||||
2948 | /* Don't add namespaces here. They're done in | ||||
2949 | push_namespace. */ | ||||
2950 | add_decl_to_level (level, decl); | ||||
2951 | |||||
2952 | if (slot) | ||||
2953 | { | ||||
2954 | if (STAT_HACK_P (*slot)((*slot) && ((enum tree_code) (*slot)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((*slot) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2954, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2954, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
2955 | { | ||||
2956 | STAT_TYPE (*slot)((contains_struct_check ((*slot), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2956, __FUNCTION__))->typed.type) = to_type; | ||||
2957 | STAT_DECL (*slot)(((struct tree_overload*)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2957, __FUNCTION__, (OVERLOAD))))->function) = to_val; | ||||
2958 | STAT_TYPE_HIDDEN_P (*slot)((tree_not_check2 (((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2958, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2958, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2) = hide_type; | ||||
2959 | STAT_DECL_HIDDEN_P (*slot)((tree_not_check2 (((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2959, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2959, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0) = hide_value; | ||||
2960 | } | ||||
2961 | else if (to_type || hide_value) | ||||
2962 | { | ||||
2963 | *slot = stat_hack (to_val, to_type); | ||||
2964 | STAT_TYPE_HIDDEN_P (*slot)((tree_not_check2 (((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2964, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2964, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2) = hide_type; | ||||
2965 | STAT_DECL_HIDDEN_P (*slot)((tree_not_check2 (((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2965, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2965, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0) = hide_value; | ||||
2966 | } | ||||
2967 | else | ||||
2968 | { | ||||
2969 | gcc_checking_assert (!hide_type)((void)(!(!hide_type) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2969, __FUNCTION__), 0 : 0)); | ||||
2970 | *slot = to_val; | ||||
2971 | } | ||||
2972 | } | ||||
2973 | else | ||||
2974 | { | ||||
2975 | binding->type = to_type; | ||||
2976 | binding->value = to_val; | ||||
2977 | HIDDEN_TYPE_BINDING_P (binding)((binding)->type_is_hidden) = hide_type || hide_value; | ||||
2978 | } | ||||
2979 | } | ||||
2980 | |||||
2981 | return decl; | ||||
2982 | } | ||||
2983 | |||||
2984 | /* Table of identifiers to extern C declarations (or LISTS thereof). */ | ||||
2985 | |||||
2986 | static GTY(()) hash_table<named_decl_hash> *extern_c_decls; | ||||
2987 | |||||
2988 | /* DECL has C linkage. If we have an existing instance, make sure the | ||||
2989 | new one is compatible. Make sure it has the same exception | ||||
2990 | specification [7.5, 7.6]. Add DECL to the map. */ | ||||
2991 | |||||
2992 | static void | ||||
2993 | check_extern_c_conflict (tree decl) | ||||
2994 | { | ||||
2995 | /* Ignore artificial or system header decls. */ | ||||
2996 | if (DECL_ARTIFICIAL (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2996, __FUNCTION__))->decl_common.artificial_flag) || DECL_IN_SYSTEM_HEADER (decl)(in_system_header_at (((contains_struct_check ((decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 2996, __FUNCTION__))->decl_minimal.locus)))) | ||||
2997 | return; | ||||
2998 | |||||
2999 | /* This only applies to decls at namespace scope. */ | ||||
3000 | if (!DECL_NAMESPACE_SCOPE_P (decl)(!(((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3000, __FUNCTION__))->decl_common.lang_flag_0) && (((enum tree_code) (decl)->base.code) == CONST_DECL || (( enum tree_code) (decl)->base.code) == PARM_DECL || ((enum tree_code ) (decl)->base.code) == TYPE_DECL || ((enum tree_code) (decl )->base.code) == TEMPLATE_DECL)) && ((enum tree_code ) ((!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3000, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3000, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3000, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == NAMESPACE_DECL)) | ||||
3001 | return; | ||||
3002 | |||||
3003 | if (!extern_c_decls) | ||||
3004 | extern_c_decls = hash_table<named_decl_hash>::create_ggc (127); | ||||
3005 | |||||
3006 | tree *slot = extern_c_decls | ||||
3007 | ->find_slot_with_hash (DECL_NAME (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3007, __FUNCTION__))->decl_minimal.name), | ||||
3008 | IDENTIFIER_HASH_VALUE (DECL_NAME (decl))((tree_check ((((contains_struct_check ((decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3008, __FUNCTION__))->decl_minimal.name)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3008, __FUNCTION__, (IDENTIFIER_NODE)))->identifier.id.hash_value ), INSERT); | ||||
3009 | if (tree old = *slot) | ||||
3010 | { | ||||
3011 | if (TREE_CODE (old)((enum tree_code) (old)->base.code) == OVERLOAD) | ||||
3012 | old = OVL_FUNCTION (old)(((struct tree_overload*)(tree_check ((old), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3012, __FUNCTION__, (OVERLOAD))))->function); | ||||
3013 | |||||
3014 | int mismatch = 0; | ||||
3015 | if (DECL_CONTEXT (old)((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3015, __FUNCTION__))->decl_minimal.context) == DECL_CONTEXT (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3015, __FUNCTION__))->decl_minimal.context)) | ||||
3016 | ; /* If they're in the same context, we'll have already complained | ||||
3017 | about a (possible) mismatch, when inserting the decl. */ | ||||
3018 | else if (!decls_match (decl, old)) | ||||
3019 | mismatch = 1; | ||||
3020 | else if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == FUNCTION_DECL | ||||
3021 | && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old))((tree_class_check (((tree_check2 ((((contains_struct_check ( (old), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3021, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3021, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3021, __FUNCTION__))->type_non_common.lang_1), | ||||
3022 | TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl))((tree_class_check (((tree_check2 ((((contains_struct_check ( (decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3022, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3022, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3022, __FUNCTION__))->type_non_common.lang_1), | ||||
3023 | ce_normal)) | ||||
3024 | mismatch = -1; | ||||
3025 | else if (DECL_ASSEMBLER_NAME_SET_P (old)(((contains_struct_check ((old), (TS_DECL_WITH_VIS), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3025, __FUNCTION__))->decl_with_vis.assembler_name) != ( tree) nullptr)) | ||||
3026 | SET_DECL_ASSEMBLER_NAME (decl, DECL_ASSEMBLER_NAME (old))overwrite_decl_assembler_name (decl, decl_assembler_name (old )); | ||||
3027 | |||||
3028 | if (mismatch) | ||||
3029 | { | ||||
3030 | auto_diagnostic_group d; | ||||
3031 | pedwarn (DECL_SOURCE_LOCATION (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3031, __FUNCTION__))->decl_minimal.locus), 0, | ||||
3032 | "conflicting C language linkage declaration %q#D", decl); | ||||
3033 | inform (DECL_SOURCE_LOCATION (old)((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3033, __FUNCTION__))->decl_minimal.locus), | ||||
3034 | "previous declaration %q#D", old); | ||||
3035 | if (mismatch < 0) | ||||
3036 | inform (DECL_SOURCE_LOCATION (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3036, __FUNCTION__))->decl_minimal.locus), | ||||
3037 | "due to different exception specifications"); | ||||
3038 | } | ||||
3039 | else | ||||
3040 | { | ||||
3041 | if (old == *slot) | ||||
3042 | /* The hash table expects OVERLOADS, so construct one with | ||||
3043 | OLD as both the function and the chain. This allocate | ||||
3044 | an excess OVERLOAD node, but it's rare to have multiple | ||||
3045 | extern "C" decls of the same name. And we save | ||||
3046 | complicating the hash table logic (which is used | ||||
3047 | elsewhere). */ | ||||
3048 | *slot = ovl_make (old, old); | ||||
3049 | |||||
3050 | slot = &OVL_CHAIN (*slot)(((struct tree_overload*)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3050, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
3051 | |||||
3052 | /* Chain it on for c_linkage_binding's use. */ | ||||
3053 | *slot = tree_cons (NULL_TREE(tree) nullptr, decl, *slot); | ||||
3054 | } | ||||
3055 | } | ||||
3056 | else | ||||
3057 | *slot = decl; | ||||
3058 | } | ||||
3059 | |||||
3060 | /* Returns a list of C-linkage decls with the name NAME. Used in | ||||
3061 | c-family/c-pragma.cc to implement redefine_extname pragma. */ | ||||
3062 | |||||
3063 | tree | ||||
3064 | c_linkage_bindings (tree name) | ||||
3065 | { | ||||
3066 | if (extern_c_decls) | ||||
3067 | if (tree *slot = extern_c_decls | ||||
3068 | ->find_slot_with_hash (name, IDENTIFIER_HASH_VALUE (name)((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3068, __FUNCTION__, (IDENTIFIER_NODE)))->identifier.id.hash_value ), NO_INSERT)) | ||||
3069 | { | ||||
3070 | tree result = *slot; | ||||
3071 | if (TREE_CODE (result)((enum tree_code) (result)->base.code) == OVERLOAD) | ||||
3072 | result = OVL_CHAIN (result)(((struct tree_overload*)(tree_check ((result), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3072, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
3073 | return result; | ||||
3074 | } | ||||
3075 | |||||
3076 | return NULL_TREE(tree) nullptr; | ||||
3077 | } | ||||
3078 | |||||
3079 | /* Subroutine of check_local_shadow. */ | ||||
3080 | |||||
3081 | static void | ||||
3082 | inform_shadowed (tree shadowed) | ||||
3083 | { | ||||
3084 | inform (DECL_SOURCE_LOCATION (shadowed)((contains_struct_check ((shadowed), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3084, __FUNCTION__))->decl_minimal.locus), | ||||
3085 | "shadowed declaration is here"); | ||||
3086 | } | ||||
3087 | |||||
3088 | /* DECL is being declared at a local scope. Emit suitable shadow | ||||
3089 | warnings. */ | ||||
3090 | |||||
3091 | static void | ||||
3092 | check_local_shadow (tree decl) | ||||
3093 | { | ||||
3094 | /* Don't complain about the parms we push and then pop | ||||
3095 | while tentatively parsing a function declarator. */ | ||||
3096 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == PARM_DECL && !DECL_CONTEXT (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3096, __FUNCTION__))->decl_minimal.context)) | ||||
3097 | return; | ||||
3098 | |||||
3099 | /* External decls are something else. */ | ||||
3100 | if (DECL_EXTERNAL (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3100, __FUNCTION__))->decl_common.decl_flag_1)) | ||||
3101 | return; | ||||
3102 | |||||
3103 | tree old = NULL_TREE(tree) nullptr; | ||||
3104 | cp_binding_level *old_scope = NULLnullptr; | ||||
3105 | if (cxx_binding *binding = outer_binding (DECL_NAME (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3105, __FUNCTION__))->decl_minimal.name), NULLnullptr, true)) | ||||
3106 | { | ||||
3107 | old = binding->value; | ||||
3108 | old_scope = binding->scope; | ||||
3109 | } | ||||
3110 | |||||
3111 | if (old | ||||
3112 | && (TREE_CODE (old)((enum tree_code) (old)->base.code) == PARM_DECL | ||||
3113 | || VAR_P (old)(((enum tree_code) (old)->base.code) == VAR_DECL) | ||||
3114 | || (TREE_CODE (old)((enum tree_code) (old)->base.code) == TYPE_DECL | ||||
3115 | && (!DECL_ARTIFICIAL (old)((contains_struct_check ((old), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3115, __FUNCTION__))->decl_common.artificial_flag) | ||||
3116 | || TREE_CODE (decl)((enum tree_code) (decl)->base.code) == TYPE_DECL))) | ||||
3117 | && DECL_FUNCTION_SCOPE_P (old)(((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3117, __FUNCTION__))->decl_minimal.context) && ( (enum tree_code) (((contains_struct_check ((old), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3117, __FUNCTION__))->decl_minimal.context))->base.code ) == FUNCTION_DECL) | ||||
3118 | && (!DECL_ARTIFICIAL (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3118, __FUNCTION__))->decl_common.artificial_flag) | ||||
3119 | || is_capture_proxy (decl) | ||||
3120 | || DECL_IMPLICIT_TYPEDEF_P (decl)(((enum tree_code) (decl)->base.code) == TYPE_DECL && ((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3120, __FUNCTION__))->decl_common.lang_flag_2)) | ||||
3121 | || (VAR_P (decl)(((enum tree_code) (decl)->base.code) == VAR_DECL) && DECL_ANON_UNION_VAR_P (decl)(((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3121, __FUNCTION__, (VAR_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3121, __FUNCTION__))->decl_common.lang_flag_4))))) | ||||
3122 | { | ||||
3123 | /* DECL shadows a local thing possibly of interest. */ | ||||
3124 | |||||
3125 | /* DR 2211: check that captures and parameters | ||||
3126 | do not have the same name. */ | ||||
3127 | if (is_capture_proxy (decl)) | ||||
3128 | { | ||||
3129 | if (current_lambda_expr () | ||||
3130 | && DECL_CONTEXT (old)((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3130, __FUNCTION__))->decl_minimal.context) == lambda_function (current_lambda_expr ()) | ||||
3131 | && TREE_CODE (old)((enum tree_code) (old)->base.code) == PARM_DECL | ||||
3132 | && DECL_NAME (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3132, __FUNCTION__))->decl_minimal.name) != this_identifiercp_global_trees[CPTI_THIS_IDENTIFIER]) | ||||
3133 | { | ||||
3134 | error_at (DECL_SOURCE_LOCATION (old)((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3134, __FUNCTION__))->decl_minimal.locus), | ||||
3135 | "lambda parameter %qD " | ||||
3136 | "previously declared as a capture", old); | ||||
3137 | } | ||||
3138 | return; | ||||
3139 | } | ||||
3140 | /* Don't complain if it's from an enclosing function. */ | ||||
3141 | else if (DECL_CONTEXT (old)((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3141, __FUNCTION__))->decl_minimal.context) == current_function_decl | ||||
3142 | && TREE_CODE (decl)((enum tree_code) (decl)->base.code) != PARM_DECL | ||||
3143 | && TREE_CODE (old)((enum tree_code) (old)->base.code) == PARM_DECL) | ||||
3144 | { | ||||
3145 | /* Go to where the parms should be and see if we find | ||||
3146 | them there. */ | ||||
3147 | cp_binding_level *b = current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->level_chain; | ||||
3148 | |||||
3149 | if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl)(((tree_check (((((enum tree_code) (current_function_decl)-> base.code) == TEMPLATE_DECL ? ((struct tree_template_decl *)( const_cast<union tree_node *> ((((tree_check ((current_function_decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (TEMPLATE_DECL))))))))->result : current_function_decl )), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (FUNCTION_DECL)))->decl_with_vis.cxx_constructor ) || ((tree_check (((((enum tree_code) (current_function_decl )->base.code) == TEMPLATE_DECL ? ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((current_function_decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (TEMPLATE_DECL))))))))->result : current_function_decl )), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (FUNCTION_DECL)))->decl_with_vis.cxx_destructor ) || ((((enum tree_code) (current_function_decl)->base.code ) == FUNCTION_DECL || (((enum tree_code) (current_function_decl )->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((current_function_decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((current_function_decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL)) && (((tree_not_check2 ( ((tree_check ((((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.name)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) && ((__extension__ ({ struct lang_decl *lt = ((contains_struct_check (((((enum tree_code) (current_function_decl )->base.code) == TEMPLATE_DECL ? ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((current_function_decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (TEMPLATE_DECL))))))))->result : current_function_decl )), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_common.lang_specific); if (!( ((enum tree_code) (current_function_decl)->base.code) == FUNCTION_DECL || (((enum tree_code) (current_function_decl)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast <union tree_node *> ((((tree_check ((current_function_decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((current_function_decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL)) || lt->u.base.selector != lds_fn ) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__); <->u.fn; })->ovl_op_code) == OVL_OP_CALL_EXPR) && (((enum tree_code) ((!(! (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == RECORD_TYPE && (((( tree_class_check ((((tree_class_check (((!(! (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.name) && (tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (((tree_class_check ((((tree_class_check (((!(! (((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.name))->base.code)) ] == tcc_declaration) ? ((contains_struct_check ((((tree_class_check ((((tree_class_check (((!(! (((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.name)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.name) : ((tree_class_check ((((tree_class_check (((!(! (((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.name))) && ((tree_check ((((((tree_class_check ((((tree_class_check (((!(! (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.name) && (tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (((tree_class_check ((((tree_class_check (((!(! (((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.name))->base.code)) ] == tcc_declaration) ? ((contains_struct_check ((((tree_class_check ((((tree_class_check (((!(! (((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.name)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.name) : ((tree_class_check ((((tree_class_check (((!(! (((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((current_function_decl), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((current_function_decl ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__))->type_common.name)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3149, __FUNCTION__, (IDENTIFIER_NODE)))->base.protected_flag ))))) | ||||
3150 | /* Skip the ctor/dtor cleanup level. */ | ||||
3151 | b = b->level_chain; | ||||
3152 | |||||
3153 | /* [basic.scope.param] A parameter name shall not be redeclared | ||||
3154 | in the outermost block of the function definition. */ | ||||
3155 | if (b->kind == sk_function_parms) | ||||
3156 | { | ||||
3157 | error_at (DECL_SOURCE_LOCATION (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3157, __FUNCTION__))->decl_minimal.locus), | ||||
3158 | "declaration of %q#D shadows a parameter", decl); | ||||
3159 | inform (DECL_SOURCE_LOCATION (old)((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3159, __FUNCTION__))->decl_minimal.locus), | ||||
3160 | "%q#D previously declared here", old); | ||||
3161 | return; | ||||
3162 | } | ||||
3163 | } | ||||
3164 | |||||
3165 | /* The local structure or class can't use parameters of | ||||
3166 | the containing function anyway. */ | ||||
3167 | if (DECL_CONTEXT (old)((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3167, __FUNCTION__))->decl_minimal.context) != current_function_decl) | ||||
3168 | { | ||||
3169 | for (cp_binding_level *scope = current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)); | ||||
3170 | scope != old_scope; scope = scope->level_chain) | ||||
3171 | if (scope->kind == sk_class | ||||
3172 | && !LAMBDA_TYPE_P (scope->this_entity)(((enum tree_code) (scope->this_entity)->base.code) == RECORD_TYPE && ((((tree_class_check ((((tree_class_check ((scope ->this_entity), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.name) && (tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (((tree_class_check ((((tree_class_check ((scope->this_entity), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.name))->base.code)) ] == tcc_declaration) ? ((contains_struct_check ((((tree_class_check ((((tree_class_check ((scope->this_entity), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.name)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->decl_minimal.name) : ((tree_class_check ((((tree_class_check ((scope->this_entity), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.name))) && ((tree_check ((((((tree_class_check ((((tree_class_check ((scope->this_entity ), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.name) && (tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (((tree_class_check ((((tree_class_check ((scope->this_entity), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.name))->base.code)) ] == tcc_declaration) ? ((contains_struct_check ((((tree_class_check ((((tree_class_check ((scope->this_entity), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.name)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->decl_minimal.name) : ((tree_class_check ((((tree_class_check ((scope->this_entity), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.main_variant)), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__))->type_common.name)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3172, __FUNCTION__, (IDENTIFIER_NODE)))->base.protected_flag ))) | ||||
3173 | return; | ||||
3174 | } | ||||
3175 | /* Error if redeclaring a local declared in a | ||||
3176 | init-statement or in the condition of an if or | ||||
3177 | switch statement when the new declaration is in the | ||||
3178 | outermost block of the controlled statement. | ||||
3179 | Redeclaring a variable from a for or while condition is | ||||
3180 | detected elsewhere. */ | ||||
3181 | else if (VAR_P (old)(((enum tree_code) (old)->base.code) == VAR_DECL) | ||||
3182 | && old_scope == current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->level_chain | ||||
3183 | && (old_scope->kind == sk_cond || old_scope->kind == sk_for)) | ||||
3184 | { | ||||
3185 | auto_diagnostic_group d; | ||||
3186 | error_at (DECL_SOURCE_LOCATION (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3186, __FUNCTION__))->decl_minimal.locus), | ||||
3187 | "redeclaration of %q#D", decl); | ||||
3188 | inform (DECL_SOURCE_LOCATION (old)((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3188, __FUNCTION__))->decl_minimal.locus), | ||||
3189 | "%q#D previously declared here", old); | ||||
3190 | return; | ||||
3191 | } | ||||
3192 | /* C++11: | ||||
3193 | 3.3.3/3: The name declared in an exception-declaration (...) | ||||
3194 | shall not be redeclared in the outermost block of the handler. | ||||
3195 | 3.3.3/2: A parameter name shall not be redeclared (...) in | ||||
3196 | the outermost block of any handler associated with a | ||||
3197 | function-try-block. | ||||
3198 | 3.4.1/15: The function parameter names shall not be redeclared | ||||
3199 | in the exception-declaration nor in the outermost block of a | ||||
3200 | handler for the function-try-block. */ | ||||
3201 | else if ((TREE_CODE (old)((enum tree_code) (old)->base.code) == VAR_DECL | ||||
3202 | && old_scope == current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->level_chain | ||||
3203 | && old_scope->kind == sk_catch) | ||||
3204 | || (TREE_CODE (old)((enum tree_code) (old)->base.code) == PARM_DECL | ||||
3205 | && (current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->kind == sk_catch | ||||
3206 | || current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->level_chain->kind == sk_catch) | ||||
3207 | && in_function_try_handler((cfun + 0)->language)->x_in_function_try_handler)) | ||||
3208 | { | ||||
3209 | auto_diagnostic_group d; | ||||
3210 | if (permerror (DECL_SOURCE_LOCATION (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3210, __FUNCTION__))->decl_minimal.locus), | ||||
3211 | "redeclaration of %q#D", decl)) | ||||
3212 | inform (DECL_SOURCE_LOCATION (old)((contains_struct_check ((old), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3212, __FUNCTION__))->decl_minimal.locus), | ||||
3213 | "%q#D previously declared here", old); | ||||
3214 | return; | ||||
3215 | } | ||||
3216 | |||||
3217 | /* If '-Wshadow=compatible-local' is specified without other | ||||
3218 | -Wshadow= flags, we will warn only when the type of the | ||||
3219 | shadowing variable (DECL) can be converted to that of the | ||||
3220 | shadowed parameter (OLD_LOCAL). The reason why we only check | ||||
3221 | if DECL's type can be converted to OLD_LOCAL's type (but not the | ||||
3222 | other way around) is because when users accidentally shadow a | ||||
3223 | parameter, more than often they would use the variable | ||||
3224 | thinking (mistakenly) it's still the parameter. It would be | ||||
3225 | rare that users would use the variable in the place that | ||||
3226 | expects the parameter but thinking it's a new decl. | ||||
3227 | If either object is a TYPE_DECL, '-Wshadow=compatible-local' | ||||
3228 | warns regardless of whether one of the types involved | ||||
3229 | is a subclass of the other, since that is never okay. */ | ||||
3230 | |||||
3231 | enum opt_code warning_code; | ||||
3232 | if (warn_shadowglobal_options.x_warn_shadow) | ||||
3233 | warning_code = OPT_Wshadow; | ||||
3234 | else if ((TREE_CODE (decl)((enum tree_code) (decl)->base.code) == TYPE_DECL) | ||||
3235 | ^ (TREE_CODE (old)((enum tree_code) (old)->base.code) == TYPE_DECL)) | ||||
3236 | /* If exactly one is a type, they aren't compatible. */ | ||||
3237 | warning_code = OPT_Wshadow_local; | ||||
3238 | else if ((TREE_TYPE (old)((contains_struct_check ((old), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3238, __FUNCTION__))->typed.type) | ||||
3239 | && TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3239, __FUNCTION__))->typed.type) | ||||
3240 | && same_type_p (TREE_TYPE (old), TREE_TYPE (decl))comptypes ((((contains_struct_check ((old), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3240, __FUNCTION__))->typed.type)), (((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3240, __FUNCTION__))->typed.type)), 0)) | ||||
3241 | || TREE_CODE (decl)((enum tree_code) (decl)->base.code) == TYPE_DECL | ||||
3242 | || TREE_CODE (old)((enum tree_code) (old)->base.code) == TYPE_DECL | ||||
3243 | || (!dependent_type_p (TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3243, __FUNCTION__))->typed.type)) | ||||
3244 | && !dependent_type_p (TREE_TYPE (old)((contains_struct_check ((old), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3244, __FUNCTION__))->typed.type)) | ||||
3245 | /* If the new decl uses auto, we don't yet know | ||||
3246 | its type (the old type cannot be using auto | ||||
3247 | at this point, without also being | ||||
3248 | dependent). This is an indication we're | ||||
3249 | (now) doing the shadow checking too | ||||
3250 | early. */ | ||||
3251 | && !type_uses_auto (TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3251, __FUNCTION__))->typed.type)) | ||||
3252 | && can_convert_arg (TREE_TYPE (old)((contains_struct_check ((old), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3252, __FUNCTION__))->typed.type), TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3252, __FUNCTION__))->typed.type), | ||||
3253 | decl, LOOKUP_IMPLICIT(((1 << 0)) | (1 << 2)), tf_none))) | ||||
3254 | warning_code = OPT_Wshadow_compatible_local; | ||||
3255 | else | ||||
3256 | warning_code = OPT_Wshadow_local; | ||||
3257 | |||||
3258 | const char *msg; | ||||
3259 | if (TREE_CODE (old)((enum tree_code) (old)->base.code) == PARM_DECL) | ||||
3260 | msg = "declaration of %q#D shadows a parameter"; | ||||
3261 | else if (is_capture_proxy (old)) | ||||
3262 | msg = "declaration of %qD shadows a lambda capture"; | ||||
3263 | else | ||||
3264 | msg = "declaration of %qD shadows a previous local"; | ||||
3265 | |||||
3266 | auto_diagnostic_group d; | ||||
3267 | if (warning_at (DECL_SOURCE_LOCATION (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3267, __FUNCTION__))->decl_minimal.locus), warning_code, msg, decl)) | ||||
3268 | inform_shadowed (old); | ||||
3269 | return; | ||||
3270 | } | ||||
3271 | |||||
3272 | if (!warn_shadowglobal_options.x_warn_shadow) | ||||
3273 | return; | ||||
3274 | |||||
3275 | /* Don't warn for artificial things that are not implicit typedefs. */ | ||||
3276 | if (DECL_ARTIFICIAL (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3276, __FUNCTION__))->decl_common.artificial_flag) && !DECL_IMPLICIT_TYPEDEF_P (decl)(((enum tree_code) (decl)->base.code) == TYPE_DECL && ((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3276, __FUNCTION__))->decl_common.lang_flag_2))) | ||||
3277 | return; | ||||
3278 | |||||
3279 | if (nonlambda_method_basetype ()) | ||||
3280 | if (tree member = lookup_member (current_nonlambda_class_type (), | ||||
3281 | DECL_NAME (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3281, __FUNCTION__))->decl_minimal.name), /*protect=*/0, | ||||
3282 | /*want_type=*/false, tf_warning_or_error)) | ||||
3283 | { | ||||
3284 | member = MAYBE_BASELINK_FUNCTIONS (member)((((enum tree_code) (member)->base.code) == BASELINK) ? (( (struct tree_baselink*) (tree_check ((member), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3284, __FUNCTION__, (BASELINK))))->functions) : member); | ||||
3285 | |||||
3286 | /* Warn if a variable shadows a non-function, or the variable | ||||
3287 | is a function or a pointer-to-function. */ | ||||
3288 | if ((!OVL_P (member)(((enum tree_code) (member)->base.code) == FUNCTION_DECL || ((enum tree_code) (member)->base.code) == OVERLOAD) | ||||
3289 | || TREE_CODE (decl)((enum tree_code) (decl)->base.code) == FUNCTION_DECL | ||||
3290 | || (TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3290, __FUNCTION__))->typed.type) | ||||
3291 | && (TYPE_PTRFN_P (TREE_TYPE (decl))((((enum tree_code) (((contains_struct_check ((decl), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3291, __FUNCTION__))->typed.type))->base.code) == POINTER_TYPE ) && ((enum tree_code) (((contains_struct_check ((((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3291, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3291, __FUNCTION__))->typed.type))->base.code) == FUNCTION_TYPE ) | ||||
3292 | || TYPE_PTRMEMFUNC_P (TREE_TYPE (decl))(((enum tree_code) (((contains_struct_check ((decl), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3292, __FUNCTION__))->typed.type))->base.code) == RECORD_TYPE && (((tree_class_check (((tree_check ((((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3292, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3292, __FUNCTION__, (RECORD_TYPE)))), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3292, __FUNCTION__))->type_common.lang_flag_2)))))) | ||||
3293 | && !warning_suppressed_p (decl, OPT_Wshadow)) | ||||
3294 | { | ||||
3295 | auto_diagnostic_group d; | ||||
3296 | if (warning_at (DECL_SOURCE_LOCATION (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3296, __FUNCTION__))->decl_minimal.locus), OPT_Wshadow, | ||||
3297 | "declaration of %qD shadows a member of %qT", | ||||
3298 | decl, current_nonlambda_class_type ()) | ||||
3299 | && DECL_P (member)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (member)->base.code))] == tcc_declaration)) | ||||
3300 | { | ||||
3301 | inform_shadowed (member); | ||||
3302 | suppress_warning (decl, OPT_Wshadow); | ||||
3303 | } | ||||
3304 | } | ||||
3305 | return; | ||||
3306 | } | ||||
3307 | |||||
3308 | /* Now look for a namespace shadow. */ | ||||
3309 | old = find_namespace_value (current_namespacescope_chain->old_namespace, DECL_NAME (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3309, __FUNCTION__))->decl_minimal.name)); | ||||
3310 | if (old | ||||
3311 | && (VAR_P (old)(((enum tree_code) (old)->base.code) == VAR_DECL) | ||||
3312 | || (TREE_CODE (old)((enum tree_code) (old)->base.code) == TYPE_DECL | ||||
3313 | && (!DECL_ARTIFICIAL (old)((contains_struct_check ((old), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3313, __FUNCTION__))->decl_common.artificial_flag) | ||||
3314 | || TREE_CODE (decl)((enum tree_code) (decl)->base.code) == TYPE_DECL))) | ||||
3315 | && !instantiating_current_function_p () | ||||
3316 | && !warning_suppressed_p (decl, OPT_Wshadow)) | ||||
3317 | /* XXX shadow warnings in outer-more namespaces */ | ||||
3318 | { | ||||
3319 | auto_diagnostic_group d; | ||||
3320 | if (warning_at (DECL_SOURCE_LOCATION (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3320, __FUNCTION__))->decl_minimal.locus), OPT_Wshadow, | ||||
3321 | "declaration of %qD shadows a global declaration", | ||||
3322 | decl)) | ||||
3323 | { | ||||
3324 | inform_shadowed (old); | ||||
3325 | suppress_warning (decl, OPT_Wshadow); | ||||
3326 | } | ||||
3327 | return; | ||||
3328 | } | ||||
3329 | |||||
3330 | return; | ||||
3331 | } | ||||
3332 | |||||
3333 | /* DECL is being pushed inside function CTX. Set its context, if | ||||
3334 | needed. */ | ||||
3335 | |||||
3336 | static void | ||||
3337 | set_decl_context_in_fn (tree ctx, tree decl) | ||||
3338 | { | ||||
3339 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == FUNCTION_DECL | ||||
3340 | || (VAR_P (decl)(((enum tree_code) (decl)->base.code) == VAR_DECL) && DECL_EXTERNAL (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3340, __FUNCTION__))->decl_common.decl_flag_1))) | ||||
3341 | /* Make sure local externs are marked as such. OMP UDRs really | ||||
3342 | are nested functions. */ | ||||
3343 | gcc_checking_assert (DECL_LOCAL_DECL_P (decl)((void)(!(((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3343, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3343, __FUNCTION__))->decl_common.lang_flag_0) && ((!(((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_common.lang_flag_0) && (((enum tree_code) (decl)->base.code) == CONST_DECL || (( enum tree_code) (decl)->base.code) == PARM_DECL || ((enum tree_code ) (decl)->base.code) == TYPE_DECL || ((enum tree_code) (decl )->base.code) == TEMPLATE_DECL)) && ((enum tree_code ) ((!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == NAMESPACE_DECL) || (((enum tree_code ) (decl)->base.code) == FUNCTION_DECL && (__extension__ ({ struct lang_decl *lt = ((contains_struct_check (((((enum tree_code ) ((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == TEMPLATE_DECL ? ((struct tree_template_decl *)(const_cast<union tree_node *> (( ((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result : (contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))->decl_common.lang_specific); if (!( ((enum tree_code) ((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == FUNCTION_DECL || (( (enum tree_code) ((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL)) || lt->u.base.selector != lds_fn ) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__); <->u.fn; })->omp_declare_reduction_p )))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__), 0 : 0)) | ||||
3344 | && (DECL_NAMESPACE_SCOPE_P (decl)((void)(!(((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3343, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3343, __FUNCTION__))->decl_common.lang_flag_0) && ((!(((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_common.lang_flag_0) && (((enum tree_code) (decl)->base.code) == CONST_DECL || (( enum tree_code) (decl)->base.code) == PARM_DECL || ((enum tree_code ) (decl)->base.code) == TYPE_DECL || ((enum tree_code) (decl )->base.code) == TEMPLATE_DECL)) && ((enum tree_code ) ((!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == NAMESPACE_DECL) || (((enum tree_code ) (decl)->base.code) == FUNCTION_DECL && (__extension__ ({ struct lang_decl *lt = ((contains_struct_check (((((enum tree_code ) ((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == TEMPLATE_DECL ? ((struct tree_template_decl *)(const_cast<union tree_node *> (( ((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result : (contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))->decl_common.lang_specific); if (!( ((enum tree_code) ((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == FUNCTION_DECL || (( (enum tree_code) ((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL)) || lt->u.base.selector != lds_fn ) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__); <->u.fn; })->omp_declare_reduction_p )))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__), 0 : 0)) | ||||
3345 | || (TREE_CODE (decl) == FUNCTION_DECL((void)(!(((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3343, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3343, __FUNCTION__))->decl_common.lang_flag_0) && ((!(((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_common.lang_flag_0) && (((enum tree_code) (decl)->base.code) == CONST_DECL || (( enum tree_code) (decl)->base.code) == PARM_DECL || ((enum tree_code ) (decl)->base.code) == TYPE_DECL || ((enum tree_code) (decl )->base.code) == TEMPLATE_DECL)) && ((enum tree_code ) ((!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == NAMESPACE_DECL) || (((enum tree_code ) (decl)->base.code) == FUNCTION_DECL && (__extension__ ({ struct lang_decl *lt = ((contains_struct_check (((((enum tree_code ) ((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == TEMPLATE_DECL ? ((struct tree_template_decl *)(const_cast<union tree_node *> (( ((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result : (contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))->decl_common.lang_specific); if (!( ((enum tree_code) ((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == FUNCTION_DECL || (( (enum tree_code) ((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL)) || lt->u.base.selector != lds_fn ) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__); <->u.fn; })->omp_declare_reduction_p )))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__), 0 : 0)) | ||||
3346 | && DECL_OMP_DECLARE_REDUCTION_P (decl))))((void)(!(((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3343, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3343, __FUNCTION__))->decl_common.lang_flag_0) && ((!(((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_common.lang_flag_0) && (((enum tree_code) (decl)->base.code) == CONST_DECL || (( enum tree_code) (decl)->base.code) == PARM_DECL || ((enum tree_code ) (decl)->base.code) == TYPE_DECL || ((enum tree_code) (decl )->base.code) == TEMPLATE_DECL)) && ((enum tree_code ) ((!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3344, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == NAMESPACE_DECL) || (((enum tree_code ) (decl)->base.code) == FUNCTION_DECL && (__extension__ ({ struct lang_decl *lt = ((contains_struct_check (((((enum tree_code ) ((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == TEMPLATE_DECL ? ((struct tree_template_decl *)(const_cast<union tree_node *> (( ((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result : (contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))->decl_common.lang_specific); if (!( ((enum tree_code) ((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == FUNCTION_DECL || (( (enum tree_code) ((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__)))->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check (((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL)) || lt->u.base.selector != lds_fn ) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__); <->u.fn; })->omp_declare_reduction_p )))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3346, __FUNCTION__), 0 : 0)); | ||||
3347 | |||||
3348 | if (!DECL_CONTEXT (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3348, __FUNCTION__))->decl_minimal.context) | ||||
3349 | /* When parsing the parameter list of a function declarator, | ||||
3350 | don't set DECL_CONTEXT to an enclosing function. */ | ||||
3351 | && !(TREE_CODE (decl)((enum tree_code) (decl)->base.code) == PARM_DECL | ||||
3352 | && parsing_function_declarator ())) | ||||
3353 | DECL_CONTEXT (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3353, __FUNCTION__))->decl_minimal.context) = ctx; | ||||
3354 | } | ||||
3355 | |||||
3356 | /* DECL is a local extern decl. Find or create the namespace-scope | ||||
3357 | decl that it aliases. Also, determines the linkage of DECL. */ | ||||
3358 | |||||
3359 | void | ||||
3360 | push_local_extern_decl_alias (tree decl) | ||||
3361 | { | ||||
3362 | if (dependent_type_p (TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3362, __FUNCTION__))->typed.type)) | ||||
3363 | || (processing_template_declscope_chain->x_processing_template_decl | ||||
3364 | && VAR_P (decl)(((enum tree_code) (decl)->base.code) == VAR_DECL) | ||||
3365 | && CP_DECL_THREAD_LOCAL_P (decl)(((tree_not_check2 (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3365, __FUNCTION__, (VAR_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3365, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)))) | ||||
3366 | return; | ||||
3367 | /* EH specs were not part of the function type prior to c++17, but | ||||
3368 | we still can't go pushing dependent eh specs into the namespace. */ | ||||
3369 | if (cxx_dialect < cxx17 | ||||
3370 | && TREE_CODE (decl)((enum tree_code) (decl)->base.code) == FUNCTION_DECL | ||||
3371 | && (value_dependent_expression_p | ||||
3372 | (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl))((tree_class_check (((tree_check2 ((((contains_struct_check ( (decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3372, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3372, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3372, __FUNCTION__))->type_non_common.lang_1)))) | ||||
3373 | return; | ||||
3374 | |||||
3375 | gcc_checking_assert (!DECL_LANG_SPECIFIC (decl)((void)(!(!((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3375, __FUNCTION__))->decl_common.lang_specific) || !((( contains_struct_check ((template_info_decl_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3376, __FUNCTION__)), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3376, __FUNCTION__))->decl_common.lang_specific) ->u. min.template_info)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3376, __FUNCTION__), 0 : 0)) | ||||
3376 | || !DECL_TEMPLATE_INFO (decl))((void)(!(!((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3375, __FUNCTION__))->decl_common.lang_specific) || !((( contains_struct_check ((template_info_decl_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3376, __FUNCTION__)), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3376, __FUNCTION__))->decl_common.lang_specific) ->u. min.template_info)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3376, __FUNCTION__), 0 : 0)); | ||||
3377 | if (DECL_LANG_SPECIFIC (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_specific) && DECL_LOCAL_DECL_ALIAS (decl)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check (((((void)(!(((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__), 0 : 0)), decl)), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_specific); if (!( (((enum tree_code) ((((void)(!(((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__), 0 : 0)), decl))->base.code) == VAR_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__), 0 : 0)), decl))->base.code) == FUNCTION_DECL ) || ((enum tree_code) ((((void)(!(((contains_struct_check (( (tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__), 0 : 0)), decl))->base.code) == FIELD_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__), 0 : 0)), decl))->base.code) == CONST_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__), 0 : 0)), decl))->base.code) == TYPE_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__), 0 : 0)), decl))->base.code) == TEMPLATE_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__), 0 : 0)), decl))->base.code) == USING_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__), 0 : 0)), decl))->base.code) == CONCEPT_DECL )) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3377, __FUNCTION__); <->u.min; })->access)) | ||||
3378 | /* We're instantiating a non-dependent local decl, it already | ||||
3379 | knows the alias. */ | ||||
3380 | return; | ||||
3381 | |||||
3382 | tree alias = NULL_TREE(tree) nullptr; | ||||
3383 | |||||
3384 | if (DECL_SIZE (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3384, __FUNCTION__))->decl_common.size) && !TREE_CONSTANT (DECL_SIZE (decl))((non_type_check ((((contains_struct_check ((decl), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3384, __FUNCTION__))->decl_common.size)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3384, __FUNCTION__))->base.constant_flag)) | ||||
3385 | /* Do not let a VLA creep into a namespace. Diagnostic will be | ||||
3386 | emitted in layout_var_decl later. */ | ||||
3387 | alias = error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||
3388 | else | ||||
3389 | { | ||||
3390 | /* First look for a decl that matches. */ | ||||
3391 | tree ns = CP_DECL_CONTEXT (decl)(!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3391, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3391, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3391, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]); | ||||
3392 | tree binding = find_namespace_value (ns, DECL_NAME (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3392, __FUNCTION__))->decl_minimal.name)); | ||||
3393 | |||||
3394 | if (binding && TREE_CODE (binding)((enum tree_code) (binding)->base.code) != TREE_LIST) | ||||
3395 | for (ovl_iterator iter (binding); iter; ++iter) | ||||
3396 | if (decls_match (decl, *iter, /*record_versions*/false)) | ||||
3397 | { | ||||
3398 | alias = *iter; | ||||
3399 | break; | ||||
3400 | } | ||||
3401 | |||||
3402 | if (!alias) | ||||
3403 | { | ||||
3404 | /* No existing namespace-scope decl. Make one. */ | ||||
3405 | alias = copy_decl (decl); | ||||
3406 | if (TREE_CODE (alias)((enum tree_code) (alias)->base.code) == FUNCTION_DECL) | ||||
3407 | { | ||||
3408 | /* Recontextualize the parms. */ | ||||
3409 | for (tree *chain = &DECL_ARGUMENTS (alias)((tree_check ((alias), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3409, __FUNCTION__, (FUNCTION_DECL)))->function_decl.arguments ); | ||||
3410 | *chain; chain = &DECL_CHAIN (*chain)(((contains_struct_check (((contains_struct_check ((*chain), ( TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3410, __FUNCTION__))), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3410, __FUNCTION__))->common.chain))) | ||||
3411 | { | ||||
3412 | *chain = copy_decl (*chain); | ||||
3413 | DECL_CONTEXT (*chain)((contains_struct_check ((*chain), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3413, __FUNCTION__))->decl_minimal.context) = alias; | ||||
3414 | } | ||||
3415 | |||||
3416 | tree type = TREE_TYPE (alias)((contains_struct_check ((alias), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3416, __FUNCTION__))->typed.type); | ||||
3417 | for (tree args = TYPE_ARG_TYPES (type)((tree_check2 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3417, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))->type_non_common .values); | ||||
3418 | args; args = TREE_CHAIN (args)((contains_struct_check ((args), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3418, __FUNCTION__))->common.chain)) | ||||
3419 | if (TREE_PURPOSE (args)((tree_check ((args), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3419, __FUNCTION__, (TREE_LIST)))->list.purpose)) | ||||
3420 | { | ||||
3421 | /* There are default args. Lose them. */ | ||||
3422 | tree nargs = NULL_TREE(tree) nullptr; | ||||
3423 | tree *chain = &nargs; | ||||
3424 | for (args = TYPE_ARG_TYPES (type)((tree_check2 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3424, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))->type_non_common .values); | ||||
3425 | args; args = TREE_CHAIN (args)((contains_struct_check ((args), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3425, __FUNCTION__))->common.chain)) | ||||
3426 | if (args == void_list_nodeglobal_trees[TI_VOID_LIST_NODE]) | ||||
3427 | { | ||||
3428 | *chain = args; | ||||
3429 | break; | ||||
3430 | } | ||||
3431 | else | ||||
3432 | { | ||||
3433 | *chain | ||||
3434 | = build_tree_list (NULL_TREE(tree) nullptr, TREE_VALUE (args)((tree_check ((args), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3434, __FUNCTION__, (TREE_LIST)))->list.value)); | ||||
3435 | chain = &TREE_CHAIN (*chain)((contains_struct_check ((*chain), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3435, __FUNCTION__))->common.chain); | ||||
3436 | } | ||||
3437 | |||||
3438 | tree fn_type = build_function_type (TREE_TYPE (type)((contains_struct_check ((type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3438, __FUNCTION__))->typed.type), nargs); | ||||
3439 | |||||
3440 | fn_type = apply_memfn_quals | ||||
3441 | (fn_type, type_memfn_quals (type)); | ||||
3442 | |||||
3443 | fn_type = build_cp_fntype_variant | ||||
3444 | (fn_type, type_memfn_rqual (type), | ||||
3445 | TYPE_RAISES_EXCEPTIONS (type)((tree_class_check (((tree_check2 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3445, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3445, __FUNCTION__))->type_non_common.lang_1), | ||||
3446 | TYPE_HAS_LATE_RETURN_TYPE (type)(((tree_class_check (((tree_check2 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3446, __FUNCTION__, (FUNCTION_TYPE), (METHOD_TYPE)))), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3446, __FUNCTION__))->type_common.lang_flag_2))); | ||||
3447 | |||||
3448 | TREE_TYPE (alias)((contains_struct_check ((alias), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3448, __FUNCTION__))->typed.type) = fn_type; | ||||
3449 | break; | ||||
3450 | } | ||||
3451 | } | ||||
3452 | |||||
3453 | /* This is the real thing. */ | ||||
3454 | DECL_LOCAL_DECL_P (alias)((contains_struct_check (((tree_check2 ((alias), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3454, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3454, __FUNCTION__))->decl_common.lang_flag_0) = false; | ||||
3455 | |||||
3456 | /* Expected default linkage is from the namespace. */ | ||||
3457 | TREE_PUBLIC (alias)((alias)->base.public_flag) = TREE_PUBLIC (ns)((ns)->base.public_flag); | ||||
3458 | push_nested_namespace (ns); | ||||
3459 | alias = pushdecl (alias, /* hiding= */true); | ||||
3460 | pop_nested_namespace (ns); | ||||
3461 | if (VAR_P (decl)(((enum tree_code) (decl)->base.code) == VAR_DECL) | ||||
3462 | && CP_DECL_THREAD_LOCAL_P (decl)(((tree_not_check2 (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3462, __FUNCTION__, (VAR_DECL)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3462, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)) | ||||
3463 | && alias != error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
3464 | set_decl_tls_model (alias, DECL_TLS_MODEL (decl)decl_tls_model (decl)); | ||||
3465 | |||||
3466 | /* Adjust visibility. */ | ||||
3467 | determine_visibility (alias); | ||||
3468 | } | ||||
3469 | } | ||||
3470 | |||||
3471 | retrofit_lang_decl (decl); | ||||
3472 | DECL_LOCAL_DECL_ALIAS (decl)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check (((((void)(!(((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__), 0 : 0)), decl)), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_specific); if (!( (((enum tree_code) ((((void)(!(((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__), 0 : 0)), decl))->base.code) == VAR_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__), 0 : 0)), decl))->base.code) == FUNCTION_DECL ) || ((enum tree_code) ((((void)(!(((contains_struct_check (( (tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__), 0 : 0)), decl))->base.code) == FIELD_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__), 0 : 0)), decl))->base.code) == CONST_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__), 0 : 0)), decl))->base.code) == TYPE_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__), 0 : 0)), decl))->base.code) == TEMPLATE_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__), 0 : 0)), decl))->base.code) == USING_DECL || ((enum tree_code) ((((void)(!(((contains_struct_check ((( tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__))->decl_common.lang_flag_0)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__), 0 : 0)), decl))->base.code) == CONCEPT_DECL )) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3472, __FUNCTION__); <->u.min; })->access) = alias; | ||||
3473 | } | ||||
3474 | |||||
3475 | /* If DECL has non-internal linkage, and we have a module vector, | ||||
3476 | record it in the appropriate slot. We have already checked for | ||||
3477 | duplicates. */ | ||||
3478 | |||||
3479 | static void | ||||
3480 | maybe_record_mergeable_decl (tree *slot, tree name, tree decl) | ||||
3481 | { | ||||
3482 | if (TREE_CODE (*slot)((enum tree_code) (*slot)->base.code) != BINDING_VECTOR) | ||||
3483 | return; | ||||
3484 | |||||
3485 | if (!TREE_PUBLIC (CP_DECL_CONTEXT (decl))(((!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3485, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3485, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3485, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.public_flag)) | ||||
3486 | /* Member of internal namespace. */ | ||||
3487 | return; | ||||
3488 | |||||
3489 | tree not_tmpl = STRIP_TEMPLATE (decl)(((enum tree_code) (decl)->base.code) == TEMPLATE_DECL ? ( (struct tree_template_decl *)(const_cast<union tree_node * > ((((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3489, __FUNCTION__, (TEMPLATE_DECL))))))))->result : decl ); | ||||
3490 | if ((TREE_CODE (not_tmpl)((enum tree_code) (not_tmpl)->base.code) == FUNCTION_DECL | ||||
3491 | || TREE_CODE (not_tmpl)((enum tree_code) (not_tmpl)->base.code) == VAR_DECL) | ||||
3492 | && DECL_THIS_STATIC (not_tmpl)((contains_struct_check (((tree_check3 ((not_tmpl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3492, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL), (PARM_DECL )))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3492, __FUNCTION__))->decl_common.lang_flag_6)) | ||||
3493 | /* Internal linkage. */ | ||||
3494 | return; | ||||
3495 | |||||
3496 | bool is_attached = (DECL_LANG_SPECIFIC (not_tmpl)((contains_struct_check ((not_tmpl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3496, __FUNCTION__))->decl_common.lang_specific) | ||||
3497 | && DECL_MODULE_ATTACH_P (not_tmpl)(((contains_struct_check (((tree_not_check ((not_tmpl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3497, __FUNCTION__, (TEMPLATE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3497, __FUNCTION__))->decl_common.lang_specific)->u.base .module_attach_p)); | ||||
3498 | tree *gslot = get_fixed_binding_slot | ||||
3499 | (slot, name, is_attached ? BINDING_SLOT_PARTITION : BINDING_SLOT_GLOBAL, | ||||
3500 | true); | ||||
3501 | |||||
3502 | if (!is_attached) | ||||
3503 | { | ||||
3504 | binding_slot &orig | ||||
3505 | = BINDING_VECTOR_CLUSTER (*slot, 0)(((tree_binding_vec *)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3505, __FUNCTION__, (BINDING_VECTOR))))->vec[0]).slots[BINDING_SLOT_CURRENT]; | ||||
3506 | |||||
3507 | if (!STAT_HACK_P (tree (orig))((tree (orig)) && ((enum tree_code) (tree (orig))-> base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((tree (orig)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3507, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3507, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
3508 | orig = stat_hack (tree (orig)); | ||||
3509 | |||||
3510 | MODULE_BINDING_GLOBAL_P (tree (orig))((tree_check ((tree (orig)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3510, __FUNCTION__, (OVERLOAD)))->base.static_flag) = true; | ||||
3511 | } | ||||
3512 | |||||
3513 | add_mergeable_namespace_entity (gslot, decl); | ||||
3514 | } | ||||
3515 | |||||
3516 | /* DECL is being pushed. Check whether it hides or ambiguates | ||||
3517 | something seen as an import. This include decls seen in our own | ||||
3518 | interface, which is OK. Also, check for merging a | ||||
3519 | global/partition decl. */ | ||||
3520 | |||||
3521 | static tree | ||||
3522 | check_module_override (tree decl, tree mvec, bool hiding, | ||||
3523 | tree scope, tree name) | ||||
3524 | { | ||||
3525 | tree match = NULL_TREE(tree) nullptr; | ||||
3526 | bitmap imports = get_import_bitmap (); | ||||
3527 | binding_cluster *cluster = BINDING_VECTOR_CLUSTER_BASE (mvec)(((tree_binding_vec *)(tree_check ((mvec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3527, __FUNCTION__, (BINDING_VECTOR))))->vec); | ||||
3528 | unsigned ix = BINDING_VECTOR_NUM_CLUSTERS (mvec)((tree_check ((mvec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3528, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base); | ||||
3529 | |||||
3530 | if (BINDING_VECTOR_SLOTS_PER_CLUSTER2 == BINDING_SLOTS_FIXED) | ||||
3531 | { | ||||
3532 | cluster++; | ||||
3533 | ix--; | ||||
3534 | } | ||||
3535 | |||||
3536 | for (; ix--; cluster++) | ||||
3537 | for (unsigned jx = 0; jx != BINDING_VECTOR_SLOTS_PER_CLUSTER2; jx++) | ||||
3538 | { | ||||
3539 | /* Are we importing this module? */ | ||||
3540 | if (cluster->indices[jx].span != 1) | ||||
3541 | continue; | ||||
3542 | if (!cluster->indices[jx].base) | ||||
3543 | continue; | ||||
3544 | if (!bitmap_bit_p (imports, cluster->indices[jx].base)) | ||||
3545 | continue; | ||||
3546 | /* Is it loaded? */ | ||||
3547 | if (cluster->slots[jx].is_lazy ()) | ||||
3548 | { | ||||
3549 | gcc_assert (cluster->indices[jx].span == 1)((void)(!(cluster->indices[jx].span == 1) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3549, __FUNCTION__), 0 : 0)); | ||||
3550 | lazy_load_binding (cluster->indices[jx].base, | ||||
3551 | scope, name, &cluster->slots[jx]); | ||||
3552 | } | ||||
3553 | tree bind = cluster->slots[jx]; | ||||
3554 | if (!bind) | ||||
3555 | /* Errors could cause there to be nothing. */ | ||||
3556 | continue; | ||||
3557 | |||||
3558 | if (STAT_HACK_P (bind)((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3558, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3558, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
3559 | /* We do not have to check STAT_TYPE here, the xref_tag | ||||
3560 | machinery deals with that problem. */ | ||||
3561 | bind = STAT_VISIBLE (bind)(((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3561, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
3562 | |||||
3563 | for (ovl_iterator iter (bind); iter; ++iter) | ||||
3564 | if (!iter.using_p ()) | ||||
3565 | { | ||||
3566 | match = duplicate_decls (decl, *iter, hiding); | ||||
3567 | if (match) | ||||
3568 | goto matched; | ||||
3569 | } | ||||
3570 | } | ||||
3571 | |||||
3572 | if (TREE_PUBLIC (scope)((scope)->base.public_flag) && TREE_PUBLIC (STRIP_TEMPLATE (decl))(((((enum tree_code) (decl)->base.code) == TEMPLATE_DECL ? ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3572, __FUNCTION__, (TEMPLATE_DECL))))))))->result : decl ))->base.public_flag) | ||||
3573 | /* Namespaces are dealt with specially in | ||||
3574 | make_namespace_finish. */ | ||||
3575 | && !(TREE_CODE (decl)((enum tree_code) (decl)->base.code) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl)((contains_struct_check (((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3575, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3575, __FUNCTION__))->decl_common.abstract_origin))) | ||||
3576 | { | ||||
3577 | /* Look in the appropriate mergeable decl slot. */ | ||||
3578 | tree mergeable = NULL_TREE(tree) nullptr; | ||||
3579 | if (named_module_p ()) | ||||
3580 | mergeable = BINDING_VECTOR_CLUSTER (mvec, BINDING_SLOT_PARTITION(((tree_binding_vec *)(tree_check ((mvec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3581, __FUNCTION__, (BINDING_VECTOR))))->vec[BINDING_SLOT_PARTITION / 2]) | ||||
3581 | / BINDING_VECTOR_SLOTS_PER_CLUSTER)(((tree_binding_vec *)(tree_check ((mvec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3581, __FUNCTION__, (BINDING_VECTOR))))->vec[BINDING_SLOT_PARTITION / 2]) | ||||
3582 | .slots[BINDING_SLOT_PARTITION % BINDING_VECTOR_SLOTS_PER_CLUSTER2]; | ||||
3583 | else | ||||
3584 | mergeable = BINDING_VECTOR_CLUSTER (mvec, 0)(((tree_binding_vec *)(tree_check ((mvec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3584, __FUNCTION__, (BINDING_VECTOR))))->vec[0]).slots[BINDING_SLOT_GLOBAL]; | ||||
3585 | |||||
3586 | for (ovl_iterator iter (mergeable); iter; ++iter) | ||||
3587 | { | ||||
3588 | match = duplicate_decls (decl, *iter, hiding); | ||||
3589 | if (match) | ||||
3590 | goto matched; | ||||
3591 | } | ||||
3592 | } | ||||
3593 | |||||
3594 | return NULL_TREE(tree) nullptr; | ||||
3595 | |||||
3596 | matched: | ||||
3597 | if (match != error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
3598 | { | ||||
3599 | if (named_module_p ()) | ||||
3600 | BINDING_VECTOR_PARTITION_DUPS_P (mvec)((tree_check ((mvec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3600, __FUNCTION__, (BINDING_VECTOR)))->base.volatile_flag ) = true; | ||||
3601 | else | ||||
3602 | BINDING_VECTOR_GLOBAL_DUPS_P (mvec)((tree_check ((mvec), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3602, __FUNCTION__, (BINDING_VECTOR)))->base.static_flag ) = true; | ||||
3603 | } | ||||
3604 | |||||
3605 | return match; | ||||
3606 | |||||
3607 | |||||
3608 | } | ||||
3609 | |||||
3610 | /* Record DECL as belonging to the current lexical scope. Check for | ||||
3611 | errors (such as an incompatible declaration for the same name | ||||
3612 | already seen in the same scope). | ||||
3613 | |||||
3614 | The new binding is hidden if HIDING is true (an anticipated builtin | ||||
3615 | or hidden friend). | ||||
3616 | |||||
3617 | Returns either DECL or an old decl for the same name. If an old | ||||
3618 | decl is returned, it may have been smashed to agree with what DECL | ||||
3619 | says. */ | ||||
3620 | |||||
3621 | tree | ||||
3622 | pushdecl (tree decl, bool hiding) | ||||
3623 | { | ||||
3624 | auto_cond_timevar tv (TV_NAME_LOOKUP); | ||||
3625 | |||||
3626 | if (decl == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
3627 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||
3628 | |||||
3629 | if (!DECL_TEMPLATE_PARM_P (decl)(((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3629, __FUNCTION__))->decl_common.lang_flag_0) && (((enum tree_code) (decl)->base.code) == CONST_DECL || (( enum tree_code) (decl)->base.code) == PARM_DECL || ((enum tree_code ) (decl)->base.code) == TYPE_DECL || ((enum tree_code) (decl )->base.code) == TEMPLATE_DECL)) && current_function_decl && !hiding) | ||||
3630 | set_decl_context_in_fn (current_function_decl, decl); | ||||
3631 | |||||
3632 | /* The binding level we will be pushing into. During local class | ||||
3633 | pushing, we want to push to the containing scope. */ | ||||
3634 | cp_binding_level *level = current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)); | ||||
3635 | while (level->kind == sk_class | ||||
3636 | || level->kind == sk_cleanup) | ||||
3637 | level = level->level_chain; | ||||
3638 | |||||
3639 | /* An anonymous namespace has a NULL DECL_NAME, but we still want to | ||||
3640 | insert it. Other NULL-named decls, not so much. */ | ||||
3641 | tree name = DECL_NAME (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3641, __FUNCTION__))->decl_minimal.name); | ||||
3642 | if (name ? !IDENTIFIER_ANON_P (name)((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3642, __FUNCTION__, (IDENTIFIER_NODE)))->base.private_flag ) : TREE_CODE (decl)((enum tree_code) (decl)->base.code) == NAMESPACE_DECL) | ||||
3643 | { | ||||
3644 | cxx_binding *binding = NULLnullptr; /* Local scope binding. */ | ||||
3645 | tree ns = NULL_TREE(tree) nullptr; /* Searched namespace. */ | ||||
3646 | tree *slot = NULLnullptr; /* Binding slot in namespace. */ | ||||
3647 | tree *mslot = NULLnullptr; /* Current module slot in namespace. */ | ||||
3648 | tree old = NULL_TREE(tree) nullptr; | ||||
3649 | |||||
3650 | if (level->kind == sk_namespace) | ||||
3651 | { | ||||
3652 | /* We look in the decl's namespace for an existing | ||||
3653 | declaration, even though we push into the current | ||||
3654 | namespace. */ | ||||
3655 | ns = (DECL_NAMESPACE_SCOPE_P (decl)(!(((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3655, __FUNCTION__))->decl_common.lang_flag_0) && (((enum tree_code) (decl)->base.code) == CONST_DECL || (( enum tree_code) (decl)->base.code) == PARM_DECL || ((enum tree_code ) (decl)->base.code) == TYPE_DECL || ((enum tree_code) (decl )->base.code) == TEMPLATE_DECL)) && ((enum tree_code ) ((!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3655, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3655, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3655, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == NAMESPACE_DECL) | ||||
3656 | ? CP_DECL_CONTEXT (decl)(!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3656, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3656, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3656, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]) : current_namespacescope_chain->old_namespace); | ||||
3657 | /* Create the binding, if this is current namespace, because | ||||
3658 | that's where we'll be pushing anyway. */ | ||||
3659 | slot = find_namespace_slot (ns, name, ns == current_namespacescope_chain->old_namespace); | ||||
3660 | if (slot) | ||||
3661 | { | ||||
3662 | mslot = get_fixed_binding_slot (slot, name, BINDING_SLOT_CURRENT, | ||||
3663 | ns == current_namespacescope_chain->old_namespace); | ||||
3664 | old = MAYBE_STAT_DECL (*mslot)(((*mslot) && ((enum tree_code) (*mslot)->base.code ) == OVERLOAD && ((tree_not_check2 (((tree_check ((*mslot ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3664, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3664, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? (((struct tree_overload*)(tree_check ((*mslot ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3664, __FUNCTION__, (OVERLOAD))))->function) : *mslot); | ||||
3665 | } | ||||
3666 | } | ||||
3667 | else | ||||
3668 | { | ||||
3669 | binding = find_local_binding (level, name); | ||||
3670 | if (binding) | ||||
3671 | old = binding->value; | ||||
3672 | } | ||||
3673 | |||||
3674 | if (old == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
3675 | old = NULL_TREE(tree) nullptr; | ||||
3676 | |||||
3677 | for (ovl_iterator iter (old); iter; ++iter) | ||||
3678 | if (iter.using_p ()) | ||||
3679 | ; /* Ignore using decls here. */ | ||||
3680 | else if (iter.hidden_p () | ||||
3681 | && TREE_CODE (*iter)((enum tree_code) (*iter)->base.code) == FUNCTION_DECL | ||||
3682 | && DECL_LANG_SPECIFIC (*iter)((contains_struct_check ((*iter), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3682, __FUNCTION__))->decl_common.lang_specific) | ||||
3683 | && DECL_MODULE_IMPORT_P (*iter)(((contains_struct_check (((tree_not_check ((*iter), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3683, __FUNCTION__, (TEMPLATE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3683, __FUNCTION__))->decl_common.lang_specific)->u.base .module_import_p)) | ||||
3684 | ; /* An undeclared builtin imported from elsewhere. */ | ||||
3685 | else if (tree match | ||||
3686 | = duplicate_decls (decl, *iter, hiding, iter.hidden_p ())) | ||||
3687 | { | ||||
3688 | if (match == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
3689 | ; | ||||
3690 | else if (TREE_CODE (match)((enum tree_code) (match)->base.code) == TYPE_DECL) | ||||
3691 | gcc_checking_assert (REAL_IDENTIFIER_TYPE_VALUE (name)((void)(!(((contains_struct_check ((name), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3691, __FUNCTION__))->typed.type) == (level->kind == sk_namespace ? (tree) nullptr : ((contains_struct_check ((match), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3693, __FUNCTION__))->typed.type))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3693, __FUNCTION__), 0 : 0)) | ||||
3692 | == (level->kind == sk_namespace((void)(!(((contains_struct_check ((name), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3691, __FUNCTION__))->typed.type) == (level->kind == sk_namespace ? (tree) nullptr : ((contains_struct_check ((match), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3693, __FUNCTION__))->typed.type))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3693, __FUNCTION__), 0 : 0)) | ||||
3693 | ? NULL_TREE : TREE_TYPE (match)))((void)(!(((contains_struct_check ((name), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3691, __FUNCTION__))->typed.type) == (level->kind == sk_namespace ? (tree) nullptr : ((contains_struct_check ((match), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3693, __FUNCTION__))->typed.type))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3693, __FUNCTION__), 0 : 0)); | ||||
3694 | else if (iter.hidden_p () && !hiding) | ||||
3695 | { | ||||
3696 | /* Unhiding a previously hidden decl. */ | ||||
3697 | tree head = iter.reveal_node (old); | ||||
3698 | if (head != old) | ||||
3699 | { | ||||
3700 | gcc_checking_assert (ns)((void)(!(ns) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3700, __FUNCTION__), 0 : 0)); | ||||
3701 | if (STAT_HACK_P (*slot)((*slot) && ((enum tree_code) (*slot)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((*slot) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3701, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3701, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
3702 | STAT_DECL (*slot)(((struct tree_overload*)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3702, __FUNCTION__, (OVERLOAD))))->function) = head; | ||||
3703 | else | ||||
3704 | *slot = head; | ||||
3705 | } | ||||
3706 | if (DECL_EXTERN_C_P (match)((((contains_struct_check ((match), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3706, __FUNCTION__))->decl_common.lang_specific) ? ((contains_struct_check ((match), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3706, __FUNCTION__))->decl_common.lang_specific)->u.base .language : (((enum tree_code) (match)->base.code) == FUNCTION_DECL ? lang_c : lang_cplusplus)) == lang_c)) | ||||
3707 | /* We need to check and register the decl now. */ | ||||
3708 | check_extern_c_conflict (match); | ||||
3709 | } | ||||
3710 | else if (slot && !hiding | ||||
3711 | && STAT_HACK_P (*slot)((*slot) && ((enum tree_code) (*slot)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((*slot) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3711, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3711, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) && STAT_DECL_HIDDEN_P (*slot)((tree_not_check2 (((tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3711, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3711, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)) | ||||
3712 | { | ||||
3713 | /* Unhide the non-function. */ | ||||
3714 | gcc_checking_assert (old == match)((void)(!(old == match) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3714, __FUNCTION__), 0 : 0)); | ||||
3715 | if (!STAT_TYPE (*slot)((contains_struct_check ((*slot), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3715, __FUNCTION__))->typed.type)) | ||||
3716 | *slot = match; | ||||
3717 | else | ||||
3718 | STAT_DECL (*slot)(((struct tree_overload*)(tree_check ((*slot), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3718, __FUNCTION__, (OVERLOAD))))->function) = match; | ||||
3719 | } | ||||
3720 | return match; | ||||
3721 | } | ||||
3722 | |||||
3723 | /* Check for redeclaring an import. */ | ||||
3724 | if (slot && *slot && TREE_CODE (*slot)((enum tree_code) (*slot)->base.code) == BINDING_VECTOR) | ||||
3725 | if (tree match | ||||
3726 | = check_module_override (decl, *slot, hiding, ns, name)) | ||||
3727 | { | ||||
3728 | if (match == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
3729 | return match; | ||||
3730 | |||||
3731 | /* We found a decl in an interface, push it into this | ||||
3732 | binding. */ | ||||
3733 | decl = update_binding (NULLnullptr, binding, mslot, old, | ||||
3734 | match, hiding); | ||||
3735 | |||||
3736 | return decl; | ||||
3737 | } | ||||
3738 | |||||
3739 | /* We are pushing a new decl. */ | ||||
3740 | |||||
3741 | /* Skip a hidden builtin we failed to match already. There can | ||||
3742 | only be one. */ | ||||
3743 | if (old && anticipated_builtin_p (old)) | ||||
3744 | old = OVL_CHAIN (old)(((struct tree_overload*)(tree_check ((old), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3744, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
3745 | |||||
3746 | check_template_shadow (decl); | ||||
3747 | |||||
3748 | if (DECL_DECLARES_FUNCTION_P (decl)(((enum tree_code) (decl)->base.code) == FUNCTION_DECL || ( ((enum tree_code) (decl)->base.code) == TEMPLATE_DECL && ((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3748, __FUNCTION__, (TEMPLATE_DECL))))))))->result != (tree ) nullptr && ((enum tree_code) (((struct tree_template_decl *)(const_cast<union tree_node *> ((((tree_check ((decl ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3748, __FUNCTION__, (TEMPLATE_DECL))))))))->result)-> base.code) == FUNCTION_DECL))) | ||||
3749 | { | ||||
3750 | check_default_args (decl); | ||||
3751 | |||||
3752 | if (hiding) | ||||
3753 | { | ||||
3754 | if (level->kind != sk_namespace) | ||||
3755 | { | ||||
3756 | /* In a local class, a friend function declaration must | ||||
3757 | find a matching decl in the innermost non-class scope. | ||||
3758 | [class.friend/11] */ | ||||
3759 | error_at (DECL_SOURCE_LOCATION (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3759, __FUNCTION__))->decl_minimal.locus), | ||||
3760 | "friend declaration %qD in local class without " | ||||
3761 | "prior local declaration", decl); | ||||
3762 | /* Don't attempt to push it. */ | ||||
3763 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||
3764 | } | ||||
3765 | } | ||||
3766 | } | ||||
3767 | |||||
3768 | if (level->kind != sk_namespace) | ||||
3769 | { | ||||
3770 | check_local_shadow (decl); | ||||
3771 | |||||
3772 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == NAMESPACE_DECL) | ||||
3773 | /* A local namespace alias. */ | ||||
3774 | set_identifier_type_value_with_scope (name, NULL_TREE(tree) nullptr, level); | ||||
3775 | |||||
3776 | if (!binding) | ||||
3777 | binding = create_local_binding (level, name); | ||||
3778 | } | ||||
3779 | else if (!slot) | ||||
3780 | { | ||||
3781 | ns = current_namespacescope_chain->old_namespace; | ||||
3782 | slot = find_namespace_slot (ns, name, true); | ||||
3783 | mslot = get_fixed_binding_slot (slot, name, BINDING_SLOT_CURRENT, true); | ||||
3784 | /* Update OLD to reflect the namespace we're going to be | ||||
3785 | pushing into. */ | ||||
3786 | old = MAYBE_STAT_DECL (*mslot)(((*mslot) && ((enum tree_code) (*mslot)->base.code ) == OVERLOAD && ((tree_not_check2 (((tree_check ((*mslot ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3786, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3786, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? (((struct tree_overload*)(tree_check ((*mslot ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3786, __FUNCTION__, (OVERLOAD))))->function) : *mslot); | ||||
3787 | } | ||||
3788 | |||||
3789 | old = update_binding (level, binding, mslot, old, decl, hiding); | ||||
3790 | |||||
3791 | if (old != decl) | ||||
3792 | /* An existing decl matched, use it. */ | ||||
3793 | decl = old; | ||||
3794 | else | ||||
3795 | { | ||||
3796 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == TYPE_DECL) | ||||
3797 | { | ||||
3798 | tree type = TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3798, __FUNCTION__))->typed.type); | ||||
3799 | |||||
3800 | if (type != error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
3801 | { | ||||
3802 | if (TYPE_NAME (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3802, __FUNCTION__))->type_common.name) != decl) | ||||
3803 | set_underlying_type (decl); | ||||
3804 | |||||
3805 | set_identifier_type_value_with_scope (name, decl, level); | ||||
3806 | |||||
3807 | if (level->kind != sk_namespace | ||||
3808 | && !instantiating_current_function_p ()) | ||||
3809 | /* This is a locally defined typedef in a function that | ||||
3810 | is not a template instantation, record it to implement | ||||
3811 | -Wunused-local-typedefs. */ | ||||
3812 | record_locally_defined_typedef (decl); | ||||
3813 | } | ||||
3814 | } | ||||
3815 | else if (VAR_OR_FUNCTION_DECL_P (decl)(((enum tree_code) (decl)->base.code) == VAR_DECL || ((enum tree_code) (decl)->base.code) == FUNCTION_DECL)) | ||||
3816 | { | ||||
3817 | if (DECL_EXTERN_C_P (decl)((((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3817, __FUNCTION__))->decl_common.lang_specific) ? ((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3817, __FUNCTION__))->decl_common.lang_specific)->u.base .language : (((enum tree_code) (decl)->base.code) == FUNCTION_DECL ? lang_c : lang_cplusplus)) == lang_c)) | ||||
3818 | check_extern_c_conflict (decl); | ||||
3819 | |||||
3820 | if (!DECL_LOCAL_DECL_P (decl)((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3820, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3820, __FUNCTION__))->decl_common.lang_flag_0) | ||||
3821 | && VAR_P (decl)(((enum tree_code) (decl)->base.code) == VAR_DECL)) | ||||
3822 | maybe_register_incomplete_var (decl); | ||||
3823 | |||||
3824 | if (DECL_LOCAL_DECL_P (decl)((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3824, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3824, __FUNCTION__))->decl_common.lang_flag_0) | ||||
3825 | && NAMESPACE_SCOPE_P (decl)(((tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (decl)->base.code))] == tcc_declaration) && (!(((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3825, __FUNCTION__))->decl_common.lang_flag_0) && (((enum tree_code) (decl)->base.code) == CONST_DECL || (( enum tree_code) (decl)->base.code) == PARM_DECL || ((enum tree_code ) (decl)->base.code) == TYPE_DECL || ((enum tree_code) (decl )->base.code) == TEMPLATE_DECL)) && ((enum tree_code ) ((!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3825, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3825, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3825, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == NAMESPACE_DECL)) || ((tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (decl)-> base.code))] == tcc_type) && (((enum tree_code) ((!(! (((tree_class_check ((decl), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3825, __FUNCTION__))->type_common.context)) || ((enum tree_code ) (((tree_class_check ((decl), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3825, __FUNCTION__))->type_common.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((tree_class_check ((decl), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3825, __FUNCTION__))->type_common.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == NAMESPACE_DECL)))) | ||||
3826 | push_local_extern_decl_alias (decl); | ||||
3827 | } | ||||
3828 | |||||
3829 | if (level->kind == sk_namespace | ||||
3830 | && TREE_PUBLIC (level->this_entity)((level->this_entity)->base.public_flag) | ||||
3831 | && module_p ()) | ||||
3832 | maybe_record_mergeable_decl (slot, name, decl); | ||||
3833 | } | ||||
3834 | } | ||||
3835 | else | ||||
3836 | add_decl_to_level (level, decl); | ||||
3837 | |||||
3838 | return decl; | ||||
3839 | } | ||||
3840 | |||||
3841 | /* A mergeable entity is being loaded into namespace NS slot NAME. | ||||
3842 | Create and return the appropriate vector slot for that. Either a | ||||
3843 | GMF slot or a module-specific one. */ | ||||
3844 | |||||
3845 | tree * | ||||
3846 | mergeable_namespace_slots (tree ns, tree name, bool is_attached, tree *vec) | ||||
3847 | { | ||||
3848 | tree *mslot = find_namespace_slot (ns, name, true); | ||||
3849 | tree *vslot = get_fixed_binding_slot | ||||
3850 | (mslot, name, is_attached ? BINDING_SLOT_PARTITION : BINDING_SLOT_GLOBAL, | ||||
3851 | true); | ||||
3852 | |||||
3853 | gcc_checking_assert (TREE_CODE (*mslot) == BINDING_VECTOR)((void)(!(((enum tree_code) (*mslot)->base.code) == BINDING_VECTOR ) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3853, __FUNCTION__), 0 : 0)); | ||||
3854 | *vec = *mslot; | ||||
3855 | |||||
3856 | return vslot; | ||||
3857 | } | ||||
3858 | |||||
3859 | /* DECL is a new mergeable namespace-scope decl. Add it to the | ||||
3860 | mergeable entities on GSLOT. */ | ||||
3861 | |||||
3862 | void | ||||
3863 | add_mergeable_namespace_entity (tree *gslot, tree decl) | ||||
3864 | { | ||||
3865 | *gslot = ovl_make (decl, *gslot); | ||||
3866 | } | ||||
3867 | |||||
3868 | /* A mergeable entity of KLASS called NAME is being loaded. Return | ||||
3869 | the set of things it could be. All such non-as_base classes have | ||||
3870 | been given a member vec. */ | ||||
3871 | |||||
3872 | tree | ||||
3873 | lookup_class_binding (tree klass, tree name) | ||||
3874 | { | ||||
3875 | tree found = NULL_TREE(tree) nullptr; | ||||
3876 | |||||
3877 | if (!COMPLETE_TYPE_P (klass)(((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3877, __FUNCTION__))->type_common.size) != (tree) nullptr )) | ||||
3878 | ; | ||||
3879 | else if (TYPE_LANG_SPECIFIC (klass)((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3879, __FUNCTION__))->type_with_lang_specific.lang_specific )) | ||||
3880 | { | ||||
3881 | vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass)((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3881, __FUNCTION__))->type_with_lang_specific.lang_specific ))->members); | ||||
3882 | |||||
3883 | found = member_vec_binary_search (member_vec, name); | ||||
3884 | if (!found) | ||||
3885 | ; | ||||
3886 | else if (STAT_HACK_P (found)((found) && ((enum tree_code) (found)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((found) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3886, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3886, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4))) | ||||
3887 | /* Rearrange the stat hack so that we don't need to expose that | ||||
3888 | internal detail. */ | ||||
3889 | found = ovl_make (STAT_TYPE (found)((contains_struct_check ((found), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3889, __FUNCTION__))->typed.type), STAT_DECL (found)(((struct tree_overload*)(tree_check ((found), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3889, __FUNCTION__, (OVERLOAD))))->function)); | ||||
3890 | else if (IDENTIFIER_CONV_OP_P (name)((((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3890, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3890, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) & ((tree_not_check2 (((tree_check ((name), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3890, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3890, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1) & (!((tree_not_check2 (((tree_check ((name) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3890, __FUNCTION__, (IDENTIFIER_NODE)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3890, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0)))) | ||||
3891 | { | ||||
3892 | gcc_checking_assert (name == conv_op_identifier)((void)(!(name == cp_global_trees[CPTI_CONV_OP_IDENTIFIER]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3892, __FUNCTION__), 0 : 0)); | ||||
3893 | found = OVL_CHAIN (found)(((struct tree_overload*)(tree_check ((found), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3893, __FUNCTION__, (OVERLOAD))))->common.chain); | ||||
3894 | } | ||||
3895 | } | ||||
3896 | else | ||||
3897 | { | ||||
3898 | gcc_checking_assert (IS_FAKE_BASE_TYPE (klass)((void)(!((((enum tree_code) (klass)->base.code) == RECORD_TYPE && ((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context) && (( (((enum tree_code) (((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context))->base.code )) == RECORD_TYPE || (((enum tree_code) (((tree_class_check ( (klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context))->base.code )) == UNION_TYPE) && ((tree_class_check ((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.lang_flag_5)) && ((((tree_class_check ((((tree_class_check ((klass), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_with_lang_specific.lang_specific ))->as_base) == (klass)) || (((enum tree_code) (klass)-> base.code) == RECORD_TYPE && (((tree_class_check (((tree_check ((klass), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3899, __FUNCTION__, (RECORD_TYPE)))), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3899, __FUNCTION__))->type_common.lang_flag_2)))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3899, __FUNCTION__), 0 : 0)) | ||||
3899 | || TYPE_PTRMEMFUNC_P (klass))((void)(!((((enum tree_code) (klass)->base.code) == RECORD_TYPE && ((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context) && (( (((enum tree_code) (((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context))->base.code )) == RECORD_TYPE || (((enum tree_code) (((tree_class_check ( (klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context))->base.code )) == UNION_TYPE) && ((tree_class_check ((((tree_class_check ((klass), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.lang_flag_5)) && ((((tree_class_check ((((tree_class_check ((klass), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_common.context)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3898, __FUNCTION__))->type_with_lang_specific.lang_specific ))->as_base) == (klass)) || (((enum tree_code) (klass)-> base.code) == RECORD_TYPE && (((tree_class_check (((tree_check ((klass), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3899, __FUNCTION__, (RECORD_TYPE)))), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3899, __FUNCTION__))->type_common.lang_flag_2)))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3899, __FUNCTION__), 0 : 0)); | ||||
3900 | found = fields_linear_search (klass, name, false); | ||||
3901 | } | ||||
3902 | |||||
3903 | return found; | ||||
3904 | } | ||||
3905 | |||||
3906 | /* Given a namespace-level binding BINDING, walk it, calling CALLBACK | ||||
3907 | for all decls of the current module. When partitions are involved, | ||||
3908 | decls might be mentioned more than once. Return the accumulation of | ||||
3909 | CALLBACK results. */ | ||||
3910 | |||||
3911 | unsigned | ||||
3912 | walk_module_binding (tree binding, bitmap partitions, | ||||
3913 | bool (*callback) (tree decl, WMB_Flags, void *data), | ||||
3914 | void *data) | ||||
3915 | { | ||||
3916 | // FIXME: We don't quite deal with using decls naming stat hack | ||||
3917 | // type. Also using decls exporting something from the same scope. | ||||
3918 | tree current = binding; | ||||
3919 | unsigned count = 0; | ||||
3920 | |||||
3921 | if (TREE_CODE (binding)((enum tree_code) (binding)->base.code) == BINDING_VECTOR) | ||||
3922 | current = BINDING_VECTOR_CLUSTER (binding, 0)(((tree_binding_vec *)(tree_check ((binding), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3922, __FUNCTION__, (BINDING_VECTOR))))->vec[0]).slots[BINDING_SLOT_CURRENT]; | ||||
3923 | |||||
3924 | bool decl_hidden = false; | ||||
3925 | if (tree type = MAYBE_STAT_TYPE (current)(((current) && ((enum tree_code) (current)->base.code ) == OVERLOAD && ((tree_not_check2 (((tree_check ((current ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3925, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3925, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? ((contains_struct_check ((current), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3925, __FUNCTION__))->typed.type) : (tree) nullptr)) | ||||
3926 | { | ||||
3927 | WMB_Flags flags = WMB_None; | ||||
3928 | if (STAT_TYPE_HIDDEN_P (current)((tree_not_check2 (((tree_check ((current), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3928, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3928, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) | ||||
3929 | flags = WMB_Flags (flags | WMB_Hidden); | ||||
3930 | count += callback (type, flags, data); | ||||
3931 | decl_hidden = STAT_DECL_HIDDEN_P (current)((tree_not_check2 (((tree_check ((current), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3931, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3931, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0); | ||||
3932 | } | ||||
3933 | |||||
3934 | for (ovl_iterator iter (MAYBE_STAT_DECL (current)(((current) && ((enum tree_code) (current)->base.code ) == OVERLOAD && ((tree_not_check2 (((tree_check ((current ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3934, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3934, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? (((struct tree_overload*)(tree_check ((current ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3934, __FUNCTION__, (OVERLOAD))))->function) : current)); iter; ++iter) | ||||
3935 | { | ||||
3936 | if (iter.hidden_p ()) | ||||
3937 | decl_hidden = true; | ||||
3938 | if (!(decl_hidden && DECL_IS_UNDECLARED_BUILTIN (*iter)(((contains_struct_check ((*iter), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3938, __FUNCTION__))->decl_minimal.locus) <= ((location_t ) 1)))) | ||||
3939 | { | ||||
3940 | WMB_Flags flags = WMB_None; | ||||
3941 | if (decl_hidden) | ||||
3942 | flags = WMB_Flags (flags | WMB_Hidden); | ||||
3943 | if (iter.using_p ()) | ||||
3944 | { | ||||
3945 | flags = WMB_Flags (flags | WMB_Using); | ||||
3946 | if (iter.exporting_p ()) | ||||
3947 | flags = WMB_Flags (flags | WMB_Export); | ||||
3948 | } | ||||
3949 | count += callback (*iter, flags, data); | ||||
3950 | } | ||||
3951 | decl_hidden = false; | ||||
3952 | } | ||||
3953 | |||||
3954 | if (partitions && TREE_CODE (binding)((enum tree_code) (binding)->base.code) == BINDING_VECTOR) | ||||
3955 | { | ||||
3956 | /* Process partition slots. */ | ||||
3957 | binding_cluster *cluster = BINDING_VECTOR_CLUSTER_BASE (binding)(((tree_binding_vec *)(tree_check ((binding), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3957, __FUNCTION__, (BINDING_VECTOR))))->vec); | ||||
3958 | unsigned ix = BINDING_VECTOR_NUM_CLUSTERS (binding)((tree_check ((binding), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3958, __FUNCTION__, (BINDING_VECTOR)))->base.u.dependence_info .base); | ||||
3959 | if (BINDING_VECTOR_SLOTS_PER_CLUSTER2 == BINDING_SLOTS_FIXED) | ||||
3960 | { | ||||
3961 | ix--; | ||||
3962 | cluster++; | ||||
3963 | } | ||||
3964 | |||||
3965 | bool maybe_dups = BINDING_VECTOR_PARTITION_DUPS_P (binding)((tree_check ((binding), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3965, __FUNCTION__, (BINDING_VECTOR)))->base.volatile_flag ); | ||||
3966 | |||||
3967 | for (; ix--; cluster++) | ||||
3968 | for (unsigned jx = 0; jx != BINDING_VECTOR_SLOTS_PER_CLUSTER2; jx++) | ||||
3969 | if (!cluster->slots[jx].is_lazy ()) | ||||
3970 | if (tree bind = cluster->slots[jx]) | ||||
3971 | { | ||||
3972 | if (TREE_CODE (bind)((enum tree_code) (bind)->base.code) == NAMESPACE_DECL | ||||
3973 | && !DECL_NAMESPACE_ALIAS (bind)((contains_struct_check (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3973, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3973, __FUNCTION__))->decl_common.abstract_origin)) | ||||
3974 | { | ||||
3975 | if (unsigned base = cluster->indices[jx].base) | ||||
3976 | if (unsigned span = cluster->indices[jx].span) | ||||
3977 | do | ||||
3978 | if (bitmap_bit_p (partitions, base)) | ||||
3979 | goto found; | ||||
3980 | while (++base, --span); | ||||
3981 | /* Not a partition's namespace. */ | ||||
3982 | continue; | ||||
3983 | found: | ||||
3984 | |||||
3985 | WMB_Flags flags = WMB_None; | ||||
3986 | if (maybe_dups) | ||||
3987 | flags = WMB_Flags (flags | WMB_Dups); | ||||
3988 | count += callback (bind, flags, data); | ||||
3989 | } | ||||
3990 | else if (STAT_HACK_P (bind)((bind) && ((enum tree_code) (bind)->base.code) == OVERLOAD && ((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3990, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3990, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) && MODULE_BINDING_PARTITION_P (bind)((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3990, __FUNCTION__, (OVERLOAD)))->base.volatile_flag)) | ||||
3991 | { | ||||
3992 | if (tree btype = STAT_TYPE (bind)((contains_struct_check ((bind), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3992, __FUNCTION__))->typed.type)) | ||||
3993 | { | ||||
3994 | WMB_Flags flags = WMB_None; | ||||
3995 | if (maybe_dups) | ||||
3996 | flags = WMB_Flags (flags | WMB_Dups); | ||||
3997 | if (STAT_TYPE_HIDDEN_P (bind)((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3997, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 3997, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_2)) | ||||
3998 | flags = WMB_Flags (flags | WMB_Hidden); | ||||
3999 | |||||
4000 | count += callback (btype, flags, data); | ||||
4001 | } | ||||
4002 | bool hidden = STAT_DECL_HIDDEN_P (bind)((tree_not_check2 (((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4002, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4002, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_0); | ||||
4003 | for (ovl_iterator iter (MAYBE_STAT_DECL (STAT_DECL (bind))((((((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4003, __FUNCTION__, (OVERLOAD))))->function)) && ((enum tree_code) ((((struct tree_overload*)(tree_check ((bind ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4003, __FUNCTION__, (OVERLOAD))))->function))->base.code ) == OVERLOAD && ((tree_not_check2 (((tree_check (((( (struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4003, __FUNCTION__, (OVERLOAD))))->function)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4003, __FUNCTION__, (OVERLOAD)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4003, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_4)) ? (((struct tree_overload*)(tree_check (((((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4003, __FUNCTION__, (OVERLOAD))))->function)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4003, __FUNCTION__, (OVERLOAD))))->function) : (((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4003, __FUNCTION__, (OVERLOAD))))->function))); | ||||
4004 | iter; ++iter) | ||||
4005 | { | ||||
4006 | if (iter.hidden_p ()) | ||||
4007 | hidden = true; | ||||
4008 | gcc_checking_assert((void)(!(!(hidden && (((contains_struct_check ((*iter ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4009, __FUNCTION__))->decl_minimal.locus) <= ((location_t ) 1)))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4009, __FUNCTION__), 0 : 0)) | ||||
4009 | (!(hidden && DECL_IS_UNDECLARED_BUILTIN (*iter)))((void)(!(!(hidden && (((contains_struct_check ((*iter ), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4009, __FUNCTION__))->decl_minimal.locus) <= ((location_t ) 1)))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4009, __FUNCTION__), 0 : 0)); | ||||
4010 | |||||
4011 | WMB_Flags flags = WMB_None; | ||||
4012 | if (maybe_dups) | ||||
4013 | flags = WMB_Flags (flags | WMB_Dups); | ||||
4014 | if (decl_hidden) | ||||
4015 | flags = WMB_Flags (flags | WMB_Hidden); | ||||
4016 | if (iter.using_p ()) | ||||
4017 | { | ||||
4018 | flags = WMB_Flags (flags | WMB_Using); | ||||
4019 | if (iter.exporting_p ()) | ||||
4020 | flags = WMB_Flags (flags | WMB_Export); | ||||
4021 | } | ||||
4022 | count += callback (*iter, flags, data); | ||||
4023 | hidden = false; | ||||
4024 | } | ||||
4025 | } | ||||
4026 | } | ||||
4027 | } | ||||
4028 | |||||
4029 | return count; | ||||
4030 | } | ||||
4031 | |||||
4032 | /* Imported module MOD has a binding to NS::NAME, stored in section | ||||
4033 | SNUM. */ | ||||
4034 | |||||
4035 | bool | ||||
4036 | import_module_binding (tree ns, tree name, unsigned mod, unsigned snum) | ||||
4037 | { | ||||
4038 | tree *slot = find_namespace_slot (ns, name, true); | ||||
4039 | binding_slot *mslot = append_imported_binding_slot (slot, name, mod); | ||||
4040 | |||||
4041 | if (mslot->is_lazy () || *mslot) | ||||
4042 | /* Oops, something was already there. */ | ||||
4043 | return false; | ||||
4044 | |||||
4045 | mslot->set_lazy (snum); | ||||
4046 | return true; | ||||
4047 | } | ||||
4048 | |||||
4049 | /* An import of MODULE is binding NS::NAME. There should be no | ||||
4050 | existing binding for >= MODULE. MOD_GLOB indicates whether MODULE | ||||
4051 | is a header_unit (-1) or part of the current module (+1). VALUE | ||||
4052 | and TYPE are the value and type bindings. VISIBLE are the value | ||||
4053 | bindings being exported. */ | ||||
4054 | |||||
4055 | bool | ||||
4056 | set_module_binding (tree ns, tree name, unsigned mod, int mod_glob, | ||||
4057 | tree value, tree type, tree visible) | ||||
4058 | { | ||||
4059 | if (!value) | ||||
4060 | /* Bogus BMIs could give rise to nothing to bind. */ | ||||
4061 | return false; | ||||
4062 | |||||
4063 | gcc_assert (TREE_CODE (value) != NAMESPACE_DECL((void)(!(((enum tree_code) (value)->base.code) != NAMESPACE_DECL || ((contains_struct_check (((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4064, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4064, __FUNCTION__))->decl_common.abstract_origin)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4064, __FUNCTION__), 0 : 0)) | ||||
4064 | || DECL_NAMESPACE_ALIAS (value))((void)(!(((enum tree_code) (value)->base.code) != NAMESPACE_DECL || ((contains_struct_check (((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4064, __FUNCTION__, (NAMESPACE_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4064, __FUNCTION__))->decl_common.abstract_origin)) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4064, __FUNCTION__), 0 : 0)); | ||||
4065 | gcc_checking_assert (mod)((void)(!(mod) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4065, __FUNCTION__), 0 : 0)); | ||||
4066 | |||||
4067 | tree *slot = find_namespace_slot (ns, name, true); | ||||
4068 | binding_slot *mslot = search_imported_binding_slot (slot, mod); | ||||
4069 | |||||
4070 | if (!mslot || !mslot->is_lazy ()) | ||||
4071 | /* Again, bogus BMI could give find to missing or already loaded slot. */ | ||||
4072 | return false; | ||||
4073 | |||||
4074 | tree bind = value; | ||||
4075 | if (type || visible != bind || mod_glob) | ||||
4076 | { | ||||
4077 | bind = stat_hack (bind, type); | ||||
4078 | STAT_VISIBLE (bind)(((struct tree_overload*)(tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4078, __FUNCTION__, (OVERLOAD))))->common.chain) = visible; | ||||
4079 | if ((mod_glob > 0 && TREE_PUBLIC (ns)((ns)->base.public_flag)) | ||||
4080 | || (type && DECL_MODULE_EXPORT_P (type)((tree_not_check2 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4080, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_3))) | ||||
4081 | STAT_TYPE_VISIBLE_P (bind)(((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4081, __FUNCTION__, (OVERLOAD))))->base.used_flag) = true; | ||||
4082 | } | ||||
4083 | |||||
4084 | /* Note if this is this-module or global binding. */ | ||||
4085 | if (mod_glob > 0) | ||||
4086 | MODULE_BINDING_PARTITION_P (bind)((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4086, __FUNCTION__, (OVERLOAD)))->base.volatile_flag) = true; | ||||
4087 | else if (mod_glob < 0) | ||||
4088 | MODULE_BINDING_GLOBAL_P (bind)((tree_check ((bind), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4088, __FUNCTION__, (OVERLOAD)))->base.static_flag) = true; | ||||
4089 | |||||
4090 | *mslot = bind; | ||||
4091 | |||||
4092 | return true; | ||||
4093 | } | ||||
4094 | |||||
4095 | void | ||||
4096 | add_module_namespace_decl (tree ns, tree decl) | ||||
4097 | { | ||||
4098 | gcc_assert (!DECL_CHAIN (decl))((void)(!(!(((contains_struct_check (((contains_struct_check ( (decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4098, __FUNCTION__))), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4098, __FUNCTION__))->common.chain))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4098, __FUNCTION__), 0 : 0)); | ||||
4099 | gcc_checking_assert (!(VAR_OR_FUNCTION_DECL_P (decl)((void)(!(!((((enum tree_code) (decl)->base.code) == VAR_DECL || ((enum tree_code) (decl)->base.code) == FUNCTION_DECL) && ((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4100, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4100, __FUNCTION__))->decl_common.lang_flag_0))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4100, __FUNCTION__), 0 : 0)) | ||||
4100 | && DECL_LOCAL_DECL_P (decl)))((void)(!(!((((enum tree_code) (decl)->base.code) == VAR_DECL || ((enum tree_code) (decl)->base.code) == FUNCTION_DECL) && ((contains_struct_check (((tree_check2 ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4100, __FUNCTION__, (VAR_DECL), (FUNCTION_DECL)))), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4100, __FUNCTION__))->decl_common.lang_flag_0))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4100, __FUNCTION__), 0 : 0)); | ||||
4101 | if (CHECKING_P1) | ||||
4102 | /* Expensive already-there? check. */ | ||||
4103 | for (auto probe = NAMESPACE_LEVEL (ns)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((ns), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4103, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (ns)->base.code) != NAMESPACE_DECL || lt-> u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4103, __FUNCTION__); <->u.ns; })->level)->names; probe; | ||||
4104 | probe = DECL_CHAIN (probe)(((contains_struct_check (((contains_struct_check ((probe), ( TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4104, __FUNCTION__))), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4104, __FUNCTION__))->common.chain))) | ||||
4105 | gcc_assert (decl != probe)((void)(!(decl != probe) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4105, __FUNCTION__), 0 : 0)); | ||||
4106 | |||||
4107 | add_decl_to_level (NAMESPACE_LEVEL (ns)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((ns), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4107, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (ns)->base.code) != NAMESPACE_DECL || lt-> u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4107, __FUNCTION__); <->u.ns; })->level), decl); | ||||
4108 | |||||
4109 | if (VAR_P (decl)(((enum tree_code) (decl)->base.code) == VAR_DECL)) | ||||
4110 | maybe_register_incomplete_var (decl); | ||||
4111 | |||||
4112 | if (VAR_OR_FUNCTION_DECL_P (decl)(((enum tree_code) (decl)->base.code) == VAR_DECL || ((enum tree_code) (decl)->base.code) == FUNCTION_DECL) | ||||
4113 | && DECL_EXTERN_C_P (decl)((((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4113, __FUNCTION__))->decl_common.lang_specific) ? ((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4113, __FUNCTION__))->decl_common.lang_specific)->u.base .language : (((enum tree_code) (decl)->base.code) == FUNCTION_DECL ? lang_c : lang_cplusplus)) == lang_c)) | ||||
4114 | check_extern_c_conflict (decl); | ||||
4115 | } | ||||
4116 | |||||
4117 | /* Enter DECL into the symbol table, if that's appropriate. Returns | ||||
4118 | DECL, or a modified version thereof. */ | ||||
4119 | |||||
4120 | tree | ||||
4121 | maybe_push_decl (tree decl) | ||||
4122 | { | ||||
4123 | tree type = TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4123, __FUNCTION__))->typed.type); | ||||
4124 | |||||
4125 | /* Add this decl to the current binding level, but not if it comes | ||||
4126 | from another scope, e.g. a static member variable. TEM may equal | ||||
4127 | DECL or it may be a previous decl of the same name. */ | ||||
4128 | if (decl == error_mark_nodeglobal_trees[TI_ERROR_MARK] | ||||
4129 | || (TREE_CODE (decl)((enum tree_code) (decl)->base.code) != PARM_DECL | ||||
4130 | && DECL_CONTEXT (decl)((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4130, __FUNCTION__))->decl_minimal.context) != NULL_TREE(tree) nullptr | ||||
4131 | /* Definitions of namespace members outside their namespace are | ||||
4132 | possible. */ | ||||
4133 | && !DECL_NAMESPACE_SCOPE_P (decl)(!(((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4133, __FUNCTION__))->decl_common.lang_flag_0) && (((enum tree_code) (decl)->base.code) == CONST_DECL || (( enum tree_code) (decl)->base.code) == PARM_DECL || ((enum tree_code ) (decl)->base.code) == TYPE_DECL || ((enum tree_code) (decl )->base.code) == TEMPLATE_DECL)) && ((enum tree_code ) ((!(! (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4133, __FUNCTION__))->decl_minimal.context)) || ((enum tree_code ) (((contains_struct_check ((decl), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4133, __FUNCTION__))->decl_minimal.context))->base.code ) == TRANSLATION_UNIT_DECL) ? ((contains_struct_check ((decl) , (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4133, __FUNCTION__))->decl_minimal.context) : cp_global_trees [CPTI_GLOBAL]))->base.code) == NAMESPACE_DECL)) | ||||
4134 | || (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == TEMPLATE_DECL && !namespace_bindings_p ()) | ||||
4135 | || type == unknown_type_nodecp_global_trees[CPTI_UNKNOWN_TYPE] | ||||
4136 | /* The declaration of a template specialization does not affect | ||||
4137 | the functions available for overload resolution, so we do not | ||||
4138 | call pushdecl. */ | ||||
4139 | || (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == FUNCTION_DECL | ||||
4140 | && DECL_TEMPLATE_SPECIALIZATION (decl)((((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4140, __FUNCTION__))->decl_common.lang_specific)->u.base .use_template) == 2))) | ||||
4141 | return decl; | ||||
4142 | else | ||||
4143 | return pushdecl (decl); | ||||
4144 | } | ||||
4145 | |||||
4146 | /* Bind DECL to ID in the current_binding_level, assumed to be a local | ||||
4147 | binding level. If IS_USING is true, DECL got here through a | ||||
4148 | using-declaration. */ | ||||
4149 | |||||
4150 | static void | ||||
4151 | push_local_binding (tree id, tree decl, bool is_using) | ||||
4152 | { | ||||
4153 | /* Skip over any local classes. This makes sense if we call | ||||
4154 | push_local_binding with a friend decl of a local class. */ | ||||
4155 | cp_binding_level *b = innermost_nonclass_level (); | ||||
4156 | |||||
4157 | gcc_assert (b->kind != sk_namespace)((void)(!(b->kind != sk_namespace) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4157, __FUNCTION__), 0 : 0)); | ||||
4158 | if (find_local_binding (b, id)) | ||||
4159 | { | ||||
4160 | /* Supplement the existing binding. */ | ||||
4161 | if (!supplement_binding (IDENTIFIER_BINDING (id)(((struct lang_identifier*)(tree_check ((id), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4161, __FUNCTION__, (IDENTIFIER_NODE))))->bindings), decl)) | ||||
4162 | /* It didn't work. Something else must be bound at this | ||||
4163 | level. Do not add DECL to the list of things to pop | ||||
4164 | later. */ | ||||
4165 | return; | ||||
4166 | } | ||||
4167 | else | ||||
4168 | /* Create a new binding. */ | ||||
4169 | push_binding (id, decl, b); | ||||
4170 | |||||
4171 | if (TREE_CODE (decl)((enum tree_code) (decl)->base.code) == OVERLOAD || is_using) | ||||
4172 | /* We must put the OVERLOAD or using into a TREE_LIST since we | ||||
4173 | cannot use the decl's chain itself. */ | ||||
4174 | decl = build_tree_list (id, decl); | ||||
4175 | |||||
4176 | /* And put DECL on the list of things declared by the current | ||||
4177 | binding level. */ | ||||
4178 | add_decl_to_level (b, decl); | ||||
4179 | } | ||||
4180 | |||||
4181 | |||||
4182 | /* true means unconditionally make a BLOCK for the next level pushed. */ | ||||
4183 | |||||
4184 | static bool keep_next_level_flag; | ||||
4185 | |||||
4186 | static int binding_depth = 0; | ||||
4187 | |||||
4188 | static void | ||||
4189 | indent (int depth) | ||||
4190 | { | ||||
4191 | int i; | ||||
4192 | |||||
4193 | for (i = 0; i < depth * 2; i++) | ||||
4194 | putc (' ', stderrstderr); | ||||
4195 | } | ||||
4196 | |||||
4197 | /* Return a string describing the kind of SCOPE we have. */ | ||||
4198 | static const char * | ||||
4199 | cp_binding_level_descriptor (cp_binding_level *scope) | ||||
4200 | { | ||||
4201 | /* The order of this table must match the "scope_kind" | ||||
4202 | enumerators. */ | ||||
4203 | static const char* scope_kind_names[] = { | ||||
4204 | "block-scope", | ||||
4205 | "cleanup-scope", | ||||
4206 | "try-scope", | ||||
4207 | "catch-scope", | ||||
4208 | "for-scope", | ||||
4209 | "function-parameter-scope", | ||||
4210 | "class-scope", | ||||
4211 | "namespace-scope", | ||||
4212 | "template-parameter-scope", | ||||
4213 | "template-explicit-spec-scope" | ||||
4214 | }; | ||||
4215 | const scope_kind kind = scope->explicit_spec_p | ||||
4216 | ? sk_template_spec : scope->kind; | ||||
4217 | |||||
4218 | return scope_kind_names[kind]; | ||||
4219 | } | ||||
4220 | |||||
4221 | /* Output a debugging information about SCOPE when performing | ||||
4222 | ACTION at LINE. */ | ||||
4223 | static void | ||||
4224 | cp_binding_level_debug (cp_binding_level *scope, int line, const char *action) | ||||
4225 | { | ||||
4226 | const char *desc = cp_binding_level_descriptor (scope); | ||||
4227 | if (scope->this_entity) | ||||
4228 | verbatim ("%s %<%s(%E)%> %p %d", action, desc, | ||||
4229 | scope->this_entity, (void *) scope, line); | ||||
4230 | else | ||||
4231 | verbatim ("%s %s %p %d", action, desc, (void *) scope, line); | ||||
4232 | } | ||||
4233 | |||||
4234 | /* A chain of binding_level structures awaiting reuse. */ | ||||
4235 | |||||
4236 | static GTY((deletable)) cp_binding_level *free_binding_level; | ||||
4237 | |||||
4238 | /* Insert SCOPE as the innermost binding level. */ | ||||
4239 | |||||
4240 | void | ||||
4241 | push_binding_level (cp_binding_level *scope) | ||||
4242 | { | ||||
4243 | /* Add it to the front of currently active scopes stack. */ | ||||
4244 | scope->level_chain = current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)); | ||||
4245 | current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)) = scope; | ||||
4246 | keep_next_level_flag = false; | ||||
4247 | |||||
4248 | if (ENABLE_SCOPE_CHECKING0) | ||||
4249 | { | ||||
4250 | scope->binding_depth = binding_depth; | ||||
4251 | indent (binding_depth); | ||||
4252 | cp_binding_level_debug (scope, LOCATION_LINE (input_location)((expand_location (input_location)).line), | ||||
4253 | "push"); | ||||
4254 | binding_depth++; | ||||
4255 | } | ||||
4256 | } | ||||
4257 | |||||
4258 | /* Create a new KIND scope and make it the top of the active scopes stack. | ||||
4259 | ENTITY is the scope of the associated C++ entity (namespace, class, | ||||
4260 | function, C++0x enumeration); it is NULL otherwise. */ | ||||
4261 | |||||
4262 | cp_binding_level * | ||||
4263 | begin_scope (scope_kind kind, tree entity) | ||||
4264 | { | ||||
4265 | cp_binding_level *scope; | ||||
4266 | |||||
4267 | /* Reuse or create a struct for this binding level. */ | ||||
4268 | if (!ENABLE_SCOPE_CHECKING0 && free_binding_level) | ||||
4269 | { | ||||
4270 | scope = free_binding_level; | ||||
4271 | free_binding_level = scope->level_chain; | ||||
4272 | memset (scope, 0, sizeof (cp_binding_level)); | ||||
4273 | } | ||||
4274 | else | ||||
4275 | scope = ggc_cleared_alloc<cp_binding_level> (); | ||||
4276 | |||||
4277 | scope->this_entity = entity; | ||||
4278 | scope->more_cleanups_ok = true; | ||||
4279 | switch (kind) | ||||
4280 | { | ||||
4281 | case sk_cleanup: | ||||
4282 | scope->keep = true; | ||||
4283 | break; | ||||
4284 | |||||
4285 | case sk_template_spec: | ||||
4286 | scope->explicit_spec_p = true; | ||||
4287 | kind = sk_template_parms; | ||||
4288 | /* Fall through. */ | ||||
4289 | case sk_template_parms: | ||||
4290 | case sk_block: | ||||
4291 | case sk_try: | ||||
4292 | case sk_catch: | ||||
4293 | case sk_for: | ||||
4294 | case sk_cond: | ||||
4295 | case sk_class: | ||||
4296 | case sk_scoped_enum: | ||||
4297 | case sk_transaction: | ||||
4298 | case sk_omp: | ||||
4299 | case sk_stmt_expr: | ||||
4300 | scope->keep = keep_next_level_flag; | ||||
4301 | break; | ||||
4302 | |||||
4303 | case sk_function_parms: | ||||
4304 | scope->keep = keep_next_level_flag; | ||||
4305 | break; | ||||
4306 | |||||
4307 | case sk_namespace: | ||||
4308 | NAMESPACE_LEVEL (entity)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((entity), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4308, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (entity)->base.code) != NAMESPACE_DECL || lt ->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4308, __FUNCTION__); <->u.ns; })->level) = scope; | ||||
4309 | break; | ||||
4310 | |||||
4311 | default: | ||||
4312 | /* Should not happen. */ | ||||
4313 | gcc_unreachable ()(fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4313, __FUNCTION__)); | ||||
4314 | break; | ||||
4315 | } | ||||
4316 | scope->kind = kind; | ||||
4317 | |||||
4318 | push_binding_level (scope); | ||||
4319 | |||||
4320 | return scope; | ||||
4321 | } | ||||
4322 | |||||
4323 | /* We're about to leave current scope. Pop the top of the stack of | ||||
4324 | currently active scopes. Return the enclosing scope, now active. */ | ||||
4325 | |||||
4326 | cp_binding_level * | ||||
4327 | leave_scope (void) | ||||
4328 | { | ||||
4329 | cp_binding_level *scope = current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)); | ||||
4330 | |||||
4331 | if (scope->kind == sk_namespace && class_binding_levelscope_chain->class_bindings) | ||||
4332 | current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)) = class_binding_levelscope_chain->class_bindings; | ||||
4333 | |||||
4334 | /* We cannot leave a scope, if there are none left. */ | ||||
4335 | if (NAMESPACE_LEVEL (global_namespace)(__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((cp_global_trees[CPTI_GLOBAL]), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4335, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (cp_global_trees[CPTI_GLOBAL])->base.code) != NAMESPACE_DECL || lt->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4335, __FUNCTION__); <->u.ns; })->level)) | ||||
4336 | gcc_assert (!global_scope_p (scope))((void)(!(!((scope) == (__extension__ ({ struct lang_decl *lt = ((contains_struct_check ((cp_global_trees[CPTI_GLOBAL]), ( TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4336, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (cp_global_trees[CPTI_GLOBAL])->base.code) != NAMESPACE_DECL || lt->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4336, __FUNCTION__); <->u.ns; })->level))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4336, __FUNCTION__), 0 : 0)); | ||||
4337 | |||||
4338 | if (ENABLE_SCOPE_CHECKING0) | ||||
4339 | { | ||||
4340 | indent (--binding_depth); | ||||
4341 | cp_binding_level_debug (scope, LOCATION_LINE (input_location)((expand_location (input_location)).line), | ||||
4342 | "leave"); | ||||
4343 | } | ||||
4344 | |||||
4345 | /* Move one nesting level up. */ | ||||
4346 | current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)) = scope->level_chain; | ||||
4347 | |||||
4348 | /* Namespace-scopes are left most probably temporarily, not | ||||
4349 | completely; they can be reopened later, e.g. in namespace-extension | ||||
4350 | or any name binding activity that requires us to resume a | ||||
4351 | namespace. For classes, we cache some binding levels. For other | ||||
4352 | scopes, we just make the structure available for reuse. */ | ||||
4353 | if (scope->kind != sk_namespace | ||||
4354 | && scope != previous_class_levelscope_chain->x_previous_class_level) | ||||
4355 | { | ||||
4356 | scope->level_chain = free_binding_level; | ||||
4357 | gcc_assert (!ENABLE_SCOPE_CHECKING((void)(!(!0 || scope->binding_depth == binding_depth) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4358, __FUNCTION__), 0 : 0)) | ||||
4358 | || scope->binding_depth == binding_depth)((void)(!(!0 || scope->binding_depth == binding_depth) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4358, __FUNCTION__), 0 : 0)); | ||||
4359 | free_binding_level = scope; | ||||
4360 | } | ||||
4361 | |||||
4362 | if (scope->kind == sk_class) | ||||
4363 | { | ||||
4364 | /* Reset DEFINING_CLASS_P to allow for reuse of a | ||||
4365 | class-defining scope in a non-defining context. */ | ||||
4366 | scope->defining_class_p = 0; | ||||
4367 | |||||
4368 | /* Find the innermost enclosing class scope, and reset | ||||
4369 | CLASS_BINDING_LEVEL appropriately. */ | ||||
4370 | class_binding_levelscope_chain->class_bindings = NULLnullptr; | ||||
4371 | for (scope = current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)); scope; scope = scope->level_chain) | ||||
4372 | if (scope->kind == sk_class) | ||||
4373 | { | ||||
4374 | class_binding_levelscope_chain->class_bindings = scope; | ||||
4375 | break; | ||||
4376 | } | ||||
4377 | } | ||||
4378 | |||||
4379 | return current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)); | ||||
4380 | } | ||||
4381 | |||||
4382 | /* When we exit a toplevel class scope, we save its binding level so | ||||
4383 | that we can restore it quickly. Here, we've entered some other | ||||
4384 | class, so we must invalidate our cache. */ | ||||
4385 | |||||
4386 | void | ||||
4387 | invalidate_class_lookup_cache (void) | ||||
4388 | { | ||||
4389 | previous_class_levelscope_chain->x_previous_class_level->level_chain = free_binding_level; | ||||
4390 | free_binding_level = previous_class_levelscope_chain->x_previous_class_level; | ||||
4391 | previous_class_levelscope_chain->x_previous_class_level = NULLnullptr; | ||||
4392 | } | ||||
4393 | |||||
4394 | static void | ||||
4395 | resume_scope (cp_binding_level* b) | ||||
4396 | { | ||||
4397 | /* Resuming binding levels is meant only for namespaces, | ||||
4398 | and those cannot nest into classes. */ | ||||
4399 | gcc_assert (!class_binding_level)((void)(!(!scope_chain->class_bindings) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4399, __FUNCTION__), 0 : 0)); | ||||
4400 | /* Also, resuming a non-directly nested namespace is a no-no. */ | ||||
4401 | gcc_assert (b->level_chain == current_binding_level)((void)(!(b->level_chain == (*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)-> bindings ? &((cfun + 0)->language)->bindings : & scope_chain->bindings))) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4401, __FUNCTION__), 0 : 0)); | ||||
4402 | current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)) = b; | ||||
4403 | if (ENABLE_SCOPE_CHECKING0) | ||||
4404 | { | ||||
4405 | b->binding_depth = binding_depth; | ||||
4406 | indent (binding_depth); | ||||
4407 | cp_binding_level_debug (b, LOCATION_LINE (input_location)((expand_location (input_location)).line), "resume"); | ||||
4408 | binding_depth++; | ||||
4409 | } | ||||
4410 | } | ||||
4411 | |||||
4412 | /* Return the innermost binding level that is not for a class scope. */ | ||||
4413 | |||||
4414 | static cp_binding_level * | ||||
4415 | innermost_nonclass_level (void) | ||||
4416 | { | ||||
4417 | cp_binding_level *b; | ||||
4418 | |||||
4419 | b = current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)); | ||||
4420 | while (b->kind == sk_class) | ||||
4421 | b = b->level_chain; | ||||
4422 | |||||
4423 | return b; | ||||
4424 | } | ||||
4425 | |||||
4426 | /* We're defining an object of type TYPE. If it needs a cleanup, but | ||||
4427 | we're not allowed to add any more objects with cleanups to the current | ||||
4428 | scope, create a new binding level. */ | ||||
4429 | |||||
4430 | void | ||||
4431 | maybe_push_cleanup_level (tree type) | ||||
4432 | { | ||||
4433 | if (type != error_mark_nodeglobal_trees[TI_ERROR_MARK] | ||||
4434 | && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)(((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4434, __FUNCTION__))->type_common.lang_flag_4)) | ||||
4435 | && current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->more_cleanups_ok == 0) | ||||
4436 | { | ||||
4437 | begin_scope (sk_cleanup, NULLnullptr); | ||||
4438 | current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->statement_list = push_stmt_list (); | ||||
4439 | } | ||||
4440 | } | ||||
4441 | |||||
4442 | /* Return true if we are in the global binding level. */ | ||||
4443 | |||||
4444 | bool | ||||
4445 | global_bindings_p (void) | ||||
4446 | { | ||||
4447 | return global_scope_p (current_binding_level)(((*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))) == ( __extension__ ({ struct lang_decl *lt = ((contains_struct_check ((cp_global_trees[CPTI_GLOBAL]), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4447, __FUNCTION__))->decl_common.lang_specific); if ((( enum tree_code) (cp_global_trees[CPTI_GLOBAL])->base.code) != NAMESPACE_DECL || lt->u.base.selector != lds_ns) lang_check_failed ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4447, __FUNCTION__); <->u.ns; })->level)); | ||||
4448 | } | ||||
4449 | |||||
4450 | /* True if we are currently in a toplevel binding level. This | ||||
4451 | means either the global binding level or a namespace in a toplevel | ||||
4452 | binding level. Since there are no non-toplevel namespace levels, | ||||
4453 | this really means any namespace or template parameter level. We | ||||
4454 | also include a class whose context is toplevel. */ | ||||
4455 | |||||
4456 | bool | ||||
4457 | toplevel_bindings_p (void) | ||||
4458 | { | ||||
4459 | cp_binding_level *b = innermost_nonclass_level (); | ||||
4460 | |||||
4461 | return b->kind == sk_namespace || b->kind == sk_template_parms; | ||||
4462 | } | ||||
4463 | |||||
4464 | /* True if this is a namespace scope, or if we are defining a class | ||||
4465 | which is itself at namespace scope, or whose enclosing class is | ||||
4466 | such a class, etc. */ | ||||
4467 | |||||
4468 | bool | ||||
4469 | namespace_bindings_p (void) | ||||
4470 | { | ||||
4471 | cp_binding_level *b = innermost_nonclass_level (); | ||||
4472 | |||||
4473 | return b->kind == sk_namespace; | ||||
4474 | } | ||||
4475 | |||||
4476 | /* True if the innermost non-class scope is a block scope. */ | ||||
4477 | |||||
4478 | bool | ||||
4479 | local_bindings_p (void) | ||||
4480 | { | ||||
4481 | cp_binding_level *b = innermost_nonclass_level (); | ||||
4482 | return b->kind < sk_function_parms || b->kind == sk_omp; | ||||
4483 | } | ||||
4484 | |||||
4485 | /* True if the current level needs to have a BLOCK made. */ | ||||
4486 | |||||
4487 | bool | ||||
4488 | kept_level_p (void) | ||||
4489 | { | ||||
4490 | return (current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->blocks != NULL_TREE(tree) nullptr | ||||
4491 | || current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->keep | ||||
4492 | || current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->kind == sk_cleanup | ||||
4493 | || current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->names != NULL_TREE(tree) nullptr | ||||
4494 | || current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->using_directives); | ||||
4495 | } | ||||
4496 | |||||
4497 | /* Returns the kind of the innermost scope. */ | ||||
4498 | |||||
4499 | scope_kind | ||||
4500 | innermost_scope_kind (void) | ||||
4501 | { | ||||
4502 | return current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->kind; | ||||
4503 | } | ||||
4504 | |||||
4505 | /* Returns true if this scope was created to store template parameters. */ | ||||
4506 | |||||
4507 | bool | ||||
4508 | template_parm_scope_p (void) | ||||
4509 | { | ||||
4510 | return innermost_scope_kind () == sk_template_parms; | ||||
4511 | } | ||||
4512 | |||||
4513 | /* If KEEP is true, make a BLOCK node for the next binding level, | ||||
4514 | unconditionally. Otherwise, use the normal logic to decide whether | ||||
4515 | or not to create a BLOCK. */ | ||||
4516 | |||||
4517 | void | ||||
4518 | keep_next_level (bool keep) | ||||
4519 | { | ||||
4520 | keep_next_level_flag = keep; | ||||
4521 | } | ||||
4522 | |||||
4523 | /* Return the list of declarations of the current local scope. */ | ||||
4524 | |||||
4525 | tree | ||||
4526 | get_local_decls (void) | ||||
4527 | { | ||||
4528 | gcc_assert (current_binding_level->kind != sk_namespace((void)(!((*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))-> kind != sk_namespace && (*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)-> bindings ? &((cfun + 0)->language)->bindings : & scope_chain->bindings))->kind != sk_class) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4529, __FUNCTION__), 0 : 0)) | ||||
4529 | && current_binding_level->kind != sk_class)((void)(!((*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))-> kind != sk_namespace && (*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)-> bindings ? &((cfun + 0)->language)->bindings : & scope_chain->bindings))->kind != sk_class) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4529, __FUNCTION__), 0 : 0)); | ||||
4530 | return current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings))->names; | ||||
4531 | } | ||||
4532 | |||||
4533 | /* Return how many function prototypes we are currently nested inside. */ | ||||
4534 | |||||
4535 | int | ||||
4536 | function_parm_depth (void) | ||||
4537 | { | ||||
4538 | int level = 0; | ||||
4539 | cp_binding_level *b; | ||||
4540 | |||||
4541 | for (b = current_binding_level(*((cfun + 0) && ((cfun + 0)->language) && ((cfun + 0)->language)->bindings ? &((cfun + 0)-> language)->bindings : &scope_chain->bindings)); | ||||
4542 | b->kind == sk_function_parms; | ||||
4543 | b = b->level_chain) | ||||
4544 | ++level; | ||||
4545 | |||||
4546 | return level; | ||||
4547 | } | ||||
4548 | |||||
4549 | /* For debugging. */ | ||||
4550 | static int no_print_functions = 0; | ||||
4551 | static int no_print_builtins = 0; | ||||
4552 | |||||
4553 | static void | ||||
4554 | print_binding_level (cp_binding_level* lvl) | ||||
4555 | { | ||||
4556 | tree t; | ||||
4557 | int i = 0, len; | ||||
4558 | if (lvl->this_entity) | ||||
4559 | print_node_brief (stderrstderr, "entity=", lvl->this_entity, 1); | ||||
4560 | fprintf (stderrstderr, " blocks=%p", (void *) lvl->blocks); | ||||
4561 | if (lvl->more_cleanups_ok) | ||||
4562 | fprintf (stderrstderr, " more-cleanups-ok"); | ||||
4563 | if (lvl->have_cleanups) | ||||
4564 | fprintf (stderrstderr, " have-cleanups"); | ||||
4565 | fprintf (stderrstderr, "\n"); | ||||
4566 | if (lvl->names) | ||||
4567 | { | ||||
4568 | fprintf (stderrstderr, " names:\t"); | ||||
4569 | /* We can probably fit 3 names to a line? */ | ||||
4570 | for (t = lvl->names; t; t = TREE_CHAIN (t)((contains_struct_check ((t), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4570, __FUNCTION__))->common.chain)) | ||||
4571 | { | ||||
4572 | if (no_print_functions && (TREE_CODE (t)((enum tree_code) (t)->base.code) == FUNCTION_DECL)) | ||||
4573 | continue; | ||||
4574 | if (no_print_builtins | ||||
4575 | && (TREE_CODE (t)((enum tree_code) (t)->base.code) == TYPE_DECL) | ||||
4576 | && DECL_IS_UNDECLARED_BUILTIN (t)(((contains_struct_check ((t), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4576, __FUNCTION__))->decl_minimal.locus) <= ((location_t ) 1))) | ||||
4577 | continue; | ||||
4578 | |||||
4579 | /* Function decls tend to have longer names. */ | ||||
4580 | if (TREE_CODE (t)((enum tree_code) (t)->base.code) == FUNCTION_DECL) | ||||
4581 | len = 3; | ||||
4582 | else | ||||
4583 | len = 2; | ||||
4584 | i += len; | ||||
4585 | if (i > 6) | ||||
4586 | { | ||||
4587 | fprintf (stderrstderr, "\n\t"); | ||||
4588 | i = len; | ||||
4589 | } | ||||
4590 | print_node_brief (stderrstderr, "", t, 0); | ||||
4591 | if (t == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||
4592 | break; | ||||
4593 | } | ||||
4594 | if (i) | ||||
4595 | fprintf (stderrstderr, "\n"); | ||||
4596 | } | ||||
4597 | if (vec_safe_length (lvl->class_shadowed)) | ||||
4598 | { | ||||
4599 | size_t i; | ||||
4600 | cp_class_binding *b; | ||||
4601 | fprintf (stderrstderr, " class-shadowed:"); | ||||
4602 | FOR_EACH_VEC_ELT (*lvl->class_shadowed, i, b)for (i = 0; (*lvl->class_shadowed).iterate ((i), &(b)) ; ++(i)) | ||||
4603 | fprintf (stderrstderr, " %s ", IDENTIFIER_POINTER (b->identifier)((const char *) (tree_check ((b->identifier), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/cp/name-lookup.cc" , 4603, __FUNCTION__, (IDENTIFIER_NODE)))->identifier.id.str )); | ||||