2 Copyright (C) 2000, 2001, 2002, 2003, 2004,
3 2005, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4 Written by Mark Mitchell <mark@codesourcery.com>.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
13 GCC is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 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 COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
24 #include "coretypes.h"
31 #include "c-family/c-pragma.h"
34 #include "diagnostic-core.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
41 #include "tree-pretty-print.h"
47 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
48 and c-lex.c) and the C++ parser. */
50 static cp_token eof_token =
52 CPP_EOF, RID_MAX, 0, PRAGMA_NONE, false, false, false, 0, { NULL }
55 /* The various kinds of non integral constant we encounter. */
56 typedef enum non_integral_constant {
58 /* floating-point literal */
62 /* %<__FUNCTION__%> */
64 /* %<__PRETTY_FUNCTION__%> */
72 /* %<typeid%> operator */
74 /* non-constant compound literals */
82 /* an array reference */
88 /* the address of a label */
102 /* calls to overloaded operators */
106 /* a comma operator */
108 /* a call to a constructor */
110 } non_integral_constant;
112 /* The various kinds of errors about name-lookup failing. */
113 typedef enum name_lookup_error {
118 /* is not a class or namespace */
120 /* is not a class, namespace, or enumeration */
124 /* The various kinds of required token */
125 typedef enum required_token {
127 RT_SEMICOLON, /* ';' */
128 RT_OPEN_PAREN, /* '(' */
129 RT_CLOSE_BRACE, /* '}' */
130 RT_OPEN_BRACE, /* '{' */
131 RT_CLOSE_SQUARE, /* ']' */
132 RT_OPEN_SQUARE, /* '[' */
136 RT_GREATER, /* '>' */
138 RT_ELLIPSIS, /* '...' */
142 RT_COLON_SCOPE, /* ':' or '::' */
143 RT_CLOSE_PAREN, /* ')' */
144 RT_COMMA_CLOSE_PAREN, /* ',' or ')' */
145 RT_PRAGMA_EOL, /* end of line */
146 RT_NAME, /* identifier */
148 /* The type is CPP_KEYWORD */
150 RT_DELETE, /* delete */
151 RT_RETURN, /* return */
152 RT_WHILE, /* while */
153 RT_EXTERN, /* extern */
154 RT_STATIC_ASSERT, /* static_assert */
155 RT_DECLTYPE, /* decltype */
156 RT_OPERATOR, /* operator */
157 RT_CLASS, /* class */
158 RT_TEMPLATE, /* template */
159 RT_NAMESPACE, /* namespace */
160 RT_USING, /* using */
163 RT_CATCH, /* catch */
164 RT_THROW, /* throw */
165 RT_LABEL, /* __label__ */
166 RT_AT_TRY, /* @try */
167 RT_AT_SYNCHRONIZED, /* @synchronized */
168 RT_AT_THROW, /* @throw */
170 RT_SELECT, /* selection-statement */
171 RT_INTERATION, /* iteration-statement */
172 RT_JUMP, /* jump-statement */
173 RT_CLASS_KEY, /* class-key */
174 RT_CLASS_TYPENAME_TEMPLATE /* class, typename, or template */
179 static cp_lexer *cp_lexer_new_main
181 static cp_lexer *cp_lexer_new_from_tokens
182 (cp_token_cache *tokens);
183 static void cp_lexer_destroy
185 static int cp_lexer_saving_tokens
187 static cp_token *cp_lexer_token_at
188 (cp_lexer *, cp_token_position);
189 static void cp_lexer_get_preprocessor_token
190 (cp_lexer *, cp_token *);
191 static inline cp_token *cp_lexer_peek_token
193 static cp_token *cp_lexer_peek_nth_token
194 (cp_lexer *, size_t);
195 static inline bool cp_lexer_next_token_is
196 (cp_lexer *, enum cpp_ttype);
197 static bool cp_lexer_next_token_is_not
198 (cp_lexer *, enum cpp_ttype);
199 static bool cp_lexer_next_token_is_keyword
200 (cp_lexer *, enum rid);
201 static cp_token *cp_lexer_consume_token
203 static void cp_lexer_purge_token
205 static void cp_lexer_purge_tokens_after
206 (cp_lexer *, cp_token_position);
207 static void cp_lexer_save_tokens
209 static void cp_lexer_commit_tokens
211 static void cp_lexer_rollback_tokens
213 #ifdef ENABLE_CHECKING
214 static void cp_lexer_print_token
215 (FILE *, cp_token *);
216 static inline bool cp_lexer_debugging_p
218 static void cp_lexer_start_debugging
219 (cp_lexer *) ATTRIBUTE_UNUSED;
220 static void cp_lexer_stop_debugging
221 (cp_lexer *) ATTRIBUTE_UNUSED;
223 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
224 about passing NULL to functions that require non-NULL arguments
225 (fputs, fprintf). It will never be used, so all we need is a value
226 of the right type that's guaranteed not to be NULL. */
227 #define cp_lexer_debug_stream stdout
228 #define cp_lexer_print_token(str, tok) (void) 0
229 #define cp_lexer_debugging_p(lexer) 0
230 #endif /* ENABLE_CHECKING */
232 static cp_token_cache *cp_token_cache_new
233 (cp_token *, cp_token *);
235 static void cp_parser_initial_pragma
238 /* Manifest constants. */
239 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
240 #define CP_SAVED_TOKEN_STACK 5
244 #ifdef ENABLE_CHECKING
245 /* The stream to which debugging output should be written. */
246 static FILE *cp_lexer_debug_stream;
247 #endif /* ENABLE_CHECKING */
249 /* Nonzero if we are parsing an unevaluated operand: an operand to
250 sizeof, typeof, or alignof. */
251 int cp_unevaluated_operand;
253 #ifdef ENABLE_CHECKING
254 /* Dump up to NUM tokens in BUFFER to FILE. If NUM is 0, dump all the
258 cp_lexer_dump_tokens (FILE *file, VEC(cp_token,gc) *buffer, unsigned num)
263 fprintf (file, "%u tokens\n", VEC_length (cp_token, buffer));
266 num = VEC_length (cp_token, buffer);
268 for (i = 0; VEC_iterate (cp_token, buffer, i, token) && i < num; i++)
270 cp_lexer_print_token (file, token);
275 case CPP_CLOSE_BRACE:
285 if (i == num && i < VEC_length (cp_token, buffer))
287 fprintf (file, " ... ");
288 cp_lexer_print_token (file, VEC_index (cp_token, buffer,
289 VEC_length (cp_token, buffer) - 1));
292 fprintf (file, "\n");
296 /* Dump all tokens in BUFFER to stderr. */
299 cp_lexer_debug_tokens (VEC(cp_token,gc) *buffer)
301 cp_lexer_dump_tokens (stderr, buffer, 0);
306 /* Allocate memory for a new lexer object and return it. */
309 cp_lexer_alloc (void)
313 c_common_no_more_pch ();
315 /* Allocate the memory. */
316 lexer = ggc_alloc_cleared_cp_lexer ();
318 #ifdef ENABLE_CHECKING
319 /* Initially we are not debugging. */
320 lexer->debugging_p = false;
321 #endif /* ENABLE_CHECKING */
322 lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
323 CP_SAVED_TOKEN_STACK);
325 /* Create the buffer. */
326 lexer->buffer = VEC_alloc (cp_token, gc, CP_LEXER_BUFFER_SIZE);
332 /* Create a new main C++ lexer, the lexer that gets tokens from the
336 cp_lexer_new_main (void)
341 /* It's possible that parsing the first pragma will load a PCH file,
342 which is a GC collection point. So we have to do that before
343 allocating any memory. */
344 cp_parser_initial_pragma (&token);
346 lexer = cp_lexer_alloc ();
348 /* Put the first token in the buffer. */
349 VEC_quick_push (cp_token, lexer->buffer, &token);
351 /* Get the remaining tokens from the preprocessor. */
352 while (token.type != CPP_EOF)
354 cp_lexer_get_preprocessor_token (lexer, &token);
355 VEC_safe_push (cp_token, gc, lexer->buffer, &token);
358 lexer->last_token = VEC_address (cp_token, lexer->buffer)
359 + VEC_length (cp_token, lexer->buffer)
361 lexer->next_token = VEC_length (cp_token, lexer->buffer)
362 ? VEC_address (cp_token, lexer->buffer)
365 /* Subsequent preprocessor diagnostics should use compiler
366 diagnostic functions to get the compiler source location. */
369 gcc_assert (!lexer->next_token->purged_p);
373 /* Create a new lexer whose token stream is primed with the tokens in
374 CACHE. When these tokens are exhausted, no new tokens will be read. */
377 cp_lexer_new_from_tokens (cp_token_cache *cache)
379 cp_token *first = cache->first;
380 cp_token *last = cache->last;
381 cp_lexer *lexer = ggc_alloc_cleared_cp_lexer ();
383 /* We do not own the buffer. */
384 lexer->buffer = NULL;
385 lexer->next_token = first == last ? &eof_token : first;
386 lexer->last_token = last;
388 lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
389 CP_SAVED_TOKEN_STACK);
391 #ifdef ENABLE_CHECKING
392 /* Initially we are not debugging. */
393 lexer->debugging_p = false;
396 gcc_assert (!lexer->next_token->purged_p);
400 /* Frees all resources associated with LEXER. */
403 cp_lexer_destroy (cp_lexer *lexer)
405 VEC_free (cp_token, gc, lexer->buffer);
406 VEC_free (cp_token_position, heap, lexer->saved_tokens);
410 /* Returns nonzero if debugging information should be output. */
412 #ifdef ENABLE_CHECKING
415 cp_lexer_debugging_p (cp_lexer *lexer)
417 return lexer->debugging_p;
420 #endif /* ENABLE_CHECKING */
422 static inline cp_token_position
423 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
425 gcc_assert (!previous_p || lexer->next_token != &eof_token);
427 return lexer->next_token - previous_p;
430 static inline cp_token *
431 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
437 cp_lexer_set_token_position (cp_lexer *lexer, cp_token_position pos)
439 lexer->next_token = cp_lexer_token_at (lexer, pos);
442 static inline cp_token_position
443 cp_lexer_previous_token_position (cp_lexer *lexer)
445 if (lexer->next_token == &eof_token)
446 return lexer->last_token - 1;
448 return cp_lexer_token_position (lexer, true);
451 static inline cp_token *
452 cp_lexer_previous_token (cp_lexer *lexer)
454 cp_token_position tp = cp_lexer_previous_token_position (lexer);
456 return cp_lexer_token_at (lexer, tp);
459 /* nonzero if we are presently saving tokens. */
462 cp_lexer_saving_tokens (const cp_lexer* lexer)
464 return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
467 /* Store the next token from the preprocessor in *TOKEN. Return true
468 if we reach EOF. If LEXER is NULL, assume we are handling an
469 initial #pragma pch_preprocess, and thus want the lexer to return
470 processed strings. */
473 cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
475 static int is_extern_c = 0;
477 /* Get a new token from the preprocessor. */
479 = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
480 lexer == NULL ? 0 : C_LEX_STRING_NO_JOIN);
481 token->keyword = RID_MAX;
482 token->pragma_kind = PRAGMA_NONE;
483 token->purged_p = false;
485 /* On some systems, some header files are surrounded by an
486 implicit extern "C" block. Set a flag in the token if it
487 comes from such a header. */
488 is_extern_c += pending_lang_change;
489 pending_lang_change = 0;
490 token->implicit_extern_c = is_extern_c > 0;
492 /* Check to see if this token is a keyword. */
493 if (token->type == CPP_NAME)
495 if (C_IS_RESERVED_WORD (token->u.value))
497 /* Mark this token as a keyword. */
498 token->type = CPP_KEYWORD;
499 /* Record which keyword. */
500 token->keyword = C_RID_CODE (token->u.value);
504 if (warn_cxx0x_compat
505 && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
506 && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
508 /* Warn about the C++0x keyword (but still treat it as
510 warning (OPT_Wc__0x_compat,
511 "identifier %qE will become a keyword in C++0x",
514 /* Clear out the C_RID_CODE so we don't warn about this
515 particular identifier-turned-keyword again. */
516 C_SET_RID_CODE (token->u.value, RID_MAX);
519 token->ambiguous_p = false;
520 token->keyword = RID_MAX;
523 else if (token->type == CPP_AT_NAME)
525 /* This only happens in Objective-C++; it must be a keyword. */
526 token->type = CPP_KEYWORD;
527 switch (C_RID_CODE (token->u.value))
529 /* Replace 'class' with '@class', 'private' with '@private',
530 etc. This prevents confusion with the C++ keyword
531 'class', and makes the tokens consistent with other
532 Objective-C 'AT' keywords. For example '@class' is
533 reported as RID_AT_CLASS which is consistent with
534 '@synchronized', which is reported as
537 case RID_CLASS: token->keyword = RID_AT_CLASS; break;
538 case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
539 case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
540 case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
541 case RID_THROW: token->keyword = RID_AT_THROW; break;
542 case RID_TRY: token->keyword = RID_AT_TRY; break;
543 case RID_CATCH: token->keyword = RID_AT_CATCH; break;
544 default: token->keyword = C_RID_CODE (token->u.value);
547 else if (token->type == CPP_PRAGMA)
549 /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST. */
550 token->pragma_kind = ((enum pragma_kind)
551 TREE_INT_CST_LOW (token->u.value));
552 token->u.value = NULL_TREE;
556 /* Update the globals input_location and the input file stack from TOKEN. */
558 cp_lexer_set_source_position_from_token (cp_token *token)
560 if (token->type != CPP_EOF)
562 input_location = token->location;
566 /* Return a pointer to the next token in the token stream, but do not
569 static inline cp_token *
570 cp_lexer_peek_token (cp_lexer *lexer)
572 if (cp_lexer_debugging_p (lexer))
574 fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
575 cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
576 putc ('\n', cp_lexer_debug_stream);
578 return lexer->next_token;
581 /* Return true if the next token has the indicated TYPE. */
584 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
586 return cp_lexer_peek_token (lexer)->type == type;
589 /* Return true if the next token does not have the indicated TYPE. */
592 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
594 return !cp_lexer_next_token_is (lexer, type);
597 /* Return true if the next token is the indicated KEYWORD. */
600 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
602 return cp_lexer_peek_token (lexer)->keyword == keyword;
605 /* Return true if the next token is not the indicated KEYWORD. */
608 cp_lexer_next_token_is_not_keyword (cp_lexer* lexer, enum rid keyword)
610 return cp_lexer_peek_token (lexer)->keyword != keyword;
613 /* Return true if the next token is a keyword for a decl-specifier. */
616 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
620 token = cp_lexer_peek_token (lexer);
621 switch (token->keyword)
623 /* auto specifier: storage-class-specifier in C++,
624 simple-type-specifier in C++0x. */
626 /* Storage classes. */
632 /* Elaborated type specifiers. */
638 /* Simple type specifiers. */
653 /* GNU extensions. */
656 /* C++0x extensions. */
658 case RID_UNDERLYING_TYPE:
666 /* Return a pointer to the Nth token in the token stream. If N is 1,
667 then this is precisely equivalent to cp_lexer_peek_token (except
668 that it is not inline). One would like to disallow that case, but
669 there is one case (cp_parser_nth_token_starts_template_id) where
670 the caller passes a variable for N and it might be 1. */
673 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
677 /* N is 1-based, not zero-based. */
680 if (cp_lexer_debugging_p (lexer))
681 fprintf (cp_lexer_debug_stream,
682 "cp_lexer: peeking ahead %ld at token: ", (long)n);
685 token = lexer->next_token;
686 gcc_assert (!n || token != &eof_token);
690 if (token == lexer->last_token)
696 if (!token->purged_p)
700 if (cp_lexer_debugging_p (lexer))
702 cp_lexer_print_token (cp_lexer_debug_stream, token);
703 putc ('\n', cp_lexer_debug_stream);
709 /* Return the next token, and advance the lexer's next_token pointer
710 to point to the next non-purged token. */
713 cp_lexer_consume_token (cp_lexer* lexer)
715 cp_token *token = lexer->next_token;
717 gcc_assert (token != &eof_token);
718 gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
723 if (lexer->next_token == lexer->last_token)
725 lexer->next_token = &eof_token;
730 while (lexer->next_token->purged_p);
732 cp_lexer_set_source_position_from_token (token);
734 /* Provide debugging output. */
735 if (cp_lexer_debugging_p (lexer))
737 fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
738 cp_lexer_print_token (cp_lexer_debug_stream, token);
739 putc ('\n', cp_lexer_debug_stream);
745 /* Permanently remove the next token from the token stream, and
746 advance the next_token pointer to refer to the next non-purged
750 cp_lexer_purge_token (cp_lexer *lexer)
752 cp_token *tok = lexer->next_token;
754 gcc_assert (tok != &eof_token);
755 tok->purged_p = true;
756 tok->location = UNKNOWN_LOCATION;
757 tok->u.value = NULL_TREE;
758 tok->keyword = RID_MAX;
763 if (tok == lexer->last_token)
769 while (tok->purged_p);
770 lexer->next_token = tok;
773 /* Permanently remove all tokens after TOK, up to, but not
774 including, the token that will be returned next by
775 cp_lexer_peek_token. */
778 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
780 cp_token *peek = lexer->next_token;
782 if (peek == &eof_token)
783 peek = lexer->last_token;
785 gcc_assert (tok < peek);
787 for ( tok += 1; tok != peek; tok += 1)
789 tok->purged_p = true;
790 tok->location = UNKNOWN_LOCATION;
791 tok->u.value = NULL_TREE;
792 tok->keyword = RID_MAX;
796 /* Begin saving tokens. All tokens consumed after this point will be
800 cp_lexer_save_tokens (cp_lexer* lexer)
802 /* Provide debugging output. */
803 if (cp_lexer_debugging_p (lexer))
804 fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
806 VEC_safe_push (cp_token_position, heap,
807 lexer->saved_tokens, lexer->next_token);
810 /* Commit to the portion of the token stream most recently saved. */
813 cp_lexer_commit_tokens (cp_lexer* lexer)
815 /* Provide debugging output. */
816 if (cp_lexer_debugging_p (lexer))
817 fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
819 VEC_pop (cp_token_position, lexer->saved_tokens);
822 /* Return all tokens saved since the last call to cp_lexer_save_tokens
823 to the token stream. Stop saving tokens. */
826 cp_lexer_rollback_tokens (cp_lexer* lexer)
828 /* Provide debugging output. */
829 if (cp_lexer_debugging_p (lexer))
830 fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
832 lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
835 /* Print a representation of the TOKEN on the STREAM. */
837 #ifdef ENABLE_CHECKING
840 cp_lexer_print_token (FILE * stream, cp_token *token)
842 /* We don't use cpp_type2name here because the parser defines
843 a few tokens of its own. */
844 static const char *const token_names[] = {
845 /* cpplib-defined token types */
851 /* C++ parser token types - see "Manifest constants", above. */
854 "NESTED_NAME_SPECIFIER",
857 /* For some tokens, print the associated data. */
861 /* Some keywords have a value that is not an IDENTIFIER_NODE.
862 For example, `struct' is mapped to an INTEGER_CST. */
863 if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
865 /* else fall through */
867 fputs (IDENTIFIER_POINTER (token->u.value), stream);
875 fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
879 print_generic_expr (stream, token->u.value, 0);
883 /* If we have a name for the token, print it out. Otherwise, we
884 simply give the numeric code. */
885 if (token->type < ARRAY_SIZE(token_names))
886 fputs (token_names[token->type], stream);
888 fprintf (stream, "[%d]", token->type);
893 /* Start emitting debugging information. */
896 cp_lexer_start_debugging (cp_lexer* lexer)
898 lexer->debugging_p = true;
901 /* Stop emitting debugging information. */
904 cp_lexer_stop_debugging (cp_lexer* lexer)
906 lexer->debugging_p = false;
909 #endif /* ENABLE_CHECKING */
911 /* Create a new cp_token_cache, representing a range of tokens. */
913 static cp_token_cache *
914 cp_token_cache_new (cp_token *first, cp_token *last)
916 cp_token_cache *cache = ggc_alloc_cp_token_cache ();
917 cache->first = first;
923 /* Decl-specifiers. */
925 /* Set *DECL_SPECS to represent an empty decl-specifier-seq. */
928 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
930 memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
935 /* Nothing other than the parser should be creating declarators;
936 declarators are a semi-syntactic representation of C++ entities.
937 Other parts of the front end that need to create entities (like
938 VAR_DECLs or FUNCTION_DECLs) should do that directly. */
940 static cp_declarator *make_call_declarator
941 (cp_declarator *, tree, cp_cv_quals, cp_virt_specifiers, tree, tree);
942 static cp_declarator *make_array_declarator
943 (cp_declarator *, tree);
944 static cp_declarator *make_pointer_declarator
945 (cp_cv_quals, cp_declarator *);
946 static cp_declarator *make_reference_declarator
947 (cp_cv_quals, cp_declarator *, bool);
948 static cp_parameter_declarator *make_parameter_declarator
949 (cp_decl_specifier_seq *, cp_declarator *, tree);
950 static cp_declarator *make_ptrmem_declarator
951 (cp_cv_quals, tree, cp_declarator *);
953 /* An erroneous declarator. */
954 static cp_declarator *cp_error_declarator;
956 /* The obstack on which declarators and related data structures are
958 static struct obstack declarator_obstack;
960 /* Alloc BYTES from the declarator memory pool. */
963 alloc_declarator (size_t bytes)
965 return obstack_alloc (&declarator_obstack, bytes);
968 /* Allocate a declarator of the indicated KIND. Clear fields that are
969 common to all declarators. */
971 static cp_declarator *
972 make_declarator (cp_declarator_kind kind)
974 cp_declarator *declarator;
976 declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
977 declarator->kind = kind;
978 declarator->attributes = NULL_TREE;
979 declarator->declarator = NULL;
980 declarator->parameter_pack_p = false;
981 declarator->id_loc = UNKNOWN_LOCATION;
986 /* Make a declarator for a generalized identifier. If
987 QUALIFYING_SCOPE is non-NULL, the identifier is
988 QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
989 UNQUALIFIED_NAME. SFK indicates the kind of special function this
992 static cp_declarator *
993 make_id_declarator (tree qualifying_scope, tree unqualified_name,
994 special_function_kind sfk)
996 cp_declarator *declarator;
998 /* It is valid to write:
1000 class C { void f(); };
1004 The standard is not clear about whether `typedef const C D' is
1005 legal; as of 2002-09-15 the committee is considering that
1006 question. EDG 3.0 allows that syntax. Therefore, we do as
1008 if (qualifying_scope && TYPE_P (qualifying_scope))
1009 qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
1011 gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
1012 || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
1013 || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
1015 declarator = make_declarator (cdk_id);
1016 declarator->u.id.qualifying_scope = qualifying_scope;
1017 declarator->u.id.unqualified_name = unqualified_name;
1018 declarator->u.id.sfk = sfk;
1023 /* Make a declarator for a pointer to TARGET. CV_QUALIFIERS is a list
1024 of modifiers such as const or volatile to apply to the pointer
1025 type, represented as identifiers. */
1028 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
1030 cp_declarator *declarator;
1032 declarator = make_declarator (cdk_pointer);
1033 declarator->declarator = target;
1034 declarator->u.pointer.qualifiers = cv_qualifiers;
1035 declarator->u.pointer.class_type = NULL_TREE;
1038 declarator->id_loc = target->id_loc;
1039 declarator->parameter_pack_p = target->parameter_pack_p;
1040 target->parameter_pack_p = false;
1043 declarator->parameter_pack_p = false;
1048 /* Like make_pointer_declarator -- but for references. */
1051 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target,
1054 cp_declarator *declarator;
1056 declarator = make_declarator (cdk_reference);
1057 declarator->declarator = target;
1058 declarator->u.reference.qualifiers = cv_qualifiers;
1059 declarator->u.reference.rvalue_ref = rvalue_ref;
1062 declarator->id_loc = target->id_loc;
1063 declarator->parameter_pack_p = target->parameter_pack_p;
1064 target->parameter_pack_p = false;
1067 declarator->parameter_pack_p = false;
1072 /* Like make_pointer_declarator -- but for a pointer to a non-static
1073 member of CLASS_TYPE. */
1076 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
1077 cp_declarator *pointee)
1079 cp_declarator *declarator;
1081 declarator = make_declarator (cdk_ptrmem);
1082 declarator->declarator = pointee;
1083 declarator->u.pointer.qualifiers = cv_qualifiers;
1084 declarator->u.pointer.class_type = class_type;
1088 declarator->parameter_pack_p = pointee->parameter_pack_p;
1089 pointee->parameter_pack_p = false;
1092 declarator->parameter_pack_p = false;
1097 /* Make a declarator for the function given by TARGET, with the
1098 indicated PARMS. The CV_QUALIFIERS aply to the function, as in
1099 "const"-qualified member function. The EXCEPTION_SPECIFICATION
1100 indicates what exceptions can be thrown. */
1103 make_call_declarator (cp_declarator *target,
1105 cp_cv_quals cv_qualifiers,
1106 cp_virt_specifiers virt_specifiers,
1107 tree exception_specification,
1108 tree late_return_type)
1110 cp_declarator *declarator;
1112 declarator = make_declarator (cdk_function);
1113 declarator->declarator = target;
1114 declarator->u.function.parameters = parms;
1115 declarator->u.function.qualifiers = cv_qualifiers;
1116 declarator->u.function.virt_specifiers = virt_specifiers;
1117 declarator->u.function.exception_specification = exception_specification;
1118 declarator->u.function.late_return_type = late_return_type;
1121 declarator->id_loc = target->id_loc;
1122 declarator->parameter_pack_p = target->parameter_pack_p;
1123 target->parameter_pack_p = false;
1126 declarator->parameter_pack_p = false;
1131 /* Make a declarator for an array of BOUNDS elements, each of which is
1132 defined by ELEMENT. */
1135 make_array_declarator (cp_declarator *element, tree bounds)
1137 cp_declarator *declarator;
1139 declarator = make_declarator (cdk_array);
1140 declarator->declarator = element;
1141 declarator->u.array.bounds = bounds;
1144 declarator->id_loc = element->id_loc;
1145 declarator->parameter_pack_p = element->parameter_pack_p;
1146 element->parameter_pack_p = false;
1149 declarator->parameter_pack_p = false;
1154 /* Determine whether the declarator we've seen so far can be a
1155 parameter pack, when followed by an ellipsis. */
1157 declarator_can_be_parameter_pack (cp_declarator *declarator)
1159 /* Search for a declarator name, or any other declarator that goes
1160 after the point where the ellipsis could appear in a parameter
1161 pack. If we find any of these, then this declarator can not be
1162 made into a parameter pack. */
1164 while (declarator && !found)
1166 switch ((int)declarator->kind)
1177 declarator = declarator->declarator;
1185 cp_parameter_declarator *no_parameters;
1187 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1188 DECLARATOR and DEFAULT_ARGUMENT. */
1190 cp_parameter_declarator *
1191 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1192 cp_declarator *declarator,
1193 tree default_argument)
1195 cp_parameter_declarator *parameter;
1197 parameter = ((cp_parameter_declarator *)
1198 alloc_declarator (sizeof (cp_parameter_declarator)));
1199 parameter->next = NULL;
1200 if (decl_specifiers)
1201 parameter->decl_specifiers = *decl_specifiers;
1203 clear_decl_specs (¶meter->decl_specifiers);
1204 parameter->declarator = declarator;
1205 parameter->default_argument = default_argument;
1206 parameter->ellipsis_p = false;
1211 /* Returns true iff DECLARATOR is a declaration for a function. */
1214 function_declarator_p (const cp_declarator *declarator)
1218 if (declarator->kind == cdk_function
1219 && declarator->declarator->kind == cdk_id)
1221 if (declarator->kind == cdk_id
1222 || declarator->kind == cdk_error)
1224 declarator = declarator->declarator;
1234 A cp_parser parses the token stream as specified by the C++
1235 grammar. Its job is purely parsing, not semantic analysis. For
1236 example, the parser breaks the token stream into declarators,
1237 expressions, statements, and other similar syntactic constructs.
1238 It does not check that the types of the expressions on either side
1239 of an assignment-statement are compatible, or that a function is
1240 not declared with a parameter of type `void'.
1242 The parser invokes routines elsewhere in the compiler to perform
1243 semantic analysis and to build up the abstract syntax tree for the
1246 The parser (and the template instantiation code, which is, in a
1247 way, a close relative of parsing) are the only parts of the
1248 compiler that should be calling push_scope and pop_scope, or
1249 related functions. The parser (and template instantiation code)
1250 keeps track of what scope is presently active; everything else
1251 should simply honor that. (The code that generates static
1252 initializers may also need to set the scope, in order to check
1253 access control correctly when emitting the initializers.)
1258 The parser is of the standard recursive-descent variety. Upcoming
1259 tokens in the token stream are examined in order to determine which
1260 production to use when parsing a non-terminal. Some C++ constructs
1261 require arbitrary look ahead to disambiguate. For example, it is
1262 impossible, in the general case, to tell whether a statement is an
1263 expression or declaration without scanning the entire statement.
1264 Therefore, the parser is capable of "parsing tentatively." When the
1265 parser is not sure what construct comes next, it enters this mode.
1266 Then, while we attempt to parse the construct, the parser queues up
1267 error messages, rather than issuing them immediately, and saves the
1268 tokens it consumes. If the construct is parsed successfully, the
1269 parser "commits", i.e., it issues any queued error messages and
1270 the tokens that were being preserved are permanently discarded.
1271 If, however, the construct is not parsed successfully, the parser
1272 rolls back its state completely so that it can resume parsing using
1273 a different alternative.
1278 The performance of the parser could probably be improved substantially.
1279 We could often eliminate the need to parse tentatively by looking ahead
1280 a little bit. In some places, this approach might not entirely eliminate
1281 the need to parse tentatively, but it might still speed up the average
1284 /* Flags that are passed to some parsing functions. These values can
1285 be bitwise-ored together. */
1290 CP_PARSER_FLAGS_NONE = 0x0,
1291 /* The construct is optional. If it is not present, then no error
1292 should be issued. */
1293 CP_PARSER_FLAGS_OPTIONAL = 0x1,
1294 /* When parsing a type-specifier, treat user-defined type-names
1295 as non-type identifiers. */
1296 CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2,
1297 /* When parsing a type-specifier, do not try to parse a class-specifier
1298 or enum-specifier. */
1299 CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS = 0x4,
1300 /* When parsing a decl-specifier-seq, only allow type-specifier or
1302 CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR = 0x8
1305 /* This type is used for parameters and variables which hold
1306 combinations of the above flags. */
1307 typedef int cp_parser_flags;
1309 /* The different kinds of declarators we want to parse. */
1311 typedef enum cp_parser_declarator_kind
1313 /* We want an abstract declarator. */
1314 CP_PARSER_DECLARATOR_ABSTRACT,
1315 /* We want a named declarator. */
1316 CP_PARSER_DECLARATOR_NAMED,
1317 /* We don't mind, but the name must be an unqualified-id. */
1318 CP_PARSER_DECLARATOR_EITHER
1319 } cp_parser_declarator_kind;
1321 /* The precedence values used to parse binary expressions. The minimum value
1322 of PREC must be 1, because zero is reserved to quickly discriminate
1323 binary operators from other tokens. */
1328 PREC_LOGICAL_OR_EXPRESSION,
1329 PREC_LOGICAL_AND_EXPRESSION,
1330 PREC_INCLUSIVE_OR_EXPRESSION,
1331 PREC_EXCLUSIVE_OR_EXPRESSION,
1332 PREC_AND_EXPRESSION,
1333 PREC_EQUALITY_EXPRESSION,
1334 PREC_RELATIONAL_EXPRESSION,
1335 PREC_SHIFT_EXPRESSION,
1336 PREC_ADDITIVE_EXPRESSION,
1337 PREC_MULTIPLICATIVE_EXPRESSION,
1339 NUM_PREC_VALUES = PREC_PM_EXPRESSION
1342 /* A mapping from a token type to a corresponding tree node type, with a
1343 precedence value. */
1345 typedef struct cp_parser_binary_operations_map_node
1347 /* The token type. */
1348 enum cpp_ttype token_type;
1349 /* The corresponding tree code. */
1350 enum tree_code tree_type;
1351 /* The precedence of this operator. */
1352 enum cp_parser_prec prec;
1353 } cp_parser_binary_operations_map_node;
1355 typedef struct cp_parser_expression_stack_entry
1357 /* Left hand side of the binary operation we are currently
1360 /* Original tree code for left hand side, if it was a binary
1361 expression itself (used for -Wparentheses). */
1362 enum tree_code lhs_type;
1363 /* Tree code for the binary operation we are parsing. */
1364 enum tree_code tree_type;
1365 /* Precedence of the binary operation we are parsing. */
1366 enum cp_parser_prec prec;
1367 } cp_parser_expression_stack_entry;
1369 /* The stack for storing partial expressions. We only need NUM_PREC_VALUES
1370 entries because precedence levels on the stack are monotonically
1372 typedef struct cp_parser_expression_stack_entry
1373 cp_parser_expression_stack[NUM_PREC_VALUES];
1377 /* Constructors and destructors. */
1379 static cp_parser_context *cp_parser_context_new
1380 (cp_parser_context *);
1382 /* Class variables. */
1384 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1386 /* The operator-precedence table used by cp_parser_binary_expression.
1387 Transformed into an associative array (binops_by_token) by
1390 static const cp_parser_binary_operations_map_node binops[] = {
1391 { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1392 { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1394 { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1395 { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1396 { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1398 { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1399 { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1401 { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1402 { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1404 { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1405 { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1406 { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1407 { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1409 { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1410 { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1412 { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1414 { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1416 { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1418 { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1420 { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1423 /* The same as binops, but initialized by cp_parser_new so that
1424 binops_by_token[N].token_type == N. Used in cp_parser_binary_expression
1426 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1428 /* Constructors and destructors. */
1430 /* Construct a new context. The context below this one on the stack
1431 is given by NEXT. */
1433 static cp_parser_context *
1434 cp_parser_context_new (cp_parser_context* next)
1436 cp_parser_context *context;
1438 /* Allocate the storage. */
1439 if (cp_parser_context_free_list != NULL)
1441 /* Pull the first entry from the free list. */
1442 context = cp_parser_context_free_list;
1443 cp_parser_context_free_list = context->next;
1444 memset (context, 0, sizeof (*context));
1447 context = ggc_alloc_cleared_cp_parser_context ();
1449 /* No errors have occurred yet in this context. */
1450 context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1451 /* If this is not the bottommost context, copy information that we
1452 need from the previous context. */
1455 /* If, in the NEXT context, we are parsing an `x->' or `x.'
1456 expression, then we are parsing one in this context, too. */
1457 context->object_type = next->object_type;
1458 /* Thread the stack. */
1459 context->next = next;
1465 /* Managing the unparsed function queues. */
1467 #define unparsed_funs_with_default_args \
1468 VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_default_args
1469 #define unparsed_funs_with_definitions \
1470 VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_definitions
1473 push_unparsed_function_queues (cp_parser *parser)
1475 VEC_safe_push (cp_unparsed_functions_entry, gc,
1476 parser->unparsed_queues, NULL);
1477 unparsed_funs_with_default_args = NULL;
1478 unparsed_funs_with_definitions = make_tree_vector ();
1482 pop_unparsed_function_queues (cp_parser *parser)
1484 release_tree_vector (unparsed_funs_with_definitions);
1485 VEC_pop (cp_unparsed_functions_entry, parser->unparsed_queues);
1490 /* Constructors and destructors. */
1492 static cp_parser *cp_parser_new
1495 /* Routines to parse various constructs.
1497 Those that return `tree' will return the error_mark_node (rather
1498 than NULL_TREE) if a parse error occurs, unless otherwise noted.
1499 Sometimes, they will return an ordinary node if error-recovery was
1500 attempted, even though a parse error occurred. So, to check
1501 whether or not a parse error occurred, you should always use
1502 cp_parser_error_occurred. If the construct is optional (indicated
1503 either by an `_opt' in the name of the function that does the
1504 parsing or via a FLAGS parameter), then NULL_TREE is returned if
1505 the construct is not present. */
1507 /* Lexical conventions [gram.lex] */
1509 static tree cp_parser_identifier
1511 static tree cp_parser_string_literal
1512 (cp_parser *, bool, bool);
1514 /* Basic concepts [gram.basic] */
1516 static bool cp_parser_translation_unit
1519 /* Expressions [gram.expr] */
1521 static tree cp_parser_primary_expression
1522 (cp_parser *, bool, bool, bool, cp_id_kind *);
1523 static tree cp_parser_id_expression
1524 (cp_parser *, bool, bool, bool *, bool, bool);
1525 static tree cp_parser_unqualified_id
1526 (cp_parser *, bool, bool, bool, bool);
1527 static tree cp_parser_nested_name_specifier_opt
1528 (cp_parser *, bool, bool, bool, bool);
1529 static tree cp_parser_nested_name_specifier
1530 (cp_parser *, bool, bool, bool, bool);
1531 static tree cp_parser_qualifying_entity
1532 (cp_parser *, bool, bool, bool, bool, bool);
1533 static tree cp_parser_postfix_expression
1534 (cp_parser *, bool, bool, bool, cp_id_kind *);
1535 static tree cp_parser_postfix_open_square_expression
1536 (cp_parser *, tree, bool);
1537 static tree cp_parser_postfix_dot_deref_expression
1538 (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *, location_t);
1539 static VEC(tree,gc) *cp_parser_parenthesized_expression_list
1540 (cp_parser *, int, bool, bool, bool *);
1541 /* Values for the second parameter of cp_parser_parenthesized_expression_list. */
1542 enum { non_attr = 0, normal_attr = 1, id_attr = 2 };
1543 static void cp_parser_pseudo_destructor_name
1544 (cp_parser *, tree *, tree *);
1545 static tree cp_parser_unary_expression
1546 (cp_parser *, bool, bool, cp_id_kind *);
1547 static enum tree_code cp_parser_unary_operator
1549 static tree cp_parser_new_expression
1551 static VEC(tree,gc) *cp_parser_new_placement
1553 static tree cp_parser_new_type_id
1554 (cp_parser *, tree *);
1555 static cp_declarator *cp_parser_new_declarator_opt
1557 static cp_declarator *cp_parser_direct_new_declarator
1559 static VEC(tree,gc) *cp_parser_new_initializer
1561 static tree cp_parser_delete_expression
1563 static tree cp_parser_cast_expression
1564 (cp_parser *, bool, bool, cp_id_kind *);
1565 static tree cp_parser_binary_expression
1566 (cp_parser *, bool, bool, enum cp_parser_prec, cp_id_kind *);
1567 static tree cp_parser_question_colon_clause
1568 (cp_parser *, tree);
1569 static tree cp_parser_assignment_expression
1570 (cp_parser *, bool, cp_id_kind *);
1571 static enum tree_code cp_parser_assignment_operator_opt
1573 static tree cp_parser_expression
1574 (cp_parser *, bool, cp_id_kind *);
1575 static tree cp_parser_constant_expression
1576 (cp_parser *, bool, bool *);
1577 static tree cp_parser_builtin_offsetof
1579 static tree cp_parser_lambda_expression
1581 static void cp_parser_lambda_introducer
1582 (cp_parser *, tree);
1583 static void cp_parser_lambda_declarator_opt
1584 (cp_parser *, tree);
1585 static void cp_parser_lambda_body
1586 (cp_parser *, tree);
1588 /* Statements [gram.stmt.stmt] */
1590 static void cp_parser_statement
1591 (cp_parser *, tree, bool, bool *);
1592 static void cp_parser_label_for_labeled_statement
1594 static tree cp_parser_expression_statement
1595 (cp_parser *, tree);
1596 static tree cp_parser_compound_statement
1597 (cp_parser *, tree, bool, bool);
1598 static void cp_parser_statement_seq_opt
1599 (cp_parser *, tree);
1600 static tree cp_parser_selection_statement
1601 (cp_parser *, bool *);
1602 static tree cp_parser_condition
1604 static tree cp_parser_iteration_statement
1606 static bool cp_parser_for_init_statement
1607 (cp_parser *, tree *decl);
1608 static tree cp_parser_for
1610 static tree cp_parser_c_for
1611 (cp_parser *, tree, tree);
1612 static tree cp_parser_range_for
1613 (cp_parser *, tree, tree, tree);
1614 static tree cp_parser_perform_range_for_lookup
1615 (tree, tree *, tree *);
1616 static tree cp_parser_range_for_member_function
1618 static tree cp_parser_jump_statement
1620 static void cp_parser_declaration_statement
1623 static tree cp_parser_implicitly_scoped_statement
1624 (cp_parser *, bool *);
1625 static void cp_parser_already_scoped_statement
1628 /* Declarations [gram.dcl.dcl] */
1630 static void cp_parser_declaration_seq_opt
1632 static void cp_parser_declaration
1634 static void cp_parser_block_declaration
1635 (cp_parser *, bool);
1636 static void cp_parser_simple_declaration
1637 (cp_parser *, bool, tree *);
1638 static void cp_parser_decl_specifier_seq
1639 (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1640 static tree cp_parser_storage_class_specifier_opt
1642 static tree cp_parser_function_specifier_opt
1643 (cp_parser *, cp_decl_specifier_seq *);
1644 static tree cp_parser_type_specifier
1645 (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1647 static tree cp_parser_simple_type_specifier
1648 (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1649 static tree cp_parser_type_name
1651 static tree cp_parser_nonclass_name
1652 (cp_parser* parser);
1653 static tree cp_parser_elaborated_type_specifier
1654 (cp_parser *, bool, bool);
1655 static tree cp_parser_enum_specifier
1657 static void cp_parser_enumerator_list
1658 (cp_parser *, tree);
1659 static void cp_parser_enumerator_definition
1660 (cp_parser *, tree);
1661 static tree cp_parser_namespace_name
1663 static void cp_parser_namespace_definition
1665 static void cp_parser_namespace_body
1667 static tree cp_parser_qualified_namespace_specifier
1669 static void cp_parser_namespace_alias_definition
1671 static bool cp_parser_using_declaration
1672 (cp_parser *, bool);
1673 static void cp_parser_using_directive
1675 static void cp_parser_asm_definition
1677 static void cp_parser_linkage_specification
1679 static void cp_parser_static_assert
1680 (cp_parser *, bool);
1681 static tree cp_parser_decltype
1684 /* Declarators [gram.dcl.decl] */
1686 static tree cp_parser_init_declarator
1687 (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *, tree *);
1688 static cp_declarator *cp_parser_declarator
1689 (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1690 static cp_declarator *cp_parser_direct_declarator
1691 (cp_parser *, cp_parser_declarator_kind, int *, bool);
1692 static enum tree_code cp_parser_ptr_operator
1693 (cp_parser *, tree *, cp_cv_quals *);
1694 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1696 static cp_virt_specifiers cp_parser_virt_specifier_seq_opt
1698 static tree cp_parser_late_return_type_opt
1700 static tree cp_parser_declarator_id
1701 (cp_parser *, bool);
1702 static tree cp_parser_type_id
1704 static tree cp_parser_template_type_arg
1706 static tree cp_parser_trailing_type_id (cp_parser *);
1707 static tree cp_parser_type_id_1
1708 (cp_parser *, bool, bool);
1709 static void cp_parser_type_specifier_seq
1710 (cp_parser *, bool, bool, cp_decl_specifier_seq *);
1711 static tree cp_parser_parameter_declaration_clause
1713 static tree cp_parser_parameter_declaration_list
1714 (cp_parser *, bool *);
1715 static cp_parameter_declarator *cp_parser_parameter_declaration
1716 (cp_parser *, bool, bool *);
1717 static tree cp_parser_default_argument
1718 (cp_parser *, bool);
1719 static void cp_parser_function_body
1721 static tree cp_parser_initializer
1722 (cp_parser *, bool *, bool *);
1723 static tree cp_parser_initializer_clause
1724 (cp_parser *, bool *);
1725 static tree cp_parser_braced_list
1726 (cp_parser*, bool*);
1727 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1728 (cp_parser *, bool *);
1730 static bool cp_parser_ctor_initializer_opt_and_function_body
1733 /* Classes [gram.class] */
1735 static tree cp_parser_class_name
1736 (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1737 static tree cp_parser_class_specifier
1739 static tree cp_parser_class_head
1740 (cp_parser *, bool *, tree *, tree *);
1741 static enum tag_types cp_parser_class_key
1743 static void cp_parser_member_specification_opt
1745 static void cp_parser_member_declaration
1747 static tree cp_parser_pure_specifier
1749 static tree cp_parser_constant_initializer
1752 /* Derived classes [gram.class.derived] */
1754 static tree cp_parser_base_clause
1756 static tree cp_parser_base_specifier
1759 /* Special member functions [gram.special] */
1761 static tree cp_parser_conversion_function_id
1763 static tree cp_parser_conversion_type_id
1765 static cp_declarator *cp_parser_conversion_declarator_opt
1767 static bool cp_parser_ctor_initializer_opt
1769 static void cp_parser_mem_initializer_list
1771 static tree cp_parser_mem_initializer
1773 static tree cp_parser_mem_initializer_id
1776 /* Overloading [gram.over] */
1778 static tree cp_parser_operator_function_id
1780 static tree cp_parser_operator
1783 /* Templates [gram.temp] */
1785 static void cp_parser_template_declaration
1786 (cp_parser *, bool);
1787 static tree cp_parser_template_parameter_list
1789 static tree cp_parser_template_parameter
1790 (cp_parser *, bool *, bool *);
1791 static tree cp_parser_type_parameter
1792 (cp_parser *, bool *);
1793 static tree cp_parser_template_id
1794 (cp_parser *, bool, bool, bool);
1795 static tree cp_parser_template_name
1796 (cp_parser *, bool, bool, bool, bool *);
1797 static tree cp_parser_template_argument_list
1799 static tree cp_parser_template_argument
1801 static void cp_parser_explicit_instantiation
1803 static void cp_parser_explicit_specialization
1806 /* Exception handling [gram.exception] */
1808 static tree cp_parser_try_block
1810 static bool cp_parser_function_try_block
1812 static void cp_parser_handler_seq
1814 static void cp_parser_handler
1816 static tree cp_parser_exception_declaration
1818 static tree cp_parser_throw_expression
1820 static tree cp_parser_exception_specification_opt
1822 static tree cp_parser_type_id_list
1825 /* GNU Extensions */
1827 static tree cp_parser_asm_specification_opt
1829 static tree cp_parser_asm_operand_list
1831 static tree cp_parser_asm_clobber_list
1833 static tree cp_parser_asm_label_list
1835 static tree cp_parser_attributes_opt
1837 static tree cp_parser_attribute_list
1839 static bool cp_parser_extension_opt
1840 (cp_parser *, int *);
1841 static void cp_parser_label_declaration
1844 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1845 static bool cp_parser_pragma
1846 (cp_parser *, enum pragma_context);
1848 /* Objective-C++ Productions */
1850 static tree cp_parser_objc_message_receiver
1852 static tree cp_parser_objc_message_args
1854 static tree cp_parser_objc_message_expression
1856 static tree cp_parser_objc_encode_expression
1858 static tree cp_parser_objc_defs_expression
1860 static tree cp_parser_objc_protocol_expression
1862 static tree cp_parser_objc_selector_expression
1864 static tree cp_parser_objc_expression
1866 static bool cp_parser_objc_selector_p
1868 static tree cp_parser_objc_selector
1870 static tree cp_parser_objc_protocol_refs_opt
1872 static void cp_parser_objc_declaration
1873 (cp_parser *, tree);
1874 static tree cp_parser_objc_statement
1876 static bool cp_parser_objc_valid_prefix_attributes
1877 (cp_parser *, tree *);
1878 static void cp_parser_objc_at_property_declaration
1880 static void cp_parser_objc_at_synthesize_declaration
1882 static void cp_parser_objc_at_dynamic_declaration
1884 static tree cp_parser_objc_struct_declaration
1887 /* Utility Routines */
1889 static tree cp_parser_lookup_name
1890 (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *, location_t);
1891 static tree cp_parser_lookup_name_simple
1892 (cp_parser *, tree, location_t);
1893 static tree cp_parser_maybe_treat_template_as_class
1895 static bool cp_parser_check_declarator_template_parameters
1896 (cp_parser *, cp_declarator *, location_t);
1897 static bool cp_parser_check_template_parameters
1898 (cp_parser *, unsigned, location_t, cp_declarator *);
1899 static tree cp_parser_simple_cast_expression
1901 static tree cp_parser_global_scope_opt
1902 (cp_parser *, bool);
1903 static bool cp_parser_constructor_declarator_p
1904 (cp_parser *, bool);
1905 static tree cp_parser_function_definition_from_specifiers_and_declarator
1906 (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1907 static tree cp_parser_function_definition_after_declarator
1908 (cp_parser *, bool);
1909 static void cp_parser_template_declaration_after_export
1910 (cp_parser *, bool);
1911 static void cp_parser_perform_template_parameter_access_checks
1912 (VEC (deferred_access_check,gc)*);
1913 static tree cp_parser_single_declaration
1914 (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool, bool *);
1915 static tree cp_parser_functional_cast
1916 (cp_parser *, tree);
1917 static tree cp_parser_save_member_function_body
1918 (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1919 static tree cp_parser_enclosed_template_argument_list
1921 static void cp_parser_save_default_args
1922 (cp_parser *, tree);
1923 static void cp_parser_late_parsing_for_member
1924 (cp_parser *, tree);
1925 static void cp_parser_late_parsing_default_args
1926 (cp_parser *, tree);
1927 static tree cp_parser_sizeof_operand
1928 (cp_parser *, enum rid);
1929 static tree cp_parser_trait_expr
1930 (cp_parser *, enum rid);
1931 static bool cp_parser_declares_only_class_p
1933 static void cp_parser_set_storage_class
1934 (cp_parser *, cp_decl_specifier_seq *, enum rid, location_t);
1935 static void cp_parser_set_decl_spec_type
1936 (cp_decl_specifier_seq *, tree, location_t, bool);
1937 static bool cp_parser_friend_p
1938 (const cp_decl_specifier_seq *);
1939 static void cp_parser_required_error
1940 (cp_parser *, required_token, bool);
1941 static cp_token *cp_parser_require
1942 (cp_parser *, enum cpp_ttype, required_token);
1943 static cp_token *cp_parser_require_keyword
1944 (cp_parser *, enum rid, required_token);
1945 static bool cp_parser_token_starts_function_definition_p
1947 static bool cp_parser_next_token_starts_class_definition_p
1949 static bool cp_parser_next_token_ends_template_argument_p
1951 static bool cp_parser_nth_token_starts_template_argument_list_p
1952 (cp_parser *, size_t);
1953 static enum tag_types cp_parser_token_is_class_key
1955 static void cp_parser_check_class_key
1956 (enum tag_types, tree type);
1957 static void cp_parser_check_access_in_redeclaration
1958 (tree type, location_t location);
1959 static bool cp_parser_optional_template_keyword
1961 static void cp_parser_pre_parsed_nested_name_specifier
1963 static bool cp_parser_cache_group
1964 (cp_parser *, enum cpp_ttype, unsigned);
1965 static void cp_parser_parse_tentatively
1967 static void cp_parser_commit_to_tentative_parse
1969 static void cp_parser_abort_tentative_parse
1971 static bool cp_parser_parse_definitely
1973 static inline bool cp_parser_parsing_tentatively
1975 static bool cp_parser_uncommitted_to_tentative_parse_p
1977 static void cp_parser_error
1978 (cp_parser *, const char *);
1979 static void cp_parser_name_lookup_error
1980 (cp_parser *, tree, tree, name_lookup_error, location_t);
1981 static bool cp_parser_simulate_error
1983 static bool cp_parser_check_type_definition
1985 static void cp_parser_check_for_definition_in_return_type
1986 (cp_declarator *, tree, location_t type_location);
1987 static void cp_parser_check_for_invalid_template_id
1988 (cp_parser *, tree, location_t location);
1989 static bool cp_parser_non_integral_constant_expression
1990 (cp_parser *, non_integral_constant);
1991 static void cp_parser_diagnose_invalid_type_name
1992 (cp_parser *, tree, tree, location_t);
1993 static bool cp_parser_parse_and_diagnose_invalid_type_name
1995 static int cp_parser_skip_to_closing_parenthesis
1996 (cp_parser *, bool, bool, bool);
1997 static void cp_parser_skip_to_end_of_statement
1999 static void cp_parser_consume_semicolon_at_end_of_statement
2001 static void cp_parser_skip_to_end_of_block_or_statement
2003 static bool cp_parser_skip_to_closing_brace
2005 static void cp_parser_skip_to_end_of_template_parameter_list
2007 static void cp_parser_skip_to_pragma_eol
2008 (cp_parser*, cp_token *);
2009 static bool cp_parser_error_occurred
2011 static bool cp_parser_allow_gnu_extensions_p
2013 static bool cp_parser_is_string_literal
2015 static bool cp_parser_is_keyword
2016 (cp_token *, enum rid);
2017 static tree cp_parser_make_typename_type
2018 (cp_parser *, tree, tree, location_t location);
2019 static cp_declarator * cp_parser_make_indirect_declarator
2020 (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2022 /* Returns nonzero if we are parsing tentatively. */
2025 cp_parser_parsing_tentatively (cp_parser* parser)
2027 return parser->context->next != NULL;
2030 /* Returns nonzero if TOKEN is a string literal. */
2033 cp_parser_is_string_literal (cp_token* token)
2035 return (token->type == CPP_STRING ||
2036 token->type == CPP_STRING16 ||
2037 token->type == CPP_STRING32 ||
2038 token->type == CPP_WSTRING ||
2039 token->type == CPP_UTF8STRING);
2042 /* Returns nonzero if TOKEN is the indicated KEYWORD. */
2045 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2047 return token->keyword == keyword;
2050 /* If not parsing tentatively, issue a diagnostic of the form
2051 FILE:LINE: MESSAGE before TOKEN
2052 where TOKEN is the next token in the input stream. MESSAGE
2053 (specified by the caller) is usually of the form "expected
2057 cp_parser_error (cp_parser* parser, const char* gmsgid)
2059 if (!cp_parser_simulate_error (parser))
2061 cp_token *token = cp_lexer_peek_token (parser->lexer);
2062 /* This diagnostic makes more sense if it is tagged to the line
2063 of the token we just peeked at. */
2064 cp_lexer_set_source_position_from_token (token);
2066 if (token->type == CPP_PRAGMA)
2068 error_at (token->location,
2069 "%<#pragma%> is not allowed here");
2070 cp_parser_skip_to_pragma_eol (parser, token);
2074 c_parse_error (gmsgid,
2075 /* Because c_parser_error does not understand
2076 CPP_KEYWORD, keywords are treated like
2078 (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2079 token->u.value, token->flags);
2083 /* Issue an error about name-lookup failing. NAME is the
2084 IDENTIFIER_NODE DECL is the result of
2085 the lookup (as returned from cp_parser_lookup_name). DESIRED is
2086 the thing that we hoped to find. */
2089 cp_parser_name_lookup_error (cp_parser* parser,
2092 name_lookup_error desired,
2093 location_t location)
2095 /* If name lookup completely failed, tell the user that NAME was not
2097 if (decl == error_mark_node)
2099 if (parser->scope && parser->scope != global_namespace)
2100 error_at (location, "%<%E::%E%> has not been declared",
2101 parser->scope, name);
2102 else if (parser->scope == global_namespace)
2103 error_at (location, "%<::%E%> has not been declared", name);
2104 else if (parser->object_scope
2105 && !CLASS_TYPE_P (parser->object_scope))
2106 error_at (location, "request for member %qE in non-class type %qT",
2107 name, parser->object_scope);
2108 else if (parser->object_scope)
2109 error_at (location, "%<%T::%E%> has not been declared",
2110 parser->object_scope, name);
2112 error_at (location, "%qE has not been declared", name);
2114 else if (parser->scope && parser->scope != global_namespace)
2119 error_at (location, "%<%E::%E%> is not a type",
2120 parser->scope, name);
2123 error_at (location, "%<%E::%E%> is not a class or namespace",
2124 parser->scope, name);
2128 "%<%E::%E%> is not a class, namespace, or enumeration",
2129 parser->scope, name);
2136 else if (parser->scope == global_namespace)
2141 error_at (location, "%<::%E%> is not a type", name);
2144 error_at (location, "%<::%E%> is not a class or namespace", name);
2148 "%<::%E%> is not a class, namespace, or enumeration",
2160 error_at (location, "%qE is not a type", name);
2163 error_at (location, "%qE is not a class or namespace", name);
2167 "%qE is not a class, namespace, or enumeration", name);
2175 /* If we are parsing tentatively, remember that an error has occurred
2176 during this tentative parse. Returns true if the error was
2177 simulated; false if a message should be issued by the caller. */
2180 cp_parser_simulate_error (cp_parser* parser)
2182 if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2184 parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2190 /* Check for repeated decl-specifiers. */
2193 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs,
2194 location_t location)
2198 for (ds = ds_first; ds != ds_last; ++ds)
2200 unsigned count = decl_specs->specs[ds];
2203 /* The "long" specifier is a special case because of "long long". */
2207 error_at (location, "%<long long long%> is too long for GCC");
2209 pedwarn_cxx98 (location, OPT_Wlong_long,
2210 "ISO C++ 1998 does not support %<long long%>");
2214 static const char *const decl_spec_names[] = {
2231 error_at (location, "duplicate %qs", decl_spec_names[ds]);
2236 /* This function is called when a type is defined. If type
2237 definitions are forbidden at this point, an error message is
2241 cp_parser_check_type_definition (cp_parser* parser)
2243 /* If types are forbidden here, issue a message. */
2244 if (parser->type_definition_forbidden_message)
2246 /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2247 in the message need to be interpreted. */
2248 error (parser->type_definition_forbidden_message);
2254 /* This function is called when the DECLARATOR is processed. The TYPE
2255 was a type defined in the decl-specifiers. If it is invalid to
2256 define a type in the decl-specifiers for DECLARATOR, an error is
2257 issued. TYPE_LOCATION is the location of TYPE and is used
2258 for error reporting. */
2261 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2262 tree type, location_t type_location)
2264 /* [dcl.fct] forbids type definitions in return types.
2265 Unfortunately, it's not easy to know whether or not we are
2266 processing a return type until after the fact. */
2268 && (declarator->kind == cdk_pointer
2269 || declarator->kind == cdk_reference
2270 || declarator->kind == cdk_ptrmem))
2271 declarator = declarator->declarator;
2273 && declarator->kind == cdk_function)
2275 error_at (type_location,
2276 "new types may not be defined in a return type");
2277 inform (type_location,
2278 "(perhaps a semicolon is missing after the definition of %qT)",
2283 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2284 "<" in any valid C++ program. If the next token is indeed "<",
2285 issue a message warning the user about what appears to be an
2286 invalid attempt to form a template-id. LOCATION is the location
2287 of the type-specifier (TYPE) */
2290 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2291 tree type, location_t location)
2293 cp_token_position start = 0;
2295 if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2298 error_at (location, "%qT is not a template", type);
2299 else if (TREE_CODE (type) == IDENTIFIER_NODE)
2300 error_at (location, "%qE is not a template", type);
2302 error_at (location, "invalid template-id");
2303 /* Remember the location of the invalid "<". */
2304 if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2305 start = cp_lexer_token_position (parser->lexer, true);
2306 /* Consume the "<". */
2307 cp_lexer_consume_token (parser->lexer);
2308 /* Parse the template arguments. */
2309 cp_parser_enclosed_template_argument_list (parser);
2310 /* Permanently remove the invalid template arguments so that
2311 this error message is not issued again. */
2313 cp_lexer_purge_tokens_after (parser->lexer, start);
2317 /* If parsing an integral constant-expression, issue an error message
2318 about the fact that THING appeared and return true. Otherwise,
2319 return false. In either case, set
2320 PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P. */
2323 cp_parser_non_integral_constant_expression (cp_parser *parser,
2324 non_integral_constant thing)
2326 parser->non_integral_constant_expression_p = true;
2327 if (parser->integral_constant_expression_p)
2329 if (!parser->allow_non_integral_constant_expression_p)
2331 const char *msg = NULL;
2335 error ("floating-point literal "
2336 "cannot appear in a constant-expression");
2339 error ("a cast to a type other than an integral or "
2340 "enumeration type cannot appear in a "
2341 "constant-expression");
2344 error ("%<typeid%> operator "
2345 "cannot appear in a constant-expression");
2348 error ("non-constant compound literals "
2349 "cannot appear in a constant-expression");
2352 error ("a function call "
2353 "cannot appear in a constant-expression");
2356 error ("an increment "
2357 "cannot appear in a constant-expression");
2360 error ("an decrement "
2361 "cannot appear in a constant-expression");
2364 error ("an array reference "
2365 "cannot appear in a constant-expression");
2367 case NIC_ADDR_LABEL:
2368 error ("the address of a label "
2369 "cannot appear in a constant-expression");
2371 case NIC_OVERLOADED:
2372 error ("calls to overloaded operators "
2373 "cannot appear in a constant-expression");
2375 case NIC_ASSIGNMENT:
2376 error ("an assignment cannot appear in a constant-expression");
2379 error ("a comma operator "
2380 "cannot appear in a constant-expression");
2382 case NIC_CONSTRUCTOR:
2383 error ("a call to a constructor "
2384 "cannot appear in a constant-expression");
2390 msg = "__FUNCTION__";
2392 case NIC_PRETTY_FUNC:
2393 msg = "__PRETTY_FUNCTION__";
2413 case NIC_PREINCREMENT:
2416 case NIC_PREDECREMENT:
2429 error ("%qs cannot appear in a constant-expression", msg);
2436 /* Emit a diagnostic for an invalid type name. SCOPE is the
2437 qualifying scope (or NULL, if none) for ID. This function commits
2438 to the current active tentative parse, if any. (Otherwise, the
2439 problematic construct might be encountered again later, resulting
2440 in duplicate error messages.) LOCATION is the location of ID. */
2443 cp_parser_diagnose_invalid_type_name (cp_parser *parser,
2444 tree scope, tree id,
2445 location_t location)
2447 tree decl, old_scope;
2448 cp_parser_commit_to_tentative_parse (parser);
2449 /* Try to lookup the identifier. */
2450 old_scope = parser->scope;
2451 parser->scope = scope;
2452 decl = cp_parser_lookup_name_simple (parser, id, location);
2453 parser->scope = old_scope;
2454 /* If the lookup found a template-name, it means that the user forgot
2455 to specify an argument list. Emit a useful error message. */
2456 if (TREE_CODE (decl) == TEMPLATE_DECL)
2458 "invalid use of template-name %qE without an argument list",
2460 else if (TREE_CODE (id) == BIT_NOT_EXPR)
2461 error_at (location, "invalid use of destructor %qD as a type", id);
2462 else if (TREE_CODE (decl) == TYPE_DECL)
2463 /* Something like 'unsigned A a;' */
2464 error_at (location, "invalid combination of multiple type-specifiers");
2465 else if (!parser->scope)
2467 /* Issue an error message. */
2468 error_at (location, "%qE does not name a type", id);
2469 /* If we're in a template class, it's possible that the user was
2470 referring to a type from a base class. For example:
2472 template <typename T> struct A { typedef T X; };
2473 template <typename T> struct B : public A<T> { X x; };
2475 The user should have said "typename A<T>::X". */
2476 if (cxx_dialect < cxx0x && id == ridpointers[(int)RID_CONSTEXPR])
2477 inform (location, "C++0x %<constexpr%> only available with "
2478 "-std=c++0x or -std=gnu++0x");
2479 else if (processing_template_decl && current_class_type
2480 && TYPE_BINFO (current_class_type))
2484 for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2488 tree base_type = BINFO_TYPE (b);
2489 if (CLASS_TYPE_P (base_type)
2490 && dependent_type_p (base_type))
2493 /* Go from a particular instantiation of the
2494 template (which will have an empty TYPE_FIELDs),
2495 to the main version. */
2496 base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2497 for (field = TYPE_FIELDS (base_type);
2499 field = DECL_CHAIN (field))
2500 if (TREE_CODE (field) == TYPE_DECL
2501 && DECL_NAME (field) == id)
2504 "(perhaps %<typename %T::%E%> was intended)",
2505 BINFO_TYPE (b), id);
2514 /* Here we diagnose qualified-ids where the scope is actually correct,
2515 but the identifier does not resolve to a valid type name. */
2516 else if (parser->scope != error_mark_node)
2518 if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2519 error_at (location, "%qE in namespace %qE does not name a type",
2521 else if (CLASS_TYPE_P (parser->scope)
2522 && constructor_name_p (id, parser->scope))
2525 error_at (location, "%<%T::%E%> names the constructor, not"
2526 " the type", parser->scope, id);
2527 if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2528 error_at (location, "and %qT has no template constructors",
2531 else if (TYPE_P (parser->scope)
2532 && dependent_scope_p (parser->scope))
2533 error_at (location, "need %<typename%> before %<%T::%E%> because "
2534 "%qT is a dependent scope",
2535 parser->scope, id, parser->scope);
2536 else if (TYPE_P (parser->scope))
2537 error_at (location, "%qE in class %qT does not name a type",
2544 /* Check for a common situation where a type-name should be present,
2545 but is not, and issue a sensible error message. Returns true if an
2546 invalid type-name was detected.
2548 The situation handled by this function are variable declarations of the
2549 form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2550 Usually, `ID' should name a type, but if we got here it means that it
2551 does not. We try to emit the best possible error message depending on
2552 how exactly the id-expression looks like. */
2555 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2558 cp_token *token = cp_lexer_peek_token (parser->lexer);
2560 /* Avoid duplicate error about ambiguous lookup. */
2561 if (token->type == CPP_NESTED_NAME_SPECIFIER)
2563 cp_token *next = cp_lexer_peek_nth_token (parser->lexer, 2);
2564 if (next->type == CPP_NAME && next->ambiguous_p)
2568 cp_parser_parse_tentatively (parser);
2569 id = cp_parser_id_expression (parser,
2570 /*template_keyword_p=*/false,
2571 /*check_dependency_p=*/true,
2572 /*template_p=*/NULL,
2573 /*declarator_p=*/true,
2574 /*optional_p=*/false);
2575 /* If the next token is a (, this is a function with no explicit return
2576 type, i.e. constructor, destructor or conversion op. */
2577 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
2578 || TREE_CODE (id) == TYPE_DECL)
2580 cp_parser_abort_tentative_parse (parser);
2583 if (!cp_parser_parse_definitely (parser))
2586 /* Emit a diagnostic for the invalid type. */
2587 cp_parser_diagnose_invalid_type_name (parser, parser->scope,
2588 id, token->location);
2590 /* If we aren't in the middle of a declarator (i.e. in a
2591 parameter-declaration-clause), skip to the end of the declaration;
2592 there's no point in trying to process it. */
2593 if (!parser->in_declarator_p)
2594 cp_parser_skip_to_end_of_block_or_statement (parser);
2598 /* Consume tokens up to, and including, the next non-nested closing `)'.
2599 Returns 1 iff we found a closing `)'. RECOVERING is true, if we
2600 are doing error recovery. Returns -1 if OR_COMMA is true and we
2601 found an unnested comma. */
2604 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2609 unsigned paren_depth = 0;
2610 unsigned brace_depth = 0;
2611 unsigned square_depth = 0;
2613 if (recovering && !or_comma
2614 && cp_parser_uncommitted_to_tentative_parse_p (parser))
2619 cp_token * token = cp_lexer_peek_token (parser->lexer);
2621 switch (token->type)
2624 case CPP_PRAGMA_EOL:
2625 /* If we've run out of tokens, then there is no closing `)'. */
2628 /* This is good for lambda expression capture-lists. */
2629 case CPP_OPEN_SQUARE:
2632 case CPP_CLOSE_SQUARE:
2633 if (!square_depth--)
2638 /* This matches the processing in skip_to_end_of_statement. */
2643 case CPP_OPEN_BRACE:
2646 case CPP_CLOSE_BRACE:
2652 if (recovering && or_comma && !brace_depth && !paren_depth
2657 case CPP_OPEN_PAREN:
2662 case CPP_CLOSE_PAREN:
2663 if (!brace_depth && !paren_depth--)
2666 cp_lexer_consume_token (parser->lexer);
2675 /* Consume the token. */
2676 cp_lexer_consume_token (parser->lexer);
2680 /* Consume tokens until we reach the end of the current statement.
2681 Normally, that will be just before consuming a `;'. However, if a
2682 non-nested `}' comes first, then we stop before consuming that. */
2685 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2687 unsigned nesting_depth = 0;
2691 cp_token *token = cp_lexer_peek_token (parser->lexer);
2693 switch (token->type)
2696 case CPP_PRAGMA_EOL:
2697 /* If we've run out of tokens, stop. */
2701 /* If the next token is a `;', we have reached the end of the
2707 case CPP_CLOSE_BRACE:
2708 /* If this is a non-nested '}', stop before consuming it.
2709 That way, when confronted with something like:
2713 we stop before consuming the closing '}', even though we
2714 have not yet reached a `;'. */
2715 if (nesting_depth == 0)
2718 /* If it is the closing '}' for a block that we have
2719 scanned, stop -- but only after consuming the token.
2725 we will stop after the body of the erroneously declared
2726 function, but before consuming the following `typedef'
2728 if (--nesting_depth == 0)
2730 cp_lexer_consume_token (parser->lexer);
2734 case CPP_OPEN_BRACE:
2742 /* Consume the token. */
2743 cp_lexer_consume_token (parser->lexer);
2747 /* This function is called at the end of a statement or declaration.
2748 If the next token is a semicolon, it is consumed; otherwise, error
2749 recovery is attempted. */
2752 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2754 /* Look for the trailing `;'. */
2755 if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
2757 /* If there is additional (erroneous) input, skip to the end of
2759 cp_parser_skip_to_end_of_statement (parser);
2760 /* If the next token is now a `;', consume it. */
2761 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2762 cp_lexer_consume_token (parser->lexer);
2766 /* Skip tokens until we have consumed an entire block, or until we
2767 have consumed a non-nested `;'. */
2770 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2772 int nesting_depth = 0;
2774 while (nesting_depth >= 0)
2776 cp_token *token = cp_lexer_peek_token (parser->lexer);
2778 switch (token->type)
2781 case CPP_PRAGMA_EOL:
2782 /* If we've run out of tokens, stop. */
2786 /* Stop if this is an unnested ';'. */
2791 case CPP_CLOSE_BRACE:
2792 /* Stop if this is an unnested '}', or closes the outermost
2795 if (nesting_depth < 0)
2801 case CPP_OPEN_BRACE:
2810 /* Consume the token. */
2811 cp_lexer_consume_token (parser->lexer);
2815 /* Skip tokens until a non-nested closing curly brace is the next
2816 token, or there are no more tokens. Return true in the first case,
2820 cp_parser_skip_to_closing_brace (cp_parser *parser)
2822 unsigned nesting_depth = 0;
2826 cp_token *token = cp_lexer_peek_token (parser->lexer);
2828 switch (token->type)
2831 case CPP_PRAGMA_EOL:
2832 /* If we've run out of tokens, stop. */
2835 case CPP_CLOSE_BRACE:
2836 /* If the next token is a non-nested `}', then we have reached
2837 the end of the current block. */
2838 if (nesting_depth-- == 0)
2842 case CPP_OPEN_BRACE:
2843 /* If it the next token is a `{', then we are entering a new
2844 block. Consume the entire block. */
2852 /* Consume the token. */
2853 cp_lexer_consume_token (parser->lexer);
2857 /* Consume tokens until we reach the end of the pragma. The PRAGMA_TOK
2858 parameter is the PRAGMA token, allowing us to purge the entire pragma
2862 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2866 parser->lexer->in_pragma = false;
2869 token = cp_lexer_consume_token (parser->lexer);
2870 while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2872 /* Ensure that the pragma is not parsed again. */
2873 cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2876 /* Require pragma end of line, resyncing with it as necessary. The
2877 arguments are as for cp_parser_skip_to_pragma_eol. */
2880 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2882 parser->lexer->in_pragma = false;
2883 if (!cp_parser_require (parser, CPP_PRAGMA_EOL, RT_PRAGMA_EOL))
2884 cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2887 /* This is a simple wrapper around make_typename_type. When the id is
2888 an unresolved identifier node, we can provide a superior diagnostic
2889 using cp_parser_diagnose_invalid_type_name. */
2892 cp_parser_make_typename_type (cp_parser *parser, tree scope,
2893 tree id, location_t id_location)
2896 if (TREE_CODE (id) == IDENTIFIER_NODE)
2898 result = make_typename_type (scope, id, typename_type,
2899 /*complain=*/tf_none);
2900 if (result == error_mark_node)
2901 cp_parser_diagnose_invalid_type_name (parser, scope, id, id_location);
2904 return make_typename_type (scope, id, typename_type, tf_error);
2907 /* This is a wrapper around the
2908 make_{pointer,ptrmem,reference}_declarator functions that decides
2909 which one to call based on the CODE and CLASS_TYPE arguments. The
2910 CODE argument should be one of the values returned by
2911 cp_parser_ptr_operator. */
2912 static cp_declarator *
2913 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
2914 cp_cv_quals cv_qualifiers,
2915 cp_declarator *target)
2917 if (code == ERROR_MARK)
2918 return cp_error_declarator;
2920 if (code == INDIRECT_REF)
2921 if (class_type == NULL_TREE)
2922 return make_pointer_declarator (cv_qualifiers, target);
2924 return make_ptrmem_declarator (cv_qualifiers, class_type, target);
2925 else if (code == ADDR_EXPR && class_type == NULL_TREE)
2926 return make_reference_declarator (cv_qualifiers, target, false);
2927 else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
2928 return make_reference_declarator (cv_qualifiers, target, true);
2932 /* Create a new C++ parser. */
2935 cp_parser_new (void)
2941 /* cp_lexer_new_main is called before doing GC allocation because
2942 cp_lexer_new_main might load a PCH file. */
2943 lexer = cp_lexer_new_main ();
2945 /* Initialize the binops_by_token so that we can get the tree
2946 directly from the token. */
2947 for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2948 binops_by_token[binops[i].token_type] = binops[i];
2950 parser = ggc_alloc_cleared_cp_parser ();
2951 parser->lexer = lexer;
2952 parser->context = cp_parser_context_new (NULL);
2954 /* For now, we always accept GNU extensions. */
2955 parser->allow_gnu_extensions_p = 1;
2957 /* The `>' token is a greater-than operator, not the end of a
2959 parser->greater_than_is_operator_p = true;
2961 parser->default_arg_ok_p = true;
2963 /* We are not parsing a constant-expression. */
2964 parser->integral_constant_expression_p = false;
2965 parser->allow_non_integral_constant_expression_p = false;
2966 parser->non_integral_constant_expression_p = false;
2968 /* Local variable names are not forbidden. */
2969 parser->local_variables_forbidden_p = false;
2971 /* We are not processing an `extern "C"' declaration. */
2972 parser->in_unbraced_linkage_specification_p = false;
2974 /* We are not processing a declarator. */
2975 parser->in_declarator_p = false;
2977 /* We are not processing a template-argument-list. */
2978 parser->in_template_argument_list_p = false;
2980 /* We are not in an iteration statement. */
2981 parser->in_statement = 0;
2983 /* We are not in a switch statement. */
2984 parser->in_switch_statement_p = false;
2986 /* We are not parsing a type-id inside an expression. */
2987 parser->in_type_id_in_expr_p = false;
2989 /* Declarations aren't implicitly extern "C". */
2990 parser->implicit_extern_c = false;
2992 /* String literals should be translated to the execution character set. */
2993 parser->translate_strings_p = true;
2995 /* We are not parsing a function body. */
2996 parser->in_function_body = false;
2998 /* We can correct until told otherwise. */
2999 parser->colon_corrects_to_scope_p = true;
3001 /* The unparsed function queue is empty. */
3002 push_unparsed_function_queues (parser);
3004 /* There are no classes being defined. */
3005 parser->num_classes_being_defined = 0;
3007 /* No template parameters apply. */
3008 parser->num_template_parameter_lists = 0;
3013 /* Create a cp_lexer structure which will emit the tokens in CACHE
3014 and push it onto the parser's lexer stack. This is used for delayed
3015 parsing of in-class method bodies and default arguments, and should
3016 not be confused with tentative parsing. */
3018 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
3020 cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
3021 lexer->next = parser->lexer;
3022 parser->lexer = lexer;
3024 /* Move the current source position to that of the first token in the
3026 cp_lexer_set_source_position_from_token (lexer->next_token);
3029 /* Pop the top lexer off the parser stack. This is never used for the
3030 "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens. */
3032 cp_parser_pop_lexer (cp_parser *parser)
3034 cp_lexer *lexer = parser->lexer;
3035 parser->lexer = lexer->next;
3036 cp_lexer_destroy (lexer);
3038 /* Put the current source position back where it was before this
3039 lexer was pushed. */
3040 cp_lexer_set_source_position_from_token (parser->lexer->next_token);
3043 /* Lexical conventions [gram.lex] */
3045 /* Parse an identifier. Returns an IDENTIFIER_NODE representing the
3049 cp_parser_identifier (cp_parser* parser)
3053 /* Look for the identifier. */
3054 token = cp_parser_require (parser, CPP_NAME, RT_NAME);
3055 /* Return the value. */
3056 return token ? token->u.value : error_mark_node;
3059 /* Parse a sequence of adjacent string constants. Returns a
3060 TREE_STRING representing the combined, nul-terminated string
3061 constant. If TRANSLATE is true, translate the string to the
3062 execution character set. If WIDE_OK is true, a wide string is
3065 C++98 [lex.string] says that if a narrow string literal token is
3066 adjacent to a wide string literal token, the behavior is undefined.
3067 However, C99 6.4.5p4 says that this results in a wide string literal.
3068 We follow C99 here, for consistency with the C front end.
3070 This code is largely lifted from lex_string() in c-lex.c.
3072 FUTURE: ObjC++ will need to handle @-strings here. */
3074 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
3078 struct obstack str_ob;
3079 cpp_string str, istr, *strs;
3081 enum cpp_ttype type;
3083 tok = cp_lexer_peek_token (parser->lexer);
3084 if (!cp_parser_is_string_literal (tok))
3086 cp_parser_error (parser, "expected string-literal");
3087 return error_mark_node;
3092 /* Try to avoid the overhead of creating and destroying an obstack
3093 for the common case of just one string. */
3094 if (!cp_parser_is_string_literal
3095 (cp_lexer_peek_nth_token (parser->lexer, 2)))
3097 cp_lexer_consume_token (parser->lexer);
3099 str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
3100 str.len = TREE_STRING_LENGTH (tok->u.value);
3107 gcc_obstack_init (&str_ob);
3112 cp_lexer_consume_token (parser->lexer);
3114 str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
3115 str.len = TREE_STRING_LENGTH (tok->u.value);
3117 if (type != tok->type)
3119 if (type == CPP_STRING)
3121 else if (tok->type != CPP_STRING)
3122 error_at (tok->location,
3123 "unsupported non-standard concatenation "
3124 "of string literals");
3127 obstack_grow (&str_ob, &str, sizeof (cpp_string));
3129 tok = cp_lexer_peek_token (parser->lexer);
3131 while (cp_parser_is_string_literal (tok));
3133 strs = (cpp_string *) obstack_finish (&str_ob);
3136 if (type != CPP_STRING && !wide_ok)
3138 cp_parser_error (parser, "a wide string is invalid in this context");
3142 if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
3143 (parse_in, strs, count, &istr, type))
3145 value = build_string (istr.len, (const char *)istr.text);
3146 free (CONST_CAST (unsigned char *, istr.text));
3152 case CPP_UTF8STRING:
3153 TREE_TYPE (value) = char_array_type_node;
3156 TREE_TYPE (value) = char16_array_type_node;
3159 TREE_TYPE (value) = char32_array_type_node;
3162 TREE_TYPE (value) = wchar_array_type_node;
3166 value = fix_string_type (value);
3169 /* cpp_interpret_string has issued an error. */
3170 value = error_mark_node;
3173 obstack_free (&str_ob, 0);
3179 /* Basic concepts [gram.basic] */
3181 /* Parse a translation-unit.
3184 declaration-seq [opt]
3186 Returns TRUE if all went well. */
3189 cp_parser_translation_unit (cp_parser* parser)
3191 /* The address of the first non-permanent object on the declarator
3193 static void *declarator_obstack_base;
3197 /* Create the declarator obstack, if necessary. */
3198 if (!cp_error_declarator)
3200 gcc_obstack_init (&declarator_obstack);
3201 /* Create the error declarator. */
3202 cp_error_declarator = make_declarator (cdk_error);
3203 /* Create the empty parameter list. */
3204 no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3205 /* Remember where the base of the declarator obstack lies. */
3206 declarator_obstack_base = obstack_next_free (&declarator_obstack);
3209 cp_parser_declaration_seq_opt (parser);
3211 /* If there are no tokens left then all went well. */
3212 if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3214 /* Get rid of the token array; we don't need it any more. */
3215 cp_lexer_destroy (parser->lexer);
3216 parser->lexer = NULL;
3218 /* This file might have been a context that's implicitly extern
3219 "C". If so, pop the lang context. (Only relevant for PCH.) */
3220 if (parser->implicit_extern_c)
3222 pop_lang_context ();
3223 parser->implicit_extern_c = false;
3227 finish_translation_unit ();
3233 cp_parser_error (parser, "expected declaration");
3237 /* Make sure the declarator obstack was fully cleaned up. */
3238 gcc_assert (obstack_next_free (&declarator_obstack)
3239 == declarator_obstack_base);
3241 /* All went well. */
3245 /* Expressions [gram.expr] */
3247 /* Parse a primary-expression.
3258 ( compound-statement )
3259 __builtin_va_arg ( assignment-expression , type-id )
3260 __builtin_offsetof ( type-id , offsetof-expression )
3263 __has_nothrow_assign ( type-id )
3264 __has_nothrow_constructor ( type-id )
3265 __has_nothrow_copy ( type-id )
3266 __has_trivial_assign ( type-id )
3267 __has_trivial_constructor ( type-id )
3268 __has_trivial_copy ( type-id )
3269 __has_trivial_destructor ( type-id )
3270 __has_virtual_destructor ( type-id )
3271 __is_abstract ( type-id )
3272 __is_base_of ( type-id , type-id )
3273 __is_class ( type-id )
3274 __is_convertible_to ( type-id , type-id )
3275 __is_empty ( type-id )
3276 __is_enum ( type-id )
3277 __is_pod ( type-id )
3278 __is_polymorphic ( type-id )
3279 __is_union ( type-id )
3281 Objective-C++ Extension:
3289 ADDRESS_P is true iff this expression was immediately preceded by
3290 "&" and therefore might denote a pointer-to-member. CAST_P is true
3291 iff this expression is the target of a cast. TEMPLATE_ARG_P is
3292 true iff this expression is a template argument.
3294 Returns a representation of the expression. Upon return, *IDK
3295 indicates what kind of id-expression (if any) was present. */
3298 cp_parser_primary_expression (cp_parser *parser,
3301 bool template_arg_p,
3304 cp_token *token = NULL;
3306 /* Assume the primary expression is not an id-expression. */
3307 *idk = CP_ID_KIND_NONE;
3309 /* Peek at the next token. */
3310 token = cp_lexer_peek_token (parser->lexer);
3311 switch (token->type)
3324 token = cp_lexer_consume_token (parser->lexer);
3325 if (TREE_CODE (token->u.value) == FIXED_CST)
3327 error_at (token->location,
3328 "fixed-point types not supported in C++");
3329 return error_mark_node;
3331 /* Floating-point literals are only allowed in an integral
3332 constant expression if they are cast to an integral or
3333 enumeration type. */
3334 if (TREE_CODE (token->u.value) == REAL_CST
3335 && parser->integral_constant_expression_p
3338 /* CAST_P will be set even in invalid code like "int(2.7 +
3339 ...)". Therefore, we have to check that the next token
3340 is sure to end the cast. */
3343 cp_token *next_token;
3345 next_token = cp_lexer_peek_token (parser->lexer);
3346 if (/* The comma at the end of an
3347 enumerator-definition. */
3348 next_token->type != CPP_COMMA
3349 /* The curly brace at the end of an enum-specifier. */
3350 && next_token->type != CPP_CLOSE_BRACE
3351 /* The end of a statement. */
3352 && next_token->type != CPP_SEMICOLON
3353 /* The end of the cast-expression. */
3354 && next_token->type != CPP_CLOSE_PAREN
3355 /* The end of an array bound. */
3356 && next_token->type != CPP_CLOSE_SQUARE
3357 /* The closing ">" in a template-argument-list. */
3358 && (next_token->type != CPP_GREATER
3359 || parser->greater_than_is_operator_p)
3360 /* C++0x only: A ">>" treated like two ">" tokens,
3361 in a template-argument-list. */
3362 && (next_token->type != CPP_RSHIFT
3363 || (cxx_dialect == cxx98)
3364 || parser->greater_than_is_operator_p))
3368 /* If we are within a cast, then the constraint that the
3369 cast is to an integral or enumeration type will be
3370 checked at that point. If we are not within a cast, then
3371 this code is invalid. */
3373 cp_parser_non_integral_constant_expression (parser, NIC_FLOAT);
3375 return token->u.value;
3381 case CPP_UTF8STRING:
3382 /* ??? Should wide strings be allowed when parser->translate_strings_p
3383 is false (i.e. in attributes)? If not, we can kill the third
3384 argument to cp_parser_string_literal. */
3385 return cp_parser_string_literal (parser,
3386 parser->translate_strings_p,
3389 case CPP_OPEN_PAREN:
3392 bool saved_greater_than_is_operator_p;
3394 /* Consume the `('. */
3395 cp_lexer_consume_token (parser->lexer);
3396 /* Within a parenthesized expression, a `>' token is always
3397 the greater-than operator. */
3398 saved_greater_than_is_operator_p
3399 = parser->greater_than_is_operator_p;
3400 parser->greater_than_is_operator_p = true;
3401 /* If we see `( { ' then we are looking at the beginning of
3402 a GNU statement-expression. */
3403 if (cp_parser_allow_gnu_extensions_p (parser)
3404 && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3406 /* Statement-expressions are not allowed by the standard. */
3407 pedwarn (token->location, OPT_pedantic,
3408 "ISO C++ forbids braced-groups within expressions");
3410 /* And they're not allowed outside of a function-body; you
3411 cannot, for example, write:
3413 int i = ({ int j = 3; j + 1; });
3415 at class or namespace scope. */
3416 if (!parser->in_function_body
3417 || parser->in_template_argument_list_p)
3419 error_at (token->location,
3420 "statement-expressions are not allowed outside "
3421 "functions nor in template-argument lists");
3422 cp_parser_skip_to_end_of_block_or_statement (parser);
3423 expr = error_mark_node;
3427 /* Start the statement-expression. */
3428 expr = begin_stmt_expr ();
3429 /* Parse the compound-statement. */
3430 cp_parser_compound_statement (parser, expr, false, false);
3432 expr = finish_stmt_expr (expr, false);
3437 /* Parse the parenthesized expression. */
3438 expr = cp_parser_expression (parser, cast_p, idk);
3439 /* Let the front end know that this expression was
3440 enclosed in parentheses. This matters in case, for
3441 example, the expression is of the form `A::B', since
3442 `&A::B' might be a pointer-to-member, but `&(A::B)' is
3444 finish_parenthesized_expr (expr);
3445 /* DR 705: Wrapping an unqualified name in parentheses
3446 suppresses arg-dependent lookup. We want to pass back
3447 CP_ID_KIND_QUALIFIED for suppressing vtable lookup
3448 (c++/37862), but none of the others. */
3449 if (*idk != CP_ID_KIND_QUALIFIED)
3450 *idk = CP_ID_KIND_NONE;
3452 /* The `>' token might be the end of a template-id or
3453 template-parameter-list now. */
3454 parser->greater_than_is_operator_p
3455 = saved_greater_than_is_operator_p;
3456 /* Consume the `)'. */
3457 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
3458 cp_parser_skip_to_end_of_statement (parser);
3463 case CPP_OPEN_SQUARE:
3464 if (c_dialect_objc ())
3465 /* We have an Objective-C++ message. */
3466 return cp_parser_objc_expression (parser);
3468 tree lam = cp_parser_lambda_expression (parser);
3469 /* Don't warn about a failed tentative parse. */
3470 if (cp_parser_error_occurred (parser))
3471 return error_mark_node;
3472 maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
3476 case CPP_OBJC_STRING:
3477 if (c_dialect_objc ())
3478 /* We have an Objective-C++ string literal. */
3479 return cp_parser_objc_expression (parser);
3480 cp_parser_error (parser, "expected primary-expression");
3481 return error_mark_node;
3484 switch (token->keyword)
3486 /* These two are the boolean literals. */
3488 cp_lexer_consume_token (parser->lexer);
3489 return boolean_true_node;
3491 cp_lexer_consume_token (parser->lexer);
3492 return boolean_false_node;
3494 /* The `__null' literal. */
3496 cp_lexer_consume_token (parser->lexer);
3499 /* The `nullptr' literal. */
3501 cp_lexer_consume_token (parser->lexer);
3502 return nullptr_node;
3504 /* Recognize the `this' keyword. */
3506 cp_lexer_consume_token (parser->lexer);
3507 if (parser->local_variables_forbidden_p)
3509 error_at (token->location,
3510 "%<this%> may not be used in this context");
3511 return error_mark_node;
3513 /* Pointers cannot appear in constant-expressions. */
3514 if (cp_parser_non_integral_constant_expression (parser, NIC_THIS))
3515 return error_mark_node;
3516 return finish_this_expr ();
3518 /* The `operator' keyword can be the beginning of an
3523 case RID_FUNCTION_NAME:
3524 case RID_PRETTY_FUNCTION_NAME:
3525 case RID_C99_FUNCTION_NAME:
3527 non_integral_constant name;
3529 /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3530 __func__ are the names of variables -- but they are
3531 treated specially. Therefore, they are handled here,
3532 rather than relying on the generic id-expression logic
3533 below. Grammatically, these names are id-expressions.
3535 Consume the token. */
3536 token = cp_lexer_consume_token (parser->lexer);
3538 switch (token->keyword)
3540 case RID_FUNCTION_NAME:
3541 name = NIC_FUNC_NAME;
3543 case RID_PRETTY_FUNCTION_NAME:
3544 name = NIC_PRETTY_FUNC;
3546 case RID_C99_FUNCTION_NAME:
3547 name = NIC_C99_FUNC;
3553 if (cp_parser_non_integral_constant_expression (parser, name))
3554 return error_mark_node;
3556 /* Look up the name. */
3557 return finish_fname (token->u.value);
3565 /* The `__builtin_va_arg' construct is used to handle
3566 `va_arg'. Consume the `__builtin_va_arg' token. */
3567 cp_lexer_consume_token (parser->lexer);
3568 /* Look for the opening `('. */
3569 cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
3570 /* Now, parse the assignment-expression. */
3571 expression = cp_parser_assignment_expression (parser,
3572 /*cast_p=*/false, NULL);
3573 /* Look for the `,'. */
3574 cp_parser_require (parser, CPP_COMMA, RT_COMMA);
3575 /* Parse the type-id. */
3576 type = cp_parser_type_id (parser);
3577 /* Look for the closing `)'. */
3578 cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
3579 /* Using `va_arg' in a constant-expression is not
3581 if (cp_parser_non_integral_constant_expression (parser,
3583 return error_mark_node;
3584 return build_x_va_arg (expression, type);
3588 return cp_parser_builtin_offsetof (parser);
3590 case RID_HAS_NOTHROW_ASSIGN:
3591 case RID_HAS_NOTHROW_CONSTRUCTOR:
3592 case RID_HAS_NOTHROW_COPY:
3593 case RID_HAS_TRIVIAL_ASSIGN:
3594 case RID_HAS_TRIVIAL_CONSTRUCTOR:
3595 case RID_HAS_TRIVIAL_COPY:
3596 case RID_HAS_TRIVIAL_DESTRUCTOR:
3597 case RID_HAS_VIRTUAL_DESTRUCTOR:
3598 case RID_IS_ABSTRACT:
3599 case RID_IS_BASE_OF:
3601 case RID_IS_CONVERTIBLE_TO:
3605 case RID_IS_POLYMORPHIC:
3606 case RID_IS_STD_LAYOUT:
3607 case RID_IS_TRIVIAL:
3609 case RID_IS_LITERAL_TYPE:
3610 return cp_parser_trait_expr (parser, token->keyword);
3612 /* Objective-C++ expressions. */
3614 case RID_AT_PROTOCOL:
3615 case RID_AT_SELECTOR:
3616 return cp_parser_objc_expression (parser);
3619 if (parser->in_function_body
3620 && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3623 error_at (token->location,
3624 "a template declaration cannot appear at block scope");
3625 cp_parser_skip_to_end_of_block_or_statement (parser);
3626 return error_mark_node;
3629 cp_parser_error (parser, "expected primary-expression");
3630 return error_mark_node;
3633 /* An id-expression can start with either an identifier, a
3634 `::' as the beginning of a qualified-id, or the "operator"