Require target lra in gcc.c-torture/compile/asmgoto-6.c
[official-gcc.git] / gcc / cp / lex.cc
blob64bcfb1819688ae32816902ac80e8cba8d3b60de
1 /* Separate lexical analyzer for GNU C++.
2 Copyright (C) 1987-2023 Free Software Foundation, Inc.
3 Hacked by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GCC.
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.
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.
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/>. */
22 /* This file is the lexical analyzer for GNU C++. */
24 #include "config.h"
25 /* For use with name_hint. */
26 #define INCLUDE_MEMORY
27 #include "system.h"
28 #include "coretypes.h"
29 #include "cp-tree.h"
30 #include "stringpool.h"
31 #include "c-family/c-pragma.h"
32 #include "c-family/c-objc.h"
33 #include "gcc-rich-location.h"
34 #include "cp-name-hint.h"
35 #include "langhooks.h"
37 static int interface_strcmp (const char *);
38 static void init_cp_pragma (void);
40 static tree parse_strconst_pragma (const char *, int);
41 static void handle_pragma_vtable (cpp_reader *);
42 static void handle_pragma_unit (cpp_reader *);
43 static void handle_pragma_interface (cpp_reader *);
44 static void handle_pragma_implementation (cpp_reader *);
46 static void init_operators (void);
47 static void copy_lang_type (tree);
49 /* A constraint that can be tested at compile time. */
50 #define CONSTRAINT(name, expr) extern int constraint_##name [(expr) ? 1 : -1]
52 /* Functions and data structures for #pragma interface.
54 `#pragma implementation' means that the main file being compiled
55 is considered to implement (provide) the classes that appear in
56 its main body. I.e., if this is file "foo.cc", and class `bar'
57 is defined in "foo.cc", then we say that "foo.cc implements bar".
59 All main input files "implement" themselves automagically.
61 `#pragma interface' means that unless this file (of the form "foo.h"
62 is not presently being included by file "foo.cc", the
63 CLASSTYPE_INTERFACE_ONLY bit gets set. The effect is that none
64 of the vtables nor any of the inline functions defined in foo.h
65 will ever be output.
67 There are cases when we want to link files such as "defs.h" and
68 "main.cc". In this case, we give "defs.h" a `#pragma interface',
69 and "main.cc" has `#pragma implementation "defs.h"'. */
71 struct impl_files
73 const char *filename;
74 struct impl_files *next;
77 static struct impl_files *impl_file_chain;
79 void
80 cxx_finish (void)
82 c_common_finish ();
85 ovl_op_info_t ovl_op_info[2][OVL_OP_MAX] =
88 {NULL_TREE, NULL, NULL, ERROR_MARK, OVL_OP_ERROR_MARK, 0},
89 {NULL_TREE, NULL, NULL, NOP_EXPR, OVL_OP_NOP_EXPR, 0},
90 #define DEF_OPERATOR(NAME, CODE, MANGLING, FLAGS) \
91 {NULL_TREE, NAME, MANGLING, CODE, OVL_OP_##CODE, FLAGS},
92 #define OPERATOR_TRANSITION }, { \
93 {NULL_TREE, NULL, NULL, ERROR_MARK, OVL_OP_ERROR_MARK, 0},
94 #include "operators.def"
97 unsigned char ovl_op_mapping[MAX_TREE_CODES];
98 unsigned char ovl_op_alternate[OVL_OP_MAX];
100 /* Get the name of the kind of identifier T. */
102 const char *
103 get_identifier_kind_name (tree id)
105 /* Keep in sync with cp_id_kind enumeration. */
106 static const char *const names[cik_max] = {
107 "normal", "keyword", "constructor", "destructor",
108 "simple-op", "assign-op", "conv-op", "<reserved>udlit-op"
111 unsigned kind = 0;
112 kind |= IDENTIFIER_KIND_BIT_2 (id) << 2;
113 kind |= IDENTIFIER_KIND_BIT_1 (id) << 1;
114 kind |= IDENTIFIER_KIND_BIT_0 (id) << 0;
116 return names[kind];
119 /* Set the identifier kind, which we expect to currently be zero. */
121 void
122 set_identifier_kind (tree id, cp_identifier_kind kind)
124 gcc_checking_assert (!IDENTIFIER_KIND_BIT_2 (id)
125 & !IDENTIFIER_KIND_BIT_1 (id)
126 & !IDENTIFIER_KIND_BIT_0 (id));
127 IDENTIFIER_KIND_BIT_2 (id) |= (kind >> 2) & 1;
128 IDENTIFIER_KIND_BIT_1 (id) |= (kind >> 1) & 1;
129 IDENTIFIER_KIND_BIT_0 (id) |= (kind >> 0) & 1;
132 /* Create and tag the internal operator name for the overloaded
133 operator PTR describes. */
135 static tree
136 set_operator_ident (ovl_op_info_t *ptr)
138 char buffer[32];
139 size_t len = snprintf (buffer, sizeof (buffer), "operator%s%s",
140 &" "[ptr->name[0] && ptr->name[0] != '_'
141 && !ISALPHA (ptr->name[0])],
142 ptr->name);
143 gcc_checking_assert (len < sizeof (buffer));
145 tree ident = get_identifier_with_length (buffer, len);
146 ptr->identifier = ident;
148 return ident;
151 /* Initialize data structures that keep track of operator names. */
153 static void
154 init_operators (void)
156 /* We rely on both these being zero. */
157 gcc_checking_assert (!OVL_OP_ERROR_MARK && !ERROR_MARK);
159 /* This loop iterates backwards because we need to move the
160 assignment operators down to their correct slots. I.e. morally
161 equivalent to an overlapping memmove where dest > src. Slot
162 zero is for error_mark, so hae no operator. */
163 for (unsigned ix = OVL_OP_MAX; --ix;)
165 ovl_op_info_t *op_ptr = &ovl_op_info[false][ix];
167 if (op_ptr->name)
169 tree ident = set_operator_ident (op_ptr);
170 if (unsigned index = IDENTIFIER_CP_INDEX (ident))
172 ovl_op_info_t *bin_ptr = &ovl_op_info[false][index];
174 /* They should only differ in unary/binary ness. */
175 gcc_checking_assert ((op_ptr->flags ^ bin_ptr->flags)
176 == OVL_OP_FLAG_AMBIARY);
177 bin_ptr->flags |= op_ptr->flags;
178 ovl_op_alternate[index] = ix;
180 else
182 IDENTIFIER_CP_INDEX (ident) = ix;
183 set_identifier_kind (ident, cik_simple_op);
186 if (op_ptr->tree_code)
188 gcc_checking_assert (op_ptr->ovl_op_code == ix
189 && !ovl_op_mapping[op_ptr->tree_code]);
190 ovl_op_mapping[op_ptr->tree_code] = op_ptr->ovl_op_code;
193 ovl_op_info_t *as_ptr = &ovl_op_info[true][ix];
194 if (as_ptr->name)
196 /* These will be placed at the start of the array, move to
197 the correct slot and initialize. */
198 if (as_ptr->ovl_op_code != ix)
200 ovl_op_info_t *dst_ptr = &ovl_op_info[true][as_ptr->ovl_op_code];
201 gcc_assert (as_ptr->ovl_op_code > ix && !dst_ptr->tree_code);
202 memcpy (dst_ptr, as_ptr, sizeof (*dst_ptr));
203 memset (as_ptr, 0, sizeof (*as_ptr));
204 as_ptr = dst_ptr;
207 tree ident = set_operator_ident (as_ptr);
208 gcc_checking_assert (!IDENTIFIER_CP_INDEX (ident));
209 IDENTIFIER_CP_INDEX (ident) = as_ptr->ovl_op_code;
210 set_identifier_kind (ident, cik_assign_op);
212 gcc_checking_assert (!ovl_op_mapping[as_ptr->tree_code]
213 || (ovl_op_mapping[as_ptr->tree_code]
214 == as_ptr->ovl_op_code));
215 ovl_op_mapping[as_ptr->tree_code] = as_ptr->ovl_op_code;
220 /* Initialize the reserved words. */
222 void
223 init_reswords (void)
225 unsigned int i;
226 tree id;
227 int mask = 0;
229 if (cxx_dialect < cxx11)
230 mask |= D_CXX11;
231 if (cxx_dialect < cxx20)
232 mask |= D_CXX20;
233 if (!flag_concepts)
234 mask |= D_CXX_CONCEPTS;
235 if (!flag_coroutines)
236 mask |= D_CXX_COROUTINES;
237 if (!flag_modules)
238 mask |= D_CXX_MODULES;
239 if (!flag_tm)
240 mask |= D_TRANSMEM;
241 if (!flag_char8_t)
242 mask |= D_CXX_CHAR8_T;
243 if (flag_no_asm)
244 mask |= D_ASM | D_EXT | D_EXT11;
245 if (flag_no_gnu_keywords)
246 mask |= D_EXT | D_EXT11;
248 /* The Objective-C keywords are all context-dependent. */
249 mask |= D_OBJC;
251 ridpointers = ggc_cleared_vec_alloc<tree> ((int) RID_MAX);
252 for (i = 0; i < num_c_common_reswords; i++)
254 if (c_common_reswords[i].disable & D_CONLY)
255 continue;
256 id = get_identifier (c_common_reswords[i].word);
257 C_SET_RID_CODE (id, c_common_reswords[i].rid);
258 ridpointers [(int) c_common_reswords[i].rid] = id;
259 if (! (c_common_reswords[i].disable & mask))
260 set_identifier_kind (id, cik_keyword);
263 for (i = 0; i < NUM_INT_N_ENTS; i++)
265 char name[50];
266 sprintf (name, "__int%d", int_n_data[i].bitsize);
267 id = get_identifier (name);
268 C_SET_RID_CODE (id, RID_FIRST_INT_N + i);
269 set_identifier_kind (id, cik_keyword);
271 sprintf (name, "__int%d__", int_n_data[i].bitsize);
272 id = get_identifier (name);
273 C_SET_RID_CODE (id, RID_FIRST_INT_N + i);
274 set_identifier_kind (id, cik_keyword);
277 if (flag_openmp)
279 id = get_identifier ("omp_all_memory");
280 C_SET_RID_CODE (id, RID_OMP_ALL_MEMORY);
281 set_identifier_kind (id, cik_keyword);
282 ridpointers [RID_OMP_ALL_MEMORY] = id;
286 static void
287 init_cp_pragma (void)
289 c_register_pragma (0, "vtable", handle_pragma_vtable);
290 c_register_pragma (0, "unit", handle_pragma_unit);
291 c_register_pragma (0, "interface", handle_pragma_interface);
292 c_register_pragma (0, "implementation", handle_pragma_implementation);
293 c_register_pragma ("GCC", "interface", handle_pragma_interface);
294 c_register_pragma ("GCC", "implementation", handle_pragma_implementation);
297 /* TRUE if a code represents a statement. */
299 bool statement_code_p[MAX_TREE_CODES];
301 /* Initialize the C++ front end. This function is very sensitive to
302 the exact order that things are done here. It would be nice if the
303 initialization done by this routine were moved to its subroutines,
304 and the ordering dependencies clarified and reduced. */
305 bool
306 cxx_init (void)
308 location_t saved_loc;
309 unsigned int i;
310 static const enum tree_code stmt_codes[] = {
311 CTOR_INITIALIZER, TRY_BLOCK, HANDLER,
312 EH_SPEC_BLOCK, USING_STMT, TAG_DEFN,
313 IF_STMT, CLEANUP_STMT, FOR_STMT,
314 RANGE_FOR_STMT, WHILE_STMT, DO_STMT,
315 BREAK_STMT, CONTINUE_STMT, SWITCH_STMT,
316 EXPR_STMT, OMP_DEPOBJ
319 memset (&statement_code_p, 0, sizeof (statement_code_p));
320 for (i = 0; i < ARRAY_SIZE (stmt_codes); i++)
321 statement_code_p[stmt_codes[i]] = true;
323 saved_loc = input_location;
324 input_location = BUILTINS_LOCATION;
326 init_reswords ();
327 init_tree ();
328 init_cp_semantics ();
329 init_operators ();
330 init_method ();
332 current_function_decl = NULL;
334 class_type_node = ridpointers[(int) RID_CLASS];
336 cxx_init_decl_processing ();
338 if (c_common_init () == false)
340 input_location = saved_loc;
341 return false;
344 init_cp_pragma ();
346 input_location = saved_loc;
347 return true;
350 /* Return nonzero if S is not considered part of an
351 INTERFACE/IMPLEMENTATION pair. Otherwise, return 0. */
353 static int
354 interface_strcmp (const char* s)
356 /* Set the interface/implementation bits for this scope. */
357 struct impl_files *ifiles;
358 const char *s1;
360 for (ifiles = impl_file_chain; ifiles; ifiles = ifiles->next)
362 const char *t1 = ifiles->filename;
363 s1 = s;
365 if (*s1 == 0 || filename_ncmp (s1, t1, 1) != 0)
366 continue;
368 while (*s1 != 0 && filename_ncmp (s1, t1, 1) == 0)
369 s1++, t1++;
371 /* A match. */
372 if (*s1 == *t1)
373 return 0;
375 /* Don't get faked out by xxx.yyy.cc vs xxx.zzz.cc. */
376 if (strchr (s1, '.') || strchr (t1, '.'))
377 continue;
379 if (*s1 == '\0' || s1[-1] != '.' || t1[-1] != '.')
380 continue;
382 /* A match. */
383 return 0;
386 /* No matches. */
387 return 1;
390 /* We've just read a cpp-token, figure out our next state. Hey, this
391 is a hand-coded co-routine! */
393 struct module_token_filter
395 enum state
397 idle,
398 module_first,
399 module_cont,
400 module_end,
403 enum state state : 8;
404 bool is_import : 1;
405 bool got_export : 1;
406 bool got_colon : 1;
407 bool want_dot : 1;
409 location_t token_loc;
410 cpp_reader *reader;
411 module_state *module;
412 module_state *import;
414 module_token_filter (cpp_reader *reader)
415 : state (idle), is_import (false),
416 got_export (false), got_colon (false), want_dot (false),
417 token_loc (UNKNOWN_LOCATION),
418 reader (reader), module (NULL), import (NULL)
422 /* Process the next token. Note we cannot see CPP_EOF inside a
423 pragma -- a CPP_PRAGMA_EOL always happens. */
424 uintptr_t resume (int type, int keyword, tree value, location_t loc)
426 unsigned res = 0;
428 switch (state)
430 case idle:
431 if (type == CPP_KEYWORD)
432 switch (keyword)
434 default:
435 break;
437 case RID__EXPORT:
438 got_export = true;
439 res = lang_hooks::PT_begin_pragma;
440 break;
442 case RID__IMPORT:
443 is_import = true;
444 /* FALLTHRU */
445 case RID__MODULE:
446 state = module_first;
447 want_dot = false;
448 got_colon = false;
449 token_loc = loc;
450 import = NULL;
451 if (!got_export)
452 res = lang_hooks::PT_begin_pragma;
453 break;
455 break;
457 case module_first:
458 if (is_import && type == CPP_HEADER_NAME)
460 /* A header name. The preprocessor will have already
461 done include searching and canonicalization. */
462 state = module_end;
463 goto header_unit;
466 if (type == CPP_PADDING || type == CPP_COMMENT)
467 break;
469 state = module_cont;
470 if (type == CPP_COLON && module)
472 got_colon = true;
473 import = module;
474 break;
476 /* FALLTHROUGH */
478 case module_cont:
479 switch (type)
481 case CPP_PADDING:
482 case CPP_COMMENT:
483 break;
485 default:
486 /* If we ever need to pay attention to attributes for
487 header modules, more logic will be needed. */
488 state = module_end;
489 break;
491 case CPP_COLON:
492 if (got_colon)
493 state = module_end;
494 got_colon = true;
495 /* FALLTHROUGH */
496 case CPP_DOT:
497 if (!want_dot)
498 state = module_end;
499 want_dot = false;
500 break;
502 case CPP_PRAGMA_EOL:
503 goto module_end;
505 case CPP_NAME:
506 if (want_dot)
508 /* Got name instead of [.:]. */
509 state = module_end;
510 break;
512 header_unit:
513 import = get_module (value, import, got_colon);
514 want_dot = true;
515 break;
517 break;
519 case module_end:
520 if (type == CPP_PRAGMA_EOL)
522 module_end:;
523 /* End of the directive, handle the name. */
524 if (import && (is_import || !flag_header_unit))
525 if (module_state *m
526 = preprocess_module (import, token_loc, module != NULL,
527 is_import, got_export, reader))
528 if (!module)
529 module = m;
531 is_import = got_export = false;
532 state = idle;
534 break;
537 return res;
541 /* Initialize or teardown. */
543 uintptr_t
544 module_token_cdtor (cpp_reader *pfile, uintptr_t data_)
546 if (module_token_filter *filter = reinterpret_cast<module_token_filter *> (data_))
548 preprocessed_module (pfile);
549 delete filter;
550 data_ = 0;
552 else if (modules_p ())
553 data_ = reinterpret_cast<uintptr_t > (new module_token_filter (pfile));
555 return data_;
558 uintptr_t
559 module_token_lang (int type, int keyword, tree value, location_t loc,
560 uintptr_t data_)
562 module_token_filter *filter = reinterpret_cast<module_token_filter *> (data_);
563 return filter->resume (type, keyword, value, loc);
566 uintptr_t
567 module_token_pre (cpp_reader *pfile, const cpp_token *tok, uintptr_t data_)
569 if (!tok)
570 return module_token_cdtor (pfile, data_);
572 int type = tok->type;
573 int keyword = RID_MAX;
574 tree value = NULL_TREE;
576 if (tok->type == CPP_NAME)
578 value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node));
579 if (IDENTIFIER_KEYWORD_P (value))
581 keyword = C_RID_CODE (value);
582 type = CPP_KEYWORD;
585 else if (tok->type == CPP_HEADER_NAME)
586 value = build_string (tok->val.str.len, (const char *)tok->val.str.text);
588 return module_token_lang (type, keyword, value, tok->src_loc, data_);
591 /* Parse a #pragma whose sole argument is a string constant.
592 If OPT is true, the argument is optional. */
593 static tree
594 parse_strconst_pragma (const char* name, int opt)
596 tree result, x;
597 enum cpp_ttype t;
599 t = pragma_lex (&result);
600 if (t == CPP_STRING)
602 if (pragma_lex (&x) != CPP_EOF)
603 warning (0, "junk at end of %<#pragma %s%>", name);
604 return result;
607 if (t == CPP_EOF && opt)
608 return NULL_TREE;
610 error ("invalid %<#pragma %s%>", name);
611 return error_mark_node;
614 static void
615 handle_pragma_vtable (cpp_reader* /*dfile*/)
617 parse_strconst_pragma ("vtable", 0);
618 sorry ("%<#pragma vtable%> no longer supported");
621 static void
622 handle_pragma_unit (cpp_reader* /*dfile*/)
624 /* Validate syntax, but don't do anything. */
625 parse_strconst_pragma ("unit", 0);
628 static void
629 handle_pragma_interface (cpp_reader* /*dfile*/)
631 tree fname = parse_strconst_pragma ("interface", 1);
632 struct c_fileinfo *finfo;
633 const char *filename;
635 if (fname == error_mark_node)
636 return;
637 else if (fname == 0)
638 filename = lbasename (LOCATION_FILE (input_location));
639 else
640 filename = TREE_STRING_POINTER (fname);
642 finfo = get_fileinfo (LOCATION_FILE (input_location));
644 if (impl_file_chain == 0)
646 /* If this is zero at this point, then we are
647 auto-implementing. */
648 if (main_input_filename == 0)
649 main_input_filename = LOCATION_FILE (input_location);
652 finfo->interface_only = interface_strcmp (filename);
653 /* If MULTIPLE_SYMBOL_SPACES is set, we cannot assume that we can see
654 a definition in another file. */
655 if (!MULTIPLE_SYMBOL_SPACES || !finfo->interface_only)
656 finfo->interface_unknown = 0;
659 /* Note that we have seen a #pragma implementation for the key MAIN_FILENAME.
660 We used to only allow this at toplevel, but that restriction was buggy
661 in older compilers and it seems reasonable to allow it in the headers
662 themselves, too. It only needs to precede the matching #p interface.
664 We don't touch finfo->interface_only or finfo->interface_unknown;
665 the user must specify a matching #p interface for this to have
666 any effect. */
668 static void
669 handle_pragma_implementation (cpp_reader* /*dfile*/)
671 tree fname = parse_strconst_pragma ("implementation", 1);
672 const char *filename;
673 struct impl_files *ifiles = impl_file_chain;
675 if (fname == error_mark_node)
676 return;
678 if (fname == 0)
680 if (main_input_filename)
681 filename = main_input_filename;
682 else
683 filename = LOCATION_FILE (input_location);
684 filename = lbasename (filename);
686 else
688 filename = TREE_STRING_POINTER (fname);
689 if (cpp_included_before (parse_in, filename, input_location))
690 warning (0, "%<#pragma implementation%> for %qs appears after "
691 "file is included", filename);
694 for (; ifiles; ifiles = ifiles->next)
696 if (! filename_cmp (ifiles->filename, filename))
697 break;
699 if (ifiles == 0)
701 ifiles = XNEW (struct impl_files);
702 ifiles->filename = xstrdup (filename);
703 ifiles->next = impl_file_chain;
704 impl_file_chain = ifiles;
708 /* Issue an error message indicating that the lookup of NAME (an
709 IDENTIFIER_NODE) failed. Returns the ERROR_MARK_NODE. */
711 tree
712 unqualified_name_lookup_error (tree name, location_t loc)
714 if (loc == UNKNOWN_LOCATION)
715 loc = cp_expr_loc_or_input_loc (name);
717 if (IDENTIFIER_ANY_OP_P (name))
718 error_at (loc, "%qD not defined", name);
719 else
721 if (!objc_diagnose_private_ivar (name))
723 auto_diagnostic_group d;
724 name_hint hint = suggest_alternatives_for (loc, name, true);
725 if (const char *suggestion = hint.suggestion ())
727 gcc_rich_location richloc (loc);
728 richloc.add_fixit_replace (suggestion);
729 error_at (&richloc,
730 "%qD was not declared in this scope; did you mean %qs?",
731 name, suggestion);
733 else
734 error_at (loc, "%qD was not declared in this scope", name);
736 /* Prevent repeated error messages by creating a VAR_DECL with
737 this NAME in the innermost block scope. */
738 if (local_bindings_p ())
740 tree decl = build_decl (loc, VAR_DECL, name, error_mark_node);
741 TREE_USED (decl) = true;
742 pushdecl (decl);
746 return error_mark_node;
749 /* Like unqualified_name_lookup_error, but NAME_EXPR is an unqualified-id
750 NAME, encapsulated with its location in a CP_EXPR, used as a function.
751 Returns an appropriate expression for NAME. */
753 tree
754 unqualified_fn_lookup_error (cp_expr name_expr)
756 tree name = name_expr.get_value ();
757 location_t loc = name_expr.get_location ();
758 if (loc == UNKNOWN_LOCATION)
759 loc = input_location;
761 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
762 name = TREE_OPERAND (name, 0);
764 if (processing_template_decl)
766 /* In a template, it is invalid to write "f()" or "f(3)" if no
767 declaration of "f" is available. Historically, G++ and most
768 other compilers accepted that usage since they deferred all name
769 lookup until instantiation time rather than doing unqualified
770 name lookup at template definition time; explain to the user what
771 is going wrong.
773 Note that we have the exact wording of the following message in
774 the manual (trouble.texi, node "Name lookup"), so they need to
775 be kept in synch. */
776 permerror (loc, "there are no arguments to %qD that depend on a template "
777 "parameter, so a declaration of %qD must be available",
778 name, name);
780 if (!flag_permissive)
782 static bool hint;
783 if (!hint)
785 inform (loc, "(if you use %<-fpermissive%>, G++ will accept your "
786 "code, but allowing the use of an undeclared name is "
787 "deprecated)");
788 hint = true;
791 return name;
794 return unqualified_name_lookup_error (name, loc);
798 /* Hasher for the conversion operator name hash table. */
799 struct conv_type_hasher : ggc_ptr_hash<tree_node>
801 /* Hash NODE, an identifier node in the table. TYPE_UID is
802 suitable, as we're not concerned about matching canonicalness
803 here. */
804 static hashval_t hash (tree node)
806 return (hashval_t) TYPE_UID (TREE_TYPE (node));
809 /* Compare NODE, an identifier node in the table, against TYPE, an
810 incoming TYPE being looked up. */
811 static bool equal (tree node, tree type)
813 return TREE_TYPE (node) == type;
817 /* This hash table maps TYPEs to the IDENTIFIER for a conversion
818 operator to TYPE. The nodes are IDENTIFIERs whose TREE_TYPE is the
819 TYPE. */
821 static GTY (()) hash_table<conv_type_hasher> *conv_type_names;
823 /* Return an identifier for a conversion operator to TYPE. We can get
824 from the returned identifier to the type. We store TYPE, which is
825 not necessarily the canonical type, which allows us to report the
826 form the user used in error messages. All these identifiers are
827 not in the identifier hash table, and have the same string name.
828 These IDENTIFIERS are not in the identifier hash table, and all
829 have the same IDENTIFIER_STRING. */
831 tree
832 make_conv_op_name (tree type)
834 if (type == error_mark_node)
835 return error_mark_node;
837 if (conv_type_names == NULL)
838 conv_type_names = hash_table<conv_type_hasher>::create_ggc (31);
840 tree *slot = conv_type_names->find_slot_with_hash
841 (type, (hashval_t) TYPE_UID (type), INSERT);
842 tree identifier = *slot;
843 if (!identifier)
845 /* Create a raw IDENTIFIER outside of the identifier hash
846 table. */
847 identifier = copy_node (conv_op_identifier);
849 /* Just in case something managed to bind. */
850 IDENTIFIER_BINDING (identifier) = NULL;
852 /* Hang TYPE off the identifier so it can be found easily later
853 when performing conversions. */
854 TREE_TYPE (identifier) = type;
856 *slot = identifier;
859 return identifier;
862 /* Wrapper around build_lang_decl_loc(). Should gradually move to
863 build_lang_decl_loc() and then rename build_lang_decl_loc() back to
864 build_lang_decl(). */
866 tree
867 build_lang_decl (enum tree_code code, tree name, tree type)
869 return build_lang_decl_loc (input_location, code, name, type);
872 /* Build a decl from CODE, NAME, TYPE declared at LOC, and then add
873 DECL_LANG_SPECIFIC info to the result. */
875 tree
876 build_lang_decl_loc (location_t loc, enum tree_code code, tree name, tree type)
878 tree t;
880 t = build_decl (loc, code, name, type);
881 retrofit_lang_decl (t);
883 return t;
886 /* Maybe add a raw lang_decl to T, a decl. Return true if it needed
887 one. */
889 bool
890 maybe_add_lang_decl_raw (tree t, bool decomp_p)
892 size_t size;
893 lang_decl_selector sel;
895 if (decomp_p)
896 sel = lds_decomp, size = sizeof (struct lang_decl_decomp);
897 else if (TREE_CODE (t) == FUNCTION_DECL)
898 sel = lds_fn, size = sizeof (struct lang_decl_fn);
899 else if (TREE_CODE (t) == NAMESPACE_DECL)
900 sel = lds_ns, size = sizeof (struct lang_decl_ns);
901 else if (TREE_CODE (t) == PARM_DECL)
902 sel = lds_parm, size = sizeof (struct lang_decl_parm);
903 else if (LANG_DECL_HAS_MIN (t))
904 sel = lds_min, size = sizeof (struct lang_decl_min);
905 else
906 return false;
908 struct lang_decl *ld
909 = (struct lang_decl *) ggc_internal_cleared_alloc (size);
911 ld->u.base.selector = sel;
912 DECL_LANG_SPECIFIC (t) = ld;
914 if (sel == lds_ns)
915 /* Who'd create a namespace, only to put nothing in it? */
916 ld->u.ns.bindings = hash_table<named_decl_hash>::create_ggc (499);
918 if (GATHER_STATISTICS)
920 tree_node_counts[(int)lang_decl] += 1;
921 tree_node_sizes[(int)lang_decl] += size;
923 return true;
926 /* T has just had a decl_lang_specific added. Initialize its
927 linkage. */
929 static void
930 set_decl_linkage (tree t)
932 if (current_lang_name == lang_name_cplusplus
933 || decl_linkage (t) == lk_none)
934 SET_DECL_LANGUAGE (t, lang_cplusplus);
935 else if (current_lang_name == lang_name_c)
936 SET_DECL_LANGUAGE (t, lang_c);
937 else
938 gcc_unreachable ();
941 /* T is a VAR_DECL node that needs to be a decomposition of BASE. */
943 void
944 fit_decomposition_lang_decl (tree t, tree base)
946 if (struct lang_decl *orig_ld = DECL_LANG_SPECIFIC (t))
948 if (orig_ld->u.base.selector == lds_min)
950 maybe_add_lang_decl_raw (t, true);
951 memcpy (DECL_LANG_SPECIFIC (t), orig_ld,
952 sizeof (struct lang_decl_min));
953 /* Reset selector, which will have been bashed by the
954 memcpy. */
955 DECL_LANG_SPECIFIC (t)->u.base.selector = lds_decomp;
957 else
958 gcc_checking_assert (orig_ld->u.base.selector == lds_decomp);
960 else
962 maybe_add_lang_decl_raw (t, true);
963 set_decl_linkage (t);
966 DECL_DECOMP_BASE (t) = base;
969 /* Add DECL_LANG_SPECIFIC info to T, if it needs one. Generally
970 every C++ decl needs one, but C builtins etc do not. */
972 void
973 retrofit_lang_decl (tree t)
975 if (DECL_LANG_SPECIFIC (t))
976 return;
978 if (maybe_add_lang_decl_raw (t, false))
979 set_decl_linkage (t);
982 void
983 cxx_dup_lang_specific_decl (tree node)
985 int size;
987 if (! DECL_LANG_SPECIFIC (node))
988 return;
990 switch (DECL_LANG_SPECIFIC (node)->u.base.selector)
992 case lds_min:
993 size = sizeof (struct lang_decl_min);
994 break;
995 case lds_fn:
996 size = sizeof (struct lang_decl_fn);
997 break;
998 case lds_ns:
999 size = sizeof (struct lang_decl_ns);
1000 break;
1001 case lds_parm:
1002 size = sizeof (struct lang_decl_parm);
1003 break;
1004 case lds_decomp:
1005 size = sizeof (struct lang_decl_decomp);
1006 break;
1007 default:
1008 gcc_unreachable ();
1011 struct lang_decl *ld = (struct lang_decl *) ggc_internal_alloc (size);
1012 memcpy (ld, DECL_LANG_SPECIFIC (node), size);
1013 DECL_LANG_SPECIFIC (node) = ld;
1015 /* Directly clear some flags that do not apply to the copy
1016 (module_purview_p still does). */
1017 ld->u.base.module_entity_p = false;
1018 ld->u.base.module_import_p = false;
1019 ld->u.base.module_keyed_decls_p = false;
1021 if (GATHER_STATISTICS)
1023 tree_node_counts[(int)lang_decl] += 1;
1024 tree_node_sizes[(int)lang_decl] += size;
1028 /* Copy DECL, including any language-specific parts. */
1030 tree
1031 copy_decl (tree decl MEM_STAT_DECL)
1033 tree copy;
1035 copy = copy_node (decl PASS_MEM_STAT);
1036 cxx_dup_lang_specific_decl (copy);
1037 return copy;
1040 /* Replace the shared language-specific parts of NODE with a new copy. */
1042 static void
1043 copy_lang_type (tree node)
1045 if (! TYPE_LANG_SPECIFIC (node))
1046 return;
1048 auto *lt = (struct lang_type *) ggc_internal_alloc (sizeof (struct lang_type));
1050 memcpy (lt, TYPE_LANG_SPECIFIC (node), (sizeof (struct lang_type)));
1051 TYPE_LANG_SPECIFIC (node) = lt;
1053 if (GATHER_STATISTICS)
1055 tree_node_counts[(int)lang_type] += 1;
1056 tree_node_sizes[(int)lang_type] += sizeof (struct lang_type);
1060 /* Copy TYPE, including any language-specific parts. */
1062 tree
1063 copy_type (tree type MEM_STAT_DECL)
1065 tree copy;
1067 copy = copy_node (type PASS_MEM_STAT);
1068 copy_lang_type (copy);
1069 return copy;
1072 /* Add a raw lang_type to T, a type, should it need one. */
1074 bool
1075 maybe_add_lang_type_raw (tree t)
1077 if (!RECORD_OR_UNION_CODE_P (TREE_CODE (t)))
1078 return false;
1080 auto *lt = (struct lang_type *) (ggc_internal_cleared_alloc
1081 (sizeof (struct lang_type)));
1082 TYPE_LANG_SPECIFIC (t) = lt;
1084 if (GATHER_STATISTICS)
1086 tree_node_counts[(int)lang_type] += 1;
1087 tree_node_sizes[(int)lang_type] += sizeof (struct lang_type);
1090 return true;
1093 tree
1094 cxx_make_type (enum tree_code code MEM_STAT_DECL)
1096 tree t = make_node (code PASS_MEM_STAT);
1098 if (maybe_add_lang_type_raw (t))
1100 /* Set up some flags that give proper default behavior. */
1101 struct c_fileinfo *finfo =
1102 get_fileinfo (LOCATION_FILE (input_location));
1103 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, finfo->interface_unknown);
1104 CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
1107 if (code == RECORD_TYPE || code == UNION_TYPE)
1108 TYPE_CXX_ODR_P (t) = 1;
1110 return t;
1113 /* A wrapper without the memory stats for LANG_HOOKS_MAKE_TYPE. */
1115 tree
1116 cxx_make_type_hook (enum tree_code code)
1118 return cxx_make_type (code);
1121 tree
1122 make_class_type (enum tree_code code MEM_STAT_DECL)
1124 tree t = cxx_make_type (code PASS_MEM_STAT);
1125 SET_CLASS_TYPE_P (t, 1);
1126 return t;
1129 /* Returns true if we are currently in the main source file, or in a
1130 template instantiation started from the main source file. */
1132 bool
1133 in_main_input_context (void)
1135 struct tinst_level *tl = outermost_tinst_level();
1137 if (tl)
1138 return filename_cmp (main_input_filename,
1139 LOCATION_FILE (tl->locus)) == 0;
1140 else
1141 return filename_cmp (main_input_filename, LOCATION_FILE (input_location)) == 0;
1144 #include "gt-cp-lex.h"