1 /* Separate lexical analyzer for GNU C++.
2 Copyright (C) 1987-2024 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)
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++. */
25 /* For use with name_hint. */
26 #define INCLUDE_MEMORY
28 #include "coretypes.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_traits (void);
39 static void init_cp_pragma (void);
41 static tree
parse_strconst_pragma (const char *, int);
42 static void handle_pragma_vtable (cpp_reader
*);
43 static void handle_pragma_unit (cpp_reader
*);
44 static void handle_pragma_interface (cpp_reader
*);
45 static void handle_pragma_implementation (cpp_reader
*);
47 static void init_operators (void);
48 static void copy_lang_type (tree
);
50 /* A constraint that can be tested at compile time. */
51 #define CONSTRAINT(name, expr) extern int constraint_##name [(expr) ? 1 : -1]
53 /* Functions and data structures for #pragma interface.
55 `#pragma implementation' means that the main file being compiled
56 is considered to implement (provide) the classes that appear in
57 its main body. I.e., if this is file "foo.cc", and class `bar'
58 is defined in "foo.cc", then we say that "foo.cc implements bar".
60 All main input files "implement" themselves automagically.
62 `#pragma interface' means that unless this file (of the form "foo.h"
63 is not presently being included by file "foo.cc", the
64 CLASSTYPE_INTERFACE_ONLY bit gets set. The effect is that none
65 of the vtables nor any of the inline functions defined in foo.h
68 There are cases when we want to link files such as "defs.h" and
69 "main.cc". In this case, we give "defs.h" a `#pragma interface',
70 and "main.cc" has `#pragma implementation "defs.h"'. */
75 struct impl_files
*next
;
78 static struct impl_files
*impl_file_chain
;
86 ovl_op_info_t ovl_op_info
[2][OVL_OP_MAX
] =
89 {NULL_TREE
, NULL
, NULL
, ERROR_MARK
, OVL_OP_ERROR_MARK
, 0},
90 {NULL_TREE
, NULL
, NULL
, NOP_EXPR
, OVL_OP_NOP_EXPR
, 0},
91 #define DEF_OPERATOR(NAME, CODE, MANGLING, FLAGS) \
92 {NULL_TREE, NAME, MANGLING, CODE, OVL_OP_##CODE, FLAGS},
93 #define OPERATOR_TRANSITION }, { \
94 {NULL_TREE, NULL, NULL, ERROR_MARK, OVL_OP_ERROR_MARK, 0},
95 #include "operators.def"
98 unsigned char ovl_op_mapping
[MAX_TREE_CODES
];
99 unsigned char ovl_op_alternate
[OVL_OP_MAX
];
101 /* The trait table, declared in cp-tree.h. */
102 const cp_trait cp_traits
[] =
104 #define DEFTRAIT(TCC, CODE, NAME, ARITY) \
105 { NAME, CPTK_##CODE, ARITY, (TCC == tcc_type) },
106 #include "cp-trait.def"
109 /* The trait table cannot have more than 255 (addr_space_t) entries since
110 the index is retrieved through IDENTIFIER_CP_INDEX. */
111 static_assert(ARRAY_SIZE (cp_traits
) <= 255,
112 "cp_traits array cannot have more than 255 entries");
114 /* Get the name of the kind of identifier T. */
117 get_identifier_kind_name (tree id
)
119 /* Keep in sync with cp_id_kind enumeration. */
120 static const char *const names
[cik_max
] = {
121 "normal", "keyword", "constructor", "destructor",
122 "simple-op", "assign-op", "conv-op", "<reserved>udlit-op"
126 kind
|= IDENTIFIER_KIND_BIT_2 (id
) << 2;
127 kind
|= IDENTIFIER_KIND_BIT_1 (id
) << 1;
128 kind
|= IDENTIFIER_KIND_BIT_0 (id
) << 0;
133 /* Set the identifier kind, which we expect to currently be zero. */
136 set_identifier_kind (tree id
, cp_identifier_kind kind
)
138 gcc_checking_assert (!IDENTIFIER_KIND_BIT_2 (id
)
139 & !IDENTIFIER_KIND_BIT_1 (id
)
140 & !IDENTIFIER_KIND_BIT_0 (id
));
141 IDENTIFIER_KIND_BIT_2 (id
) |= (kind
>> 2) & 1;
142 IDENTIFIER_KIND_BIT_1 (id
) |= (kind
>> 1) & 1;
143 IDENTIFIER_KIND_BIT_0 (id
) |= (kind
>> 0) & 1;
146 /* Create and tag the internal operator name for the overloaded
147 operator PTR describes. */
150 set_operator_ident (ovl_op_info_t
*ptr
)
153 size_t len
= snprintf (buffer
, sizeof (buffer
), "operator%s%s",
154 &" "[ptr
->name
[0] && ptr
->name
[0] != '_'
155 && !ISALPHA (ptr
->name
[0])],
157 gcc_checking_assert (len
< sizeof (buffer
));
159 tree ident
= get_identifier_with_length (buffer
, len
);
160 ptr
->identifier
= ident
;
165 /* Initialize data structures that keep track of operator names. */
168 init_operators (void)
170 /* We rely on both these being zero. */
171 gcc_checking_assert (!OVL_OP_ERROR_MARK
&& !ERROR_MARK
);
173 /* This loop iterates backwards because we need to move the
174 assignment operators down to their correct slots. I.e. morally
175 equivalent to an overlapping memmove where dest > src. Slot
176 zero is for error_mark, so hae no operator. */
177 for (unsigned ix
= OVL_OP_MAX
; --ix
;)
179 ovl_op_info_t
*op_ptr
= &ovl_op_info
[false][ix
];
183 tree ident
= set_operator_ident (op_ptr
);
184 if (unsigned index
= IDENTIFIER_CP_INDEX (ident
))
186 ovl_op_info_t
*bin_ptr
= &ovl_op_info
[false][index
];
188 /* They should only differ in unary/binary ness. */
189 gcc_checking_assert ((op_ptr
->flags
^ bin_ptr
->flags
)
190 == OVL_OP_FLAG_AMBIARY
);
191 bin_ptr
->flags
|= op_ptr
->flags
;
192 ovl_op_alternate
[index
] = ix
;
196 IDENTIFIER_CP_INDEX (ident
) = ix
;
197 set_identifier_kind (ident
, cik_simple_op
);
200 if (op_ptr
->tree_code
)
202 gcc_checking_assert (op_ptr
->ovl_op_code
== ix
203 && !ovl_op_mapping
[op_ptr
->tree_code
]);
204 ovl_op_mapping
[op_ptr
->tree_code
] = op_ptr
->ovl_op_code
;
207 ovl_op_info_t
*as_ptr
= &ovl_op_info
[true][ix
];
210 /* These will be placed at the start of the array, move to
211 the correct slot and initialize. */
212 if (as_ptr
->ovl_op_code
!= ix
)
214 ovl_op_info_t
*dst_ptr
= &ovl_op_info
[true][as_ptr
->ovl_op_code
];
215 gcc_assert (as_ptr
->ovl_op_code
> ix
&& !dst_ptr
->tree_code
);
216 memcpy (dst_ptr
, as_ptr
, sizeof (*dst_ptr
));
217 memset (as_ptr
, 0, sizeof (*as_ptr
));
221 tree ident
= set_operator_ident (as_ptr
);
222 gcc_checking_assert (!IDENTIFIER_CP_INDEX (ident
));
223 IDENTIFIER_CP_INDEX (ident
) = as_ptr
->ovl_op_code
;
224 set_identifier_kind (ident
, cik_assign_op
);
226 gcc_checking_assert (!ovl_op_mapping
[as_ptr
->tree_code
]
227 || (ovl_op_mapping
[as_ptr
->tree_code
]
228 == as_ptr
->ovl_op_code
));
229 ovl_op_mapping
[as_ptr
->tree_code
] = as_ptr
->ovl_op_code
;
234 /* Initialize the reserved words. */
243 if (cxx_dialect
< cxx11
)
245 if (cxx_dialect
< cxx20
)
248 mask
|= D_CXX_CONCEPTS
;
249 if (!flag_coroutines
)
250 mask
|= D_CXX_COROUTINES
;
252 mask
|= D_CXX_MODULES
;
256 mask
|= D_CXX_CHAR8_T
;
258 mask
|= D_ASM
| D_EXT
| D_EXT11
;
259 if (flag_no_gnu_keywords
)
260 mask
|= D_EXT
| D_EXT11
;
262 /* The Objective-C keywords are all context-dependent. */
265 ridpointers
= ggc_cleared_vec_alloc
<tree
> ((int) RID_MAX
);
266 for (i
= 0; i
< num_c_common_reswords
; i
++)
268 if (c_common_reswords
[i
].disable
& D_CONLY
)
270 id
= get_identifier (c_common_reswords
[i
].word
);
271 C_SET_RID_CODE (id
, c_common_reswords
[i
].rid
);
272 ridpointers
[(int) c_common_reswords
[i
].rid
] = id
;
273 if (! (c_common_reswords
[i
].disable
& mask
))
274 set_identifier_kind (id
, cik_keyword
);
277 for (i
= 0; i
< NUM_INT_N_ENTS
; i
++)
280 sprintf (name
, "__int%d", int_n_data
[i
].bitsize
);
281 id
= get_identifier (name
);
282 C_SET_RID_CODE (id
, RID_FIRST_INT_N
+ i
);
283 set_identifier_kind (id
, cik_keyword
);
285 sprintf (name
, "__int%d__", int_n_data
[i
].bitsize
);
286 id
= get_identifier (name
);
287 C_SET_RID_CODE (id
, RID_FIRST_INT_N
+ i
);
288 set_identifier_kind (id
, cik_keyword
);
293 id
= get_identifier ("omp_all_memory");
294 C_SET_RID_CODE (id
, RID_OMP_ALL_MEMORY
);
295 set_identifier_kind (id
, cik_keyword
);
296 ridpointers
[RID_OMP_ALL_MEMORY
] = id
;
300 /* Initialize the C++ traits. */
302 init_cp_traits (void)
306 for (unsigned int i
= 0; i
< ARRAY_SIZE (cp_traits
); ++i
)
308 id
= get_identifier (cp_traits
[i
].name
);
309 IDENTIFIER_CP_INDEX (id
) = cp_traits
[i
].kind
;
310 set_identifier_kind (id
, cik_trait
);
313 /* An alias for __is_same. */
314 id
= get_identifier ("__is_same_as");
315 IDENTIFIER_CP_INDEX (id
) = CPTK_IS_SAME
;
316 set_identifier_kind (id
, cik_trait
);
320 init_cp_pragma (void)
322 c_register_pragma (0, "vtable", handle_pragma_vtable
);
323 c_register_pragma (0, "unit", handle_pragma_unit
);
324 c_register_pragma (0, "interface", handle_pragma_interface
);
325 c_register_pragma (0, "implementation", handle_pragma_implementation
);
326 c_register_pragma ("GCC", "interface", handle_pragma_interface
);
327 c_register_pragma ("GCC", "implementation", handle_pragma_implementation
);
330 /* TRUE if a code represents a statement. */
332 bool statement_code_p
[MAX_TREE_CODES
];
334 /* Initialize the C++ front end. This function is very sensitive to
335 the exact order that things are done here. It would be nice if the
336 initialization done by this routine were moved to its subroutines,
337 and the ordering dependencies clarified and reduced. */
341 location_t saved_loc
;
343 static const enum tree_code stmt_codes
[] = {
344 CTOR_INITIALIZER
, TRY_BLOCK
, HANDLER
,
345 EH_SPEC_BLOCK
, USING_STMT
, TAG_DEFN
,
346 IF_STMT
, CLEANUP_STMT
, FOR_STMT
,
347 RANGE_FOR_STMT
, WHILE_STMT
, DO_STMT
,
348 BREAK_STMT
, CONTINUE_STMT
, SWITCH_STMT
,
349 EXPR_STMT
, OMP_DEPOBJ
352 memset (&statement_code_p
, 0, sizeof (statement_code_p
));
353 for (i
= 0; i
< ARRAY_SIZE (stmt_codes
); i
++)
354 statement_code_p
[stmt_codes
[i
]] = true;
356 saved_loc
= input_location
;
357 input_location
= BUILTINS_LOCATION
;
362 init_cp_semantics ();
366 current_function_decl
= NULL
;
368 class_type_node
= ridpointers
[(int) RID_CLASS
];
370 cxx_init_decl_processing ();
372 if (c_common_init () == false)
374 input_location
= saved_loc
;
380 input_location
= saved_loc
;
384 /* Return nonzero if S is not considered part of an
385 INTERFACE/IMPLEMENTATION pair. Otherwise, return 0. */
388 interface_strcmp (const char* s
)
390 /* Set the interface/implementation bits for this scope. */
391 struct impl_files
*ifiles
;
394 for (ifiles
= impl_file_chain
; ifiles
; ifiles
= ifiles
->next
)
396 const char *t1
= ifiles
->filename
;
399 if (*s1
== 0 || filename_ncmp (s1
, t1
, 1) != 0)
402 while (*s1
!= 0 && filename_ncmp (s1
, t1
, 1) == 0)
409 /* Don't get faked out by xxx.yyy.cc vs xxx.zzz.cc. */
410 if (strchr (s1
, '.') || strchr (t1
, '.'))
413 if (*s1
== '\0' || s1
[-1] != '.' || t1
[-1] != '.')
424 /* We've just read a cpp-token, figure out our next state. Hey, this
425 is a hand-coded co-routine! */
427 struct module_token_filter
437 enum state state
: 8;
443 location_t token_loc
;
445 module_state
*module
;
446 module_state
*import
;
448 module_token_filter (cpp_reader
*reader
)
449 : state (idle
), is_import (false),
450 got_export (false), got_colon (false), want_dot (false),
451 token_loc (UNKNOWN_LOCATION
),
452 reader (reader
), module (NULL
), import (NULL
)
456 /* Process the next token. Note we cannot see CPP_EOF inside a
457 pragma -- a CPP_PRAGMA_EOL always happens. */
458 uintptr_t resume (int type
, int keyword
, tree value
, location_t loc
)
465 if (type
== CPP_KEYWORD
)
473 res
= lang_hooks::PT_begin_pragma
;
480 state
= module_first
;
486 res
= lang_hooks::PT_begin_pragma
;
492 if (is_import
&& type
== CPP_HEADER_NAME
)
494 /* A header name. The preprocessor will have already
495 done include searching and canonicalization. */
500 if (type
== CPP_PADDING
|| type
== CPP_COMMENT
)
504 if (type
== CPP_COLON
&& module
)
520 /* If we ever need to pay attention to attributes for
521 header modules, more logic will be needed. */
542 /* Got name instead of [.:]. */
547 import
= get_module (value
, import
, got_colon
);
554 if (type
== CPP_PRAGMA_EOL
)
557 /* End of the directive, handle the name. */
558 if (import
&& (is_import
|| !flag_header_unit
))
560 = preprocess_module (import
, token_loc
, module
!= NULL
,
561 is_import
, got_export
, reader
))
565 is_import
= got_export
= false;
575 /* Initialize or teardown. */
578 module_token_cdtor (cpp_reader
*pfile
, uintptr_t data_
)
580 if (module_token_filter
*filter
= reinterpret_cast<module_token_filter
*> (data_
))
582 preprocessed_module (pfile
);
586 else if (modules_p ())
587 data_
= reinterpret_cast<uintptr_t > (new module_token_filter (pfile
));
593 module_token_lang (int type
, int keyword
, tree value
, location_t loc
,
596 module_token_filter
*filter
= reinterpret_cast<module_token_filter
*> (data_
);
597 return filter
->resume (type
, keyword
, value
, loc
);
601 module_token_pre (cpp_reader
*pfile
, const cpp_token
*tok
, uintptr_t data_
)
604 return module_token_cdtor (pfile
, data_
);
606 int type
= tok
->type
;
607 int keyword
= RID_MAX
;
608 tree value
= NULL_TREE
;
610 if (tok
->type
== CPP_NAME
)
612 value
= HT_IDENT_TO_GCC_IDENT (HT_NODE (tok
->val
.node
.node
));
613 if (IDENTIFIER_KEYWORD_P (value
))
615 keyword
= C_RID_CODE (value
);
619 else if (tok
->type
== CPP_HEADER_NAME
)
620 value
= build_string (tok
->val
.str
.len
, (const char *)tok
->val
.str
.text
);
622 return module_token_lang (type
, keyword
, value
, tok
->src_loc
, data_
);
625 /* Parse a #pragma whose sole argument is a string constant.
626 If OPT is true, the argument is optional. */
628 parse_strconst_pragma (const char* name
, int opt
)
633 t
= pragma_lex (&result
);
636 if (pragma_lex (&x
) != CPP_EOF
)
637 warning (0, "junk at end of %<#pragma %s%>", name
);
641 if (t
== CPP_EOF
&& opt
)
644 error ("invalid %<#pragma %s%>", name
);
645 return error_mark_node
;
649 handle_pragma_vtable (cpp_reader
* /*dfile*/)
651 parse_strconst_pragma ("vtable", 0);
652 sorry ("%<#pragma vtable%> no longer supported");
656 handle_pragma_unit (cpp_reader
* /*dfile*/)
658 /* Validate syntax, but don't do anything. */
659 parse_strconst_pragma ("unit", 0);
663 handle_pragma_interface (cpp_reader
* /*dfile*/)
665 tree fname
= parse_strconst_pragma ("interface", 1);
666 struct c_fileinfo
*finfo
;
667 const char *filename
;
669 if (fname
== error_mark_node
)
672 filename
= lbasename (LOCATION_FILE (input_location
));
674 filename
= TREE_STRING_POINTER (fname
);
676 finfo
= get_fileinfo (LOCATION_FILE (input_location
));
678 if (impl_file_chain
== 0)
680 /* If this is zero at this point, then we are
681 auto-implementing. */
682 if (main_input_filename
== 0)
683 main_input_filename
= LOCATION_FILE (input_location
);
686 finfo
->interface_only
= interface_strcmp (filename
);
687 /* If MULTIPLE_SYMBOL_SPACES is set, we cannot assume that we can see
688 a definition in another file. */
689 if (!MULTIPLE_SYMBOL_SPACES
|| !finfo
->interface_only
)
690 finfo
->interface_unknown
= 0;
693 /* Note that we have seen a #pragma implementation for the key MAIN_FILENAME.
694 We used to only allow this at toplevel, but that restriction was buggy
695 in older compilers and it seems reasonable to allow it in the headers
696 themselves, too. It only needs to precede the matching #p interface.
698 We don't touch finfo->interface_only or finfo->interface_unknown;
699 the user must specify a matching #p interface for this to have
703 handle_pragma_implementation (cpp_reader
* /*dfile*/)
705 tree fname
= parse_strconst_pragma ("implementation", 1);
706 const char *filename
;
707 struct impl_files
*ifiles
= impl_file_chain
;
709 if (fname
== error_mark_node
)
714 if (main_input_filename
)
715 filename
= main_input_filename
;
717 filename
= LOCATION_FILE (input_location
);
718 filename
= lbasename (filename
);
722 filename
= TREE_STRING_POINTER (fname
);
723 if (cpp_included_before (parse_in
, filename
, input_location
))
724 warning (0, "%<#pragma implementation%> for %qs appears after "
725 "file is included", filename
);
728 for (; ifiles
; ifiles
= ifiles
->next
)
730 if (! filename_cmp (ifiles
->filename
, filename
))
735 ifiles
= XNEW (struct impl_files
);
736 ifiles
->filename
= xstrdup (filename
);
737 ifiles
->next
= impl_file_chain
;
738 impl_file_chain
= ifiles
;
742 /* Issue an error message indicating that the lookup of NAME (an
743 IDENTIFIER_NODE) failed. Returns the ERROR_MARK_NODE. */
746 unqualified_name_lookup_error (tree name
, location_t loc
)
748 if (loc
== UNKNOWN_LOCATION
)
749 loc
= cp_expr_loc_or_input_loc (name
);
751 if (IDENTIFIER_ANY_OP_P (name
))
752 error_at (loc
, "%qD not defined", name
);
755 if (!objc_diagnose_private_ivar (name
))
757 auto_diagnostic_group d
;
758 name_hint hint
= suggest_alternatives_for (loc
, name
, true);
759 if (const char *suggestion
= hint
.suggestion ())
761 gcc_rich_location
richloc (loc
);
762 richloc
.add_fixit_replace (suggestion
);
764 "%qD was not declared in this scope; did you mean %qs?",
768 error_at (loc
, "%qD was not declared in this scope", name
);
770 /* Prevent repeated error messages by creating a VAR_DECL with
771 this NAME in the innermost block scope. */
772 if (local_bindings_p ())
774 tree decl
= build_decl (loc
, VAR_DECL
, name
, error_mark_node
);
775 TREE_USED (decl
) = true;
780 return error_mark_node
;
783 /* Like unqualified_name_lookup_error, but NAME_EXPR is an unqualified-id
784 NAME, encapsulated with its location in a CP_EXPR, used as a function.
785 Returns an appropriate expression for NAME. */
788 unqualified_fn_lookup_error (cp_expr name_expr
)
790 tree name
= name_expr
.get_value ();
791 location_t loc
= name_expr
.get_location ();
792 if (loc
== UNKNOWN_LOCATION
)
793 loc
= input_location
;
795 if (TREE_CODE (name
) == TEMPLATE_ID_EXPR
)
796 name
= TREE_OPERAND (name
, 0);
798 if (processing_template_decl
)
800 /* In a template, it is invalid to write "f()" or "f(3)" if no
801 declaration of "f" is available. Historically, G++ and most
802 other compilers accepted that usage since they deferred all name
803 lookup until instantiation time rather than doing unqualified
804 name lookup at template definition time; explain to the user what
807 Note that we have the exact wording of the following message in
808 the manual (trouble.texi, node "Name lookup"), so they need to
810 permerror (loc
, "there are no arguments to %qD that depend on a template "
811 "parameter, so a declaration of %qD must be available",
814 if (!flag_permissive
)
819 inform (loc
, "(if you use %<-fpermissive%>, G++ will accept your "
820 "code, but allowing the use of an undeclared name is "
828 return unqualified_name_lookup_error (name
, loc
);
832 /* Hasher for the conversion operator name hash table. */
833 struct conv_type_hasher
: ggc_ptr_hash
<tree_node
>
835 /* Hash NODE, an identifier node in the table. TYPE_UID is
836 suitable, as we're not concerned about matching canonicalness
838 static hashval_t
hash (tree node
)
840 return (hashval_t
) TYPE_UID (TREE_TYPE (node
));
843 /* Compare NODE, an identifier node in the table, against TYPE, an
844 incoming TYPE being looked up. */
845 static bool equal (tree node
, tree type
)
847 return TREE_TYPE (node
) == type
;
851 /* This hash table maps TYPEs to the IDENTIFIER for a conversion
852 operator to TYPE. The nodes are IDENTIFIERs whose TREE_TYPE is the
855 static GTY (()) hash_table
<conv_type_hasher
> *conv_type_names
;
857 /* Return an identifier for a conversion operator to TYPE. We can get
858 from the returned identifier to the type. We store TYPE, which is
859 not necessarily the canonical type, which allows us to report the
860 form the user used in error messages. All these identifiers are
861 not in the identifier hash table, and have the same string name.
862 These IDENTIFIERS are not in the identifier hash table, and all
863 have the same IDENTIFIER_STRING. */
866 make_conv_op_name (tree type
)
868 if (type
== error_mark_node
)
869 return error_mark_node
;
871 if (conv_type_names
== NULL
)
872 conv_type_names
= hash_table
<conv_type_hasher
>::create_ggc (31);
874 tree
*slot
= conv_type_names
->find_slot_with_hash
875 (type
, (hashval_t
) TYPE_UID (type
), INSERT
);
876 tree identifier
= *slot
;
879 /* Create a raw IDENTIFIER outside of the identifier hash
881 identifier
= copy_node (conv_op_identifier
);
883 /* Just in case something managed to bind. */
884 IDENTIFIER_BINDING (identifier
) = NULL
;
886 /* Hang TYPE off the identifier so it can be found easily later
887 when performing conversions. */
888 TREE_TYPE (identifier
) = type
;
896 /* Wrapper around build_lang_decl_loc(). Should gradually move to
897 build_lang_decl_loc() and then rename build_lang_decl_loc() back to
898 build_lang_decl(). */
901 build_lang_decl (enum tree_code code
, tree name
, tree type
)
903 return build_lang_decl_loc (input_location
, code
, name
, type
);
906 /* Build a decl from CODE, NAME, TYPE declared at LOC, and then add
907 DECL_LANG_SPECIFIC info to the result. */
910 build_lang_decl_loc (location_t loc
, enum tree_code code
, tree name
, tree type
)
914 t
= build_decl (loc
, code
, name
, type
);
915 retrofit_lang_decl (t
);
920 /* Maybe add a raw lang_decl to T, a decl. Return true if it needed
924 maybe_add_lang_decl_raw (tree t
, bool decomp_p
)
927 lang_decl_selector sel
;
930 sel
= lds_decomp
, size
= sizeof (struct lang_decl_decomp
);
931 else if (TREE_CODE (t
) == FUNCTION_DECL
)
932 sel
= lds_fn
, size
= sizeof (struct lang_decl_fn
);
933 else if (TREE_CODE (t
) == NAMESPACE_DECL
)
934 sel
= lds_ns
, size
= sizeof (struct lang_decl_ns
);
935 else if (TREE_CODE (t
) == PARM_DECL
)
936 sel
= lds_parm
, size
= sizeof (struct lang_decl_parm
);
937 else if (LANG_DECL_HAS_MIN (t
))
938 sel
= lds_min
, size
= sizeof (struct lang_decl_min
);
943 = (struct lang_decl
*) ggc_internal_cleared_alloc (size
);
945 ld
->u
.base
.selector
= sel
;
946 DECL_LANG_SPECIFIC (t
) = ld
;
949 /* Who'd create a namespace, only to put nothing in it? */
950 ld
->u
.ns
.bindings
= hash_table
<named_decl_hash
>::create_ggc (499);
952 if (GATHER_STATISTICS
)
954 tree_node_counts
[(int)lang_decl
] += 1;
955 tree_node_sizes
[(int)lang_decl
] += size
;
960 /* T has just had a decl_lang_specific added. Initialize its
964 set_decl_linkage (tree t
)
966 if (current_lang_name
== lang_name_cplusplus
967 || decl_linkage (t
) == lk_none
)
968 SET_DECL_LANGUAGE (t
, lang_cplusplus
);
969 else if (current_lang_name
== lang_name_c
)
970 SET_DECL_LANGUAGE (t
, lang_c
);
975 /* T is a VAR_DECL node that needs to be a decomposition of BASE. */
978 fit_decomposition_lang_decl (tree t
, tree base
)
980 if (struct lang_decl
*orig_ld
= DECL_LANG_SPECIFIC (t
))
982 if (orig_ld
->u
.base
.selector
== lds_min
)
984 maybe_add_lang_decl_raw (t
, true);
985 memcpy (DECL_LANG_SPECIFIC (t
), orig_ld
,
986 sizeof (struct lang_decl_min
));
987 /* Reset selector, which will have been bashed by the
989 DECL_LANG_SPECIFIC (t
)->u
.base
.selector
= lds_decomp
;
992 gcc_checking_assert (orig_ld
->u
.base
.selector
== lds_decomp
);
996 maybe_add_lang_decl_raw (t
, true);
997 set_decl_linkage (t
);
1000 DECL_DECOMP_BASE (t
) = base
;
1003 /* Add DECL_LANG_SPECIFIC info to T, if it needs one. Generally
1004 every C++ decl needs one, but C builtins etc do not. */
1007 retrofit_lang_decl (tree t
)
1009 if (DECL_LANG_SPECIFIC (t
))
1012 if (maybe_add_lang_decl_raw (t
, false))
1013 set_decl_linkage (t
);
1017 cxx_dup_lang_specific_decl (tree node
)
1021 if (! DECL_LANG_SPECIFIC (node
))
1024 switch (DECL_LANG_SPECIFIC (node
)->u
.base
.selector
)
1027 size
= sizeof (struct lang_decl_min
);
1030 size
= sizeof (struct lang_decl_fn
);
1033 size
= sizeof (struct lang_decl_ns
);
1036 size
= sizeof (struct lang_decl_parm
);
1039 size
= sizeof (struct lang_decl_decomp
);
1045 struct lang_decl
*ld
= (struct lang_decl
*) ggc_internal_alloc (size
);
1046 memcpy (ld
, DECL_LANG_SPECIFIC (node
), size
);
1047 DECL_LANG_SPECIFIC (node
) = ld
;
1049 /* Directly clear some flags that do not apply to the copy
1050 (module_purview_p still does). */
1051 ld
->u
.base
.module_entity_p
= false;
1052 ld
->u
.base
.module_import_p
= false;
1053 ld
->u
.base
.module_keyed_decls_p
= false;
1055 if (GATHER_STATISTICS
)
1057 tree_node_counts
[(int)lang_decl
] += 1;
1058 tree_node_sizes
[(int)lang_decl
] += size
;
1062 /* Copy DECL, including any language-specific parts. */
1065 copy_decl (tree decl MEM_STAT_DECL
)
1069 copy
= copy_node (decl PASS_MEM_STAT
);
1070 cxx_dup_lang_specific_decl (copy
);
1074 /* Replace the shared language-specific parts of NODE with a new copy. */
1077 copy_lang_type (tree node
)
1079 if (! TYPE_LANG_SPECIFIC (node
))
1082 auto *lt
= (struct lang_type
*) ggc_internal_alloc (sizeof (struct lang_type
));
1084 memcpy (lt
, TYPE_LANG_SPECIFIC (node
), (sizeof (struct lang_type
)));
1085 TYPE_LANG_SPECIFIC (node
) = lt
;
1087 if (GATHER_STATISTICS
)
1089 tree_node_counts
[(int)lang_type
] += 1;
1090 tree_node_sizes
[(int)lang_type
] += sizeof (struct lang_type
);
1094 /* Copy TYPE, including any language-specific parts. */
1097 copy_type (tree type MEM_STAT_DECL
)
1101 copy
= copy_node (type PASS_MEM_STAT
);
1102 copy_lang_type (copy
);
1106 /* Add a raw lang_type to T, a type, should it need one. */
1109 maybe_add_lang_type_raw (tree t
)
1111 if (!RECORD_OR_UNION_CODE_P (TREE_CODE (t
)))
1114 auto *lt
= (struct lang_type
*) (ggc_internal_cleared_alloc
1115 (sizeof (struct lang_type
)));
1116 TYPE_LANG_SPECIFIC (t
) = lt
;
1118 if (GATHER_STATISTICS
)
1120 tree_node_counts
[(int)lang_type
] += 1;
1121 tree_node_sizes
[(int)lang_type
] += sizeof (struct lang_type
);
1128 cxx_make_type (enum tree_code code MEM_STAT_DECL
)
1130 tree t
= make_node (code PASS_MEM_STAT
);
1132 if (maybe_add_lang_type_raw (t
))
1134 /* Set up some flags that give proper default behavior. */
1135 struct c_fileinfo
*finfo
=
1136 get_fileinfo (LOCATION_FILE (input_location
));
1137 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t
, finfo
->interface_unknown
);
1138 CLASSTYPE_INTERFACE_ONLY (t
) = finfo
->interface_only
;
1141 if (code
== RECORD_TYPE
|| code
== UNION_TYPE
)
1142 TYPE_CXX_ODR_P (t
) = 1;
1147 /* A wrapper without the memory stats for LANG_HOOKS_MAKE_TYPE. */
1150 cxx_make_type_hook (enum tree_code code
)
1152 return cxx_make_type (code
);
1156 make_class_type (enum tree_code code MEM_STAT_DECL
)
1158 tree t
= cxx_make_type (code PASS_MEM_STAT
);
1159 SET_CLASS_TYPE_P (t
, 1);
1163 /* Returns true if we are currently in the main source file, or in a
1164 template instantiation started from the main source file. */
1167 in_main_input_context (void)
1169 struct tinst_level
*tl
= outermost_tinst_level();
1172 return filename_cmp (main_input_filename
,
1173 LOCATION_FILE (tl
->locus
)) == 0;
1175 return filename_cmp (main_input_filename
, LOCATION_FILE (input_location
)) == 0;
1178 #include "gt-cp-lex.h"