1 /* Separate lexical analyzer for GNU C++.
2 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
4 Hacked by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
24 /* This file is the lexical analyzer for GNU C++. */
28 #include "coretypes.h"
41 #include "diagnostic.h"
43 #ifdef MULTIBYTE_CHARS
48 static int interface_strcmp PARAMS ((const char *));
49 static void init_cp_pragma PARAMS ((void));
51 static tree parse_strconst_pragma PARAMS ((const char *, int));
52 static void handle_pragma_vtable PARAMS ((cpp_reader *));
53 static void handle_pragma_unit PARAMS ((cpp_reader *));
54 static void handle_pragma_interface PARAMS ((cpp_reader *));
55 static void handle_pragma_implementation PARAMS ((cpp_reader *));
56 static void handle_pragma_java_exceptions PARAMS ((cpp_reader *));
58 static int is_global PARAMS ((tree));
59 static void init_operators PARAMS ((void));
60 static void copy_lang_type PARAMS ((tree));
62 /* A constraint that can be tested at compile time. */
63 #define CONSTRAINT(name, expr) extern int constraint_##name [(expr) ? 1 : -1]
65 /* Functions and data structures for #pragma interface.
67 `#pragma implementation' means that the main file being compiled
68 is considered to implement (provide) the classes that appear in
69 its main body. I.e., if this is file "foo.cc", and class `bar'
70 is defined in "foo.cc", then we say that "foo.cc implements bar".
72 All main input files "implement" themselves automagically.
74 `#pragma interface' means that unless this file (of the form "foo.h"
75 is not presently being included by file "foo.cc", the
76 CLASSTYPE_INTERFACE_ONLY bit gets set. The effect is that none
77 of the vtables nor any of the inline functions defined in foo.h
80 There are cases when we want to link files such as "defs.h" and
81 "main.cc". In this case, we give "defs.h" a `#pragma interface',
82 and "main.cc" has `#pragma implementation "defs.h"'. */
87 struct impl_files *next;
90 static struct impl_files *impl_file_chain;
93 /* Return something to represent absolute declarators containing a *.
94 TARGET is the absolute declarator that the * contains.
95 CV_QUALIFIERS is a list of modifiers such as const or volatile
96 to apply to the pointer type, represented as identifiers.
98 We return an INDIRECT_REF whose "contents" are TARGET
99 and whose type is the modifier list. */
102 make_pointer_declarator (cv_qualifiers, target)
103 tree cv_qualifiers, target;
105 if (target && TREE_CODE (target) == IDENTIFIER_NODE
106 && ANON_AGGRNAME_P (target))
107 error ("type name expected before `*'");
108 target = build_nt (INDIRECT_REF, target);
109 TREE_TYPE (target) = cv_qualifiers;
113 /* Return something to represent absolute declarators containing a &.
114 TARGET is the absolute declarator that the & contains.
115 CV_QUALIFIERS is a list of modifiers such as const or volatile
116 to apply to the reference type, represented as identifiers.
118 We return an ADDR_EXPR whose "contents" are TARGET
119 and whose type is the modifier list. */
122 make_reference_declarator (cv_qualifiers, target)
123 tree cv_qualifiers, target;
125 target = build_nt (ADDR_EXPR, target);
126 TREE_TYPE (target) = cv_qualifiers;
131 make_call_declarator (target, parms, cv_qualifiers, exception_specification)
132 tree target, parms, cv_qualifiers, exception_specification;
134 target = build_nt (CALL_EXPR, target,
135 tree_cons (parms, cv_qualifiers, NULL_TREE),
136 /* The third operand is really RTL. We
137 shouldn't put anything there. */
139 CALL_DECLARATOR_EXCEPTION_SPEC (target) = exception_specification;
144 set_quals_and_spec (call_declarator, cv_qualifiers, exception_specification)
145 tree call_declarator, cv_qualifiers, exception_specification;
147 CALL_DECLARATOR_QUALS (call_declarator) = cv_qualifiers;
148 CALL_DECLARATOR_EXCEPTION_SPEC (call_declarator) = exception_specification;
151 int interface_only; /* whether or not current file is only for
152 interface definitions. */
153 int interface_unknown; /* whether or not we know this class
154 to behave according to #pragma interface. */
157 /* Initialization before switch parsing. */
161 c_common_init_options (clk_cplusplus);
163 /* Default exceptions on. */
165 /* By default wrap lines at 80 characters. Is getenv ("COLUMNS")
167 diagnostic_line_cutoff (global_dc) = 80;
168 /* By default, emit location information once for every
169 diagnostic message. */
170 diagnostic_prefixing_rule (global_dc) = DIAGNOSTICS_SHOW_PREFIX_ONCE;
179 /* A mapping from tree codes to operator name information. */
180 operator_name_info_t operator_name_info[(int) LAST_CPLUS_TREE_CODE];
181 /* Similar, but for assignment operators. */
182 operator_name_info_t assignment_operator_name_info[(int) LAST_CPLUS_TREE_CODE];
184 /* Initialize data structures that keep track of operator names. */
186 #define DEF_OPERATOR(NAME, C, M, AR, AP) \
187 CONSTRAINT (C, sizeof "operator " + sizeof NAME <= 256);
188 #include "operators.def"
196 struct operator_name_info_t *oni;
198 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
199 sprintf (buffer, ISALPHA (NAME[0]) ? "operator %s" : "operator%s", NAME); \
200 identifier = get_identifier (buffer); \
201 IDENTIFIER_OPNAME_P (identifier) = 1; \
204 ? &assignment_operator_name_info[(int) CODE] \
205 : &operator_name_info[(int) CODE]); \
206 oni->identifier = identifier; \
208 oni->mangled_name = MANGLING; \
211 #include "operators.def"
214 operator_name_info[(int) ERROR_MARK].identifier
215 = get_identifier ("<invalid operator>");
217 /* Handle some special cases. These operators are not defined in
218 the language, but can be produced internally. We may need them
219 for error-reporting. (Eventually, we should ensure that this
220 does not happen. Error messages involving these operators will
221 be confusing to users.) */
223 operator_name_info [(int) INIT_EXPR].name
224 = operator_name_info [(int) MODIFY_EXPR].name;
225 operator_name_info [(int) EXACT_DIV_EXPR].name = "(ceiling /)";
226 operator_name_info [(int) CEIL_DIV_EXPR].name = "(ceiling /)";
227 operator_name_info [(int) FLOOR_DIV_EXPR].name = "(floor /)";
228 operator_name_info [(int) ROUND_DIV_EXPR].name = "(round /)";
229 operator_name_info [(int) CEIL_MOD_EXPR].name = "(ceiling %)";
230 operator_name_info [(int) FLOOR_MOD_EXPR].name = "(floor %)";
231 operator_name_info [(int) ROUND_MOD_EXPR].name = "(round %)";
232 operator_name_info [(int) ABS_EXPR].name = "abs";
233 operator_name_info [(int) FFS_EXPR].name = "ffs";
234 operator_name_info [(int) BIT_ANDTC_EXPR].name = "&~";
235 operator_name_info [(int) TRUTH_AND_EXPR].name = "strict &&";
236 operator_name_info [(int) TRUTH_OR_EXPR].name = "strict ||";
237 operator_name_info [(int) IN_EXPR].name = "in";
238 operator_name_info [(int) RANGE_EXPR].name = "...";
239 operator_name_info [(int) CONVERT_EXPR].name = "+";
241 assignment_operator_name_info [(int) EXACT_DIV_EXPR].name
243 assignment_operator_name_info [(int) CEIL_DIV_EXPR].name
245 assignment_operator_name_info [(int) FLOOR_DIV_EXPR].name
247 assignment_operator_name_info [(int) ROUND_DIV_EXPR].name
249 assignment_operator_name_info [(int) CEIL_MOD_EXPR].name
251 assignment_operator_name_info [(int) FLOOR_MOD_EXPR].name
253 assignment_operator_name_info [(int) ROUND_MOD_EXPR].name
257 /* The reserved keyword table. */
260 const char *const word;
261 const ENUM_BITFIELD(rid) rid : 16;
262 const unsigned int disable : 16;
265 /* Disable mask. Keywords are disabled if (reswords[i].disable & mask) is
267 #define D_EXT 0x01 /* GCC extension */
268 #define D_ASM 0x02 /* in C99, but has a switch to turn it off */
270 CONSTRAINT(ridbits_fit, RID_LAST_MODIFIER < sizeof(unsigned long) * CHAR_BIT);
272 static const struct resword reswords[] =
274 { "_Complex", RID_COMPLEX, 0 },
275 { "__FUNCTION__", RID_FUNCTION_NAME, 0 },
276 { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
277 { "__alignof", RID_ALIGNOF, 0 },
278 { "__alignof__", RID_ALIGNOF, 0 },
279 { "__asm", RID_ASM, 0 },
280 { "__asm__", RID_ASM, 0 },
281 { "__attribute", RID_ATTRIBUTE, 0 },
282 { "__attribute__", RID_ATTRIBUTE, 0 },
283 { "__builtin_va_arg", RID_VA_ARG, 0 },
284 { "__complex", RID_COMPLEX, 0 },
285 { "__complex__", RID_COMPLEX, 0 },
286 { "__const", RID_CONST, 0 },
287 { "__const__", RID_CONST, 0 },
288 { "__extension__", RID_EXTENSION, 0 },
289 { "__func__", RID_C99_FUNCTION_NAME, 0 },
290 { "__imag", RID_IMAGPART, 0 },
291 { "__imag__", RID_IMAGPART, 0 },
292 { "__inline", RID_INLINE, 0 },
293 { "__inline__", RID_INLINE, 0 },
294 { "__label__", RID_LABEL, 0 },
295 { "__null", RID_NULL, 0 },
296 { "__real", RID_REALPART, 0 },
297 { "__real__", RID_REALPART, 0 },
298 { "__restrict", RID_RESTRICT, 0 },
299 { "__restrict__", RID_RESTRICT, 0 },
300 { "__signed", RID_SIGNED, 0 },
301 { "__signed__", RID_SIGNED, 0 },
302 { "__thread", RID_THREAD, 0 },
303 { "__typeof", RID_TYPEOF, 0 },
304 { "__typeof__", RID_TYPEOF, 0 },
305 { "__volatile", RID_VOLATILE, 0 },
306 { "__volatile__", RID_VOLATILE, 0 },
307 { "asm", RID_ASM, D_ASM },
308 { "auto", RID_AUTO, 0 },
309 { "bool", RID_BOOL, 0 },
310 { "break", RID_BREAK, 0 },
311 { "case", RID_CASE, 0 },
312 { "catch", RID_CATCH, 0 },
313 { "char", RID_CHAR, 0 },
314 { "class", RID_CLASS, 0 },
315 { "const", RID_CONST, 0 },
316 { "const_cast", RID_CONSTCAST, 0 },
317 { "continue", RID_CONTINUE, 0 },
318 { "default", RID_DEFAULT, 0 },
319 { "delete", RID_DELETE, 0 },
321 { "double", RID_DOUBLE, 0 },
322 { "dynamic_cast", RID_DYNCAST, 0 },
323 { "else", RID_ELSE, 0 },
324 { "enum", RID_ENUM, 0 },
325 { "explicit", RID_EXPLICIT, 0 },
326 { "export", RID_EXPORT, 0 },
327 { "extern", RID_EXTERN, 0 },
328 { "false", RID_FALSE, 0 },
329 { "float", RID_FLOAT, 0 },
330 { "for", RID_FOR, 0 },
331 { "friend", RID_FRIEND, 0 },
332 { "goto", RID_GOTO, 0 },
334 { "inline", RID_INLINE, 0 },
335 { "int", RID_INT, 0 },
336 { "long", RID_LONG, 0 },
337 { "mutable", RID_MUTABLE, 0 },
338 { "namespace", RID_NAMESPACE, 0 },
339 { "new", RID_NEW, 0 },
340 { "operator", RID_OPERATOR, 0 },
341 { "private", RID_PRIVATE, 0 },
342 { "protected", RID_PROTECTED, 0 },
343 { "public", RID_PUBLIC, 0 },
344 { "register", RID_REGISTER, 0 },
345 { "reinterpret_cast", RID_REINTCAST, 0 },
346 { "return", RID_RETURN, 0 },
347 { "short", RID_SHORT, 0 },
348 { "signed", RID_SIGNED, 0 },
349 { "sizeof", RID_SIZEOF, 0 },
350 { "static", RID_STATIC, 0 },
351 { "static_cast", RID_STATCAST, 0 },
352 { "struct", RID_STRUCT, 0 },
353 { "switch", RID_SWITCH, 0 },
354 { "template", RID_TEMPLATE, 0 },
355 { "this", RID_THIS, 0 },
356 { "throw", RID_THROW, 0 },
357 { "true", RID_TRUE, 0 },
358 { "try", RID_TRY, 0 },
359 { "typedef", RID_TYPEDEF, 0 },
360 { "typename", RID_TYPENAME, 0 },
361 { "typeid", RID_TYPEID, 0 },
362 { "typeof", RID_TYPEOF, D_ASM|D_EXT },
363 { "union", RID_UNION, 0 },
364 { "unsigned", RID_UNSIGNED, 0 },
365 { "using", RID_USING, 0 },
366 { "virtual", RID_VIRTUAL, 0 },
367 { "void", RID_VOID, 0 },
368 { "volatile", RID_VOLATILE, 0 },
369 { "wchar_t", RID_WCHAR, 0 },
370 { "while", RID_WHILE, 0 },
379 int mask = ((flag_no_asm ? D_ASM : 0)
380 | (flag_no_gnu_keywords ? D_EXT : 0));
382 ridpointers = (tree *) ggc_calloc ((int) RID_MAX, sizeof (tree));
383 for (i = 0; i < ARRAY_SIZE (reswords); i++)
385 id = get_identifier (reswords[i].word);
386 C_RID_CODE (id) = reswords[i].rid;
387 ridpointers [(int) reswords[i].rid] = id;
388 if (! (reswords[i].disable & mask))
389 C_IS_RESERVED_WORD (id) = 1;
396 c_register_pragma (0, "vtable", handle_pragma_vtable);
397 c_register_pragma (0, "unit", handle_pragma_unit);
398 c_register_pragma (0, "interface", handle_pragma_interface);
399 c_register_pragma (0, "implementation", handle_pragma_implementation);
400 c_register_pragma ("GCC", "interface", handle_pragma_interface);
401 c_register_pragma ("GCC", "implementation", handle_pragma_implementation);
402 c_register_pragma ("GCC", "java_exceptions", handle_pragma_java_exceptions);
405 /* Initialize the C++ front end. This function is very sensitive to
406 the exact order that things are done here. It would be nice if the
407 initialization done by this routine were moved to its subroutines,
408 and the ordering dependencies clarified and reduced. */
411 const char *filename;
413 input_filename = "<internal>";
417 init_cp_semantics ();
422 current_function_decl = NULL;
424 class_type_node = build_int_2 (class_type, 0);
425 TREE_TYPE (class_type_node) = class_type_node;
426 ridpointers[(int) RID_CLASS] = class_type_node;
428 record_type_node = build_int_2 (record_type, 0);
429 TREE_TYPE (record_type_node) = record_type_node;
430 ridpointers[(int) RID_STRUCT] = record_type_node;
432 union_type_node = build_int_2 (union_type, 0);
433 TREE_TYPE (union_type_node) = union_type_node;
434 ridpointers[(int) RID_UNION] = union_type_node;
436 enum_type_node = build_int_2 (enum_type, 0);
437 TREE_TYPE (enum_type_node) = enum_type_node;
438 ridpointers[(int) RID_ENUM] = enum_type_node;
440 cxx_init_decl_processing ();
442 /* Create the built-in __null node. */
443 null_node = build_int_2 (0, 0);
444 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
445 ridpointers[RID_NULL] = null_node;
447 interface_unknown = 1;
449 filename = c_common_init (filename);
450 if (filename == NULL)
455 init_repo (filename);
460 /* Helper function to load global variables with interface
464 extract_interface_info ()
466 struct c_fileinfo *finfo = 0;
468 if (flag_alt_external_templates)
470 tree til = tinst_for_decl ();
473 finfo = get_fileinfo (TINST_FILE (til));
476 finfo = get_fileinfo (input_filename);
478 interface_only = finfo->interface_only;
479 interface_unknown = finfo->interface_unknown;
482 /* Return nonzero if S is not considered part of an
483 INTERFACE/IMPLEMENTATION pair. Otherwise, return 0. */
489 /* Set the interface/implementation bits for this scope. */
490 struct impl_files *ifiles;
493 for (ifiles = impl_file_chain; ifiles; ifiles = ifiles->next)
495 const char *t1 = ifiles->filename;
498 if (*s1 != *t1 || *s1 == 0)
501 while (*s1 == *t1 && *s1 != 0)
508 /* Don't get faked out by xxx.yyy.cc vs xxx.zzz.cc. */
509 if (strchr (s1, '.') || strchr (t1, '.'))
512 if (*s1 == '\0' || s1[-1] != '.' || t1[-1] != '.')
524 note_got_semicolon (type)
529 if (CLASS_TYPE_P (type))
530 CLASSTYPE_GOT_SEMICOLON (type) = 1;
534 note_list_got_semicolon (declspecs)
539 for (link = declspecs; link; link = TREE_CHAIN (link))
541 tree type = TREE_VALUE (link);
542 if (type && TYPE_P (type))
543 note_got_semicolon (type);
549 /* Parse a #pragma whose sole argument is a string constant.
550 If OPT is true, the argument is optional. */
552 parse_strconst_pragma (name, opt)
563 if (c_lex (&x) != CPP_EOF)
564 warning ("junk at end of #pragma %s", name);
568 if (t == CPP_EOF && opt)
571 error ("invalid #pragma %s", name);
576 handle_pragma_vtable (dfile)
577 cpp_reader *dfile ATTRIBUTE_UNUSED;
579 parse_strconst_pragma ("vtable", 0);
580 sorry ("#pragma vtable no longer supported");
584 handle_pragma_unit (dfile)
585 cpp_reader *dfile ATTRIBUTE_UNUSED;
587 /* Validate syntax, but don't do anything. */
588 parse_strconst_pragma ("unit", 0);
592 handle_pragma_interface (dfile)
593 cpp_reader *dfile ATTRIBUTE_UNUSED;
595 tree fname = parse_strconst_pragma ("interface", 1);
596 struct c_fileinfo *finfo;
597 const char *main_filename;
599 if (fname == (tree)-1)
602 main_filename = lbasename (input_filename);
604 main_filename = TREE_STRING_POINTER (fname);
606 finfo = get_fileinfo (input_filename);
608 if (impl_file_chain == 0)
610 /* If this is zero at this point, then we are
611 auto-implementing. */
612 if (main_input_filename == 0)
613 main_input_filename = input_filename;
616 interface_only = interface_strcmp (main_filename);
617 #ifdef MULTIPLE_SYMBOL_SPACES
618 if (! interface_only)
620 interface_unknown = 0;
622 finfo->interface_only = interface_only;
623 finfo->interface_unknown = interface_unknown;
626 /* Note that we have seen a #pragma implementation for the key MAIN_FILENAME.
627 We used to only allow this at toplevel, but that restriction was buggy
628 in older compilers and it seems reasonable to allow it in the headers
629 themselves, too. It only needs to precede the matching #p interface.
631 We don't touch interface_only or interface_unknown; the user must specify
632 a matching #p interface for this to have any effect. */
635 handle_pragma_implementation (dfile)
636 cpp_reader *dfile ATTRIBUTE_UNUSED;
638 tree fname = parse_strconst_pragma ("implementation", 1);
639 const char *main_filename;
640 struct impl_files *ifiles = impl_file_chain;
642 if (fname == (tree)-1)
647 if (main_input_filename)
648 main_filename = main_input_filename;
650 main_filename = input_filename;
651 main_filename = lbasename (main_filename);
655 main_filename = TREE_STRING_POINTER (fname);
656 if (cpp_included (parse_in, main_filename))
657 warning ("#pragma implementation for %s appears after file is included",
661 for (; ifiles; ifiles = ifiles->next)
663 if (! strcmp (ifiles->filename, main_filename))
668 ifiles = (struct impl_files*) xmalloc (sizeof (struct impl_files));
669 ifiles->filename = main_filename;
670 ifiles->next = impl_file_chain;
671 impl_file_chain = ifiles;
675 /* Indicate that this file uses Java-personality exception handling. */
677 handle_pragma_java_exceptions (dfile)
678 cpp_reader *dfile ATTRIBUTE_UNUSED;
681 if (c_lex (&x) != CPP_EOF)
682 warning ("junk at end of #pragma GCC java_exceptions");
684 choose_personality_routine (lang_java);
687 /* Return true if d is in a global scope. */
694 switch (TREE_CODE (d))
699 case OVERLOAD: d = OVL_FUNCTION (d); continue;
700 case TREE_LIST: d = TREE_VALUE (d); continue;
702 my_friendly_assert (DECL_P (d), 980629);
704 return DECL_NAMESPACE_SCOPE_P (d);
708 /* Issue an error message indicating that the lookup of NAME (an
709 IDENTIFIER_NODE) failed. */
712 unqualified_name_lookup_error (tree name)
714 if (IDENTIFIER_OPNAME_P (name))
716 if (name != ansi_opname (ERROR_MARK))
717 error ("`%D' not defined", name);
719 else if (current_function_decl == 0)
720 error ("`%D' was not declared in this scope", name);
723 if (IDENTIFIER_NAMESPACE_VALUE (name) != error_mark_node
724 || IDENTIFIER_ERROR_LOCUS (name) != current_function_decl)
726 static int undeclared_variable_notice;
728 error ("`%D' undeclared (first use this function)", name);
730 if (! undeclared_variable_notice)
732 error ("(Each undeclared identifier is reported only once for each function it appears in.)");
733 undeclared_variable_notice = 1;
736 /* Prevent repeated error messages. */
737 SET_IDENTIFIER_NAMESPACE_VALUE (name, error_mark_node);
738 SET_IDENTIFIER_ERROR_LOCUS (name, current_function_decl);
743 do_identifier (token, args)
749 timevar_push (TV_NAME_LOOKUP);
750 id = lookup_name (token, 0);
752 /* Do Koenig lookup if appropriate (inside templates we build lookup
753 expressions instead).
755 [basic.lookup.koenig]: If the ordinary unqualified lookup of the name
756 finds the declaration of a class member function, the associated
757 namespaces and classes are not considered. */
759 if (args && !current_template_parms && (!id || is_global (id)))
760 id = lookup_arg_dependent (token, id, args);
762 if (id == error_mark_node)
764 /* lookup_name quietly returns error_mark_node if we're parsing,
765 as we don't want to complain about an identifier that ends up
766 being used as a declarator. So we call it again to get the error
768 id = lookup_name (token, 0);
769 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
772 if (!id || (TREE_CODE (id) == FUNCTION_DECL
773 && DECL_ANTICIPATED (id)))
775 if (current_template_parms)
776 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
777 build_min_nt (LOOKUP_EXPR, token));
778 else if (IDENTIFIER_TYPENAME_P (token))
779 /* A templated conversion operator might exist. */
780 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, token);
783 unqualified_name_lookup_error (token);
784 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
788 id = check_for_out_of_scope_variable (id);
790 /* TREE_USED is set in `hack_identifier'. */
791 if (TREE_CODE (id) == CONST_DECL)
794 if (IDENTIFIER_CLASS_VALUE (token) == id)
795 enforce_access (CP_DECL_CONTEXT(id), id);
796 if (!processing_template_decl || DECL_TEMPLATE_PARM_P (id))
797 id = DECL_INITIAL (id);
800 id = hack_identifier (id, token);
802 /* We must look up dependent names when the template is
803 instantiated, not while parsing it. For now, we don't
804 distinguish between dependent and independent names. So, for
805 example, we look up all overloaded functions at
806 instantiation-time, even though in some cases we should just use
807 the DECL we have here. We also use LOOKUP_EXPRs to find things
808 like local variables, rather than creating TEMPLATE_DECLs for the
809 local variables and then finding matching instantiations. */
810 if (current_template_parms
811 && (is_overloaded_fn (id)
812 || (TREE_CODE (id) == VAR_DECL
813 && CP_DECL_CONTEXT (id)
814 && TREE_CODE (CP_DECL_CONTEXT (id)) == FUNCTION_DECL)
815 || TREE_CODE (id) == PARM_DECL
816 || TREE_CODE (id) == RESULT_DECL
817 || TREE_CODE (id) == USING_DECL))
818 id = build_min_nt (LOOKUP_EXPR, token);
820 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, id);
824 do_scoped_id (token, id)
828 timevar_push (TV_NAME_LOOKUP);
829 if (!id || (TREE_CODE (id) == FUNCTION_DECL
830 && DECL_ANTICIPATED (id)))
832 if (processing_template_decl)
834 id = build_min_nt (LOOKUP_EXPR, token);
835 LOOKUP_EXPR_GLOBAL (id) = 1;
836 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, id);
838 if (IDENTIFIER_NAMESPACE_VALUE (token) != error_mark_node)
839 error ("`::%D' undeclared (first use here)", token);
840 id = error_mark_node;
841 /* Prevent repeated error messages. */
842 SET_IDENTIFIER_NAMESPACE_VALUE (token, error_mark_node);
846 if (TREE_CODE (id) == ADDR_EXPR)
847 mark_used (TREE_OPERAND (id, 0));
848 else if (TREE_CODE (id) != OVERLOAD)
851 if (TREE_CODE (id) == CONST_DECL && ! processing_template_decl)
853 /* XXX CHS - should we set TREE_USED of the constant? */
854 id = DECL_INITIAL (id);
855 /* This is to prevent an enum whose value is 0
856 from being considered a null pointer constant. */
857 id = build1 (NOP_EXPR, TREE_TYPE (id), id);
858 TREE_CONSTANT (id) = 1;
861 if (processing_template_decl)
863 if (is_overloaded_fn (id))
865 id = build_min_nt (LOOKUP_EXPR, token);
866 LOOKUP_EXPR_GLOBAL (id) = 1;
867 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, id);
869 /* else just use the decl */
871 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, convert_from_reference (id));
875 identifier_typedecl_value (node)
879 type = IDENTIFIER_TYPE_VALUE (node);
880 if (type == NULL_TREE)
883 if (IDENTIFIER_BINDING (node))
885 t = IDENTIFIER_VALUE (node);
886 if (t && TREE_CODE (t) == TYPE_DECL && TREE_TYPE (t) == type)
889 if (IDENTIFIER_NAMESPACE_VALUE (node))
891 t = IDENTIFIER_NAMESPACE_VALUE (node);
892 if (t && TREE_CODE (t) == TYPE_DECL && TREE_TYPE (t) == type)
896 /* Will this one ever happen? */
897 if (TYPE_MAIN_DECL (type))
898 return TYPE_MAIN_DECL (type);
900 /* We used to do an internal error of 62 here, but instead we will
901 handle the return of a null appropriately in the callers. */
905 #ifdef GATHER_STATISTICS
906 /* The original for tree_node_kind is in the toplevel tree.c; changes there
907 need to be brought into here, unless this were actually put into a header
909 /* Statistics-gathering stuff. */
930 extern int tree_node_counts[];
931 extern int tree_node_sizes[];
935 build_lang_decl (code, name, type)
942 t = build_decl (code, name, type);
943 retrofit_lang_decl (t);
948 /* Add DECL_LANG_SPECIFIC info to T. Called from build_lang_decl
949 and pushdecl (for functions generated by the backend). */
952 retrofit_lang_decl (t)
955 struct lang_decl *ld;
958 if (CAN_HAVE_FULL_LANG_DECL_P (t))
959 size = sizeof (struct lang_decl);
961 size = sizeof (struct lang_decl_flags);
963 ld = (struct lang_decl *) ggc_alloc_cleared (size);
965 ld->decl_flags.can_be_full = CAN_HAVE_FULL_LANG_DECL_P (t) ? 1 : 0;
966 ld->decl_flags.u1sel = TREE_CODE (t) == NAMESPACE_DECL ? 1 : 0;
967 ld->decl_flags.u2sel = 0;
968 if (ld->decl_flags.can_be_full)
969 ld->u.f.u3sel = TREE_CODE (t) == FUNCTION_DECL ? 1 : 0;
971 DECL_LANG_SPECIFIC (t) = ld;
972 if (current_lang_name == lang_name_cplusplus)
973 SET_DECL_LANGUAGE (t, lang_cplusplus);
974 else if (current_lang_name == lang_name_c)
975 SET_DECL_LANGUAGE (t, lang_c);
976 else if (current_lang_name == lang_name_java)
977 SET_DECL_LANGUAGE (t, lang_java);
980 #ifdef GATHER_STATISTICS
981 tree_node_counts[(int)lang_decl] += 1;
982 tree_node_sizes[(int)lang_decl] += size;
987 cxx_dup_lang_specific_decl (node)
991 struct lang_decl *ld;
993 if (! DECL_LANG_SPECIFIC (node))
996 if (!CAN_HAVE_FULL_LANG_DECL_P (node))
997 size = sizeof (struct lang_decl_flags);
999 size = sizeof (struct lang_decl);
1000 ld = (struct lang_decl *) ggc_alloc (size);
1001 memcpy (ld, DECL_LANG_SPECIFIC (node), size);
1002 DECL_LANG_SPECIFIC (node) = ld;
1004 #ifdef GATHER_STATISTICS
1005 tree_node_counts[(int)lang_decl] += 1;
1006 tree_node_sizes[(int)lang_decl] += size;
1010 /* Copy DECL, including any language-specific parts. */
1018 copy = copy_node (decl);
1019 cxx_dup_lang_specific_decl (copy);
1023 /* Replace the shared language-specific parts of NODE with a new copy. */
1026 copy_lang_type (node)
1030 struct lang_type *lt;
1032 if (! TYPE_LANG_SPECIFIC (node))
1035 if (TYPE_LANG_SPECIFIC (node)->u.h.is_lang_type_class)
1036 size = sizeof (struct lang_type);
1038 size = sizeof (struct lang_type_ptrmem);
1039 lt = (struct lang_type *) ggc_alloc (size);
1040 memcpy (lt, TYPE_LANG_SPECIFIC (node), size);
1041 TYPE_LANG_SPECIFIC (node) = lt;
1043 #ifdef GATHER_STATISTICS
1044 tree_node_counts[(int)lang_type] += 1;
1045 tree_node_sizes[(int)lang_type] += size;
1049 /* Copy TYPE, including any language-specific parts. */
1057 copy = copy_node (type);
1058 copy_lang_type (copy);
1063 cxx_make_type (code)
1064 enum tree_code code;
1066 register tree t = make_node (code);
1068 /* Create lang_type structure. */
1069 if (IS_AGGR_TYPE_CODE (code)
1070 || code == BOUND_TEMPLATE_TEMPLATE_PARM)
1072 struct lang_type *pi;
1074 pi = ((struct lang_type *)
1075 ggc_alloc_cleared (sizeof (struct lang_type)));
1077 TYPE_LANG_SPECIFIC (t) = pi;
1078 pi->u.c.h.is_lang_type_class = 1;
1080 #ifdef GATHER_STATISTICS
1081 tree_node_counts[(int)lang_type] += 1;
1082 tree_node_sizes[(int)lang_type] += sizeof (struct lang_type);
1086 /* Set up some flags that give proper default behavior. */
1087 if (IS_AGGR_TYPE_CODE (code))
1089 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
1090 CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
1092 /* Make sure this is laid out, for ease of use later. In the
1093 presence of parse errors, the normal was of assuring this
1094 might not ever get executed, so we lay it out *immediately*. */
1095 build_pointer_type (t);
1098 /* We use TYPE_ALIAS_SET for the CLASSTYPE_MARKED bits. But,
1099 TYPE_ALIAS_SET is initialized to -1 by default, so we must
1101 TYPE_ALIAS_SET (t) = 0;
1103 /* We need to allocate a TYPE_BINFO even for TEMPLATE_TYPE_PARMs
1104 since they can be virtual base types, and we then need a
1105 canonical binfo for them. Ideally, this would be done lazily for
1107 if (IS_AGGR_TYPE_CODE (code) || code == TEMPLATE_TYPE_PARM
1108 || code == BOUND_TEMPLATE_TEMPLATE_PARM
1109 || code == TYPENAME_TYPE)
1110 TYPE_BINFO (t) = make_binfo (size_zero_node, t, NULL_TREE, NULL_TREE);
1116 make_aggr_type (code)
1117 enum tree_code code;
1119 tree t = cxx_make_type (code);
1121 if (IS_AGGR_TYPE_CODE (code))
1122 SET_IS_AGGR_TYPE (t, 1);
1127 /* Return the type-qualifier corresponding to the identifier given by
1131 cp_type_qual_from_rid (rid)
1134 if (rid == ridpointers[(int) RID_CONST])
1135 return TYPE_QUAL_CONST;
1136 else if (rid == ridpointers[(int) RID_VOLATILE])
1137 return TYPE_QUAL_VOLATILE;
1138 else if (rid == ridpointers[(int) RID_RESTRICT])
1139 return TYPE_QUAL_RESTRICT;
1142 return TYPE_UNQUALIFIED;