File: | build/gcc/cp/name-lookup.cc |
Warning: | line 2180, column 5 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
| ||||||
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->c |