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"
42 static int interface_strcmp (const char *);
43 static void init_cp_pragma (void);
45 static tree parse_strconst_pragma (const char *, int);
46 static void handle_pragma_vtable (cpp_reader *);
47 static void handle_pragma_unit (cpp_reader *);
48 static void handle_pragma_interface (cpp_reader *);
49 static void handle_pragma_implementation (cpp_reader *);
50 static void handle_pragma_java_exceptions (cpp_reader *);
52 static int is_global (tree);
53 static void init_operators (void);
54 static void copy_lang_type (tree);
56 /* A constraint that can be tested at compile time. */
57 #define CONSTRAINT(name, expr) extern int constraint_##name [(expr) ? 1 : -1]
59 /* Functions and data structures for #pragma interface.
61 `#pragma implementation' means that the main file being compiled
62 is considered to implement (provide) the classes that appear in
63 its main body. I.e., if this is file "foo.cc", and class `bar'
64 is defined in "foo.cc", then we say that "foo.cc implements bar".
66 All main input files "implement" themselves automagically.
68 `#pragma interface' means that unless this file (of the form "foo.h"
69 is not presently being included by file "foo.cc", the
70 CLASSTYPE_INTERFACE_ONLY bit gets set. The effect is that none
71 of the vtables nor any of the inline functions defined in foo.h
74 There are cases when we want to link files such as "defs.h" and
75 "main.cc". In this case, we give "defs.h" a `#pragma interface',
76 and "main.cc" has `#pragma implementation "defs.h"'. */
81 struct impl_files *next;
84 static struct impl_files *impl_file_chain;
87 /* Return something to represent absolute declarators containing a *.
88 TARGET is the absolute declarator that the * contains.
89 CV_QUALIFIERS is a list of modifiers such as const or volatile
90 to apply to the pointer type, represented as identifiers.
92 We return an INDIRECT_REF whose "contents" are TARGET
93 and whose type is the modifier list. */
96 make_pointer_declarator (tree cv_qualifiers, tree target)
98 if (target && TREE_CODE (target) == IDENTIFIER_NODE
99 && ANON_AGGRNAME_P (target))
100 error ("type name expected before `*'");
101 target = build_nt (INDIRECT_REF, target);
102 TREE_TYPE (target) = cv_qualifiers;
106 /* Return something to represent absolute declarators containing a &.
107 TARGET is the absolute declarator that the & contains.
108 CV_QUALIFIERS is a list of modifiers such as const or volatile
109 to apply to the reference type, represented as identifiers.
111 We return an ADDR_EXPR whose "contents" are TARGET
112 and whose type is the modifier list. */
115 make_reference_declarator (tree cv_qualifiers, tree target)
117 target = build_nt (ADDR_EXPR, target);
118 TREE_TYPE (target) = cv_qualifiers;
123 make_call_declarator (tree target, tree parms, tree cv_qualifiers,
124 tree exception_specification)
126 target = build_nt (CALL_EXPR, target,
127 tree_cons (parms, cv_qualifiers, NULL_TREE),
128 /* The third operand is really RTL. We
129 shouldn't put anything there. */
131 CALL_DECLARATOR_EXCEPTION_SPEC (target) = exception_specification;
136 set_quals_and_spec (tree call_declarator, tree cv_qualifiers,
137 tree exception_specification)
139 CALL_DECLARATOR_QUALS (call_declarator) = cv_qualifiers;
140 CALL_DECLARATOR_EXCEPTION_SPEC (call_declarator) = exception_specification;
143 int interface_only; /* whether or not current file is only for
144 interface definitions. */
145 int interface_unknown; /* whether or not we know this class
146 to behave according to #pragma interface. */
155 /* A mapping from tree codes to operator name information. */
156 operator_name_info_t operator_name_info[(int) LAST_CPLUS_TREE_CODE];
157 /* Similar, but for assignment operators. */
158 operator_name_info_t assignment_operator_name_info[(int) LAST_CPLUS_TREE_CODE];
160 /* Initialize data structures that keep track of operator names. */
162 #define DEF_OPERATOR(NAME, C, M, AR, AP) \
163 CONSTRAINT (C, sizeof "operator " + sizeof NAME <= 256);
164 #include "operators.def"
168 init_operators (void)
172 struct operator_name_info_t *oni;
174 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
175 sprintf (buffer, ISALPHA (NAME[0]) ? "operator %s" : "operator%s", NAME); \
176 identifier = get_identifier (buffer); \
177 IDENTIFIER_OPNAME_P (identifier) = 1; \
180 ? &assignment_operator_name_info[(int) CODE] \
181 : &operator_name_info[(int) CODE]); \
182 oni->identifier = identifier; \
184 oni->mangled_name = MANGLING; \
187 #include "operators.def"
190 operator_name_info[(int) ERROR_MARK].identifier
191 = get_identifier ("<invalid operator>");
193 /* Handle some special cases. These operators are not defined in
194 the language, but can be produced internally. We may need them
195 for error-reporting. (Eventually, we should ensure that this
196 does not happen. Error messages involving these operators will
197 be confusing to users.) */
199 operator_name_info [(int) INIT_EXPR].name
200 = operator_name_info [(int) MODIFY_EXPR].name;
201 operator_name_info [(int) EXACT_DIV_EXPR].name = "(ceiling /)";
202 operator_name_info [(int) CEIL_DIV_EXPR].name = "(ceiling /)";
203 operator_name_info [(int) FLOOR_DIV_EXPR].name = "(floor /)";
204 operator_name_info [(int) ROUND_DIV_EXPR].name = "(round /)";
205 operator_name_info [(int) CEIL_MOD_EXPR].name = "(ceiling %)";
206 operator_name_info [(int) FLOOR_MOD_EXPR].name = "(floor %)";
207 operator_name_info [(int) ROUND_MOD_EXPR].name = "(round %)";
208 operator_name_info [(int) ABS_EXPR].name = "abs";
209 operator_name_info [(int) FFS_EXPR].name = "ffs";
210 operator_name_info [(int) BIT_ANDTC_EXPR].name = "&~";
211 operator_name_info [(int) TRUTH_AND_EXPR].name = "strict &&";
212 operator_name_info [(int) TRUTH_OR_EXPR].name = "strict ||";
213 operator_name_info [(int) IN_EXPR].name = "in";
214 operator_name_info [(int) RANGE_EXPR].name = "...";
215 operator_name_info [(int) CONVERT_EXPR].name = "+";
217 assignment_operator_name_info [(int) EXACT_DIV_EXPR].name
219 assignment_operator_name_info [(int) CEIL_DIV_EXPR].name
221 assignment_operator_name_info [(int) FLOOR_DIV_EXPR].name
223 assignment_operator_name_info [(int) ROUND_DIV_EXPR].name
225 assignment_operator_name_info [(int) CEIL_MOD_EXPR].name
227 assignment_operator_name_info [(int) FLOOR_MOD_EXPR].name
229 assignment_operator_name_info [(int) ROUND_MOD_EXPR].name
233 /* The reserved keyword table. */
236 const char *const word;
237 const ENUM_BITFIELD(rid) rid : 16;
238 const unsigned int disable : 16;
241 /* Disable mask. Keywords are disabled if (reswords[i].disable & mask) is
243 #define D_EXT 0x01 /* GCC extension */
244 #define D_ASM 0x02 /* in C99, but has a switch to turn it off */
246 CONSTRAINT(ridbits_fit, RID_LAST_MODIFIER < sizeof(unsigned long) * CHAR_BIT);
248 static const struct resword reswords[] =
250 { "_Complex", RID_COMPLEX, 0 },
251 { "__FUNCTION__", RID_FUNCTION_NAME, 0 },
252 { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
253 { "__alignof", RID_ALIGNOF, 0 },
254 { "__alignof__", RID_ALIGNOF, 0 },
255 { "__asm", RID_ASM, 0 },
256 { "__asm__", RID_ASM, 0 },
257 { "__attribute", RID_ATTRIBUTE, 0 },
258 { "__attribute__", RID_ATTRIBUTE, 0 },
259 { "__builtin_va_arg", RID_VA_ARG, 0 },
260 { "__complex", RID_COMPLEX, 0 },
261 { "__complex__", RID_COMPLEX, 0 },
262 { "__const", RID_CONST, 0 },
263 { "__const__", RID_CONST, 0 },
264 { "__extension__", RID_EXTENSION, 0 },
265 { "__func__", RID_C99_FUNCTION_NAME, 0 },
266 { "__imag", RID_IMAGPART, 0 },
267 { "__imag__", RID_IMAGPART, 0 },
268 { "__inline", RID_INLINE, 0 },
269 { "__inline__", RID_INLINE, 0 },
270 { "__label__", RID_LABEL, 0 },
271 { "__null", RID_NULL, 0 },
272 { "__real", RID_REALPART, 0 },
273 { "__real__", RID_REALPART, 0 },
274 { "__restrict", RID_RESTRICT, 0 },
275 { "__restrict__", RID_RESTRICT, 0 },
276 { "__signed", RID_SIGNED, 0 },
277 { "__signed__", RID_SIGNED, 0 },
278 { "__thread", RID_THREAD, 0 },
279 { "__typeof", RID_TYPEOF, 0 },
280 { "__typeof__", RID_TYPEOF, 0 },
281 { "__volatile", RID_VOLATILE, 0 },
282 { "__volatile__", RID_VOLATILE, 0 },
283 { "asm", RID_ASM, D_ASM },
284 { "auto", RID_AUTO, 0 },
285 { "bool", RID_BOOL, 0 },
286 { "break", RID_BREAK, 0 },
287 { "case", RID_CASE, 0 },
288 { "catch", RID_CATCH, 0 },
289 { "char", RID_CHAR, 0 },
290 { "class", RID_CLASS, 0 },
291 { "const", RID_CONST, 0 },
292 { "const_cast", RID_CONSTCAST, 0 },
293 { "continue", RID_CONTINUE, 0 },
294 { "default", RID_DEFAULT, 0 },
295 { "delete", RID_DELETE, 0 },
297 { "double", RID_DOUBLE, 0 },
298 { "dynamic_cast", RID_DYNCAST, 0 },
299 { "else", RID_ELSE, 0 },
300 { "enum", RID_ENUM, 0 },
301 { "explicit", RID_EXPLICIT, 0 },
302 { "export", RID_EXPORT, 0 },
303 { "extern", RID_EXTERN, 0 },
304 { "false", RID_FALSE, 0 },
305 { "float", RID_FLOAT, 0 },
306 { "for", RID_FOR, 0 },
307 { "friend", RID_FRIEND, 0 },
308 { "goto", RID_GOTO, 0 },
310 { "inline", RID_INLINE, 0 },
311 { "int", RID_INT, 0 },
312 { "long", RID_LONG, 0 },
313 { "mutable", RID_MUTABLE, 0 },
314 { "namespace", RID_NAMESPACE, 0 },
315 { "new", RID_NEW, 0 },
316 { "operator", RID_OPERATOR, 0 },
317 { "private", RID_PRIVATE, 0 },
318 { "protected", RID_PROTECTED, 0 },
319 { "public", RID_PUBLIC, 0 },
320 { "register", RID_REGISTER, 0 },
321 { "reinterpret_cast", RID_REINTCAST, 0 },
322 { "return", RID_RETURN, 0 },
323 { "short", RID_SHORT, 0 },
324 { "signed", RID_SIGNED, 0 },
325 { "sizeof", RID_SIZEOF, 0 },
326 { "static", RID_STATIC, 0 },
327 { "static_cast", RID_STATCAST, 0 },
328 { "struct", RID_STRUCT, 0 },
329 { "switch", RID_SWITCH, 0 },
330 { "template", RID_TEMPLATE, 0 },
331 { "this", RID_THIS, 0 },
332 { "throw", RID_THROW, 0 },
333 { "true", RID_TRUE, 0 },
334 { "try", RID_TRY, 0 },
335 { "typedef", RID_TYPEDEF, 0 },
336 { "typename", RID_TYPENAME, 0 },
337 { "typeid", RID_TYPEID, 0 },
338 { "typeof", RID_TYPEOF, D_ASM|D_EXT },
339 { "union", RID_UNION, 0 },
340 { "unsigned", RID_UNSIGNED, 0 },
341 { "using", RID_USING, 0 },
342 { "virtual", RID_VIRTUAL, 0 },
343 { "void", RID_VOID, 0 },
344 { "volatile", RID_VOLATILE, 0 },
345 { "wchar_t", RID_WCHAR, 0 },
346 { "while", RID_WHILE, 0 },
355 int mask = ((flag_no_asm ? D_ASM : 0)
356 | (flag_no_gnu_keywords ? D_EXT : 0));
358 ridpointers = (tree *) ggc_calloc ((int) RID_MAX, sizeof (tree));
359 for (i = 0; i < ARRAY_SIZE (reswords); i++)
361 id = get_identifier (reswords[i].word);
362 C_RID_CODE (id) = reswords[i].rid;
363 ridpointers [(int) reswords[i].rid] = id;
364 if (! (reswords[i].disable & mask))
365 C_IS_RESERVED_WORD (id) = 1;
370 init_cp_pragma (void)
372 c_register_pragma (0, "vtable", handle_pragma_vtable);
373 c_register_pragma (0, "unit", handle_pragma_unit);
374 c_register_pragma (0, "interface", handle_pragma_interface);
375 c_register_pragma (0, "implementation", handle_pragma_implementation);
376 c_register_pragma ("GCC", "interface", handle_pragma_interface);
377 c_register_pragma ("GCC", "implementation", handle_pragma_implementation);
378 c_register_pragma ("GCC", "java_exceptions", handle_pragma_java_exceptions);
381 /* Initialize the C++ front end. This function is very sensitive to
382 the exact order that things are done here. It would be nice if the
383 initialization done by this routine were moved to its subroutines,
384 and the ordering dependencies clarified and reduced. */
388 static const enum tree_code stmt_codes[] = {
393 INIT_STATEMENT_CODES (stmt_codes);
395 input_filename = "<internal>";
399 init_cp_semantics ();
404 current_function_decl = NULL;
406 class_type_node = build_int_2 (class_type, 0);
407 TREE_TYPE (class_type_node) = class_type_node;
408 ridpointers[(int) RID_CLASS] = class_type_node;
410 record_type_node = build_int_2 (record_type, 0);
411 TREE_TYPE (record_type_node) = record_type_node;
412 ridpointers[(int) RID_STRUCT] = record_type_node;
414 union_type_node = build_int_2 (union_type, 0);
415 TREE_TYPE (union_type_node) = union_type_node;
416 ridpointers[(int) RID_UNION] = union_type_node;
418 enum_type_node = build_int_2 (enum_type, 0);
419 TREE_TYPE (enum_type_node) = enum_type_node;
420 ridpointers[(int) RID_ENUM] = enum_type_node;
422 cxx_init_decl_processing ();
424 /* Create the built-in __null node. */
425 null_node = build_int_2 (0, 0);
426 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
427 ridpointers[RID_NULL] = null_node;
429 interface_unknown = 1;
431 if (c_common_init () == false)
436 init_repo (main_input_filename);
441 /* Helper function to load global variables with interface
445 extract_interface_info (void)
447 struct c_fileinfo *finfo = 0;
449 if (flag_alt_external_templates)
451 tree til = tinst_for_decl ();
454 finfo = get_fileinfo (TINST_FILE (til));
457 finfo = get_fileinfo (input_filename);
459 interface_only = finfo->interface_only;
460 interface_unknown = finfo->interface_unknown;
463 /* Return nonzero if S is not considered part of an
464 INTERFACE/IMPLEMENTATION pair. Otherwise, return 0. */
467 interface_strcmp (const char* s)
469 /* Set the interface/implementation bits for this scope. */
470 struct impl_files *ifiles;
473 for (ifiles = impl_file_chain; ifiles; ifiles = ifiles->next)
475 const char *t1 = ifiles->filename;
478 if (*s1 != *t1 || *s1 == 0)
481 while (*s1 == *t1 && *s1 != 0)
488 /* Don't get faked out by xxx.yyy.cc vs xxx.zzz.cc. */
489 if (strchr (s1, '.') || strchr (t1, '.'))
492 if (*s1 == '\0' || s1[-1] != '.' || t1[-1] != '.')
504 note_got_semicolon (tree type)
508 if (CLASS_TYPE_P (type))
509 CLASSTYPE_GOT_SEMICOLON (type) = 1;
513 note_list_got_semicolon (tree declspecs)
517 for (link = declspecs; link; link = TREE_CHAIN (link))
519 tree type = TREE_VALUE (link);
520 if (type && TYPE_P (type))
521 note_got_semicolon (type);
527 /* Parse a #pragma whose sole argument is a string constant.
528 If OPT is true, the argument is optional. */
530 parse_strconst_pragma (const char* name, int opt)
539 if (c_lex (&x) != CPP_EOF)
540 warning ("junk at end of #pragma %s", name);
544 if (t == CPP_EOF && opt)
547 error ("invalid #pragma %s", name);
552 handle_pragma_vtable (cpp_reader* dfile ATTRIBUTE_UNUSED )
554 parse_strconst_pragma ("vtable", 0);
555 sorry ("#pragma vtable no longer supported");
559 handle_pragma_unit (cpp_reader* dfile ATTRIBUTE_UNUSED )
561 /* Validate syntax, but don't do anything. */
562 parse_strconst_pragma ("unit", 0);
566 handle_pragma_interface (cpp_reader* dfile ATTRIBUTE_UNUSED )
568 tree fname = parse_strconst_pragma ("interface", 1);
569 struct c_fileinfo *finfo;
570 const char *main_filename;
572 if (fname == (tree)-1)
575 main_filename = lbasename (input_filename);
577 main_filename = TREE_STRING_POINTER (fname);
579 finfo = get_fileinfo (input_filename);
581 if (impl_file_chain == 0)
583 /* If this is zero at this point, then we are
584 auto-implementing. */
585 if (main_input_filename == 0)
586 main_input_filename = input_filename;
589 interface_only = interface_strcmp (main_filename);
590 #ifdef MULTIPLE_SYMBOL_SPACES
591 if (! interface_only)
593 interface_unknown = 0;
595 finfo->interface_only = interface_only;
596 finfo->interface_unknown = interface_unknown;
599 /* Note that we have seen a #pragma implementation for the key MAIN_FILENAME.
600 We used to only allow this at toplevel, but that restriction was buggy
601 in older compilers and it seems reasonable to allow it in the headers
602 themselves, too. It only needs to precede the matching #p interface.
604 We don't touch interface_only or interface_unknown; the user must specify
605 a matching #p interface for this to have any effect. */
608 handle_pragma_implementation (cpp_reader* dfile ATTRIBUTE_UNUSED )
610 tree fname = parse_strconst_pragma ("implementation", 1);
611 const char *main_filename;
612 struct impl_files *ifiles = impl_file_chain;
614 if (fname == (tree)-1)
619 if (main_input_filename)
620 main_filename = main_input_filename;
622 main_filename = input_filename;
623 main_filename = lbasename (main_filename);
627 main_filename = TREE_STRING_POINTER (fname);
628 if (cpp_included (parse_in, main_filename))
629 warning ("#pragma implementation for %s appears after file is included",
633 for (; ifiles; ifiles = ifiles->next)
635 if (! strcmp (ifiles->filename, main_filename))
640 ifiles = (struct impl_files*) xmalloc (sizeof (struct impl_files));
641 ifiles->filename = main_filename;
642 ifiles->next = impl_file_chain;
643 impl_file_chain = ifiles;
647 /* Indicate that this file uses Java-personality exception handling. */
649 handle_pragma_java_exceptions (cpp_reader* dfile ATTRIBUTE_UNUSED )
652 if (c_lex (&x) != CPP_EOF)
653 warning ("junk at end of #pragma GCC java_exceptions");
655 choose_personality_routine (lang_java);
658 /* Return true if d is in a global scope. */
664 switch (TREE_CODE (d))
669 case OVERLOAD: d = OVL_FUNCTION (d); continue;
670 case TREE_LIST: d = TREE_VALUE (d); continue;
672 my_friendly_assert (DECL_P (d), 980629);
674 return DECL_NAMESPACE_SCOPE_P (d);
678 /* Issue an error message indicating that the lookup of NAME (an
679 IDENTIFIER_NODE) failed. */
682 unqualified_name_lookup_error (tree name)
684 if (IDENTIFIER_OPNAME_P (name))
686 if (name != ansi_opname (ERROR_MARK))
687 error ("`%D' not defined", name);
689 else if (current_function_decl == 0)
690 error ("`%D' was not declared in this scope", name);
693 if (IDENTIFIER_NAMESPACE_VALUE (name) != error_mark_node
694 || IDENTIFIER_ERROR_LOCUS (name) != current_function_decl)
696 static int undeclared_variable_notice;
698 error ("`%D' undeclared (first use this function)", name);
700 if (! undeclared_variable_notice)
702 error ("(Each undeclared identifier is reported only once for each function it appears in.)");
703 undeclared_variable_notice = 1;
706 /* Prevent repeated error messages. */
707 SET_IDENTIFIER_NAMESPACE_VALUE (name, error_mark_node);
708 SET_IDENTIFIER_ERROR_LOCUS (name, current_function_decl);
713 do_identifier (register tree token, tree args)
717 timevar_push (TV_NAME_LOOKUP);
718 id = lookup_name (token, 0);
720 /* Do Koenig lookup if appropriate (inside templates we build lookup
721 expressions instead).
723 [basic.lookup.koenig]: If the ordinary unqualified lookup of the name
724 finds the declaration of a class member function, the associated
725 namespaces and classes are not considered. */
727 if (args && !current_template_parms && (!id || is_global (id)))
728 id = lookup_arg_dependent (token, id, args);
730 if (id == error_mark_node)
732 /* lookup_name quietly returns error_mark_node if we're parsing,
733 as we don't want to complain about an identifier that ends up
734 being used as a declarator. So we call it again to get the error
736 id = lookup_name (token, 0);
737 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
740 if (!id || (TREE_CODE (id) == FUNCTION_DECL
741 && DECL_ANTICIPATED (id)))
743 if (current_template_parms)
744 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
745 build_min_nt (LOOKUP_EXPR, token));
746 else if (IDENTIFIER_TYPENAME_P (token))
747 /* A templated conversion operator might exist. */
748 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, token);
751 unqualified_name_lookup_error (token);
752 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
756 id = check_for_out_of_scope_variable (id);
758 /* TREE_USED is set in `hack_identifier'. */
759 if (TREE_CODE (id) == CONST_DECL)
762 if (IDENTIFIER_CLASS_VALUE (token) == id)
763 perform_or_defer_access_check (TYPE_BINFO (DECL_CONTEXT (id)), id);
764 if (!processing_template_decl || DECL_TEMPLATE_PARM_P (id))
765 id = DECL_INITIAL (id);
768 id = hack_identifier (id, token);
770 /* We must look up dependent names when the template is
771 instantiated, not while parsing it. For now, we don't
772 distinguish between dependent and independent names. So, for
773 example, we look up all overloaded functions at
774 instantiation-time, even though in some cases we should just use
775 the DECL we have here. We also use LOOKUP_EXPRs to find things
776 like local variables, rather than creating TEMPLATE_DECLs for the
777 local variables and then finding matching instantiations. */
778 if (current_template_parms
779 && (is_overloaded_fn (id)
780 || (TREE_CODE (id) == VAR_DECL
781 && CP_DECL_CONTEXT (id)
782 && TREE_CODE (CP_DECL_CONTEXT (id)) == FUNCTION_DECL)
783 || TREE_CODE (id) == PARM_DECL
784 || TREE_CODE (id) == RESULT_DECL
785 || TREE_CODE (id) == USING_DECL))
786 id = build_min_nt (LOOKUP_EXPR, token);
788 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, id);
792 do_scoped_id (tree token, tree id)
794 timevar_push (TV_NAME_LOOKUP);
795 if (!id || (TREE_CODE (id) == FUNCTION_DECL
796 && DECL_ANTICIPATED (id)))
798 if (processing_template_decl)
800 id = build_min_nt (LOOKUP_EXPR, token);
801 LOOKUP_EXPR_GLOBAL (id) = 1;
802 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, id);
804 if (IDENTIFIER_NAMESPACE_VALUE (token) != error_mark_node)
805 error ("`::%D' undeclared (first use here)", token);
806 id = error_mark_node;
807 /* Prevent repeated error messages. */
808 SET_IDENTIFIER_NAMESPACE_VALUE (token, error_mark_node);
812 if (TREE_CODE (id) == ADDR_EXPR)
813 mark_used (TREE_OPERAND (id, 0));
814 else if (TREE_CODE (id) != OVERLOAD)
817 if (TREE_CODE (id) == CONST_DECL && ! processing_template_decl)
819 /* XXX CHS - should we set TREE_USED of the constant? */
820 id = DECL_INITIAL (id);
821 /* This is to prevent an enum whose value is 0
822 from being considered a null pointer constant. */
823 id = build1 (NOP_EXPR, TREE_TYPE (id), id);
824 TREE_CONSTANT (id) = 1;
827 if (processing_template_decl)
829 if (is_overloaded_fn (id))
831 id = build_min_nt (LOOKUP_EXPR, token);
832 LOOKUP_EXPR_GLOBAL (id) = 1;
833 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, id);
835 /* else just use the decl */
837 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, convert_from_reference (id));
841 identifier_typedecl_value (tree node)
844 type = IDENTIFIER_TYPE_VALUE (node);
845 if (type == NULL_TREE)
848 if (IDENTIFIER_BINDING (node))
850 t = IDENTIFIER_VALUE (node);
851 if (t && TREE_CODE (t) == TYPE_DECL && TREE_TYPE (t) == type)
854 if (IDENTIFIER_NAMESPACE_VALUE (node))
856 t = IDENTIFIER_NAMESPACE_VALUE (node);
857 if (t && TREE_CODE (t) == TYPE_DECL && TREE_TYPE (t) == type)
861 /* Will this one ever happen? */
862 if (TYPE_MAIN_DECL (type))
863 return TYPE_MAIN_DECL (type);
865 /* We used to do an internal error of 62 here, but instead we will
866 handle the return of a null appropriately in the callers. */
870 #ifdef GATHER_STATISTICS
871 /* The original for tree_node_kind is in the toplevel tree.c; changes there
872 need to be brought into here, unless this were actually put into a header
874 /* Statistics-gathering stuff. */
895 extern int tree_node_counts[];
896 extern int tree_node_sizes[];
900 build_lang_decl (enum tree_code code, tree name, tree type)
904 t = build_decl (code, name, type);
905 retrofit_lang_decl (t);
910 /* Add DECL_LANG_SPECIFIC info to T. Called from build_lang_decl
911 and pushdecl (for functions generated by the backend). */
914 retrofit_lang_decl (tree t)
916 struct lang_decl *ld;
919 if (CAN_HAVE_FULL_LANG_DECL_P (t))
920 size = sizeof (struct lang_decl);
922 size = sizeof (struct lang_decl_flags);
924 ld = (struct lang_decl *) ggc_alloc_cleared (size);
926 ld->decl_flags.can_be_full = CAN_HAVE_FULL_LANG_DECL_P (t) ? 1 : 0;
927 ld->decl_flags.u1sel = TREE_CODE (t) == NAMESPACE_DECL ? 1 : 0;
928 ld->decl_flags.u2sel = 0;
929 if (ld->decl_flags.can_be_full)
930 ld->u.f.u3sel = TREE_CODE (t) == FUNCTION_DECL ? 1 : 0;
932 DECL_LANG_SPECIFIC (t) = ld;
933 if (current_lang_name == lang_name_cplusplus)
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 if (current_lang_name == lang_name_java)
938 SET_DECL_LANGUAGE (t, lang_java);
941 #ifdef GATHER_STATISTICS
942 tree_node_counts[(int)lang_decl] += 1;
943 tree_node_sizes[(int)lang_decl] += size;
948 cxx_dup_lang_specific_decl (tree node)
951 struct lang_decl *ld;
953 if (! DECL_LANG_SPECIFIC (node))
956 if (!CAN_HAVE_FULL_LANG_DECL_P (node))
957 size = sizeof (struct lang_decl_flags);
959 size = sizeof (struct lang_decl);
960 ld = (struct lang_decl *) ggc_alloc (size);
961 memcpy (ld, DECL_LANG_SPECIFIC (node), size);
962 DECL_LANG_SPECIFIC (node) = ld;
964 #ifdef GATHER_STATISTICS
965 tree_node_counts[(int)lang_decl] += 1;
966 tree_node_sizes[(int)lang_decl] += size;
970 /* Copy DECL, including any language-specific parts. */
973 copy_decl (tree decl)
977 copy = copy_node (decl);
978 cxx_dup_lang_specific_decl (copy);
982 /* Replace the shared language-specific parts of NODE with a new copy. */
985 copy_lang_type (tree node)
988 struct lang_type *lt;
990 if (! TYPE_LANG_SPECIFIC (node))
993 if (TYPE_LANG_SPECIFIC (node)->u.h.is_lang_type_class)
994 size = sizeof (struct lang_type);
996 size = sizeof (struct lang_type_ptrmem);
997 lt = (struct lang_type *) ggc_alloc (size);
998 memcpy (lt, TYPE_LANG_SPECIFIC (node), size);
999 TYPE_LANG_SPECIFIC (node) = lt;
1001 #ifdef GATHER_STATISTICS
1002 tree_node_counts[(int)lang_type] += 1;
1003 tree_node_sizes[(int)lang_type] += size;
1007 /* Copy TYPE, including any language-specific parts. */
1010 copy_type (tree type)
1014 copy = copy_node (type);
1015 copy_lang_type (copy);
1020 cxx_make_type (enum tree_code code)
1022 register tree t = make_node (code);
1024 /* Create lang_type structure. */
1025 if (IS_AGGR_TYPE_CODE (code)
1026 || code == BOUND_TEMPLATE_TEMPLATE_PARM)
1028 struct lang_type *pi;
1030 pi = ((struct lang_type *)
1031 ggc_alloc_cleared (sizeof (struct lang_type)));
1033 TYPE_LANG_SPECIFIC (t) = pi;
1034 pi->u.c.h.is_lang_type_class = 1;
1036 #ifdef GATHER_STATISTICS
1037 tree_node_counts[(int)lang_type] += 1;
1038 tree_node_sizes[(int)lang_type] += sizeof (struct lang_type);
1042 /* Set up some flags that give proper default behavior. */
1043 if (IS_AGGR_TYPE_CODE (code))
1045 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
1046 CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
1048 /* Make sure this is laid out, for ease of use later. In the
1049 presence of parse errors, the normal was of assuring this
1050 might not ever get executed, so we lay it out *immediately*. */
1051 build_pointer_type (t);
1054 /* We use TYPE_ALIAS_SET for the CLASSTYPE_MARKED bits. But,
1055 TYPE_ALIAS_SET is initialized to -1 by default, so we must
1057 TYPE_ALIAS_SET (t) = 0;
1059 /* We need to allocate a TYPE_BINFO even for TEMPLATE_TYPE_PARMs
1060 since they can be virtual base types, and we then need a
1061 canonical binfo for them. Ideally, this would be done lazily for
1063 if (IS_AGGR_TYPE_CODE (code) || code == TEMPLATE_TYPE_PARM
1064 || code == BOUND_TEMPLATE_TEMPLATE_PARM
1065 || code == TYPENAME_TYPE)
1066 TYPE_BINFO (t) = make_binfo (size_zero_node, t, NULL_TREE, NULL_TREE);
1072 make_aggr_type (enum tree_code code)
1074 tree t = cxx_make_type (code);
1076 if (IS_AGGR_TYPE_CODE (code))
1077 SET_IS_AGGR_TYPE (t, 1);
1082 /* Return the type-qualifier corresponding to the identifier given by
1086 cp_type_qual_from_rid (tree rid)
1088 if (rid == ridpointers[(int) RID_CONST])
1089 return TYPE_QUAL_CONST;
1090 else if (rid == ridpointers[(int) RID_VOLATILE])
1091 return TYPE_QUAL_VOLATILE;
1092 else if (rid == ridpointers[(int) RID_RESTRICT])
1093 return TYPE_QUAL_RESTRICT;
1096 return TYPE_UNQUALIFIED;