2 Copyright (C) 2000, 2001, 2002, 2003, 2004,
3 2005, 2007, 2008 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"
26 #include "dyn-string.h"
34 #include "diagnostic.h"
44 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
45 and c-lex.c) and the C++ parser. */
47 /* A token's value and its associated deferred access checks and
50 struct tree_check
GTY(())
52 /* The value associated with the token. */
54 /* The checks that have been associated with value. */
55 VEC (deferred_access_check
, gc
)* checks
;
56 /* The token's qualifying scope (used when it is a
57 CPP_NESTED_NAME_SPECIFIER). */
58 tree qualifying_scope
;
63 typedef struct cp_token
GTY (())
65 /* The kind of token. */
66 ENUM_BITFIELD (cpp_ttype
) type
: 8;
67 /* If this token is a keyword, this value indicates which keyword.
68 Otherwise, this value is RID_MAX. */
69 ENUM_BITFIELD (rid
) keyword
: 8;
72 /* Identifier for the pragma. */
73 ENUM_BITFIELD (pragma_kind
) pragma_kind
: 6;
74 /* True if this token is from a system header. */
75 BOOL_BITFIELD in_system_header
: 1;
76 /* True if this token is from a context where it is implicitly extern "C" */
77 BOOL_BITFIELD implicit_extern_c
: 1;
78 /* True for a CPP_NAME token that is not a keyword (i.e., for which
79 KEYWORD is RID_MAX) iff this name was looked up and found to be
80 ambiguous. An error has already been reported. */
81 BOOL_BITFIELD ambiguous_p
: 1;
82 /* The value associated with this token, if any. */
83 union cp_token_value
{
84 /* Used for CPP_NESTED_NAME_SPECIFIER and CPP_TEMPLATE_ID. */
85 struct tree_check
* GTY((tag ("1"))) tree_check_value
;
86 /* Use for all other tokens. */
87 tree
GTY((tag ("0"))) value
;
88 } GTY((desc ("(%1.type == CPP_TEMPLATE_ID) || (%1.type == CPP_NESTED_NAME_SPECIFIER)"))) u
;
89 /* The location at which this token was found. */
93 /* We use a stack of token pointer for saving token sets. */
94 typedef struct cp_token
*cp_token_position
;
95 DEF_VEC_P (cp_token_position
);
96 DEF_VEC_ALLOC_P (cp_token_position
,heap
);
98 static cp_token eof_token
=
100 CPP_EOF
, RID_MAX
, 0, PRAGMA_NONE
, 0, false, 0, { NULL
},
104 /* The cp_lexer structure represents the C++ lexer. It is responsible
105 for managing the token stream from the preprocessor and supplying
106 it to the parser. Tokens are never added to the cp_lexer after
109 typedef struct cp_lexer
GTY (())
111 /* The memory allocated for the buffer. NULL if this lexer does not
112 own the token buffer. */
113 cp_token
* GTY ((length ("%h.buffer_length"))) buffer
;
114 /* If the lexer owns the buffer, this is the number of tokens in the
116 size_t buffer_length
;
118 /* A pointer just past the last available token. The tokens
119 in this lexer are [buffer, last_token). */
120 cp_token_position
GTY ((skip
)) last_token
;
122 /* The next available token. If NEXT_TOKEN is &eof_token, then there are
123 no more available tokens. */
124 cp_token_position
GTY ((skip
)) next_token
;
126 /* A stack indicating positions at which cp_lexer_save_tokens was
127 called. The top entry is the most recent position at which we
128 began saving tokens. If the stack is non-empty, we are saving
130 VEC(cp_token_position
,heap
) *GTY ((skip
)) saved_tokens
;
132 /* The next lexer in a linked list of lexers. */
133 struct cp_lexer
*next
;
135 /* True if we should output debugging information. */
138 /* True if we're in the context of parsing a pragma, and should not
139 increment past the end-of-line marker. */
143 /* cp_token_cache is a range of tokens. There is no need to represent
144 allocate heap memory for it, since tokens are never removed from the
145 lexer's array. There is also no need for the GC to walk through
146 a cp_token_cache, since everything in here is referenced through
149 typedef struct cp_token_cache
GTY(())
151 /* The beginning of the token range. */
152 cp_token
* GTY((skip
)) first
;
154 /* Points immediately after the last token in the range. */
155 cp_token
* GTY ((skip
)) last
;
160 static cp_lexer
*cp_lexer_new_main
162 static cp_lexer
*cp_lexer_new_from_tokens
163 (cp_token_cache
*tokens
);
164 static void cp_lexer_destroy
166 static int cp_lexer_saving_tokens
168 static cp_token_position cp_lexer_token_position
170 static cp_token
*cp_lexer_token_at
171 (cp_lexer
*, cp_token_position
);
172 static void cp_lexer_get_preprocessor_token
173 (cp_lexer
*, cp_token
*);
174 static inline cp_token
*cp_lexer_peek_token
176 static cp_token
*cp_lexer_peek_nth_token
177 (cp_lexer
*, size_t);
178 static inline bool cp_lexer_next_token_is
179 (cp_lexer
*, enum cpp_ttype
);
180 static bool cp_lexer_next_token_is_not
181 (cp_lexer
*, enum cpp_ttype
);
182 static bool cp_lexer_next_token_is_keyword
183 (cp_lexer
*, enum rid
);
184 static cp_token
*cp_lexer_consume_token
186 static void cp_lexer_purge_token
188 static void cp_lexer_purge_tokens_after
189 (cp_lexer
*, cp_token_position
);
190 static void cp_lexer_save_tokens
192 static void cp_lexer_commit_tokens
194 static void cp_lexer_rollback_tokens
196 #ifdef ENABLE_CHECKING
197 static void cp_lexer_print_token
198 (FILE *, cp_token
*);
199 static inline bool cp_lexer_debugging_p
201 static void cp_lexer_start_debugging
202 (cp_lexer
*) ATTRIBUTE_UNUSED
;
203 static void cp_lexer_stop_debugging
204 (cp_lexer
*) ATTRIBUTE_UNUSED
;
206 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
207 about passing NULL to functions that require non-NULL arguments
208 (fputs, fprintf). It will never be used, so all we need is a value
209 of the right type that's guaranteed not to be NULL. */
210 #define cp_lexer_debug_stream stdout
211 #define cp_lexer_print_token(str, tok) (void) 0
212 #define cp_lexer_debugging_p(lexer) 0
213 #endif /* ENABLE_CHECKING */
215 static cp_token_cache
*cp_token_cache_new
216 (cp_token
*, cp_token
*);
218 static void cp_parser_initial_pragma
221 /* Manifest constants. */
222 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
223 #define CP_SAVED_TOKEN_STACK 5
225 /* A token type for keywords, as opposed to ordinary identifiers. */
226 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
228 /* A token type for template-ids. If a template-id is processed while
229 parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
230 the value of the CPP_TEMPLATE_ID is whatever was returned by
231 cp_parser_template_id. */
232 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
234 /* A token type for nested-name-specifiers. If a
235 nested-name-specifier is processed while parsing tentatively, it is
236 replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
237 CPP_NESTED_NAME_SPECIFIER is whatever was returned by
238 cp_parser_nested_name_specifier_opt. */
239 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
241 /* A token type for tokens that are not tokens at all; these are used
242 to represent slots in the array where there used to be a token
243 that has now been deleted. */
244 #define CPP_PURGED ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
246 /* The number of token types, including C++-specific ones. */
247 #define N_CP_TTYPES ((int) (CPP_PURGED + 1))
251 #ifdef ENABLE_CHECKING
252 /* The stream to which debugging output should be written. */
253 static FILE *cp_lexer_debug_stream
;
254 #endif /* ENABLE_CHECKING */
256 /* Create a new main C++ lexer, the lexer that gets tokens from the
260 cp_lexer_new_main (void)
262 cp_token first_token
;
269 /* It's possible that parsing the first pragma will load a PCH file,
270 which is a GC collection point. So we have to do that before
271 allocating any memory. */
272 cp_parser_initial_pragma (&first_token
);
274 c_common_no_more_pch ();
276 /* Allocate the memory. */
277 lexer
= GGC_CNEW (cp_lexer
);
279 #ifdef ENABLE_CHECKING
280 /* Initially we are not debugging. */
281 lexer
->debugging_p
= false;
282 #endif /* ENABLE_CHECKING */
283 lexer
->saved_tokens
= VEC_alloc (cp_token_position
, heap
,
284 CP_SAVED_TOKEN_STACK
);
286 /* Create the buffer. */
287 alloc
= CP_LEXER_BUFFER_SIZE
;
288 buffer
= GGC_NEWVEC (cp_token
, alloc
);
290 /* Put the first token in the buffer. */
295 /* Get the remaining tokens from the preprocessor. */
296 while (pos
->type
!= CPP_EOF
)
303 buffer
= GGC_RESIZEVEC (cp_token
, buffer
, alloc
);
304 pos
= buffer
+ space
;
306 cp_lexer_get_preprocessor_token (lexer
, pos
);
308 lexer
->buffer
= buffer
;
309 lexer
->buffer_length
= alloc
- space
;
310 lexer
->last_token
= pos
;
311 lexer
->next_token
= lexer
->buffer_length
? buffer
: &eof_token
;
313 /* Subsequent preprocessor diagnostics should use compiler
314 diagnostic functions to get the compiler source location. */
315 cpp_get_options (parse_in
)->client_diagnostic
= true;
316 cpp_get_callbacks (parse_in
)->error
= cp_cpp_error
;
318 gcc_assert (lexer
->next_token
->type
!= CPP_PURGED
);
322 /* Create a new lexer whose token stream is primed with the tokens in
323 CACHE. When these tokens are exhausted, no new tokens will be read. */
326 cp_lexer_new_from_tokens (cp_token_cache
*cache
)
328 cp_token
*first
= cache
->first
;
329 cp_token
*last
= cache
->last
;
330 cp_lexer
*lexer
= GGC_CNEW (cp_lexer
);
332 /* We do not own the buffer. */
333 lexer
->buffer
= NULL
;
334 lexer
->buffer_length
= 0;
335 lexer
->next_token
= first
== last
? &eof_token
: first
;
336 lexer
->last_token
= last
;
338 lexer
->saved_tokens
= VEC_alloc (cp_token_position
, heap
,
339 CP_SAVED_TOKEN_STACK
);
341 #ifdef ENABLE_CHECKING
342 /* Initially we are not debugging. */
343 lexer
->debugging_p
= false;
346 gcc_assert (lexer
->next_token
->type
!= CPP_PURGED
);
350 /* Frees all resources associated with LEXER. */
353 cp_lexer_destroy (cp_lexer
*lexer
)
356 ggc_free (lexer
->buffer
);
357 VEC_free (cp_token_position
, heap
, lexer
->saved_tokens
);
361 /* Returns nonzero if debugging information should be output. */
363 #ifdef ENABLE_CHECKING
366 cp_lexer_debugging_p (cp_lexer
*lexer
)
368 return lexer
->debugging_p
;
371 #endif /* ENABLE_CHECKING */
373 static inline cp_token_position
374 cp_lexer_token_position (cp_lexer
*lexer
, bool previous_p
)
376 gcc_assert (!previous_p
|| lexer
->next_token
!= &eof_token
);
378 return lexer
->next_token
- previous_p
;
381 static inline cp_token
*
382 cp_lexer_token_at (cp_lexer
*lexer ATTRIBUTE_UNUSED
, cp_token_position pos
)
387 /* nonzero if we are presently saving tokens. */
390 cp_lexer_saving_tokens (const cp_lexer
* lexer
)
392 return VEC_length (cp_token_position
, lexer
->saved_tokens
) != 0;
395 /* Store the next token from the preprocessor in *TOKEN. Return true
396 if we reach EOF. If LEXER is NULL, assume we are handling an
397 initial #pragma pch_preprocess, and thus want the lexer to return
398 processed strings. */
401 cp_lexer_get_preprocessor_token (cp_lexer
*lexer
, cp_token
*token
)
403 static int is_extern_c
= 0;
405 /* Get a new token from the preprocessor. */
407 = c_lex_with_flags (&token
->u
.value
, &token
->location
, &token
->flags
,
408 lexer
== NULL
? 0 : C_LEX_RAW_STRINGS
);
409 token
->keyword
= RID_MAX
;
410 token
->pragma_kind
= PRAGMA_NONE
;
411 token
->in_system_header
= in_system_header
;
413 /* On some systems, some header files are surrounded by an
414 implicit extern "C" block. Set a flag in the token if it
415 comes from such a header. */
416 is_extern_c
+= pending_lang_change
;
417 pending_lang_change
= 0;
418 token
->implicit_extern_c
= is_extern_c
> 0;
420 /* Check to see if this token is a keyword. */
421 if (token
->type
== CPP_NAME
)
423 if (C_IS_RESERVED_WORD (token
->u
.value
))
425 /* Mark this token as a keyword. */
426 token
->type
= CPP_KEYWORD
;
427 /* Record which keyword. */
428 token
->keyword
= C_RID_CODE (token
->u
.value
);
429 /* Update the value. Some keywords are mapped to particular
430 entities, rather than simply having the value of the
431 corresponding IDENTIFIER_NODE. For example, `__const' is
432 mapped to `const'. */
433 token
->u
.value
= ridpointers
[token
->keyword
];
437 if (warn_cxx0x_compat
438 && C_RID_CODE (token
->u
.value
) >= RID_FIRST_CXX0X
439 && C_RID_CODE (token
->u
.value
) <= RID_LAST_CXX0X
)
441 /* Warn about the C++0x keyword (but still treat it as
443 warning (OPT_Wc__0x_compat
,
444 "identifier %<%s%> will become a keyword in C++0x",
445 IDENTIFIER_POINTER (token
->u
.value
));
447 /* Clear out the C_RID_CODE so we don't warn about this
448 particular identifier-turned-keyword again. */
449 C_RID_CODE (token
->u
.value
) = RID_MAX
;
452 token
->ambiguous_p
= false;
453 token
->keyword
= RID_MAX
;
456 /* Handle Objective-C++ keywords. */
457 else if (token
->type
== CPP_AT_NAME
)
459 token
->type
= CPP_KEYWORD
;
460 switch (C_RID_CODE (token
->u
.value
))
462 /* Map 'class' to '@class', 'private' to '@private', etc. */
463 case RID_CLASS
: token
->keyword
= RID_AT_CLASS
; break;
464 case RID_PRIVATE
: token
->keyword
= RID_AT_PRIVATE
; break;
465 case RID_PROTECTED
: token
->keyword
= RID_AT_PROTECTED
; break;
466 case RID_PUBLIC
: token
->keyword
= RID_AT_PUBLIC
; break;
467 case RID_THROW
: token
->keyword
= RID_AT_THROW
; break;
468 case RID_TRY
: token
->keyword
= RID_AT_TRY
; break;
469 case RID_CATCH
: token
->keyword
= RID_AT_CATCH
; break;
470 default: token
->keyword
= C_RID_CODE (token
->u
.value
);
473 else if (token
->type
== CPP_PRAGMA
)
475 /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST. */
476 token
->pragma_kind
= TREE_INT_CST_LOW (token
->u
.value
);
477 token
->u
.value
= NULL_TREE
;
481 /* Update the globals input_location and in_system_header and the
482 input file stack from TOKEN. */
484 cp_lexer_set_source_position_from_token (cp_token
*token
)
486 if (token
->type
!= CPP_EOF
)
488 input_location
= token
->location
;
489 in_system_header
= token
->in_system_header
;
493 /* Return a pointer to the next token in the token stream, but do not
496 static inline cp_token
*
497 cp_lexer_peek_token (cp_lexer
*lexer
)
499 if (cp_lexer_debugging_p (lexer
))
501 fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream
);
502 cp_lexer_print_token (cp_lexer_debug_stream
, lexer
->next_token
);
503 putc ('\n', cp_lexer_debug_stream
);
505 return lexer
->next_token
;
508 /* Return true if the next token has the indicated TYPE. */
511 cp_lexer_next_token_is (cp_lexer
* lexer
, enum cpp_ttype type
)
513 return cp_lexer_peek_token (lexer
)->type
== type
;
516 /* Return true if the next token does not have the indicated TYPE. */
519 cp_lexer_next_token_is_not (cp_lexer
* lexer
, enum cpp_ttype type
)
521 return !cp_lexer_next_token_is (lexer
, type
);
524 /* Return true if the next token is the indicated KEYWORD. */
527 cp_lexer_next_token_is_keyword (cp_lexer
* lexer
, enum rid keyword
)
529 return cp_lexer_peek_token (lexer
)->keyword
== keyword
;
532 /* Return true if the next token is a keyword for a decl-specifier. */
535 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer
*lexer
)
539 token
= cp_lexer_peek_token (lexer
);
540 switch (token
->keyword
)
542 /* auto specifier: storage-class-specifier in C++,
543 simple-type-specifier in C++0x. */
545 /* Storage classes. */
551 /* Elaborated type specifiers. */
557 /* Simple type specifiers. */
571 /* GNU extensions. */
574 /* C++0x extensions. */
583 /* Return a pointer to the Nth token in the token stream. If N is 1,
584 then this is precisely equivalent to cp_lexer_peek_token (except
585 that it is not inline). One would like to disallow that case, but
586 there is one case (cp_parser_nth_token_starts_template_id) where
587 the caller passes a variable for N and it might be 1. */
590 cp_lexer_peek_nth_token (cp_lexer
* lexer
, size_t n
)
594 /* N is 1-based, not zero-based. */
597 if (cp_lexer_debugging_p (lexer
))
598 fprintf (cp_lexer_debug_stream
,
599 "cp_lexer: peeking ahead %ld at token: ", (long)n
);
602 token
= lexer
->next_token
;
603 gcc_assert (!n
|| token
!= &eof_token
);
607 if (token
== lexer
->last_token
)
613 if (token
->type
!= CPP_PURGED
)
617 if (cp_lexer_debugging_p (lexer
))
619 cp_lexer_print_token (cp_lexer_debug_stream
, token
);
620 putc ('\n', cp_lexer_debug_stream
);
626 /* Return the next token, and advance the lexer's next_token pointer
627 to point to the next non-purged token. */
630 cp_lexer_consume_token (cp_lexer
* lexer
)
632 cp_token
*token
= lexer
->next_token
;
634 gcc_assert (token
!= &eof_token
);
635 gcc_assert (!lexer
->in_pragma
|| token
->type
!= CPP_PRAGMA_EOL
);
640 if (lexer
->next_token
== lexer
->last_token
)
642 lexer
->next_token
= &eof_token
;
647 while (lexer
->next_token
->type
== CPP_PURGED
);
649 cp_lexer_set_source_position_from_token (token
);
651 /* Provide debugging output. */
652 if (cp_lexer_debugging_p (lexer
))
654 fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream
);
655 cp_lexer_print_token (cp_lexer_debug_stream
, token
);
656 putc ('\n', cp_lexer_debug_stream
);
662 /* Permanently remove the next token from the token stream, and
663 advance the next_token pointer to refer to the next non-purged
667 cp_lexer_purge_token (cp_lexer
*lexer
)
669 cp_token
*tok
= lexer
->next_token
;
671 gcc_assert (tok
!= &eof_token
);
672 tok
->type
= CPP_PURGED
;
673 tok
->location
= UNKNOWN_LOCATION
;
674 tok
->u
.value
= NULL_TREE
;
675 tok
->keyword
= RID_MAX
;
680 if (tok
== lexer
->last_token
)
686 while (tok
->type
== CPP_PURGED
);
687 lexer
->next_token
= tok
;
690 /* Permanently remove all tokens after TOK, up to, but not
691 including, the token that will be returned next by
692 cp_lexer_peek_token. */
695 cp_lexer_purge_tokens_after (cp_lexer
*lexer
, cp_token
*tok
)
697 cp_token
*peek
= lexer
->next_token
;
699 if (peek
== &eof_token
)
700 peek
= lexer
->last_token
;
702 gcc_assert (tok
< peek
);
704 for ( tok
+= 1; tok
!= peek
; tok
+= 1)
706 tok
->type
= CPP_PURGED
;
707 tok
->location
= UNKNOWN_LOCATION
;
708 tok
->u
.value
= NULL_TREE
;
709 tok
->keyword
= RID_MAX
;
713 /* Begin saving tokens. All tokens consumed after this point will be
717 cp_lexer_save_tokens (cp_lexer
* lexer
)
719 /* Provide debugging output. */
720 if (cp_lexer_debugging_p (lexer
))
721 fprintf (cp_lexer_debug_stream
, "cp_lexer: saving tokens\n");
723 VEC_safe_push (cp_token_position
, heap
,
724 lexer
->saved_tokens
, lexer
->next_token
);
727 /* Commit to the portion of the token stream most recently saved. */
730 cp_lexer_commit_tokens (cp_lexer
* lexer
)
732 /* Provide debugging output. */
733 if (cp_lexer_debugging_p (lexer
))
734 fprintf (cp_lexer_debug_stream
, "cp_lexer: committing tokens\n");
736 VEC_pop (cp_token_position
, lexer
->saved_tokens
);
739 /* Return all tokens saved since the last call to cp_lexer_save_tokens
740 to the token stream. Stop saving tokens. */
743 cp_lexer_rollback_tokens (cp_lexer
* lexer
)
745 /* Provide debugging output. */
746 if (cp_lexer_debugging_p (lexer
))
747 fprintf (cp_lexer_debug_stream
, "cp_lexer: restoring tokens\n");
749 lexer
->next_token
= VEC_pop (cp_token_position
, lexer
->saved_tokens
);
752 /* Print a representation of the TOKEN on the STREAM. */
754 #ifdef ENABLE_CHECKING
757 cp_lexer_print_token (FILE * stream
, cp_token
*token
)
759 /* We don't use cpp_type2name here because the parser defines
760 a few tokens of its own. */
761 static const char *const token_names
[] = {
762 /* cpplib-defined token types */
768 /* C++ parser token types - see "Manifest constants", above. */
771 "NESTED_NAME_SPECIFIER",
775 /* If we have a name for the token, print it out. Otherwise, we
776 simply give the numeric code. */
777 gcc_assert (token
->type
< ARRAY_SIZE(token_names
));
778 fputs (token_names
[token
->type
], stream
);
780 /* For some tokens, print the associated data. */
784 /* Some keywords have a value that is not an IDENTIFIER_NODE.
785 For example, `struct' is mapped to an INTEGER_CST. */
786 if (TREE_CODE (token
->u
.value
) != IDENTIFIER_NODE
)
788 /* else fall through */
790 fputs (IDENTIFIER_POINTER (token
->u
.value
), stream
);
797 fprintf (stream
, " \"%s\"", TREE_STRING_POINTER (token
->u
.value
));
805 /* Start emitting debugging information. */
808 cp_lexer_start_debugging (cp_lexer
* lexer
)
810 lexer
->debugging_p
= true;
813 /* Stop emitting debugging information. */
816 cp_lexer_stop_debugging (cp_lexer
* lexer
)
818 lexer
->debugging_p
= false;
821 #endif /* ENABLE_CHECKING */
823 /* Create a new cp_token_cache, representing a range of tokens. */
825 static cp_token_cache
*
826 cp_token_cache_new (cp_token
*first
, cp_token
*last
)
828 cp_token_cache
*cache
= GGC_NEW (cp_token_cache
);
829 cache
->first
= first
;
835 /* Decl-specifiers. */
837 /* Set *DECL_SPECS to represent an empty decl-specifier-seq. */
840 clear_decl_specs (cp_decl_specifier_seq
*decl_specs
)
842 memset (decl_specs
, 0, sizeof (cp_decl_specifier_seq
));
847 /* Nothing other than the parser should be creating declarators;
848 declarators are a semi-syntactic representation of C++ entities.
849 Other parts of the front end that need to create entities (like
850 VAR_DECLs or FUNCTION_DECLs) should do that directly. */
852 static cp_declarator
*make_call_declarator
853 (cp_declarator
*, cp_parameter_declarator
*, cp_cv_quals
, tree
);
854 static cp_declarator
*make_array_declarator
855 (cp_declarator
*, tree
);
856 static cp_declarator
*make_pointer_declarator
857 (cp_cv_quals
, cp_declarator
*);
858 static cp_declarator
*make_reference_declarator
859 (cp_cv_quals
, cp_declarator
*, bool);
860 static cp_parameter_declarator
*make_parameter_declarator
861 (cp_decl_specifier_seq
*, cp_declarator
*, tree
);
862 static cp_declarator
*make_ptrmem_declarator
863 (cp_cv_quals
, tree
, cp_declarator
*);
865 /* An erroneous declarator. */
866 static cp_declarator
*cp_error_declarator
;
868 /* The obstack on which declarators and related data structures are
870 static struct obstack declarator_obstack
;
872 /* Alloc BYTES from the declarator memory pool. */
875 alloc_declarator (size_t bytes
)
877 return obstack_alloc (&declarator_obstack
, bytes
);
880 /* Allocate a declarator of the indicated KIND. Clear fields that are
881 common to all declarators. */
883 static cp_declarator
*
884 make_declarator (cp_declarator_kind kind
)
886 cp_declarator
*declarator
;
888 declarator
= (cp_declarator
*) alloc_declarator (sizeof (cp_declarator
));
889 declarator
->kind
= kind
;
890 declarator
->attributes
= NULL_TREE
;
891 declarator
->declarator
= NULL
;
892 declarator
->parameter_pack_p
= false;
897 /* Make a declarator for a generalized identifier. If
898 QUALIFYING_SCOPE is non-NULL, the identifier is
899 QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
900 UNQUALIFIED_NAME. SFK indicates the kind of special function this
903 static cp_declarator
*
904 make_id_declarator (tree qualifying_scope
, tree unqualified_name
,
905 special_function_kind sfk
)
907 cp_declarator
*declarator
;
909 /* It is valid to write:
911 class C { void f(); };
915 The standard is not clear about whether `typedef const C D' is
916 legal; as of 2002-09-15 the committee is considering that
917 question. EDG 3.0 allows that syntax. Therefore, we do as
919 if (qualifying_scope
&& TYPE_P (qualifying_scope
))
920 qualifying_scope
= TYPE_MAIN_VARIANT (qualifying_scope
);
922 gcc_assert (TREE_CODE (unqualified_name
) == IDENTIFIER_NODE
923 || TREE_CODE (unqualified_name
) == BIT_NOT_EXPR
924 || TREE_CODE (unqualified_name
) == TEMPLATE_ID_EXPR
);
926 declarator
= make_declarator (cdk_id
);
927 declarator
->u
.id
.qualifying_scope
= qualifying_scope
;
928 declarator
->u
.id
.unqualified_name
= unqualified_name
;
929 declarator
->u
.id
.sfk
= sfk
;
934 /* Make a declarator for a pointer to TARGET. CV_QUALIFIERS is a list
935 of modifiers such as const or volatile to apply to the pointer
936 type, represented as identifiers. */
939 make_pointer_declarator (cp_cv_quals cv_qualifiers
, cp_declarator
*target
)
941 cp_declarator
*declarator
;
943 declarator
= make_declarator (cdk_pointer
);
944 declarator
->declarator
= target
;
945 declarator
->u
.pointer
.qualifiers
= cv_qualifiers
;
946 declarator
->u
.pointer
.class_type
= NULL_TREE
;
949 declarator
->parameter_pack_p
= target
->parameter_pack_p
;
950 target
->parameter_pack_p
= false;
953 declarator
->parameter_pack_p
= false;
958 /* Like make_pointer_declarator -- but for references. */
961 make_reference_declarator (cp_cv_quals cv_qualifiers
, cp_declarator
*target
,
964 cp_declarator
*declarator
;
966 declarator
= make_declarator (cdk_reference
);
967 declarator
->declarator
= target
;
968 declarator
->u
.reference
.qualifiers
= cv_qualifiers
;
969 declarator
->u
.reference
.rvalue_ref
= rvalue_ref
;
972 declarator
->parameter_pack_p
= target
->parameter_pack_p
;
973 target
->parameter_pack_p
= false;
976 declarator
->parameter_pack_p
= false;
981 /* Like make_pointer_declarator -- but for a pointer to a non-static
982 member of CLASS_TYPE. */
985 make_ptrmem_declarator (cp_cv_quals cv_qualifiers
, tree class_type
,
986 cp_declarator
*pointee
)
988 cp_declarator
*declarator
;
990 declarator
= make_declarator (cdk_ptrmem
);
991 declarator
->declarator
= pointee
;
992 declarator
->u
.pointer
.qualifiers
= cv_qualifiers
;
993 declarator
->u
.pointer
.class_type
= class_type
;
997 declarator
->parameter_pack_p
= pointee
->parameter_pack_p
;
998 pointee
->parameter_pack_p
= false;
1001 declarator
->parameter_pack_p
= false;
1006 /* Make a declarator for the function given by TARGET, with the
1007 indicated PARMS. The CV_QUALIFIERS aply to the function, as in
1008 "const"-qualified member function. The EXCEPTION_SPECIFICATION
1009 indicates what exceptions can be thrown. */
1012 make_call_declarator (cp_declarator
*target
,
1013 cp_parameter_declarator
*parms
,
1014 cp_cv_quals cv_qualifiers
,
1015 tree exception_specification
)
1017 cp_declarator
*declarator
;
1019 declarator
= make_declarator (cdk_function
);
1020 declarator
->declarator
= target
;
1021 declarator
->u
.function
.parameters
= parms
;
1022 declarator
->u
.function
.qualifiers
= cv_qualifiers
;
1023 declarator
->u
.function
.exception_specification
= exception_specification
;
1026 declarator
->parameter_pack_p
= target
->parameter_pack_p
;
1027 target
->parameter_pack_p
= false;
1030 declarator
->parameter_pack_p
= false;
1035 /* Make a declarator for an array of BOUNDS elements, each of which is
1036 defined by ELEMENT. */
1039 make_array_declarator (cp_declarator
*element
, tree bounds
)
1041 cp_declarator
*declarator
;
1043 declarator
= make_declarator (cdk_array
);
1044 declarator
->declarator
= element
;
1045 declarator
->u
.array
.bounds
= bounds
;
1048 declarator
->parameter_pack_p
= element
->parameter_pack_p
;
1049 element
->parameter_pack_p
= false;
1052 declarator
->parameter_pack_p
= false;
1057 /* Determine whether the declarator we've seen so far can be a
1058 parameter pack, when followed by an ellipsis. */
1060 declarator_can_be_parameter_pack (cp_declarator
*declarator
)
1062 /* Search for a declarator name, or any other declarator that goes
1063 after the point where the ellipsis could appear in a parameter
1064 pack. If we find any of these, then this declarator can not be
1065 made into a parameter pack. */
1067 while (declarator
&& !found
)
1069 switch ((int)declarator
->kind
)
1080 declarator
= declarator
->declarator
;
1088 cp_parameter_declarator
*no_parameters
;
1090 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1091 DECLARATOR and DEFAULT_ARGUMENT. */
1093 cp_parameter_declarator
*
1094 make_parameter_declarator (cp_decl_specifier_seq
*decl_specifiers
,
1095 cp_declarator
*declarator
,
1096 tree default_argument
)
1098 cp_parameter_declarator
*parameter
;
1100 parameter
= ((cp_parameter_declarator
*)
1101 alloc_declarator (sizeof (cp_parameter_declarator
)));
1102 parameter
->next
= NULL
;
1103 if (decl_specifiers
)
1104 parameter
->decl_specifiers
= *decl_specifiers
;
1106 clear_decl_specs (¶meter
->decl_specifiers
);
1107 parameter
->declarator
= declarator
;
1108 parameter
->default_argument
= default_argument
;
1109 parameter
->ellipsis_p
= false;
1114 /* Returns true iff DECLARATOR is a declaration for a function. */
1117 function_declarator_p (const cp_declarator
*declarator
)
1121 if (declarator
->kind
== cdk_function
1122 && declarator
->declarator
->kind
== cdk_id
)
1124 if (declarator
->kind
== cdk_id
1125 || declarator
->kind
== cdk_error
)
1127 declarator
= declarator
->declarator
;
1137 A cp_parser parses the token stream as specified by the C++
1138 grammar. Its job is purely parsing, not semantic analysis. For
1139 example, the parser breaks the token stream into declarators,
1140 expressions, statements, and other similar syntactic constructs.
1141 It does not check that the types of the expressions on either side
1142 of an assignment-statement are compatible, or that a function is
1143 not declared with a parameter of type `void'.
1145 The parser invokes routines elsewhere in the compiler to perform
1146 semantic analysis and to build up the abstract syntax tree for the
1149 The parser (and the template instantiation code, which is, in a
1150 way, a close relative of parsing) are the only parts of the
1151 compiler that should be calling push_scope and pop_scope, or
1152 related functions. The parser (and template instantiation code)
1153 keeps track of what scope is presently active; everything else
1154 should simply honor that. (The code that generates static
1155 initializers may also need to set the scope, in order to check
1156 access control correctly when emitting the initializers.)
1161 The parser is of the standard recursive-descent variety. Upcoming
1162 tokens in the token stream are examined in order to determine which
1163 production to use when parsing a non-terminal. Some C++ constructs
1164 require arbitrary look ahead to disambiguate. For example, it is
1165 impossible, in the general case, to tell whether a statement is an
1166 expression or declaration without scanning the entire statement.
1167 Therefore, the parser is capable of "parsing tentatively." When the
1168 parser is not sure what construct comes next, it enters this mode.
1169 Then, while we attempt to parse the construct, the parser queues up
1170 error messages, rather than issuing them immediately, and saves the
1171 tokens it consumes. If the construct is parsed successfully, the
1172 parser "commits", i.e., it issues any queued error messages and
1173 the tokens that were being preserved are permanently discarded.
1174 If, however, the construct is not parsed successfully, the parser
1175 rolls back its state completely so that it can resume parsing using
1176 a different alternative.
1181 The performance of the parser could probably be improved substantially.
1182 We could often eliminate the need to parse tentatively by looking ahead
1183 a little bit. In some places, this approach might not entirely eliminate
1184 the need to parse tentatively, but it might still speed up the average
1187 /* Flags that are passed to some parsing functions. These values can
1188 be bitwise-ored together. */
1190 typedef enum cp_parser_flags
1193 CP_PARSER_FLAGS_NONE
= 0x0,
1194 /* The construct is optional. If it is not present, then no error
1195 should be issued. */
1196 CP_PARSER_FLAGS_OPTIONAL
= 0x1,
1197 /* When parsing a type-specifier, do not allow user-defined types. */
1198 CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES
= 0x2
1201 /* The different kinds of declarators we want to parse. */
1203 typedef enum cp_parser_declarator_kind
1205 /* We want an abstract declarator. */
1206 CP_PARSER_DECLARATOR_ABSTRACT
,
1207 /* We want a named declarator. */
1208 CP_PARSER_DECLARATOR_NAMED
,
1209 /* We don't mind, but the name must be an unqualified-id. */
1210 CP_PARSER_DECLARATOR_EITHER
1211 } cp_parser_declarator_kind
;
1213 /* The precedence values used to parse binary expressions. The minimum value
1214 of PREC must be 1, because zero is reserved to quickly discriminate
1215 binary operators from other tokens. */
1220 PREC_LOGICAL_OR_EXPRESSION
,
1221 PREC_LOGICAL_AND_EXPRESSION
,
1222 PREC_INCLUSIVE_OR_EXPRESSION
,
1223 PREC_EXCLUSIVE_OR_EXPRESSION
,
1224 PREC_AND_EXPRESSION
,
1225 PREC_EQUALITY_EXPRESSION
,
1226 PREC_RELATIONAL_EXPRESSION
,
1227 PREC_SHIFT_EXPRESSION
,
1228 PREC_ADDITIVE_EXPRESSION
,
1229 PREC_MULTIPLICATIVE_EXPRESSION
,
1231 NUM_PREC_VALUES
= PREC_PM_EXPRESSION
1234 /* A mapping from a token type to a corresponding tree node type, with a
1235 precedence value. */
1237 typedef struct cp_parser_binary_operations_map_node
1239 /* The token type. */
1240 enum cpp_ttype token_type
;
1241 /* The corresponding tree code. */
1242 enum tree_code tree_type
;
1243 /* The precedence of this operator. */
1244 enum cp_parser_prec prec
;
1245 } cp_parser_binary_operations_map_node
;
1247 /* The status of a tentative parse. */
1249 typedef enum cp_parser_status_kind
1251 /* No errors have occurred. */
1252 CP_PARSER_STATUS_KIND_NO_ERROR
,
1253 /* An error has occurred. */
1254 CP_PARSER_STATUS_KIND_ERROR
,
1255 /* We are committed to this tentative parse, whether or not an error
1257 CP_PARSER_STATUS_KIND_COMMITTED
1258 } cp_parser_status_kind
;
1260 typedef struct cp_parser_expression_stack_entry
1262 /* Left hand side of the binary operation we are currently
1265 /* Original tree code for left hand side, if it was a binary
1266 expression itself (used for -Wparentheses). */
1267 enum tree_code lhs_type
;
1268 /* Tree code for the binary operation we are parsing. */
1269 enum tree_code tree_type
;
1270 /* Precedence of the binary operation we are parsing. */
1272 } cp_parser_expression_stack_entry
;
1274 /* The stack for storing partial expressions. We only need NUM_PREC_VALUES
1275 entries because precedence levels on the stack are monotonically
1277 typedef struct cp_parser_expression_stack_entry
1278 cp_parser_expression_stack
[NUM_PREC_VALUES
];
1280 /* Context that is saved and restored when parsing tentatively. */
1281 typedef struct cp_parser_context
GTY (())
1283 /* If this is a tentative parsing context, the status of the
1285 enum cp_parser_status_kind status
;
1286 /* If non-NULL, we have just seen a `x->' or `x.' expression. Names
1287 that are looked up in this context must be looked up both in the
1288 scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1289 the context of the containing expression. */
1292 /* The next parsing context in the stack. */
1293 struct cp_parser_context
*next
;
1294 } cp_parser_context
;
1298 /* Constructors and destructors. */
1300 static cp_parser_context
*cp_parser_context_new
1301 (cp_parser_context
*);
1303 /* Class variables. */
1305 static GTY((deletable
)) cp_parser_context
* cp_parser_context_free_list
;
1307 /* The operator-precedence table used by cp_parser_binary_expression.
1308 Transformed into an associative array (binops_by_token) by
1311 static const cp_parser_binary_operations_map_node binops
[] = {
1312 { CPP_DEREF_STAR
, MEMBER_REF
, PREC_PM_EXPRESSION
},
1313 { CPP_DOT_STAR
, DOTSTAR_EXPR
, PREC_PM_EXPRESSION
},
1315 { CPP_MULT
, MULT_EXPR
, PREC_MULTIPLICATIVE_EXPRESSION
},
1316 { CPP_DIV
, TRUNC_DIV_EXPR
, PREC_MULTIPLICATIVE_EXPRESSION
},
1317 { CPP_MOD
, TRUNC_MOD_EXPR
, PREC_MULTIPLICATIVE_EXPRESSION
},
1319 { CPP_PLUS
, PLUS_EXPR
, PREC_ADDITIVE_EXPRESSION
},
1320 { CPP_MINUS
, MINUS_EXPR
, PREC_ADDITIVE_EXPRESSION
},
1322 { CPP_LSHIFT
, LSHIFT_EXPR
, PREC_SHIFT_EXPRESSION
},
1323 { CPP_RSHIFT
, RSHIFT_EXPR
, PREC_SHIFT_EXPRESSION
},
1325 { CPP_LESS
, LT_EXPR
, PREC_RELATIONAL_EXPRESSION
},
1326 { CPP_GREATER
, GT_EXPR
, PREC_RELATIONAL_EXPRESSION
},
1327 { CPP_LESS_EQ
, LE_EXPR
, PREC_RELATIONAL_EXPRESSION
},
1328 { CPP_GREATER_EQ
, GE_EXPR
, PREC_RELATIONAL_EXPRESSION
},
1330 { CPP_EQ_EQ
, EQ_EXPR
, PREC_EQUALITY_EXPRESSION
},
1331 { CPP_NOT_EQ
, NE_EXPR
, PREC_EQUALITY_EXPRESSION
},
1333 { CPP_AND
, BIT_AND_EXPR
, PREC_AND_EXPRESSION
},
1335 { CPP_XOR
, BIT_XOR_EXPR
, PREC_EXCLUSIVE_OR_EXPRESSION
},
1337 { CPP_OR
, BIT_IOR_EXPR
, PREC_INCLUSIVE_OR_EXPRESSION
},
1339 { CPP_AND_AND
, TRUTH_ANDIF_EXPR
, PREC_LOGICAL_AND_EXPRESSION
},
1341 { CPP_OR_OR
, TRUTH_ORIF_EXPR
, PREC_LOGICAL_OR_EXPRESSION
}
1344 /* The same as binops, but initialized by cp_parser_new so that
1345 binops_by_token[N].token_type == N. Used in cp_parser_binary_expression
1347 static cp_parser_binary_operations_map_node binops_by_token
[N_CP_TTYPES
];
1349 /* Constructors and destructors. */
1351 /* Construct a new context. The context below this one on the stack
1352 is given by NEXT. */
1354 static cp_parser_context
*
1355 cp_parser_context_new (cp_parser_context
* next
)
1357 cp_parser_context
*context
;
1359 /* Allocate the storage. */
1360 if (cp_parser_context_free_list
!= NULL
)
1362 /* Pull the first entry from the free list. */
1363 context
= cp_parser_context_free_list
;
1364 cp_parser_context_free_list
= context
->next
;
1365 memset (context
, 0, sizeof (*context
));
1368 context
= GGC_CNEW (cp_parser_context
);
1370 /* No errors have occurred yet in this context. */
1371 context
->status
= CP_PARSER_STATUS_KIND_NO_ERROR
;
1372 /* If this is not the bottomost context, copy information that we
1373 need from the previous context. */
1376 /* If, in the NEXT context, we are parsing an `x->' or `x.'
1377 expression, then we are parsing one in this context, too. */
1378 context
->object_type
= next
->object_type
;
1379 /* Thread the stack. */
1380 context
->next
= next
;
1386 /* The cp_parser structure represents the C++ parser. */
1388 typedef struct cp_parser
GTY(())
1390 /* The lexer from which we are obtaining tokens. */
1393 /* The scope in which names should be looked up. If NULL_TREE, then
1394 we look up names in the scope that is currently open in the
1395 source program. If non-NULL, this is either a TYPE or
1396 NAMESPACE_DECL for the scope in which we should look. It can
1397 also be ERROR_MARK, when we've parsed a bogus scope.
1399 This value is not cleared automatically after a name is looked
1400 up, so we must be careful to clear it before starting a new look
1401 up sequence. (If it is not cleared, then `X::Y' followed by `Z'
1402 will look up `Z' in the scope of `X', rather than the current
1403 scope.) Unfortunately, it is difficult to tell when name lookup
1404 is complete, because we sometimes peek at a token, look it up,
1405 and then decide not to consume it. */
1408 /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1409 last lookup took place. OBJECT_SCOPE is used if an expression
1410 like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1411 respectively. QUALIFYING_SCOPE is used for an expression of the
1412 form "X::Y"; it refers to X. */
1414 tree qualifying_scope
;
1416 /* A stack of parsing contexts. All but the bottom entry on the
1417 stack will be tentative contexts.
1419 We parse tentatively in order to determine which construct is in
1420 use in some situations. For example, in order to determine
1421 whether a statement is an expression-statement or a
1422 declaration-statement we parse it tentatively as a
1423 declaration-statement. If that fails, we then reparse the same
1424 token stream as an expression-statement. */
1425 cp_parser_context
*context
;
1427 /* True if we are parsing GNU C++. If this flag is not set, then
1428 GNU extensions are not recognized. */
1429 bool allow_gnu_extensions_p
;
1431 /* TRUE if the `>' token should be interpreted as the greater-than
1432 operator. FALSE if it is the end of a template-id or
1433 template-parameter-list. In C++0x mode, this flag also applies to
1434 `>>' tokens, which are viewed as two consecutive `>' tokens when
1435 this flag is FALSE. */
1436 bool greater_than_is_operator_p
;
1438 /* TRUE if default arguments are allowed within a parameter list
1439 that starts at this point. FALSE if only a gnu extension makes
1440 them permissible. */
1441 bool default_arg_ok_p
;
1443 /* TRUE if we are parsing an integral constant-expression. See
1444 [expr.const] for a precise definition. */
1445 bool integral_constant_expression_p
;
1447 /* TRUE if we are parsing an integral constant-expression -- but a
1448 non-constant expression should be permitted as well. This flag
1449 is used when parsing an array bound so that GNU variable-length
1450 arrays are tolerated. */
1451 bool allow_non_integral_constant_expression_p
;
1453 /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1454 been seen that makes the expression non-constant. */
1455 bool non_integral_constant_expression_p
;
1457 /* TRUE if local variable names and `this' are forbidden in the
1459 bool local_variables_forbidden_p
;
1461 /* TRUE if the declaration we are parsing is part of a
1462 linkage-specification of the form `extern string-literal
1464 bool in_unbraced_linkage_specification_p
;
1466 /* TRUE if we are presently parsing a declarator, after the
1467 direct-declarator. */
1468 bool in_declarator_p
;
1470 /* TRUE if we are presently parsing a template-argument-list. */
1471 bool in_template_argument_list_p
;
1473 /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1474 to IN_OMP_BLOCK if parsing OpenMP structured block and
1475 IN_OMP_FOR if parsing OpenMP loop. If parsing a switch statement,
1476 this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1477 iteration-statement, OpenMP block or loop within that switch. */
1478 #define IN_SWITCH_STMT 1
1479 #define IN_ITERATION_STMT 2
1480 #define IN_OMP_BLOCK 4
1481 #define IN_OMP_FOR 8
1482 #define IN_IF_STMT 16
1483 unsigned char in_statement
;
1485 /* TRUE if we are presently parsing the body of a switch statement.
1486 Note that this doesn't quite overlap with in_statement above.
1487 The difference relates to giving the right sets of error messages:
1488 "case not in switch" vs "break statement used with OpenMP...". */
1489 bool in_switch_statement_p
;
1491 /* TRUE if we are parsing a type-id in an expression context. In
1492 such a situation, both "type (expr)" and "type (type)" are valid
1494 bool in_type_id_in_expr_p
;
1496 /* TRUE if we are currently in a header file where declarations are
1497 implicitly extern "C". */
1498 bool implicit_extern_c
;
1500 /* TRUE if strings in expressions should be translated to the execution
1502 bool translate_strings_p
;
1504 /* TRUE if we are presently parsing the body of a function, but not
1506 bool in_function_body
;
1508 /* If non-NULL, then we are parsing a construct where new type
1509 definitions are not permitted. The string stored here will be
1510 issued as an error message if a type is defined. */
1511 const char *type_definition_forbidden_message
;
1513 /* A list of lists. The outer list is a stack, used for member
1514 functions of local classes. At each level there are two sub-list,
1515 one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1516 sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1517 TREE_VALUE's. The functions are chained in reverse declaration
1520 The TREE_PURPOSE sublist contains those functions with default
1521 arguments that need post processing, and the TREE_VALUE sublist
1522 contains those functions with definitions that need post
1525 These lists can only be processed once the outermost class being
1526 defined is complete. */
1527 tree unparsed_functions_queues
;
1529 /* The number of classes whose definitions are currently in
1531 unsigned num_classes_being_defined
;
1533 /* The number of template parameter lists that apply directly to the
1534 current declaration. */
1535 unsigned num_template_parameter_lists
;
1540 /* Constructors and destructors. */
1542 static cp_parser
*cp_parser_new
1545 /* Routines to parse various constructs.
1547 Those that return `tree' will return the error_mark_node (rather
1548 than NULL_TREE) if a parse error occurs, unless otherwise noted.
1549 Sometimes, they will return an ordinary node if error-recovery was
1550 attempted, even though a parse error occurred. So, to check
1551 whether or not a parse error occurred, you should always use
1552 cp_parser_error_occurred. If the construct is optional (indicated
1553 either by an `_opt' in the name of the function that does the
1554 parsing or via a FLAGS parameter), then NULL_TREE is returned if
1555 the construct is not present. */
1557 /* Lexical conventions [gram.lex] */
1559 static tree cp_parser_identifier
1561 static tree cp_parser_string_literal
1562 (cp_parser
*, bool, bool);
1564 /* Basic concepts [gram.basic] */
1566 static bool cp_parser_translation_unit
1569 /* Expressions [gram.expr] */
1571 static tree cp_parser_primary_expression
1572 (cp_parser
*, bool, bool, bool, cp_id_kind
*);
1573 static tree cp_parser_id_expression
1574 (cp_parser
*, bool, bool, bool *, bool, bool);
1575 static tree cp_parser_unqualified_id
1576 (cp_parser
*, bool, bool, bool, bool);
1577 static tree cp_parser_nested_name_specifier_opt
1578 (cp_parser
*, bool, bool, bool, bool);
1579 static tree cp_parser_nested_name_specifier
1580 (cp_parser
*, bool, bool, bool, bool);
1581 static tree cp_parser_class_or_namespace_name
1582 (cp_parser
*, bool, bool, bool, bool, bool);
1583 static tree cp_parser_postfix_expression
1584 (cp_parser
*, bool, bool, bool);
1585 static tree cp_parser_postfix_open_square_expression
1586 (cp_parser
*, tree
, bool);
1587 static tree cp_parser_postfix_dot_deref_expression
1588 (cp_parser
*, enum cpp_ttype
, tree
, bool, cp_id_kind
*);
1589 static tree cp_parser_parenthesized_expression_list
1590 (cp_parser
*, bool, bool, bool, bool *);
1591 static void cp_parser_pseudo_destructor_name
1592 (cp_parser
*, tree
*, tree
*);
1593 static tree cp_parser_unary_expression
1594 (cp_parser
*, bool, bool);
1595 static enum tree_code cp_parser_unary_operator
1597 static tree cp_parser_new_expression
1599 static tree cp_parser_new_placement
1601 static tree cp_parser_new_type_id
1602 (cp_parser
*, tree
*);
1603 static cp_declarator
*cp_parser_new_declarator_opt
1605 static cp_declarator
*cp_parser_direct_new_declarator
1607 static tree cp_parser_new_initializer
1609 static tree cp_parser_delete_expression
1611 static tree cp_parser_cast_expression
1612 (cp_parser
*, bool, bool);
1613 static tree cp_parser_binary_expression
1614 (cp_parser
*, bool);
1615 static tree cp_parser_question_colon_clause
1616 (cp_parser
*, tree
);
1617 static tree cp_parser_assignment_expression
1618 (cp_parser
*, bool);
1619 static enum tree_code cp_parser_assignment_operator_opt
1621 static tree cp_parser_expression
1622 (cp_parser
*, bool);
1623 static tree cp_parser_constant_expression
1624 (cp_parser
*, bool, bool *);
1625 static tree cp_parser_builtin_offsetof
1628 /* Statements [gram.stmt.stmt] */
1630 static void cp_parser_statement
1631 (cp_parser
*, tree
, bool, bool *);
1632 static void cp_parser_label_for_labeled_statement
1634 static tree cp_parser_expression_statement
1635 (cp_parser
*, tree
);
1636 static tree cp_parser_compound_statement
1637 (cp_parser
*, tree
, bool);
1638 static void cp_parser_statement_seq_opt
1639 (cp_parser
*, tree
);
1640 static tree cp_parser_selection_statement
1641 (cp_parser
*, bool *);
1642 static tree cp_parser_condition
1644 static tree cp_parser_iteration_statement
1646 static void cp_parser_for_init_statement
1648 static tree cp_parser_jump_statement
1650 static void cp_parser_declaration_statement
1653 static tree cp_parser_implicitly_scoped_statement
1654 (cp_parser
*, bool *);
1655 static void cp_parser_already_scoped_statement
1658 /* Declarations [gram.dcl.dcl] */
1660 static void cp_parser_declaration_seq_opt
1662 static void cp_parser_declaration
1664 static void cp_parser_block_declaration
1665 (cp_parser
*, bool);
1666 static void cp_parser_simple_declaration
1667 (cp_parser
*, bool);
1668 static void cp_parser_decl_specifier_seq
1669 (cp_parser
*, cp_parser_flags
, cp_decl_specifier_seq
*, int *);
1670 static tree cp_parser_storage_class_specifier_opt
1672 static tree cp_parser_function_specifier_opt
1673 (cp_parser
*, cp_decl_specifier_seq
*);
1674 static tree cp_parser_type_specifier
1675 (cp_parser
*, cp_parser_flags
, cp_decl_specifier_seq
*, bool,
1677 static tree cp_parser_simple_type_specifier
1678 (cp_parser
*, cp_decl_specifier_seq
*, cp_parser_flags
);
1679 static tree cp_parser_type_name
1681 static tree cp_parser_nonclass_name
1682 (cp_parser
* parser
);
1683 static tree cp_parser_elaborated_type_specifier
1684 (cp_parser
*, bool, bool);
1685 static tree cp_parser_enum_specifier
1687 static void cp_parser_enumerator_list
1688 (cp_parser
*, tree
);
1689 static void cp_parser_enumerator_definition
1690 (cp_parser
*, tree
);
1691 static tree cp_parser_namespace_name
1693 static void cp_parser_namespace_definition
1695 static void cp_parser_namespace_body
1697 static tree cp_parser_qualified_namespace_specifier
1699 static void cp_parser_namespace_alias_definition
1701 static bool cp_parser_using_declaration
1702 (cp_parser
*, bool);
1703 static void cp_parser_using_directive
1705 static void cp_parser_asm_definition
1707 static void cp_parser_linkage_specification
1709 static void cp_parser_static_assert
1710 (cp_parser
*, bool);
1711 static tree cp_parser_decltype
1714 /* Declarators [gram.dcl.decl] */
1716 static tree cp_parser_init_declarator
1717 (cp_parser
*, cp_decl_specifier_seq
*, VEC (deferred_access_check
,gc
)*, bool, bool, int, bool *);
1718 static cp_declarator
*cp_parser_declarator
1719 (cp_parser
*, cp_parser_declarator_kind
, int *, bool *, bool);
1720 static cp_declarator
*cp_parser_direct_declarator
1721 (cp_parser
*, cp_parser_declarator_kind
, int *, bool);
1722 static enum tree_code cp_parser_ptr_operator
1723 (cp_parser
*, tree
*, cp_cv_quals
*);
1724 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1726 static tree cp_parser_declarator_id
1727 (cp_parser
*, bool);
1728 static tree cp_parser_type_id
1730 static void cp_parser_type_specifier_seq
1731 (cp_parser
*, bool, cp_decl_specifier_seq
*);
1732 static cp_parameter_declarator
*cp_parser_parameter_declaration_clause
1734 static cp_parameter_declarator
*cp_parser_parameter_declaration_list
1735 (cp_parser
*, bool *);
1736 static cp_parameter_declarator
*cp_parser_parameter_declaration
1737 (cp_parser
*, bool, bool *);
1738 static tree cp_parser_default_argument
1739 (cp_parser
*, bool);
1740 static void cp_parser_function_body
1742 static tree cp_parser_initializer
1743 (cp_parser
*, bool *, bool *);
1744 static tree cp_parser_initializer_clause
1745 (cp_parser
*, bool *);
1746 static VEC(constructor_elt
,gc
) *cp_parser_initializer_list
1747 (cp_parser
*, bool *);
1749 static bool cp_parser_ctor_initializer_opt_and_function_body
1752 /* Classes [gram.class] */
1754 static tree cp_parser_class_name
1755 (cp_parser
*, bool, bool, enum tag_types
, bool, bool, bool);
1756 static tree cp_parser_class_specifier
1758 static tree cp_parser_class_head
1759 (cp_parser
*, bool *, tree
*, tree
*);
1760 static enum tag_types cp_parser_class_key
1762 static void cp_parser_member_specification_opt
1764 static void cp_parser_member_declaration
1766 static tree cp_parser_pure_specifier
1768 static tree cp_parser_constant_initializer
1771 /* Derived classes [gram.class.derived] */
1773 static tree cp_parser_base_clause
1775 static tree cp_parser_base_specifier
1778 /* Special member functions [gram.special] */
1780 static tree cp_parser_conversion_function_id
1782 static tree cp_parser_conversion_type_id
1784 static cp_declarator
*cp_parser_conversion_declarator_opt
1786 static bool cp_parser_ctor_initializer_opt
1788 static void cp_parser_mem_initializer_list
1790 static tree cp_parser_mem_initializer
1792 static tree cp_parser_mem_initializer_id
1795 /* Overloading [gram.over] */
1797 static tree cp_parser_operator_function_id
1799 static tree cp_parser_operator
1802 /* Templates [gram.temp] */
1804 static void cp_parser_template_declaration
1805 (cp_parser
*, bool);
1806 static tree cp_parser_template_parameter_list
1808 static tree cp_parser_template_parameter
1809 (cp_parser
*, bool *, bool *);
1810 static tree cp_parser_type_parameter
1811 (cp_parser
*, bool *);
1812 static tree cp_parser_template_id
1813 (cp_parser
*, bool, bool, bool);
1814 static tree cp_parser_template_name
1815 (cp_parser
*, bool, bool, bool, bool *);
1816 static tree cp_parser_template_argument_list
1818 static tree cp_parser_template_argument
1820 static void cp_parser_explicit_instantiation
1822 static void cp_parser_explicit_specialization
1825 /* Exception handling [gram.exception] */
1827 static tree cp_parser_try_block
1829 static bool cp_parser_function_try_block
1831 static void cp_parser_handler_seq
1833 static void cp_parser_handler
1835 static tree cp_parser_exception_declaration
1837 static tree cp_parser_throw_expression
1839 static tree cp_parser_exception_specification_opt
1841 static tree cp_parser_type_id_list
1844 /* GNU Extensions */
1846 static tree cp_parser_asm_specification_opt
1848 static tree cp_parser_asm_operand_list
1850 static tree cp_parser_asm_clobber_list
1852 static tree cp_parser_attributes_opt
1854 static tree cp_parser_attribute_list
1856 static bool cp_parser_extension_opt
1857 (cp_parser
*, int *);
1858 static void cp_parser_label_declaration
1861 enum pragma_context
{ pragma_external
, pragma_stmt
, pragma_compound
};
1862 static bool cp_parser_pragma
1863 (cp_parser
*, enum pragma_context
);
1865 /* Objective-C++ Productions */
1867 static tree cp_parser_objc_message_receiver
1869 static tree cp_parser_objc_message_args
1871 static tree cp_parser_objc_message_expression
1873 static tree cp_parser_objc_encode_expression
1875 static tree cp_parser_objc_defs_expression
1877 static tree cp_parser_objc_protocol_expression
1879 static tree cp_parser_objc_selector_expression
1881 static tree cp_parser_objc_expression
1883 static bool cp_parser_objc_selector_p
1885 static tree cp_parser_objc_selector
1887 static tree cp_parser_objc_protocol_refs_opt
1889 static void cp_parser_objc_declaration
1891 static tree cp_parser_objc_statement
1894 /* Utility Routines */
1896 static tree cp_parser_lookup_name
1897 (cp_parser
*, tree
, enum tag_types
, bool, bool, bool, tree
*);
1898 static tree cp_parser_lookup_name_simple
1899 (cp_parser
*, tree
);
1900 static tree cp_parser_maybe_treat_template_as_class
1902 static bool cp_parser_check_declarator_template_parameters
1903 (cp_parser
*, cp_declarator
*);
1904 static bool cp_parser_check_template_parameters
1905 (cp_parser
*, unsigned);
1906 static tree cp_parser_simple_cast_expression
1908 static tree cp_parser_global_scope_opt
1909 (cp_parser
*, bool);
1910 static bool cp_parser_constructor_declarator_p
1911 (cp_parser
*, bool);
1912 static tree cp_parser_function_definition_from_specifiers_and_declarator
1913 (cp_parser
*, cp_decl_specifier_seq
*, tree
, const cp_declarator
*);
1914 static tree cp_parser_function_definition_after_declarator
1915 (cp_parser
*, bool);
1916 static void cp_parser_template_declaration_after_export
1917 (cp_parser
*, bool);
1918 static void cp_parser_perform_template_parameter_access_checks
1919 (VEC (deferred_access_check
,gc
)*);
1920 static tree cp_parser_single_declaration
1921 (cp_parser
*, VEC (deferred_access_check
,gc
)*, bool, bool, bool *);
1922 static tree cp_parser_functional_cast
1923 (cp_parser
*, tree
);
1924 static tree cp_parser_save_member_function_body
1925 (cp_parser
*, cp_decl_specifier_seq
*, cp_declarator
*, tree
);
1926 static tree cp_parser_enclosed_template_argument_list
1928 static void cp_parser_save_default_args
1929 (cp_parser
*, tree
);
1930 static void cp_parser_late_parsing_for_member
1931 (cp_parser
*, tree
);
1932 static void cp_parser_late_parsing_default_args
1933 (cp_parser
*, tree
);
1934 static tree cp_parser_sizeof_operand
1935 (cp_parser
*, enum rid
);
1936 static tree cp_parser_trait_expr
1937 (cp_parser
*, enum rid
);
1938 static bool cp_parser_declares_only_class_p
1940 static void cp_parser_set_storage_class
1941 (cp_parser
*, cp_decl_specifier_seq
*, enum rid
);
1942 static void cp_parser_set_decl_spec_type
1943 (cp_decl_specifier_seq
*, tree
, bool);
1944 static bool cp_parser_friend_p
1945 (const cp_decl_specifier_seq
*);
1946 static cp_token
*cp_parser_require
1947 (cp_parser
*, enum cpp_ttype
, const char *);
1948 static cp_token
*cp_parser_require_keyword
1949 (cp_parser
*, enum rid
, const char *);
1950 static bool cp_parser_token_starts_function_definition_p
1952 static bool cp_parser_next_token_starts_class_definition_p
1954 static bool cp_parser_next_token_ends_template_argument_p
1956 static bool cp_parser_nth_token_starts_template_argument_list_p
1957 (cp_parser
*, size_t);
1958 static enum tag_types cp_parser_token_is_class_key
1960 static void cp_parser_check_class_key
1961 (enum tag_types
, tree type
);
1962 static void cp_parser_check_access_in_redeclaration
1964 static bool cp_parser_optional_template_keyword
1966 static void cp_parser_pre_parsed_nested_name_specifier
1968 static void cp_parser_cache_group
1969 (cp_parser
*, enum cpp_ttype
, unsigned);
1970 static void cp_parser_parse_tentatively
1972 static void cp_parser_commit_to_tentative_parse
1974 static void cp_parser_abort_tentative_parse
1976 static bool cp_parser_parse_definitely
1978 static inline bool cp_parser_parsing_tentatively
1980 static bool cp_parser_uncommitted_to_tentative_parse_p
1982 static void cp_parser_error
1983 (cp_parser
*, const char *);
1984 static void cp_parser_name_lookup_error
1985 (cp_parser
*, tree
, tree
, const char *);
1986 static bool cp_parser_simulate_error
1988 static bool cp_parser_check_type_definition
1990 static void cp_parser_check_for_definition_in_return_type
1991 (cp_declarator
*, tree
);
1992 static void cp_parser_check_for_invalid_template_id
1993 (cp_parser
*, tree
);
1994 static bool cp_parser_non_integral_constant_expression
1995 (cp_parser
*, const char *);
1996 static void cp_parser_diagnose_invalid_type_name
1997 (cp_parser
*, tree
, tree
);
1998 static bool cp_parser_parse_and_diagnose_invalid_type_name
2000 static int cp_parser_skip_to_closing_parenthesis
2001 (cp_parser
*, bool, bool, bool);
2002 static void cp_parser_skip_to_end_of_statement
2004 static void cp_parser_consume_semicolon_at_end_of_statement
2006 static void cp_parser_skip_to_end_of_block_or_statement
2008 static bool cp_parser_skip_to_closing_brace
2010 static void cp_parser_skip_to_end_of_template_parameter_list
2012 static void cp_parser_skip_to_pragma_eol
2013 (cp_parser
*, cp_token
*);
2014 static bool cp_parser_error_occurred
2016 static bool cp_parser_allow_gnu_extensions_p
2018 static bool cp_parser_is_string_literal
2020 static bool cp_parser_is_keyword
2021 (cp_token
*, enum rid
);
2022 static tree cp_parser_make_typename_type
2023 (cp_parser
*, tree
, tree
);
2024 static cp_declarator
* cp_parser_make_indirect_declarator
2025 (enum tree_code
, tree
, cp_cv_quals
, cp_declarator
*);
2027 /* Returns nonzero if we are parsing tentatively. */
2030 cp_parser_parsing_tentatively (cp_parser
* parser
)
2032 return parser
->context
->next
!= NULL
;
2035 /* Returns nonzero if TOKEN is a string literal. */
2038 cp_parser_is_string_literal (cp_token
* token
)
2040 return (token
->type
== CPP_STRING
||
2041 token
->type
== CPP_STRING16
||
2042 token
->type
== CPP_STRING32
||
2043 token
->type
== CPP_WSTRING
);
2046 /* Returns nonzero if TOKEN is the indicated KEYWORD. */
2049 cp_parser_is_keyword (cp_token
* token
, enum rid keyword
)
2051 return token
->keyword
== keyword
;
2054 /* If not parsing tentatively, issue a diagnostic of the form
2055 FILE:LINE: MESSAGE before TOKEN
2056 where TOKEN is the next token in the input stream. MESSAGE
2057 (specified by the caller) is usually of the form "expected
2061 cp_parser_error (cp_parser
* parser
, const char* message
)
2063 if (!cp_parser_simulate_error (parser
))
2065 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
2066 /* This diagnostic makes more sense if it is tagged to the line
2067 of the token we just peeked at. */
2068 cp_lexer_set_source_position_from_token (token
);
2070 if (token
->type
== CPP_PRAGMA
)
2072 error ("%<#pragma%> is not allowed here");
2073 cp_parser_skip_to_pragma_eol (parser
, token
);
2077 c_parse_error (message
,
2078 /* Because c_parser_error does not understand
2079 CPP_KEYWORD, keywords are treated like
2081 (token
->type
== CPP_KEYWORD
? CPP_NAME
: token
->type
),
2086 /* Issue an error about name-lookup failing. NAME is the
2087 IDENTIFIER_NODE DECL is the result of
2088 the lookup (as returned from cp_parser_lookup_name). DESIRED is
2089 the thing that we hoped to find. */
2092 cp_parser_name_lookup_error (cp_parser
* parser
,
2095 const char* desired
)
2097 /* If name lookup completely failed, tell the user that NAME was not
2099 if (decl
== error_mark_node
)
2101 if (parser
->scope
&& parser
->scope
!= global_namespace
)
2102 error ("%<%E::%E%> has not been declared",
2103 parser
->scope
, name
);
2104 else if (parser
->scope
== global_namespace
)
2105 error ("%<::%E%> has not been declared", name
);
2106 else if (parser
->object_scope
2107 && !CLASS_TYPE_P (parser
->object_scope
))
2108 error ("request for member %qE in non-class type %qT",
2109 name
, parser
->object_scope
);
2110 else if (parser
->object_scope
)
2111 error ("%<%T::%E%> has not been declared",
2112 parser
->object_scope
, name
);
2114 error ("%qE has not been declared", name
);
2116 else if (parser
->scope
&& parser
->scope
!= global_namespace
)
2117 error ("%<%E::%E%> %s", parser
->scope
, name
, desired
);
2118 else if (parser
->scope
== global_namespace
)
2119 error ("%<::%E%> %s", name
, desired
);
2121 error ("%qE %s", name
, desired
);
2124 /* If we are parsing tentatively, remember that an error has occurred
2125 during this tentative parse. Returns true if the error was
2126 simulated; false if a message should be issued by the caller. */
2129 cp_parser_simulate_error (cp_parser
* parser
)
2131 if (cp_parser_uncommitted_to_tentative_parse_p (parser
))
2133 parser
->context
->status
= CP_PARSER_STATUS_KIND_ERROR
;
2139 /* Check for repeated decl-specifiers. */
2142 cp_parser_check_decl_spec (cp_decl_specifier_seq
*decl_specs
)
2146 for (ds
= ds_first
; ds
!= ds_last
; ++ds
)
2148 unsigned count
= decl_specs
->specs
[(int)ds
];
2151 /* The "long" specifier is a special case because of "long long". */
2155 error ("%<long long long%> is too long for GCC");
2156 else if (pedantic
&& !in_system_header
&& warn_long_long
2157 && cxx_dialect
== cxx98
)
2158 pedwarn ("ISO C++ 1998 does not support %<long long%>");
2162 static const char *const decl_spec_names
[] = {
2178 error ("duplicate %qs", decl_spec_names
[(int)ds
]);
2183 /* This function is called when a type is defined. If type
2184 definitions are forbidden at this point, an error message is
2188 cp_parser_check_type_definition (cp_parser
* parser
)
2190 /* If types are forbidden here, issue a message. */
2191 if (parser
->type_definition_forbidden_message
)
2193 /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2194 in the message need to be interpreted. */
2195 error (parser
->type_definition_forbidden_message
);
2201 /* This function is called when the DECLARATOR is processed. The TYPE
2202 was a type defined in the decl-specifiers. If it is invalid to
2203 define a type in the decl-specifiers for DECLARATOR, an error is
2207 cp_parser_check_for_definition_in_return_type (cp_declarator
*declarator
,
2210 /* [dcl.fct] forbids type definitions in return types.
2211 Unfortunately, it's not easy to know whether or not we are
2212 processing a return type until after the fact. */
2214 && (declarator
->kind
== cdk_pointer
2215 || declarator
->kind
== cdk_reference
2216 || declarator
->kind
== cdk_ptrmem
))
2217 declarator
= declarator
->declarator
;
2219 && declarator
->kind
== cdk_function
)
2221 error ("new types may not be defined in a return type");
2222 inform ("(perhaps a semicolon is missing after the definition of %qT)",
2227 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2228 "<" in any valid C++ program. If the next token is indeed "<",
2229 issue a message warning the user about what appears to be an
2230 invalid attempt to form a template-id. */
2233 cp_parser_check_for_invalid_template_id (cp_parser
* parser
,
2236 cp_token_position start
= 0;
2238 if (cp_lexer_next_token_is (parser
->lexer
, CPP_LESS
))
2241 error ("%qT is not a template", type
);
2242 else if (TREE_CODE (type
) == IDENTIFIER_NODE
)
2243 error ("%qE is not a template", type
);
2245 error ("invalid template-id");
2246 /* Remember the location of the invalid "<". */
2247 if (cp_parser_uncommitted_to_tentative_parse_p (parser
))
2248 start
= cp_lexer_token_position (parser
->lexer
, true);
2249 /* Consume the "<". */
2250 cp_lexer_consume_token (parser
->lexer
);
2251 /* Parse the template arguments. */
2252 cp_parser_enclosed_template_argument_list (parser
);
2253 /* Permanently remove the invalid template arguments so that
2254 this error message is not issued again. */
2256 cp_lexer_purge_tokens_after (parser
->lexer
, start
);
2260 /* If parsing an integral constant-expression, issue an error message
2261 about the fact that THING appeared and return true. Otherwise,
2262 return false. In either case, set
2263 PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P. */
2266 cp_parser_non_integral_constant_expression (cp_parser
*parser
,
2269 parser
->non_integral_constant_expression_p
= true;
2270 if (parser
->integral_constant_expression_p
)
2272 if (!parser
->allow_non_integral_constant_expression_p
)
2274 /* Don't use `%s' to print THING, because quotations (`%<', `%>')
2275 in the message need to be interpreted. */
2276 char *message
= concat (thing
,
2277 " cannot appear in a constant-expression",
2287 /* Emit a diagnostic for an invalid type name. SCOPE is the
2288 qualifying scope (or NULL, if none) for ID. This function commits
2289 to the current active tentative parse, if any. (Otherwise, the
2290 problematic construct might be encountered again later, resulting
2291 in duplicate error messages.) */
2294 cp_parser_diagnose_invalid_type_name (cp_parser
*parser
, tree scope
, tree id
)
2296 tree decl
, old_scope
;
2297 /* Try to lookup the identifier. */
2298 old_scope
= parser
->scope
;
2299 parser
->scope
= scope
;
2300 decl
= cp_parser_lookup_name_simple (parser
, id
);
2301 parser
->scope
= old_scope
;
2302 /* If the lookup found a template-name, it means that the user forgot
2303 to specify an argument list. Emit a useful error message. */
2304 if (TREE_CODE (decl
) == TEMPLATE_DECL
)
2305 error ("invalid use of template-name %qE without an argument list", decl
);
2306 else if (TREE_CODE (id
) == BIT_NOT_EXPR
)
2307 error ("invalid use of destructor %qD as a type", id
);
2308 else if (TREE_CODE (decl
) == TYPE_DECL
)
2309 /* Something like 'unsigned A a;' */
2310 error ("invalid combination of multiple type-specifiers");
2311 else if (!parser
->scope
)
2313 /* Issue an error message. */
2314 error ("%qE does not name a type", id
);
2315 /* If we're in a template class, it's possible that the user was
2316 referring to a type from a base class. For example:
2318 template <typename T> struct A { typedef T X; };
2319 template <typename T> struct B : public A<T> { X x; };
2321 The user should have said "typename A<T>::X". */
2322 if (processing_template_decl
&& current_class_type
2323 && TYPE_BINFO (current_class_type
))
2327 for (b
= TREE_CHAIN (TYPE_BINFO (current_class_type
));
2331 tree base_type
= BINFO_TYPE (b
);
2332 if (CLASS_TYPE_P (base_type
)
2333 && dependent_type_p (base_type
))
2336 /* Go from a particular instantiation of the
2337 template (which will have an empty TYPE_FIELDs),
2338 to the main version. */
2339 base_type
= CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type
);
2340 for (field
= TYPE_FIELDS (base_type
);
2342 field
= TREE_CHAIN (field
))
2343 if (TREE_CODE (field
) == TYPE_DECL
2344 && DECL_NAME (field
) == id
)
2346 inform ("(perhaps %<typename %T::%E%> was intended)",
2347 BINFO_TYPE (b
), id
);
2356 /* Here we diagnose qualified-ids where the scope is actually correct,
2357 but the identifier does not resolve to a valid type name. */
2358 else if (parser
->scope
!= error_mark_node
)
2360 if (TREE_CODE (parser
->scope
) == NAMESPACE_DECL
)
2361 error ("%qE in namespace %qE does not name a type",
2363 else if (TYPE_P (parser
->scope
))
2364 error ("%qE in class %qT does not name a type", id
, parser
->scope
);
2368 cp_parser_commit_to_tentative_parse (parser
);
2371 /* Check for a common situation where a type-name should be present,
2372 but is not, and issue a sensible error message. Returns true if an
2373 invalid type-name was detected.
2375 The situation handled by this function are variable declarations of the
2376 form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2377 Usually, `ID' should name a type, but if we got here it means that it
2378 does not. We try to emit the best possible error message depending on
2379 how exactly the id-expression looks like. */
2382 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser
*parser
)
2386 cp_parser_parse_tentatively (parser
);
2387 id
= cp_parser_id_expression (parser
,
2388 /*template_keyword_p=*/false,
2389 /*check_dependency_p=*/true,
2390 /*template_p=*/NULL
,
2391 /*declarator_p=*/true,
2392 /*optional_p=*/false);
2393 /* After the id-expression, there should be a plain identifier,
2394 otherwise this is not a simple variable declaration. Also, if
2395 the scope is dependent, we cannot do much. */
2396 if (!cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
)
2397 || (parser
->scope
&& TYPE_P (parser
->scope
)
2398 && dependent_type_p (parser
->scope
))
2399 || TREE_CODE (id
) == TYPE_DECL
)
2401 cp_parser_abort_tentative_parse (parser
);
2404 if (!cp_parser_parse_definitely (parser
))
2407 /* Emit a diagnostic for the invalid type. */
2408 cp_parser_diagnose_invalid_type_name (parser
, parser
->scope
, id
);
2409 /* Skip to the end of the declaration; there's no point in
2410 trying to process it. */
2411 cp_parser_skip_to_end_of_block_or_statement (parser
);
2415 /* Consume tokens up to, and including, the next non-nested closing `)'.
2416 Returns 1 iff we found a closing `)'. RECOVERING is true, if we
2417 are doing error recovery. Returns -1 if OR_COMMA is true and we
2418 found an unnested comma. */
2421 cp_parser_skip_to_closing_parenthesis (cp_parser
*parser
,
2426 unsigned paren_depth
= 0;
2427 unsigned brace_depth
= 0;
2429 if (recovering
&& !or_comma
2430 && cp_parser_uncommitted_to_tentative_parse_p (parser
))
2435 cp_token
* token
= cp_lexer_peek_token (parser
->lexer
);
2437 switch (token
->type
)
2440 case CPP_PRAGMA_EOL
:
2441 /* If we've run out of tokens, then there is no closing `)'. */
2445 /* This matches the processing in skip_to_end_of_statement. */
2450 case CPP_OPEN_BRACE
:
2453 case CPP_CLOSE_BRACE
:
2459 if (recovering
&& or_comma
&& !brace_depth
&& !paren_depth
)
2463 case CPP_OPEN_PAREN
:
2468 case CPP_CLOSE_PAREN
:
2469 if (!brace_depth
&& !paren_depth
--)
2472 cp_lexer_consume_token (parser
->lexer
);
2481 /* Consume the token. */
2482 cp_lexer_consume_token (parser
->lexer
);
2486 /* Consume tokens until we reach the end of the current statement.
2487 Normally, that will be just before consuming a `;'. However, if a
2488 non-nested `}' comes first, then we stop before consuming that. */
2491 cp_parser_skip_to_end_of_statement (cp_parser
* parser
)
2493 unsigned nesting_depth
= 0;
2497 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
2499 switch (token
->type
)
2502 case CPP_PRAGMA_EOL
:
2503 /* If we've run out of tokens, stop. */
2507 /* If the next token is a `;', we have reached the end of the
2513 case CPP_CLOSE_BRACE
:
2514 /* If this is a non-nested '}', stop before consuming it.
2515 That way, when confronted with something like:
2519 we stop before consuming the closing '}', even though we
2520 have not yet reached a `;'. */
2521 if (nesting_depth
== 0)
2524 /* If it is the closing '}' for a block that we have
2525 scanned, stop -- but only after consuming the token.
2531 we will stop after the body of the erroneously declared
2532 function, but before consuming the following `typedef'
2534 if (--nesting_depth
== 0)
2536 cp_lexer_consume_token (parser
->lexer
);
2540 case CPP_OPEN_BRACE
:
2548 /* Consume the token. */
2549 cp_lexer_consume_token (parser
->lexer
);
2553 /* This function is called at the end of a statement or declaration.
2554 If the next token is a semicolon, it is consumed; otherwise, error
2555 recovery is attempted. */
2558 cp_parser_consume_semicolon_at_end_of_statement (cp_parser
*parser
)
2560 /* Look for the trailing `;'. */
2561 if (!cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>"))
2563 /* If there is additional (erroneous) input, skip to the end of
2565 cp_parser_skip_to_end_of_statement (parser
);
2566 /* If the next token is now a `;', consume it. */
2567 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
))
2568 cp_lexer_consume_token (parser
->lexer
);
2572 /* Skip tokens until we have consumed an entire block, or until we
2573 have consumed a non-nested `;'. */
2576 cp_parser_skip_to_end_of_block_or_statement (cp_parser
* parser
)
2578 int nesting_depth
= 0;
2580 while (nesting_depth
>= 0)
2582 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
2584 switch (token
->type
)
2587 case CPP_PRAGMA_EOL
:
2588 /* If we've run out of tokens, stop. */
2592 /* Stop if this is an unnested ';'. */
2597 case CPP_CLOSE_BRACE
:
2598 /* Stop if this is an unnested '}', or closes the outermost
2605 case CPP_OPEN_BRACE
:
2614 /* Consume the token. */
2615 cp_lexer_consume_token (parser
->lexer
);
2619 /* Skip tokens until a non-nested closing curly brace is the next
2620 token, or there are no more tokens. Return true in the first case,
2624 cp_parser_skip_to_closing_brace (cp_parser
*parser
)
2626 unsigned nesting_depth
= 0;
2630 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
2632 switch (token
->type
)
2635 case CPP_PRAGMA_EOL
:
2636 /* If we've run out of tokens, stop. */
2639 case CPP_CLOSE_BRACE
:
2640 /* If the next token is a non-nested `}', then we have reached
2641 the end of the current block. */
2642 if (nesting_depth
-- == 0)
2646 case CPP_OPEN_BRACE
:
2647 /* If it the next token is a `{', then we are entering a new
2648 block. Consume the entire block. */
2656 /* Consume the token. */
2657 cp_lexer_consume_token (parser
->lexer
);
2661 /* Consume tokens until we reach the end of the pragma. The PRAGMA_TOK
2662 parameter is the PRAGMA token, allowing us to purge the entire pragma
2666 cp_parser_skip_to_pragma_eol (cp_parser
* parser
, cp_token
*pragma_tok
)
2670 parser
->lexer
->in_pragma
= false;
2673 token
= cp_lexer_consume_token (parser
->lexer
);
2674 while (token
->type
!= CPP_PRAGMA_EOL
&& token
->type
!= CPP_EOF
);
2676 /* Ensure that the pragma is not parsed again. */
2677 cp_lexer_purge_tokens_after (parser
->lexer
, pragma_tok
);
2680 /* Require pragma end of line, resyncing with it as necessary. The
2681 arguments are as for cp_parser_skip_to_pragma_eol. */
2684 cp_parser_require_pragma_eol (cp_parser
*parser
, cp_token
*pragma_tok
)
2686 parser
->lexer
->in_pragma
= false;
2687 if (!cp_parser_require (parser
, CPP_PRAGMA_EOL
, "end of line"))
2688 cp_parser_skip_to_pragma_eol (parser
, pragma_tok
);
2691 /* This is a simple wrapper around make_typename_type. When the id is
2692 an unresolved identifier node, we can provide a superior diagnostic
2693 using cp_parser_diagnose_invalid_type_name. */
2696 cp_parser_make_typename_type (cp_parser
*parser
, tree scope
, tree id
)
2699 if (TREE_CODE (id
) == IDENTIFIER_NODE
)
2701 result
= make_typename_type (scope
, id
, typename_type
,
2702 /*complain=*/tf_none
);
2703 if (result
== error_mark_node
)
2704 cp_parser_diagnose_invalid_type_name (parser
, scope
, id
);
2707 return make_typename_type (scope
, id
, typename_type
, tf_error
);
2710 /* This is a wrapper around the
2711 make_{pointer,ptrmem,reference}_declarator functions that decides
2712 which one to call based on the CODE and CLASS_TYPE arguments. The
2713 CODE argument should be one of the values returned by
2714 cp_parser_ptr_operator. */
2715 static cp_declarator
*
2716 cp_parser_make_indirect_declarator (enum tree_code code
, tree class_type
,
2717 cp_cv_quals cv_qualifiers
,
2718 cp_declarator
*target
)
2720 if (code
== ERROR_MARK
)
2721 return cp_error_declarator
;
2723 if (code
== INDIRECT_REF
)
2724 if (class_type
== NULL_TREE
)
2725 return make_pointer_declarator (cv_qualifiers
, target
);
2727 return make_ptrmem_declarator (cv_qualifiers
, class_type
, target
);
2728 else if (code
== ADDR_EXPR
&& class_type
== NULL_TREE
)
2729 return make_reference_declarator (cv_qualifiers
, target
, false);
2730 else if (code
== NON_LVALUE_EXPR
&& class_type
== NULL_TREE
)
2731 return make_reference_declarator (cv_qualifiers
, target
, true);
2735 /* Create a new C++ parser. */
2738 cp_parser_new (void)
2744 /* cp_lexer_new_main is called before calling ggc_alloc because
2745 cp_lexer_new_main might load a PCH file. */
2746 lexer
= cp_lexer_new_main ();
2748 /* Initialize the binops_by_token so that we can get the tree
2749 directly from the token. */
2750 for (i
= 0; i
< sizeof (binops
) / sizeof (binops
[0]); i
++)
2751 binops_by_token
[binops
[i
].token_type
] = binops
[i
];
2753 parser
= GGC_CNEW (cp_parser
);
2754 parser
->lexer
= lexer
;
2755 parser
->context
= cp_parser_context_new (NULL
);
2757 /* For now, we always accept GNU extensions. */
2758 parser
->allow_gnu_extensions_p
= 1;
2760 /* The `>' token is a greater-than operator, not the end of a
2762 parser
->greater_than_is_operator_p
= true;
2764 parser
->default_arg_ok_p
= true;
2766 /* We are not parsing a constant-expression. */
2767 parser
->integral_constant_expression_p
= false;
2768 parser
->allow_non_integral_constant_expression_p
= false;
2769 parser
->non_integral_constant_expression_p
= false;
2771 /* Local variable names are not forbidden. */
2772 parser
->local_variables_forbidden_p
= false;
2774 /* We are not processing an `extern "C"' declaration. */
2775 parser
->in_unbraced_linkage_specification_p
= false;
2777 /* We are not processing a declarator. */
2778 parser
->in_declarator_p
= false;
2780 /* We are not processing a template-argument-list. */
2781 parser
->in_template_argument_list_p
= false;
2783 /* We are not in an iteration statement. */
2784 parser
->in_statement
= 0;
2786 /* We are not in a switch statement. */
2787 parser
->in_switch_statement_p
= false;
2789 /* We are not parsing a type-id inside an expression. */
2790 parser
->in_type_id_in_expr_p
= false;
2792 /* Declarations aren't implicitly extern "C". */
2793 parser
->implicit_extern_c
= false;
2795 /* String literals should be translated to the execution character set. */
2796 parser
->translate_strings_p
= true;
2798 /* We are not parsing a function body. */
2799 parser
->in_function_body
= false;
2801 /* The unparsed function queue is empty. */
2802 parser
->unparsed_functions_queues
= build_tree_list (NULL_TREE
, NULL_TREE
);
2804 /* There are no classes being defined. */
2805 parser
->num_classes_being_defined
= 0;
2807 /* No template parameters apply. */
2808 parser
->num_template_parameter_lists
= 0;
2813 /* Create a cp_lexer structure which will emit the tokens in CACHE
2814 and push it onto the parser's lexer stack. This is used for delayed
2815 parsing of in-class method bodies and default arguments, and should
2816 not be confused with tentative parsing. */
2818 cp_parser_push_lexer_for_tokens (cp_parser
*parser
, cp_token_cache
*cache
)
2820 cp_lexer
*lexer
= cp_lexer_new_from_tokens (cache
);
2821 lexer
->next
= parser
->lexer
;
2822 parser
->lexer
= lexer
;
2824 /* Move the current source position to that of the first token in the
2826 cp_lexer_set_source_position_from_token (lexer
->next_token
);
2829 /* Pop the top lexer off the parser stack. This is never used for the
2830 "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens. */
2832 cp_parser_pop_lexer (cp_parser
*parser
)
2834 cp_lexer
*lexer
= parser
->lexer
;
2835 parser
->lexer
= lexer
->next
;
2836 cp_lexer_destroy (lexer
);
2838 /* Put the current source position back where it was before this
2839 lexer was pushed. */
2840 cp_lexer_set_source_position_from_token (parser
->lexer
->next_token
);
2843 /* Lexical conventions [gram.lex] */
2845 /* Parse an identifier. Returns an IDENTIFIER_NODE representing the
2849 cp_parser_identifier (cp_parser
* parser
)
2853 /* Look for the identifier. */
2854 token
= cp_parser_require (parser
, CPP_NAME
, "identifier");
2855 /* Return the value. */
2856 return token
? token
->u
.value
: error_mark_node
;
2859 /* Parse a sequence of adjacent string constants. Returns a
2860 TREE_STRING representing the combined, nul-terminated string
2861 constant. If TRANSLATE is true, translate the string to the
2862 execution character set. If WIDE_OK is true, a wide string is
2865 C++98 [lex.string] says that if a narrow string literal token is
2866 adjacent to a wide string literal token, the behavior is undefined.
2867 However, C99 6.4.5p4 says that this results in a wide string literal.
2868 We follow C99 here, for consistency with the C front end.
2870 This code is largely lifted from lex_string() in c-lex.c.
2872 FUTURE: ObjC++ will need to handle @-strings here. */
2874 cp_parser_string_literal (cp_parser
*parser
, bool translate
, bool wide_ok
)
2878 struct obstack str_ob
;
2879 cpp_string str
, istr
, *strs
;
2881 enum cpp_ttype type
;
2883 tok
= cp_lexer_peek_token (parser
->lexer
);
2884 if (!cp_parser_is_string_literal (tok
))
2886 cp_parser_error (parser
, "expected string-literal");
2887 return error_mark_node
;
2892 /* Try to avoid the overhead of creating and destroying an obstack
2893 for the common case of just one string. */
2894 if (!cp_parser_is_string_literal
2895 (cp_lexer_peek_nth_token (parser
->lexer
, 2)))
2897 cp_lexer_consume_token (parser
->lexer
);
2899 str
.text
= (const unsigned char *)TREE_STRING_POINTER (tok
->u
.value
);
2900 str
.len
= TREE_STRING_LENGTH (tok
->u
.value
);
2907 gcc_obstack_init (&str_ob
);
2912 cp_lexer_consume_token (parser
->lexer
);
2914 str
.text
= (const unsigned char *)TREE_STRING_POINTER (tok
->u
.value
);
2915 str
.len
= TREE_STRING_LENGTH (tok
->u
.value
);
2917 if (type
!= tok
->type
)
2919 if (type
== CPP_STRING
)
2921 else if (tok
->type
!= CPP_STRING
)
2922 error ("unsupported non-standard concatenation of string literals");
2925 obstack_grow (&str_ob
, &str
, sizeof (cpp_string
));
2927 tok
= cp_lexer_peek_token (parser
->lexer
);
2929 while (cp_parser_is_string_literal (tok
));
2931 strs
= (cpp_string
*) obstack_finish (&str_ob
);
2934 if (type
!= CPP_STRING
&& !wide_ok
)
2936 cp_parser_error (parser
, "a wide string is invalid in this context");
2940 if ((translate
? cpp_interpret_string
: cpp_interpret_string_notranslate
)
2941 (parse_in
, strs
, count
, &istr
, type
))
2943 value
= build_string (istr
.len
, (const char *)istr
.text
);
2944 free (CONST_CAST (unsigned char *, istr
.text
));
2950 TREE_TYPE (value
) = char_array_type_node
;
2953 TREE_TYPE (value
) = char16_array_type_node
;
2956 TREE_TYPE (value
) = char32_array_type_node
;
2959 TREE_TYPE (value
) = wchar_array_type_node
;
2963 value
= fix_string_type (value
);
2966 /* cpp_interpret_string has issued an error. */
2967 value
= error_mark_node
;
2970 obstack_free (&str_ob
, 0);
2976 /* Basic concepts [gram.basic] */
2978 /* Parse a translation-unit.
2981 declaration-seq [opt]
2983 Returns TRUE if all went well. */
2986 cp_parser_translation_unit (cp_parser
* parser
)
2988 /* The address of the first non-permanent object on the declarator
2990 static void *declarator_obstack_base
;
2994 /* Create the declarator obstack, if necessary. */
2995 if (!cp_error_declarator
)
2997 gcc_obstack_init (&declarator_obstack
);
2998 /* Create the error declarator. */
2999 cp_error_declarator
= make_declarator (cdk_error
);
3000 /* Create the empty parameter list. */
3001 no_parameters
= make_parameter_declarator (NULL
, NULL
, NULL_TREE
);
3002 /* Remember where the base of the declarator obstack lies. */
3003 declarator_obstack_base
= obstack_next_free (&declarator_obstack
);
3006 cp_parser_declaration_seq_opt (parser
);
3008 /* If there are no tokens left then all went well. */
3009 if (cp_lexer_next_token_is (parser
->lexer
, CPP_EOF
))
3011 /* Get rid of the token array; we don't need it any more. */
3012 cp_lexer_destroy (parser
->lexer
);
3013 parser
->lexer
= NULL
;
3015 /* This file might have been a context that's implicitly extern
3016 "C". If so, pop the lang context. (Only relevant for PCH.) */
3017 if (parser
->implicit_extern_c
)
3019 pop_lang_context ();
3020 parser
->implicit_extern_c
= false;
3024 finish_translation_unit ();
3030 cp_parser_error (parser
, "expected declaration");
3034 /* Make sure the declarator obstack was fully cleaned up. */
3035 gcc_assert (obstack_next_free (&declarator_obstack
)
3036 == declarator_obstack_base
);
3038 /* All went well. */
3042 /* Expressions [gram.expr] */
3044 /* Parse a primary-expression.
3055 ( compound-statement )
3056 __builtin_va_arg ( assignment-expression , type-id )
3057 __builtin_offsetof ( type-id , offsetof-expression )
3060 __has_nothrow_assign ( type-id )
3061 __has_nothrow_constructor ( type-id )
3062 __has_nothrow_copy ( type-id )
3063 __has_trivial_assign ( type-id )
3064 __has_trivial_constructor ( type-id )
3065 __has_trivial_copy ( type-id )
3066 __has_trivial_destructor ( type-id )
3067 __has_virtual_destructor ( type-id )
3068 __is_abstract ( type-id )
3069 __is_base_of ( type-id , type-id )
3070 __is_class ( type-id )
3071 __is_convertible_to ( type-id , type-id )
3072 __is_empty ( type-id )
3073 __is_enum ( type-id )
3074 __is_pod ( type-id )
3075 __is_polymorphic ( type-id )
3076 __is_union ( type-id )
3078 Objective-C++ Extension:
3086 ADDRESS_P is true iff this expression was immediately preceded by
3087 "&" and therefore might denote a pointer-to-member. CAST_P is true
3088 iff this expression is the target of a cast. TEMPLATE_ARG_P is
3089 true iff this expression is a template argument.
3091 Returns a representation of the expression. Upon return, *IDK
3092 indicates what kind of id-expression (if any) was present. */
3095 cp_parser_primary_expression (cp_parser
*parser
,
3098 bool template_arg_p
,
3103 /* Assume the primary expression is not an id-expression. */
3104 *idk
= CP_ID_KIND_NONE
;
3106 /* Peek at the next token. */
3107 token
= cp_lexer_peek_token (parser
->lexer
);
3108 switch (token
->type
)
3121 token
= cp_lexer_consume_token (parser
->lexer
);
3122 /* Floating-point literals are only allowed in an integral
3123 constant expression if they are cast to an integral or
3124 enumeration type. */
3125 if (TREE_CODE (token
->u
.value
) == REAL_CST
3126 && parser
->integral_constant_expression_p
3129 /* CAST_P will be set even in invalid code like "int(2.7 +
3130 ...)". Therefore, we have to check that the next token
3131 is sure to end the cast. */
3134 cp_token
*next_token
;
3136 next_token
= cp_lexer_peek_token (parser
->lexer
);
3137 if (/* The comma at the end of an
3138 enumerator-definition. */
3139 next_token
->type
!= CPP_COMMA
3140 /* The curly brace at the end of an enum-specifier. */
3141 && next_token
->type
!= CPP_CLOSE_BRACE
3142 /* The end of a statement. */
3143 && next_token
->type
!= CPP_SEMICOLON
3144 /* The end of the cast-expression. */
3145 && next_token
->type
!= CPP_CLOSE_PAREN
3146 /* The end of an array bound. */
3147 && next_token
->type
!= CPP_CLOSE_SQUARE
3148 /* The closing ">" in a template-argument-list. */
3149 && (next_token
->type
!= CPP_GREATER
3150 || parser
->greater_than_is_operator_p
)
3151 /* C++0x only: A ">>" treated like two ">" tokens,
3152 in a template-argument-list. */
3153 && (next_token
->type
!= CPP_RSHIFT
3154 || (cxx_dialect
== cxx98
)
3155 || parser
->greater_than_is_operator_p
))
3159 /* If we are within a cast, then the constraint that the
3160 cast is to an integral or enumeration type will be
3161 checked at that point. If we are not within a cast, then
3162 this code is invalid. */
3164 cp_parser_non_integral_constant_expression
3165 (parser
, "floating-point literal");
3167 return token
->u
.value
;
3173 /* ??? Should wide strings be allowed when parser->translate_strings_p
3174 is false (i.e. in attributes)? If not, we can kill the third
3175 argument to cp_parser_string_literal. */
3176 return cp_parser_string_literal (parser
,
3177 parser
->translate_strings_p
,
3180 case CPP_OPEN_PAREN
:
3183 bool saved_greater_than_is_operator_p
;
3185 /* Consume the `('. */
3186 cp_lexer_consume_token (parser
->lexer
);
3187 /* Within a parenthesized expression, a `>' token is always
3188 the greater-than operator. */
3189 saved_greater_than_is_operator_p
3190 = parser
->greater_than_is_operator_p
;
3191 parser
->greater_than_is_operator_p
= true;
3192 /* If we see `( { ' then we are looking at the beginning of
3193 a GNU statement-expression. */
3194 if (cp_parser_allow_gnu_extensions_p (parser
)
3195 && cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_BRACE
))
3197 /* Statement-expressions are not allowed by the standard. */
3199 pedwarn ("ISO C++ forbids braced-groups within expressions");
3201 /* And they're not allowed outside of a function-body; you
3202 cannot, for example, write:
3204 int i = ({ int j = 3; j + 1; });
3206 at class or namespace scope. */
3207 if (!parser
->in_function_body
3208 || parser
->in_template_argument_list_p
)
3210 error ("statement-expressions are not allowed outside "
3211 "functions nor in template-argument lists");
3212 cp_parser_skip_to_end_of_block_or_statement (parser
);
3213 expr
= error_mark_node
;
3217 /* Start the statement-expression. */
3218 expr
= begin_stmt_expr ();
3219 /* Parse the compound-statement. */
3220 cp_parser_compound_statement (parser
, expr
, false);
3222 expr
= finish_stmt_expr (expr
, false);
3227 /* Parse the parenthesized expression. */
3228 expr
= cp_parser_expression (parser
, cast_p
);
3229 /* Let the front end know that this expression was
3230 enclosed in parentheses. This matters in case, for
3231 example, the expression is of the form `A::B', since
3232 `&A::B' might be a pointer-to-member, but `&(A::B)' is
3234 finish_parenthesized_expr (expr
);
3236 /* The `>' token might be the end of a template-id or
3237 template-parameter-list now. */
3238 parser
->greater_than_is_operator_p
3239 = saved_greater_than_is_operator_p
;
3240 /* Consume the `)'. */
3241 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
3242 cp_parser_skip_to_end_of_statement (parser
);
3248 switch (token
->keyword
)
3250 /* These two are the boolean literals. */
3252 cp_lexer_consume_token (parser
->lexer
);
3253 return boolean_true_node
;
3255 cp_lexer_consume_token (parser
->lexer
);
3256 return boolean_false_node
;
3258 /* The `__null' literal. */
3260 cp_lexer_consume_token (parser
->lexer
);
3263 /* Recognize the `this' keyword. */
3265 cp_lexer_consume_token (parser
->lexer
);
3266 if (parser
->local_variables_forbidden_p
)
3268 error ("%<this%> may not be used in this context");
3269 return error_mark_node
;
3271 /* Pointers cannot appear in constant-expressions. */
3272 if (cp_parser_non_integral_constant_expression (parser
, "%<this%>"))
3273 return error_mark_node
;
3274 return finish_this_expr ();
3276 /* The `operator' keyword can be the beginning of an
3281 case RID_FUNCTION_NAME
:
3282 case RID_PRETTY_FUNCTION_NAME
:
3283 case RID_C99_FUNCTION_NAME
:
3284 /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3285 __func__ are the names of variables -- but they are
3286 treated specially. Therefore, they are handled here,
3287 rather than relying on the generic id-expression logic
3288 below. Grammatically, these names are id-expressions.
3290 Consume the token. */
3291 token
= cp_lexer_consume_token (parser
->lexer
);
3292 /* Look up the name. */
3293 return finish_fname (token
->u
.value
);
3300 /* The `__builtin_va_arg' construct is used to handle
3301 `va_arg'. Consume the `__builtin_va_arg' token. */
3302 cp_lexer_consume_token (parser
->lexer
);
3303 /* Look for the opening `('. */
3304 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
3305 /* Now, parse the assignment-expression. */
3306 expression
= cp_parser_assignment_expression (parser
,
3308 /* Look for the `,'. */
3309 cp_parser_require (parser
, CPP_COMMA
, "%<,%>");
3310 /* Parse the type-id. */
3311 type
= cp_parser_type_id (parser
);
3312 /* Look for the closing `)'. */
3313 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
3314 /* Using `va_arg' in a constant-expression is not
3316 if (cp_parser_non_integral_constant_expression (parser
,
3318 return error_mark_node
;
3319 return build_x_va_arg (expression
, type
);
3323 return cp_parser_builtin_offsetof (parser
);
3325 case RID_HAS_NOTHROW_ASSIGN
:
3326 case RID_HAS_NOTHROW_CONSTRUCTOR
:
3327 case RID_HAS_NOTHROW_COPY
:
3328 case RID_HAS_TRIVIAL_ASSIGN
:
3329 case RID_HAS_TRIVIAL_CONSTRUCTOR
:
3330 case RID_HAS_TRIVIAL_COPY
:
3331 case RID_HAS_TRIVIAL_DESTRUCTOR
:
3332 case RID_HAS_VIRTUAL_DESTRUCTOR
:
3333 case RID_IS_ABSTRACT
:
3334 case RID_IS_BASE_OF
:
3336 case RID_IS_CONVERTIBLE_TO
:
3340 case RID_IS_POLYMORPHIC
:
3342 return cp_parser_trait_expr (parser
, token
->keyword
);
3344 /* Objective-C++ expressions. */
3346 case RID_AT_PROTOCOL
:
3347 case RID_AT_SELECTOR
:
3348 return cp_parser_objc_expression (parser
);
3351 cp_parser_error (parser
, "expected primary-expression");
3352 return error_mark_node
;
3355 /* An id-expression can start with either an identifier, a
3356 `::' as the beginning of a qualified-id, or the "operator"
3360 case CPP_TEMPLATE_ID
:
3361 case CPP_NESTED_NAME_SPECIFIER
:
3365 const char *error_msg
;
3370 /* Parse the id-expression. */
3372 = cp_parser_id_expression (parser
,
3373 /*template_keyword_p=*/false,
3374 /*check_dependency_p=*/true,
3376 /*declarator_p=*/false,
3377 /*optional_p=*/false);
3378 if (id_expression
== error_mark_node
)
3379 return error_mark_node
;
3380 token
= cp_lexer_peek_token (parser
->lexer
);
3381 done
= (token
->type
!= CPP_OPEN_SQUARE
3382 && token
->type
!= CPP_OPEN_PAREN
3383 && token
->type
!= CPP_DOT
3384 && token
->type
!= CPP_DEREF
3385 && token
->type
!= CPP_PLUS_PLUS
3386 && token
->type
!= CPP_MINUS_MINUS
);
3387 /* If we have a template-id, then no further lookup is
3388 required. If the template-id was for a template-class, we
3389 will sometimes have a TYPE_DECL at this point. */
3390 if (TREE_CODE (id_expression
) == TEMPLATE_ID_EXPR
3391 || TREE_CODE (id_expression
) == TYPE_DECL
)
3392 decl
= id_expression
;
3393 /* Look up the name. */
3396 tree ambiguous_decls
;
3398 decl
= cp_parser_lookup_name (parser
, id_expression
,
3401 /*is_namespace=*/false,
3402 /*check_dependency=*/true,
3404 /* If the lookup was ambiguous, an error will already have
3406 if (ambiguous_decls
)
3407 return error_mark_node
;
3409 /* In Objective-C++, an instance variable (ivar) may be preferred
3410 to whatever cp_parser_lookup_name() found. */
3411 decl
= objc_lookup_ivar (decl
, id_expression
);
3413 /* If name lookup gives us a SCOPE_REF, then the
3414 qualifying scope was dependent. */
3415 if (TREE_CODE (decl
) == SCOPE_REF
)
3417 /* At this point, we do not know if DECL is a valid
3418 integral constant expression. We assume that it is
3419 in fact such an expression, so that code like:
3421 template <int N> struct A {
3425 is accepted. At template-instantiation time, we
3426 will check that B<N>::i is actually a constant. */
3429 /* Check to see if DECL is a local variable in a context
3430 where that is forbidden. */
3431 if (parser
->local_variables_forbidden_p
3432 && local_variable_p (decl
))
3434 /* It might be that we only found DECL because we are
3435 trying to be generous with pre-ISO scoping rules.
3436 For example, consider:
3440 for (int i = 0; i < 10; ++i) {}
3441 extern void f(int j = i);
3444 Here, name look up will originally find the out
3445 of scope `i'. We need to issue a warning message,
3446 but then use the global `i'. */
3447 decl
= check_for_out_of_scope_variable (decl
);
3448 if (local_variable_p (decl
))
3450 error ("local variable %qD may not appear in this context",
3452 return error_mark_node
;
3457 decl
= (finish_id_expression
3458 (id_expression
, decl
, parser
->scope
,
3460 parser
->integral_constant_expression_p
,
3461 parser
->allow_non_integral_constant_expression_p
,
3462 &parser
->non_integral_constant_expression_p
,
3463 template_p
, done
, address_p
,
3467 cp_parser_error (parser
, error_msg
);
3471 /* Anything else is an error. */
3473 /* ...unless we have an Objective-C++ message or string literal,
3475 if (c_dialect_objc ()
3476 && (token
->type
== CPP_OPEN_SQUARE
3477 || token
->type
== CPP_OBJC_STRING
))
3478 return cp_parser_objc_expression (parser
);
3480 cp_parser_error (parser
, "expected primary-expression");
3481 return error_mark_node
;
3485 /* Parse an id-expression.
3492 :: [opt] nested-name-specifier template [opt] unqualified-id
3494 :: operator-function-id
3497 Return a representation of the unqualified portion of the
3498 identifier. Sets PARSER->SCOPE to the qualifying scope if there is
3499 a `::' or nested-name-specifier.
3501 Often, if the id-expression was a qualified-id, the caller will
3502 want to make a SCOPE_REF to represent the qualified-id. This
3503 function does not do this in order to avoid wastefully creating
3504 SCOPE_REFs when they are not required.
3506 If TEMPLATE_KEYWORD_P is true, then we have just seen the
3509 If CHECK_DEPENDENCY_P is false, then names are looked up inside
3510 uninstantiated templates.
3512 If *TEMPLATE_P is non-NULL, it is set to true iff the
3513 `template' keyword is used to explicitly indicate that the entity
3514 named is a template.
3516 If DECLARATOR_P is true, the id-expression is appearing as part of
3517 a declarator, rather than as part of an expression. */
3520 cp_parser_id_expression (cp_parser
*parser
,
3521 bool template_keyword_p
,
3522 bool check_dependency_p
,
3527 bool global_scope_p
;
3528 bool nested_name_specifier_p
;
3530 /* Assume the `template' keyword was not used. */
3532 *template_p
= template_keyword_p
;
3534 /* Look for the optional `::' operator. */
3536 = (cp_parser_global_scope_opt (parser
, /*current_scope_valid_p=*/false)
3538 /* Look for the optional nested-name-specifier. */
3539 nested_name_specifier_p
3540 = (cp_parser_nested_name_specifier_opt (parser
,
3541 /*typename_keyword_p=*/false,
3546 /* If there is a nested-name-specifier, then we are looking at
3547 the first qualified-id production. */
3548 if (nested_name_specifier_p
)
3551 tree saved_object_scope
;
3552 tree saved_qualifying_scope
;
3553 tree unqualified_id
;
3556 /* See if the next token is the `template' keyword. */
3558 template_p
= &is_template
;
3559 *template_p
= cp_parser_optional_template_keyword (parser
);
3560 /* Name lookup we do during the processing of the
3561 unqualified-id might obliterate SCOPE. */
3562 saved_scope
= parser
->scope
;
3563 saved_object_scope
= parser
->object_scope
;
3564 saved_qualifying_scope
= parser
->qualifying_scope
;
3565 /* Process the final unqualified-id. */
3566 unqualified_id
= cp_parser_unqualified_id (parser
, *template_p
,
3569 /*optional_p=*/false);
3570 /* Restore the SAVED_SCOPE for our caller. */
3571 parser
->scope
= saved_scope
;
3572 parser
->object_scope
= saved_object_scope
;
3573 parser
->qualifying_scope
= saved_qualifying_scope
;
3575 return unqualified_id
;
3577 /* Otherwise, if we are in global scope, then we are looking at one
3578 of the other qualified-id productions. */
3579 else if (global_scope_p
)
3584 /* Peek at the next token. */
3585 token
= cp_lexer_peek_token (parser
->lexer
);
3587 /* If it's an identifier, and the next token is not a "<", then
3588 we can avoid the template-id case. This is an optimization
3589 for this common case. */
3590 if (token
->type
== CPP_NAME
3591 && !cp_parser_nth_token_starts_template_argument_list_p
3593 return cp_parser_identifier (parser
);
3595 cp_parser_parse_tentatively (parser
);
3596 /* Try a template-id. */
3597 id
= cp_parser_template_id (parser
,
3598 /*template_keyword_p=*/false,
3599 /*check_dependency_p=*/true,
3601 /* If that worked, we're done. */
3602 if (cp_parser_parse_definitely (parser
))
3605 /* Peek at the next token. (Changes in the token buffer may
3606 have invalidated the pointer obtained above.) */
3607 token
= cp_lexer_peek_token (parser
->lexer
);
3609 switch (token
->type
)
3612 return cp_parser_identifier (parser
);
3615 if (token
->keyword
== RID_OPERATOR
)
3616 return cp_parser_operator_function_id (parser
);
3620 cp_parser_error (parser
, "expected id-expression");
3621 return error_mark_node
;
3625 return cp_parser_unqualified_id (parser
, template_keyword_p
,
3626 /*check_dependency_p=*/true,
3631 /* Parse an unqualified-id.
3635 operator-function-id
3636 conversion-function-id
3640 If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3641 keyword, in a construct like `A::template ...'.
3643 Returns a representation of unqualified-id. For the `identifier'
3644 production, an IDENTIFIER_NODE is returned. For the `~ class-name'
3645 production a BIT_NOT_EXPR is returned; the operand of the
3646 BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name. For the
3647 other productions, see the documentation accompanying the
3648 corresponding parsing functions. If CHECK_DEPENDENCY_P is false,
3649 names are looked up in uninstantiated templates. If DECLARATOR_P
3650 is true, the unqualified-id is appearing as part of a declarator,
3651 rather than as part of an expression. */
3654 cp_parser_unqualified_id (cp_parser
* parser
,
3655 bool template_keyword_p
,
3656 bool check_dependency_p
,
3662 /* Peek at the next token. */
3663 token
= cp_lexer_peek_token (parser
->lexer
);
3665 switch (token
->type
)
3671 /* We don't know yet whether or not this will be a
3673 cp_parser_parse_tentatively (parser
);
3674 /* Try a template-id. */
3675 id
= cp_parser_template_id (parser
, template_keyword_p
,
3678 /* If it worked, we're done. */
3679 if (cp_parser_parse_definitely (parser
))
3681 /* Otherwise, it's an ordinary identifier. */
3682 return cp_parser_identifier (parser
);
3685 case CPP_TEMPLATE_ID
:
3686 return cp_parser_template_id (parser
, template_keyword_p
,
3693 tree qualifying_scope
;
3698 /* Consume the `~' token. */
3699 cp_lexer_consume_token (parser
->lexer
);
3700 /* Parse the class-name. The standard, as written, seems to
3703 template <typename T> struct S { ~S (); };
3704 template <typename T> S<T>::~S() {}
3706 is invalid, since `~' must be followed by a class-name, but
3707 `S<T>' is dependent, and so not known to be a class.
3708 That's not right; we need to look in uninstantiated
3709 templates. A further complication arises from:
3711 template <typename T> void f(T t) {
3715 Here, it is not possible to look up `T' in the scope of `T'
3716 itself. We must look in both the current scope, and the
3717 scope of the containing complete expression.
3719 Yet another issue is:
3728 The standard does not seem to say that the `S' in `~S'
3729 should refer to the type `S' and not the data member
3732 /* DR 244 says that we look up the name after the "~" in the
3733 same scope as we looked up the qualifying name. That idea
3734 isn't fully worked out; it's more complicated than that. */
3735 scope
= parser
->scope
;
3736 object_scope
= parser
->object_scope
;
3737 qualifying_scope
= parser
->qualifying_scope
;
3739 /* Check for invalid scopes. */
3740 if (scope
== error_mark_node
)
3742 if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
3743 cp_lexer_consume_token (parser
->lexer
);
3744 return error_mark_node
;
3746 if (scope
&& TREE_CODE (scope
) == NAMESPACE_DECL
)
3748 if (!cp_parser_uncommitted_to_tentative_parse_p (parser
))
3749 error ("scope %qT before %<~%> is not a class-name", scope
);
3750 cp_parser_simulate_error (parser
);
3751 if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
3752 cp_lexer_consume_token (parser
->lexer
);
3753 return error_mark_node
;
3755 gcc_assert (!scope
|| TYPE_P (scope
));
3757 /* If the name is of the form "X::~X" it's OK. */
3758 token
= cp_lexer_peek_token (parser
->lexer
);
3760 && token
->type
== CPP_NAME
3761 && (cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
3763 && constructor_name_p (token
->u
.value
, scope
))
3765 cp_lexer_consume_token (parser
->lexer
);
3766 return build_nt (BIT_NOT_EXPR
, scope
);
3769 /* If there was an explicit qualification (S::~T), first look
3770 in the scope given by the qualification (i.e., S). */
3772 type_decl
= NULL_TREE
;
3775 cp_parser_parse_tentatively (parser
);
3776 type_decl
= cp_parser_class_name (parser
,
3777 /*typename_keyword_p=*/false,
3778 /*template_keyword_p=*/false,
3780 /*check_dependency=*/false,
3781 /*class_head_p=*/false,
3783 if (cp_parser_parse_definitely (parser
))
3786 /* In "N::S::~S", look in "N" as well. */
3787 if (!done
&& scope
&& qualifying_scope
)
3789 cp_parser_parse_tentatively (parser
);
3790 parser
->scope
= qualifying_scope
;
3791 parser
->object_scope
= NULL_TREE
;
3792 parser
->qualifying_scope
= NULL_TREE
;
3794 = cp_parser_class_name (parser
,
3795 /*typename_keyword_p=*/false,
3796 /*template_keyword_p=*/false,
3798 /*check_dependency=*/false,
3799 /*class_head_p=*/false,
3801 if (cp_parser_parse_definitely (parser
))
3804 /* In "p->S::~T", look in the scope given by "*p" as well. */
3805 else if (!done
&& object_scope
)
3807 cp_parser_parse_tentatively (parser
);
3808 parser
->scope
= object_scope
;
3809 parser
->object_scope
= NULL_TREE
;
3810 parser
->qualifying_scope
= NULL_TREE
;
3812 = cp_parser_class_name (parser
,
3813 /*typename_keyword_p=*/false,
3814 /*template_keyword_p=*/false,
3816 /*check_dependency=*/false,
3817 /*class_head_p=*/false,
3819 if (cp_parser_parse_definitely (parser
))
3822 /* Look in the surrounding context. */
3825 parser
->scope
= NULL_TREE
;
3826 parser
->object_scope
= NULL_TREE
;
3827 parser
->qualifying_scope
= NULL_TREE
;
3829 = cp_parser_class_name (parser
,
3830 /*typename_keyword_p=*/false,
3831 /*template_keyword_p=*/false,
3833 /*check_dependency=*/false,
3834 /*class_head_p=*/false,
3837 /* If an error occurred, assume that the name of the
3838 destructor is the same as the name of the qualifying
3839 class. That allows us to keep parsing after running
3840 into ill-formed destructor names. */
3841 if (type_decl
== error_mark_node
&& scope
)
3842 return build_nt (BIT_NOT_EXPR
, scope
);
3843 else if (type_decl
== error_mark_node
)
3844 return error_mark_node
;
3846 /* Check that destructor name and scope match. */
3847 if (declarator_p
&& scope
&& !check_dtor_name (scope
, type_decl
))
3849 if (!cp_parser_uncommitted_to_tentative_parse_p (parser
))
3850 error ("declaration of %<~%T%> as member of %qT",
3852 cp_parser_simulate_error (parser
);
3853 return error_mark_node
;
3858 A typedef-name that names a class shall not be used as the
3859 identifier in the declarator for a destructor declaration. */
3861 && !DECL_IMPLICIT_TYPEDEF_P (type_decl
)
3862 && !DECL_SELF_REFERENCE_P (type_decl
)
3863 && !cp_parser_uncommitted_to_tentative_parse_p (parser
))
3864 error ("typedef-name %qD used as destructor declarator",
3867 return build_nt (BIT_NOT_EXPR
, TREE_TYPE (type_decl
));
3871 if (token
->keyword
== RID_OPERATOR
)
3875 /* This could be a template-id, so we try that first. */
3876 cp_parser_parse_tentatively (parser
);
3877 /* Try a template-id. */
3878 id
= cp_parser_template_id (parser
, template_keyword_p
,
3879 /*check_dependency_p=*/true,
3881 /* If that worked, we're done. */
3882 if (cp_parser_parse_definitely (parser
))
3884 /* We still don't know whether we're looking at an
3885 operator-function-id or a conversion-function-id. */
3886 cp_parser_parse_tentatively (parser
);
3887 /* Try an operator-function-id. */
3888 id
= cp_parser_operator_function_id (parser
);
3889 /* If that didn't work, try a conversion-function-id. */
3890 if (!cp_parser_parse_definitely (parser
))
3891 id
= cp_parser_conversion_function_id (parser
);
3900 cp_parser_error (parser
, "expected unqualified-id");
3901 return error_mark_node
;
3905 /* Parse an (optional) nested-name-specifier.
3907 nested-name-specifier:
3908 class-or-namespace-name :: nested-name-specifier [opt]
3909 class-or-namespace-name :: template nested-name-specifier [opt]
3911 PARSER->SCOPE should be set appropriately before this function is
3912 called. TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3913 effect. TYPE_P is TRUE if we non-type bindings should be ignored
3916 Sets PARSER->SCOPE to the class (TYPE) or namespace
3917 (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3918 it unchanged if there is no nested-name-specifier. Returns the new
3919 scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3921 If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3922 part of a declaration and/or decl-specifier. */
3925 cp_parser_nested_name_specifier_opt (cp_parser
*parser
,
3926 bool typename_keyword_p
,
3927 bool check_dependency_p
,
3929 bool is_declaration
)
3931 bool success
= false;
3932 cp_token_position start
= 0;
3935 /* Remember where the nested-name-specifier starts. */
3936 if (cp_parser_uncommitted_to_tentative_parse_p (parser
))
3938 start
= cp_lexer_token_position (parser
->lexer
, false);
3939 push_deferring_access_checks (dk_deferred
);
3946 tree saved_qualifying_scope
;
3947 bool template_keyword_p
;
3949 /* Spot cases that cannot be the beginning of a
3950 nested-name-specifier. */
3951 token
= cp_lexer_peek_token (parser
->lexer
);
3953 /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3954 the already parsed nested-name-specifier. */
3955 if (token
->type
== CPP_NESTED_NAME_SPECIFIER
)
3957 /* Grab the nested-name-specifier and continue the loop. */
3958 cp_parser_pre_parsed_nested_name_specifier (parser
);
3959 /* If we originally encountered this nested-name-specifier
3960 with IS_DECLARATION set to false, we will not have
3961 resolved TYPENAME_TYPEs, so we must do so here. */
3963 && TREE_CODE (parser
->scope
) == TYPENAME_TYPE
)
3965 new_scope
= resolve_typename_type (parser
->scope
,
3966 /*only_current_p=*/false);
3967 if (TREE_CODE (new_scope
) != TYPENAME_TYPE
)
3968 parser
->scope
= new_scope
;
3974 /* Spot cases that cannot be the beginning of a
3975 nested-name-specifier. On the second and subsequent times
3976 through the loop, we look for the `template' keyword. */
3977 if (success
&& token
->keyword
== RID_TEMPLATE
)
3979 /* A template-id can start a nested-name-specifier. */
3980 else if (token
->type
== CPP_TEMPLATE_ID
)
3984 /* If the next token is not an identifier, then it is
3985 definitely not a class-or-namespace-name. */
3986 if (token
->type
!= CPP_NAME
)
3988 /* If the following token is neither a `<' (to begin a
3989 template-id), nor a `::', then we are not looking at a
3990 nested-name-specifier. */
3991 token
= cp_lexer_peek_nth_token (parser
->lexer
, 2);
3992 if (token
->type
!= CPP_SCOPE
3993 && !cp_parser_nth_token_starts_template_argument_list_p
3998 /* The nested-name-specifier is optional, so we parse
4000 cp_parser_parse_tentatively (parser
);
4002 /* Look for the optional `template' keyword, if this isn't the
4003 first time through the loop. */
4005 template_keyword_p
= cp_parser_optional_template_keyword (parser
);
4007 template_keyword_p
= false;
4009 /* Save the old scope since the name lookup we are about to do
4010 might destroy it. */
4011 old_scope
= parser
->scope
;
4012 saved_qualifying_scope
= parser
->qualifying_scope
;
4013 /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4014 look up names in "X<T>::I" in order to determine that "Y" is
4015 a template. So, if we have a typename at this point, we make
4016 an effort to look through it. */
4018 && !typename_keyword_p
4020 && TREE_CODE (parser
->scope
) == TYPENAME_TYPE
)
4021 parser
->scope
= resolve_typename_type (parser
->scope
,
4022 /*only_current_p=*/false);
4023 /* Parse the qualifying entity. */
4025 = cp_parser_class_or_namespace_name (parser
,
4031 /* Look for the `::' token. */
4032 cp_parser_require (parser
, CPP_SCOPE
, "%<::%>");
4034 /* If we found what we wanted, we keep going; otherwise, we're
4036 if (!cp_parser_parse_definitely (parser
))
4038 bool error_p
= false;
4040 /* Restore the OLD_SCOPE since it was valid before the
4041 failed attempt at finding the last
4042 class-or-namespace-name. */
4043 parser
->scope
= old_scope
;
4044 parser
->qualifying_scope
= saved_qualifying_scope
;
4045 if (cp_parser_uncommitted_to_tentative_parse_p (parser
))
4047 /* If the next token is an identifier, and the one after
4048 that is a `::', then any valid interpretation would have
4049 found a class-or-namespace-name. */
4050 while (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
)
4051 && (cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
4053 && (cp_lexer_peek_nth_token (parser
->lexer
, 3)->type
4056 token
= cp_lexer_consume_token (parser
->lexer
);
4059 if (!token
->ambiguous_p
)
4062 tree ambiguous_decls
;
4064 decl
= cp_parser_lookup_name (parser
, token
->u
.value
,
4066 /*is_template=*/false,
4067 /*is_namespace=*/false,
4068 /*check_dependency=*/true,
4070 if (TREE_CODE (decl
) == TEMPLATE_DECL
)
4071 error ("%qD used without template parameters", decl
);
4072 else if (ambiguous_decls
)
4074 error ("reference to %qD is ambiguous",
4076 print_candidates (ambiguous_decls
);
4077 decl
= error_mark_node
;
4080 cp_parser_name_lookup_error
4081 (parser
, token
->u
.value
, decl
,
4082 "is not a class or namespace");
4084 parser
->scope
= error_mark_node
;
4086 /* Treat this as a successful nested-name-specifier
4091 If the name found is not a class-name (clause
4092 _class_) or namespace-name (_namespace.def_), the
4093 program is ill-formed. */
4096 cp_lexer_consume_token (parser
->lexer
);
4100 /* We've found one valid nested-name-specifier. */
4102 /* Name lookup always gives us a DECL. */
4103 if (TREE_CODE (new_scope
) == TYPE_DECL
)
4104 new_scope
= TREE_TYPE (new_scope
);
4105 /* Uses of "template" must be followed by actual templates. */
4106 if (template_keyword_p
4107 && !(CLASS_TYPE_P (new_scope
)
4108 && ((CLASSTYPE_USE_TEMPLATE (new_scope
)
4109 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope
)))
4110 || CLASSTYPE_IS_TEMPLATE (new_scope
)))
4111 && !(TREE_CODE (new_scope
) == TYPENAME_TYPE
4112 && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope
))
4113 == TEMPLATE_ID_EXPR
)))
4114 pedwarn (TYPE_P (new_scope
)
4115 ? "%qT is not a template"
4116 : "%qD is not a template",
4118 /* If it is a class scope, try to complete it; we are about to
4119 be looking up names inside the class. */
4120 if (TYPE_P (new_scope
)
4121 /* Since checking types for dependency can be expensive,
4122 avoid doing it if the type is already complete. */
4123 && !COMPLETE_TYPE_P (new_scope
)
4124 /* Do not try to complete dependent types. */
4125 && !dependent_type_p (new_scope
))
4127 new_scope
= complete_type (new_scope
);
4128 /* If it is a typedef to current class, use the current
4129 class instead, as the typedef won't have any names inside
4131 if (!COMPLETE_TYPE_P (new_scope
)
4132 && currently_open_class (new_scope
))
4133 new_scope
= TYPE_MAIN_VARIANT (new_scope
);
4135 /* Make sure we look in the right scope the next time through
4137 parser
->scope
= new_scope
;
4140 /* If parsing tentatively, replace the sequence of tokens that makes
4141 up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
4142 token. That way, should we re-parse the token stream, we will
4143 not have to repeat the effort required to do the parse, nor will
4144 we issue duplicate error messages. */
4145 if (success
&& start
)
4149 token
= cp_lexer_token_at (parser
->lexer
, start
);
4150 /* Reset the contents of the START token. */
4151 token
->type
= CPP_NESTED_NAME_SPECIFIER
;
4152 /* Retrieve any deferred checks. Do not pop this access checks yet
4153 so the memory will not be reclaimed during token replacing below. */
4154 token
->u
.tree_check_value
= GGC_CNEW (struct tree_check
);
4155 token
->u
.tree_check_value
->value
= parser
->scope
;
4156 token
->u
.tree_check_value
->checks
= get_deferred_access_checks ();
4157 token
->u
.tree_check_value
->qualifying_scope
=
4158 parser
->qualifying_scope
;
4159 token
->keyword
= RID_MAX
;
4161 /* Purge all subsequent tokens. */
4162 cp_lexer_purge_tokens_after (parser
->lexer
, start
);
4166 pop_to_parent_deferring_access_checks ();
4168 return success
? parser
->scope
: NULL_TREE
;
4171 /* Parse a nested-name-specifier. See
4172 cp_parser_nested_name_specifier_opt for details. This function
4173 behaves identically, except that it will an issue an error if no
4174 nested-name-specifier is present. */
4177 cp_parser_nested_name_specifier (cp_parser
*parser
,
4178 bool typename_keyword_p
,
4179 bool check_dependency_p
,
4181 bool is_declaration
)
4185 /* Look for the nested-name-specifier. */
4186 scope
= cp_parser_nested_name_specifier_opt (parser
,
4191 /* If it was not present, issue an error message. */
4194 cp_parser_error (parser
, "expected nested-name-specifier");
4195 parser
->scope
= NULL_TREE
;
4201 /* Parse a class-or-namespace-name.
4203 class-or-namespace-name:
4207 TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
4208 TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
4209 CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
4210 TYPE_P is TRUE iff the next name should be taken as a class-name,
4211 even the same name is declared to be another entity in the same
4214 Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
4215 specified by the class-or-namespace-name. If neither is found the
4216 ERROR_MARK_NODE is returned. */
4219 cp_parser_class_or_namespace_name (cp_parser
*parser
,
4220 bool typename_keyword_p
,
4221 bool template_keyword_p
,
4222 bool check_dependency_p
,
4224 bool is_declaration
)
4227 tree saved_qualifying_scope
;
4228 tree saved_object_scope
;
4232 /* Before we try to parse the class-name, we must save away the
4233 current PARSER->SCOPE since cp_parser_class_name will destroy
4235 saved_scope
= parser
->scope
;
4236 saved_qualifying_scope
= parser
->qualifying_scope
;
4237 saved_object_scope
= parser
->object_scope
;
4238 /* Try for a class-name first. If the SAVED_SCOPE is a type, then
4239 there is no need to look for a namespace-name. */
4240 only_class_p
= template_keyword_p
|| (saved_scope
&& TYPE_P (saved_scope
));
4242 cp_parser_parse_tentatively (parser
);
4243 scope
= cp_parser_class_name (parser
,
4246 type_p
? class_type
: none_type
,
4248 /*class_head_p=*/false,
4250 /* If that didn't work, try for a namespace-name. */
4251 if (!only_class_p
&& !cp_parser_parse_definitely (parser
))
4253 /* Restore the saved scope. */
4254 parser
->scope
= saved_scope
;
4255 parser
->qualifying_scope
= saved_qualifying_scope
;
4256 parser
->object_scope
= saved_object_scope
;
4257 /* If we are not looking at an identifier followed by the scope
4258 resolution operator, then this is not part of a
4259 nested-name-specifier. (Note that this function is only used
4260 to parse the components of a nested-name-specifier.) */
4261 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_NAME
)
4262 || cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
!= CPP_SCOPE
)
4263 return error_mark_node
;
4264 scope
= cp_parser_namespace_name (parser
);
4270 /* Parse a postfix-expression.
4274 postfix-expression [ expression ]
4275 postfix-expression ( expression-list [opt] )
4276 simple-type-specifier ( expression-list [opt] )
4277 typename :: [opt] nested-name-specifier identifier
4278 ( expression-list [opt] )
4279 typename :: [opt] nested-name-specifier template [opt] template-id
4280 ( expression-list [opt] )
4281 postfix-expression . template [opt] id-expression
4282 postfix-expression -> template [opt] id-expression
4283 postfix-expression . pseudo-destructor-name
4284 postfix-expression -> pseudo-destructor-name
4285 postfix-expression ++
4286 postfix-expression --
4287 dynamic_cast < type-id > ( expression )
4288 static_cast < type-id > ( expression )
4289 reinterpret_cast < type-id > ( expression )
4290 const_cast < type-id > ( expression )
4291 typeid ( expression )
4297 ( type-id ) { initializer-list , [opt] }
4299 This extension is a GNU version of the C99 compound-literal
4300 construct. (The C99 grammar uses `type-name' instead of `type-id',
4301 but they are essentially the same concept.)
4303 If ADDRESS_P is true, the postfix expression is the operand of the
4304 `&' operator. CAST_P is true if this expression is the target of a
4307 If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
4308 class member access expressions [expr.ref].
4310 Returns a representation of the expression. */
4313 cp_parser_postfix_expression (cp_parser
*parser
, bool address_p
, bool cast_p
,
4314 bool member_access_only_p
)
4318 cp_id_kind idk
= CP_ID_KIND_NONE
;
4319 tree postfix_expression
= NULL_TREE
;
4320 bool is_member_access
= false;
4322 /* Peek at the next token. */
4323 token
= cp_lexer_peek_token (parser
->lexer
);
4324 /* Some of the productions are determined by keywords. */
4325 keyword
= token
->keyword
;
4335 const char *saved_message
;
4337 /* All of these can be handled in the same way from the point
4338 of view of parsing. Begin by consuming the token
4339 identifying the cast. */
4340 cp_lexer_consume_token (parser
->lexer
);
4342 /* New types cannot be defined in the cast. */
4343 saved_message
= parser
->type_definition_forbidden_message
;
4344 parser
->type_definition_forbidden_message
4345 = "types may not be defined in casts";
4347 /* Look for the opening `<'. */
4348 cp_parser_require (parser
, CPP_LESS
, "%<<%>");
4349 /* Parse the type to which we are casting. */
4350 type
= cp_parser_type_id (parser
);
4351 /* Look for the closing `>'. */
4352 cp_parser_require (parser
, CPP_GREATER
, "%<>%>");
4353 /* Restore the old message. */
4354 parser
->type_definition_forbidden_message
= saved_message
;
4356 /* And the expression which is being cast. */
4357 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
4358 expression
= cp_parser_expression (parser
, /*cast_p=*/true);
4359 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
4361 /* Only type conversions to integral or enumeration types
4362 can be used in constant-expressions. */
4363 if (!cast_valid_in_integral_constant_expression_p (type
)
4364 && (cp_parser_non_integral_constant_expression
4366 "a cast to a type other than an integral or "
4367 "enumeration type")))
4368 return error_mark_node
;
4374 = build_dynamic_cast (type
, expression
, tf_warning_or_error
);
4378 = build_static_cast (type
, expression
, tf_warning_or_error
);
4382 = build_reinterpret_cast (type
, expression
,
4383 tf_warning_or_error
);
4387 = build_const_cast (type
, expression
, tf_warning_or_error
);
4398 const char *saved_message
;
4399 bool saved_in_type_id_in_expr_p
;
4401 /* Consume the `typeid' token. */
4402 cp_lexer_consume_token (parser
->lexer
);
4403 /* Look for the `(' token. */
4404 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
4405 /* Types cannot be defined in a `typeid' expression. */
4406 saved_message
= parser
->type_definition_forbidden_message
;
4407 parser
->type_definition_forbidden_message
4408 = "types may not be defined in a %<typeid%> expression";
4409 /* We can't be sure yet whether we're looking at a type-id or an
4411 cp_parser_parse_tentatively (parser
);
4412 /* Try a type-id first. */
4413 saved_in_type_id_in_expr_p
= parser
->in_type_id_in_expr_p
;
4414 parser
->in_type_id_in_expr_p
= true;
4415 type
= cp_parser_type_id (parser
);
4416 parser
->in_type_id_in_expr_p
= saved_in_type_id_in_expr_p
;
4417 /* Look for the `)' token. Otherwise, we can't be sure that
4418 we're not looking at an expression: consider `typeid (int
4419 (3))', for example. */
4420 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
4421 /* If all went well, simply lookup the type-id. */
4422 if (cp_parser_parse_definitely (parser
))
4423 postfix_expression
= get_typeid (type
);
4424 /* Otherwise, fall back to the expression variant. */
4429 /* Look for an expression. */
4430 expression
= cp_parser_expression (parser
, /*cast_p=*/false);
4431 /* Compute its typeid. */
4432 postfix_expression
= build_typeid (expression
);
4433 /* Look for the `)' token. */
4434 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
4436 /* Restore the saved message. */
4437 parser
->type_definition_forbidden_message
= saved_message
;
4438 /* `typeid' may not appear in an integral constant expression. */
4439 if (cp_parser_non_integral_constant_expression(parser
,
4440 "%<typeid%> operator"))
4441 return error_mark_node
;
4448 /* The syntax permitted here is the same permitted for an
4449 elaborated-type-specifier. */
4450 type
= cp_parser_elaborated_type_specifier (parser
,
4451 /*is_friend=*/false,
4452 /*is_declaration=*/false);
4453 postfix_expression
= cp_parser_functional_cast (parser
, type
);
4461 /* If the next thing is a simple-type-specifier, we may be
4462 looking at a functional cast. We could also be looking at
4463 an id-expression. So, we try the functional cast, and if
4464 that doesn't work we fall back to the primary-expression. */
4465 cp_parser_parse_tentatively (parser
);
4466 /* Look for the simple-type-specifier. */
4467 type
= cp_parser_simple_type_specifier (parser
,
4468 /*decl_specs=*/NULL
,
4469 CP_PARSER_FLAGS_NONE
);
4470 /* Parse the cast itself. */
4471 if (!cp_parser_error_occurred (parser
))
4473 = cp_parser_functional_cast (parser
, type
);
4474 /* If that worked, we're done. */
4475 if (cp_parser_parse_definitely (parser
))
4478 /* If the functional-cast didn't work out, try a
4479 compound-literal. */
4480 if (cp_parser_allow_gnu_extensions_p (parser
)
4481 && cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_PAREN
))
4483 VEC(constructor_elt
,gc
) *initializer_list
= NULL
;
4484 bool saved_in_type_id_in_expr_p
;
4486 cp_parser_parse_tentatively (parser
);
4487 /* Consume the `('. */
4488 cp_lexer_consume_token (parser
->lexer
);
4489 /* Parse the type. */
4490 saved_in_type_id_in_expr_p
= parser
->in_type_id_in_expr_p
;
4491 parser
->in_type_id_in_expr_p
= true;
4492 type
= cp_parser_type_id (parser
);
4493 parser
->in_type_id_in_expr_p
= saved_in_type_id_in_expr_p
;
4494 /* Look for the `)'. */
4495 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
4496 /* Look for the `{'. */
4497 cp_parser_require (parser
, CPP_OPEN_BRACE
, "%<{%>");
4498 /* If things aren't going well, there's no need to
4500 if (!cp_parser_error_occurred (parser
))
4502 bool non_constant_p
;
4503 /* Parse the initializer-list. */
4505 = cp_parser_initializer_list (parser
, &non_constant_p
);
4506 /* Allow a trailing `,'. */
4507 if (cp_lexer_next_token_is (parser
->lexer
, CPP_COMMA
))
4508 cp_lexer_consume_token (parser
->lexer
);
4509 /* Look for the final `}'. */
4510 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
4512 /* If that worked, we're definitely looking at a
4513 compound-literal expression. */
4514 if (cp_parser_parse_definitely (parser
))
4516 /* Warn the user that a compound literal is not
4517 allowed in standard C++. */
4519 pedwarn ("ISO C++ forbids compound-literals");
4520 /* For simplicity, we disallow compound literals in
4521 constant-expressions. We could
4522 allow compound literals of integer type, whose
4523 initializer was a constant, in constant
4524 expressions. Permitting that usage, as a further
4525 extension, would not change the meaning of any
4526 currently accepted programs. (Of course, as
4527 compound literals are not part of ISO C++, the
4528 standard has nothing to say.) */
4529 if (cp_parser_non_integral_constant_expression
4530 (parser
, "non-constant compound literals"))
4532 postfix_expression
= error_mark_node
;
4535 /* Form the representation of the compound-literal. */
4537 = finish_compound_literal (type
, initializer_list
);
4542 /* It must be a primary-expression. */
4544 = cp_parser_primary_expression (parser
, address_p
, cast_p
,
4545 /*template_arg_p=*/false,
4551 /* Keep looping until the postfix-expression is complete. */
4554 if (idk
== CP_ID_KIND_UNQUALIFIED
4555 && TREE_CODE (postfix_expression
) == IDENTIFIER_NODE
4556 && cp_lexer_next_token_is_not (parser
->lexer
, CPP_OPEN_PAREN
))
4557 /* It is not a Koenig lookup function call. */
4559 = unqualified_name_lookup_error (postfix_expression
);
4561 /* Peek at the next token. */
4562 token
= cp_lexer_peek_token (parser
->lexer
);
4564 switch (token
->type
)
4566 case CPP_OPEN_SQUARE
:
4568 = cp_parser_postfix_open_square_expression (parser
,
4571 idk
= CP_ID_KIND_NONE
;
4572 is_member_access
= false;
4575 case CPP_OPEN_PAREN
:
4576 /* postfix-expression ( expression-list [opt] ) */
4579 bool is_builtin_constant_p
;
4580 bool saved_integral_constant_expression_p
= false;
4581 bool saved_non_integral_constant_expression_p
= false;
4584 is_member_access
= false;
4586 is_builtin_constant_p
4587 = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression
);
4588 if (is_builtin_constant_p
)
4590 /* The whole point of __builtin_constant_p is to allow
4591 non-constant expressions to appear as arguments. */
4592 saved_integral_constant_expression_p
4593 = parser
->integral_constant_expression_p
;
4594 saved_non_integral_constant_expression_p
4595 = parser
->non_integral_constant_expression_p
;
4596 parser
->integral_constant_expression_p
= false;
4598 args
= (cp_parser_parenthesized_expression_list
4599 (parser
, /*is_attribute_list=*/false,
4600 /*cast_p=*/false, /*allow_expansion_p=*/true,
4601 /*non_constant_p=*/NULL
));
4602 if (is_builtin_constant_p
)
4604 parser
->integral_constant_expression_p
4605 = saved_integral_constant_expression_p
;
4606 parser
->non_integral_constant_expression_p
4607 = saved_non_integral_constant_expression_p
;
4610 if (args
== error_mark_node
)
4612 postfix_expression
= error_mark_node
;
4616 /* Function calls are not permitted in
4617 constant-expressions. */
4618 if (! builtin_valid_in_constant_expr_p (postfix_expression
)
4619 && cp_parser_non_integral_constant_expression (parser
,
4622 postfix_expression
= error_mark_node
;
4627 if (idk
== CP_ID_KIND_UNQUALIFIED
)
4629 if (TREE_CODE (postfix_expression
) == IDENTIFIER_NODE
)
4635 = perform_koenig_lookup (postfix_expression
, args
);
4639 = unqualified_fn_lookup_error (postfix_expression
);
4641 /* We do not perform argument-dependent lookup if
4642 normal lookup finds a non-function, in accordance
4643 with the expected resolution of DR 218. */
4644 else if (args
&& is_overloaded_fn (postfix_expression
))
4646 tree fn
= get_first_fn (postfix_expression
);
4648 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
4649 fn
= OVL_CURRENT (TREE_OPERAND (fn
, 0));
4651 /* Only do argument dependent lookup if regular
4652 lookup does not find a set of member functions.
4653 [basic.lookup.koenig]/2a */
4654 if (!DECL_FUNCTION_MEMBER_P (fn
))
4658 = perform_koenig_lookup (postfix_expression
, args
);
4663 if (TREE_CODE (postfix_expression
) == COMPONENT_REF
)
4665 tree instance
= TREE_OPERAND (postfix_expression
, 0);
4666 tree fn
= TREE_OPERAND (postfix_expression
, 1);
4668 if (processing_template_decl
4669 && (type_dependent_expression_p (instance
)
4670 || (!BASELINK_P (fn
)
4671 && TREE_CODE (fn
) != FIELD_DECL
)
4672 || type_dependent_expression_p (fn
)
4673 || any_type_dependent_arguments_p (args
)))
4676 = build_nt_call_list (postfix_expression
, args
);
4680 if (BASELINK_P (fn
))
4682 = (build_new_method_call
4683 (instance
, fn
, args
, NULL_TREE
,
4684 (idk
== CP_ID_KIND_QUALIFIED
4685 ? LOOKUP_NONVIRTUAL
: LOOKUP_NORMAL
),
4687 tf_warning_or_error
));
4690 = finish_call_expr (postfix_expression
, args
,
4691 /*disallow_virtual=*/false,
4693 tf_warning_or_error
);
4695 else if (TREE_CODE (postfix_expression
) == OFFSET_REF
4696 || TREE_CODE (postfix_expression
) == MEMBER_REF
4697 || TREE_CODE (postfix_expression
) == DOTSTAR_EXPR
)
4698 postfix_expression
= (build_offset_ref_call_from_tree
4699 (postfix_expression
, args
));
4700 else if (idk
== CP_ID_KIND_QUALIFIED
)
4701 /* A call to a static class member, or a namespace-scope
4704 = finish_call_expr (postfix_expression
, args
,
4705 /*disallow_virtual=*/true,
4707 tf_warning_or_error
);
4709 /* All other function calls. */
4711 = finish_call_expr (postfix_expression
, args
,
4712 /*disallow_virtual=*/false,
4714 tf_warning_or_error
);
4716 /* The POSTFIX_EXPRESSION is certainly no longer an id. */
4717 idk
= CP_ID_KIND_NONE
;
4723 /* postfix-expression . template [opt] id-expression
4724 postfix-expression . pseudo-destructor-name
4725 postfix-expression -> template [opt] id-expression
4726 postfix-expression -> pseudo-destructor-name */
4728 /* Consume the `.' or `->' operator. */
4729 cp_lexer_consume_token (parser
->lexer
);
4732 = cp_parser_postfix_dot_deref_expression (parser
, token
->type
,
4736 is_member_access
= true;
4740 /* postfix-expression ++ */
4741 /* Consume the `++' token. */
4742 cp_lexer_consume_token (parser
->lexer
);
4743 /* Generate a representation for the complete expression. */
4745 = finish_increment_expr (postfix_expression
,
4746 POSTINCREMENT_EXPR
);
4747 /* Increments may not appear in constant-expressions. */
4748 if (cp_parser_non_integral_constant_expression (parser
,
4750 postfix_expression
= error_mark_node
;
4751 idk
= CP_ID_KIND_NONE
;
4752 is_member_access
= false;
4755 case CPP_MINUS_MINUS
:
4756 /* postfix-expression -- */
4757 /* Consume the `--' token. */
4758 cp_lexer_consume_token (parser
->lexer
);
4759 /* Generate a representation for the complete expression. */
4761 = finish_increment_expr (postfix_expression
,
4762 POSTDECREMENT_EXPR
);
4763 /* Decrements may not appear in constant-expressions. */
4764 if (cp_parser_non_integral_constant_expression (parser
,
4766 postfix_expression
= error_mark_node
;
4767 idk
= CP_ID_KIND_NONE
;
4768 is_member_access
= false;
4772 if (member_access_only_p
)
4773 return is_member_access
? postfix_expression
: error_mark_node
;
4775 return postfix_expression
;
4779 /* We should never get here. */
4781 return error_mark_node
;
4784 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4785 by cp_parser_builtin_offsetof. We're looking for
4787 postfix-expression [ expression ]
4789 FOR_OFFSETOF is set if we're being called in that context, which
4790 changes how we deal with integer constant expressions. */
4793 cp_parser_postfix_open_square_expression (cp_parser
*parser
,
4794 tree postfix_expression
,
4799 /* Consume the `[' token. */
4800 cp_lexer_consume_token (parser
->lexer
);
4802 /* Parse the index expression. */
4803 /* ??? For offsetof, there is a question of what to allow here. If
4804 offsetof is not being used in an integral constant expression context,
4805 then we *could* get the right answer by computing the value at runtime.
4806 If we are in an integral constant expression context, then we might
4807 could accept any constant expression; hard to say without analysis.
4808 Rather than open the barn door too wide right away, allow only integer
4809 constant expressions here. */
4811 index
= cp_parser_constant_expression (parser
, false, NULL
);
4813 index
= cp_parser_expression (parser
, /*cast_p=*/false);
4815 /* Look for the closing `]'. */
4816 cp_parser_require (parser
, CPP_CLOSE_SQUARE
, "%<]%>");
4818 /* Build the ARRAY_REF. */
4819 postfix_expression
= grok_array_decl (postfix_expression
, index
);
4821 /* When not doing offsetof, array references are not permitted in
4822 constant-expressions. */
4824 && (cp_parser_non_integral_constant_expression
4825 (parser
, "an array reference")))
4826 postfix_expression
= error_mark_node
;
4828 return postfix_expression
;
4831 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4832 by cp_parser_builtin_offsetof. We're looking for
4834 postfix-expression . template [opt] id-expression
4835 postfix-expression . pseudo-destructor-name
4836 postfix-expression -> template [opt] id-expression
4837 postfix-expression -> pseudo-destructor-name
4839 FOR_OFFSETOF is set if we're being called in that context. That sorta
4840 limits what of the above we'll actually accept, but nevermind.
4841 TOKEN_TYPE is the "." or "->" token, which will already have been
4842 removed from the stream. */
4845 cp_parser_postfix_dot_deref_expression (cp_parser
*parser
,
4846 enum cpp_ttype token_type
,
4847 tree postfix_expression
,
4848 bool for_offsetof
, cp_id_kind
*idk
)
4852 bool pseudo_destructor_p
;
4853 tree scope
= NULL_TREE
;
4855 /* If this is a `->' operator, dereference the pointer. */
4856 if (token_type
== CPP_DEREF
)
4857 postfix_expression
= build_x_arrow (postfix_expression
);
4858 /* Check to see whether or not the expression is type-dependent. */
4859 dependent_p
= type_dependent_expression_p (postfix_expression
);
4860 /* The identifier following the `->' or `.' is not qualified. */
4861 parser
->scope
= NULL_TREE
;
4862 parser
->qualifying_scope
= NULL_TREE
;
4863 parser
->object_scope
= NULL_TREE
;
4864 *idk
= CP_ID_KIND_NONE
;
4865 /* Enter the scope corresponding to the type of the object
4866 given by the POSTFIX_EXPRESSION. */
4867 if (!dependent_p
&& TREE_TYPE (postfix_expression
) != NULL_TREE
)
4869 scope
= TREE_TYPE (postfix_expression
);
4870 /* According to the standard, no expression should ever have
4871 reference type. Unfortunately, we do not currently match
4872 the standard in this respect in that our internal representation
4873 of an expression may have reference type even when the standard
4874 says it does not. Therefore, we have to manually obtain the
4875 underlying type here. */
4876 scope
= non_reference (scope
);
4877 /* The type of the POSTFIX_EXPRESSION must be complete. */
4878 if (scope
== unknown_type_node
)
4880 error ("%qE does not have class type", postfix_expression
);
4884 scope
= complete_type_or_else (scope
, NULL_TREE
);
4885 /* Let the name lookup machinery know that we are processing a
4886 class member access expression. */
4887 parser
->context
->object_type
= scope
;
4888 /* If something went wrong, we want to be able to discern that case,
4889 as opposed to the case where there was no SCOPE due to the type
4890 of expression being dependent. */
4892 scope
= error_mark_node
;
4893 /* If the SCOPE was erroneous, make the various semantic analysis
4894 functions exit quickly -- and without issuing additional error
4896 if (scope
== error_mark_node
)
4897 postfix_expression
= error_mark_node
;
4900 /* Assume this expression is not a pseudo-destructor access. */
4901 pseudo_destructor_p
= false;
4903 /* If the SCOPE is a scalar type, then, if this is a valid program,
4904 we must be looking at a pseudo-destructor-name. If POSTFIX_EXPRESSION
4905 is type dependent, it can be pseudo-destructor-name or something else.
4906 Try to parse it as pseudo-destructor-name first. */
4907 if ((scope
&& SCALAR_TYPE_P (scope
)) || dependent_p
)
4912 cp_parser_parse_tentatively (parser
);
4913 /* Parse the pseudo-destructor-name. */
4915 cp_parser_pseudo_destructor_name (parser
, &s
, &type
);
4917 && (cp_parser_error_occurred (parser
)
4918 || TREE_CODE (type
) != TYPE_DECL
4919 || !SCALAR_TYPE_P (TREE_TYPE (type
))))
4920 cp_parser_abort_tentative_parse (parser
);
4921 else if (cp_parser_parse_definitely (parser
))
4923 pseudo_destructor_p
= true;
4925 = finish_pseudo_destructor_expr (postfix_expression
,
4926 s
, TREE_TYPE (type
));
4930 if (!pseudo_destructor_p
)
4932 /* If the SCOPE is not a scalar type, we are looking at an
4933 ordinary class member access expression, rather than a
4934 pseudo-destructor-name. */
4936 /* Parse the id-expression. */
4937 name
= (cp_parser_id_expression
4939 cp_parser_optional_template_keyword (parser
),
4940 /*check_dependency_p=*/true,
4942 /*declarator_p=*/false,
4943 /*optional_p=*/false));
4944 /* In general, build a SCOPE_REF if the member name is qualified.
4945 However, if the name was not dependent and has already been
4946 resolved; there is no need to build the SCOPE_REF. For example;
4948 struct X { void f(); };
4949 template <typename T> void f(T* t) { t->X::f(); }
4951 Even though "t" is dependent, "X::f" is not and has been resolved
4952 to a BASELINK; there is no need to include scope information. */
4954 /* But we do need to remember that there was an explicit scope for
4955 virtual function calls. */
4957 *idk
= CP_ID_KIND_QUALIFIED
;
4959 /* If the name is a template-id that names a type, we will get a
4960 TYPE_DECL here. That is invalid code. */
4961 if (TREE_CODE (name
) == TYPE_DECL
)
4963 error ("invalid use of %qD", name
);
4964 postfix_expression
= error_mark_node
;
4968 if (name
!= error_mark_node
&& !BASELINK_P (name
) && parser
->scope
)
4970 name
= build_qualified_name (/*type=*/NULL_TREE
,
4974 parser
->scope
= NULL_TREE
;
4975 parser
->qualifying_scope
= NULL_TREE
;
4976 parser
->object_scope
= NULL_TREE
;
4978 if (scope
&& name
&& BASELINK_P (name
))
4979 adjust_result_of_qualified_name_lookup
4980 (name
, BINFO_TYPE (BASELINK_ACCESS_BINFO (name
)), scope
);
4982 = finish_class_member_access_expr (postfix_expression
, name
,
4984 tf_warning_or_error
);
4988 /* We no longer need to look up names in the scope of the object on
4989 the left-hand side of the `.' or `->' operator. */
4990 parser
->context
->object_type
= NULL_TREE
;
4992 /* Outside of offsetof, these operators may not appear in
4993 constant-expressions. */
4995 && (cp_parser_non_integral_constant_expression
4996 (parser
, token_type
== CPP_DEREF
? "%<->%>" : "%<.%>")))
4997 postfix_expression
= error_mark_node
;
4999 return postfix_expression
;
5002 /* Parse a parenthesized expression-list.
5005 assignment-expression
5006 expression-list, assignment-expression
5011 identifier, expression-list
5013 CAST_P is true if this expression is the target of a cast.
5015 ALLOW_EXPANSION_P is true if this expression allows expansion of an
5018 Returns a TREE_LIST. The TREE_VALUE of each node is a
5019 representation of an assignment-expression. Note that a TREE_LIST
5020 is returned even if there is only a single expression in the list.
5021 error_mark_node is returned if the ( and or ) are
5022 missing. NULL_TREE is returned on no expressions. The parentheses
5023 are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
5024 list being parsed. If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
5025 indicates whether or not all of the expressions in the list were
5029 cp_parser_parenthesized_expression_list (cp_parser
* parser
,
5030 bool is_attribute_list
,
5032 bool allow_expansion_p
,
5033 bool *non_constant_p
)
5035 tree expression_list
= NULL_TREE
;
5036 bool fold_expr_p
= is_attribute_list
;
5037 tree identifier
= NULL_TREE
;
5038 bool saved_greater_than_is_operator_p
;
5040 /* Assume all the expressions will be constant. */
5042 *non_constant_p
= false;
5044 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
5045 return error_mark_node
;
5047 /* Within a parenthesized expression, a `>' token is always
5048 the greater-than operator. */
5049 saved_greater_than_is_operator_p
5050 = parser
->greater_than_is_operator_p
;
5051 parser
->greater_than_is_operator_p
= true;
5053 /* Consume expressions until there are no more. */
5054 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_CLOSE_PAREN
))
5059 /* At the beginning of attribute lists, check to see if the
5060 next token is an identifier. */
5061 if (is_attribute_list
5062 && cp_lexer_peek_token (parser
->lexer
)->type
== CPP_NAME
)
5066 /* Consume the identifier. */
5067 token
= cp_lexer_consume_token (parser
->lexer
);
5068 /* Save the identifier. */
5069 identifier
= token
->u
.value
;
5073 /* Parse the next assignment-expression. */
5076 bool expr_non_constant_p
;
5077 expr
= (cp_parser_constant_expression
5078 (parser
, /*allow_non_constant_p=*/true,
5079 &expr_non_constant_p
));
5080 if (expr_non_constant_p
)
5081 *non_constant_p
= true;
5084 expr
= cp_parser_assignment_expression (parser
, cast_p
);
5087 expr
= fold_non_dependent_expr (expr
);
5089 /* If we have an ellipsis, then this is an expression
5091 if (allow_expansion_p
5092 && cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
5094 /* Consume the `...'. */
5095 cp_lexer_consume_token (parser
->lexer
);
5097 /* Build the argument pack. */
5098 expr
= make_pack_expansion (expr
);
5101 /* Add it to the list. We add error_mark_node
5102 expressions to the list, so that we can still tell if
5103 the correct form for a parenthesized expression-list
5104 is found. That gives better errors. */
5105 expression_list
= tree_cons (NULL_TREE
, expr
, expression_list
);
5107 if (expr
== error_mark_node
)
5111 /* After the first item, attribute lists look the same as
5112 expression lists. */
5113 is_attribute_list
= false;
5116 /* If the next token isn't a `,', then we are done. */
5117 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
5120 /* Otherwise, consume the `,' and keep going. */
5121 cp_lexer_consume_token (parser
->lexer
);
5124 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
5129 /* We try and resync to an unnested comma, as that will give the
5130 user better diagnostics. */
5131 ending
= cp_parser_skip_to_closing_parenthesis (parser
,
5132 /*recovering=*/true,
5134 /*consume_paren=*/true);
5139 parser
->greater_than_is_operator_p
5140 = saved_greater_than_is_operator_p
;
5141 return error_mark_node
;
5145 parser
->greater_than_is_operator_p
5146 = saved_greater_than_is_operator_p
;
5148 /* We built up the list in reverse order so we must reverse it now. */
5149 expression_list
= nreverse (expression_list
);
5151 expression_list
= tree_cons (NULL_TREE
, identifier
, expression_list
);
5153 return expression_list
;
5156 /* Parse a pseudo-destructor-name.
5158 pseudo-destructor-name:
5159 :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
5160 :: [opt] nested-name-specifier template template-id :: ~ type-name
5161 :: [opt] nested-name-specifier [opt] ~ type-name
5163 If either of the first two productions is used, sets *SCOPE to the
5164 TYPE specified before the final `::'. Otherwise, *SCOPE is set to
5165 NULL_TREE. *TYPE is set to the TYPE_DECL for the final type-name,
5166 or ERROR_MARK_NODE if the parse fails. */
5169 cp_parser_pseudo_destructor_name (cp_parser
* parser
,
5173 bool nested_name_specifier_p
;
5175 /* Assume that things will not work out. */
5176 *type
= error_mark_node
;
5178 /* Look for the optional `::' operator. */
5179 cp_parser_global_scope_opt (parser
, /*current_scope_valid_p=*/true);
5180 /* Look for the optional nested-name-specifier. */
5181 nested_name_specifier_p
5182 = (cp_parser_nested_name_specifier_opt (parser
,
5183 /*typename_keyword_p=*/false,
5184 /*check_dependency_p=*/true,
5186 /*is_declaration=*/true)
5188 /* Now, if we saw a nested-name-specifier, we might be doing the
5189 second production. */
5190 if (nested_name_specifier_p
5191 && cp_lexer_next_token_is_keyword (parser
->lexer
, RID_TEMPLATE
))
5193 /* Consume the `template' keyword. */
5194 cp_lexer_consume_token (parser
->lexer
);
5195 /* Parse the template-id. */
5196 cp_parser_template_id (parser
,
5197 /*template_keyword_p=*/true,
5198 /*check_dependency_p=*/false,
5199 /*is_declaration=*/true);
5200 /* Look for the `::' token. */
5201 cp_parser_require (parser
, CPP_SCOPE
, "%<::%>");
5203 /* If the next token is not a `~', then there might be some
5204 additional qualification. */
5205 else if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMPL
))
5207 /* At this point, we're looking for "type-name :: ~". The type-name
5208 must not be a class-name, since this is a pseudo-destructor. So,
5209 it must be either an enum-name, or a typedef-name -- both of which
5210 are just identifiers. So, we peek ahead to check that the "::"
5211 and "~" tokens are present; if they are not, then we can avoid
5212 calling type_name. */
5213 if (cp_lexer_peek_token (parser
->lexer
)->type
!= CPP_NAME
5214 || cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
!= CPP_SCOPE
5215 || cp_lexer_peek_nth_token (parser
->lexer
, 3)->type
!= CPP_COMPL
)
5217 cp_parser_error (parser
, "non-scalar type");
5221 /* Look for the type-name. */
5222 *scope
= TREE_TYPE (cp_parser_nonclass_name (parser
));
5223 if (*scope
== error_mark_node
)
5226 /* Look for the `::' token. */
5227 cp_parser_require (parser
, CPP_SCOPE
, "%<::%>");
5232 /* Look for the `~'. */
5233 cp_parser_require (parser
, CPP_COMPL
, "%<~%>");
5234 /* Look for the type-name again. We are not responsible for
5235 checking that it matches the first type-name. */
5236 *type
= cp_parser_nonclass_name (parser
);
5239 /* Parse a unary-expression.
5245 unary-operator cast-expression
5246 sizeof unary-expression
5254 __extension__ cast-expression
5255 __alignof__ unary-expression
5256 __alignof__ ( type-id )
5257 __real__ cast-expression
5258 __imag__ cast-expression
5261 ADDRESS_P is true iff the unary-expression is appearing as the
5262 operand of the `&' operator. CAST_P is true if this expression is
5263 the target of a cast.
5265 Returns a representation of the expression. */
5268 cp_parser_unary_expression (cp_parser
*parser
, bool address_p
, bool cast_p
)
5271 enum tree_code unary_operator
;
5273 /* Peek at the next token. */
5274 token
= cp_lexer_peek_token (parser
->lexer
);
5275 /* Some keywords give away the kind of expression. */
5276 if (token
->type
== CPP_KEYWORD
)
5278 enum rid keyword
= token
->keyword
;
5288 op
= keyword
== RID_ALIGNOF
? ALIGNOF_EXPR
: SIZEOF_EXPR
;
5289 /* Consume the token. */
5290 cp_lexer_consume_token (parser
->lexer
);
5291 /* Parse the operand. */
5292 operand
= cp_parser_sizeof_operand (parser
, keyword
);
5294 if (TYPE_P (operand
))
5295 return cxx_sizeof_or_alignof_type (operand
, op
, true);
5297 return cxx_sizeof_or_alignof_expr (operand
, op
, true);
5301 return cp_parser_new_expression (parser
);
5304 return cp_parser_delete_expression (parser
);
5308 /* The saved value of the PEDANTIC flag. */
5312 /* Save away the PEDANTIC flag. */
5313 cp_parser_extension_opt (parser
, &saved_pedantic
);
5314 /* Parse the cast-expression. */
5315 expr
= cp_parser_simple_cast_expression (parser
);
5316 /* Restore the PEDANTIC flag. */
5317 pedantic
= saved_pedantic
;
5327 /* Consume the `__real__' or `__imag__' token. */
5328 cp_lexer_consume_token (parser
->lexer
);
5329 /* Parse the cast-expression. */
5330 expression
= cp_parser_simple_cast_expression (parser
);
5331 /* Create the complete representation. */
5332 return build_x_unary_op ((keyword
== RID_REALPART
5333 ? REALPART_EXPR
: IMAGPART_EXPR
),
5335 tf_warning_or_error
);
5344 /* Look for the `:: new' and `:: delete', which also signal the
5345 beginning of a new-expression, or delete-expression,
5346 respectively. If the next token is `::', then it might be one of
5348 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SCOPE
))
5352 /* See if the token after the `::' is one of the keywords in
5353 which we're interested. */
5354 keyword
= cp_lexer_peek_nth_token (parser
->lexer
, 2)->keyword
;
5355 /* If it's `new', we have a new-expression. */
5356 if (keyword
== RID_NEW
)
5357 return cp_parser_new_expression (parser
);
5358 /* Similarly, for `delete'. */
5359 else if (keyword
== RID_DELETE
)
5360 return cp_parser_delete_expression (parser
);
5363 /* Look for a unary operator. */
5364 unary_operator
= cp_parser_unary_operator (token
);
5365 /* The `++' and `--' operators can be handled similarly, even though
5366 they are not technically unary-operators in the grammar. */
5367 if (unary_operator
== ERROR_MARK
)
5369 if (token
->type
== CPP_PLUS_PLUS
)
5370 unary_operator
= PREINCREMENT_EXPR
;
5371 else if (token
->type
== CPP_MINUS_MINUS
)
5372 unary_operator
= PREDECREMENT_EXPR
;
5373 /* Handle the GNU address-of-label extension. */
5374 else if (cp_parser_allow_gnu_extensions_p (parser
)
5375 && token
->type
== CPP_AND_AND
)
5380 /* Consume the '&&' token. */
5381 cp_lexer_consume_token (parser
->lexer
);
5382 /* Look for the identifier. */
5383 identifier
= cp_parser_identifier (parser
);
5384 /* Create an expression representing the address. */
5385 expression
= finish_label_address_expr (identifier
);
5386 if (cp_parser_non_integral_constant_expression (parser
,
5387 "the address of a label"))
5388 expression
= error_mark_node
;
5392 if (unary_operator
!= ERROR_MARK
)
5394 tree cast_expression
;
5395 tree expression
= error_mark_node
;
5396 const char *non_constant_p
= NULL
;
5398 /* Consume the operator token. */
5399 token
= cp_lexer_consume_token (parser
->lexer
);
5400 /* Parse the cast-expression. */
5402 = cp_parser_cast_expression (parser
,
5403 unary_operator
== ADDR_EXPR
,
5405 /* Now, build an appropriate representation. */
5406 switch (unary_operator
)
5409 non_constant_p
= "%<*%>";
5410 expression
= build_x_indirect_ref (cast_expression
, "unary *",
5411 tf_warning_or_error
);
5415 non_constant_p
= "%<&%>";
5418 expression
= build_x_unary_op (unary_operator
, cast_expression
,
5419 tf_warning_or_error
);
5422 case PREINCREMENT_EXPR
:
5423 case PREDECREMENT_EXPR
:
5424 non_constant_p
= (unary_operator
== PREINCREMENT_EXPR
5425 ? "%<++%>" : "%<--%>");
5427 case UNARY_PLUS_EXPR
:
5429 case TRUTH_NOT_EXPR
:
5430 expression
= finish_unary_op_expr (unary_operator
, cast_expression
);
5438 && cp_parser_non_integral_constant_expression (parser
,
5440 expression
= error_mark_node
;
5445 return cp_parser_postfix_expression (parser
, address_p
, cast_p
,
5446 /*member_access_only_p=*/false);
5449 /* Returns ERROR_MARK if TOKEN is not a unary-operator. If TOKEN is a
5450 unary-operator, the corresponding tree code is returned. */
5452 static enum tree_code
5453 cp_parser_unary_operator (cp_token
* token
)
5455 switch (token
->type
)
5458 return INDIRECT_REF
;
5464 return UNARY_PLUS_EXPR
;
5470 return TRUTH_NOT_EXPR
;
5473 return BIT_NOT_EXPR
;
5480 /* Parse a new-expression.
5483 :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5484 :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5486 Returns a representation of the expression. */
5489 cp_parser_new_expression (cp_parser
* parser
)
5491 bool global_scope_p
;
5497 /* Look for the optional `::' operator. */
5499 = (cp_parser_global_scope_opt (parser
,
5500 /*current_scope_valid_p=*/false)
5502 /* Look for the `new' operator. */
5503 cp_parser_require_keyword (parser
, RID_NEW
, "%<new%>");
5504 /* There's no easy way to tell a new-placement from the
5505 `( type-id )' construct. */
5506 cp_parser_parse_tentatively (parser
);
5507 /* Look for a new-placement. */
5508 placement
= cp_parser_new_placement (parser
);
5509 /* If that didn't work out, there's no new-placement. */
5510 if (!cp_parser_parse_definitely (parser
))
5511 placement
= NULL_TREE
;
5513 /* If the next token is a `(', then we have a parenthesized
5515 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_PAREN
))
5517 /* Consume the `('. */
5518 cp_lexer_consume_token (parser
->lexer
);
5519 /* Parse the type-id. */
5520 type
= cp_parser_type_id (parser
);
5521 /* Look for the closing `)'. */
5522 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
5523 /* There should not be a direct-new-declarator in this production,
5524 but GCC used to allowed this, so we check and emit a sensible error
5525 message for this case. */
5526 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_SQUARE
))
5528 error ("array bound forbidden after parenthesized type-id");
5529 inform ("try removing the parentheses around the type-id");
5530 cp_parser_direct_new_declarator (parser
);
5534 /* Otherwise, there must be a new-type-id. */
5536 type
= cp_parser_new_type_id (parser
, &nelts
);
5538 /* If the next token is a `(', then we have a new-initializer. */
5539 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_PAREN
))
5540 initializer
= cp_parser_new_initializer (parser
);
5542 initializer
= NULL_TREE
;
5544 /* A new-expression may not appear in an integral constant
5546 if (cp_parser_non_integral_constant_expression (parser
, "%<new%>"))
5547 return error_mark_node
;
5549 /* Create a representation of the new-expression. */
5550 return build_new (placement
, type
, nelts
, initializer
, global_scope_p
,
5551 tf_warning_or_error
);
5554 /* Parse a new-placement.
5559 Returns the same representation as for an expression-list. */
5562 cp_parser_new_placement (cp_parser
* parser
)
5564 tree expression_list
;
5566 /* Parse the expression-list. */
5567 expression_list
= (cp_parser_parenthesized_expression_list
5568 (parser
, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5569 /*non_constant_p=*/NULL
));
5571 return expression_list
;
5574 /* Parse a new-type-id.
5577 type-specifier-seq new-declarator [opt]
5579 Returns the TYPE allocated. If the new-type-id indicates an array
5580 type, *NELTS is set to the number of elements in the last array
5581 bound; the TYPE will not include the last array bound. */
5584 cp_parser_new_type_id (cp_parser
* parser
, tree
*nelts
)
5586 cp_decl_specifier_seq type_specifier_seq
;
5587 cp_declarator
*new_declarator
;
5588 cp_declarator
*declarator
;
5589 cp_declarator
*outer_declarator
;
5590 const char *saved_message
;
5593 /* The type-specifier sequence must not contain type definitions.
5594 (It cannot contain declarations of new types either, but if they
5595 are not definitions we will catch that because they are not
5597 saved_message
= parser
->type_definition_forbidden_message
;
5598 parser
->type_definition_forbidden_message
5599 = "types may not be defined in a new-type-id";
5600 /* Parse the type-specifier-seq. */
5601 cp_parser_type_specifier_seq (parser
, /*is_condition=*/false,
5602 &type_specifier_seq
);
5603 /* Restore the old message. */
5604 parser
->type_definition_forbidden_message
= saved_message
;
5605 /* Parse the new-declarator. */
5606 new_declarator
= cp_parser_new_declarator_opt (parser
);
5608 /* Determine the number of elements in the last array dimension, if
5611 /* Skip down to the last array dimension. */
5612 declarator
= new_declarator
;
5613 outer_declarator
= NULL
;
5614 while (declarator
&& (declarator
->kind
== cdk_pointer
5615 || declarator
->kind
== cdk_ptrmem
))
5617 outer_declarator
= declarator
;
5618 declarator
= declarator
->declarator
;
5621 && declarator
->kind
== cdk_array
5622 && declarator
->declarator
5623 && declarator
->declarator
->kind
== cdk_array
)
5625 outer_declarator
= declarator
;
5626 declarator
= declarator
->declarator
;
5629 if (declarator
&& declarator
->kind
== cdk_array
)
5631 *nelts
= declarator
->u
.array
.bounds
;
5632 if (*nelts
== error_mark_node
)
5633 *nelts
= integer_one_node
;
5635 if (outer_declarator
)
5636 outer_declarator
->declarator
= declarator
->declarator
;
5638 new_declarator
= NULL
;
5641 type
= groktypename (&type_specifier_seq
, new_declarator
);
5645 /* Parse an (optional) new-declarator.
5648 ptr-operator new-declarator [opt]
5649 direct-new-declarator
5651 Returns the declarator. */
5653 static cp_declarator
*
5654 cp_parser_new_declarator_opt (cp_parser
* parser
)
5656 enum tree_code code
;
5658 cp_cv_quals cv_quals
;
5660 /* We don't know if there's a ptr-operator next, or not. */
5661 cp_parser_parse_tentatively (parser
);
5662 /* Look for a ptr-operator. */
5663 code
= cp_parser_ptr_operator (parser
, &type
, &cv_quals
);
5664 /* If that worked, look for more new-declarators. */
5665 if (cp_parser_parse_definitely (parser
))
5667 cp_declarator
*declarator
;
5669 /* Parse another optional declarator. */
5670 declarator
= cp_parser_new_declarator_opt (parser
);
5672 return cp_parser_make_indirect_declarator
5673 (code
, type
, cv_quals
, declarator
);
5676 /* If the next token is a `[', there is a direct-new-declarator. */
5677 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_SQUARE
))
5678 return cp_parser_direct_new_declarator (parser
);
5683 /* Parse a direct-new-declarator.
5685 direct-new-declarator:
5687 direct-new-declarator [constant-expression]
5691 static cp_declarator
*
5692 cp_parser_direct_new_declarator (cp_parser
* parser
)
5694 cp_declarator
*declarator
= NULL
;
5700 /* Look for the opening `['. */
5701 cp_parser_require (parser
, CPP_OPEN_SQUARE
, "%<[%>");
5702 /* The first expression is not required to be constant. */
5705 expression
= cp_parser_expression (parser
, /*cast_p=*/false);
5706 /* The standard requires that the expression have integral
5707 type. DR 74 adds enumeration types. We believe that the
5708 real intent is that these expressions be handled like the
5709 expression in a `switch' condition, which also allows
5710 classes with a single conversion to integral or
5711 enumeration type. */
5712 if (!processing_template_decl
)
5715 = build_expr_type_conversion (WANT_INT
| WANT_ENUM
,
5720 error ("expression in new-declarator must have integral "
5721 "or enumeration type");
5722 expression
= error_mark_node
;
5726 /* But all the other expressions must be. */
5729 = cp_parser_constant_expression (parser
,
5730 /*allow_non_constant=*/false,
5732 /* Look for the closing `]'. */
5733 cp_parser_require (parser
, CPP_CLOSE_SQUARE
, "%<]%>");
5735 /* Add this bound to the declarator. */
5736 declarator
= make_array_declarator (declarator
, expression
);
5738 /* If the next token is not a `[', then there are no more
5740 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_OPEN_SQUARE
))
5747 /* Parse a new-initializer.
5750 ( expression-list [opt] )
5752 Returns a representation of the expression-list. If there is no
5753 expression-list, VOID_ZERO_NODE is returned. */
5756 cp_parser_new_initializer (cp_parser
* parser
)
5758 tree expression_list
;
5760 expression_list
= (cp_parser_parenthesized_expression_list
5761 (parser
, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5762 /*non_constant_p=*/NULL
));
5763 if (!expression_list
)
5764 expression_list
= void_zero_node
;
5766 return expression_list
;
5769 /* Parse a delete-expression.
5772 :: [opt] delete cast-expression
5773 :: [opt] delete [ ] cast-expression
5775 Returns a representation of the expression. */
5778 cp_parser_delete_expression (cp_parser
* parser
)
5780 bool global_scope_p
;
5784 /* Look for the optional `::' operator. */
5786 = (cp_parser_global_scope_opt (parser
,
5787 /*current_scope_valid_p=*/false)
5789 /* Look for the `delete' keyword. */
5790 cp_parser_require_keyword (parser
, RID_DELETE
, "%<delete%>");
5791 /* See if the array syntax is in use. */
5792 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_SQUARE
))
5794 /* Consume the `[' token. */
5795 cp_lexer_consume_token (parser
->lexer
);
5796 /* Look for the `]' token. */
5797 cp_parser_require (parser
, CPP_CLOSE_SQUARE
, "%<]%>");
5798 /* Remember that this is the `[]' construct. */
5804 /* Parse the cast-expression. */
5805 expression
= cp_parser_simple_cast_expression (parser
);
5807 /* A delete-expression may not appear in an integral constant
5809 if (cp_parser_non_integral_constant_expression (parser
, "%<delete%>"))
5810 return error_mark_node
;
5812 return delete_sanity (expression
, NULL_TREE
, array_p
, global_scope_p
);
5815 /* Parse a cast-expression.
5819 ( type-id ) cast-expression
5821 ADDRESS_P is true iff the unary-expression is appearing as the
5822 operand of the `&' operator. CAST_P is true if this expression is
5823 the target of a cast.
5825 Returns a representation of the expression. */
5828 cp_parser_cast_expression (cp_parser
*parser
, bool address_p
, bool cast_p
)
5830 /* If it's a `(', then we might be looking at a cast. */
5831 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_PAREN
))
5833 tree type
= NULL_TREE
;
5834 tree expr
= NULL_TREE
;
5835 bool compound_literal_p
;
5836 const char *saved_message
;
5838 /* There's no way to know yet whether or not this is a cast.
5839 For example, `(int (3))' is a unary-expression, while `(int)
5840 3' is a cast. So, we resort to parsing tentatively. */
5841 cp_parser_parse_tentatively (parser
);
5842 /* Types may not be defined in a cast. */
5843 saved_message
= parser
->type_definition_forbidden_message
;
5844 parser
->type_definition_forbidden_message
5845 = "types may not be defined in casts";
5846 /* Consume the `('. */
5847 cp_lexer_consume_token (parser
->lexer
);
5848 /* A very tricky bit is that `(struct S) { 3 }' is a
5849 compound-literal (which we permit in C++ as an extension).
5850 But, that construct is not a cast-expression -- it is a
5851 postfix-expression. (The reason is that `(struct S) { 3 }.i'
5852 is legal; if the compound-literal were a cast-expression,
5853 you'd need an extra set of parentheses.) But, if we parse
5854 the type-id, and it happens to be a class-specifier, then we
5855 will commit to the parse at that point, because we cannot
5856 undo the action that is done when creating a new class. So,
5857 then we cannot back up and do a postfix-expression.
5859 Therefore, we scan ahead to the closing `)', and check to see
5860 if the token after the `)' is a `{'. If so, we are not
5861 looking at a cast-expression.
5863 Save tokens so that we can put them back. */
5864 cp_lexer_save_tokens (parser
->lexer
);
5865 /* Skip tokens until the next token is a closing parenthesis.
5866 If we find the closing `)', and the next token is a `{', then
5867 we are looking at a compound-literal. */
5869 = (cp_parser_skip_to_closing_parenthesis (parser
, false, false,
5870 /*consume_paren=*/true)
5871 && cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_BRACE
));
5872 /* Roll back the tokens we skipped. */
5873 cp_lexer_rollback_tokens (parser
->lexer
);
5874 /* If we were looking at a compound-literal, simulate an error
5875 so that the call to cp_parser_parse_definitely below will
5877 if (compound_literal_p
)
5878 cp_parser_simulate_error (parser
);
5881 bool saved_in_type_id_in_expr_p
= parser
->in_type_id_in_expr_p
;
5882 parser
->in_type_id_in_expr_p
= true;
5883 /* Look for the type-id. */
5884 type
= cp_parser_type_id (parser
);
5885 /* Look for the closing `)'. */
5886 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
5887 parser
->in_type_id_in_expr_p
= saved_in_type_id_in_expr_p
;
5890 /* Restore the saved message. */
5891 parser
->type_definition_forbidden_message
= saved_message
;
5893 /* If ok so far, parse the dependent expression. We cannot be
5894 sure it is a cast. Consider `(T ())'. It is a parenthesized
5895 ctor of T, but looks like a cast to function returning T
5896 without a dependent expression. */
5897 if (!cp_parser_error_occurred (parser
))
5898 expr
= cp_parser_cast_expression (parser
,
5899 /*address_p=*/false,
5902 if (cp_parser_parse_definitely (parser
))
5904 /* Warn about old-style casts, if so requested. */
5905 if (warn_old_style_cast
5906 && !in_system_header
5907 && !VOID_TYPE_P (type
)
5908 && current_lang_name
!= lang_name_c
)
5909 warning (OPT_Wold_style_cast
, "use of old-style cast");
5911 /* Only type conversions to integral or enumeration types
5912 can be used in constant-expressions. */
5913 if (!cast_valid_in_integral_constant_expression_p (type
)
5914 && (cp_parser_non_integral_constant_expression
5916 "a cast to a type other than an integral or "
5917 "enumeration type")))
5918 return error_mark_node
;
5920 /* Perform the cast. */
5921 expr
= build_c_cast (type
, expr
);
5926 /* If we get here, then it's not a cast, so it must be a
5927 unary-expression. */
5928 return cp_parser_unary_expression (parser
, address_p
, cast_p
);
5931 /* Parse a binary expression of the general form:
5935 pm-expression .* cast-expression
5936 pm-expression ->* cast-expression
5938 multiplicative-expression:
5940 multiplicative-expression * pm-expression
5941 multiplicative-expression / pm-expression
5942 multiplicative-expression % pm-expression
5944 additive-expression:
5945 multiplicative-expression
5946 additive-expression + multiplicative-expression
5947 additive-expression - multiplicative-expression
5951 shift-expression << additive-expression
5952 shift-expression >> additive-expression
5954 relational-expression:
5956 relational-expression < shift-expression
5957 relational-expression > shift-expression
5958 relational-expression <= shift-expression
5959 relational-expression >= shift-expression
5963 relational-expression:
5964 relational-expression <? shift-expression
5965 relational-expression >? shift-expression
5967 equality-expression:
5968 relational-expression
5969 equality-expression == relational-expression
5970 equality-expression != relational-expression
5974 and-expression & equality-expression
5976 exclusive-or-expression:
5978 exclusive-or-expression ^ and-expression
5980 inclusive-or-expression:
5981 exclusive-or-expression
5982 inclusive-or-expression | exclusive-or-expression
5984 logical-and-expression:
5985 inclusive-or-expression
5986 logical-and-expression && inclusive-or-expression
5988 logical-or-expression:
5989 logical-and-expression
5990 logical-or-expression || logical-and-expression
5992 All these are implemented with a single function like:
5995 simple-cast-expression
5996 binary-expression <token> binary-expression
5998 CAST_P is true if this expression is the target of a cast.
6000 The binops_by_token map is used to get the tree codes for each <token> type.
6001 binary-expressions are associated according to a precedence table. */
6003 #define TOKEN_PRECEDENCE(token) \
6004 (((token->type == CPP_GREATER \
6005 || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
6006 && !parser->greater_than_is_operator_p) \
6007 ? PREC_NOT_OPERATOR \
6008 : binops_by_token[token->type].prec)
6011 cp_parser_binary_expression (cp_parser
* parser
, bool cast_p
)
6013 cp_parser_expression_stack stack
;
6014 cp_parser_expression_stack_entry
*sp
= &stack
[0];
6017 enum tree_code tree_type
, lhs_type
, rhs_type
;
6018 enum cp_parser_prec prec
= PREC_NOT_OPERATOR
, new_prec
, lookahead_prec
;
6021 /* Parse the first expression. */
6022 lhs
= cp_parser_cast_expression (parser
, /*address_p=*/false, cast_p
);
6023 lhs_type
= ERROR_MARK
;
6027 /* Get an operator token. */
6028 token
= cp_lexer_peek_token (parser
->lexer
);
6030 if (warn_cxx0x_compat
6031 && token
->type
== CPP_RSHIFT
6032 && !parser
->greater_than_is_operator_p
)
6034 warning (OPT_Wc__0x_compat
,
6035 "%H%<>>%> operator will be treated as two right angle brackets in C++0x",
6037 warning (OPT_Wc__0x_compat
,
6038 "suggest parentheses around %<>>%> expression");
6041 new_prec
= TOKEN_PRECEDENCE (token
);
6043 /* Popping an entry off the stack means we completed a subexpression:
6044 - either we found a token which is not an operator (`>' where it is not
6045 an operator, or prec == PREC_NOT_OPERATOR), in which case popping
6046 will happen repeatedly;
6047 - or, we found an operator which has lower priority. This is the case
6048 where the recursive descent *ascends*, as in `3 * 4 + 5' after
6050 if (new_prec
<= prec
)
6059 tree_type
= binops_by_token
[token
->type
].tree_type
;
6061 /* We used the operator token. */
6062 cp_lexer_consume_token (parser
->lexer
);
6064 /* Extract another operand. It may be the RHS of this expression
6065 or the LHS of a new, higher priority expression. */
6066 rhs
= cp_parser_simple_cast_expression (parser
);
6067 rhs_type
= ERROR_MARK
;
6069 /* Get another operator token. Look up its precedence to avoid
6070 building a useless (immediately popped) stack entry for common
6071 cases such as 3 + 4 + 5 or 3 * 4 + 5. */
6072 token
= cp_lexer_peek_token (parser
->lexer
);
6073 lookahead_prec
= TOKEN_PRECEDENCE (token
);
6074 if (lookahead_prec
> new_prec
)
6076 /* ... and prepare to parse the RHS of the new, higher priority
6077 expression. Since precedence levels on the stack are
6078 monotonically increasing, we do not have to care about
6081 sp
->tree_type
= tree_type
;
6083 sp
->lhs_type
= lhs_type
;
6086 lhs_type
= rhs_type
;
6088 new_prec
= lookahead_prec
;
6092 /* If the stack is not empty, we have parsed into LHS the right side
6093 (`4' in the example above) of an expression we had suspended.
6094 We can use the information on the stack to recover the LHS (`3')
6095 from the stack together with the tree code (`MULT_EXPR'), and
6096 the precedence of the higher level subexpression
6097 (`PREC_ADDITIVE_EXPRESSION'). TOKEN is the CPP_PLUS token,
6098 which will be used to actually build the additive expression. */
6101 tree_type
= sp
->tree_type
;
6103 rhs_type
= lhs_type
;
6105 lhs_type
= sp
->lhs_type
;
6108 overloaded_p
= false;
6109 lhs
= build_x_binary_op (tree_type
, lhs
, lhs_type
, rhs
, rhs_type
,
6110 &overloaded_p
, tf_warning_or_error
);
6111 lhs_type
= tree_type
;
6113 /* If the binary operator required the use of an overloaded operator,
6114 then this expression cannot be an integral constant-expression.
6115 An overloaded operator can be used even if both operands are
6116 otherwise permissible in an integral constant-expression if at
6117 least one of the operands is of enumeration type. */
6120 && (cp_parser_non_integral_constant_expression
6121 (parser
, "calls to overloaded operators")))
6122 return error_mark_node
;
6129 /* Parse the `? expression : assignment-expression' part of a
6130 conditional-expression. The LOGICAL_OR_EXPR is the
6131 logical-or-expression that started the conditional-expression.
6132 Returns a representation of the entire conditional-expression.
6134 This routine is used by cp_parser_assignment_expression.
6136 ? expression : assignment-expression
6140 ? : assignment-expression */
6143 cp_parser_question_colon_clause (cp_parser
* parser
, tree logical_or_expr
)
6146 tree assignment_expr
;
6148 /* Consume the `?' token. */
6149 cp_lexer_consume_token (parser
->lexer
);
6150 if (cp_parser_allow_gnu_extensions_p (parser
)
6151 && cp_lexer_next_token_is (parser
->lexer
, CPP_COLON
))
6152 /* Implicit true clause. */
6155 /* Parse the expression. */
6156 expr
= cp_parser_expression (parser
, /*cast_p=*/false);
6158 /* The next token should be a `:'. */
6159 cp_parser_require (parser
, CPP_COLON
, "%<:%>");
6160 /* Parse the assignment-expression. */
6161 assignment_expr
= cp_parser_assignment_expression (parser
, /*cast_p=*/false);
6163 /* Build the conditional-expression. */
6164 return build_x_conditional_expr (logical_or_expr
,
6167 tf_warning_or_error
);
6170 /* Parse an assignment-expression.
6172 assignment-expression:
6173 conditional-expression
6174 logical-or-expression assignment-operator assignment_expression
6177 CAST_P is true if this expression is the target of a cast.
6179 Returns a representation for the expression. */
6182 cp_parser_assignment_expression (cp_parser
* parser
, bool cast_p
)
6186 /* If the next token is the `throw' keyword, then we're looking at
6187 a throw-expression. */
6188 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_THROW
))
6189 expr
= cp_parser_throw_expression (parser
);
6190 /* Otherwise, it must be that we are looking at a
6191 logical-or-expression. */
6194 /* Parse the binary expressions (logical-or-expression). */
6195 expr
= cp_parser_binary_expression (parser
, cast_p
);
6196 /* If the next token is a `?' then we're actually looking at a
6197 conditional-expression. */
6198 if (cp_lexer_next_token_is (parser
->lexer
, CPP_QUERY
))
6199 return cp_parser_question_colon_clause (parser
, expr
);
6202 enum tree_code assignment_operator
;
6204 /* If it's an assignment-operator, we're using the second
6207 = cp_parser_assignment_operator_opt (parser
);
6208 if (assignment_operator
!= ERROR_MARK
)
6212 /* Parse the right-hand side of the assignment. */
6213 rhs
= cp_parser_assignment_expression (parser
, cast_p
);
6214 /* An assignment may not appear in a
6215 constant-expression. */
6216 if (cp_parser_non_integral_constant_expression (parser
,
6218 return error_mark_node
;
6219 /* Build the assignment expression. */
6220 expr
= build_x_modify_expr (expr
,
6221 assignment_operator
,
6223 tf_warning_or_error
);
6231 /* Parse an (optional) assignment-operator.
6233 assignment-operator: one of
6234 = *= /= %= += -= >>= <<= &= ^= |=
6238 assignment-operator: one of
6241 If the next token is an assignment operator, the corresponding tree
6242 code is returned, and the token is consumed. For example, for
6243 `+=', PLUS_EXPR is returned. For `=' itself, the code returned is
6244 NOP_EXPR. For `/', TRUNC_DIV_EXPR is returned; for `%',
6245 TRUNC_MOD_EXPR is returned. If TOKEN is not an assignment
6246 operator, ERROR_MARK is returned. */
6248 static enum tree_code
6249 cp_parser_assignment_operator_opt (cp_parser
* parser
)
6254 /* Peek at the next toen. */
6255 token
= cp_lexer_peek_token (parser
->lexer
);
6257 switch (token
->type
)
6268 op
= TRUNC_DIV_EXPR
;
6272 op
= TRUNC_MOD_EXPR
;
6304 /* Nothing else is an assignment operator. */
6308 /* If it was an assignment operator, consume it. */
6309 if (op
!= ERROR_MARK
)
6310 cp_lexer_consume_token (parser
->lexer
);
6315 /* Parse an expression.
6318 assignment-expression
6319 expression , assignment-expression
6321 CAST_P is true if this expression is the target of a cast.
6323 Returns a representation of the expression. */
6326 cp_parser_expression (cp_parser
* parser
, bool cast_p
)
6328 tree expression
= NULL_TREE
;
6332 tree assignment_expression
;
6334 /* Parse the next assignment-expression. */
6335 assignment_expression
6336 = cp_parser_assignment_expression (parser
, cast_p
);
6337 /* If this is the first assignment-expression, we can just
6340 expression
= assignment_expression
;
6342 expression
= build_x_compound_expr (expression
,
6343 assignment_expression
,
6344 tf_warning_or_error
);
6345 /* If the next token is not a comma, then we are done with the
6347 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
6349 /* Consume the `,'. */
6350 cp_lexer_consume_token (parser
->lexer
);
6351 /* A comma operator cannot appear in a constant-expression. */
6352 if (cp_parser_non_integral_constant_expression (parser
,
6353 "a comma operator"))
6354 expression
= error_mark_node
;
6360 /* Parse a constant-expression.
6362 constant-expression:
6363 conditional-expression
6365 If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6366 accepted. If ALLOW_NON_CONSTANT_P is true and the expression is not
6367 constant, *NON_CONSTANT_P is set to TRUE. If ALLOW_NON_CONSTANT_P
6368 is false, NON_CONSTANT_P should be NULL. */
6371 cp_parser_constant_expression (cp_parser
* parser
,
6372 bool allow_non_constant_p
,
6373 bool *non_constant_p
)
6375 bool saved_integral_constant_expression_p
;
6376 bool saved_allow_non_integral_constant_expression_p
;
6377 bool saved_non_integral_constant_expression_p
;
6380 /* It might seem that we could simply parse the
6381 conditional-expression, and then check to see if it were
6382 TREE_CONSTANT. However, an expression that is TREE_CONSTANT is
6383 one that the compiler can figure out is constant, possibly after
6384 doing some simplifications or optimizations. The standard has a
6385 precise definition of constant-expression, and we must honor
6386 that, even though it is somewhat more restrictive.
6392 is not a legal declaration, because `(2, 3)' is not a
6393 constant-expression. The `,' operator is forbidden in a
6394 constant-expression. However, GCC's constant-folding machinery
6395 will fold this operation to an INTEGER_CST for `3'. */
6397 /* Save the old settings. */
6398 saved_integral_constant_expression_p
= parser
->integral_constant_expression_p
;
6399 saved_allow_non_integral_constant_expression_p
6400 = parser
->allow_non_integral_constant_expression_p
;
6401 saved_non_integral_constant_expression_p
= parser
->non_integral_constant_expression_p
;
6402 /* We are now parsing a constant-expression. */
6403 parser
->integral_constant_expression_p
= true;
6404 parser
->allow_non_integral_constant_expression_p
= allow_non_constant_p
;
6405 parser
->non_integral_constant_expression_p
= false;
6406 /* Although the grammar says "conditional-expression", we parse an
6407 "assignment-expression", which also permits "throw-expression"
6408 and the use of assignment operators. In the case that
6409 ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6410 otherwise. In the case that ALLOW_NON_CONSTANT_P is true, it is
6411 actually essential that we look for an assignment-expression.
6412 For example, cp_parser_initializer_clauses uses this function to
6413 determine whether a particular assignment-expression is in fact
6415 expression
= cp_parser_assignment_expression (parser
, /*cast_p=*/false);
6416 /* Restore the old settings. */
6417 parser
->integral_constant_expression_p
6418 = saved_integral_constant_expression_p
;
6419 parser
->allow_non_integral_constant_expression_p
6420 = saved_allow_non_integral_constant_expression_p
;
6421 if (allow_non_constant_p
)
6422 *non_constant_p
= parser
->non_integral_constant_expression_p
;
6423 else if (parser
->non_integral_constant_expression_p
)
6424 expression
= error_mark_node
;
6425 parser
->non_integral_constant_expression_p
6426 = saved_non_integral_constant_expression_p
;
6431 /* Parse __builtin_offsetof.
6433 offsetof-expression:
6434 "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6436 offsetof-member-designator:
6438 | offsetof-member-designator "." id-expression
6439 | offsetof-member-designator "[" expression "]" */
6442 cp_parser_builtin_offsetof (cp_parser
*parser
)
6444 int save_ice_p
, save_non_ice_p
;
6448 /* We're about to accept non-integral-constant things, but will
6449 definitely yield an integral constant expression. Save and
6450 restore these values around our local parsing. */
6451 save_ice_p
= parser
->integral_constant_expression_p
;
6452 save_non_ice_p
= parser
->non_integral_constant_expression_p
;
6454 /* Consume the "__builtin_offsetof" token. */
6455 cp_lexer_consume_token (parser
->lexer
);
6456 /* Consume the opening `('. */
6457 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
6458 /* Parse the type-id. */
6459 type
= cp_parser_type_id (parser
);
6460 /* Look for the `,'. */
6461 cp_parser_require (parser
, CPP_COMMA
, "%<,%>");
6463 /* Build the (type *)null that begins the traditional offsetof macro. */
6464 expr
= build_static_cast (build_pointer_type (type
), null_pointer_node
,
6465 tf_warning_or_error
);
6467 /* Parse the offsetof-member-designator. We begin as if we saw "expr->". */
6468 expr
= cp_parser_postfix_dot_deref_expression (parser
, CPP_DEREF
, expr
,
6472 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
6473 switch (token
->type
)
6475 case CPP_OPEN_SQUARE
:
6476 /* offsetof-member-designator "[" expression "]" */
6477 expr
= cp_parser_postfix_open_square_expression (parser
, expr
, true);
6481 /* offsetof-member-designator "." identifier */
6482 cp_lexer_consume_token (parser
->lexer
);
6483 expr
= cp_parser_postfix_dot_deref_expression (parser
, CPP_DOT
, expr
,
6487 case CPP_CLOSE_PAREN
:
6488 /* Consume the ")" token. */
6489 cp_lexer_consume_token (parser
->lexer
);
6493 /* Error. We know the following require will fail, but
6494 that gives the proper error message. */
6495 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
6496 cp_parser_skip_to_closing_parenthesis (parser
, true, false, true);
6497 expr
= error_mark_node
;
6503 /* If we're processing a template, we can't finish the semantics yet.
6504 Otherwise we can fold the entire expression now. */
6505 if (processing_template_decl
)
6506 expr
= build1 (OFFSETOF_EXPR
, size_type_node
, expr
);
6508 expr
= finish_offsetof (expr
);
6511 parser
->integral_constant_expression_p
= save_ice_p
;
6512 parser
->non_integral_constant_expression_p
= save_non_ice_p
;
6517 /* Parse a trait expression. */
6520 cp_parser_trait_expr (cp_parser
* parser
, enum rid keyword
)
6523 tree type1
, type2
= NULL_TREE
;
6524 bool binary
= false;
6525 cp_decl_specifier_seq decl_specs
;
6529 case RID_HAS_NOTHROW_ASSIGN
:
6530 kind
= CPTK_HAS_NOTHROW_ASSIGN
;
6532 case RID_HAS_NOTHROW_CONSTRUCTOR
:
6533 kind
= CPTK_HAS_NOTHROW_CONSTRUCTOR
;
6535 case RID_HAS_NOTHROW_COPY
:
6536 kind
= CPTK_HAS_NOTHROW_COPY
;
6538 case RID_HAS_TRIVIAL_ASSIGN
:
6539 kind
= CPTK_HAS_TRIVIAL_ASSIGN
;
6541 case RID_HAS_TRIVIAL_CONSTRUCTOR
:
6542 kind
= CPTK_HAS_TRIVIAL_CONSTRUCTOR
;
6544 case RID_HAS_TRIVIAL_COPY
:
6545 kind
= CPTK_HAS_TRIVIAL_COPY
;
6547 case RID_HAS_TRIVIAL_DESTRUCTOR
:
6548 kind
= CPTK_HAS_TRIVIAL_DESTRUCTOR
;
6550 case RID_HAS_VIRTUAL_DESTRUCTOR
:
6551 kind
= CPTK_HAS_VIRTUAL_DESTRUCTOR
;
6553 case RID_IS_ABSTRACT
:
6554 kind
= CPTK_IS_ABSTRACT
;
6556 case RID_IS_BASE_OF
:
6557 kind
= CPTK_IS_BASE_OF
;
6561 kind
= CPTK_IS_CLASS
;
6563 case RID_IS_CONVERTIBLE_TO
:
6564 kind
= CPTK_IS_CONVERTIBLE_TO
;
6568 kind
= CPTK_IS_EMPTY
;
6571 kind
= CPTK_IS_ENUM
;
6576 case RID_IS_POLYMORPHIC
:
6577 kind
= CPTK_IS_POLYMORPHIC
;
6580 kind
= CPTK_IS_UNION
;
6586 /* Consume the token. */
6587 cp_lexer_consume_token (parser
->lexer
);
6589 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
6591 type1
= cp_parser_type_id (parser
);
6593 if (type1
== error_mark_node
)
6594 return error_mark_node
;
6596 /* Build a trivial decl-specifier-seq. */
6597 clear_decl_specs (&decl_specs
);
6598 decl_specs
.type
= type1
;
6600 /* Call grokdeclarator to figure out what type this is. */
6601 type1
= grokdeclarator (NULL
, &decl_specs
, TYPENAME
,
6602 /*initialized=*/0, /*attrlist=*/NULL
);
6606 cp_parser_require (parser
, CPP_COMMA
, "%<,%>");
6608 type2
= cp_parser_type_id (parser
);
6610 if (type2
== error_mark_node
)
6611 return error_mark_node
;
6613 /* Build a trivial decl-specifier-seq. */
6614 clear_decl_specs (&decl_specs
);
6615 decl_specs
.type
= type2
;
6617 /* Call grokdeclarator to figure out what type this is. */
6618 type2
= grokdeclarator (NULL
, &decl_specs
, TYPENAME
,
6619 /*initialized=*/0, /*attrlist=*/NULL
);
6622 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
6624 /* Complete the trait expression, which may mean either processing
6625 the trait expr now or saving it for template instantiation. */
6626 return finish_trait_expr (kind
, type1
, type2
);
6629 /* Statements [gram.stmt.stmt] */
6631 /* Parse a statement.
6635 expression-statement
6640 declaration-statement
6643 IN_COMPOUND is true when the statement is nested inside a
6644 cp_parser_compound_statement; this matters for certain pragmas.
6646 If IF_P is not NULL, *IF_P is set to indicate whether the statement
6647 is a (possibly labeled) if statement which is not enclosed in braces
6648 and has an else clause. This is used to implement -Wparentheses. */
6651 cp_parser_statement (cp_parser
* parser
, tree in_statement_expr
,
6652 bool in_compound
, bool *if_p
)
6656 location_t statement_location
;
6661 /* There is no statement yet. */
6662 statement
= NULL_TREE
;
6663 /* Peek at the next token. */
6664 token
= cp_lexer_peek_token (parser
->lexer
);
6665 /* Remember the location of the first token in the statement. */
6666 statement_location
= token
->location
;
6667 /* If this is a keyword, then that will often determine what kind of
6668 statement we have. */
6669 if (token
->type
== CPP_KEYWORD
)
6671 enum rid keyword
= token
->keyword
;
6677 /* Looks like a labeled-statement with a case label.
6678 Parse the label, and then use tail recursion to parse
6680 cp_parser_label_for_labeled_statement (parser
);
6685 statement
= cp_parser_selection_statement (parser
, if_p
);
6691 statement
= cp_parser_iteration_statement (parser
);
6698 statement
= cp_parser_jump_statement (parser
);
6701 /* Objective-C++ exception-handling constructs. */
6704 case RID_AT_FINALLY
:
6705 case RID_AT_SYNCHRONIZED
:
6707 statement
= cp_parser_objc_statement (parser
);
6711 statement
= cp_parser_try_block (parser
);
6715 /* This must be a namespace alias definition. */
6716 cp_parser_declaration_statement (parser
);
6720 /* It might be a keyword like `int' that can start a
6721 declaration-statement. */
6725 else if (token
->type
== CPP_NAME
)
6727 /* If the next token is a `:', then we are looking at a
6728 labeled-statement. */
6729 token
= cp_lexer_peek_nth_token (parser
->lexer
, 2);
6730 if (token
->type
== CPP_COLON
)
6732 /* Looks like a labeled-statement with an ordinary label.
6733 Parse the label, and then use tail recursion to parse
6735 cp_parser_label_for_labeled_statement (parser
);
6739 /* Anything that starts with a `{' must be a compound-statement. */
6740 else if (token
->type
== CPP_OPEN_BRACE
)
6741 statement
= cp_parser_compound_statement (parser
, NULL
, false);
6742 /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6743 a statement all its own. */
6744 else if (token
->type
== CPP_PRAGMA
)
6746 /* Only certain OpenMP pragmas are attached to statements, and thus
6747 are considered statements themselves. All others are not. In
6748 the context of a compound, accept the pragma as a "statement" and
6749 return so that we can check for a close brace. Otherwise we
6750 require a real statement and must go back and read one. */
6752 cp_parser_pragma (parser
, pragma_compound
);
6753 else if (!cp_parser_pragma (parser
, pragma_stmt
))
6757 else if (token
->type
== CPP_EOF
)
6759 cp_parser_error (parser
, "expected statement");
6763 /* Everything else must be a declaration-statement or an
6764 expression-statement. Try for the declaration-statement
6765 first, unless we are looking at a `;', in which case we know that
6766 we have an expression-statement. */
6769 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
6771 cp_parser_parse_tentatively (parser
);
6772 /* Try to parse the declaration-statement. */
6773 cp_parser_declaration_statement (parser
);
6774 /* If that worked, we're done. */
6775 if (cp_parser_parse_definitely (parser
))
6778 /* Look for an expression-statement instead. */
6779 statement
= cp_parser_expression_statement (parser
, in_statement_expr
);
6782 /* Set the line number for the statement. */
6783 if (statement
&& STATEMENT_CODE_P (TREE_CODE (statement
)))
6784 SET_EXPR_LOCATION (statement
, statement_location
);
6787 /* Parse the label for a labeled-statement, i.e.
6790 case constant-expression :
6794 case constant-expression ... constant-expression : statement
6796 When a label is parsed without errors, the label is added to the
6797 parse tree by the finish_* functions, so this function doesn't
6798 have to return the label. */
6801 cp_parser_label_for_labeled_statement (cp_parser
* parser
)
6805 /* The next token should be an identifier. */
6806 token
= cp_lexer_peek_token (parser
->lexer
);
6807 if (token
->type
!= CPP_NAME
6808 && token
->type
!= CPP_KEYWORD
)
6810 cp_parser_error (parser
, "expected labeled-statement");
6814 switch (token
->keyword
)
6821 /* Consume the `case' token. */
6822 cp_lexer_consume_token (parser
->lexer
);
6823 /* Parse the constant-expression. */
6824 expr
= cp_parser_constant_expression (parser
,
6825 /*allow_non_constant_p=*/false,
6828 ellipsis
= cp_lexer_peek_token (parser
->lexer
);
6829 if (ellipsis
->type
== CPP_ELLIPSIS
)
6831 /* Consume the `...' token. */
6832 cp_lexer_consume_token (parser
->lexer
);
6834 cp_parser_constant_expression (parser
,
6835 /*allow_non_constant_p=*/false,
6837 /* We don't need to emit warnings here, as the common code
6838 will do this for us. */
6841 expr_hi
= NULL_TREE
;
6843 if (parser
->in_switch_statement_p
)
6844 finish_case_label (expr
, expr_hi
);
6846 error ("case label %qE not within a switch statement", expr
);
6851 /* Consume the `default' token. */
6852 cp_lexer_consume_token (parser
->lexer
);
6854 if (parser
->in_switch_statement_p
)
6855 finish_case_label (NULL_TREE
, NULL_TREE
);
6857 error ("case label not within a switch statement");
6861 /* Anything else must be an ordinary label. */
6862 finish_label_stmt (cp_parser_identifier (parser
));
6866 /* Require the `:' token. */
6867 cp_parser_require (parser
, CPP_COLON
, "%<:%>");
6870 /* Parse an expression-statement.
6872 expression-statement:
6875 Returns the new EXPR_STMT -- or NULL_TREE if the expression
6876 statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6877 indicates whether this expression-statement is part of an
6878 expression statement. */
6881 cp_parser_expression_statement (cp_parser
* parser
, tree in_statement_expr
)
6883 tree statement
= NULL_TREE
;
6885 /* If the next token is a ';', then there is no expression
6887 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
6888 statement
= cp_parser_expression (parser
, /*cast_p=*/false);
6890 /* Consume the final `;'. */
6891 cp_parser_consume_semicolon_at_end_of_statement (parser
);
6893 if (in_statement_expr
6894 && cp_lexer_next_token_is (parser
->lexer
, CPP_CLOSE_BRACE
))
6895 /* This is the final expression statement of a statement
6897 statement
= finish_stmt_expr_expr (statement
, in_statement_expr
);
6899 statement
= finish_expr_stmt (statement
);
6906 /* Parse a compound-statement.
6909 { statement-seq [opt] }
6914 { label-declaration-seq [opt] statement-seq [opt] }
6916 label-declaration-seq:
6918 label-declaration-seq label-declaration
6920 Returns a tree representing the statement. */
6923 cp_parser_compound_statement (cp_parser
*parser
, tree in_statement_expr
,
6928 /* Consume the `{'. */
6929 if (!cp_parser_require (parser
, CPP_OPEN_BRACE
, "%<{%>"))
6930 return error_mark_node
;
6931 /* Begin the compound-statement. */
6932 compound_stmt
= begin_compound_stmt (in_try
? BCS_TRY_BLOCK
: 0);
6933 /* If the next keyword is `__label__' we have a label declaration. */
6934 while (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_LABEL
))
6935 cp_parser_label_declaration (parser
);
6936 /* Parse an (optional) statement-seq. */
6937 cp_parser_statement_seq_opt (parser
, in_statement_expr
);
6938 /* Finish the compound-statement. */
6939 finish_compound_stmt (compound_stmt
);
6940 /* Consume the `}'. */
6941 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
6943 return compound_stmt
;
6946 /* Parse an (optional) statement-seq.
6950 statement-seq [opt] statement */
6953 cp_parser_statement_seq_opt (cp_parser
* parser
, tree in_statement_expr
)
6955 /* Scan statements until there aren't any more. */
6958 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
6960 /* If we're looking at a `}', then we've run out of statements. */
6961 if (token
->type
== CPP_CLOSE_BRACE
6962 || token
->type
== CPP_EOF
6963 || token
->type
== CPP_PRAGMA_EOL
)
6966 /* If we are in a compound statement and find 'else' then
6967 something went wrong. */
6968 else if (token
->type
== CPP_KEYWORD
&& token
->keyword
== RID_ELSE
)
6970 if (parser
->in_statement
& IN_IF_STMT
)
6974 token
= cp_lexer_consume_token (parser
->lexer
);
6975 error ("%<else%> without a previous %<if%>");
6979 /* Parse the statement. */
6980 cp_parser_statement (parser
, in_statement_expr
, true, NULL
);
6984 /* Parse a selection-statement.
6986 selection-statement:
6987 if ( condition ) statement
6988 if ( condition ) statement else statement
6989 switch ( condition ) statement
6991 Returns the new IF_STMT or SWITCH_STMT.
6993 If IF_P is not NULL, *IF_P is set to indicate whether the statement
6994 is a (possibly labeled) if statement which is not enclosed in
6995 braces and has an else clause. This is used to implement
6999 cp_parser_selection_statement (cp_parser
* parser
, bool *if_p
)
7007 /* Peek at the next token. */
7008 token
= cp_parser_require (parser
, CPP_KEYWORD
, "selection-statement");
7010 /* See what kind of keyword it is. */
7011 keyword
= token
->keyword
;
7020 /* Look for the `('. */
7021 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
7023 cp_parser_skip_to_end_of_statement (parser
);
7024 return error_mark_node
;
7027 /* Begin the selection-statement. */
7028 if (keyword
== RID_IF
)
7029 statement
= begin_if_stmt ();
7031 statement
= begin_switch_stmt ();
7033 /* Parse the condition. */
7034 condition
= cp_parser_condition (parser
);
7035 /* Look for the `)'. */
7036 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
7037 cp_parser_skip_to_closing_parenthesis (parser
, true, false,
7038 /*consume_paren=*/true);
7040 if (keyword
== RID_IF
)
7043 unsigned char in_statement
;
7045 /* Add the condition. */
7046 finish_if_stmt_cond (condition
, statement
);
7048 /* Parse the then-clause. */
7049 in_statement
= parser
->in_statement
;
7050 parser
->in_statement
|= IN_IF_STMT
;
7051 cp_parser_implicitly_scoped_statement (parser
, &nested_if
);
7052 parser
->in_statement
= in_statement
;
7054 finish_then_clause (statement
);
7056 /* If the next token is `else', parse the else-clause. */
7057 if (cp_lexer_next_token_is_keyword (parser
->lexer
,
7060 /* Consume the `else' keyword. */
7061 cp_lexer_consume_token (parser
->lexer
);
7062 begin_else_clause (statement
);
7063 /* Parse the else-clause. */
7064 cp_parser_implicitly_scoped_statement (parser
, NULL
);
7065 finish_else_clause (statement
);
7067 /* If we are currently parsing a then-clause, then
7068 IF_P will not be NULL. We set it to true to
7069 indicate that this if statement has an else clause.
7070 This may trigger the Wparentheses warning below
7071 when we get back up to the parent if statement. */
7077 /* This if statement does not have an else clause. If
7078 NESTED_IF is true, then the then-clause is an if
7079 statement which does have an else clause. We warn
7080 about the potential ambiguity. */
7082 warning (OPT_Wparentheses
,
7083 ("%Hsuggest explicit braces "
7084 "to avoid ambiguous %<else%>"),
7085 EXPR_LOCUS (statement
));
7088 /* Now we're all done with the if-statement. */
7089 finish_if_stmt (statement
);
7093 bool in_switch_statement_p
;
7094 unsigned char in_statement
;
7096 /* Add the condition. */
7097 finish_switch_cond (condition
, statement
);
7099 /* Parse the body of the switch-statement. */
7100 in_switch_statement_p
= parser
->in_switch_statement_p
;
7101 in_statement
= parser
->in_statement
;
7102 parser
->in_switch_statement_p
= true;
7103 parser
->in_statement
|= IN_SWITCH_STMT
;
7104 cp_parser_implicitly_scoped_statement (parser
, NULL
);
7105 parser
->in_switch_statement_p
= in_switch_statement_p
;
7106 parser
->in_statement
= in_statement
;
7108 /* Now we're all done with the switch-statement. */
7109 finish_switch_stmt (statement
);
7117 cp_parser_error (parser
, "expected selection-statement");
7118 return error_mark_node
;
7122 /* Parse a condition.
7126 type-specifier-seq declarator = assignment-expression
7131 type-specifier-seq declarator asm-specification [opt]
7132 attributes [opt] = assignment-expression
7134 Returns the expression that should be tested. */
7137 cp_parser_condition (cp_parser
* parser
)
7139 cp_decl_specifier_seq type_specifiers
;
7140 const char *saved_message
;
7142 /* Try the declaration first. */
7143 cp_parser_parse_tentatively (parser
);
7144 /* New types are not allowed in the type-specifier-seq for a
7146 saved_message
= parser
->type_definition_forbidden_message
;
7147 parser
->type_definition_forbidden_message
7148 = "types may not be defined in conditions";
7149 /* Parse the type-specifier-seq. */
7150 cp_parser_type_specifier_seq (parser
, /*is_condition==*/true,
7152 /* Restore the saved message. */
7153 parser
->type_definition_forbidden_message
= saved_message
;
7154 /* If all is well, we might be looking at a declaration. */
7155 if (!cp_parser_error_occurred (parser
))
7158 tree asm_specification
;
7160 cp_declarator
*declarator
;
7161 tree initializer
= NULL_TREE
;
7163 /* Parse the declarator. */
7164 declarator
= cp_parser_declarator (parser
, CP_PARSER_DECLARATOR_NAMED
,
7165 /*ctor_dtor_or_conv_p=*/NULL
,
7166 /*parenthesized_p=*/NULL
,
7167 /*member_p=*/false);
7168 /* Parse the attributes. */
7169 attributes
= cp_parser_attributes_opt (parser
);
7170 /* Parse the asm-specification. */
7171 asm_specification
= cp_parser_asm_specification_opt (parser
);
7172 /* If the next token is not an `=', then we might still be
7173 looking at an expression. For example:
7177 looks like a decl-specifier-seq and a declarator -- but then
7178 there is no `=', so this is an expression. */
7179 cp_parser_require (parser
, CPP_EQ
, "%<=%>");
7180 /* If we did see an `=', then we are looking at a declaration
7182 if (cp_parser_parse_definitely (parser
))
7185 bool non_constant_p
;
7187 /* Create the declaration. */
7188 decl
= start_decl (declarator
, &type_specifiers
,
7189 /*initialized_p=*/true,
7190 attributes
, /*prefix_attributes=*/NULL_TREE
,
7192 /* Parse the assignment-expression. */
7194 = cp_parser_constant_expression (parser
,
7195 /*allow_non_constant_p=*/true,
7197 if (!non_constant_p
)
7198 initializer
= fold_non_dependent_expr (initializer
);
7200 /* Process the initializer. */
7201 cp_finish_decl (decl
,
7202 initializer
, !non_constant_p
,
7204 LOOKUP_ONLYCONVERTING
);
7207 pop_scope (pushed_scope
);
7209 return convert_from_reference (decl
);
7212 /* If we didn't even get past the declarator successfully, we are
7213 definitely not looking at a declaration. */
7215 cp_parser_abort_tentative_parse (parser
);
7217 /* Otherwise, we are looking at an expression. */
7218 return cp_parser_expression (parser
, /*cast_p=*/false);
7221 /* We check for a ) immediately followed by ; with no whitespacing
7222 between. This is used to issue a warning for:
7230 as the semicolon is probably extraneous.
7232 On parse errors, the next token might not be a ), so do nothing in
7236 check_empty_body (cp_parser
* parser
, const char* type
)
7239 cp_token
*close_paren
;
7240 expanded_location close_loc
;
7241 expanded_location semi_loc
;
7243 close_paren
= cp_lexer_peek_token (parser
->lexer
);
7244 if (close_paren
->type
!= CPP_CLOSE_PAREN
)
7247 close_loc
= expand_location (close_paren
->location
);
7248 token
= cp_lexer_peek_nth_token (parser
->lexer
, 2);
7250 if (token
->type
!= CPP_SEMICOLON
7251 || (token
->flags
& PREV_WHITE
))
7254 semi_loc
= expand_location (token
->location
);
7255 if (close_loc
.line
== semi_loc
.line
7256 && close_loc
.column
+1 == semi_loc
.column
)
7257 warning (OPT_Wempty_body
,
7258 "suggest a space before %<;%> or explicit braces around empty "
7259 "body in %<%s%> statement",
7263 /* Parse an iteration-statement.
7265 iteration-statement:
7266 while ( condition ) statement
7267 do statement while ( expression ) ;
7268 for ( for-init-statement condition [opt] ; expression [opt] )
7271 Returns the new WHILE_STMT, DO_STMT, or FOR_STMT. */
7274 cp_parser_iteration_statement (cp_parser
* parser
)
7279 unsigned char in_statement
;
7281 /* Peek at the next token. */
7282 token
= cp_parser_require (parser
, CPP_KEYWORD
, "iteration-statement");
7284 return error_mark_node
;
7286 /* Remember whether or not we are already within an iteration
7288 in_statement
= parser
->in_statement
;
7290 /* See what kind of keyword it is. */
7291 keyword
= token
->keyword
;
7298 /* Begin the while-statement. */
7299 statement
= begin_while_stmt ();
7300 /* Look for the `('. */
7301 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
7302 /* Parse the condition. */
7303 condition
= cp_parser_condition (parser
);
7304 finish_while_stmt_cond (condition
, statement
);
7305 check_empty_body (parser
, "while");
7306 /* Look for the `)'. */
7307 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
7308 /* Parse the dependent statement. */
7309 parser
->in_statement
= IN_ITERATION_STMT
;
7310 cp_parser_already_scoped_statement (parser
);
7311 parser
->in_statement
= in_statement
;
7312 /* We're done with the while-statement. */
7313 finish_while_stmt (statement
);
7321 /* Begin the do-statement. */
7322 statement
= begin_do_stmt ();
7323 /* Parse the body of the do-statement. */
7324 parser
->in_statement
= IN_ITERATION_STMT
;
7325 cp_parser_implicitly_scoped_statement (parser
, NULL
);
7326 parser
->in_statement
= in_statement
;
7327 finish_do_body (statement
);
7328 /* Look for the `while' keyword. */
7329 cp_parser_require_keyword (parser
, RID_WHILE
, "%<while%>");
7330 /* Look for the `('. */
7331 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
7332 /* Parse the expression. */
7333 expression
= cp_parser_expression (parser
, /*cast_p=*/false);
7334 /* We're done with the do-statement. */
7335 finish_do_stmt (expression
, statement
);
7336 /* Look for the `)'. */
7337 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
7338 /* Look for the `;'. */
7339 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
7345 tree condition
= NULL_TREE
;
7346 tree expression
= NULL_TREE
;
7348 /* Begin the for-statement. */
7349 statement
= begin_for_stmt ();
7350 /* Look for the `('. */
7351 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
7352 /* Parse the initialization. */
7353 cp_parser_for_init_statement (parser
);
7354 finish_for_init_stmt (statement
);
7356 /* If there's a condition, process it. */
7357 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
7358 condition
= cp_parser_condition (parser
);
7359 finish_for_cond (condition
, statement
);
7360 /* Look for the `;'. */
7361 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
7363 /* If there's an expression, process it. */
7364 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_CLOSE_PAREN
))
7365 expression
= cp_parser_expression (parser
, /*cast_p=*/false);
7366 finish_for_expr (expression
, statement
);
7367 check_empty_body (parser
, "for");
7368 /* Look for the `)'. */
7369 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
7371 /* Parse the body of the for-statement. */
7372 parser
->in_statement
= IN_ITERATION_STMT
;
7373 cp_parser_already_scoped_statement (parser
);
7374 parser
->in_statement
= in_statement
;
7376 /* We're done with the for-statement. */
7377 finish_for_stmt (statement
);
7382 cp_parser_error (parser
, "expected iteration-statement");
7383 statement
= error_mark_node
;
7390 /* Parse a for-init-statement.
7393 expression-statement
7394 simple-declaration */
7397 cp_parser_for_init_statement (cp_parser
* parser
)
7399 /* If the next token is a `;', then we have an empty
7400 expression-statement. Grammatically, this is also a
7401 simple-declaration, but an invalid one, because it does not
7402 declare anything. Therefore, if we did not handle this case
7403 specially, we would issue an error message about an invalid
7405 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
7407 /* We're going to speculatively look for a declaration, falling back
7408 to an expression, if necessary. */
7409 cp_parser_parse_tentatively (parser
);
7410 /* Parse the declaration. */
7411 cp_parser_simple_declaration (parser
,
7412 /*function_definition_allowed_p=*/false);
7413 /* If the tentative parse failed, then we shall need to look for an
7414 expression-statement. */
7415 if (cp_parser_parse_definitely (parser
))
7419 cp_parser_expression_statement (parser
, false);
7422 /* Parse a jump-statement.
7427 return expression [opt] ;
7435 Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR. */
7438 cp_parser_jump_statement (cp_parser
* parser
)
7440 tree statement
= error_mark_node
;
7443 unsigned char in_statement
;
7445 /* Peek at the next token. */
7446 token
= cp_parser_require (parser
, CPP_KEYWORD
, "jump-statement");
7448 return error_mark_node
;
7450 /* See what kind of keyword it is. */
7451 keyword
= token
->keyword
;
7455 in_statement
= parser
->in_statement
& ~IN_IF_STMT
;
7456 switch (in_statement
)
7459 error ("break statement not within loop or switch");
7462 gcc_assert ((in_statement
& IN_SWITCH_STMT
)
7463 || in_statement
== IN_ITERATION_STMT
);
7464 statement
= finish_break_stmt ();
7467 error ("invalid exit from OpenMP structured block");
7470 error ("break statement used with OpenMP for loop");
7473 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
7477 switch (parser
->in_statement
& ~(IN_SWITCH_STMT
| IN_IF_STMT
))
7480 error ("continue statement not within a loop");
7482 case IN_ITERATION_STMT
:
7484 statement
= finish_continue_stmt ();
7487 error ("invalid exit from OpenMP structured block");
7492 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
7499 /* If the next token is a `;', then there is no
7501 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
7502 expr
= cp_parser_expression (parser
, /*cast_p=*/false);
7505 /* Build the return-statement. */
7506 statement
= finish_return_stmt (expr
);
7507 /* Look for the final `;'. */
7508 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
7513 /* Create the goto-statement. */
7514 if (cp_lexer_next_token_is (parser
->lexer
, CPP_MULT
))
7516 /* Issue a warning about this use of a GNU extension. */
7518 pedwarn ("ISO C++ forbids computed gotos");
7519 /* Consume the '*' token. */
7520 cp_lexer_consume_token (parser
->lexer
);
7521 /* Parse the dependent expression. */
7522 finish_goto_stmt (cp_parser_expression (parser
, /*cast_p=*/false));
7525 finish_goto_stmt (cp_parser_identifier (parser
));
7526 /* Look for the final `;'. */
7527 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
7531 cp_parser_error (parser
, "expected jump-statement");
7538 /* Parse a declaration-statement.
7540 declaration-statement:
7541 block-declaration */
7544 cp_parser_declaration_statement (cp_parser
* parser
)
7548 /* Get the high-water mark for the DECLARATOR_OBSTACK. */
7549 p
= obstack_alloc (&declarator_obstack
, 0);
7551 /* Parse the block-declaration. */
7552 cp_parser_block_declaration (parser
, /*statement_p=*/true);
7554 /* Free any declarators allocated. */
7555 obstack_free (&declarator_obstack
, p
);
7557 /* Finish off the statement. */
7561 /* Some dependent statements (like `if (cond) statement'), are
7562 implicitly in their own scope. In other words, if the statement is
7563 a single statement (as opposed to a compound-statement), it is
7564 none-the-less treated as if it were enclosed in braces. Any
7565 declarations appearing in the dependent statement are out of scope
7566 after control passes that point. This function parses a statement,
7567 but ensures that is in its own scope, even if it is not a
7570 If IF_P is not NULL, *IF_P is set to indicate whether the statement
7571 is a (possibly labeled) if statement which is not enclosed in
7572 braces and has an else clause. This is used to implement
7575 Returns the new statement. */
7578 cp_parser_implicitly_scoped_statement (cp_parser
* parser
, bool *if_p
)
7585 /* Mark if () ; with a special NOP_EXPR. */
7586 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
))
7588 cp_lexer_consume_token (parser
->lexer
);
7589 statement
= add_stmt (build_empty_stmt ());
7591 /* if a compound is opened, we simply parse the statement directly. */
7592 else if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_BRACE
))
7593 statement
= cp_parser_compound_statement (parser
, NULL
, false);
7594 /* If the token is not a `{', then we must take special action. */
7597 /* Create a compound-statement. */
7598 statement
= begin_compound_stmt (0);
7599 /* Parse the dependent-statement. */
7600 cp_parser_statement (parser
, NULL_TREE
, false, if_p
);
7601 /* Finish the dummy compound-statement. */
7602 finish_compound_stmt (statement
);
7605 /* Return the statement. */
7609 /* For some dependent statements (like `while (cond) statement'), we
7610 have already created a scope. Therefore, even if the dependent
7611 statement is a compound-statement, we do not want to create another
7615 cp_parser_already_scoped_statement (cp_parser
* parser
)
7617 /* If the token is a `{', then we must take special action. */
7618 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_OPEN_BRACE
))
7619 cp_parser_statement (parser
, NULL_TREE
, false, NULL
);
7622 /* Avoid calling cp_parser_compound_statement, so that we
7623 don't create a new scope. Do everything else by hand. */
7624 cp_parser_require (parser
, CPP_OPEN_BRACE
, "%<{%>");
7625 cp_parser_statement_seq_opt (parser
, NULL_TREE
);
7626 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
7630 /* Declarations [gram.dcl.dcl] */
7632 /* Parse an optional declaration-sequence.
7636 declaration-seq declaration */
7639 cp_parser_declaration_seq_opt (cp_parser
* parser
)
7645 token
= cp_lexer_peek_token (parser
->lexer
);
7647 if (token
->type
== CPP_CLOSE_BRACE
7648 || token
->type
== CPP_EOF
7649 || token
->type
== CPP_PRAGMA_EOL
)
7652 if (token
->type
== CPP_SEMICOLON
)
7654 /* A declaration consisting of a single semicolon is
7655 invalid. Allow it unless we're being pedantic. */
7656 cp_lexer_consume_token (parser
->lexer
);
7657 if (pedantic
&& !in_system_header
)
7658 pedwarn ("extra %<;%>");
7662 /* If we're entering or exiting a region that's implicitly
7663 extern "C", modify the lang context appropriately. */
7664 if (!parser
->implicit_extern_c
&& token
->implicit_extern_c
)
7666 push_lang_context (lang_name_c
);
7667 parser
->implicit_extern_c
= true;
7669 else if (parser
->implicit_extern_c
&& !token
->implicit_extern_c
)
7671 pop_lang_context ();
7672 parser
->implicit_extern_c
= false;
7675 if (token
->type
== CPP_PRAGMA
)
7677 /* A top-level declaration can consist solely of a #pragma.
7678 A nested declaration cannot, so this is done here and not
7679 in cp_parser_declaration. (A #pragma at block scope is
7680 handled in cp_parser_statement.) */
7681 cp_parser_pragma (parser
, pragma_external
);
7685 /* Parse the declaration itself. */
7686 cp_parser_declaration (parser
);
7690 /* Parse a declaration.
7695 template-declaration
7696 explicit-instantiation
7697 explicit-specialization
7698 linkage-specification
7699 namespace-definition
7704 __extension__ declaration */
7707 cp_parser_declaration (cp_parser
* parser
)
7714 /* Check for the `__extension__' keyword. */
7715 if (cp_parser_extension_opt (parser
, &saved_pedantic
))
7717 /* Parse the qualified declaration. */
7718 cp_parser_declaration (parser
);
7719 /* Restore the PEDANTIC flag. */
7720 pedantic
= saved_pedantic
;
7725 /* Try to figure out what kind of declaration is present. */
7726 token1
= *cp_lexer_peek_token (parser
->lexer
);
7728 if (token1
.type
!= CPP_EOF
)
7729 token2
= *cp_lexer_peek_nth_token (parser
->lexer
, 2);
7732 token2
.type
= CPP_EOF
;
7733 token2
.keyword
= RID_MAX
;
7736 /* Get the high-water mark for the DECLARATOR_OBSTACK. */
7737 p
= obstack_alloc (&declarator_obstack
, 0);
7739 /* If the next token is `extern' and the following token is a string
7740 literal, then we have a linkage specification. */
7741 if (token1
.keyword
== RID_EXTERN
7742 && cp_parser_is_string_literal (&token2
))
7743 cp_parser_linkage_specification (parser
);
7744 /* If the next token is `template', then we have either a template
7745 declaration, an explicit instantiation, or an explicit
7747 else if (token1
.keyword
== RID_TEMPLATE
)
7749 /* `template <>' indicates a template specialization. */
7750 if (token2
.type
== CPP_LESS
7751 && cp_lexer_peek_nth_token (parser
->lexer
, 3)->type
== CPP_GREATER
)
7752 cp_parser_explicit_specialization (parser
);
7753 /* `template <' indicates a template declaration. */
7754 else if (token2
.type
== CPP_LESS
)
7755 cp_parser_template_declaration (parser
, /*member_p=*/false);
7756 /* Anything else must be an explicit instantiation. */
7758 cp_parser_explicit_instantiation (parser
);
7760 /* If the next token is `export', then we have a template
7762 else if (token1
.keyword
== RID_EXPORT
)
7763 cp_parser_template_declaration (parser
, /*member_p=*/false);
7764 /* If the next token is `extern', 'static' or 'inline' and the one
7765 after that is `template', we have a GNU extended explicit
7766 instantiation directive. */
7767 else if (cp_parser_allow_gnu_extensions_p (parser
)
7768 && (token1
.keyword
== RID_EXTERN
7769 || token1
.keyword
== RID_STATIC
7770 || token1
.keyword
== RID_INLINE
)
7771 && token2
.keyword
== RID_TEMPLATE
)
7772 cp_parser_explicit_instantiation (parser
);
7773 /* If the next token is `namespace', check for a named or unnamed
7774 namespace definition. */
7775 else if (token1
.keyword
== RID_NAMESPACE
7776 && (/* A named namespace definition. */
7777 (token2
.type
== CPP_NAME
7778 && (cp_lexer_peek_nth_token (parser
->lexer
, 3)->type
7780 /* An unnamed namespace definition. */
7781 || token2
.type
== CPP_OPEN_BRACE
7782 || token2
.keyword
== RID_ATTRIBUTE
))
7783 cp_parser_namespace_definition (parser
);
7784 /* An inline (associated) namespace definition. */
7785 else if (token1
.keyword
== RID_INLINE
7786 && token2
.keyword
== RID_NAMESPACE
)
7787 cp_parser_namespace_definition (parser
);
7788 /* Objective-C++ declaration/definition. */
7789 else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1
.keyword
))
7790 cp_parser_objc_declaration (parser
);
7791 /* We must have either a block declaration or a function
7794 /* Try to parse a block-declaration, or a function-definition. */
7795 cp_parser_block_declaration (parser
, /*statement_p=*/false);
7797 /* Free any declarators allocated. */
7798 obstack_free (&declarator_obstack
, p
);
7801 /* Parse a block-declaration.
7806 namespace-alias-definition
7813 __extension__ block-declaration
7818 static_assert-declaration
7820 If STATEMENT_P is TRUE, then this block-declaration is occurring as
7821 part of a declaration-statement. */
7824 cp_parser_block_declaration (cp_parser
*parser
,
7830 /* Check for the `__extension__' keyword. */
7831 if (cp_parser_extension_opt (parser
, &saved_pedantic
))
7833 /* Parse the qualified declaration. */
7834 cp_parser_block_declaration (parser
, statement_p
);
7835 /* Restore the PEDANTIC flag. */
7836 pedantic
= saved_pedantic
;
7841 /* Peek at the next token to figure out which kind of declaration is
7843 token1
= cp_lexer_peek_token (parser
->lexer
);
7845 /* If the next keyword is `asm', we have an asm-definition. */
7846 if (token1
->keyword
== RID_ASM
)
7849 cp_parser_commit_to_tentative_parse (parser
);
7850 cp_parser_asm_definition (parser
);
7852 /* If the next keyword is `namespace', we have a
7853 namespace-alias-definition. */
7854 else if (token1
->keyword
== RID_NAMESPACE
)
7855 cp_parser_namespace_alias_definition (parser
);
7856 /* If the next keyword is `using', we have either a
7857 using-declaration or a using-directive. */
7858 else if (token1
->keyword
== RID_USING
)
7863 cp_parser_commit_to_tentative_parse (parser
);
7864 /* If the token after `using' is `namespace', then we have a
7866 token2
= cp_lexer_peek_nth_token (parser
->lexer
, 2);
7867 if (token2
->keyword
== RID_NAMESPACE
)
7868 cp_parser_using_directive (parser
);
7869 /* Otherwise, it's a using-declaration. */
7871 cp_parser_using_declaration (parser
,
7872 /*access_declaration_p=*/false);
7874 /* If the next keyword is `__label__' we have a misplaced label
7876 else if (token1
->keyword
== RID_LABEL
)
7878 cp_lexer_consume_token (parser
->lexer
);
7879 error ("%<__label__%> not at the beginning of a block");
7880 cp_parser_skip_to_end_of_statement (parser
);
7881 /* If the next token is now a `;', consume it. */
7882 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
))
7883 cp_lexer_consume_token (parser
->lexer
);
7885 /* If the next token is `static_assert' we have a static assertion. */
7886 else if (token1
->keyword
== RID_STATIC_ASSERT
)
7887 cp_parser_static_assert (parser
, /*member_p=*/false);
7888 /* Anything else must be a simple-declaration. */
7890 cp_parser_simple_declaration (parser
, !statement_p
);
7893 /* Parse a simple-declaration.
7896 decl-specifier-seq [opt] init-declarator-list [opt] ;
7898 init-declarator-list:
7900 init-declarator-list , init-declarator
7902 If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
7903 function-definition as a simple-declaration. */
7906 cp_parser_simple_declaration (cp_parser
* parser
,
7907 bool function_definition_allowed_p
)
7909 cp_decl_specifier_seq decl_specifiers
;
7910 int declares_class_or_enum
;
7911 bool saw_declarator
;
7913 /* Defer access checks until we know what is being declared; the
7914 checks for names appearing in the decl-specifier-seq should be
7915 done as if we were in the scope of the thing being declared. */
7916 push_deferring_access_checks (dk_deferred
);
7918 /* Parse the decl-specifier-seq. We have to keep track of whether
7919 or not the decl-specifier-seq declares a named class or
7920 enumeration type, since that is the only case in which the
7921 init-declarator-list is allowed to be empty.
7925 In a simple-declaration, the optional init-declarator-list can be
7926 omitted only when declaring a class or enumeration, that is when
7927 the decl-specifier-seq contains either a class-specifier, an
7928 elaborated-type-specifier, or an enum-specifier. */
7929 cp_parser_decl_specifier_seq (parser
,
7930 CP_PARSER_FLAGS_OPTIONAL
,
7932 &declares_class_or_enum
);
7933 /* We no longer need to defer access checks. */
7934 stop_deferring_access_checks ();
7936 /* In a block scope, a valid declaration must always have a
7937 decl-specifier-seq. By not trying to parse declarators, we can
7938 resolve the declaration/expression ambiguity more quickly. */
7939 if (!function_definition_allowed_p
7940 && !decl_specifiers
.any_specifiers_p
)
7942 cp_parser_error (parser
, "expected declaration");
7946 /* If the next two tokens are both identifiers, the code is
7947 erroneous. The usual cause of this situation is code like:
7951 where "T" should name a type -- but does not. */
7952 if (!decl_specifiers
.type
7953 && cp_parser_parse_and_diagnose_invalid_type_name (parser
))
7955 /* If parsing tentatively, we should commit; we really are
7956 looking at a declaration. */
7957 cp_parser_commit_to_tentative_parse (parser
);
7962 /* If we have seen at least one decl-specifier, and the next token
7963 is not a parenthesis, then we must be looking at a declaration.
7964 (After "int (" we might be looking at a functional cast.) */
7965 if (decl_specifiers
.any_specifiers_p
7966 && cp_lexer_next_token_is_not (parser
->lexer
, CPP_OPEN_PAREN
))
7967 cp_parser_commit_to_tentative_parse (parser
);
7969 /* Keep going until we hit the `;' at the end of the simple
7971 saw_declarator
= false;
7972 while (cp_lexer_next_token_is_not (parser
->lexer
,
7976 bool function_definition_p
;
7981 /* If we are processing next declarator, coma is expected */
7982 token
= cp_lexer_peek_token (parser
->lexer
);
7983 gcc_assert (token
->type
== CPP_COMMA
);
7984 cp_lexer_consume_token (parser
->lexer
);
7987 saw_declarator
= true;
7989 /* Parse the init-declarator. */
7990 decl
= cp_parser_init_declarator (parser
, &decl_specifiers
,
7992 function_definition_allowed_p
,
7994 declares_class_or_enum
,
7995 &function_definition_p
);
7996 /* If an error occurred while parsing tentatively, exit quickly.
7997 (That usually happens when in the body of a function; each
7998 statement is treated as a declaration-statement until proven
8000 if (cp_parser_error_occurred (parser
))
8002 /* Handle function definitions specially. */
8003 if (function_definition_p
)
8005 /* If the next token is a `,', then we are probably
8006 processing something like:
8010 which is erroneous. */
8011 if (cp_lexer_next_token_is (parser
->lexer
, CPP_COMMA
))
8012 error ("mixing declarations and function-definitions is forbidden");
8013 /* Otherwise, we're done with the list of declarators. */
8016 pop_deferring_access_checks ();
8020 /* The next token should be either a `,' or a `;'. */
8021 token
= cp_lexer_peek_token (parser
->lexer
);
8022 /* If it's a `,', there are more declarators to come. */
8023 if (token
->type
== CPP_COMMA
)
8024 /* will be consumed next time around */;
8025 /* If it's a `;', we are done. */
8026 else if (token
->type
== CPP_SEMICOLON
)
8028 /* Anything else is an error. */
8031 /* If we have already issued an error message we don't need
8032 to issue another one. */
8033 if (decl
!= error_mark_node
8034 || cp_parser_uncommitted_to_tentative_parse_p (parser
))
8035 cp_parser_error (parser
, "expected %<,%> or %<;%>");
8036 /* Skip tokens until we reach the end of the statement. */
8037 cp_parser_skip_to_end_of_statement (parser
);
8038 /* If the next token is now a `;', consume it. */
8039 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
))
8040 cp_lexer_consume_token (parser
->lexer
);
8043 /* After the first time around, a function-definition is not
8044 allowed -- even if it was OK at first. For example:
8049 function_definition_allowed_p
= false;
8052 /* Issue an error message if no declarators are present, and the
8053 decl-specifier-seq does not itself declare a class or
8055 if (!saw_declarator
)
8057 if (cp_parser_declares_only_class_p (parser
))
8058 shadow_tag (&decl_specifiers
);
8059 /* Perform any deferred access checks. */
8060 perform_deferred_access_checks ();
8063 /* Consume the `;'. */
8064 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
8067 pop_deferring_access_checks ();
8070 /* Parse a decl-specifier-seq.
8073 decl-specifier-seq [opt] decl-specifier
8076 storage-class-specifier
8087 Set *DECL_SPECS to a representation of the decl-specifier-seq.
8089 The parser flags FLAGS is used to control type-specifier parsing.
8091 *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
8094 1: one of the decl-specifiers is an elaborated-type-specifier
8095 (i.e., a type declaration)
8096 2: one of the decl-specifiers is an enum-specifier or a
8097 class-specifier (i.e., a type definition)
8102 cp_parser_decl_specifier_seq (cp_parser
* parser
,
8103 cp_parser_flags flags
,
8104 cp_decl_specifier_seq
*decl_specs
,
8105 int* declares_class_or_enum
)
8107 bool constructor_possible_p
= !parser
->in_declarator_p
;
8109 /* Clear DECL_SPECS. */
8110 clear_decl_specs (decl_specs
);
8112 /* Assume no class or enumeration type is declared. */
8113 *declares_class_or_enum
= 0;
8115 /* Keep reading specifiers until there are no more to read. */
8119 bool found_decl_spec
;
8122 /* Peek at the next token. */
8123 token
= cp_lexer_peek_token (parser
->lexer
);
8124 /* Handle attributes. */
8125 if (token
->keyword
== RID_ATTRIBUTE
)
8127 /* Parse the attributes. */
8128 decl_specs
->attributes
8129 = chainon (decl_specs
->attributes
,
8130 cp_parser_attributes_opt (parser
));
8133 /* Assume we will find a decl-specifier keyword. */
8134 found_decl_spec
= true;
8135 /* If the next token is an appropriate keyword, we can simply
8136 add it to the list. */
8137 switch (token
->keyword
)
8142 if (!at_class_scope_p ())
8144 error ("%H%<friend%> used outside of class", &token
->location
);
8145 cp_lexer_purge_token (parser
->lexer
);
8149 ++decl_specs
->specs
[(int) ds_friend
];
8150 /* Consume the token. */
8151 cp_lexer_consume_token (parser
->lexer
);
8155 /* function-specifier:
8162 cp_parser_function_specifier_opt (parser
, decl_specs
);
8168 ++decl_specs
->specs
[(int) ds_typedef
];
8169 /* Consume the token. */
8170 cp_lexer_consume_token (parser
->lexer
);
8171 /* A constructor declarator cannot appear in a typedef. */
8172 constructor_possible_p
= false;
8173 /* The "typedef" keyword can only occur in a declaration; we
8174 may as well commit at this point. */
8175 cp_parser_commit_to_tentative_parse (parser
);
8177 if (decl_specs
->storage_class
!= sc_none
)
8178 decl_specs
->conflicting_specifiers_p
= true;
8181 /* storage-class-specifier:
8191 /* Consume the token. */
8192 cp_lexer_consume_token (parser
->lexer
);
8194 if (cxx_dialect
== cxx98
)
8196 /* Complain about `auto' as a storage specifier, if
8197 we're complaining about C++0x compatibility. */
8200 "%<auto%> will change meaning in C++0x; please remove it");
8202 /* Set the storage class anyway. */
8203 cp_parser_set_storage_class (parser
, decl_specs
, RID_AUTO
);
8206 /* We do not yet support the use of `auto' as a
8208 error ("C++0x %<auto%> specifier not supported");
8215 /* Consume the token. */
8216 cp_lexer_consume_token (parser
->lexer
);
8217 cp_parser_set_storage_class (parser
, decl_specs
, token
->keyword
);
8220 /* Consume the token. */
8221 cp_lexer_consume_token (parser
->lexer
);
8222 ++decl_specs
->specs
[(int) ds_thread
];
8226 /* We did not yet find a decl-specifier yet. */
8227 found_decl_spec
= false;
8231 /* Constructors are a special case. The `S' in `S()' is not a
8232 decl-specifier; it is the beginning of the declarator. */
8235 && constructor_possible_p
8236 && (cp_parser_constructor_declarator_p
8237 (parser
, decl_specs
->specs
[(int) ds_friend
] != 0)));
8239 /* If we don't have a DECL_SPEC yet, then we must be looking at
8240 a type-specifier. */
8241 if (!found_decl_spec
&& !constructor_p
)
8243 int decl_spec_declares_class_or_enum
;
8244 bool is_cv_qualifier
;
8248 = cp_parser_type_specifier (parser
, flags
,
8250 /*is_declaration=*/true,
8251 &decl_spec_declares_class_or_enum
,
8254 *declares_class_or_enum
|= decl_spec_declares_class_or_enum
;
8256 /* If this type-specifier referenced a user-defined type
8257 (a typedef, class-name, etc.), then we can't allow any
8258 more such type-specifiers henceforth.
8262 The longest sequence of decl-specifiers that could
8263 possibly be a type name is taken as the
8264 decl-specifier-seq of a declaration. The sequence shall
8265 be self-consistent as described below.
8269 As a general rule, at most one type-specifier is allowed
8270 in the complete decl-specifier-seq of a declaration. The
8271 only exceptions are the following:
8273 -- const or volatile can be combined with any other
8276 -- signed or unsigned can be combined with char, long,
8284 void g (const int Pc);
8286 Here, Pc is *not* part of the decl-specifier seq; it's
8287 the declarator. Therefore, once we see a type-specifier
8288 (other than a cv-qualifier), we forbid any additional
8289 user-defined types. We *do* still allow things like `int
8290 int' to be considered a decl-specifier-seq, and issue the
8291 error message later. */
8292 if (type_spec
&& !is_cv_qualifier
)
8293 flags
|= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES
;
8294 /* A constructor declarator cannot follow a type-specifier. */
8297 constructor_possible_p
= false;
8298 found_decl_spec
= true;
8302 /* If we still do not have a DECL_SPEC, then there are no more
8304 if (!found_decl_spec
)
8307 decl_specs
->any_specifiers_p
= true;
8308 /* After we see one decl-specifier, further decl-specifiers are
8310 flags
|= CP_PARSER_FLAGS_OPTIONAL
;
8313 cp_parser_check_decl_spec (decl_specs
);
8315 /* Don't allow a friend specifier with a class definition. */
8316 if (decl_specs
->specs
[(int) ds_friend
] != 0
8317 && (*declares_class_or_enum
& 2))
8318 error ("class definition may not be declared a friend");
8321 /* Parse an (optional) storage-class-specifier.
8323 storage-class-specifier:
8332 storage-class-specifier:
8335 Returns an IDENTIFIER_NODE corresponding to the keyword used. */
8338 cp_parser_storage_class_specifier_opt (cp_parser
* parser
)
8340 switch (cp_lexer_peek_token (parser
->lexer
)->keyword
)
8343 if (cxx_dialect
!= cxx98
)
8345 /* Fall through for C++98. */
8352 /* Consume the token. */
8353 return cp_lexer_consume_token (parser
->lexer
)->u
.value
;
8360 /* Parse an (optional) function-specifier.
8367 Returns an IDENTIFIER_NODE corresponding to the keyword used.
8368 Updates DECL_SPECS, if it is non-NULL. */
8371 cp_parser_function_specifier_opt (cp_parser
* parser
,
8372 cp_decl_specifier_seq
*decl_specs
)
8374 switch (cp_lexer_peek_token (parser
->lexer
)->keyword
)
8378 ++decl_specs
->specs
[(int) ds_inline
];
8382 /* 14.5.2.3 [temp.mem]
8384 A member function template shall not be virtual. */
8385 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8386 error ("templates may not be %<virtual%>");
8387 else if (decl_specs
)
8388 ++decl_specs
->specs
[(int) ds_virtual
];
8393 ++decl_specs
->specs
[(int) ds_explicit
];
8400 /* Consume the token. */
8401 return cp_lexer_consume_token (parser
->lexer
)->u
.value
;
8404 /* Parse a linkage-specification.
8406 linkage-specification:
8407 extern string-literal { declaration-seq [opt] }
8408 extern string-literal declaration */
8411 cp_parser_linkage_specification (cp_parser
* parser
)
8415 /* Look for the `extern' keyword. */
8416 cp_parser_require_keyword (parser
, RID_EXTERN
, "%<extern%>");
8418 /* Look for the string-literal. */
8419 linkage
= cp_parser_string_literal (parser
, false, false);
8421 /* Transform the literal into an identifier. If the literal is a
8422 wide-character string, or contains embedded NULs, then we can't
8423 handle it as the user wants. */
8424 if (strlen (TREE_STRING_POINTER (linkage
))
8425 != (size_t) (TREE_STRING_LENGTH (linkage
) - 1))
8427 cp_parser_error (parser
, "invalid linkage-specification");
8428 /* Assume C++ linkage. */
8429 linkage
= lang_name_cplusplus
;
8432 linkage
= get_identifier (TREE_STRING_POINTER (linkage
));
8434 /* We're now using the new linkage. */
8435 push_lang_context (linkage
);
8437 /* If the next token is a `{', then we're using the first
8439 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_BRACE
))
8441 /* Consume the `{' token. */
8442 cp_lexer_consume_token (parser
->lexer
);
8443 /* Parse the declarations. */
8444 cp_parser_declaration_seq_opt (parser
);
8445 /* Look for the closing `}'. */
8446 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
8448 /* Otherwise, there's just one declaration. */
8451 bool saved_in_unbraced_linkage_specification_p
;
8453 saved_in_unbraced_linkage_specification_p
8454 = parser
->in_unbraced_linkage_specification_p
;
8455 parser
->in_unbraced_linkage_specification_p
= true;
8456 cp_parser_declaration (parser
);
8457 parser
->in_unbraced_linkage_specification_p
8458 = saved_in_unbraced_linkage_specification_p
;
8461 /* We're done with the linkage-specification. */
8462 pop_lang_context ();
8465 /* Parse a static_assert-declaration.
8467 static_assert-declaration:
8468 static_assert ( constant-expression , string-literal ) ;
8470 If MEMBER_P, this static_assert is a class member. */
8473 cp_parser_static_assert(cp_parser
*parser
, bool member_p
)
8478 location_t saved_loc
;
8480 /* Peek at the `static_assert' token so we can keep track of exactly
8481 where the static assertion started. */
8482 token
= cp_lexer_peek_token (parser
->lexer
);
8483 saved_loc
= token
->location
;
8485 /* Look for the `static_assert' keyword. */
8486 if (!cp_parser_require_keyword (parser
, RID_STATIC_ASSERT
,
8487 "%<static_assert%>"))
8490 /* We know we are in a static assertion; commit to any tentative
8492 if (cp_parser_parsing_tentatively (parser
))
8493 cp_parser_commit_to_tentative_parse (parser
);
8495 /* Parse the `(' starting the static assertion condition. */
8496 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
8498 /* Parse the constant-expression. */
8500 cp_parser_constant_expression (parser
,
8501 /*allow_non_constant_p=*/false,
8502 /*non_constant_p=*/NULL
);
8504 /* Parse the separating `,'. */
8505 cp_parser_require (parser
, CPP_COMMA
, "%<,%>");
8507 /* Parse the string-literal message. */
8508 message
= cp_parser_string_literal (parser
,
8509 /*translate=*/false,
8512 /* A `)' completes the static assertion. */
8513 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
8514 cp_parser_skip_to_closing_parenthesis (parser
,
8515 /*recovering=*/true,
8517 /*consume_paren=*/true);
8519 /* A semicolon terminates the declaration. */
8520 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
8522 /* Complete the static assertion, which may mean either processing
8523 the static assert now or saving it for template instantiation. */
8524 finish_static_assert (condition
, message
, saved_loc
, member_p
);
8527 /* Parse a `decltype' type. Returns the type.
8529 simple-type-specifier:
8530 decltype ( expression ) */
8533 cp_parser_decltype (cp_parser
*parser
)
8536 bool id_expression_or_member_access_p
= false;
8537 const char *saved_message
;
8538 bool saved_integral_constant_expression_p
;
8539 bool saved_non_integral_constant_expression_p
;
8541 /* Look for the `decltype' token. */
8542 if (!cp_parser_require_keyword (parser
, RID_DECLTYPE
, "%<decltype%>"))
8543 return error_mark_node
;
8545 /* Types cannot be defined in a `decltype' expression. Save away the
8547 saved_message
= parser
->type_definition_forbidden_message
;
8549 /* And create the new one. */
8550 parser
->type_definition_forbidden_message
8551 = "types may not be defined in %<decltype%> expressions";
8553 /* The restrictions on constant-expressions do not apply inside
8554 decltype expressions. */
8555 saved_integral_constant_expression_p
8556 = parser
->integral_constant_expression_p
;
8557 saved_non_integral_constant_expression_p
8558 = parser
->non_integral_constant_expression_p
;
8559 parser
->integral_constant_expression_p
= false;
8561 /* Do not actually evaluate the expression. */
8564 /* Parse the opening `('. */
8565 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
8566 return error_mark_node
;
8568 /* First, try parsing an id-expression. */
8569 cp_parser_parse_tentatively (parser
);
8570 expr
= cp_parser_id_expression (parser
,
8571 /*template_keyword_p=*/false,
8572 /*check_dependency_p=*/true,
8573 /*template_p=*/NULL
,
8574 /*declarator_p=*/false,
8575 /*optional_p=*/false);
8577 if (!cp_parser_error_occurred (parser
) && expr
!= error_mark_node
)
8579 bool non_integral_constant_expression_p
= false;
8580 tree id_expression
= expr
;
8582 const char *error_msg
;
8584 if (TREE_CODE (expr
) == IDENTIFIER_NODE
)
8585 /* Lookup the name we got back from the id-expression. */
8586 expr
= cp_parser_lookup_name (parser
, expr
,
8588 /*is_template=*/false,
8589 /*is_namespace=*/false,
8590 /*check_dependency=*/true,
8591 /*ambiguous_decls=*/NULL
);
8594 && expr
!= error_mark_node
8595 && TREE_CODE (expr
) != TEMPLATE_ID_EXPR
8596 && TREE_CODE (expr
) != TYPE_DECL
8597 && (TREE_CODE (expr
) != BIT_NOT_EXPR
8598 || !TYPE_P (TREE_OPERAND (expr
, 0)))
8599 && cp_lexer_peek_token (parser
->lexer
)->type
== CPP_CLOSE_PAREN
)
8601 /* Complete lookup of the id-expression. */
8602 expr
= (finish_id_expression
8603 (id_expression
, expr
, parser
->scope
, &idk
,
8604 /*integral_constant_expression_p=*/false,
8605 /*allow_non_integral_constant_expression_p=*/true,
8606 &non_integral_constant_expression_p
,
8607 /*template_p=*/false,
8609 /*address_p=*/false,
8610 /*template_arg_p=*/false,
8613 if (expr
== error_mark_node
)
8614 /* We found an id-expression, but it was something that we
8615 should not have found. This is an error, not something
8616 we can recover from, so note that we found an
8617 id-expression and we'll recover as gracefully as
8619 id_expression_or_member_access_p
= true;
8623 && expr
!= error_mark_node
8624 && cp_lexer_peek_token (parser
->lexer
)->type
== CPP_CLOSE_PAREN
)
8625 /* We have an id-expression. */
8626 id_expression_or_member_access_p
= true;
8629 if (!id_expression_or_member_access_p
)
8631 /* Abort the id-expression parse. */
8632 cp_parser_abort_tentative_parse (parser
);
8634 /* Parsing tentatively, again. */
8635 cp_parser_parse_tentatively (parser
);
8637 /* Parse a class member access. */
8638 expr
= cp_parser_postfix_expression (parser
, /*address_p=*/false,
8640 /*member_access_only_p=*/true);
8643 && expr
!= error_mark_node
8644 && cp_lexer_peek_token (parser
->lexer
)->type
== CPP_CLOSE_PAREN
)
8645 /* We have an id-expression. */
8646 id_expression_or_member_access_p
= true;
8649 if (id_expression_or_member_access_p
)
8650 /* We have parsed the complete id-expression or member access. */
8651 cp_parser_parse_definitely (parser
);
8654 /* Abort our attempt to parse an id-expression or member access
8656 cp_parser_abort_tentative_parse (parser
);
8658 /* Parse a full expression. */
8659 expr
= cp_parser_expression (parser
, /*cast_p=*/false);
8662 /* Go back to evaluating expressions. */
8665 /* Restore the old message and the integral constant expression
8667 parser
->type_definition_forbidden_message
= saved_message
;
8668 parser
->integral_constant_expression_p
8669 = saved_integral_constant_expression_p
;
8670 parser
->non_integral_constant_expression_p
8671 = saved_non_integral_constant_expression_p
;
8673 if (expr
== error_mark_node
)
8675 /* Skip everything up to the closing `)'. */
8676 cp_parser_skip_to_closing_parenthesis (parser
, true, false,
8677 /*consume_paren=*/true);
8678 return error_mark_node
;
8681 /* Parse to the closing `)'. */
8682 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
8684 cp_parser_skip_to_closing_parenthesis (parser
, true, false,
8685 /*consume_paren=*/true);
8686 return error_mark_node
;
8689 return finish_decltype_type (expr
, id_expression_or_member_access_p
);
8692 /* Special member functions [gram.special] */
8694 /* Parse a conversion-function-id.
8696 conversion-function-id:
8697 operator conversion-type-id
8699 Returns an IDENTIFIER_NODE representing the operator. */
8702 cp_parser_conversion_function_id (cp_parser
* parser
)
8706 tree saved_qualifying_scope
;
8707 tree saved_object_scope
;
8708 tree pushed_scope
= NULL_TREE
;
8710 /* Look for the `operator' token. */
8711 if (!cp_parser_require_keyword (parser
, RID_OPERATOR
, "%<operator%>"))
8712 return error_mark_node
;
8713 /* When we parse the conversion-type-id, the current scope will be
8714 reset. However, we need that information in able to look up the
8715 conversion function later, so we save it here. */
8716 saved_scope
= parser
->scope
;
8717 saved_qualifying_scope
= parser
->qualifying_scope
;
8718 saved_object_scope
= parser
->object_scope
;
8719 /* We must enter the scope of the class so that the names of
8720 entities declared within the class are available in the
8721 conversion-type-id. For example, consider:
8728 S::operator I() { ... }
8730 In order to see that `I' is a type-name in the definition, we
8731 must be in the scope of `S'. */
8733 pushed_scope
= push_scope (saved_scope
);
8734 /* Parse the conversion-type-id. */
8735 type
= cp_parser_conversion_type_id (parser
);
8736 /* Leave the scope of the class, if any. */
8738 pop_scope (pushed_scope
);
8739 /* Restore the saved scope. */
8740 parser
->scope
= saved_scope
;
8741 parser
->qualifying_scope
= saved_qualifying_scope
;
8742 parser
->object_scope
= saved_object_scope
;
8743 /* If the TYPE is invalid, indicate failure. */
8744 if (type
== error_mark_node
)
8745 return error_mark_node
;
8746 return mangle_conv_op_name_for_type (type
);
8749 /* Parse a conversion-type-id:
8752 type-specifier-seq conversion-declarator [opt]
8754 Returns the TYPE specified. */
8757 cp_parser_conversion_type_id (cp_parser
* parser
)
8760 cp_decl_specifier_seq type_specifiers
;
8761 cp_declarator
*declarator
;
8762 tree type_specified
;
8764 /* Parse the attributes. */
8765 attributes
= cp_parser_attributes_opt (parser
);
8766 /* Parse the type-specifiers. */
8767 cp_parser_type_specifier_seq (parser
, /*is_condition=*/false,
8769 /* If that didn't work, stop. */
8770 if (type_specifiers
.type
== error_mark_node
)
8771 return error_mark_node
;
8772 /* Parse the conversion-declarator. */
8773 declarator
= cp_parser_conversion_declarator_opt (parser
);
8775 type_specified
= grokdeclarator (declarator
, &type_specifiers
, TYPENAME
,
8776 /*initialized=*/0, &attributes
);
8778 cplus_decl_attributes (&type_specified
, attributes
, /*flags=*/0);
8779 return type_specified
;
8782 /* Parse an (optional) conversion-declarator.
8784 conversion-declarator:
8785 ptr-operator conversion-declarator [opt]
8789 static cp_declarator
*
8790 cp_parser_conversion_declarator_opt (cp_parser
* parser
)
8792 enum tree_code code
;
8794 cp_cv_quals cv_quals
;
8796 /* We don't know if there's a ptr-operator next, or not. */
8797 cp_parser_parse_tentatively (parser
);
8798 /* Try the ptr-operator. */
8799 code
= cp_parser_ptr_operator (parser
, &class_type
, &cv_quals
);
8800 /* If it worked, look for more conversion-declarators. */
8801 if (cp_parser_parse_definitely (parser
))
8803 cp_declarator
*declarator
;
8805 /* Parse another optional declarator. */
8806 declarator
= cp_parser_conversion_declarator_opt (parser
);
8808 return cp_parser_make_indirect_declarator
8809 (code
, class_type
, cv_quals
, declarator
);
8815 /* Parse an (optional) ctor-initializer.
8818 : mem-initializer-list
8820 Returns TRUE iff the ctor-initializer was actually present. */
8823 cp_parser_ctor_initializer_opt (cp_parser
* parser
)
8825 /* If the next token is not a `:', then there is no
8826 ctor-initializer. */
8827 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COLON
))
8829 /* Do default initialization of any bases and members. */
8830 if (DECL_CONSTRUCTOR_P (current_function_decl
))
8831 finish_mem_initializers (NULL_TREE
);
8836 /* Consume the `:' token. */
8837 cp_lexer_consume_token (parser
->lexer
);
8838 /* And the mem-initializer-list. */
8839 cp_parser_mem_initializer_list (parser
);
8844 /* Parse a mem-initializer-list.
8846 mem-initializer-list:
8847 mem-initializer ... [opt]
8848 mem-initializer ... [opt] , mem-initializer-list */
8851 cp_parser_mem_initializer_list (cp_parser
* parser
)
8853 tree mem_initializer_list
= NULL_TREE
;
8855 /* Let the semantic analysis code know that we are starting the
8856 mem-initializer-list. */
8857 if (!DECL_CONSTRUCTOR_P (current_function_decl
))
8858 error ("only constructors take base initializers");
8860 /* Loop through the list. */
8863 tree mem_initializer
;
8865 /* Parse the mem-initializer. */
8866 mem_initializer
= cp_parser_mem_initializer (parser
);
8867 /* If the next token is a `...', we're expanding member initializers. */
8868 if (cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
8870 /* Consume the `...'. */
8871 cp_lexer_consume_token (parser
->lexer
);
8873 /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
8874 can be expanded but members cannot. */
8875 if (mem_initializer
!= error_mark_node
8876 && !TYPE_P (TREE_PURPOSE (mem_initializer
)))
8878 error ("cannot expand initializer for member %<%D%>",
8879 TREE_PURPOSE (mem_initializer
));
8880 mem_initializer
= error_mark_node
;
8883 /* Construct the pack expansion type. */
8884 if (mem_initializer
!= error_mark_node
)
8885 mem_initializer
= make_pack_expansion (mem_initializer
);
8887 /* Add it to the list, unless it was erroneous. */
8888 if (mem_initializer
!= error_mark_node
)
8890 TREE_CHAIN (mem_initializer
) = mem_initializer_list
;
8891 mem_initializer_list
= mem_initializer
;
8893 /* If the next token is not a `,', we're done. */
8894 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
8896 /* Consume the `,' token. */
8897 cp_lexer_consume_token (parser
->lexer
);
8900 /* Perform semantic analysis. */
8901 if (DECL_CONSTRUCTOR_P (current_function_decl
))
8902 finish_mem_initializers (mem_initializer_list
);
8905 /* Parse a mem-initializer.
8908 mem-initializer-id ( expression-list [opt] )
8913 ( expression-list [opt] )
8915 Returns a TREE_LIST. The TREE_PURPOSE is the TYPE (for a base
8916 class) or FIELD_DECL (for a non-static data member) to initialize;
8917 the TREE_VALUE is the expression-list. An empty initialization
8918 list is represented by void_list_node. */
8921 cp_parser_mem_initializer (cp_parser
* parser
)
8923 tree mem_initializer_id
;
8924 tree expression_list
;
8927 /* Find out what is being initialized. */
8928 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_PAREN
))
8930 pedwarn ("anachronistic old-style base class initializer");
8931 mem_initializer_id
= NULL_TREE
;
8934 mem_initializer_id
= cp_parser_mem_initializer_id (parser
);
8935 member
= expand_member_init (mem_initializer_id
);
8936 if (member
&& !DECL_P (member
))
8937 in_base_initializer
= 1;
8940 = cp_parser_parenthesized_expression_list (parser
, false,
8942 /*allow_expansion_p=*/true,
8943 /*non_constant_p=*/NULL
);
8944 if (expression_list
== error_mark_node
)
8945 return error_mark_node
;
8946 if (!expression_list
)
8947 expression_list
= void_type_node
;
8949 in_base_initializer
= 0;
8951 return member
? build_tree_list (member
, expression_list
) : error_mark_node
;
8954 /* Parse a mem-initializer-id.
8957 :: [opt] nested-name-specifier [opt] class-name
8960 Returns a TYPE indicating the class to be initializer for the first
8961 production. Returns an IDENTIFIER_NODE indicating the data member
8962 to be initialized for the second production. */
8965 cp_parser_mem_initializer_id (cp_parser
* parser
)
8967 bool global_scope_p
;
8968 bool nested_name_specifier_p
;
8969 bool template_p
= false;
8972 /* `typename' is not allowed in this context ([temp.res]). */
8973 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_TYPENAME
))
8975 error ("keyword %<typename%> not allowed in this context (a qualified "
8976 "member initializer is implicitly a type)");
8977 cp_lexer_consume_token (parser
->lexer
);
8979 /* Look for the optional `::' operator. */
8981 = (cp_parser_global_scope_opt (parser
,
8982 /*current_scope_valid_p=*/false)
8984 /* Look for the optional nested-name-specifier. The simplest way to
8989 The keyword `typename' is not permitted in a base-specifier or
8990 mem-initializer; in these contexts a qualified name that
8991 depends on a template-parameter is implicitly assumed to be a
8994 is to assume that we have seen the `typename' keyword at this
8996 nested_name_specifier_p
8997 = (cp_parser_nested_name_specifier_opt (parser
,
8998 /*typename_keyword_p=*/true,
8999 /*check_dependency_p=*/true,
9001 /*is_declaration=*/true)
9003 if (nested_name_specifier_p
)
9004 template_p
= cp_parser_optional_template_keyword (parser
);
9005 /* If there is a `::' operator or a nested-name-specifier, then we
9006 are definitely looking for a class-name. */
9007 if (global_scope_p
|| nested_name_specifier_p
)
9008 return cp_parser_class_name (parser
,
9009 /*typename_keyword_p=*/true,
9010 /*template_keyword_p=*/template_p
,
9012 /*check_dependency_p=*/true,
9013 /*class_head_p=*/false,
9014 /*is_declaration=*/true);
9015 /* Otherwise, we could also be looking for an ordinary identifier. */
9016 cp_parser_parse_tentatively (parser
);
9017 /* Try a class-name. */
9018 id
= cp_parser_class_name (parser
,
9019 /*typename_keyword_p=*/true,
9020 /*template_keyword_p=*/false,
9022 /*check_dependency_p=*/true,
9023 /*class_head_p=*/false,
9024 /*is_declaration=*/true);
9025 /* If we found one, we're done. */
9026 if (cp_parser_parse_definitely (parser
))
9028 /* Otherwise, look for an ordinary identifier. */
9029 return cp_parser_identifier (parser
);
9032 /* Overloading [gram.over] */
9034 /* Parse an operator-function-id.
9036 operator-function-id:
9039 Returns an IDENTIFIER_NODE for the operator which is a
9040 human-readable spelling of the identifier, e.g., `operator +'. */
9043 cp_parser_operator_function_id (cp_parser
* parser
)
9045 /* Look for the `operator' keyword. */
9046 if (!cp_parser_require_keyword (parser
, RID_OPERATOR
, "%<operator%>"))
9047 return error_mark_node
;
9048 /* And then the name of the operator itself. */
9049 return cp_parser_operator (parser
);
9052 /* Parse an operator.
9055 new delete new[] delete[] + - * / % ^ & | ~ ! = < >
9056 += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
9057 || ++ -- , ->* -> () []
9064 Returns an IDENTIFIER_NODE for the operator which is a
9065 human-readable spelling of the identifier, e.g., `operator +'. */
9068 cp_parser_operator (cp_parser
* parser
)
9070 tree id
= NULL_TREE
;
9073 /* Peek at the next token. */
9074 token
= cp_lexer_peek_token (parser
->lexer
);
9075 /* Figure out which operator we have. */
9076 switch (token
->type
)
9082 /* The keyword should be either `new' or `delete'. */
9083 if (token
->keyword
== RID_NEW
)
9085 else if (token
->keyword
== RID_DELETE
)
9090 /* Consume the `new' or `delete' token. */
9091 cp_lexer_consume_token (parser
->lexer
);
9093 /* Peek at the next token. */
9094 token
= cp_lexer_peek_token (parser
->lexer
);
9095 /* If it's a `[' token then this is the array variant of the
9097 if (token
->type
== CPP_OPEN_SQUARE
)
9099 /* Consume the `[' token. */
9100 cp_lexer_consume_token (parser
->lexer
);
9101 /* Look for the `]' token. */
9102 cp_parser_require (parser
, CPP_CLOSE_SQUARE
, "%<]%>");
9103 id
= ansi_opname (op
== NEW_EXPR
9104 ? VEC_NEW_EXPR
: VEC_DELETE_EXPR
);
9106 /* Otherwise, we have the non-array variant. */
9108 id
= ansi_opname (op
);
9114 id
= ansi_opname (PLUS_EXPR
);
9118 id
= ansi_opname (MINUS_EXPR
);
9122 id
= ansi_opname (MULT_EXPR
);
9126 id
= ansi_opname (TRUNC_DIV_EXPR
);
9130 id
= ansi_opname (TRUNC_MOD_EXPR
);
9134 id
= ansi_opname (BIT_XOR_EXPR
);
9138 id
= ansi_opname (BIT_AND_EXPR
);
9142 id
= ansi_opname (BIT_IOR_EXPR
);
9146 id
= ansi_opname (BIT_NOT_EXPR
);
9150 id
= ansi_opname (TRUTH_NOT_EXPR
);
9154 id
= ansi_assopname (NOP_EXPR
);
9158 id
= ansi_opname (LT_EXPR
);
9162 id
= ansi_opname (GT_EXPR
);
9166 id
= ansi_assopname (PLUS_EXPR
);
9170 id
= ansi_assopname (MINUS_EXPR
);
9174 id
= ansi_assopname (MULT_EXPR
);
9178 id
= ansi_assopname (TRUNC_DIV_EXPR
);
9182 id
= ansi_assopname (TRUNC_MOD_EXPR
);
9186 id
= ansi_assopname (BIT_XOR_EXPR
);
9190 id
= ansi_assopname (BIT_AND_EXPR
);
9194 id
= ansi_assopname (BIT_IOR_EXPR
);
9198 id
= ansi_opname (LSHIFT_EXPR
);
9202 id
= ansi_opname (RSHIFT_EXPR
);
9206 id
= ansi_assopname (LSHIFT_EXPR
);
9210 id
= ansi_assopname (RSHIFT_EXPR
);
9214 id
= ansi_opname (EQ_EXPR
);
9218 id
= ansi_opname (NE_EXPR
);
9222 id
= ansi_opname (LE_EXPR
);
9225 case CPP_GREATER_EQ
:
9226 id
= ansi_opname (GE_EXPR
);
9230 id
= ansi_opname (TRUTH_ANDIF_EXPR
);
9234 id
= ansi_opname (TRUTH_ORIF_EXPR
);
9238 id
= ansi_opname (POSTINCREMENT_EXPR
);
9241 case CPP_MINUS_MINUS
:
9242 id
= ansi_opname (PREDECREMENT_EXPR
);
9246 id
= ansi_opname (COMPOUND_EXPR
);
9249 case CPP_DEREF_STAR
:
9250 id
= ansi_opname (MEMBER_REF
);
9254 id
= ansi_opname (COMPONENT_REF
);
9257 case CPP_OPEN_PAREN
:
9258 /* Consume the `('. */
9259 cp_lexer_consume_token (parser
->lexer
);
9260 /* Look for the matching `)'. */
9261 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
9262 return ansi_opname (CALL_EXPR
);
9264 case CPP_OPEN_SQUARE
:
9265 /* Consume the `['. */
9266 cp_lexer_consume_token (parser
->lexer
);
9267 /* Look for the matching `]'. */
9268 cp_parser_require (parser
, CPP_CLOSE_SQUARE
, "%<]%>");
9269 return ansi_opname (ARRAY_REF
);
9272 /* Anything else is an error. */
9276 /* If we have selected an identifier, we need to consume the
9279 cp_lexer_consume_token (parser
->lexer
);
9280 /* Otherwise, no valid operator name was present. */
9283 cp_parser_error (parser
, "expected operator");
9284 id
= error_mark_node
;
9290 /* Parse a template-declaration.
9292 template-declaration:
9293 export [opt] template < template-parameter-list > declaration
9295 If MEMBER_P is TRUE, this template-declaration occurs within a
9298 The grammar rule given by the standard isn't correct. What
9301 template-declaration:
9302 export [opt] template-parameter-list-seq
9303 decl-specifier-seq [opt] init-declarator [opt] ;
9304 export [opt] template-parameter-list-seq
9307 template-parameter-list-seq:
9308 template-parameter-list-seq [opt]
9309 template < template-parameter-list > */
9312 cp_parser_template_declaration (cp_parser
* parser
, bool member_p
)
9314 /* Check for `export'. */
9315 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_EXPORT
))
9317 /* Consume the `export' token. */
9318 cp_lexer_consume_token (parser
->lexer
);
9319 /* Warn that we do not support `export'. */
9320 warning (0, "keyword %<export%> not implemented, and will be ignored");
9323 cp_parser_template_declaration_after_export (parser
, member_p
);
9326 /* Parse a template-parameter-list.
9328 template-parameter-list:
9330 template-parameter-list , template-parameter
9332 Returns a TREE_LIST. Each node represents a template parameter.
9333 The nodes are connected via their TREE_CHAINs. */
9336 cp_parser_template_parameter_list (cp_parser
* parser
)
9338 tree parameter_list
= NULL_TREE
;
9340 begin_template_parm_list ();
9345 bool is_parameter_pack
;
9347 /* Parse the template-parameter. */
9348 parameter
= cp_parser_template_parameter (parser
,
9350 &is_parameter_pack
);
9351 /* Add it to the list. */
9352 if (parameter
!= error_mark_node
)
9353 parameter_list
= process_template_parm (parameter_list
,
9359 tree err_parm
= build_tree_list (parameter
, parameter
);
9360 TREE_VALUE (err_parm
) = error_mark_node
;
9361 parameter_list
= chainon (parameter_list
, err_parm
);
9364 /* If the next token is not a `,', we're done. */
9365 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
9367 /* Otherwise, consume the `,' token. */
9368 cp_lexer_consume_token (parser
->lexer
);
9371 return end_template_parm_list (parameter_list
);
9374 /* Parse a template-parameter.
9378 parameter-declaration
9380 If all goes well, returns a TREE_LIST. The TREE_VALUE represents
9381 the parameter. The TREE_PURPOSE is the default value, if any.
9382 Returns ERROR_MARK_NODE on failure. *IS_NON_TYPE is set to true
9383 iff this parameter is a non-type parameter. *IS_PARAMETER_PACK is
9384 set to true iff this parameter is a parameter pack. */
9387 cp_parser_template_parameter (cp_parser
* parser
, bool *is_non_type
,
9388 bool *is_parameter_pack
)
9391 cp_parameter_declarator
*parameter_declarator
;
9392 cp_declarator
*id_declarator
;
9395 /* Assume it is a type parameter or a template parameter. */
9396 *is_non_type
= false;
9397 /* Assume it not a parameter pack. */
9398 *is_parameter_pack
= false;
9399 /* Peek at the next token. */
9400 token
= cp_lexer_peek_token (parser
->lexer
);
9401 /* If it is `class' or `template', we have a type-parameter. */
9402 if (token
->keyword
== RID_TEMPLATE
)
9403 return cp_parser_type_parameter (parser
, is_parameter_pack
);
9404 /* If it is `class' or `typename' we do not know yet whether it is a
9405 type parameter or a non-type parameter. Consider:
9407 template <typename T, typename T::X X> ...
9411 template <class C, class D*> ...
9413 Here, the first parameter is a type parameter, and the second is
9414 a non-type parameter. We can tell by looking at the token after
9415 the identifier -- if it is a `,', `=', or `>' then we have a type
9417 if (token
->keyword
== RID_TYPENAME
|| token
->keyword
== RID_CLASS
)
9419 /* Peek at the token after `class' or `typename'. */
9420 token
= cp_lexer_peek_nth_token (parser
->lexer
, 2);
9421 /* If it's an ellipsis, we have a template type parameter
9423 if (token
->type
== CPP_ELLIPSIS
)
9424 return cp_parser_type_parameter (parser
, is_parameter_pack
);
9425 /* If it's an identifier, skip it. */
9426 if (token
->type
== CPP_NAME
)
9427 token
= cp_lexer_peek_nth_token (parser
->lexer
, 3);
9428 /* Now, see if the token looks like the end of a template
9430 if (token
->type
== CPP_COMMA
9431 || token
->type
== CPP_EQ
9432 || token
->type
== CPP_GREATER
)
9433 return cp_parser_type_parameter (parser
, is_parameter_pack
);
9436 /* Otherwise, it is a non-type parameter.
9440 When parsing a default template-argument for a non-type
9441 template-parameter, the first non-nested `>' is taken as the end
9442 of the template parameter-list rather than a greater-than
9444 *is_non_type
= true;
9445 parameter_declarator
9446 = cp_parser_parameter_declaration (parser
, /*template_parm_p=*/true,
9447 /*parenthesized_p=*/NULL
);
9449 /* If the parameter declaration is marked as a parameter pack, set
9450 *IS_PARAMETER_PACK to notify the caller. Also, unmark the
9451 declarator's PACK_EXPANSION_P, otherwise we'll get errors from
9453 if (parameter_declarator
9454 && parameter_declarator
->declarator
9455 && parameter_declarator
->declarator
->parameter_pack_p
)
9457 *is_parameter_pack
= true;
9458 parameter_declarator
->declarator
->parameter_pack_p
= false;
9461 /* If the next token is an ellipsis, and we don't already have it
9462 marked as a parameter pack, then we have a parameter pack (that
9463 has no declarator). */
9464 if (!*is_parameter_pack
9465 && cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
)
9466 && declarator_can_be_parameter_pack (parameter_declarator
->declarator
))
9468 /* Consume the `...'. */
9469 cp_lexer_consume_token (parser
->lexer
);
9470 maybe_warn_variadic_templates ();
9472 *is_parameter_pack
= true;
9474 /* We might end up with a pack expansion as the type of the non-type
9475 template parameter, in which case this is a non-type template
9477 else if (parameter_declarator
9478 && parameter_declarator
->decl_specifiers
.type
9479 && PACK_EXPANSION_P (parameter_declarator
->decl_specifiers
.type
))
9481 *is_parameter_pack
= true;
9482 parameter_declarator
->decl_specifiers
.type
=
9483 PACK_EXPANSION_PATTERN (parameter_declarator
->decl_specifiers
.type
);
9486 if (*is_parameter_pack
&& cp_lexer_next_token_is (parser
->lexer
, CPP_EQ
))
9488 /* Parameter packs cannot have default arguments. However, a
9489 user may try to do so, so we'll parse them and give an
9490 appropriate diagnostic here. */
9492 /* Consume the `='. */
9493 cp_lexer_consume_token (parser
->lexer
);
9495 /* Find the name of the parameter pack. */
9496 id_declarator
= parameter_declarator
->declarator
;
9497 while (id_declarator
&& id_declarator
->kind
!= cdk_id
)
9498 id_declarator
= id_declarator
->declarator
;
9500 if (id_declarator
&& id_declarator
->kind
== cdk_id
)
9501 error ("template parameter pack %qD cannot have a default argument",
9502 id_declarator
->u
.id
.unqualified_name
);
9504 error ("template parameter pack cannot have a default argument");
9506 /* Parse the default argument, but throw away the result. */
9507 cp_parser_default_argument (parser
, /*template_parm_p=*/true);
9510 parm
= grokdeclarator (parameter_declarator
->declarator
,
9511 ¶meter_declarator
->decl_specifiers
,
9512 PARM
, /*initialized=*/0,
9514 if (parm
== error_mark_node
)
9515 return error_mark_node
;
9517 return build_tree_list (parameter_declarator
->default_argument
, parm
);
9520 /* Parse a type-parameter.
9523 class identifier [opt]
9524 class identifier [opt] = type-id
9525 typename identifier [opt]
9526 typename identifier [opt] = type-id
9527 template < template-parameter-list > class identifier [opt]
9528 template < template-parameter-list > class identifier [opt]
9531 GNU Extension (variadic templates):
9534 class ... identifier [opt]
9535 typename ... identifier [opt]
9537 Returns a TREE_LIST. The TREE_VALUE is itself a TREE_LIST. The
9538 TREE_PURPOSE is the default-argument, if any. The TREE_VALUE is
9539 the declaration of the parameter.
9541 Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
9544 cp_parser_type_parameter (cp_parser
* parser
, bool *is_parameter_pack
)
9549 /* Look for a keyword to tell us what kind of parameter this is. */
9550 token
= cp_parser_require (parser
, CPP_KEYWORD
,
9551 "%<class%>, %<typename%>, or %<template%>");
9553 return error_mark_node
;
9555 switch (token
->keyword
)
9561 tree default_argument
;
9563 /* If the next token is an ellipsis, we have a template
9565 if (cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
9567 /* Consume the `...' token. */
9568 cp_lexer_consume_token (parser
->lexer
);
9569 maybe_warn_variadic_templates ();
9571 *is_parameter_pack
= true;
9574 /* If the next token is an identifier, then it names the
9576 if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
9577 identifier
= cp_parser_identifier (parser
);
9579 identifier
= NULL_TREE
;
9581 /* Create the parameter. */
9582 parameter
= finish_template_type_parm (class_type_node
, identifier
);
9584 /* If the next token is an `=', we have a default argument. */
9585 if (cp_lexer_next_token_is (parser
->lexer
, CPP_EQ
))
9587 /* Consume the `=' token. */
9588 cp_lexer_consume_token (parser
->lexer
);
9589 /* Parse the default-argument. */
9590 push_deferring_access_checks (dk_no_deferred
);
9591 default_argument
= cp_parser_type_id (parser
);
9593 /* Template parameter packs cannot have default
9595 if (*is_parameter_pack
)
9598 error ("template parameter pack %qD cannot have a default argument",
9601 error ("template parameter packs cannot have default arguments");
9602 default_argument
= NULL_TREE
;
9604 pop_deferring_access_checks ();
9607 default_argument
= NULL_TREE
;
9609 /* Create the combined representation of the parameter and the
9610 default argument. */
9611 parameter
= build_tree_list (default_argument
, parameter
);
9617 tree parameter_list
;
9619 tree default_argument
;
9621 /* Look for the `<'. */
9622 cp_parser_require (parser
, CPP_LESS
, "%<<%>");
9623 /* Parse the template-parameter-list. */
9624 parameter_list
= cp_parser_template_parameter_list (parser
);
9625 /* Look for the `>'. */
9626 cp_parser_require (parser
, CPP_GREATER
, "%<>%>");
9627 /* Look for the `class' keyword. */
9628 cp_parser_require_keyword (parser
, RID_CLASS
, "%<class%>");
9629 /* If the next token is an ellipsis, we have a template
9631 if (cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
9633 /* Consume the `...' token. */
9634 cp_lexer_consume_token (parser
->lexer
);
9635 maybe_warn_variadic_templates ();
9637 *is_parameter_pack
= true;
9639 /* If the next token is an `=', then there is a
9640 default-argument. If the next token is a `>', we are at
9641 the end of the parameter-list. If the next token is a `,',
9642 then we are at the end of this parameter. */
9643 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_EQ
)
9644 && cp_lexer_next_token_is_not (parser
->lexer
, CPP_GREATER
)
9645 && cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
9647 identifier
= cp_parser_identifier (parser
);
9648 /* Treat invalid names as if the parameter were nameless. */
9649 if (identifier
== error_mark_node
)
9650 identifier
= NULL_TREE
;
9653 identifier
= NULL_TREE
;
9655 /* Create the template parameter. */
9656 parameter
= finish_template_template_parm (class_type_node
,
9659 /* If the next token is an `=', then there is a
9660 default-argument. */
9661 if (cp_lexer_next_token_is (parser
->lexer
, CPP_EQ
))
9665 /* Consume the `='. */
9666 cp_lexer_consume_token (parser
->lexer
);
9667 /* Parse the id-expression. */
9668 push_deferring_access_checks (dk_no_deferred
);
9670 = cp_parser_id_expression (parser
,
9671 /*template_keyword_p=*/false,
9672 /*check_dependency_p=*/true,
9673 /*template_p=*/&is_template
,
9674 /*declarator_p=*/false,
9675 /*optional_p=*/false);
9676 if (TREE_CODE (default_argument
) == TYPE_DECL
)
9677 /* If the id-expression was a template-id that refers to
9678 a template-class, we already have the declaration here,
9679 so no further lookup is needed. */
9682 /* Look up the name. */
9684 = cp_parser_lookup_name (parser
, default_argument
,
9686 /*is_template=*/is_template
,
9687 /*is_namespace=*/false,
9688 /*check_dependency=*/true,
9689 /*ambiguous_decls=*/NULL
);
9690 /* See if the default argument is valid. */
9692 = check_template_template_default_arg (default_argument
);
9694 /* Template parameter packs cannot have default
9696 if (*is_parameter_pack
)
9699 error ("template parameter pack %qD cannot have a default argument",
9702 error ("template parameter packs cannot have default arguments");
9703 default_argument
= NULL_TREE
;
9705 pop_deferring_access_checks ();
9708 default_argument
= NULL_TREE
;
9710 /* Create the combined representation of the parameter and the
9711 default argument. */
9712 parameter
= build_tree_list (default_argument
, parameter
);
9724 /* Parse a template-id.
9727 template-name < template-argument-list [opt] >
9729 If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
9730 `template' keyword. In this case, a TEMPLATE_ID_EXPR will be
9731 returned. Otherwise, if the template-name names a function, or set
9732 of functions, returns a TEMPLATE_ID_EXPR. If the template-name
9733 names a class, returns a TYPE_DECL for the specialization.
9735 If CHECK_DEPENDENCY_P is FALSE, names are looked up in
9736 uninstantiated templates. */
9739 cp_parser_template_id (cp_parser
*parser
,
9740 bool template_keyword_p
,
9741 bool check_dependency_p
,
9742 bool is_declaration
)
9748 cp_token_position start_of_id
= 0;
9749 deferred_access_check
*chk
;
9750 VEC (deferred_access_check
,gc
) *access_check
;
9751 cp_token
*next_token
, *next_token_2
;
9754 /* If the next token corresponds to a template-id, there is no need
9756 next_token
= cp_lexer_peek_token (parser
->lexer
);
9757 if (next_token
->type
== CPP_TEMPLATE_ID
)
9759 struct tree_check
*check_value
;
9761 /* Get the stored value. */
9762 check_value
= cp_lexer_consume_token (parser
->lexer
)->u
.tree_check_value
;
9763 /* Perform any access checks that were deferred. */
9764 access_check
= check_value
->checks
;
9768 VEC_iterate (deferred_access_check
, access_check
, i
, chk
) ;
9771 perform_or_defer_access_check (chk
->binfo
,
9776 /* Return the stored value. */
9777 return check_value
->value
;
9780 /* Avoid performing name lookup if there is no possibility of
9781 finding a template-id. */
9782 if ((next_token
->type
!= CPP_NAME
&& next_token
->keyword
!= RID_OPERATOR
)
9783 || (next_token
->type
== CPP_NAME
9784 && !cp_parser_nth_token_starts_template_argument_list_p
9787 cp_parser_error (parser
, "expected template-id");
9788 return error_mark_node
;
9791 /* Remember where the template-id starts. */
9792 if (cp_parser_uncommitted_to_tentative_parse_p (parser
))
9793 start_of_id
= cp_lexer_token_position (parser
->lexer
, false);
9795 push_deferring_access_checks (dk_deferred
);
9797 /* Parse the template-name. */
9798 is_identifier
= false;
9799 template = cp_parser_template_name (parser
, template_keyword_p
,
9803 if (template == error_mark_node
|| is_identifier
)
9805 pop_deferring_access_checks ();
9809 /* If we find the sequence `[:' after a template-name, it's probably
9810 a digraph-typo for `< ::'. Substitute the tokens and check if we can
9811 parse correctly the argument list. */
9812 next_token
= cp_lexer_peek_token (parser
->lexer
);
9813 next_token_2
= cp_lexer_peek_nth_token (parser
->lexer
, 2);
9814 if (next_token
->type
== CPP_OPEN_SQUARE
9815 && next_token
->flags
& DIGRAPH
9816 && next_token_2
->type
== CPP_COLON
9817 && !(next_token_2
->flags
& PREV_WHITE
))
9819 cp_parser_parse_tentatively (parser
);
9820 /* Change `:' into `::'. */
9821 next_token_2
->type
= CPP_SCOPE
;
9822 /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
9824 cp_lexer_consume_token (parser
->lexer
);
9825 /* Parse the arguments. */
9826 arguments
= cp_parser_enclosed_template_argument_list (parser
);
9827 if (!cp_parser_parse_definitely (parser
))
9829 /* If we couldn't parse an argument list, then we revert our changes
9830 and return simply an error. Maybe this is not a template-id
9832 next_token_2
->type
= CPP_COLON
;
9833 cp_parser_error (parser
, "expected %<<%>");
9834 pop_deferring_access_checks ();
9835 return error_mark_node
;
9837 /* Otherwise, emit an error about the invalid digraph, but continue
9838 parsing because we got our argument list. */
9839 permerror ("%<<::%> cannot begin a template-argument list");
9840 inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
9841 "between %<<%> and %<::%>");
9842 if (!flag_permissive
)
9847 inform ("(if you use -fpermissive G++ will accept your code)");
9854 /* Look for the `<' that starts the template-argument-list. */
9855 if (!cp_parser_require (parser
, CPP_LESS
, "%<<%>"))
9857 pop_deferring_access_checks ();
9858 return error_mark_node
;
9860 /* Parse the arguments. */
9861 arguments
= cp_parser_enclosed_template_argument_list (parser
);
9864 /* Build a representation of the specialization. */
9865 if (TREE_CODE (template) == IDENTIFIER_NODE
)
9866 template_id
= build_min_nt (TEMPLATE_ID_EXPR
, template, arguments
);
9867 else if (DECL_CLASS_TEMPLATE_P (template)
9868 || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
9870 bool entering_scope
;
9871 /* In "template <typename T> ... A<T>::", A<T> is the abstract A
9872 template (rather than some instantiation thereof) only if
9873 is not nested within some other construct. For example, in
9874 "template <typename T> void f(T) { A<T>::", A<T> is just an
9875 instantiation of A. */
9876 entering_scope
= (template_parm_scope_p ()
9877 && cp_lexer_next_token_is (parser
->lexer
,
9880 = finish_template_type (template, arguments
, entering_scope
);
9884 /* If it's not a class-template or a template-template, it should be
9885 a function-template. */
9886 gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
9887 || TREE_CODE (template) == OVERLOAD
9888 || BASELINK_P (template)));
9890 template_id
= lookup_template_function (template, arguments
);
9893 /* If parsing tentatively, replace the sequence of tokens that makes
9894 up the template-id with a CPP_TEMPLATE_ID token. That way,
9895 should we re-parse the token stream, we will not have to repeat
9896 the effort required to do the parse, nor will we issue duplicate
9897 error messages about problems during instantiation of the
9901 cp_token
*token
= cp_lexer_token_at (parser
->lexer
, start_of_id
);
9903 /* Reset the contents of the START_OF_ID token. */
9904 token
->type
= CPP_TEMPLATE_ID
;
9905 /* Retrieve any deferred checks. Do not pop this access checks yet
9906 so the memory will not be reclaimed during token replacing below. */
9907 token
->u
.tree_check_value
= GGC_CNEW (struct tree_check
);
9908 token
->u
.tree_check_value
->value
= template_id
;
9909 token
->u
.tree_check_value
->checks
= get_deferred_access_checks ();
9910 token
->keyword
= RID_MAX
;
9912 /* Purge all subsequent tokens. */
9913 cp_lexer_purge_tokens_after (parser
->lexer
, start_of_id
);
9915 /* ??? Can we actually assume that, if template_id ==
9916 error_mark_node, we will have issued a diagnostic to the
9917 user, as opposed to simply marking the tentative parse as
9919 if (cp_parser_error_occurred (parser
) && template_id
!= error_mark_node
)
9920 error ("parse error in template argument list");
9923 pop_deferring_access_checks ();
9927 /* Parse a template-name.
9932 The standard should actually say:
9936 operator-function-id
9938 A defect report has been filed about this issue.
9940 A conversion-function-id cannot be a template name because they cannot
9941 be part of a template-id. In fact, looking at this code:
9945 the conversion-function-id is "operator K<int>", and K<int> is a type-id.
9946 It is impossible to call a templated conversion-function-id with an
9947 explicit argument list, since the only allowed template parameter is
9948 the type to which it is converting.
9950 If TEMPLATE_KEYWORD_P is true, then we have just seen the
9951 `template' keyword, in a construction like:
9955 In that case `f' is taken to be a template-name, even though there
9956 is no way of knowing for sure.
9958 Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
9959 name refers to a set of overloaded functions, at least one of which
9960 is a template, or an IDENTIFIER_NODE with the name of the template,
9961 if TEMPLATE_KEYWORD_P is true. If CHECK_DEPENDENCY_P is FALSE,
9962 names are looked up inside uninstantiated templates. */
9965 cp_parser_template_name (cp_parser
* parser
,
9966 bool template_keyword_p
,
9967 bool check_dependency_p
,
9968 bool is_declaration
,
9969 bool *is_identifier
)
9975 /* If the next token is `operator', then we have either an
9976 operator-function-id or a conversion-function-id. */
9977 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_OPERATOR
))
9979 /* We don't know whether we're looking at an
9980 operator-function-id or a conversion-function-id. */
9981 cp_parser_parse_tentatively (parser
);
9982 /* Try an operator-function-id. */
9983 identifier
= cp_parser_operator_function_id (parser
);
9984 /* If that didn't work, try a conversion-function-id. */
9985 if (!cp_parser_parse_definitely (parser
))
9987 cp_parser_error (parser
, "expected template-name");
9988 return error_mark_node
;
9991 /* Look for the identifier. */
9993 identifier
= cp_parser_identifier (parser
);
9995 /* If we didn't find an identifier, we don't have a template-id. */
9996 if (identifier
== error_mark_node
)
9997 return error_mark_node
;
9999 /* If the name immediately followed the `template' keyword, then it
10000 is a template-name. However, if the next token is not `<', then
10001 we do not treat it as a template-name, since it is not being used
10002 as part of a template-id. This enables us to handle constructs
10005 template <typename T> struct S { S(); };
10006 template <typename T> S<T>::S();
10008 correctly. We would treat `S' as a template -- if it were `S<T>'
10009 -- but we do not if there is no `<'. */
10011 if (processing_template_decl
10012 && cp_parser_nth_token_starts_template_argument_list_p (parser
, 1))
10014 /* In a declaration, in a dependent context, we pretend that the
10015 "template" keyword was present in order to improve error
10016 recovery. For example, given:
10018 template <typename T> void f(T::X<int>);
10020 we want to treat "X<int>" as a template-id. */
10022 && !template_keyword_p
10023 && parser
->scope
&& TYPE_P (parser
->scope
)
10024 && check_dependency_p
10025 && dependent_type_p (parser
->scope
)
10026 /* Do not do this for dtors (or ctors), since they never
10027 need the template keyword before their name. */
10028 && !constructor_name_p (identifier
, parser
->scope
))
10030 cp_token_position start
= 0;
10032 /* Explain what went wrong. */
10033 error ("non-template %qD used as template", identifier
);
10034 inform ("use %<%T::template %D%> to indicate that it is a template",
10035 parser
->scope
, identifier
);
10036 /* If parsing tentatively, find the location of the "<" token. */
10037 if (cp_parser_simulate_error (parser
))
10038 start
= cp_lexer_token_position (parser
->lexer
, true);
10039 /* Parse the template arguments so that we can issue error
10040 messages about them. */
10041 cp_lexer_consume_token (parser
->lexer
);
10042 cp_parser_enclosed_template_argument_list (parser
);
10043 /* Skip tokens until we find a good place from which to
10044 continue parsing. */
10045 cp_parser_skip_to_closing_parenthesis (parser
,
10046 /*recovering=*/true,
10048 /*consume_paren=*/false);
10049 /* If parsing tentatively, permanently remove the
10050 template argument list. That will prevent duplicate
10051 error messages from being issued about the missing
10052 "template" keyword. */
10054 cp_lexer_purge_tokens_after (parser
->lexer
, start
);
10056 *is_identifier
= true;
10060 /* If the "template" keyword is present, then there is generally
10061 no point in doing name-lookup, so we just return IDENTIFIER.
10062 But, if the qualifying scope is non-dependent then we can
10063 (and must) do name-lookup normally. */
10064 if (template_keyword_p
10066 || (TYPE_P (parser
->scope
)
10067 && dependent_type_p (parser
->scope
))))
10071 /* Look up the name. */
10072 decl
= cp_parser_lookup_name (parser
, identifier
,
10074 /*is_template=*/false,
10075 /*is_namespace=*/false,
10076 check_dependency_p
,
10077 /*ambiguous_decls=*/NULL
);
10078 decl
= maybe_get_template_decl_from_type_decl (decl
);
10080 /* If DECL is a template, then the name was a template-name. */
10081 if (TREE_CODE (decl
) == TEMPLATE_DECL
)
10085 tree fn
= NULL_TREE
;
10087 /* The standard does not explicitly indicate whether a name that
10088 names a set of overloaded declarations, some of which are
10089 templates, is a template-name. However, such a name should
10090 be a template-name; otherwise, there is no way to form a
10091 template-id for the overloaded templates. */
10092 fns
= BASELINK_P (decl
) ? BASELINK_FUNCTIONS (decl
) : decl
;
10093 if (TREE_CODE (fns
) == OVERLOAD
)
10094 for (fn
= fns
; fn
; fn
= OVL_NEXT (fn
))
10095 if (TREE_CODE (OVL_CURRENT (fn
)) == TEMPLATE_DECL
)
10100 /* The name does not name a template. */
10101 cp_parser_error (parser
, "expected template-name");
10102 return error_mark_node
;
10106 /* If DECL is dependent, and refers to a function, then just return
10107 its name; we will look it up again during template instantiation. */
10108 if (DECL_FUNCTION_TEMPLATE_P (decl
) || !DECL_P (decl
))
10110 tree scope
= CP_DECL_CONTEXT (get_first_fn (decl
));
10111 if (TYPE_P (scope
) && dependent_type_p (scope
))
10118 /* Parse a template-argument-list.
10120 template-argument-list:
10121 template-argument ... [opt]
10122 template-argument-list , template-argument ... [opt]
10124 Returns a TREE_VEC containing the arguments. */
10127 cp_parser_template_argument_list (cp_parser
* parser
)
10129 tree fixed_args
[10];
10130 unsigned n_args
= 0;
10131 unsigned alloced
= 10;
10132 tree
*arg_ary
= fixed_args
;
10134 bool saved_in_template_argument_list_p
;
10136 bool saved_non_ice_p
;
10138 saved_in_template_argument_list_p
= parser
->in_template_argument_list_p
;
10139 parser
->in_template_argument_list_p
= true;
10140 /* Even if the template-id appears in an integral
10141 constant-expression, the contents of the argument list do
10143 saved_ice_p
= parser
->integral_constant_expression_p
;
10144 parser
->integral_constant_expression_p
= false;
10145 saved_non_ice_p
= parser
->non_integral_constant_expression_p
;
10146 parser
->non_integral_constant_expression_p
= false;
10147 /* Parse the arguments. */
10153 /* Consume the comma. */
10154 cp_lexer_consume_token (parser
->lexer
);
10156 /* Parse the template-argument. */
10157 argument
= cp_parser_template_argument (parser
);
10159 /* If the next token is an ellipsis, we're expanding a template
10161 if (cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
10163 /* Consume the `...' token. */
10164 cp_lexer_consume_token (parser
->lexer
);
10166 /* Make the argument into a TYPE_PACK_EXPANSION or
10167 EXPR_PACK_EXPANSION. */
10168 argument
= make_pack_expansion (argument
);
10171 if (n_args
== alloced
)
10175 if (arg_ary
== fixed_args
)
10177 arg_ary
= XNEWVEC (tree
, alloced
);
10178 memcpy (arg_ary
, fixed_args
, sizeof (tree
) * n_args
);
10181 arg_ary
= XRESIZEVEC (tree
, arg_ary
, alloced
);
10183 arg_ary
[n_args
++] = argument
;
10185 while (cp_lexer_next_token_is (parser
->lexer
, CPP_COMMA
));
10187 vec
= make_tree_vec (n_args
);
10190 TREE_VEC_ELT (vec
, n_args
) = arg_ary
[n_args
];
10192 if (arg_ary
!= fixed_args
)
10194 parser
->non_integral_constant_expression_p
= saved_non_ice_p
;
10195 parser
->integral_constant_expression_p
= saved_ice_p
;
10196 parser
->in_template_argument_list_p
= saved_in_template_argument_list_p
;
10200 /* Parse a template-argument.
10203 assignment-expression
10207 The representation is that of an assignment-expression, type-id, or
10208 id-expression -- except that the qualified id-expression is
10209 evaluated, so that the value returned is either a DECL or an
10212 Although the standard says "assignment-expression", it forbids
10213 throw-expressions or assignments in the template argument.
10214 Therefore, we use "conditional-expression" instead. */
10217 cp_parser_template_argument (cp_parser
* parser
)
10222 bool maybe_type_id
= false;
10226 /* There's really no way to know what we're looking at, so we just
10227 try each alternative in order.
10231 In a template-argument, an ambiguity between a type-id and an
10232 expression is resolved to a type-id, regardless of the form of
10233 the corresponding template-parameter.
10235 Therefore, we try a type-id first. */
10236 cp_parser_parse_tentatively (parser
);
10237 argument
= cp_parser_type_id (parser
);
10238 /* If there was no error parsing the type-id but the next token is a '>>',
10239 we probably found a typo for '> >'. But there are type-id which are
10240 also valid expressions. For instance:
10242 struct X { int operator >> (int); };
10243 template <int V> struct Foo {};
10246 Here 'X()' is a valid type-id of a function type, but the user just
10247 wanted to write the expression "X() >> 5". Thus, we remember that we
10248 found a valid type-id, but we still try to parse the argument as an
10249 expression to see what happens. */
10250 if (!cp_parser_error_occurred (parser
)
10251 && cp_lexer_next_token_is (parser
->lexer
, CPP_RSHIFT
))
10253 maybe_type_id
= true;
10254 cp_parser_abort_tentative_parse (parser
);
10258 /* If the next token isn't a `,' or a `>', then this argument wasn't
10259 really finished. This means that the argument is not a valid
10261 if (!cp_parser_next_token_ends_template_argument_p (parser
))
10262 cp_parser_error (parser
, "expected template-argument");
10263 /* If that worked, we're done. */
10264 if (cp_parser_parse_definitely (parser
))
10267 /* We're still not sure what the argument will be. */
10268 cp_parser_parse_tentatively (parser
);
10269 /* Try a template. */
10270 argument
= cp_parser_id_expression (parser
,
10271 /*template_keyword_p=*/false,
10272 /*check_dependency_p=*/true,
10274 /*declarator_p=*/false,
10275 /*optional_p=*/false);
10276 /* If the next token isn't a `,' or a `>', then this argument wasn't
10277 really finished. */
10278 if (!cp_parser_next_token_ends_template_argument_p (parser
))
10279 cp_parser_error (parser
, "expected template-argument");
10280 if (!cp_parser_error_occurred (parser
))
10282 /* Figure out what is being referred to. If the id-expression
10283 was for a class template specialization, then we will have a
10284 TYPE_DECL at this point. There is no need to do name lookup
10285 at this point in that case. */
10286 if (TREE_CODE (argument
) != TYPE_DECL
)
10287 argument
= cp_parser_lookup_name (parser
, argument
,
10289 /*is_template=*/template_p
,
10290 /*is_namespace=*/false,
10291 /*check_dependency=*/true,
10292 /*ambiguous_decls=*/NULL
);
10293 if (TREE_CODE (argument
) != TEMPLATE_DECL
10294 && TREE_CODE (argument
) != UNBOUND_CLASS_TEMPLATE
)
10295 cp_parser_error (parser
, "expected template-name");
10297 if (cp_parser_parse_definitely (parser
))
10299 /* It must be a non-type argument. There permitted cases are given
10300 in [temp.arg.nontype]:
10302 -- an integral constant-expression of integral or enumeration
10305 -- the name of a non-type template-parameter; or
10307 -- the name of an object or function with external linkage...
10309 -- the address of an object or function with external linkage...
10311 -- a pointer to member... */
10312 /* Look for a non-type template parameter. */
10313 if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
10315 cp_parser_parse_tentatively (parser
);
10316 argument
= cp_parser_primary_expression (parser
,
10317 /*adress_p=*/false,
10319 /*template_arg_p=*/true,
10321 if (TREE_CODE (argument
) != TEMPLATE_PARM_INDEX
10322 || !cp_parser_next_token_ends_template_argument_p (parser
))
10323 cp_parser_simulate_error (parser
);
10324 if (cp_parser_parse_definitely (parser
))
10328 /* If the next token is "&", the argument must be the address of an
10329 object or function with external linkage. */
10330 address_p
= cp_lexer_next_token_is (parser
->lexer
, CPP_AND
);
10332 cp_lexer_consume_token (parser
->lexer
);
10333 /* See if we might have an id-expression. */
10334 token
= cp_lexer_peek_token (parser
->lexer
);
10335 if (token
->type
== CPP_NAME
10336 || token
->keyword
== RID_OPERATOR
10337 || token
->type
== CPP_SCOPE
10338 || token
->type
== CPP_TEMPLATE_ID
10339 || token
->type
== CPP_NESTED_NAME_SPECIFIER
)
10341 cp_parser_parse_tentatively (parser
);
10342 argument
= cp_parser_primary_expression (parser
,
10345 /*template_arg_p=*/true,
10347 if (cp_parser_error_occurred (parser
)
10348 || !cp_parser_next_token_ends_template_argument_p (parser
))
10349 cp_parser_abort_tentative_parse (parser
);
10352 if (TREE_CODE (argument
) == INDIRECT_REF
)
10354 gcc_assert (REFERENCE_REF_P (argument
));
10355 argument
= TREE_OPERAND (argument
, 0);
10358 if (TREE_CODE (argument
) == VAR_DECL
)
10360 /* A variable without external linkage might still be a
10361 valid constant-expression, so no error is issued here
10362 if the external-linkage check fails. */
10363 if (!address_p
&& !DECL_EXTERNAL_LINKAGE_P (argument
))
10364 cp_parser_simulate_error (parser
);
10366 else if (is_overloaded_fn (argument
))
10367 /* All overloaded functions are allowed; if the external
10368 linkage test does not pass, an error will be issued
10372 && (TREE_CODE (argument
) == OFFSET_REF
10373 || TREE_CODE (argument
) == SCOPE_REF
))
10374 /* A pointer-to-member. */
10376 else if (TREE_CODE (argument
) == TEMPLATE_PARM_INDEX
)
10379 cp_parser_simulate_error (parser
);
10381 if (cp_parser_parse_definitely (parser
))
10384 argument
= build_x_unary_op (ADDR_EXPR
, argument
,
10385 tf_warning_or_error
);
10390 /* If the argument started with "&", there are no other valid
10391 alternatives at this point. */
10394 cp_parser_error (parser
, "invalid non-type template argument");
10395 return error_mark_node
;
10398 /* If the argument wasn't successfully parsed as a type-id followed
10399 by '>>', the argument can only be a constant expression now.
10400 Otherwise, we try parsing the constant-expression tentatively,
10401 because the argument could really be a type-id. */
10403 cp_parser_parse_tentatively (parser
);
10404 argument
= cp_parser_constant_expression (parser
,
10405 /*allow_non_constant_p=*/false,
10406 /*non_constant_p=*/NULL
);
10407 argument
= fold_non_dependent_expr (argument
);
10408 if (!maybe_type_id
)
10410 if (!cp_parser_next_token_ends_template_argument_p (parser
))
10411 cp_parser_error (parser
, "expected template-argument");
10412 if (cp_parser_parse_definitely (parser
))
10414 /* We did our best to parse the argument as a non type-id, but that
10415 was the only alternative that matched (albeit with a '>' after
10416 it). We can assume it's just a typo from the user, and a
10417 diagnostic will then be issued. */
10418 return cp_parser_type_id (parser
);
10421 /* Parse an explicit-instantiation.
10423 explicit-instantiation:
10424 template declaration
10426 Although the standard says `declaration', what it really means is:
10428 explicit-instantiation:
10429 template decl-specifier-seq [opt] declarator [opt] ;
10431 Things like `template int S<int>::i = 5, int S<double>::j;' are not
10432 supposed to be allowed. A defect report has been filed about this
10437 explicit-instantiation:
10438 storage-class-specifier template
10439 decl-specifier-seq [opt] declarator [opt] ;
10440 function-specifier template
10441 decl-specifier-seq [opt] declarator [opt] ; */
10444 cp_parser_explicit_instantiation (cp_parser
* parser
)
10446 int declares_class_or_enum
;
10447 cp_decl_specifier_seq decl_specifiers
;
10448 tree extension_specifier
= NULL_TREE
;
10450 /* Look for an (optional) storage-class-specifier or
10451 function-specifier. */
10452 if (cp_parser_allow_gnu_extensions_p (parser
))
10454 extension_specifier
10455 = cp_parser_storage_class_specifier_opt (parser
);
10456 if (!extension_specifier
)
10457 extension_specifier
10458 = cp_parser_function_specifier_opt (parser
,
10459 /*decl_specs=*/NULL
);
10462 /* Look for the `template' keyword. */
10463 cp_parser_require_keyword (parser
, RID_TEMPLATE
, "%<template%>");
10464 /* Let the front end know that we are processing an explicit
10466 begin_explicit_instantiation ();
10467 /* [temp.explicit] says that we are supposed to ignore access
10468 control while processing explicit instantiation directives. */
10469 push_deferring_access_checks (dk_no_check
);
10470 /* Parse a decl-specifier-seq. */
10471 cp_parser_decl_specifier_seq (parser
,
10472 CP_PARSER_FLAGS_OPTIONAL
,
10474 &declares_class_or_enum
);
10475 /* If there was exactly one decl-specifier, and it declared a class,
10476 and there's no declarator, then we have an explicit type
10478 if (declares_class_or_enum
&& cp_parser_declares_only_class_p (parser
))
10482 type
= check_tag_decl (&decl_specifiers
);
10483 /* Turn access control back on for names used during
10484 template instantiation. */
10485 pop_deferring_access_checks ();
10487 do_type_instantiation (type
, extension_specifier
,
10488 /*complain=*/tf_error
);
10492 cp_declarator
*declarator
;
10495 /* Parse the declarator. */
10497 = cp_parser_declarator (parser
, CP_PARSER_DECLARATOR_NAMED
,
10498 /*ctor_dtor_or_conv_p=*/NULL
,
10499 /*parenthesized_p=*/NULL
,
10500 /*member_p=*/false);
10501 if (declares_class_or_enum
& 2)
10502 cp_parser_check_for_definition_in_return_type (declarator
,
10503 decl_specifiers
.type
);
10504 if (declarator
!= cp_error_declarator
)
10506 decl
= grokdeclarator (declarator
, &decl_specifiers
,
10507 NORMAL
, 0, &decl_specifiers
.attributes
);
10508 /* Turn access control back on for names used during
10509 template instantiation. */
10510 pop_deferring_access_checks ();
10511 /* Do the explicit instantiation. */
10512 do_decl_instantiation (decl
, extension_specifier
);
10516 pop_deferring_access_checks ();
10517 /* Skip the body of the explicit instantiation. */
10518 cp_parser_skip_to_end_of_statement (parser
);
10521 /* We're done with the instantiation. */
10522 end_explicit_instantiation ();
10524 cp_parser_consume_semicolon_at_end_of_statement (parser
);
10527 /* Parse an explicit-specialization.
10529 explicit-specialization:
10530 template < > declaration
10532 Although the standard says `declaration', what it really means is:
10534 explicit-specialization:
10535 template <> decl-specifier [opt] init-declarator [opt] ;
10536 template <> function-definition
10537 template <> explicit-specialization
10538 template <> template-declaration */
10541 cp_parser_explicit_specialization (cp_parser
* parser
)
10543 bool need_lang_pop
;
10544 /* Look for the `template' keyword. */
10545 cp_parser_require_keyword (parser
, RID_TEMPLATE
, "%<template%>");
10546 /* Look for the `<'. */
10547 cp_parser_require (parser
, CPP_LESS
, "%<<%>");
10548 /* Look for the `>'. */
10549 cp_parser_require (parser
, CPP_GREATER
, "%<>%>");
10550 /* We have processed another parameter list. */
10551 ++parser
->num_template_parameter_lists
;
10554 A template ... explicit specialization ... shall not have C
10556 if (current_lang_name
== lang_name_c
)
10558 error ("template specialization with C linkage");
10559 /* Give it C++ linkage to avoid confusing other parts of the
10561 push_lang_context (lang_name_cplusplus
);
10562 need_lang_pop
= true;
10565 need_lang_pop
= false;
10566 /* Let the front end know that we are beginning a specialization. */
10567 if (!begin_specialization ())
10569 end_specialization ();
10570 cp_parser_skip_to_end_of_block_or_statement (parser
);
10574 /* If the next keyword is `template', we need to figure out whether
10575 or not we're looking a template-declaration. */
10576 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_TEMPLATE
))
10578 if (cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
== CPP_LESS
10579 && cp_lexer_peek_nth_token (parser
->lexer
, 3)->type
!= CPP_GREATER
)
10580 cp_parser_template_declaration_after_export (parser
,
10581 /*member_p=*/false);
10583 cp_parser_explicit_specialization (parser
);
10586 /* Parse the dependent declaration. */
10587 cp_parser_single_declaration (parser
,
10589 /*member_p=*/false,
10590 /*explicit_specialization_p=*/true,
10591 /*friend_p=*/NULL
);
10592 /* We're done with the specialization. */
10593 end_specialization ();
10594 /* For the erroneous case of a template with C linkage, we pushed an
10595 implicit C++ linkage scope; exit that scope now. */
10597 pop_lang_context ();
10598 /* We're done with this parameter list. */
10599 --parser
->num_template_parameter_lists
;
10602 /* Parse a type-specifier.
10605 simple-type-specifier
10608 elaborated-type-specifier
10616 Returns a representation of the type-specifier. For a
10617 class-specifier, enum-specifier, or elaborated-type-specifier, a
10618 TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
10620 The parser flags FLAGS is used to control type-specifier parsing.
10622 If IS_DECLARATION is TRUE, then this type-specifier is appearing
10623 in a decl-specifier-seq.
10625 If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
10626 class-specifier, enum-specifier, or elaborated-type-specifier, then
10627 *DECLARES_CLASS_OR_ENUM is set to a nonzero value. The value is 1
10628 if a type is declared; 2 if it is defined. Otherwise, it is set to
10631 If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
10632 cv-qualifier, then IS_CV_QUALIFIER is set to TRUE. Otherwise, it
10633 is set to FALSE. */
10636 cp_parser_type_specifier (cp_parser
* parser
,
10637 cp_parser_flags flags
,
10638 cp_decl_specifier_seq
*decl_specs
,
10639 bool is_declaration
,
10640 int* declares_class_or_enum
,
10641 bool* is_cv_qualifier
)
10643 tree type_spec
= NULL_TREE
;
10646 cp_decl_spec ds
= ds_last
;
10648 /* Assume this type-specifier does not declare a new type. */
10649 if (declares_class_or_enum
)
10650 *declares_class_or_enum
= 0;
10651 /* And that it does not specify a cv-qualifier. */
10652 if (is_cv_qualifier
)
10653 *is_cv_qualifier
= false;
10654 /* Peek at the next token. */
10655 token
= cp_lexer_peek_token (parser
->lexer
);
10657 /* If we're looking at a keyword, we can use that to guide the
10658 production we choose. */
10659 keyword
= token
->keyword
;
10663 /* Look for the enum-specifier. */
10664 type_spec
= cp_parser_enum_specifier (parser
);
10665 /* If that worked, we're done. */
10668 if (declares_class_or_enum
)
10669 *declares_class_or_enum
= 2;
10671 cp_parser_set_decl_spec_type (decl_specs
,
10673 /*user_defined_p=*/true);
10677 goto elaborated_type_specifier
;
10679 /* Any of these indicate either a class-specifier, or an
10680 elaborated-type-specifier. */
10684 /* Parse tentatively so that we can back up if we don't find a
10685 class-specifier. */
10686 cp_parser_parse_tentatively (parser
);
10687 /* Look for the class-specifier. */
10688 type_spec
= cp_parser_class_specifier (parser
);
10689 /* If that worked, we're done. */
10690 if (cp_parser_parse_definitely (parser
))
10692 if (declares_class_or_enum
)
10693 *declares_class_or_enum
= 2;
10695 cp_parser_set_decl_spec_type (decl_specs
,
10697 /*user_defined_p=*/true);
10701 /* Fall through. */
10702 elaborated_type_specifier
:
10703 /* We're declaring (not defining) a class or enum. */
10704 if (declares_class_or_enum
)
10705 *declares_class_or_enum
= 1;
10707 /* Fall through. */
10709 /* Look for an elaborated-type-specifier. */
10711 = (cp_parser_elaborated_type_specifier
10713 decl_specs
&& decl_specs
->specs
[(int) ds_friend
],
10716 cp_parser_set_decl_spec_type (decl_specs
,
10718 /*user_defined_p=*/true);
10723 if (is_cv_qualifier
)
10724 *is_cv_qualifier
= true;
10729 if (is_cv_qualifier
)
10730 *is_cv_qualifier
= true;
10735 if (is_cv_qualifier
)
10736 *is_cv_qualifier
= true;
10740 /* The `__complex__' keyword is a GNU extension. */
10748 /* Handle simple keywords. */
10753 ++decl_specs
->specs
[(int)ds
];
10754 decl_specs
->any_specifiers_p
= true;
10756 return cp_lexer_consume_token (parser
->lexer
)->u
.value
;
10759 /* If we do not already have a type-specifier, assume we are looking
10760 at a simple-type-specifier. */
10761 type_spec
= cp_parser_simple_type_specifier (parser
,
10765 /* If we didn't find a type-specifier, and a type-specifier was not
10766 optional in this context, issue an error message. */
10767 if (!type_spec
&& !(flags
& CP_PARSER_FLAGS_OPTIONAL
))
10769 cp_parser_error (parser
, "expected type specifier");
10770 return error_mark_node
;
10776 /* Parse a simple-type-specifier.
10778 simple-type-specifier:
10779 :: [opt] nested-name-specifier [opt] type-name
10780 :: [opt] nested-name-specifier template template-id
10795 simple-type-specifier:
10797 decltype ( expression )
10803 simple-type-specifier:
10804 __typeof__ unary-expression
10805 __typeof__ ( type-id )
10807 Returns the indicated TYPE_DECL. If DECL_SPECS is not NULL, it is
10808 appropriately updated. */
10811 cp_parser_simple_type_specifier (cp_parser
* parser
,
10812 cp_decl_specifier_seq
*decl_specs
,
10813 cp_parser_flags flags
)
10815 tree type
= NULL_TREE
;
10818 /* Peek at the next token. */
10819 token
= cp_lexer_peek_token (parser
->lexer
);
10821 /* If we're looking at a keyword, things are easy. */
10822 switch (token
->keyword
)
10826 decl_specs
->explicit_char_p
= true;
10827 type
= char_type_node
;
10830 type
= char16_type_node
;
10833 type
= char32_type_node
;
10836 type
= wchar_type_node
;
10839 type
= boolean_type_node
;
10843 ++decl_specs
->specs
[(int) ds_short
];
10844 type
= short_integer_type_node
;
10848 decl_specs
->explicit_int_p
= true;
10849 type
= integer_type_node
;
10853 ++decl_specs
->specs
[(int) ds_long
];
10854 type
= long_integer_type_node
;
10858 ++decl_specs
->specs
[(int) ds_signed
];
10859 type
= integer_type_node
;
10863 ++decl_specs
->specs
[(int) ds_unsigned
];
10864 type
= unsigned_type_node
;
10867 type
= float_type_node
;
10870 type
= double_type_node
;
10873 type
= void_type_node
;
10877 if (cxx_dialect
!= cxx98
)
10879 /* Consume the token. */
10880 cp_lexer_consume_token (parser
->lexer
);
10881 /* We do not yet support the use of `auto' as a
10883 error ("C++0x %<auto%> specifier not supported");
10888 /* Parse the `decltype' type. */
10889 type
= cp_parser_decltype (parser
);
10892 cp_parser_set_decl_spec_type (decl_specs
, type
,
10893 /*user_defined_p=*/true);
10898 /* Consume the `typeof' token. */
10899 cp_lexer_consume_token (parser
->lexer
);
10900 /* Parse the operand to `typeof'. */
10901 type
= cp_parser_sizeof_operand (parser
, RID_TYPEOF
);
10902 /* If it is not already a TYPE, take its type. */
10903 if (!TYPE_P (type
))
10904 type
= finish_typeof (type
);
10907 cp_parser_set_decl_spec_type (decl_specs
, type
,
10908 /*user_defined_p=*/true);
10916 /* If the type-specifier was for a built-in type, we're done. */
10921 /* Record the type. */
10923 && (token
->keyword
!= RID_SIGNED
10924 && token
->keyword
!= RID_UNSIGNED
10925 && token
->keyword
!= RID_SHORT
10926 && token
->keyword
!= RID_LONG
))
10927 cp_parser_set_decl_spec_type (decl_specs
,
10929 /*user_defined=*/false);
10931 decl_specs
->any_specifiers_p
= true;
10933 /* Consume the token. */
10934 id
= cp_lexer_consume_token (parser
->lexer
)->u
.value
;
10936 /* There is no valid C++ program where a non-template type is
10937 followed by a "<". That usually indicates that the user thought
10938 that the type was a template. */
10939 cp_parser_check_for_invalid_template_id (parser
, type
);
10941 return TYPE_NAME (type
);
10944 /* The type-specifier must be a user-defined type. */
10945 if (!(flags
& CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES
))
10950 /* Don't gobble tokens or issue error messages if this is an
10951 optional type-specifier. */
10952 if (flags
& CP_PARSER_FLAGS_OPTIONAL
)
10953 cp_parser_parse_tentatively (parser
);
10955 /* Look for the optional `::' operator. */
10957 = (cp_parser_global_scope_opt (parser
,
10958 /*current_scope_valid_p=*/false)
10960 /* Look for the nested-name specifier. */
10962 = (cp_parser_nested_name_specifier_opt (parser
,
10963 /*typename_keyword_p=*/false,
10964 /*check_dependency_p=*/true,
10966 /*is_declaration=*/false)
10968 /* If we have seen a nested-name-specifier, and the next token
10969 is `template', then we are using the template-id production. */
10971 && cp_parser_optional_template_keyword (parser
))
10973 /* Look for the template-id. */
10974 type
= cp_parser_template_id (parser
,
10975 /*template_keyword_p=*/true,
10976 /*check_dependency_p=*/true,
10977 /*is_declaration=*/false);
10978 /* If the template-id did not name a type, we are out of
10980 if (TREE_CODE (type
) != TYPE_DECL
)
10982 cp_parser_error (parser
, "expected template-id for type");
10986 /* Otherwise, look for a type-name. */
10988 type
= cp_parser_type_name (parser
);
10989 /* Keep track of all name-lookups performed in class scopes. */
10993 && TREE_CODE (type
) == TYPE_DECL
10994 && TREE_CODE (DECL_NAME (type
)) == IDENTIFIER_NODE
)
10995 maybe_note_name_used_in_class (DECL_NAME (type
), type
);
10996 /* If it didn't work out, we don't have a TYPE. */
10997 if ((flags
& CP_PARSER_FLAGS_OPTIONAL
)
10998 && !cp_parser_parse_definitely (parser
))
11000 if (type
&& decl_specs
)
11001 cp_parser_set_decl_spec_type (decl_specs
, type
,
11002 /*user_defined=*/true);
11005 /* If we didn't get a type-name, issue an error message. */
11006 if (!type
&& !(flags
& CP_PARSER_FLAGS_OPTIONAL
))
11008 cp_parser_error (parser
, "expected type-name");
11009 return error_mark_node
;
11012 /* There is no valid C++ program where a non-template type is
11013 followed by a "<". That usually indicates that the user thought
11014 that the type was a template. */
11015 if (type
&& type
!= error_mark_node
)
11017 /* As a last-ditch effort, see if TYPE is an Objective-C type.
11018 If it is, then the '<'...'>' enclose protocol names rather than
11019 template arguments, and so everything is fine. */
11020 if (c_dialect_objc ()
11021 && (objc_is_id (type
) || objc_is_class_name (type
)))
11023 tree protos
= cp_parser_objc_protocol_refs_opt (parser
);
11024 tree qual_type
= objc_get_protocol_qualified_type (type
, protos
);
11026 /* Clobber the "unqualified" type previously entered into
11027 DECL_SPECS with the new, improved protocol-qualified version. */
11029 decl_specs
->type
= qual_type
;
11034 cp_parser_check_for_invalid_template_id (parser
, TREE_TYPE (type
));
11040 /* Parse a type-name.
11053 Returns a TYPE_DECL for the type. */
11056 cp_parser_type_name (cp_parser
* parser
)
11060 /* We can't know yet whether it is a class-name or not. */
11061 cp_parser_parse_tentatively (parser
);
11062 /* Try a class-name. */
11063 type_decl
= cp_parser_class_name (parser
,
11064 /*typename_keyword_p=*/false,
11065 /*template_keyword_p=*/false,
11067 /*check_dependency_p=*/true,
11068 /*class_head_p=*/false,
11069 /*is_declaration=*/false);
11070 /* If it's not a class-name, keep looking. */
11071 if (!cp_parser_parse_definitely (parser
))
11073 /* It must be a typedef-name or an enum-name. */
11074 return cp_parser_nonclass_name (parser
);
11080 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
11088 Returns a TYPE_DECL for the type. */
11091 cp_parser_nonclass_name (cp_parser
* parser
)
11096 identifier
= cp_parser_identifier (parser
);
11097 if (identifier
== error_mark_node
)
11098 return error_mark_node
;
11100 /* Look up the type-name. */
11101 type_decl
= cp_parser_lookup_name_simple (parser
, identifier
);
11103 if (TREE_CODE (type_decl
) != TYPE_DECL
11104 && (objc_is_id (identifier
) || objc_is_class_name (identifier
)))
11106 /* See if this is an Objective-C type. */
11107 tree protos
= cp_parser_objc_protocol_refs_opt (parser
);
11108 tree type
= objc_get_protocol_qualified_type (identifier
, protos
);
11110 type_decl
= TYPE_NAME (type
);
11113 /* Issue an error if we did not find a type-name. */
11114 if (TREE_CODE (type_decl
) != TYPE_DECL
)
11116 if (!cp_parser_simulate_error (parser
))
11117 cp_parser_name_lookup_error (parser
, identifier
, type_decl
,
11119 return error_mark_node
;
11121 /* Remember that the name was used in the definition of the
11122 current class so that we can check later to see if the
11123 meaning would have been different after the class was
11124 entirely defined. */
11125 else if (type_decl
!= error_mark_node
11127 maybe_note_name_used_in_class (identifier
, type_decl
);
11132 /* Parse an elaborated-type-specifier. Note that the grammar given
11133 here incorporates the resolution to DR68.
11135 elaborated-type-specifier:
11136 class-key :: [opt] nested-name-specifier [opt] identifier
11137 class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
11138 enum :: [opt] nested-name-specifier [opt] identifier
11139 typename :: [opt] nested-name-specifier identifier
11140 typename :: [opt] nested-name-specifier template [opt]
11145 elaborated-type-specifier:
11146 class-key attributes :: [opt] nested-name-specifier [opt] identifier
11147 class-key attributes :: [opt] nested-name-specifier [opt]
11148 template [opt] template-id
11149 enum attributes :: [opt] nested-name-specifier [opt] identifier
11151 If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
11152 declared `friend'. If IS_DECLARATION is TRUE, then this
11153 elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
11154 something is being declared.
11156 Returns the TYPE specified. */
11159 cp_parser_elaborated_type_specifier (cp_parser
* parser
,
11161 bool is_declaration
)
11163 enum tag_types tag_type
;
11165 tree type
= NULL_TREE
;
11166 tree attributes
= NULL_TREE
;
11168 /* See if we're looking at the `enum' keyword. */
11169 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_ENUM
))
11171 /* Consume the `enum' token. */
11172 cp_lexer_consume_token (parser
->lexer
);
11173 /* Remember that it's an enumeration type. */
11174 tag_type
= enum_type
;
11175 /* Parse the attributes. */
11176 attributes
= cp_parser_attributes_opt (parser
);
11178 /* Or, it might be `typename'. */
11179 else if (cp_lexer_next_token_is_keyword (parser
->lexer
,
11182 /* Consume the `typename' token. */
11183 cp_lexer_consume_token (parser
->lexer
);
11184 /* Remember that it's a `typename' type. */
11185 tag_type
= typename_type
;
11186 /* The `typename' keyword is only allowed in templates. */
11187 if (!processing_template_decl
)
11188 pedwarn ("using %<typename%> outside of template");
11190 /* Otherwise it must be a class-key. */
11193 tag_type
= cp_parser_class_key (parser
);
11194 if (tag_type
== none_type
)
11195 return error_mark_node
;
11196 /* Parse the attributes. */
11197 attributes
= cp_parser_attributes_opt (parser
);
11200 /* Look for the `::' operator. */
11201 cp_parser_global_scope_opt (parser
,
11202 /*current_scope_valid_p=*/false);
11203 /* Look for the nested-name-specifier. */
11204 if (tag_type
== typename_type
)
11206 if (!cp_parser_nested_name_specifier (parser
,
11207 /*typename_keyword_p=*/true,
11208 /*check_dependency_p=*/true,
11211 return error_mark_node
;
11214 /* Even though `typename' is not present, the proposed resolution
11215 to Core Issue 180 says that in `class A<T>::B', `B' should be
11216 considered a type-name, even if `A<T>' is dependent. */
11217 cp_parser_nested_name_specifier_opt (parser
,
11218 /*typename_keyword_p=*/true,
11219 /*check_dependency_p=*/true,
11222 /* For everything but enumeration types, consider a template-id.
11223 For an enumeration type, consider only a plain identifier. */
11224 if (tag_type
!= enum_type
)
11226 bool template_p
= false;
11229 /* Allow the `template' keyword. */
11230 template_p
= cp_parser_optional_template_keyword (parser
);
11231 /* If we didn't see `template', we don't know if there's a
11232 template-id or not. */
11234 cp_parser_parse_tentatively (parser
);
11235 /* Parse the template-id. */
11236 decl
= cp_parser_template_id (parser
, template_p
,
11237 /*check_dependency_p=*/true,
11239 /* If we didn't find a template-id, look for an ordinary
11241 if (!template_p
&& !cp_parser_parse_definitely (parser
))
11243 /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
11244 in effect, then we must assume that, upon instantiation, the
11245 template will correspond to a class. */
11246 else if (TREE_CODE (decl
) == TEMPLATE_ID_EXPR
11247 && tag_type
== typename_type
)
11248 type
= make_typename_type (parser
->scope
, decl
,
11250 /*complain=*/tf_error
);
11252 type
= TREE_TYPE (decl
);
11257 identifier
= cp_parser_identifier (parser
);
11259 if (identifier
== error_mark_node
)
11261 parser
->scope
= NULL_TREE
;
11262 return error_mark_node
;
11265 /* For a `typename', we needn't call xref_tag. */
11266 if (tag_type
== typename_type
11267 && TREE_CODE (parser
->scope
) != NAMESPACE_DECL
)
11268 return cp_parser_make_typename_type (parser
, parser
->scope
,
11270 /* Look up a qualified name in the usual way. */
11274 tree ambiguous_decls
;
11276 decl
= cp_parser_lookup_name (parser
, identifier
,
11278 /*is_template=*/false,
11279 /*is_namespace=*/false,
11280 /*check_dependency=*/true,
11283 /* If the lookup was ambiguous, an error will already have been
11285 if (ambiguous_decls
)
11286 return error_mark_node
;
11288 /* If we are parsing friend declaration, DECL may be a
11289 TEMPLATE_DECL tree node here. However, we need to check
11290 whether this TEMPLATE_DECL results in valid code. Consider
11291 the following example:
11294 template <class T> class C {};
11297 template <class T> friend class N::C; // #1, valid code
11299 template <class T> class Y {
11300 friend class N::C; // #2, invalid code
11303 For both case #1 and #2, we arrive at a TEMPLATE_DECL after
11304 name lookup of `N::C'. We see that friend declaration must
11305 be template for the code to be valid. Note that
11306 processing_template_decl does not work here since it is
11307 always 1 for the above two cases. */
11309 decl
= (cp_parser_maybe_treat_template_as_class
11310 (decl
, /*tag_name_p=*/is_friend
11311 && parser
->num_template_parameter_lists
));
11313 if (TREE_CODE (decl
) != TYPE_DECL
)
11315 cp_parser_diagnose_invalid_type_name (parser
,
11318 return error_mark_node
;
11321 if (TREE_CODE (TREE_TYPE (decl
)) != TYPENAME_TYPE
)
11323 bool allow_template
= (parser
->num_template_parameter_lists
11324 || DECL_SELF_REFERENCE_P (decl
));
11325 type
= check_elaborated_type_specifier (tag_type
, decl
,
11328 if (type
== error_mark_node
)
11329 return error_mark_node
;
11332 /* Forward declarations of nested types, such as
11337 are invalid unless all components preceding the final '::'
11338 are complete. If all enclosing types are complete, these
11339 declarations become merely pointless.
11341 Invalid forward declarations of nested types are errors
11342 caught elsewhere in parsing. Those that are pointless arrive
11345 if (cp_parser_declares_only_class_p (parser
)
11346 && !is_friend
&& !processing_explicit_instantiation
)
11347 warning (0, "declaration %qD does not declare anything", decl
);
11349 type
= TREE_TYPE (decl
);
11353 /* An elaborated-type-specifier sometimes introduces a new type and
11354 sometimes names an existing type. Normally, the rule is that it
11355 introduces a new type only if there is not an existing type of
11356 the same name already in scope. For example, given:
11359 void f() { struct S s; }
11361 the `struct S' in the body of `f' is the same `struct S' as in
11362 the global scope; the existing definition is used. However, if
11363 there were no global declaration, this would introduce a new
11364 local class named `S'.
11366 An exception to this rule applies to the following code:
11368 namespace N { struct S; }
11370 Here, the elaborated-type-specifier names a new type
11371 unconditionally; even if there is already an `S' in the
11372 containing scope this declaration names a new type.
11373 This exception only applies if the elaborated-type-specifier
11374 forms the complete declaration:
11378 A declaration consisting solely of `class-key identifier ;' is
11379 either a redeclaration of the name in the current scope or a
11380 forward declaration of the identifier as a class name. It
11381 introduces the name into the current scope.
11383 We are in this situation precisely when the next token is a `;'.
11385 An exception to the exception is that a `friend' declaration does
11386 *not* name a new type; i.e., given:
11388 struct S { friend struct T; };
11390 `T' is not a new type in the scope of `S'.
11392 Also, `new struct S' or `sizeof (struct S)' never results in the
11393 definition of a new type; a new type can only be declared in a
11394 declaration context. */
11400 /* Friends have special name lookup rules. */
11401 ts
= ts_within_enclosing_non_class
;
11402 else if (is_declaration
11403 && cp_lexer_next_token_is (parser
->lexer
,
11405 /* This is a `class-key identifier ;' */
11411 (parser
->num_template_parameter_lists
11412 && (cp_parser_next_token_starts_class_definition_p (parser
)
11413 || cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
)));
11414 /* An unqualified name was used to reference this type, so
11415 there were no qualifying templates. */
11416 if (!cp_parser_check_template_parameters (parser
,
11417 /*num_templates=*/0))
11418 return error_mark_node
;
11419 type
= xref_tag (tag_type
, identifier
, ts
, template_p
);
11423 if (type
== error_mark_node
)
11424 return error_mark_node
;
11426 /* Allow attributes on forward declarations of classes. */
11429 if (TREE_CODE (type
) == TYPENAME_TYPE
)
11430 warning (OPT_Wattributes
,
11431 "attributes ignored on uninstantiated type");
11432 else if (tag_type
!= enum_type
&& CLASSTYPE_TEMPLATE_INSTANTIATION (type
)
11433 && ! processing_explicit_instantiation
)
11434 warning (OPT_Wattributes
,
11435 "attributes ignored on template instantiation");
11436 else if (is_declaration
&& cp_parser_declares_only_class_p (parser
))
11437 cplus_decl_attributes (&type
, attributes
, (int) ATTR_FLAG_TYPE_IN_PLACE
);
11439 warning (OPT_Wattributes
,
11440 "attributes ignored on elaborated-type-specifier that is not a forward declaration");
11443 if (tag_type
!= enum_type
)
11444 cp_parser_check_class_key (tag_type
, type
);
11446 /* A "<" cannot follow an elaborated type specifier. If that
11447 happens, the user was probably trying to form a template-id. */
11448 cp_parser_check_for_invalid_template_id (parser
, type
);
11453 /* Parse an enum-specifier.
11456 enum identifier [opt] { enumerator-list [opt] }
11459 enum attributes[opt] identifier [opt] { enumerator-list [opt] }
11462 Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
11463 if the token stream isn't an enum-specifier after all. */
11466 cp_parser_enum_specifier (cp_parser
* parser
)
11472 /* Parse tentatively so that we can back up if we don't find a
11474 cp_parser_parse_tentatively (parser
);
11476 /* Caller guarantees that the current token is 'enum', an identifier
11477 possibly follows, and the token after that is an opening brace.
11478 If we don't have an identifier, fabricate an anonymous name for
11479 the enumeration being defined. */
11480 cp_lexer_consume_token (parser
->lexer
);
11482 attributes
= cp_parser_attributes_opt (parser
);
11484 if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
11485 identifier
= cp_parser_identifier (parser
);
11487 identifier
= make_anon_name ();
11489 /* Look for the `{' but don't consume it yet. */
11490 if (!cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_BRACE
))
11491 cp_parser_simulate_error (parser
);
11493 if (!cp_parser_parse_definitely (parser
))
11496 /* Issue an error message if type-definitions are forbidden here. */
11497 if (!cp_parser_check_type_definition (parser
))
11498 type
= error_mark_node
;
11500 /* Create the new type. We do this before consuming the opening
11501 brace so the enum will be recorded as being on the line of its
11502 tag (or the 'enum' keyword, if there is no tag). */
11503 type
= start_enum (identifier
);
11505 /* Consume the opening brace. */
11506 cp_lexer_consume_token (parser
->lexer
);
11508 if (type
== error_mark_node
)
11510 cp_parser_skip_to_end_of_block_or_statement (parser
);
11511 return error_mark_node
;
11514 /* If the next token is not '}', then there are some enumerators. */
11515 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_CLOSE_BRACE
))
11516 cp_parser_enumerator_list (parser
, type
);
11518 /* Consume the final '}'. */
11519 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
11521 /* Look for trailing attributes to apply to this enumeration, and
11522 apply them if appropriate. */
11523 if (cp_parser_allow_gnu_extensions_p (parser
))
11525 tree trailing_attr
= cp_parser_attributes_opt (parser
);
11526 cplus_decl_attributes (&type
,
11528 (int) ATTR_FLAG_TYPE_IN_PLACE
);
11531 /* Finish up the enumeration. */
11532 finish_enum (type
);
11537 /* Parse an enumerator-list. The enumerators all have the indicated
11541 enumerator-definition
11542 enumerator-list , enumerator-definition */
11545 cp_parser_enumerator_list (cp_parser
* parser
, tree type
)
11549 /* Parse an enumerator-definition. */
11550 cp_parser_enumerator_definition (parser
, type
);
11552 /* If the next token is not a ',', we've reached the end of
11554 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
11556 /* Otherwise, consume the `,' and keep going. */
11557 cp_lexer_consume_token (parser
->lexer
);
11558 /* If the next token is a `}', there is a trailing comma. */
11559 if (cp_lexer_next_token_is (parser
->lexer
, CPP_CLOSE_BRACE
))
11561 if (pedantic
&& !in_system_header
)
11562 pedwarn ("comma at end of enumerator list");
11568 /* Parse an enumerator-definition. The enumerator has the indicated
11571 enumerator-definition:
11573 enumerator = constant-expression
11579 cp_parser_enumerator_definition (cp_parser
* parser
, tree type
)
11584 /* Look for the identifier. */
11585 identifier
= cp_parser_identifier (parser
);
11586 if (identifier
== error_mark_node
)
11589 /* If the next token is an '=', then there is an explicit value. */
11590 if (cp_lexer_next_token_is (parser
->lexer
, CPP_EQ
))
11592 /* Consume the `=' token. */
11593 cp_lexer_consume_token (parser
->lexer
);
11594 /* Parse the value. */
11595 value
= cp_parser_constant_expression (parser
,
11596 /*allow_non_constant_p=*/false,
11602 /* Create the enumerator. */
11603 build_enumerator (identifier
, value
, type
);
11606 /* Parse a namespace-name.
11609 original-namespace-name
11612 Returns the NAMESPACE_DECL for the namespace. */
11615 cp_parser_namespace_name (cp_parser
* parser
)
11618 tree namespace_decl
;
11620 /* Get the name of the namespace. */
11621 identifier
= cp_parser_identifier (parser
);
11622 if (identifier
== error_mark_node
)
11623 return error_mark_node
;
11625 /* Look up the identifier in the currently active scope. Look only
11626 for namespaces, due to:
11628 [basic.lookup.udir]
11630 When looking up a namespace-name in a using-directive or alias
11631 definition, only namespace names are considered.
11635 [basic.lookup.qual]
11637 During the lookup of a name preceding the :: scope resolution
11638 operator, object, function, and enumerator names are ignored.
11640 (Note that cp_parser_class_or_namespace_name only calls this
11641 function if the token after the name is the scope resolution
11643 namespace_decl
= cp_parser_lookup_name (parser
, identifier
,
11645 /*is_template=*/false,
11646 /*is_namespace=*/true,
11647 /*check_dependency=*/true,
11648 /*ambiguous_decls=*/NULL
);
11649 /* If it's not a namespace, issue an error. */
11650 if (namespace_decl
== error_mark_node
11651 || TREE_CODE (namespace_decl
) != NAMESPACE_DECL
)
11653 if (!cp_parser_uncommitted_to_tentative_parse_p (parser
))
11654 error ("%qD is not a namespace-name", identifier
);
11655 cp_parser_error (parser
, "expected namespace-name");
11656 namespace_decl
= error_mark_node
;
11659 return namespace_decl
;
11662 /* Parse a namespace-definition.
11664 namespace-definition:
11665 named-namespace-definition
11666 unnamed-namespace-definition
11668 named-namespace-definition:
11669 original-namespace-definition
11670 extension-namespace-definition
11672 original-namespace-definition:
11673 namespace identifier { namespace-body }
11675 extension-namespace-definition:
11676 namespace original-namespace-name { namespace-body }
11678 unnamed-namespace-definition:
11679 namespace { namespace-body } */
11682 cp_parser_namespace_definition (cp_parser
* parser
)
11684 tree identifier
, attribs
;
11685 bool has_visibility
;
11688 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_INLINE
))
11691 cp_lexer_consume_token (parser
->lexer
);
11696 /* Look for the `namespace' keyword. */
11697 cp_parser_require_keyword (parser
, RID_NAMESPACE
, "%<namespace%>");
11699 /* Get the name of the namespace. We do not attempt to distinguish
11700 between an original-namespace-definition and an
11701 extension-namespace-definition at this point. The semantic
11702 analysis routines are responsible for that. */
11703 if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
11704 identifier
= cp_parser_identifier (parser
);
11706 identifier
= NULL_TREE
;
11708 /* Parse any specified attributes. */
11709 attribs
= cp_parser_attributes_opt (parser
);
11711 /* Look for the `{' to start the namespace. */
11712 cp_parser_require (parser
, CPP_OPEN_BRACE
, "%<{%>");
11713 /* Start the namespace. */
11714 push_namespace (identifier
);
11716 /* "inline namespace" is equivalent to a stub namespace definition
11717 followed by a strong using directive. */
11720 tree
namespace = current_namespace
;
11721 /* Set up namespace association. */
11722 DECL_NAMESPACE_ASSOCIATIONS (namespace)
11723 = tree_cons (CP_DECL_CONTEXT (namespace), NULL_TREE
,
11724 DECL_NAMESPACE_ASSOCIATIONS (namespace));
11725 /* Import the contents of the inline namespace. */
11727 do_using_directive (namespace);
11728 push_namespace (identifier
);
11731 has_visibility
= handle_namespace_attrs (current_namespace
, attribs
);
11733 /* Parse the body of the namespace. */
11734 cp_parser_namespace_body (parser
);
11736 #ifdef HANDLE_PRAGMA_VISIBILITY
11737 if (has_visibility
)
11741 /* Finish the namespace. */
11743 /* Look for the final `}'. */
11744 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
11747 /* Parse a namespace-body.
11750 declaration-seq [opt] */
11753 cp_parser_namespace_body (cp_parser
* parser
)
11755 cp_parser_declaration_seq_opt (parser
);
11758 /* Parse a namespace-alias-definition.
11760 namespace-alias-definition:
11761 namespace identifier = qualified-namespace-specifier ; */
11764 cp_parser_namespace_alias_definition (cp_parser
* parser
)
11767 tree namespace_specifier
;
11769 /* Look for the `namespace' keyword. */
11770 cp_parser_require_keyword (parser
, RID_NAMESPACE
, "%<namespace%>");
11771 /* Look for the identifier. */
11772 identifier
= cp_parser_identifier (parser
);
11773 if (identifier
== error_mark_node
)
11775 /* Look for the `=' token. */
11776 if (!cp_parser_uncommitted_to_tentative_parse_p (parser
)
11777 && cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_BRACE
))
11779 error ("%<namespace%> definition is not allowed here");
11780 /* Skip the definition. */
11781 cp_lexer_consume_token (parser
->lexer
);
11782 if (cp_parser_skip_to_closing_brace (parser
))
11783 cp_lexer_consume_token (parser
->lexer
);
11786 cp_parser_require (parser
, CPP_EQ
, "%<=%>");
11787 /* Look for the qualified-namespace-specifier. */
11788 namespace_specifier
11789 = cp_parser_qualified_namespace_specifier (parser
);
11790 /* Look for the `;' token. */
11791 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
11793 /* Register the alias in the symbol table. */
11794 do_namespace_alias (identifier
, namespace_specifier
);
11797 /* Parse a qualified-namespace-specifier.
11799 qualified-namespace-specifier:
11800 :: [opt] nested-name-specifier [opt] namespace-name
11802 Returns a NAMESPACE_DECL corresponding to the specified
11806 cp_parser_qualified_namespace_specifier (cp_parser
* parser
)
11808 /* Look for the optional `::'. */
11809 cp_parser_global_scope_opt (parser
,
11810 /*current_scope_valid_p=*/false);
11812 /* Look for the optional nested-name-specifier. */
11813 cp_parser_nested_name_specifier_opt (parser
,
11814 /*typename_keyword_p=*/false,
11815 /*check_dependency_p=*/true,
11817 /*is_declaration=*/true);
11819 return cp_parser_namespace_name (parser
);
11822 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
11823 access declaration.
11826 using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
11827 using :: unqualified-id ;
11829 access-declaration:
11835 cp_parser_using_declaration (cp_parser
* parser
,
11836 bool access_declaration_p
)
11839 bool typename_p
= false;
11840 bool global_scope_p
;
11845 if (access_declaration_p
)
11846 cp_parser_parse_tentatively (parser
);
11849 /* Look for the `using' keyword. */
11850 cp_parser_require_keyword (parser
, RID_USING
, "%<using%>");
11852 /* Peek at the next token. */
11853 token
= cp_lexer_peek_token (parser
->lexer
);
11854 /* See if it's `typename'. */
11855 if (token
->keyword
== RID_TYPENAME
)
11857 /* Remember that we've seen it. */
11859 /* Consume the `typename' token. */
11860 cp_lexer_consume_token (parser
->lexer
);
11864 /* Look for the optional global scope qualification. */
11866 = (cp_parser_global_scope_opt (parser
,
11867 /*current_scope_valid_p=*/false)
11870 /* If we saw `typename', or didn't see `::', then there must be a
11871 nested-name-specifier present. */
11872 if (typename_p
|| !global_scope_p
)
11873 qscope
= cp_parser_nested_name_specifier (parser
, typename_p
,
11874 /*check_dependency_p=*/true,
11876 /*is_declaration=*/true);
11877 /* Otherwise, we could be in either of the two productions. In that
11878 case, treat the nested-name-specifier as optional. */
11880 qscope
= cp_parser_nested_name_specifier_opt (parser
,
11881 /*typename_keyword_p=*/false,
11882 /*check_dependency_p=*/true,
11884 /*is_declaration=*/true);
11886 qscope
= global_namespace
;
11888 if (access_declaration_p
&& cp_parser_error_occurred (parser
))
11889 /* Something has already gone wrong; there's no need to parse
11890 further. Since an error has occurred, the return value of
11891 cp_parser_parse_definitely will be false, as required. */
11892 return cp_parser_parse_definitely (parser
);
11894 /* Parse the unqualified-id. */
11895 identifier
= cp_parser_unqualified_id (parser
,
11896 /*template_keyword_p=*/false,
11897 /*check_dependency_p=*/true,
11898 /*declarator_p=*/true,
11899 /*optional_p=*/false);
11901 if (access_declaration_p
)
11903 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
11904 cp_parser_simulate_error (parser
);
11905 if (!cp_parser_parse_definitely (parser
))
11909 /* The function we call to handle a using-declaration is different
11910 depending on what scope we are in. */
11911 if (qscope
== error_mark_node
|| identifier
== error_mark_node
)
11913 else if (TREE_CODE (identifier
) != IDENTIFIER_NODE
11914 && TREE_CODE (identifier
) != BIT_NOT_EXPR
)
11915 /* [namespace.udecl]
11917 A using declaration shall not name a template-id. */
11918 error ("a template-id may not appear in a using-declaration");
11921 if (at_class_scope_p ())
11923 /* Create the USING_DECL. */
11924 decl
= do_class_using_decl (parser
->scope
, identifier
);
11926 if (check_for_bare_parameter_packs (decl
))
11929 /* Add it to the list of members in this class. */
11930 finish_member_declaration (decl
);
11934 decl
= cp_parser_lookup_name_simple (parser
, identifier
);
11935 if (decl
== error_mark_node
)
11936 cp_parser_name_lookup_error (parser
, identifier
, decl
, NULL
);
11937 else if (check_for_bare_parameter_packs (decl
))
11939 else if (!at_namespace_scope_p ())
11940 do_local_using_decl (decl
, qscope
, identifier
);
11942 do_toplevel_using_decl (decl
, qscope
, identifier
);
11946 /* Look for the final `;'. */
11947 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
11952 /* Parse a using-directive.
11955 using namespace :: [opt] nested-name-specifier [opt]
11956 namespace-name ; */
11959 cp_parser_using_directive (cp_parser
* parser
)
11961 tree namespace_decl
;
11964 /* Look for the `using' keyword. */
11965 cp_parser_require_keyword (parser
, RID_USING
, "%<using%>");
11966 /* And the `namespace' keyword. */
11967 cp_parser_require_keyword (parser
, RID_NAMESPACE
, "%<namespace%>");
11968 /* Look for the optional `::' operator. */
11969 cp_parser_global_scope_opt (parser
, /*current_scope_valid_p=*/false);
11970 /* And the optional nested-name-specifier. */
11971 cp_parser_nested_name_specifier_opt (parser
,
11972 /*typename_keyword_p=*/false,
11973 /*check_dependency_p=*/true,
11975 /*is_declaration=*/true);
11976 /* Get the namespace being used. */
11977 namespace_decl
= cp_parser_namespace_name (parser
);
11978 /* And any specified attributes. */
11979 attribs
= cp_parser_attributes_opt (parser
);
11980 /* Update the symbol table. */
11981 parse_using_directive (namespace_decl
, attribs
);
11982 /* Look for the final `;'. */
11983 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
11986 /* Parse an asm-definition.
11989 asm ( string-literal ) ;
11994 asm volatile [opt] ( string-literal ) ;
11995 asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
11996 asm volatile [opt] ( string-literal : asm-operand-list [opt]
11997 : asm-operand-list [opt] ) ;
11998 asm volatile [opt] ( string-literal : asm-operand-list [opt]
11999 : asm-operand-list [opt]
12000 : asm-operand-list [opt] ) ; */
12003 cp_parser_asm_definition (cp_parser
* parser
)
12006 tree outputs
= NULL_TREE
;
12007 tree inputs
= NULL_TREE
;
12008 tree clobbers
= NULL_TREE
;
12010 bool volatile_p
= false;
12011 bool extended_p
= false;
12012 bool invalid_inputs_p
= false;
12013 bool invalid_outputs_p
= false;
12015 /* Look for the `asm' keyword. */
12016 cp_parser_require_keyword (parser
, RID_ASM
, "%<asm%>");
12017 /* See if the next token is `volatile'. */
12018 if (cp_parser_allow_gnu_extensions_p (parser
)
12019 && cp_lexer_next_token_is_keyword (parser
->lexer
, RID_VOLATILE
))
12021 /* Remember that we saw the `volatile' keyword. */
12023 /* Consume the token. */
12024 cp_lexer_consume_token (parser
->lexer
);
12026 /* Look for the opening `('. */
12027 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
12029 /* Look for the string. */
12030 string
= cp_parser_string_literal (parser
, false, false);
12031 if (string
== error_mark_node
)
12033 cp_parser_skip_to_closing_parenthesis (parser
, true, false,
12034 /*consume_paren=*/true);
12038 /* If we're allowing GNU extensions, check for the extended assembly
12039 syntax. Unfortunately, the `:' tokens need not be separated by
12040 a space in C, and so, for compatibility, we tolerate that here
12041 too. Doing that means that we have to treat the `::' operator as
12043 if (cp_parser_allow_gnu_extensions_p (parser
)
12044 && parser
->in_function_body
12045 && (cp_lexer_next_token_is (parser
->lexer
, CPP_COLON
)
12046 || cp_lexer_next_token_is (parser
->lexer
, CPP_SCOPE
)))
12048 bool inputs_p
= false;
12049 bool clobbers_p
= false;
12051 /* The extended syntax was used. */
12054 /* Look for outputs. */
12055 if (cp_lexer_next_token_is (parser
->lexer
, CPP_COLON
))
12057 /* Consume the `:'. */
12058 cp_lexer_consume_token (parser
->lexer
);
12059 /* Parse the output-operands. */
12060 if (cp_lexer_next_token_is_not (parser
->lexer
,
12062 && cp_lexer_next_token_is_not (parser
->lexer
,
12064 && cp_lexer_next_token_is_not (parser
->lexer
,
12066 outputs
= cp_parser_asm_operand_list (parser
);
12068 if (outputs
== error_mark_node
)
12069 invalid_outputs_p
= true;
12071 /* If the next token is `::', there are no outputs, and the
12072 next token is the beginning of the inputs. */
12073 else if (cp_lexer_next_token_is (parser
->lexer
, CPP_SCOPE
))
12074 /* The inputs are coming next. */
12077 /* Look for inputs. */
12079 || cp_lexer_next_token_is (parser
->lexer
, CPP_COLON
))
12081 /* Consume the `:' or `::'. */
12082 cp_lexer_consume_token (parser
->lexer
);
12083 /* Parse the output-operands. */
12084 if (cp_lexer_next_token_is_not (parser
->lexer
,
12086 && cp_lexer_next_token_is_not (parser
->lexer
,
12088 inputs
= cp_parser_asm_operand_list (parser
);
12090 if (inputs
== error_mark_node
)
12091 invalid_inputs_p
= true;
12093 else if (cp_lexer_next_token_is (parser
->lexer
, CPP_SCOPE
))
12094 /* The clobbers are coming next. */
12097 /* Look for clobbers. */
12099 || cp_lexer_next_token_is (parser
->lexer
, CPP_COLON
))
12101 /* Consume the `:' or `::'. */
12102 cp_lexer_consume_token (parser
->lexer
);
12103 /* Parse the clobbers. */
12104 if (cp_lexer_next_token_is_not (parser
->lexer
,
12106 clobbers
= cp_parser_asm_clobber_list (parser
);
12109 /* Look for the closing `)'. */
12110 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
12111 cp_parser_skip_to_closing_parenthesis (parser
, true, false,
12112 /*consume_paren=*/true);
12113 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
12115 if (!invalid_inputs_p
&& !invalid_outputs_p
)
12117 /* Create the ASM_EXPR. */
12118 if (parser
->in_function_body
)
12120 asm_stmt
= finish_asm_stmt (volatile_p
, string
, outputs
,
12122 /* If the extended syntax was not used, mark the ASM_EXPR. */
12125 tree temp
= asm_stmt
;
12126 if (TREE_CODE (temp
) == CLEANUP_POINT_EXPR
)
12127 temp
= TREE_OPERAND (temp
, 0);
12129 ASM_INPUT_P (temp
) = 1;
12133 cgraph_add_asm_node (string
);
12137 /* Declarators [gram.dcl.decl] */
12139 /* Parse an init-declarator.
12142 declarator initializer [opt]
12147 declarator asm-specification [opt] attributes [opt] initializer [opt]
12149 function-definition:
12150 decl-specifier-seq [opt] declarator ctor-initializer [opt]
12152 decl-specifier-seq [opt] declarator function-try-block
12156 function-definition:
12157 __extension__ function-definition
12159 The DECL_SPECIFIERS apply to this declarator. Returns a
12160 representation of the entity declared. If MEMBER_P is TRUE, then
12161 this declarator appears in a class scope. The new DECL created by
12162 this declarator is returned.
12164 The CHECKS are access checks that should be performed once we know
12165 what entity is being declared (and, therefore, what classes have
12168 If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
12169 for a function-definition here as well. If the declarator is a
12170 declarator for a function-definition, *FUNCTION_DEFINITION_P will
12171 be TRUE upon return. By that point, the function-definition will
12172 have been completely parsed.
12174 FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
12178 cp_parser_init_declarator (cp_parser
* parser
,
12179 cp_decl_specifier_seq
*decl_specifiers
,
12180 VEC (deferred_access_check
,gc
)* checks
,
12181 bool function_definition_allowed_p
,
12183 int declares_class_or_enum
,
12184 bool* function_definition_p
)
12187 cp_declarator
*declarator
;
12188 tree prefix_attributes
;
12190 tree asm_specification
;
12192 tree decl
= NULL_TREE
;
12194 bool is_initialized
;
12195 /* Only valid if IS_INITIALIZED is true. In that case, CPP_EQ if
12196 initialized with "= ..", CPP_OPEN_PAREN if initialized with
12198 enum cpp_ttype initialization_kind
;
12199 bool is_parenthesized_init
= false;
12200 bool is_non_constant_init
;
12201 int ctor_dtor_or_conv_p
;
12203 tree pushed_scope
= NULL
;
12205 /* Gather the attributes that were provided with the
12206 decl-specifiers. */
12207 prefix_attributes
= decl_specifiers
->attributes
;
12209 /* Assume that this is not the declarator for a function
12211 if (function_definition_p
)
12212 *function_definition_p
= false;
12214 /* Defer access checks while parsing the declarator; we cannot know
12215 what names are accessible until we know what is being
12217 resume_deferring_access_checks ();
12219 /* Parse the declarator. */
12221 = cp_parser_declarator (parser
, CP_PARSER_DECLARATOR_NAMED
,
12222 &ctor_dtor_or_conv_p
,
12223 /*parenthesized_p=*/NULL
,
12224 /*member_p=*/false);
12225 /* Gather up the deferred checks. */
12226 stop_deferring_access_checks ();
12228 /* If the DECLARATOR was erroneous, there's no need to go
12230 if (declarator
== cp_error_declarator
)
12231 return error_mark_node
;
12233 /* Check that the number of template-parameter-lists is OK. */
12234 if (!cp_parser_check_declarator_template_parameters (parser
, declarator
))
12235 return error_mark_node
;
12237 if (declares_class_or_enum
& 2)
12238 cp_parser_check_for_definition_in_return_type (declarator
,
12239 decl_specifiers
->type
);
12241 /* Figure out what scope the entity declared by the DECLARATOR is
12242 located in. `grokdeclarator' sometimes changes the scope, so
12243 we compute it now. */
12244 scope
= get_scope_of_declarator (declarator
);
12246 /* If we're allowing GNU extensions, look for an asm-specification
12248 if (cp_parser_allow_gnu_extensions_p (parser
))
12250 /* Look for an asm-specification. */
12251 asm_specification
= cp_parser_asm_specification_opt (parser
);
12252 /* And attributes. */
12253 attributes
= cp_parser_attributes_opt (parser
);
12257 asm_specification
= NULL_TREE
;
12258 attributes
= NULL_TREE
;
12261 /* Peek at the next token. */
12262 token
= cp_lexer_peek_token (parser
->lexer
);
12263 /* Check to see if the token indicates the start of a
12264 function-definition. */
12265 if (cp_parser_token_starts_function_definition_p (token
))
12267 if (!function_definition_allowed_p
)
12269 /* If a function-definition should not appear here, issue an
12271 cp_parser_error (parser
,
12272 "a function-definition is not allowed here");
12273 return error_mark_node
;
12277 /* Neither attributes nor an asm-specification are allowed
12278 on a function-definition. */
12279 if (asm_specification
)
12280 error ("an asm-specification is not allowed on a function-definition");
12282 error ("attributes are not allowed on a function-definition");
12283 /* This is a function-definition. */
12284 *function_definition_p
= true;
12286 /* Parse the function definition. */
12288 decl
= cp_parser_save_member_function_body (parser
,
12291 prefix_attributes
);
12294 = (cp_parser_function_definition_from_specifiers_and_declarator
12295 (parser
, decl_specifiers
, prefix_attributes
, declarator
));
12303 Only in function declarations for constructors, destructors, and
12304 type conversions can the decl-specifier-seq be omitted.
12306 We explicitly postpone this check past the point where we handle
12307 function-definitions because we tolerate function-definitions
12308 that are missing their return types in some modes. */
12309 if (!decl_specifiers
->any_specifiers_p
&& ctor_dtor_or_conv_p
<= 0)
12311 cp_parser_error (parser
,
12312 "expected constructor, destructor, or type conversion");
12313 return error_mark_node
;
12316 /* An `=' or an `(' indicates an initializer. */
12317 if (token
->type
== CPP_EQ
12318 || token
->type
== CPP_OPEN_PAREN
)
12320 is_initialized
= true;
12321 initialization_kind
= token
->type
;
12325 /* If the init-declarator isn't initialized and isn't followed by a
12326 `,' or `;', it's not a valid init-declarator. */
12327 if (token
->type
!= CPP_COMMA
12328 && token
->type
!= CPP_SEMICOLON
)
12330 cp_parser_error (parser
, "expected initializer");
12331 return error_mark_node
;
12333 is_initialized
= false;
12334 initialization_kind
= CPP_EOF
;
12337 /* Because start_decl has side-effects, we should only call it if we
12338 know we're going ahead. By this point, we know that we cannot
12339 possibly be looking at any other construct. */
12340 cp_parser_commit_to_tentative_parse (parser
);
12342 /* If the decl specifiers were bad, issue an error now that we're
12343 sure this was intended to be a declarator. Then continue
12344 declaring the variable(s), as int, to try to cut down on further
12346 if (decl_specifiers
->any_specifiers_p
12347 && decl_specifiers
->type
== error_mark_node
)
12349 cp_parser_error (parser
, "invalid type in declaration");
12350 decl_specifiers
->type
= integer_type_node
;
12353 /* Check to see whether or not this declaration is a friend. */
12354 friend_p
= cp_parser_friend_p (decl_specifiers
);
12356 /* Enter the newly declared entry in the symbol table. If we're
12357 processing a declaration in a class-specifier, we wait until
12358 after processing the initializer. */
12361 if (parser
->in_unbraced_linkage_specification_p
)
12362 decl_specifiers
->storage_class
= sc_extern
;
12363 decl
= start_decl (declarator
, decl_specifiers
,
12364 is_initialized
, attributes
, prefix_attributes
,
12368 /* Enter the SCOPE. That way unqualified names appearing in the
12369 initializer will be looked up in SCOPE. */
12370 pushed_scope
= push_scope (scope
);
12372 /* Perform deferred access control checks, now that we know in which
12373 SCOPE the declared entity resides. */
12374 if (!member_p
&& decl
)
12376 tree saved_current_function_decl
= NULL_TREE
;
12378 /* If the entity being declared is a function, pretend that we
12379 are in its scope. If it is a `friend', it may have access to
12380 things that would not otherwise be accessible. */
12381 if (TREE_CODE (decl
) == FUNCTION_DECL
)
12383 saved_current_function_decl
= current_function_decl
;
12384 current_function_decl
= decl
;
12387 /* Perform access checks for template parameters. */
12388 cp_parser_perform_template_parameter_access_checks (checks
);
12390 /* Perform the access control checks for the declarator and the
12391 the decl-specifiers. */
12392 perform_deferred_access_checks ();
12394 /* Restore the saved value. */
12395 if (TREE_CODE (decl
) == FUNCTION_DECL
)
12396 current_function_decl
= saved_current_function_decl
;
12399 /* Parse the initializer. */
12400 initializer
= NULL_TREE
;
12401 is_parenthesized_init
= false;
12402 is_non_constant_init
= true;
12403 if (is_initialized
)
12405 if (function_declarator_p (declarator
))
12407 if (initialization_kind
== CPP_EQ
)
12408 initializer
= cp_parser_pure_specifier (parser
);
12411 /* If the declaration was erroneous, we don't really
12412 know what the user intended, so just silently
12413 consume the initializer. */
12414 if (decl
!= error_mark_node
)
12415 error ("initializer provided for function");
12416 cp_parser_skip_to_closing_parenthesis (parser
,
12417 /*recovering=*/true,
12418 /*or_comma=*/false,
12419 /*consume_paren=*/true);
12423 initializer
= cp_parser_initializer (parser
,
12424 &is_parenthesized_init
,
12425 &is_non_constant_init
);
12428 /* The old parser allows attributes to appear after a parenthesized
12429 initializer. Mark Mitchell proposed removing this functionality
12430 on the GCC mailing lists on 2002-08-13. This parser accepts the
12431 attributes -- but ignores them. */
12432 if (cp_parser_allow_gnu_extensions_p (parser
) && is_parenthesized_init
)
12433 if (cp_parser_attributes_opt (parser
))
12434 warning (OPT_Wattributes
,
12435 "attributes after parenthesized initializer ignored");
12437 /* For an in-class declaration, use `grokfield' to create the
12443 pop_scope (pushed_scope
);
12444 pushed_scope
= false;
12446 decl
= grokfield (declarator
, decl_specifiers
,
12447 initializer
, !is_non_constant_init
,
12448 /*asmspec=*/NULL_TREE
,
12449 prefix_attributes
);
12450 if (decl
&& TREE_CODE (decl
) == FUNCTION_DECL
)
12451 cp_parser_save_default_args (parser
, decl
);
12454 /* Finish processing the declaration. But, skip friend
12456 if (!friend_p
&& decl
&& decl
!= error_mark_node
)
12458 cp_finish_decl (decl
,
12459 initializer
, !is_non_constant_init
,
12461 /* If the initializer is in parentheses, then this is
12462 a direct-initialization, which means that an
12463 `explicit' constructor is OK. Otherwise, an
12464 `explicit' constructor cannot be used. */
12465 ((is_parenthesized_init
|| !is_initialized
)
12466 ? 0 : LOOKUP_ONLYCONVERTING
));
12468 else if ((cxx_dialect
!= cxx98
) && friend_p
12469 && decl
&& TREE_CODE (decl
) == FUNCTION_DECL
)
12470 /* Core issue #226 (C++0x only): A default template-argument
12471 shall not be specified in a friend class template
12473 check_default_tmpl_args (decl
, current_template_parms
, /*is_primary=*/1,
12474 /*is_partial=*/0, /*is_friend_decl=*/1);
12476 if (!friend_p
&& pushed_scope
)
12477 pop_scope (pushed_scope
);
12482 /* Parse a declarator.
12486 ptr-operator declarator
12488 abstract-declarator:
12489 ptr-operator abstract-declarator [opt]
12490 direct-abstract-declarator
12495 attributes [opt] direct-declarator
12496 attributes [opt] ptr-operator declarator
12498 abstract-declarator:
12499 attributes [opt] ptr-operator abstract-declarator [opt]
12500 attributes [opt] direct-abstract-declarator
12502 If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
12503 detect constructor, destructor or conversion operators. It is set
12504 to -1 if the declarator is a name, and +1 if it is a
12505 function. Otherwise it is set to zero. Usually you just want to
12506 test for >0, but internally the negative value is used.
12508 (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
12509 a decl-specifier-seq unless it declares a constructor, destructor,
12510 or conversion. It might seem that we could check this condition in
12511 semantic analysis, rather than parsing, but that makes it difficult
12512 to handle something like `f()'. We want to notice that there are
12513 no decl-specifiers, and therefore realize that this is an
12514 expression, not a declaration.)
12516 If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
12517 the declarator is a direct-declarator of the form "(...)".
12519 MEMBER_P is true iff this declarator is a member-declarator. */
12521 static cp_declarator
*
12522 cp_parser_declarator (cp_parser
* parser
,
12523 cp_parser_declarator_kind dcl_kind
,
12524 int* ctor_dtor_or_conv_p
,
12525 bool* parenthesized_p
,
12529 cp_declarator
*declarator
;
12530 enum tree_code code
;
12531 cp_cv_quals cv_quals
;
12533 tree attributes
= NULL_TREE
;
12535 /* Assume this is not a constructor, destructor, or type-conversion
12537 if (ctor_dtor_or_conv_p
)
12538 *ctor_dtor_or_conv_p
= 0;
12540 if (cp_parser_allow_gnu_extensions_p (parser
))
12541 attributes
= cp_parser_attributes_opt (parser
);
12543 /* Peek at the next token. */
12544 token
= cp_lexer_peek_token (parser
->lexer
);
12546 /* Check for the ptr-operator production. */
12547 cp_parser_parse_tentatively (parser
);
12548 /* Parse the ptr-operator. */
12549 code
= cp_parser_ptr_operator (parser
,
12552 /* If that worked, then we have a ptr-operator. */
12553 if (cp_parser_parse_definitely (parser
))
12555 /* If a ptr-operator was found, then this declarator was not
12557 if (parenthesized_p
)
12558 *parenthesized_p
= true;
12559 /* The dependent declarator is optional if we are parsing an
12560 abstract-declarator. */
12561 if (dcl_kind
!= CP_PARSER_DECLARATOR_NAMED
)
12562 cp_parser_parse_tentatively (parser
);
12564 /* Parse the dependent declarator. */
12565 declarator
= cp_parser_declarator (parser
, dcl_kind
,
12566 /*ctor_dtor_or_conv_p=*/NULL
,
12567 /*parenthesized_p=*/NULL
,
12568 /*member_p=*/false);
12570 /* If we are parsing an abstract-declarator, we must handle the
12571 case where the dependent declarator is absent. */
12572 if (dcl_kind
!= CP_PARSER_DECLARATOR_NAMED
12573 && !cp_parser_parse_definitely (parser
))
12576 declarator
= cp_parser_make_indirect_declarator
12577 (code
, class_type
, cv_quals
, declarator
);
12579 /* Everything else is a direct-declarator. */
12582 if (parenthesized_p
)
12583 *parenthesized_p
= cp_lexer_next_token_is (parser
->lexer
,
12585 declarator
= cp_parser_direct_declarator (parser
, dcl_kind
,
12586 ctor_dtor_or_conv_p
,
12590 if (attributes
&& declarator
&& declarator
!= cp_error_declarator
)
12591 declarator
->attributes
= attributes
;
12596 /* Parse a direct-declarator or direct-abstract-declarator.
12600 direct-declarator ( parameter-declaration-clause )
12601 cv-qualifier-seq [opt]
12602 exception-specification [opt]
12603 direct-declarator [ constant-expression [opt] ]
12606 direct-abstract-declarator:
12607 direct-abstract-declarator [opt]
12608 ( parameter-declaration-clause )
12609 cv-qualifier-seq [opt]
12610 exception-specification [opt]
12611 direct-abstract-declarator [opt] [ constant-expression [opt] ]
12612 ( abstract-declarator )
12614 Returns a representation of the declarator. DCL_KIND is
12615 CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
12616 direct-abstract-declarator. It is CP_PARSER_DECLARATOR_NAMED, if
12617 we are parsing a direct-declarator. It is
12618 CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
12619 of ambiguity we prefer an abstract declarator, as per
12620 [dcl.ambig.res]. CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
12621 cp_parser_declarator. */
12623 static cp_declarator
*
12624 cp_parser_direct_declarator (cp_parser
* parser
,
12625 cp_parser_declarator_kind dcl_kind
,
12626 int* ctor_dtor_or_conv_p
,
12630 cp_declarator
*declarator
= NULL
;
12631 tree scope
= NULL_TREE
;
12632 bool saved_default_arg_ok_p
= parser
->default_arg_ok_p
;
12633 bool saved_in_declarator_p
= parser
->in_declarator_p
;
12635 tree pushed_scope
= NULL_TREE
;
12639 /* Peek at the next token. */
12640 token
= cp_lexer_peek_token (parser
->lexer
);
12641 if (token
->type
== CPP_OPEN_PAREN
)
12643 /* This is either a parameter-declaration-clause, or a
12644 parenthesized declarator. When we know we are parsing a
12645 named declarator, it must be a parenthesized declarator
12646 if FIRST is true. For instance, `(int)' is a
12647 parameter-declaration-clause, with an omitted
12648 direct-abstract-declarator. But `((*))', is a
12649 parenthesized abstract declarator. Finally, when T is a
12650 template parameter `(T)' is a
12651 parameter-declaration-clause, and not a parenthesized
12654 We first try and parse a parameter-declaration-clause,
12655 and then try a nested declarator (if FIRST is true).
12657 It is not an error for it not to be a
12658 parameter-declaration-clause, even when FIRST is
12664 The first is the declaration of a function while the
12665 second is a the definition of a variable, including its
12668 Having seen only the parenthesis, we cannot know which of
12669 these two alternatives should be selected. Even more
12670 complex are examples like:
12675 The former is a function-declaration; the latter is a
12676 variable initialization.
12678 Thus again, we try a parameter-declaration-clause, and if
12679 that fails, we back out and return. */
12681 if (!first
|| dcl_kind
!= CP_PARSER_DECLARATOR_NAMED
)
12683 cp_parameter_declarator
*params
;
12684 unsigned saved_num_template_parameter_lists
;
12686 /* In a member-declarator, the only valid interpretation
12687 of a parenthesis is the start of a
12688 parameter-declaration-clause. (It is invalid to
12689 initialize a static data member with a parenthesized
12690 initializer; only the "=" form of initialization is
12693 cp_parser_parse_tentatively (parser
);
12695 /* Consume the `('. */
12696 cp_lexer_consume_token (parser
->lexer
);
12699 /* If this is going to be an abstract declarator, we're
12700 in a declarator and we can't have default args. */
12701 parser
->default_arg_ok_p
= false;
12702 parser
->in_declarator_p
= true;
12705 /* Inside the function parameter list, surrounding
12706 template-parameter-lists do not apply. */
12707 saved_num_template_parameter_lists
12708 = parser
->num_template_parameter_lists
;
12709 parser
->num_template_parameter_lists
= 0;
12711 /* Parse the parameter-declaration-clause. */
12712 params
= cp_parser_parameter_declaration_clause (parser
);
12714 parser
->num_template_parameter_lists
12715 = saved_num_template_parameter_lists
;
12717 /* If all went well, parse the cv-qualifier-seq and the
12718 exception-specification. */
12719 if (member_p
|| cp_parser_parse_definitely (parser
))
12721 cp_cv_quals cv_quals
;
12722 tree exception_specification
;
12724 if (ctor_dtor_or_conv_p
)
12725 *ctor_dtor_or_conv_p
= *ctor_dtor_or_conv_p
< 0;
12727 /* Consume the `)'. */
12728 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
12730 /* Parse the cv-qualifier-seq. */
12731 cv_quals
= cp_parser_cv_qualifier_seq_opt (parser
);
12732 /* And the exception-specification. */
12733 exception_specification
12734 = cp_parser_exception_specification_opt (parser
);
12736 /* Create the function-declarator. */
12737 declarator
= make_call_declarator (declarator
,
12740 exception_specification
);
12741 /* Any subsequent parameter lists are to do with
12742 return type, so are not those of the declared
12744 parser
->default_arg_ok_p
= false;
12746 /* Repeat the main loop. */
12751 /* If this is the first, we can try a parenthesized
12755 bool saved_in_type_id_in_expr_p
;
12757 parser
->default_arg_ok_p
= saved_default_arg_ok_p
;
12758 parser
->in_declarator_p
= saved_in_declarator_p
;
12760 /* Consume the `('. */
12761 cp_lexer_consume_token (parser
->lexer
);
12762 /* Parse the nested declarator. */
12763 saved_in_type_id_in_expr_p
= parser
->in_type_id_in_expr_p
;
12764 parser
->in_type_id_in_expr_p
= true;
12766 = cp_parser_declarator (parser
, dcl_kind
, ctor_dtor_or_conv_p
,
12767 /*parenthesized_p=*/NULL
,
12769 parser
->in_type_id_in_expr_p
= saved_in_type_id_in_expr_p
;
12771 /* Expect a `)'. */
12772 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
12773 declarator
= cp_error_declarator
;
12774 if (declarator
== cp_error_declarator
)
12777 goto handle_declarator
;
12779 /* Otherwise, we must be done. */
12783 else if ((!first
|| dcl_kind
!= CP_PARSER_DECLARATOR_NAMED
)
12784 && token
->type
== CPP_OPEN_SQUARE
)
12786 /* Parse an array-declarator. */
12789 if (ctor_dtor_or_conv_p
)
12790 *ctor_dtor_or_conv_p
= 0;
12793 parser
->default_arg_ok_p
= false;
12794 parser
->in_declarator_p
= true;
12795 /* Consume the `['. */
12796 cp_lexer_consume_token (parser
->lexer
);
12797 /* Peek at the next token. */
12798 token
= cp_lexer_peek_token (parser
->lexer
);
12799 /* If the next token is `]', then there is no
12800 constant-expression. */
12801 if (token
->type
!= CPP_CLOSE_SQUARE
)
12803 bool non_constant_p
;
12806 = cp_parser_constant_expression (parser
,
12807 /*allow_non_constant=*/true,
12809 if (!non_constant_p
)
12810 bounds
= fold_non_dependent_expr (bounds
);
12811 /* Normally, the array bound must be an integral constant
12812 expression. However, as an extension, we allow VLAs
12813 in function scopes. */
12814 else if (!parser
->in_function_body
)
12816 error ("array bound is not an integer constant");
12817 bounds
= error_mark_node
;
12821 bounds
= NULL_TREE
;
12822 /* Look for the closing `]'. */
12823 if (!cp_parser_require (parser
, CPP_CLOSE_SQUARE
, "%<]%>"))
12825 declarator
= cp_error_declarator
;
12829 declarator
= make_array_declarator (declarator
, bounds
);
12831 else if (first
&& dcl_kind
!= CP_PARSER_DECLARATOR_ABSTRACT
)
12833 tree qualifying_scope
;
12834 tree unqualified_name
;
12835 special_function_kind sfk
;
12837 bool pack_expansion_p
= false;
12839 /* Parse a declarator-id */
12840 abstract_ok
= (dcl_kind
== CP_PARSER_DECLARATOR_EITHER
);
12843 cp_parser_parse_tentatively (parser
);
12845 /* If we see an ellipsis, we should be looking at a
12847 if (token
->type
== CPP_ELLIPSIS
)
12849 /* Consume the `...' */
12850 cp_lexer_consume_token (parser
->lexer
);
12852 pack_expansion_p
= true;
12857 = cp_parser_declarator_id (parser
, /*optional_p=*/abstract_ok
);
12858 qualifying_scope
= parser
->scope
;
12863 if (!unqualified_name
&& pack_expansion_p
)
12865 /* Check whether an error occurred. */
12866 okay
= !cp_parser_error_occurred (parser
);
12868 /* We already consumed the ellipsis to mark a
12869 parameter pack, but we have no way to report it,
12870 so abort the tentative parse. We will be exiting
12871 immediately anyway. */
12872 cp_parser_abort_tentative_parse (parser
);
12875 okay
= cp_parser_parse_definitely (parser
);
12878 unqualified_name
= error_mark_node
;
12879 else if (unqualified_name
12880 && (qualifying_scope
12881 || (TREE_CODE (unqualified_name
)
12882 != IDENTIFIER_NODE
)))
12884 cp_parser_error (parser
, "expected unqualified-id");
12885 unqualified_name
= error_mark_node
;
12889 if (!unqualified_name
)
12891 if (unqualified_name
== error_mark_node
)
12893 declarator
= cp_error_declarator
;
12894 pack_expansion_p
= false;
12895 declarator
->parameter_pack_p
= false;
12899 if (qualifying_scope
&& at_namespace_scope_p ()
12900 && TREE_CODE (qualifying_scope
) == TYPENAME_TYPE
)
12902 /* In the declaration of a member of a template class
12903 outside of the class itself, the SCOPE will sometimes
12904 be a TYPENAME_TYPE. For example, given:
12906 template <typename T>
12907 int S<T>::R::i = 3;
12909 the SCOPE will be a TYPENAME_TYPE for `S<T>::R'. In
12910 this context, we must resolve S<T>::R to an ordinary
12911 type, rather than a typename type.
12913 The reason we normally avoid resolving TYPENAME_TYPEs
12914 is that a specialization of `S' might render
12915 `S<T>::R' not a type. However, if `S' is
12916 specialized, then this `i' will not be used, so there
12917 is no harm in resolving the types here. */
12920 /* Resolve the TYPENAME_TYPE. */
12921 type
= resolve_typename_type (qualifying_scope
,
12922 /*only_current_p=*/false);
12923 /* If that failed, the declarator is invalid. */
12924 if (TREE_CODE (type
) == TYPENAME_TYPE
)
12925 error ("%<%T::%E%> is not a type",
12926 TYPE_CONTEXT (qualifying_scope
),
12927 TYPE_IDENTIFIER (qualifying_scope
));
12928 qualifying_scope
= type
;
12933 if (unqualified_name
)
12937 if (qualifying_scope
12938 && CLASS_TYPE_P (qualifying_scope
))
12939 class_type
= qualifying_scope
;
12941 class_type
= current_class_type
;
12943 if (TREE_CODE (unqualified_name
) == TYPE_DECL
)
12945 tree name_type
= TREE_TYPE (unqualified_name
);
12946 if (class_type
&& same_type_p (name_type
, class_type
))
12948 if (qualifying_scope
12949 && CLASSTYPE_USE_TEMPLATE (name_type
))
12951 error ("invalid use of constructor as a template");
12952 inform ("use %<%T::%D%> instead of %<%T::%D%> to "
12953 "name the constructor in a qualified name",
12955 DECL_NAME (TYPE_TI_TEMPLATE (class_type
)),
12956 class_type
, name_type
);
12957 declarator
= cp_error_declarator
;
12961 unqualified_name
= constructor_name (class_type
);
12965 /* We do not attempt to print the declarator
12966 here because we do not have enough
12967 information about its original syntactic
12969 cp_parser_error (parser
, "invalid declarator");
12970 declarator
= cp_error_declarator
;
12977 if (TREE_CODE (unqualified_name
) == BIT_NOT_EXPR
)
12978 sfk
= sfk_destructor
;
12979 else if (IDENTIFIER_TYPENAME_P (unqualified_name
))
12980 sfk
= sfk_conversion
;
12981 else if (/* There's no way to declare a constructor
12982 for an anonymous type, even if the type
12983 got a name for linkage purposes. */
12984 !TYPE_WAS_ANONYMOUS (class_type
)
12985 && constructor_name_p (unqualified_name
,
12988 unqualified_name
= constructor_name (class_type
);
12989 sfk
= sfk_constructor
;
12992 if (ctor_dtor_or_conv_p
&& sfk
!= sfk_none
)
12993 *ctor_dtor_or_conv_p
= -1;
12996 declarator
= make_id_declarator (qualifying_scope
,
12999 declarator
->id_loc
= token
->location
;
13000 declarator
->parameter_pack_p
= pack_expansion_p
;
13002 if (pack_expansion_p
)
13003 maybe_warn_variadic_templates ();
13005 handle_declarator
:;
13006 scope
= get_scope_of_declarator (declarator
);
13008 /* Any names that appear after the declarator-id for a
13009 member are looked up in the containing scope. */
13010 pushed_scope
= push_scope (scope
);
13011 parser
->in_declarator_p
= true;
13012 if ((ctor_dtor_or_conv_p
&& *ctor_dtor_or_conv_p
)
13013 || (declarator
&& declarator
->kind
== cdk_id
))
13014 /* Default args are only allowed on function
13016 parser
->default_arg_ok_p
= saved_default_arg_ok_p
;
13018 parser
->default_arg_ok_p
= false;
13027 /* For an abstract declarator, we might wind up with nothing at this
13028 point. That's an error; the declarator is not optional. */
13030 cp_parser_error (parser
, "expected declarator");
13032 /* If we entered a scope, we must exit it now. */
13034 pop_scope (pushed_scope
);
13036 parser
->default_arg_ok_p
= saved_default_arg_ok_p
;
13037 parser
->in_declarator_p
= saved_in_declarator_p
;
13042 /* Parse a ptr-operator.
13045 * cv-qualifier-seq [opt]
13047 :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
13052 & cv-qualifier-seq [opt]
13054 Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
13055 Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
13056 an rvalue reference. In the case of a pointer-to-member, *TYPE is
13057 filled in with the TYPE containing the member. *CV_QUALS is
13058 filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
13059 are no cv-qualifiers. Returns ERROR_MARK if an error occurred.
13060 Note that the tree codes returned by this function have nothing
13061 to do with the types of trees that will be eventually be created
13062 to represent the pointer or reference type being parsed. They are
13063 just constants with suggestive names. */
13064 static enum tree_code
13065 cp_parser_ptr_operator (cp_parser
* parser
,
13067 cp_cv_quals
*cv_quals
)
13069 enum tree_code code
= ERROR_MARK
;
13072 /* Assume that it's not a pointer-to-member. */
13074 /* And that there are no cv-qualifiers. */
13075 *cv_quals
= TYPE_UNQUALIFIED
;
13077 /* Peek at the next token. */
13078 token
= cp_lexer_peek_token (parser
->lexer
);
13080 /* If it's a `*', `&' or `&&' we have a pointer or reference. */
13081 if (token
->type
== CPP_MULT
)
13082 code
= INDIRECT_REF
;
13083 else if (token
->type
== CPP_AND
)
13085 else if ((cxx_dialect
!= cxx98
) &&
13086 token
->type
== CPP_AND_AND
) /* C++0x only */
13087 code
= NON_LVALUE_EXPR
;
13089 if (code
!= ERROR_MARK
)
13091 /* Consume the `*', `&' or `&&'. */
13092 cp_lexer_consume_token (parser
->lexer
);
13094 /* A `*' can be followed by a cv-qualifier-seq, and so can a
13095 `&', if we are allowing GNU extensions. (The only qualifier
13096 that can legally appear after `&' is `restrict', but that is
13097 enforced during semantic analysis. */
13098 if (code
== INDIRECT_REF
13099 || cp_parser_allow_gnu_extensions_p (parser
))
13100 *cv_quals
= cp_parser_cv_qualifier_seq_opt (parser
);
13104 /* Try the pointer-to-member case. */
13105 cp_parser_parse_tentatively (parser
);
13106 /* Look for the optional `::' operator. */
13107 cp_parser_global_scope_opt (parser
,
13108 /*current_scope_valid_p=*/false);
13109 /* Look for the nested-name specifier. */
13110 cp_parser_nested_name_specifier (parser
,
13111 /*typename_keyword_p=*/false,
13112 /*check_dependency_p=*/true,
13114 /*is_declaration=*/false);
13115 /* If we found it, and the next token is a `*', then we are
13116 indeed looking at a pointer-to-member operator. */
13117 if (!cp_parser_error_occurred (parser
)
13118 && cp_parser_require (parser
, CPP_MULT
, "%<*%>"))
13120 /* Indicate that the `*' operator was used. */
13121 code
= INDIRECT_REF
;
13123 if (TREE_CODE (parser
->scope
) == NAMESPACE_DECL
)
13124 error ("%qD is a namespace", parser
->scope
);
13127 /* The type of which the member is a member is given by the
13129 *type
= parser
->scope
;
13130 /* The next name will not be qualified. */
13131 parser
->scope
= NULL_TREE
;
13132 parser
->qualifying_scope
= NULL_TREE
;
13133 parser
->object_scope
= NULL_TREE
;
13134 /* Look for the optional cv-qualifier-seq. */
13135 *cv_quals
= cp_parser_cv_qualifier_seq_opt (parser
);
13138 /* If that didn't work we don't have a ptr-operator. */
13139 if (!cp_parser_parse_definitely (parser
))
13140 cp_parser_error (parser
, "expected ptr-operator");
13146 /* Parse an (optional) cv-qualifier-seq.
13149 cv-qualifier cv-qualifier-seq [opt]
13160 Returns a bitmask representing the cv-qualifiers. */
13163 cp_parser_cv_qualifier_seq_opt (cp_parser
* parser
)
13165 cp_cv_quals cv_quals
= TYPE_UNQUALIFIED
;
13170 cp_cv_quals cv_qualifier
;
13172 /* Peek at the next token. */
13173 token
= cp_lexer_peek_token (parser
->lexer
);
13174 /* See if it's a cv-qualifier. */
13175 switch (token
->keyword
)
13178 cv_qualifier
= TYPE_QUAL_CONST
;
13182 cv_qualifier
= TYPE_QUAL_VOLATILE
;
13186 cv_qualifier
= TYPE_QUAL_RESTRICT
;
13190 cv_qualifier
= TYPE_UNQUALIFIED
;
13197 if (cv_quals
& cv_qualifier
)
13199 error ("duplicate cv-qualifier");
13200 cp_lexer_purge_token (parser
->lexer
);
13204 cp_lexer_consume_token (parser
->lexer
);
13205 cv_quals
|= cv_qualifier
;
13212 /* Parse a declarator-id.
13216 :: [opt] nested-name-specifier [opt] type-name
13218 In the `id-expression' case, the value returned is as for
13219 cp_parser_id_expression if the id-expression was an unqualified-id.
13220 If the id-expression was a qualified-id, then a SCOPE_REF is
13221 returned. The first operand is the scope (either a NAMESPACE_DECL
13222 or TREE_TYPE), but the second is still just a representation of an
13226 cp_parser_declarator_id (cp_parser
* parser
, bool optional_p
)
13229 /* The expression must be an id-expression. Assume that qualified
13230 names are the names of types so that:
13233 int S<T>::R::i = 3;
13235 will work; we must treat `S<T>::R' as the name of a type.
13236 Similarly, assume that qualified names are templates, where
13240 int S<T>::R<T>::i = 3;
13243 id
= cp_parser_id_expression (parser
,
13244 /*template_keyword_p=*/false,
13245 /*check_dependency_p=*/false,
13246 /*template_p=*/NULL
,
13247 /*declarator_p=*/true,
13249 if (id
&& BASELINK_P (id
))
13250 id
= BASELINK_FUNCTIONS (id
);
13254 /* Parse a type-id.
13257 type-specifier-seq abstract-declarator [opt]
13259 Returns the TYPE specified. */
13262 cp_parser_type_id (cp_parser
* parser
)
13264 cp_decl_specifier_seq type_specifier_seq
;
13265 cp_declarator
*abstract_declarator
;
13267 /* Parse the type-specifier-seq. */
13268 cp_parser_type_specifier_seq (parser
, /*is_condition=*/false,
13269 &type_specifier_seq
);
13270 if (type_specifier_seq
.type
== error_mark_node
)
13271 return error_mark_node
;
13273 /* There might or might not be an abstract declarator. */
13274 cp_parser_parse_tentatively (parser
);
13275 /* Look for the declarator. */
13276 abstract_declarator
13277 = cp_parser_declarator (parser
, CP_PARSER_DECLARATOR_ABSTRACT
, NULL
,
13278 /*parenthesized_p=*/NULL
,
13279 /*member_p=*/false);
13280 /* Check to see if there really was a declarator. */
13281 if (!cp_parser_parse_definitely (parser
))
13282 abstract_declarator
= NULL
;
13284 return groktypename (&type_specifier_seq
, abstract_declarator
);
13287 /* Parse a type-specifier-seq.
13289 type-specifier-seq:
13290 type-specifier type-specifier-seq [opt]
13294 type-specifier-seq:
13295 attributes type-specifier-seq [opt]
13297 If IS_CONDITION is true, we are at the start of a "condition",
13298 e.g., we've just seen "if (".
13300 Sets *TYPE_SPECIFIER_SEQ to represent the sequence. */
13303 cp_parser_type_specifier_seq (cp_parser
* parser
,
13305 cp_decl_specifier_seq
*type_specifier_seq
)
13307 bool seen_type_specifier
= false;
13308 cp_parser_flags flags
= CP_PARSER_FLAGS_OPTIONAL
;
13310 /* Clear the TYPE_SPECIFIER_SEQ. */
13311 clear_decl_specs (type_specifier_seq
);
13313 /* Parse the type-specifiers and attributes. */
13316 tree type_specifier
;
13317 bool is_cv_qualifier
;
13319 /* Check for attributes first. */
13320 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_ATTRIBUTE
))
13322 type_specifier_seq
->attributes
=
13323 chainon (type_specifier_seq
->attributes
,
13324 cp_parser_attributes_opt (parser
));
13328 /* Look for the type-specifier. */
13329 type_specifier
= cp_parser_type_specifier (parser
,
13331 type_specifier_seq
,
13332 /*is_declaration=*/false,
13335 if (!type_specifier
)
13337 /* If the first type-specifier could not be found, this is not a
13338 type-specifier-seq at all. */
13339 if (!seen_type_specifier
)
13341 cp_parser_error (parser
, "expected type-specifier");
13342 type_specifier_seq
->type
= error_mark_node
;
13345 /* If subsequent type-specifiers could not be found, the
13346 type-specifier-seq is complete. */
13350 seen_type_specifier
= true;
13351 /* The standard says that a condition can be:
13353 type-specifier-seq declarator = assignment-expression
13360 we should treat the "S" as a declarator, not as a
13361 type-specifier. The standard doesn't say that explicitly for
13362 type-specifier-seq, but it does say that for
13363 decl-specifier-seq in an ordinary declaration. Perhaps it
13364 would be clearer just to allow a decl-specifier-seq here, and
13365 then add a semantic restriction that if any decl-specifiers
13366 that are not type-specifiers appear, the program is invalid. */
13367 if (is_condition
&& !is_cv_qualifier
)
13368 flags
|= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES
;
13371 cp_parser_check_decl_spec (type_specifier_seq
);
13374 /* Parse a parameter-declaration-clause.
13376 parameter-declaration-clause:
13377 parameter-declaration-list [opt] ... [opt]
13378 parameter-declaration-list , ...
13380 Returns a representation for the parameter declarations. A return
13381 value of NULL indicates a parameter-declaration-clause consisting
13382 only of an ellipsis. */
13384 static cp_parameter_declarator
*
13385 cp_parser_parameter_declaration_clause (cp_parser
* parser
)
13387 cp_parameter_declarator
*parameters
;
13392 /* Peek at the next token. */
13393 token
= cp_lexer_peek_token (parser
->lexer
);
13394 /* Check for trivial parameter-declaration-clauses. */
13395 if (token
->type
== CPP_ELLIPSIS
)
13397 /* Consume the `...' token. */
13398 cp_lexer_consume_token (parser
->lexer
);
13401 else if (token
->type
== CPP_CLOSE_PAREN
)
13402 /* There are no parameters. */
13404 #ifndef NO_IMPLICIT_EXTERN_C
13405 if (in_system_header
&& current_class_type
== NULL
13406 && current_lang_name
== lang_name_c
)
13410 return no_parameters
;
13412 /* Check for `(void)', too, which is a special case. */
13413 else if (token
->keyword
== RID_VOID
13414 && (cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
13415 == CPP_CLOSE_PAREN
))
13417 /* Consume the `void' token. */
13418 cp_lexer_consume_token (parser
->lexer
);
13419 /* There are no parameters. */
13420 return no_parameters
;
13423 /* Parse the parameter-declaration-list. */
13424 parameters
= cp_parser_parameter_declaration_list (parser
, &is_error
);
13425 /* If a parse error occurred while parsing the
13426 parameter-declaration-list, then the entire
13427 parameter-declaration-clause is erroneous. */
13431 /* Peek at the next token. */
13432 token
= cp_lexer_peek_token (parser
->lexer
);
13433 /* If it's a `,', the clause should terminate with an ellipsis. */
13434 if (token
->type
== CPP_COMMA
)
13436 /* Consume the `,'. */
13437 cp_lexer_consume_token (parser
->lexer
);
13438 /* Expect an ellipsis. */
13440 = (cp_parser_require (parser
, CPP_ELLIPSIS
, "%<...%>") != NULL
);
13442 /* It might also be `...' if the optional trailing `,' was
13444 else if (token
->type
== CPP_ELLIPSIS
)
13446 /* Consume the `...' token. */
13447 cp_lexer_consume_token (parser
->lexer
);
13448 /* And remember that we saw it. */
13452 ellipsis_p
= false;
13454 /* Finish the parameter list. */
13455 if (parameters
&& ellipsis_p
)
13456 parameters
->ellipsis_p
= true;
13461 /* Parse a parameter-declaration-list.
13463 parameter-declaration-list:
13464 parameter-declaration
13465 parameter-declaration-list , parameter-declaration
13467 Returns a representation of the parameter-declaration-list, as for
13468 cp_parser_parameter_declaration_clause. However, the
13469 `void_list_node' is never appended to the list. Upon return,
13470 *IS_ERROR will be true iff an error occurred. */
13472 static cp_parameter_declarator
*
13473 cp_parser_parameter_declaration_list (cp_parser
* parser
, bool *is_error
)
13475 cp_parameter_declarator
*parameters
= NULL
;
13476 cp_parameter_declarator
**tail
= ¶meters
;
13477 bool saved_in_unbraced_linkage_specification_p
;
13479 /* Assume all will go well. */
13481 /* The special considerations that apply to a function within an
13482 unbraced linkage specifications do not apply to the parameters
13483 to the function. */
13484 saved_in_unbraced_linkage_specification_p
13485 = parser
->in_unbraced_linkage_specification_p
;
13486 parser
->in_unbraced_linkage_specification_p
= false;
13488 /* Look for more parameters. */
13491 cp_parameter_declarator
*parameter
;
13492 bool parenthesized_p
;
13493 /* Parse the parameter. */
13495 = cp_parser_parameter_declaration (parser
,
13496 /*template_parm_p=*/false,
13499 /* If a parse error occurred parsing the parameter declaration,
13500 then the entire parameter-declaration-list is erroneous. */
13507 /* Add the new parameter to the list. */
13509 tail
= ¶meter
->next
;
13511 /* Peek at the next token. */
13512 if (cp_lexer_next_token_is (parser
->lexer
, CPP_CLOSE_PAREN
)
13513 || cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
)
13514 /* These are for Objective-C++ */
13515 || cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
)
13516 || cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_BRACE
))
13517 /* The parameter-declaration-list is complete. */
13519 else if (cp_lexer_next_token_is (parser
->lexer
, CPP_COMMA
))
13523 /* Peek at the next token. */
13524 token
= cp_lexer_peek_nth_token (parser
->lexer
, 2);
13525 /* If it's an ellipsis, then the list is complete. */
13526 if (token
->type
== CPP_ELLIPSIS
)
13528 /* Otherwise, there must be more parameters. Consume the
13530 cp_lexer_consume_token (parser
->lexer
);
13531 /* When parsing something like:
13533 int i(float f, double d)
13535 we can tell after seeing the declaration for "f" that we
13536 are not looking at an initialization of a variable "i",
13537 but rather at the declaration of a function "i".
13539 Due to the fact that the parsing of template arguments
13540 (as specified to a template-id) requires backtracking we
13541 cannot use this technique when inside a template argument
13543 if (!parser
->in_template_argument_list_p
13544 && !parser
->in_type_id_in_expr_p
13545 && cp_parser_uncommitted_to_tentative_parse_p (parser
)
13546 /* However, a parameter-declaration of the form
13547 "foat(f)" (which is a valid declaration of a
13548 parameter "f") can also be interpreted as an
13549 expression (the conversion of "f" to "float"). */
13550 && !parenthesized_p
)
13551 cp_parser_commit_to_tentative_parse (parser
);
13555 cp_parser_error (parser
, "expected %<,%> or %<...%>");
13556 if (!cp_parser_uncommitted_to_tentative_parse_p (parser
))
13557 cp_parser_skip_to_closing_parenthesis (parser
,
13558 /*recovering=*/true,
13559 /*or_comma=*/false,
13560 /*consume_paren=*/false);
13565 parser
->in_unbraced_linkage_specification_p
13566 = saved_in_unbraced_linkage_specification_p
;
13571 /* Parse a parameter declaration.
13573 parameter-declaration:
13574 decl-specifier-seq ... [opt] declarator
13575 decl-specifier-seq declarator = assignment-expression
13576 decl-specifier-seq ... [opt] abstract-declarator [opt]
13577 decl-specifier-seq abstract-declarator [opt] = assignment-expression
13579 If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
13580 declares a template parameter. (In that case, a non-nested `>'
13581 token encountered during the parsing of the assignment-expression
13582 is not interpreted as a greater-than operator.)
13584 Returns a representation of the parameter, or NULL if an error
13585 occurs. If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
13586 true iff the declarator is of the form "(p)". */
13588 static cp_parameter_declarator
*
13589 cp_parser_parameter_declaration (cp_parser
*parser
,
13590 bool template_parm_p
,
13591 bool *parenthesized_p
)
13593 int declares_class_or_enum
;
13594 bool greater_than_is_operator_p
;
13595 cp_decl_specifier_seq decl_specifiers
;
13596 cp_declarator
*declarator
;
13597 tree default_argument
;
13599 const char *saved_message
;
13601 /* In a template parameter, `>' is not an operator.
13605 When parsing a default template-argument for a non-type
13606 template-parameter, the first non-nested `>' is taken as the end
13607 of the template parameter-list rather than a greater-than
13609 greater_than_is_operator_p
= !template_parm_p
;
13611 /* Type definitions may not appear in parameter types. */
13612 saved_message
= parser
->type_definition_forbidden_message
;
13613 parser
->type_definition_forbidden_message
13614 = "types may not be defined in parameter types";
13616 /* Parse the declaration-specifiers. */
13617 cp_parser_decl_specifier_seq (parser
,
13618 CP_PARSER_FLAGS_NONE
,
13620 &declares_class_or_enum
);
13621 /* If an error occurred, there's no reason to attempt to parse the
13622 rest of the declaration. */
13623 if (cp_parser_error_occurred (parser
))
13625 parser
->type_definition_forbidden_message
= saved_message
;
13629 /* Peek at the next token. */
13630 token
= cp_lexer_peek_token (parser
->lexer
);
13632 /* If the next token is a `)', `,', `=', `>', or `...', then there
13633 is no declarator. However, when variadic templates are enabled,
13634 there may be a declarator following `...'. */
13635 if (token
->type
== CPP_CLOSE_PAREN
13636 || token
->type
== CPP_COMMA
13637 || token
->type
== CPP_EQ
13638 || token
->type
== CPP_GREATER
)
13641 if (parenthesized_p
)
13642 *parenthesized_p
= false;
13644 /* Otherwise, there should be a declarator. */
13647 bool saved_default_arg_ok_p
= parser
->default_arg_ok_p
;
13648 parser
->default_arg_ok_p
= false;
13650 /* After seeing a decl-specifier-seq, if the next token is not a
13651 "(", there is no possibility that the code is a valid
13652 expression. Therefore, if parsing tentatively, we commit at
13654 if (!parser
->in_template_argument_list_p
13655 /* In an expression context, having seen:
13659 we cannot be sure whether we are looking at a
13660 function-type (taking a "char" as a parameter) or a cast
13661 of some object of type "char" to "int". */
13662 && !parser
->in_type_id_in_expr_p
13663 && cp_parser_uncommitted_to_tentative_parse_p (parser
)
13664 && cp_lexer_next_token_is_not (parser
->lexer
, CPP_OPEN_PAREN
))
13665 cp_parser_commit_to_tentative_parse (parser
);
13666 /* Parse the declarator. */
13667 declarator
= cp_parser_declarator (parser
,
13668 CP_PARSER_DECLARATOR_EITHER
,
13669 /*ctor_dtor_or_conv_p=*/NULL
,
13671 /*member_p=*/false);
13672 parser
->default_arg_ok_p
= saved_default_arg_ok_p
;
13673 /* After the declarator, allow more attributes. */
13674 decl_specifiers
.attributes
13675 = chainon (decl_specifiers
.attributes
,
13676 cp_parser_attributes_opt (parser
));
13679 /* If the next token is an ellipsis, and we have not seen a
13680 declarator name, and the type of the declarator contains parameter
13681 packs but it is not a TYPE_PACK_EXPANSION, then we actually have
13682 a parameter pack expansion expression. Otherwise, leave the
13683 ellipsis for a C-style variadic function. */
13684 token
= cp_lexer_peek_token (parser
->lexer
);
13685 if (cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
13687 tree type
= decl_specifiers
.type
;
13689 if (type
&& DECL_P (type
))
13690 type
= TREE_TYPE (type
);
13693 && TREE_CODE (type
) != TYPE_PACK_EXPANSION
13694 && declarator_can_be_parameter_pack (declarator
)
13695 && (!declarator
|| !declarator
->parameter_pack_p
)
13696 && uses_parameter_packs (type
))
13698 /* Consume the `...'. */
13699 cp_lexer_consume_token (parser
->lexer
);
13700 maybe_warn_variadic_templates ();
13702 /* Build a pack expansion type */
13704 declarator
->parameter_pack_p
= true;
13706 decl_specifiers
.type
= make_pack_expansion (type
);
13710 /* The restriction on defining new types applies only to the type
13711 of the parameter, not to the default argument. */
13712 parser
->type_definition_forbidden_message
= saved_message
;
13714 /* If the next token is `=', then process a default argument. */
13715 if (cp_lexer_next_token_is (parser
->lexer
, CPP_EQ
))
13717 /* Consume the `='. */
13718 cp_lexer_consume_token (parser
->lexer
);
13720 /* If we are defining a class, then the tokens that make up the
13721 default argument must be saved and processed later. */
13722 if (!template_parm_p
&& at_class_scope_p ()
13723 && TYPE_BEING_DEFINED (current_class_type
))
13725 unsigned depth
= 0;
13726 int maybe_template_id
= 0;
13727 cp_token
*first_token
;
13730 /* Add tokens until we have processed the entire default
13731 argument. We add the range [first_token, token). */
13732 first_token
= cp_lexer_peek_token (parser
->lexer
);
13737 /* Peek at the next token. */
13738 token
= cp_lexer_peek_token (parser
->lexer
);
13739 /* What we do depends on what token we have. */
13740 switch (token
->type
)
13742 /* In valid code, a default argument must be
13743 immediately followed by a `,' `)', or `...'. */
13745 if (depth
== 0 && maybe_template_id
)
13747 /* If we've seen a '<', we might be in a
13748 template-argument-list. Until Core issue 325 is
13749 resolved, we don't know how this situation ought
13750 to be handled, so try to DTRT. We check whether
13751 what comes after the comma is a valid parameter
13752 declaration list. If it is, then the comma ends
13753 the default argument; otherwise the default
13754 argument continues. */
13755 bool error
= false;
13757 /* Set ITALP so cp_parser_parameter_declaration_list
13758 doesn't decide to commit to this parse. */
13759 bool saved_italp
= parser
->in_template_argument_list_p
;
13760 parser
->in_template_argument_list_p
= true;
13762 cp_parser_parse_tentatively (parser
);
13763 cp_lexer_consume_token (parser
->lexer
);
13764 cp_parser_parameter_declaration_list (parser
, &error
);
13765 if (!cp_parser_error_occurred (parser
) && !error
)
13767 cp_parser_abort_tentative_parse (parser
);
13769 parser
->in_template_argument_list_p
= saved_italp
;
13772 case CPP_CLOSE_PAREN
:
13774 /* If we run into a non-nested `;', `}', or `]',
13775 then the code is invalid -- but the default
13776 argument is certainly over. */
13777 case CPP_SEMICOLON
:
13778 case CPP_CLOSE_BRACE
:
13779 case CPP_CLOSE_SQUARE
:
13782 /* Update DEPTH, if necessary. */
13783 else if (token
->type
== CPP_CLOSE_PAREN
13784 || token
->type
== CPP_CLOSE_BRACE
13785 || token
->type
== CPP_CLOSE_SQUARE
)
13789 case CPP_OPEN_PAREN
:
13790 case CPP_OPEN_SQUARE
:
13791 case CPP_OPEN_BRACE
:
13797 /* This might be the comparison operator, or it might
13798 start a template argument list. */
13799 ++maybe_template_id
;
13803 if (cxx_dialect
== cxx98
)
13805 /* Fall through for C++0x, which treats the `>>'
13806 operator like two `>' tokens in certain
13812 /* This might be an operator, or it might close a
13813 template argument list. But if a previous '<'
13814 started a template argument list, this will have
13815 closed it, so we can't be in one anymore. */
13816 maybe_template_id
-= 1 + (token
->type
== CPP_RSHIFT
);
13817 if (maybe_template_id
< 0)
13818 maybe_template_id
= 0;
13822 /* If we run out of tokens, issue an error message. */
13824 case CPP_PRAGMA_EOL
:
13825 error ("file ends in default argument");
13831 /* In these cases, we should look for template-ids.
13832 For example, if the default argument is
13833 `X<int, double>()', we need to do name lookup to
13834 figure out whether or not `X' is a template; if
13835 so, the `,' does not end the default argument.
13837 That is not yet done. */
13844 /* If we've reached the end, stop. */
13848 /* Add the token to the token block. */
13849 token
= cp_lexer_consume_token (parser
->lexer
);
13852 /* Create a DEFAULT_ARG to represent the unparsed default
13854 default_argument
= make_node (DEFAULT_ARG
);
13855 DEFARG_TOKENS (default_argument
)
13856 = cp_token_cache_new (first_token
, token
);
13857 DEFARG_INSTANTIATIONS (default_argument
) = NULL
;
13859 /* Outside of a class definition, we can just parse the
13860 assignment-expression. */
13863 = cp_parser_default_argument (parser
, template_parm_p
);
13865 if (!parser
->default_arg_ok_p
)
13867 if (!flag_pedantic_errors
)
13868 warning (0, "deprecated use of default argument for parameter of non-function");
13871 error ("default arguments are only permitted for function parameters");
13872 default_argument
= NULL_TREE
;
13875 else if ((declarator
&& declarator
->parameter_pack_p
)
13876 || (decl_specifiers
.type
13877 && PACK_EXPANSION_P (decl_specifiers
.type
)))
13879 const char* kind
= template_parm_p
? "template " : "";
13881 /* Find the name of the parameter pack. */
13882 cp_declarator
*id_declarator
= declarator
;
13883 while (id_declarator
&& id_declarator
->kind
!= cdk_id
)
13884 id_declarator
= id_declarator
->declarator
;
13886 if (id_declarator
&& id_declarator
->kind
== cdk_id
)
13887 error ("%sparameter pack %qD cannot have a default argument",
13888 kind
, id_declarator
->u
.id
.unqualified_name
);
13890 error ("%sparameter pack cannot have a default argument",
13893 default_argument
= NULL_TREE
;
13897 default_argument
= NULL_TREE
;
13899 return make_parameter_declarator (&decl_specifiers
,
13904 /* Parse a default argument and return it.
13906 TEMPLATE_PARM_P is true if this is a default argument for a
13907 non-type template parameter. */
13909 cp_parser_default_argument (cp_parser
*parser
, bool template_parm_p
)
13911 tree default_argument
= NULL_TREE
;
13912 bool saved_greater_than_is_operator_p
;
13913 bool saved_local_variables_forbidden_p
;
13915 /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
13917 saved_greater_than_is_operator_p
= parser
->greater_than_is_operator_p
;
13918 parser
->greater_than_is_operator_p
= !template_parm_p
;
13919 /* Local variable names (and the `this' keyword) may not
13920 appear in a default argument. */
13921 saved_local_variables_forbidden_p
= parser
->local_variables_forbidden_p
;
13922 parser
->local_variables_forbidden_p
= true;
13923 /* The default argument expression may cause implicitly
13924 defined member functions to be synthesized, which will
13925 result in garbage collection. We must treat this
13926 situation as if we were within the body of function so as
13927 to avoid collecting live data on the stack. */
13929 /* Parse the assignment-expression. */
13930 if (template_parm_p
)
13931 push_deferring_access_checks (dk_no_deferred
);
13933 = cp_parser_assignment_expression (parser
, /*cast_p=*/false);
13934 if (template_parm_p
)
13935 pop_deferring_access_checks ();
13936 /* Restore saved state. */
13938 parser
->greater_than_is_operator_p
= saved_greater_than_is_operator_p
;
13939 parser
->local_variables_forbidden_p
= saved_local_variables_forbidden_p
;
13941 return default_argument
;
13944 /* Parse a function-body.
13947 compound_statement */
13950 cp_parser_function_body (cp_parser
*parser
)
13952 cp_parser_compound_statement (parser
, NULL
, false);
13955 /* Parse a ctor-initializer-opt followed by a function-body. Return
13956 true if a ctor-initializer was present. */
13959 cp_parser_ctor_initializer_opt_and_function_body (cp_parser
*parser
)
13962 bool ctor_initializer_p
;
13964 /* Begin the function body. */
13965 body
= begin_function_body ();
13966 /* Parse the optional ctor-initializer. */
13967 ctor_initializer_p
= cp_parser_ctor_initializer_opt (parser
);
13968 /* Parse the function-body. */
13969 cp_parser_function_body (parser
);
13970 /* Finish the function body. */
13971 finish_function_body (body
);
13973 return ctor_initializer_p
;
13976 /* Parse an initializer.
13979 = initializer-clause
13980 ( expression-list )
13982 Returns an expression representing the initializer. If no
13983 initializer is present, NULL_TREE is returned.
13985 *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
13986 production is used, and zero otherwise. *IS_PARENTHESIZED_INIT is
13987 set to FALSE if there is no initializer present. If there is an
13988 initializer, and it is not a constant-expression, *NON_CONSTANT_P
13989 is set to true; otherwise it is set to false. */
13992 cp_parser_initializer (cp_parser
* parser
, bool* is_parenthesized_init
,
13993 bool* non_constant_p
)
13998 /* Peek at the next token. */
13999 token
= cp_lexer_peek_token (parser
->lexer
);
14001 /* Let our caller know whether or not this initializer was
14003 *is_parenthesized_init
= (token
->type
== CPP_OPEN_PAREN
);
14004 /* Assume that the initializer is constant. */
14005 *non_constant_p
= false;
14007 if (token
->type
== CPP_EQ
)
14009 /* Consume the `='. */
14010 cp_lexer_consume_token (parser
->lexer
);
14011 /* Parse the initializer-clause. */
14012 init
= cp_parser_initializer_clause (parser
, non_constant_p
);
14014 else if (token
->type
== CPP_OPEN_PAREN
)
14015 init
= cp_parser_parenthesized_expression_list (parser
, false,
14017 /*allow_expansion_p=*/true,
14021 /* Anything else is an error. */
14022 cp_parser_error (parser
, "expected initializer");
14023 init
= error_mark_node
;
14029 /* Parse an initializer-clause.
14031 initializer-clause:
14032 assignment-expression
14033 { initializer-list , [opt] }
14036 Returns an expression representing the initializer.
14038 If the `assignment-expression' production is used the value
14039 returned is simply a representation for the expression.
14041 Otherwise, a CONSTRUCTOR is returned. The CONSTRUCTOR_ELTS will be
14042 the elements of the initializer-list (or NULL, if the last
14043 production is used). The TREE_TYPE for the CONSTRUCTOR will be
14044 NULL_TREE. There is no way to detect whether or not the optional
14045 trailing `,' was provided. NON_CONSTANT_P is as for
14046 cp_parser_initializer. */
14049 cp_parser_initializer_clause (cp_parser
* parser
, bool* non_constant_p
)
14053 /* Assume the expression is constant. */
14054 *non_constant_p
= false;
14056 /* If it is not a `{', then we are looking at an
14057 assignment-expression. */
14058 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_OPEN_BRACE
))
14061 = cp_parser_constant_expression (parser
,
14062 /*allow_non_constant_p=*/true,
14064 if (!*non_constant_p
)
14065 initializer
= fold_non_dependent_expr (initializer
);
14069 /* Consume the `{' token. */
14070 cp_lexer_consume_token (parser
->lexer
);
14071 /* Create a CONSTRUCTOR to represent the braced-initializer. */
14072 initializer
= make_node (CONSTRUCTOR
);
14073 /* If it's not a `}', then there is a non-trivial initializer. */
14074 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_CLOSE_BRACE
))
14076 /* Parse the initializer list. */
14077 CONSTRUCTOR_ELTS (initializer
)
14078 = cp_parser_initializer_list (parser
, non_constant_p
);
14079 /* A trailing `,' token is allowed. */
14080 if (cp_lexer_next_token_is (parser
->lexer
, CPP_COMMA
))
14081 cp_lexer_consume_token (parser
->lexer
);
14083 /* Now, there should be a trailing `}'. */
14084 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
14087 return initializer
;
14090 /* Parse an initializer-list.
14093 initializer-clause ... [opt]
14094 initializer-list , initializer-clause ... [opt]
14099 identifier : initializer-clause
14100 initializer-list, identifier : initializer-clause
14102 Returns a VEC of constructor_elt. The VALUE of each elt is an expression
14103 for the initializer. If the INDEX of the elt is non-NULL, it is the
14104 IDENTIFIER_NODE naming the field to initialize. NON_CONSTANT_P is
14105 as for cp_parser_initializer. */
14107 static VEC(constructor_elt
,gc
) *
14108 cp_parser_initializer_list (cp_parser
* parser
, bool* non_constant_p
)
14110 VEC(constructor_elt
,gc
) *v
= NULL
;
14112 /* Assume all of the expressions are constant. */
14113 *non_constant_p
= false;
14115 /* Parse the rest of the list. */
14121 bool clause_non_constant_p
;
14123 /* If the next token is an identifier and the following one is a
14124 colon, we are looking at the GNU designated-initializer
14126 if (cp_parser_allow_gnu_extensions_p (parser
)
14127 && cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
)
14128 && cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
== CPP_COLON
)
14130 /* Warn the user that they are using an extension. */
14132 pedwarn ("ISO C++ does not allow designated initializers");
14133 /* Consume the identifier. */
14134 identifier
= cp_lexer_consume_token (parser
->lexer
)->u
.value
;
14135 /* Consume the `:'. */
14136 cp_lexer_consume_token (parser
->lexer
);
14139 identifier
= NULL_TREE
;
14141 /* Parse the initializer. */
14142 initializer
= cp_parser_initializer_clause (parser
,
14143 &clause_non_constant_p
);
14144 /* If any clause is non-constant, so is the entire initializer. */
14145 if (clause_non_constant_p
)
14146 *non_constant_p
= true;
14148 /* If we have an ellipsis, this is an initializer pack
14150 if (cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
14152 /* Consume the `...'. */
14153 cp_lexer_consume_token (parser
->lexer
);
14155 /* Turn the initializer into an initializer expansion. */
14156 initializer
= make_pack_expansion (initializer
);
14159 /* Add it to the vector. */
14160 CONSTRUCTOR_APPEND_ELT(v
, identifier
, initializer
);
14162 /* If the next token is not a comma, we have reached the end of
14164 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
14167 /* Peek at the next token. */
14168 token
= cp_lexer_peek_nth_token (parser
->lexer
, 2);
14169 /* If the next token is a `}', then we're still done. An
14170 initializer-clause can have a trailing `,' after the
14171 initializer-list and before the closing `}'. */
14172 if (token
->type
== CPP_CLOSE_BRACE
)
14175 /* Consume the `,' token. */
14176 cp_lexer_consume_token (parser
->lexer
);
14182 /* Classes [gram.class] */
14184 /* Parse a class-name.
14190 TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
14191 to indicate that names looked up in dependent types should be
14192 assumed to be types. TEMPLATE_KEYWORD_P is true iff the `template'
14193 keyword has been used to indicate that the name that appears next
14194 is a template. TAG_TYPE indicates the explicit tag given before
14195 the type name, if any. If CHECK_DEPENDENCY_P is FALSE, names are
14196 looked up in dependent scopes. If CLASS_HEAD_P is TRUE, this class
14197 is the class being defined in a class-head.
14199 Returns the TYPE_DECL representing the class. */
14202 cp_parser_class_name (cp_parser
*parser
,
14203 bool typename_keyword_p
,
14204 bool template_keyword_p
,
14205 enum tag_types tag_type
,
14206 bool check_dependency_p
,
14208 bool is_declaration
)
14215 /* All class-names start with an identifier. */
14216 token
= cp_lexer_peek_token (parser
->lexer
);
14217 if (token
->type
!= CPP_NAME
&& token
->type
!= CPP_TEMPLATE_ID
)
14219 cp_parser_error (parser
, "expected class-name");
14220 return error_mark_node
;
14223 /* PARSER->SCOPE can be cleared when parsing the template-arguments
14224 to a template-id, so we save it here. */
14225 scope
= parser
->scope
;
14226 if (scope
== error_mark_node
)
14227 return error_mark_node
;
14229 /* Any name names a type if we're following the `typename' keyword
14230 in a qualified name where the enclosing scope is type-dependent. */
14231 typename_p
= (typename_keyword_p
&& scope
&& TYPE_P (scope
)
14232 && dependent_type_p (scope
));
14233 /* Handle the common case (an identifier, but not a template-id)
14235 if (token
->type
== CPP_NAME
14236 && !cp_parser_nth_token_starts_template_argument_list_p (parser
, 2))
14238 cp_token
*identifier_token
;
14242 /* Look for the identifier. */
14243 identifier_token
= cp_lexer_peek_token (parser
->lexer
);
14244 ambiguous_p
= identifier_token
->ambiguous_p
;
14245 identifier
= cp_parser_identifier (parser
);
14246 /* If the next token isn't an identifier, we are certainly not
14247 looking at a class-name. */
14248 if (identifier
== error_mark_node
)
14249 decl
= error_mark_node
;
14250 /* If we know this is a type-name, there's no need to look it
14252 else if (typename_p
)
14256 tree ambiguous_decls
;
14257 /* If we already know that this lookup is ambiguous, then
14258 we've already issued an error message; there's no reason
14262 cp_parser_simulate_error (parser
);
14263 return error_mark_node
;
14265 /* If the next token is a `::', then the name must be a type
14268 [basic.lookup.qual]
14270 During the lookup for a name preceding the :: scope
14271 resolution operator, object, function, and enumerator
14272 names are ignored. */
14273 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SCOPE
))
14274 tag_type
= typename_type
;
14275 /* Look up the name. */
14276 decl
= cp_parser_lookup_name (parser
, identifier
,
14278 /*is_template=*/false,
14279 /*is_namespace=*/false,
14280 check_dependency_p
,
14282 if (ambiguous_decls
)
14284 error ("reference to %qD is ambiguous", identifier
);
14285 print_candidates (ambiguous_decls
);
14286 if (cp_parser_parsing_tentatively (parser
))
14288 identifier_token
->ambiguous_p
= true;
14289 cp_parser_simulate_error (parser
);
14291 return error_mark_node
;
14297 /* Try a template-id. */
14298 decl
= cp_parser_template_id (parser
, template_keyword_p
,
14299 check_dependency_p
,
14301 if (decl
== error_mark_node
)
14302 return error_mark_node
;
14305 decl
= cp_parser_maybe_treat_template_as_class (decl
, class_head_p
);
14307 /* If this is a typename, create a TYPENAME_TYPE. */
14308 if (typename_p
&& decl
!= error_mark_node
)
14310 decl
= make_typename_type (scope
, decl
, typename_type
,
14311 /*complain=*/tf_error
);
14312 if (decl
!= error_mark_node
)
14313 decl
= TYPE_NAME (decl
);
14316 /* Check to see that it is really the name of a class. */
14317 if (TREE_CODE (decl
) == TEMPLATE_ID_EXPR
14318 && TREE_CODE (TREE_OPERAND (decl
, 0)) == IDENTIFIER_NODE
14319 && cp_lexer_next_token_is (parser
->lexer
, CPP_SCOPE
))
14320 /* Situations like this:
14322 template <typename T> struct A {
14323 typename T::template X<int>::I i;
14326 are problematic. Is `T::template X<int>' a class-name? The
14327 standard does not seem to be definitive, but there is no other
14328 valid interpretation of the following `::'. Therefore, those
14329 names are considered class-names. */
14331 decl
= make_typename_type (scope
, decl
, tag_type
, tf_error
);
14332 if (decl
!= error_mark_node
)
14333 decl
= TYPE_NAME (decl
);
14335 else if (TREE_CODE (decl
) != TYPE_DECL
14336 || TREE_TYPE (decl
) == error_mark_node
14337 || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl
)))
14338 decl
= error_mark_node
;
14340 if (decl
== error_mark_node
)
14341 cp_parser_error (parser
, "expected class-name");
14346 /* Parse a class-specifier.
14349 class-head { member-specification [opt] }
14351 Returns the TREE_TYPE representing the class. */
14354 cp_parser_class_specifier (cp_parser
* parser
)
14358 tree attributes
= NULL_TREE
;
14359 int has_trailing_semicolon
;
14360 bool nested_name_specifier_p
;
14361 unsigned saved_num_template_parameter_lists
;
14362 bool saved_in_function_body
;
14363 tree old_scope
= NULL_TREE
;
14364 tree scope
= NULL_TREE
;
14367 push_deferring_access_checks (dk_no_deferred
);
14369 /* Parse the class-head. */
14370 type
= cp_parser_class_head (parser
,
14371 &nested_name_specifier_p
,
14374 /* If the class-head was a semantic disaster, skip the entire body
14378 cp_parser_skip_to_end_of_block_or_statement (parser
);
14379 pop_deferring_access_checks ();
14380 return error_mark_node
;
14383 /* Look for the `{'. */
14384 if (!cp_parser_require (parser
, CPP_OPEN_BRACE
, "%<{%>"))
14386 pop_deferring_access_checks ();
14387 return error_mark_node
;
14390 /* Process the base classes. If they're invalid, skip the
14391 entire class body. */
14392 if (!xref_basetypes (type
, bases
))
14394 /* Consuming the closing brace yields better error messages
14396 if (cp_parser_skip_to_closing_brace (parser
))
14397 cp_lexer_consume_token (parser
->lexer
);
14398 pop_deferring_access_checks ();
14399 return error_mark_node
;
14402 /* Issue an error message if type-definitions are forbidden here. */
14403 cp_parser_check_type_definition (parser
);
14404 /* Remember that we are defining one more class. */
14405 ++parser
->num_classes_being_defined
;
14406 /* Inside the class, surrounding template-parameter-lists do not
14408 saved_num_template_parameter_lists
14409 = parser
->num_template_parameter_lists
;
14410 parser
->num_template_parameter_lists
= 0;
14411 /* We are not in a function body. */
14412 saved_in_function_body
= parser
->in_function_body
;
14413 parser
->in_function_body
= false;
14415 /* Start the class. */
14416 if (nested_name_specifier_p
)
14418 scope
= CP_DECL_CONTEXT (TYPE_MAIN_DECL (type
));
14419 old_scope
= push_inner_scope (scope
);
14421 type
= begin_class_definition (type
, attributes
);
14423 if (type
== error_mark_node
)
14424 /* If the type is erroneous, skip the entire body of the class. */
14425 cp_parser_skip_to_closing_brace (parser
);
14427 /* Parse the member-specification. */
14428 cp_parser_member_specification_opt (parser
);
14430 /* Look for the trailing `}'. */
14431 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
14432 /* We get better error messages by noticing a common problem: a
14433 missing trailing `;'. */
14434 token
= cp_lexer_peek_token (parser
->lexer
);
14435 has_trailing_semicolon
= (token
->type
== CPP_SEMICOLON
);
14436 /* Look for trailing attributes to apply to this class. */
14437 if (cp_parser_allow_gnu_extensions_p (parser
))
14438 attributes
= cp_parser_attributes_opt (parser
);
14439 if (type
!= error_mark_node
)
14440 type
= finish_struct (type
, attributes
);
14441 if (nested_name_specifier_p
)
14442 pop_inner_scope (old_scope
, scope
);
14443 /* If this class is not itself within the scope of another class,
14444 then we need to parse the bodies of all of the queued function
14445 definitions. Note that the queued functions defined in a class
14446 are not always processed immediately following the
14447 class-specifier for that class. Consider:
14450 struct B { void f() { sizeof (A); } };
14453 If `f' were processed before the processing of `A' were
14454 completed, there would be no way to compute the size of `A'.
14455 Note that the nesting we are interested in here is lexical --
14456 not the semantic nesting given by TYPE_CONTEXT. In particular,
14459 struct A { struct B; };
14460 struct A::B { void f() { } };
14462 there is no need to delay the parsing of `A::B::f'. */
14463 if (--parser
->num_classes_being_defined
== 0)
14467 tree class_type
= NULL_TREE
;
14468 tree pushed_scope
= NULL_TREE
;
14470 /* In a first pass, parse default arguments to the functions.
14471 Then, in a second pass, parse the bodies of the functions.
14472 This two-phased approach handles cases like:
14480 for (TREE_PURPOSE (parser
->unparsed_functions_queues
)
14481 = nreverse (TREE_PURPOSE (parser
->unparsed_functions_queues
));
14482 (queue_entry
= TREE_PURPOSE (parser
->unparsed_functions_queues
));
14483 TREE_PURPOSE (parser
->unparsed_functions_queues
)
14484 = TREE_CHAIN (TREE_PURPOSE (parser
->unparsed_functions_queues
)))
14486 fn
= TREE_VALUE (queue_entry
);
14487 /* If there are default arguments that have not yet been processed,
14488 take care of them now. */
14489 if (class_type
!= TREE_PURPOSE (queue_entry
))
14492 pop_scope (pushed_scope
);
14493 class_type
= TREE_PURPOSE (queue_entry
);
14494 pushed_scope
= push_scope (class_type
);
14496 /* Make sure that any template parameters are in scope. */
14497 maybe_begin_member_template_processing (fn
);
14498 /* Parse the default argument expressions. */
14499 cp_parser_late_parsing_default_args (parser
, fn
);
14500 /* Remove any template parameters from the symbol table. */
14501 maybe_end_member_template_processing ();
14504 pop_scope (pushed_scope
);
14505 /* Now parse the body of the functions. */
14506 for (TREE_VALUE (parser
->unparsed_functions_queues
)
14507 = nreverse (TREE_VALUE (parser
->unparsed_functions_queues
));
14508 (queue_entry
= TREE_VALUE (parser
->unparsed_functions_queues
));
14509 TREE_VALUE (parser
->unparsed_functions_queues
)
14510 = TREE_CHAIN (TREE_VALUE (parser
->unparsed_functions_queues
)))
14512 /* Figure out which function we need to process. */
14513 fn
= TREE_VALUE (queue_entry
);
14514 /* Parse the function. */
14515 cp_parser_late_parsing_for_member (parser
, fn
);
14519 /* Put back any saved access checks. */
14520 pop_deferring_access_checks ();
14522 /* Restore saved state. */
14523 parser
->in_function_body
= saved_in_function_body
;
14524 parser
->num_template_parameter_lists
14525 = saved_num_template_parameter_lists
;
14530 /* Parse a class-head.
14533 class-key identifier [opt] base-clause [opt]
14534 class-key nested-name-specifier identifier base-clause [opt]
14535 class-key nested-name-specifier [opt] template-id
14539 class-key attributes identifier [opt] base-clause [opt]
14540 class-key attributes nested-name-specifier identifier base-clause [opt]
14541 class-key attributes nested-name-specifier [opt] template-id
14544 Upon return BASES is initialized to the list of base classes (or
14545 NULL, if there are none) in the same form returned by
14546 cp_parser_base_clause.
14548 Returns the TYPE of the indicated class. Sets
14549 *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
14550 involving a nested-name-specifier was used, and FALSE otherwise.
14552 Returns error_mark_node if this is not a class-head.
14554 Returns NULL_TREE if the class-head is syntactically valid, but
14555 semantically invalid in a way that means we should skip the entire
14556 body of the class. */
14559 cp_parser_class_head (cp_parser
* parser
,
14560 bool* nested_name_specifier_p
,
14561 tree
*attributes_p
,
14564 tree nested_name_specifier
;
14565 enum tag_types class_key
;
14566 tree id
= NULL_TREE
;
14567 tree type
= NULL_TREE
;
14569 bool template_id_p
= false;
14570 bool qualified_p
= false;
14571 bool invalid_nested_name_p
= false;
14572 bool invalid_explicit_specialization_p
= false;
14573 tree pushed_scope
= NULL_TREE
;
14574 unsigned num_templates
;
14576 /* Assume no nested-name-specifier will be present. */
14577 *nested_name_specifier_p
= false;
14578 /* Assume no template parameter lists will be used in defining the
14582 *bases
= NULL_TREE
;
14584 /* Look for the class-key. */
14585 class_key
= cp_parser_class_key (parser
);
14586 if (class_key
== none_type
)
14587 return error_mark_node
;
14589 /* Parse the attributes. */
14590 attributes
= cp_parser_attributes_opt (parser
);
14592 /* If the next token is `::', that is invalid -- but sometimes
14593 people do try to write:
14597 Handle this gracefully by accepting the extra qualifier, and then
14598 issuing an error about it later if this really is a
14599 class-head. If it turns out just to be an elaborated type
14600 specifier, remain silent. */
14601 if (cp_parser_global_scope_opt (parser
, /*current_scope_valid_p=*/false))
14602 qualified_p
= true;
14604 push_deferring_access_checks (dk_no_check
);
14606 /* Determine the name of the class. Begin by looking for an
14607 optional nested-name-specifier. */
14608 nested_name_specifier
14609 = cp_parser_nested_name_specifier_opt (parser
,
14610 /*typename_keyword_p=*/false,
14611 /*check_dependency_p=*/false,
14613 /*is_declaration=*/false);
14614 /* If there was a nested-name-specifier, then there *must* be an
14616 if (nested_name_specifier
)
14618 /* Although the grammar says `identifier', it really means
14619 `class-name' or `template-name'. You are only allowed to
14620 define a class that has already been declared with this
14623 The proposed resolution for Core Issue 180 says that wherever
14624 you see `class T::X' you should treat `X' as a type-name.
14626 It is OK to define an inaccessible class; for example:
14628 class A { class B; };
14631 We do not know if we will see a class-name, or a
14632 template-name. We look for a class-name first, in case the
14633 class-name is a template-id; if we looked for the
14634 template-name first we would stop after the template-name. */
14635 cp_parser_parse_tentatively (parser
);
14636 type
= cp_parser_class_name (parser
,
14637 /*typename_keyword_p=*/false,
14638 /*template_keyword_p=*/false,
14640 /*check_dependency_p=*/false,
14641 /*class_head_p=*/true,
14642 /*is_declaration=*/false);
14643 /* If that didn't work, ignore the nested-name-specifier. */
14644 if (!cp_parser_parse_definitely (parser
))
14646 invalid_nested_name_p
= true;
14647 id
= cp_parser_identifier (parser
);
14648 if (id
== error_mark_node
)
14651 /* If we could not find a corresponding TYPE, treat this
14652 declaration like an unqualified declaration. */
14653 if (type
== error_mark_node
)
14654 nested_name_specifier
= NULL_TREE
;
14655 /* Otherwise, count the number of templates used in TYPE and its
14656 containing scopes. */
14661 for (scope
= TREE_TYPE (type
);
14662 scope
&& TREE_CODE (scope
) != NAMESPACE_DECL
;
14663 scope
= (TYPE_P (scope
)
14664 ? TYPE_CONTEXT (scope
)
14665 : DECL_CONTEXT (scope
)))
14667 && CLASS_TYPE_P (scope
)
14668 && CLASSTYPE_TEMPLATE_INFO (scope
)
14669 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope
))
14670 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope
))
14674 /* Otherwise, the identifier is optional. */
14677 /* We don't know whether what comes next is a template-id,
14678 an identifier, or nothing at all. */
14679 cp_parser_parse_tentatively (parser
);
14680 /* Check for a template-id. */
14681 id
= cp_parser_template_id (parser
,
14682 /*template_keyword_p=*/false,
14683 /*check_dependency_p=*/true,
14684 /*is_declaration=*/true);
14685 /* If that didn't work, it could still be an identifier. */
14686 if (!cp_parser_parse_definitely (parser
))
14688 if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
14689 id
= cp_parser_identifier (parser
);
14695 template_id_p
= true;
14700 pop_deferring_access_checks ();
14703 cp_parser_check_for_invalid_template_id (parser
, id
);
14705 /* If it's not a `:' or a `{' then we can't really be looking at a
14706 class-head, since a class-head only appears as part of a
14707 class-specifier. We have to detect this situation before calling
14708 xref_tag, since that has irreversible side-effects. */
14709 if (!cp_parser_next_token_starts_class_definition_p (parser
))
14711 cp_parser_error (parser
, "expected %<{%> or %<:%>");
14712 return error_mark_node
;
14715 /* At this point, we're going ahead with the class-specifier, even
14716 if some other problem occurs. */
14717 cp_parser_commit_to_tentative_parse (parser
);
14718 /* Issue the error about the overly-qualified name now. */
14720 cp_parser_error (parser
,
14721 "global qualification of class name is invalid");
14722 else if (invalid_nested_name_p
)
14723 cp_parser_error (parser
,
14724 "qualified name does not name a class");
14725 else if (nested_name_specifier
)
14729 /* Reject typedef-names in class heads. */
14730 if (!DECL_IMPLICIT_TYPEDEF_P (type
))
14732 error ("invalid class name in declaration of %qD", type
);
14737 /* Figure out in what scope the declaration is being placed. */
14738 scope
= current_scope ();
14739 /* If that scope does not contain the scope in which the
14740 class was originally declared, the program is invalid. */
14741 if (scope
&& !is_ancestor (scope
, nested_name_specifier
))
14743 if (at_namespace_scope_p ())
14744 error ("declaration of %qD in namespace %qD which does not "
14745 "enclose %qD", type
, scope
, nested_name_specifier
);
14747 error ("declaration of %qD in %qD which does not enclose %qD",
14748 type
, scope
, nested_name_specifier
);
14754 A declarator-id shall not be qualified exception of the
14755 definition of a ... nested class outside of its class
14756 ... [or] a the definition or explicit instantiation of a
14757 class member of a namespace outside of its namespace. */
14758 if (scope
== nested_name_specifier
)
14760 pedwarn ("extra qualification ignored");
14761 nested_name_specifier
= NULL_TREE
;
14765 /* An explicit-specialization must be preceded by "template <>". If
14766 it is not, try to recover gracefully. */
14767 if (at_namespace_scope_p ()
14768 && parser
->num_template_parameter_lists
== 0
14771 error ("an explicit specialization must be preceded by %<template <>%>");
14772 invalid_explicit_specialization_p
= true;
14773 /* Take the same action that would have been taken by
14774 cp_parser_explicit_specialization. */
14775 ++parser
->num_template_parameter_lists
;
14776 begin_specialization ();
14778 /* There must be no "return" statements between this point and the
14779 end of this function; set "type "to the correct return value and
14780 use "goto done;" to return. */
14781 /* Make sure that the right number of template parameters were
14783 if (!cp_parser_check_template_parameters (parser
, num_templates
))
14785 /* If something went wrong, there is no point in even trying to
14786 process the class-definition. */
14791 /* Look up the type. */
14794 if (TREE_CODE (id
) == TEMPLATE_ID_EXPR
14795 && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id
, 0))
14796 || TREE_CODE (TREE_OPERAND (id
, 0)) == OVERLOAD
))
14798 error ("function template %qD redeclared as a class template", id
);
14799 type
= error_mark_node
;
14803 type
= TREE_TYPE (id
);
14804 type
= maybe_process_partial_specialization (type
);
14806 if (nested_name_specifier
)
14807 pushed_scope
= push_scope (nested_name_specifier
);
14809 else if (nested_name_specifier
)
14815 template <typename T> struct S { struct T };
14816 template <typename T> struct S<T>::T { };
14818 we will get a TYPENAME_TYPE when processing the definition of
14819 `S::T'. We need to resolve it to the actual type before we
14820 try to define it. */
14821 if (TREE_CODE (TREE_TYPE (type
)) == TYPENAME_TYPE
)
14823 class_type
= resolve_typename_type (TREE_TYPE (type
),
14824 /*only_current_p=*/false);
14825 if (TREE_CODE (class_type
) != TYPENAME_TYPE
)
14826 type
= TYPE_NAME (class_type
);
14829 cp_parser_error (parser
, "could not resolve typename type");
14830 type
= error_mark_node
;
14834 maybe_process_partial_specialization (TREE_TYPE (type
));
14835 class_type
= current_class_type
;
14836 /* Enter the scope indicated by the nested-name-specifier. */
14837 pushed_scope
= push_scope (nested_name_specifier
);
14838 /* Get the canonical version of this type. */
14839 type
= TYPE_MAIN_DECL (TREE_TYPE (type
));
14840 if (PROCESSING_REAL_TEMPLATE_DECL_P ()
14841 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type
)))
14843 type
= push_template_decl (type
);
14844 if (type
== error_mark_node
)
14851 type
= TREE_TYPE (type
);
14852 *nested_name_specifier_p
= true;
14854 else /* The name is not a nested name. */
14856 /* If the class was unnamed, create a dummy name. */
14858 id
= make_anon_name ();
14859 type
= xref_tag (class_key
, id
, /*tag_scope=*/ts_current
,
14860 parser
->num_template_parameter_lists
);
14863 /* Indicate whether this class was declared as a `class' or as a
14865 if (TREE_CODE (type
) == RECORD_TYPE
)
14866 CLASSTYPE_DECLARED_CLASS (type
) = (class_key
== class_type
);
14867 cp_parser_check_class_key (class_key
, type
);
14869 /* If this type was already complete, and we see another definition,
14870 that's an error. */
14871 if (type
!= error_mark_node
&& COMPLETE_TYPE_P (type
))
14873 error ("redefinition of %q#T", type
);
14874 error ("previous definition of %q+#T", type
);
14878 else if (type
== error_mark_node
)
14881 /* We will have entered the scope containing the class; the names of
14882 base classes should be looked up in that context. For example:
14884 struct A { struct B {}; struct C; };
14885 struct A::C : B {};
14889 /* Get the list of base-classes, if there is one. */
14890 if (cp_lexer_next_token_is (parser
->lexer
, CPP_COLON
))
14891 *bases
= cp_parser_base_clause (parser
);
14894 /* Leave the scope given by the nested-name-specifier. We will
14895 enter the class scope itself while processing the members. */
14897 pop_scope (pushed_scope
);
14899 if (invalid_explicit_specialization_p
)
14901 end_specialization ();
14902 --parser
->num_template_parameter_lists
;
14904 *attributes_p
= attributes
;
14908 /* Parse a class-key.
14915 Returns the kind of class-key specified, or none_type to indicate
14918 static enum tag_types
14919 cp_parser_class_key (cp_parser
* parser
)
14922 enum tag_types tag_type
;
14924 /* Look for the class-key. */
14925 token
= cp_parser_require (parser
, CPP_KEYWORD
, "class-key");
14929 /* Check to see if the TOKEN is a class-key. */
14930 tag_type
= cp_parser_token_is_class_key (token
);
14932 cp_parser_error (parser
, "expected class-key");
14936 /* Parse an (optional) member-specification.
14938 member-specification:
14939 member-declaration member-specification [opt]
14940 access-specifier : member-specification [opt] */
14943 cp_parser_member_specification_opt (cp_parser
* parser
)
14950 /* Peek at the next token. */
14951 token
= cp_lexer_peek_token (parser
->lexer
);
14952 /* If it's a `}', or EOF then we've seen all the members. */
14953 if (token
->type
== CPP_CLOSE_BRACE
14954 || token
->type
== CPP_EOF
14955 || token
->type
== CPP_PRAGMA_EOL
)
14958 /* See if this token is a keyword. */
14959 keyword
= token
->keyword
;
14963 case RID_PROTECTED
:
14965 /* Consume the access-specifier. */
14966 cp_lexer_consume_token (parser
->lexer
);
14967 /* Remember which access-specifier is active. */
14968 current_access_specifier
= token
->u
.value
;
14969 /* Look for the `:'. */
14970 cp_parser_require (parser
, CPP_COLON
, "%<:%>");
14974 /* Accept #pragmas at class scope. */
14975 if (token
->type
== CPP_PRAGMA
)
14977 cp_parser_pragma (parser
, pragma_external
);
14981 /* Otherwise, the next construction must be a
14982 member-declaration. */
14983 cp_parser_member_declaration (parser
);
14988 /* Parse a member-declaration.
14990 member-declaration:
14991 decl-specifier-seq [opt] member-declarator-list [opt] ;
14992 function-definition ; [opt]
14993 :: [opt] nested-name-specifier template [opt] unqualified-id ;
14995 template-declaration
14997 member-declarator-list:
14999 member-declarator-list , member-declarator
15002 declarator pure-specifier [opt]
15003 declarator constant-initializer [opt]
15004 identifier [opt] : constant-expression
15008 member-declaration:
15009 __extension__ member-declaration
15012 declarator attributes [opt] pure-specifier [opt]
15013 declarator attributes [opt] constant-initializer [opt]
15014 identifier [opt] attributes [opt] : constant-expression
15018 member-declaration:
15019 static_assert-declaration */
15022 cp_parser_member_declaration (cp_parser
* parser
)
15024 cp_decl_specifier_seq decl_specifiers
;
15025 tree prefix_attributes
;
15027 int declares_class_or_enum
;
15030 int saved_pedantic
;
15032 /* Check for the `__extension__' keyword. */
15033 if (cp_parser_extension_opt (parser
, &saved_pedantic
))
15036 cp_parser_member_declaration (parser
);
15037 /* Restore the old value of the PEDANTIC flag. */
15038 pedantic
= saved_pedantic
;
15043 /* Check for a template-declaration. */
15044 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_TEMPLATE
))
15046 /* An explicit specialization here is an error condition, and we
15047 expect the specialization handler to detect and report this. */
15048 if (cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
== CPP_LESS
15049 && cp_lexer_peek_nth_token (parser
->lexer
, 3)->type
== CPP_GREATER
)
15050 cp_parser_explicit_specialization (parser
);
15052 cp_parser_template_declaration (parser
, /*member_p=*/true);
15057 /* Check for a using-declaration. */
15058 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_USING
))
15060 /* Parse the using-declaration. */
15061 cp_parser_using_declaration (parser
,
15062 /*access_declaration_p=*/false);
15066 /* Check for @defs. */
15067 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_AT_DEFS
))
15070 tree ivar_chains
= cp_parser_objc_defs_expression (parser
);
15071 ivar
= ivar_chains
;
15075 ivar
= TREE_CHAIN (member
);
15076 TREE_CHAIN (member
) = NULL_TREE
;
15077 finish_member_declaration (member
);
15082 /* If the next token is `static_assert' we have a static assertion. */
15083 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_STATIC_ASSERT
))
15085 cp_parser_static_assert (parser
, /*member_p=*/true);
15089 if (cp_parser_using_declaration (parser
, /*access_declaration=*/true))
15092 /* Parse the decl-specifier-seq. */
15093 cp_parser_decl_specifier_seq (parser
,
15094 CP_PARSER_FLAGS_OPTIONAL
,
15096 &declares_class_or_enum
);
15097 prefix_attributes
= decl_specifiers
.attributes
;
15098 decl_specifiers
.attributes
= NULL_TREE
;
15099 /* Check for an invalid type-name. */
15100 if (!decl_specifiers
.type
15101 && cp_parser_parse_and_diagnose_invalid_type_name (parser
))
15103 /* If there is no declarator, then the decl-specifier-seq should
15105 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
))
15107 /* If there was no decl-specifier-seq, and the next token is a
15108 `;', then we have something like:
15114 Each member-declaration shall declare at least one member
15115 name of the class. */
15116 if (!decl_specifiers
.any_specifiers_p
)
15118 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
15119 if (pedantic
&& !token
->in_system_header
)
15120 pedwarn ("%Hextra %<;%>", &token
->location
);
15126 /* See if this declaration is a friend. */
15127 friend_p
= cp_parser_friend_p (&decl_specifiers
);
15128 /* If there were decl-specifiers, check to see if there was
15129 a class-declaration. */
15130 type
= check_tag_decl (&decl_specifiers
);
15131 /* Nested classes have already been added to the class, but
15132 a `friend' needs to be explicitly registered. */
15135 /* If the `friend' keyword was present, the friend must
15136 be introduced with a class-key. */
15137 if (!declares_class_or_enum
)
15138 error ("a class-key must be used when declaring a friend");
15141 template <typename T> struct A {
15142 friend struct A<T>::B;
15145 A<T>::B will be represented by a TYPENAME_TYPE, and
15146 therefore not recognized by check_tag_decl. */
15148 && decl_specifiers
.type
15149 && TYPE_P (decl_specifiers
.type
))
15150 type
= decl_specifiers
.type
;
15151 if (!type
|| !TYPE_P (type
))
15152 error ("friend declaration does not name a class or "
15155 make_friend_class (current_class_type
, type
,
15156 /*complain=*/true);
15158 /* If there is no TYPE, an error message will already have
15160 else if (!type
|| type
== error_mark_node
)
15162 /* An anonymous aggregate has to be handled specially; such
15163 a declaration really declares a data member (with a
15164 particular type), as opposed to a nested class. */
15165 else if (ANON_AGGR_TYPE_P (type
))
15167 /* Remove constructors and such from TYPE, now that we
15168 know it is an anonymous aggregate. */
15169 fixup_anonymous_aggr (type
);
15170 /* And make the corresponding data member. */
15171 decl
= build_decl (FIELD_DECL
, NULL_TREE
, type
);
15172 /* Add it to the class. */
15173 finish_member_declaration (decl
);
15176 cp_parser_check_access_in_redeclaration (TYPE_NAME (type
));
15181 /* See if these declarations will be friends. */
15182 friend_p
= cp_parser_friend_p (&decl_specifiers
);
15184 /* Keep going until we hit the `;' at the end of the
15186 while (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
15188 tree attributes
= NULL_TREE
;
15189 tree first_attribute
;
15191 /* Peek at the next token. */
15192 token
= cp_lexer_peek_token (parser
->lexer
);
15194 /* Check for a bitfield declaration. */
15195 if (token
->type
== CPP_COLON
15196 || (token
->type
== CPP_NAME
15197 && cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
15203 /* Get the name of the bitfield. Note that we cannot just
15204 check TOKEN here because it may have been invalidated by
15205 the call to cp_lexer_peek_nth_token above. */
15206 if (cp_lexer_peek_token (parser
->lexer
)->type
!= CPP_COLON
)
15207 identifier
= cp_parser_identifier (parser
);
15209 identifier
= NULL_TREE
;
15211 /* Consume the `:' token. */
15212 cp_lexer_consume_token (parser
->lexer
);
15213 /* Get the width of the bitfield. */
15215 = cp_parser_constant_expression (parser
,
15216 /*allow_non_constant=*/false,
15219 /* Look for attributes that apply to the bitfield. */
15220 attributes
= cp_parser_attributes_opt (parser
);
15221 /* Remember which attributes are prefix attributes and
15223 first_attribute
= attributes
;
15224 /* Combine the attributes. */
15225 attributes
= chainon (prefix_attributes
, attributes
);
15227 /* Create the bitfield declaration. */
15228 decl
= grokbitfield (identifier
15229 ? make_id_declarator (NULL_TREE
,
15235 /* Apply the attributes. */
15236 cplus_decl_attributes (&decl
, attributes
, /*flags=*/0);
15240 cp_declarator
*declarator
;
15242 tree asm_specification
;
15243 int ctor_dtor_or_conv_p
;
15245 /* Parse the declarator. */
15247 = cp_parser_declarator (parser
, CP_PARSER_DECLARATOR_NAMED
,
15248 &ctor_dtor_or_conv_p
,
15249 /*parenthesized_p=*/NULL
,
15250 /*member_p=*/true);
15252 /* If something went wrong parsing the declarator, make sure
15253 that we at least consume some tokens. */
15254 if (declarator
== cp_error_declarator
)
15256 /* Skip to the end of the statement. */
15257 cp_parser_skip_to_end_of_statement (parser
);
15258 /* If the next token is not a semicolon, that is
15259 probably because we just skipped over the body of
15260 a function. So, we consume a semicolon if
15261 present, but do not issue an error message if it
15263 if (cp_lexer_next_token_is (parser
->lexer
,
15265 cp_lexer_consume_token (parser
->lexer
);
15269 if (declares_class_or_enum
& 2)
15270 cp_parser_check_for_definition_in_return_type
15271 (declarator
, decl_specifiers
.type
);
15273 /* Look for an asm-specification. */
15274 asm_specification
= cp_parser_asm_specification_opt (parser
);
15275 /* Look for attributes that apply to the declaration. */
15276 attributes
= cp_parser_attributes_opt (parser
);
15277 /* Remember which attributes are prefix attributes and
15279 first_attribute
= attributes
;
15280 /* Combine the attributes. */
15281 attributes
= chainon (prefix_attributes
, attributes
);
15283 /* If it's an `=', then we have a constant-initializer or a
15284 pure-specifier. It is not correct to parse the
15285 initializer before registering the member declaration
15286 since the member declaration should be in scope while
15287 its initializer is processed. However, the rest of the
15288 front end does not yet provide an interface that allows
15289 us to handle this correctly. */
15290 if (cp_lexer_next_token_is (parser
->lexer
, CPP_EQ
))
15294 A pure-specifier shall be used only in the declaration of
15295 a virtual function.
15297 A member-declarator can contain a constant-initializer
15298 only if it declares a static member of integral or
15301 Therefore, if the DECLARATOR is for a function, we look
15302 for a pure-specifier; otherwise, we look for a
15303 constant-initializer. When we call `grokfield', it will
15304 perform more stringent semantics checks. */
15305 if (function_declarator_p (declarator
))
15306 initializer
= cp_parser_pure_specifier (parser
);
15308 /* Parse the initializer. */
15309 initializer
= cp_parser_constant_initializer (parser
);
15311 /* Otherwise, there is no initializer. */
15313 initializer
= NULL_TREE
;
15315 /* See if we are probably looking at a function
15316 definition. We are certainly not looking at a
15317 member-declarator. Calling `grokfield' has
15318 side-effects, so we must not do it unless we are sure
15319 that we are looking at a member-declarator. */
15320 if (cp_parser_token_starts_function_definition_p
15321 (cp_lexer_peek_token (parser
->lexer
)))
15323 /* The grammar does not allow a pure-specifier to be
15324 used when a member function is defined. (It is
15325 possible that this fact is an oversight in the
15326 standard, since a pure function may be defined
15327 outside of the class-specifier. */
15329 error ("pure-specifier on function-definition");
15330 decl
= cp_parser_save_member_function_body (parser
,
15334 /* If the member was not a friend, declare it here. */
15336 finish_member_declaration (decl
);
15337 /* Peek at the next token. */
15338 token
= cp_lexer_peek_token (parser
->lexer
);
15339 /* If the next token is a semicolon, consume it. */
15340 if (token
->type
== CPP_SEMICOLON
)
15341 cp_lexer_consume_token (parser
->lexer
);
15345 /* Create the declaration. */
15346 decl
= grokfield (declarator
, &decl_specifiers
,
15347 initializer
, /*init_const_expr_p=*/true,
15352 /* Reset PREFIX_ATTRIBUTES. */
15353 while (attributes
&& TREE_CHAIN (attributes
) != first_attribute
)
15354 attributes
= TREE_CHAIN (attributes
);
15356 TREE_CHAIN (attributes
) = NULL_TREE
;
15358 /* If there is any qualification still in effect, clear it
15359 now; we will be starting fresh with the next declarator. */
15360 parser
->scope
= NULL_TREE
;
15361 parser
->qualifying_scope
= NULL_TREE
;
15362 parser
->object_scope
= NULL_TREE
;
15363 /* If it's a `,', then there are more declarators. */
15364 if (cp_lexer_next_token_is (parser
->lexer
, CPP_COMMA
))
15365 cp_lexer_consume_token (parser
->lexer
);
15366 /* If the next token isn't a `;', then we have a parse error. */
15367 else if (cp_lexer_next_token_is_not (parser
->lexer
,
15370 cp_parser_error (parser
, "expected %<;%>");
15371 /* Skip tokens until we find a `;'. */
15372 cp_parser_skip_to_end_of_statement (parser
);
15379 /* Add DECL to the list of members. */
15381 finish_member_declaration (decl
);
15383 if (TREE_CODE (decl
) == FUNCTION_DECL
)
15384 cp_parser_save_default_args (parser
, decl
);
15389 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
15392 /* Parse a pure-specifier.
15397 Returns INTEGER_ZERO_NODE if a pure specifier is found.
15398 Otherwise, ERROR_MARK_NODE is returned. */
15401 cp_parser_pure_specifier (cp_parser
* parser
)
15405 /* Look for the `=' token. */
15406 if (!cp_parser_require (parser
, CPP_EQ
, "%<=%>"))
15407 return error_mark_node
;
15408 /* Look for the `0' token. */
15409 token
= cp_lexer_consume_token (parser
->lexer
);
15410 /* c_lex_with_flags marks a single digit '0' with PURE_ZERO. */
15411 if (token
->type
!= CPP_NUMBER
|| !(token
->flags
& PURE_ZERO
))
15413 cp_parser_error (parser
,
15414 "invalid pure specifier (only %<= 0%> is allowed)");
15415 cp_parser_skip_to_end_of_statement (parser
);
15416 return error_mark_node
;
15418 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
15420 error ("templates may not be %<virtual%>");
15421 return error_mark_node
;
15424 return integer_zero_node
;
15427 /* Parse a constant-initializer.
15429 constant-initializer:
15430 = constant-expression
15432 Returns a representation of the constant-expression. */
15435 cp_parser_constant_initializer (cp_parser
* parser
)
15437 /* Look for the `=' token. */
15438 if (!cp_parser_require (parser
, CPP_EQ
, "%<=%>"))
15439 return error_mark_node
;
15441 /* It is invalid to write:
15443 struct S { static const int i = { 7 }; };
15446 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_BRACE
))
15448 cp_parser_error (parser
,
15449 "a brace-enclosed initializer is not allowed here");
15450 /* Consume the opening brace. */
15451 cp_lexer_consume_token (parser
->lexer
);
15452 /* Skip the initializer. */
15453 cp_parser_skip_to_closing_brace (parser
);
15454 /* Look for the trailing `}'. */
15455 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
15457 return error_mark_node
;
15460 return cp_parser_constant_expression (parser
,
15461 /*allow_non_constant=*/false,
15465 /* Derived classes [gram.class.derived] */
15467 /* Parse a base-clause.
15470 : base-specifier-list
15472 base-specifier-list:
15473 base-specifier ... [opt]
15474 base-specifier-list , base-specifier ... [opt]
15476 Returns a TREE_LIST representing the base-classes, in the order in
15477 which they were declared. The representation of each node is as
15478 described by cp_parser_base_specifier.
15480 In the case that no bases are specified, this function will return
15481 NULL_TREE, not ERROR_MARK_NODE. */
15484 cp_parser_base_clause (cp_parser
* parser
)
15486 tree bases
= NULL_TREE
;
15488 /* Look for the `:' that begins the list. */
15489 cp_parser_require (parser
, CPP_COLON
, "%<:%>");
15491 /* Scan the base-specifier-list. */
15496 bool pack_expansion_p
= false;
15498 /* Look for the base-specifier. */
15499 base
= cp_parser_base_specifier (parser
);
15500 /* Look for the (optional) ellipsis. */
15501 if (cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
15503 /* Consume the `...'. */
15504 cp_lexer_consume_token (parser
->lexer
);
15506 pack_expansion_p
= true;
15509 /* Add BASE to the front of the list. */
15510 if (base
!= error_mark_node
)
15512 if (pack_expansion_p
)
15513 /* Make this a pack expansion type. */
15514 TREE_VALUE (base
) = make_pack_expansion (TREE_VALUE (base
));
15517 if (!check_for_bare_parameter_packs (TREE_VALUE (base
)))
15519 TREE_CHAIN (base
) = bases
;
15523 /* Peek at the next token. */
15524 token
= cp_lexer_peek_token (parser
->lexer
);
15525 /* If it's not a comma, then the list is complete. */
15526 if (token
->type
!= CPP_COMMA
)
15528 /* Consume the `,'. */
15529 cp_lexer_consume_token (parser
->lexer
);
15532 /* PARSER->SCOPE may still be non-NULL at this point, if the last
15533 base class had a qualified name. However, the next name that
15534 appears is certainly not qualified. */
15535 parser
->scope
= NULL_TREE
;
15536 parser
->qualifying_scope
= NULL_TREE
;
15537 parser
->object_scope
= NULL_TREE
;
15539 return nreverse (bases
);
15542 /* Parse a base-specifier.
15545 :: [opt] nested-name-specifier [opt] class-name
15546 virtual access-specifier [opt] :: [opt] nested-name-specifier
15548 access-specifier virtual [opt] :: [opt] nested-name-specifier
15551 Returns a TREE_LIST. The TREE_PURPOSE will be one of
15552 ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
15553 indicate the specifiers provided. The TREE_VALUE will be a TYPE
15554 (or the ERROR_MARK_NODE) indicating the type that was specified. */
15557 cp_parser_base_specifier (cp_parser
* parser
)
15561 bool virtual_p
= false;
15562 bool duplicate_virtual_error_issued_p
= false;
15563 bool duplicate_access_error_issued_p
= false;
15564 bool class_scope_p
, template_p
;
15565 tree access
= access_default_node
;
15568 /* Process the optional `virtual' and `access-specifier'. */
15571 /* Peek at the next token. */
15572 token
= cp_lexer_peek_token (parser
->lexer
);
15573 /* Process `virtual'. */
15574 switch (token
->keyword
)
15577 /* If `virtual' appears more than once, issue an error. */
15578 if (virtual_p
&& !duplicate_virtual_error_issued_p
)
15580 cp_parser_error (parser
,
15581 "%<virtual%> specified more than once in base-specified");
15582 duplicate_virtual_error_issued_p
= true;
15587 /* Consume the `virtual' token. */
15588 cp_lexer_consume_token (parser
->lexer
);
15593 case RID_PROTECTED
:
15595 /* If more than one access specifier appears, issue an
15597 if (access
!= access_default_node
15598 && !duplicate_access_error_issued_p
)
15600 cp_parser_error (parser
,
15601 "more than one access specifier in base-specified");
15602 duplicate_access_error_issued_p
= true;
15605 access
= ridpointers
[(int) token
->keyword
];
15607 /* Consume the access-specifier. */
15608 cp_lexer_consume_token (parser
->lexer
);
15617 /* It is not uncommon to see programs mechanically, erroneously, use
15618 the 'typename' keyword to denote (dependent) qualified types
15619 as base classes. */
15620 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_TYPENAME
))
15622 if (!processing_template_decl
)
15623 error ("keyword %<typename%> not allowed outside of templates");
15625 error ("keyword %<typename%> not allowed in this context "
15626 "(the base class is implicitly a type)");
15627 cp_lexer_consume_token (parser
->lexer
);
15630 /* Look for the optional `::' operator. */
15631 cp_parser_global_scope_opt (parser
, /*current_scope_valid_p=*/false);
15632 /* Look for the nested-name-specifier. The simplest way to
15637 The keyword `typename' is not permitted in a base-specifier or
15638 mem-initializer; in these contexts a qualified name that
15639 depends on a template-parameter is implicitly assumed to be a
15642 is to pretend that we have seen the `typename' keyword at this
15644 cp_parser_nested_name_specifier_opt (parser
,
15645 /*typename_keyword_p=*/true,
15646 /*check_dependency_p=*/true,
15648 /*is_declaration=*/true);
15649 /* If the base class is given by a qualified name, assume that names
15650 we see are type names or templates, as appropriate. */
15651 class_scope_p
= (parser
->scope
&& TYPE_P (parser
->scope
));
15652 template_p
= class_scope_p
&& cp_parser_optional_template_keyword (parser
);
15654 /* Finally, look for the class-name. */
15655 type
= cp_parser_class_name (parser
,
15659 /*check_dependency_p=*/true,
15660 /*class_head_p=*/false,
15661 /*is_declaration=*/true);
15663 if (type
== error_mark_node
)
15664 return error_mark_node
;
15666 return finish_base_specifier (TREE_TYPE (type
), access
, virtual_p
);
15669 /* Exception handling [gram.exception] */
15671 /* Parse an (optional) exception-specification.
15673 exception-specification:
15674 throw ( type-id-list [opt] )
15676 Returns a TREE_LIST representing the exception-specification. The
15677 TREE_VALUE of each node is a type. */
15680 cp_parser_exception_specification_opt (cp_parser
* parser
)
15685 /* Peek at the next token. */
15686 token
= cp_lexer_peek_token (parser
->lexer
);
15687 /* If it's not `throw', then there's no exception-specification. */
15688 if (!cp_parser_is_keyword (token
, RID_THROW
))
15691 /* Consume the `throw'. */
15692 cp_lexer_consume_token (parser
->lexer
);
15694 /* Look for the `('. */
15695 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
15697 /* Peek at the next token. */
15698 token
= cp_lexer_peek_token (parser
->lexer
);
15699 /* If it's not a `)', then there is a type-id-list. */
15700 if (token
->type
!= CPP_CLOSE_PAREN
)
15702 const char *saved_message
;
15704 /* Types may not be defined in an exception-specification. */
15705 saved_message
= parser
->type_definition_forbidden_message
;
15706 parser
->type_definition_forbidden_message
15707 = "types may not be defined in an exception-specification";
15708 /* Parse the type-id-list. */
15709 type_id_list
= cp_parser_type_id_list (parser
);
15710 /* Restore the saved message. */
15711 parser
->type_definition_forbidden_message
= saved_message
;
15714 type_id_list
= empty_except_spec
;
15716 /* Look for the `)'. */
15717 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
15719 return type_id_list
;
15722 /* Parse an (optional) type-id-list.
15726 type-id-list , type-id ... [opt]
15728 Returns a TREE_LIST. The TREE_VALUE of each node is a TYPE,
15729 in the order that the types were presented. */
15732 cp_parser_type_id_list (cp_parser
* parser
)
15734 tree types
= NULL_TREE
;
15741 /* Get the next type-id. */
15742 type
= cp_parser_type_id (parser
);
15743 /* Parse the optional ellipsis. */
15744 if (cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
15746 /* Consume the `...'. */
15747 cp_lexer_consume_token (parser
->lexer
);
15749 /* Turn the type into a pack expansion expression. */
15750 type
= make_pack_expansion (type
);
15752 /* Add it to the list. */
15753 types
= add_exception_specifier (types
, type
, /*complain=*/1);
15754 /* Peek at the next token. */
15755 token
= cp_lexer_peek_token (parser
->lexer
);
15756 /* If it is not a `,', we are done. */
15757 if (token
->type
!= CPP_COMMA
)
15759 /* Consume the `,'. */
15760 cp_lexer_consume_token (parser
->lexer
);
15763 return nreverse (types
);
15766 /* Parse a try-block.
15769 try compound-statement handler-seq */
15772 cp_parser_try_block (cp_parser
* parser
)
15776 cp_parser_require_keyword (parser
, RID_TRY
, "%<try%>");
15777 try_block
= begin_try_block ();
15778 cp_parser_compound_statement (parser
, NULL
, true);
15779 finish_try_block (try_block
);
15780 cp_parser_handler_seq (parser
);
15781 finish_handler_sequence (try_block
);
15786 /* Parse a function-try-block.
15788 function-try-block:
15789 try ctor-initializer [opt] function-body handler-seq */
15792 cp_parser_function_try_block (cp_parser
* parser
)
15794 tree compound_stmt
;
15796 bool ctor_initializer_p
;
15798 /* Look for the `try' keyword. */
15799 if (!cp_parser_require_keyword (parser
, RID_TRY
, "%<try%>"))
15801 /* Let the rest of the front end know where we are. */
15802 try_block
= begin_function_try_block (&compound_stmt
);
15803 /* Parse the function-body. */
15805 = cp_parser_ctor_initializer_opt_and_function_body (parser
);
15806 /* We're done with the `try' part. */
15807 finish_function_try_block (try_block
);
15808 /* Parse the handlers. */
15809 cp_parser_handler_seq (parser
);
15810 /* We're done with the handlers. */
15811 finish_function_handler_sequence (try_block
, compound_stmt
);
15813 return ctor_initializer_p
;
15816 /* Parse a handler-seq.
15819 handler handler-seq [opt] */
15822 cp_parser_handler_seq (cp_parser
* parser
)
15828 /* Parse the handler. */
15829 cp_parser_handler (parser
);
15830 /* Peek at the next token. */
15831 token
= cp_lexer_peek_token (parser
->lexer
);
15832 /* If it's not `catch' then there are no more handlers. */
15833 if (!cp_parser_is_keyword (token
, RID_CATCH
))
15838 /* Parse a handler.
15841 catch ( exception-declaration ) compound-statement */
15844 cp_parser_handler (cp_parser
* parser
)
15849 cp_parser_require_keyword (parser
, RID_CATCH
, "%<catch%>");
15850 handler
= begin_handler ();
15851 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
15852 declaration
= cp_parser_exception_declaration (parser
);
15853 finish_handler_parms (declaration
, handler
);
15854 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
15855 cp_parser_compound_statement (parser
, NULL
, false);
15856 finish_handler (handler
);
15859 /* Parse an exception-declaration.
15861 exception-declaration:
15862 type-specifier-seq declarator
15863 type-specifier-seq abstract-declarator
15867 Returns a VAR_DECL for the declaration, or NULL_TREE if the
15868 ellipsis variant is used. */
15871 cp_parser_exception_declaration (cp_parser
* parser
)
15873 cp_decl_specifier_seq type_specifiers
;
15874 cp_declarator
*declarator
;
15875 const char *saved_message
;
15877 /* If it's an ellipsis, it's easy to handle. */
15878 if (cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
15880 /* Consume the `...' token. */
15881 cp_lexer_consume_token (parser
->lexer
);
15885 /* Types may not be defined in exception-declarations. */
15886 saved_message
= parser
->type_definition_forbidden_message
;
15887 parser
->type_definition_forbidden_message
15888 = "types may not be defined in exception-declarations";
15890 /* Parse the type-specifier-seq. */
15891 cp_parser_type_specifier_seq (parser
, /*is_condition=*/false,
15893 /* If it's a `)', then there is no declarator. */
15894 if (cp_lexer_next_token_is (parser
->lexer
, CPP_CLOSE_PAREN
))
15897 declarator
= cp_parser_declarator (parser
, CP_PARSER_DECLARATOR_EITHER
,
15898 /*ctor_dtor_or_conv_p=*/NULL
,
15899 /*parenthesized_p=*/NULL
,
15900 /*member_p=*/false);
15902 /* Restore the saved message. */
15903 parser
->type_definition_forbidden_message
= saved_message
;
15905 if (!type_specifiers
.any_specifiers_p
)
15906 return error_mark_node
;
15908 return grokdeclarator (declarator
, &type_specifiers
, CATCHPARM
, 1, NULL
);
15911 /* Parse a throw-expression.
15914 throw assignment-expression [opt]
15916 Returns a THROW_EXPR representing the throw-expression. */
15919 cp_parser_throw_expression (cp_parser
* parser
)
15924 cp_parser_require_keyword (parser
, RID_THROW
, "%<throw%>");
15925 token
= cp_lexer_peek_token (parser
->lexer
);
15926 /* Figure out whether or not there is an assignment-expression
15927 following the "throw" keyword. */
15928 if (token
->type
== CPP_COMMA
15929 || token
->type
== CPP_SEMICOLON
15930 || token
->type
== CPP_CLOSE_PAREN
15931 || token
->type
== CPP_CLOSE_SQUARE
15932 || token
->type
== CPP_CLOSE_BRACE
15933 || token
->type
== CPP_COLON
)
15934 expression
= NULL_TREE
;
15936 expression
= cp_parser_assignment_expression (parser
,
15939 return build_throw (expression
);
15942 /* GNU Extensions */
15944 /* Parse an (optional) asm-specification.
15947 asm ( string-literal )
15949 If the asm-specification is present, returns a STRING_CST
15950 corresponding to the string-literal. Otherwise, returns
15954 cp_parser_asm_specification_opt (cp_parser
* parser
)
15957 tree asm_specification
;
15959 /* Peek at the next token. */
15960 token
= cp_lexer_peek_token (parser
->lexer
);
15961 /* If the next token isn't the `asm' keyword, then there's no
15962 asm-specification. */
15963 if (!cp_parser_is_keyword (token
, RID_ASM
))
15966 /* Consume the `asm' token. */
15967 cp_lexer_consume_token (parser
->lexer
);
15968 /* Look for the `('. */
15969 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
15971 /* Look for the string-literal. */
15972 asm_specification
= cp_parser_string_literal (parser
, false, false);
15974 /* Look for the `)'. */
15975 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
15977 return asm_specification
;
15980 /* Parse an asm-operand-list.
15984 asm-operand-list , asm-operand
15987 string-literal ( expression )
15988 [ string-literal ] string-literal ( expression )
15990 Returns a TREE_LIST representing the operands. The TREE_VALUE of
15991 each node is the expression. The TREE_PURPOSE is itself a
15992 TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
15993 string-literal (or NULL_TREE if not present) and whose TREE_VALUE
15994 is a STRING_CST for the string literal before the parenthesis. Returns
15995 ERROR_MARK_NODE if any of the operands are invalid. */
15998 cp_parser_asm_operand_list (cp_parser
* parser
)
16000 tree asm_operands
= NULL_TREE
;
16001 bool invalid_operands
= false;
16005 tree string_literal
;
16009 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_SQUARE
))
16011 /* Consume the `[' token. */
16012 cp_lexer_consume_token (parser
->lexer
);
16013 /* Read the operand name. */
16014 name
= cp_parser_identifier (parser
);
16015 if (name
!= error_mark_node
)
16016 name
= build_string (IDENTIFIER_LENGTH (name
),
16017 IDENTIFIER_POINTER (name
));
16018 /* Look for the closing `]'. */
16019 cp_parser_require (parser
, CPP_CLOSE_SQUARE
, "%<]%>");
16023 /* Look for the string-literal. */
16024 string_literal
= cp_parser_string_literal (parser
, false, false);
16026 /* Look for the `('. */
16027 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
16028 /* Parse the expression. */
16029 expression
= cp_parser_expression (parser
, /*cast_p=*/false);
16030 /* Look for the `)'. */
16031 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
16033 if (name
== error_mark_node
16034 || string_literal
== error_mark_node
16035 || expression
== error_mark_node
)
16036 invalid_operands
= true;
16038 /* Add this operand to the list. */
16039 asm_operands
= tree_cons (build_tree_list (name
, string_literal
),
16042 /* If the next token is not a `,', there are no more
16044 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
16046 /* Consume the `,'. */
16047 cp_lexer_consume_token (parser
->lexer
);
16050 return invalid_operands
? error_mark_node
: nreverse (asm_operands
);
16053 /* Parse an asm-clobber-list.
16057 asm-clobber-list , string-literal
16059 Returns a TREE_LIST, indicating the clobbers in the order that they
16060 appeared. The TREE_VALUE of each node is a STRING_CST. */
16063 cp_parser_asm_clobber_list (cp_parser
* parser
)
16065 tree clobbers
= NULL_TREE
;
16069 tree string_literal
;
16071 /* Look for the string literal. */
16072 string_literal
= cp_parser_string_literal (parser
, false, false);
16073 /* Add it to the list. */
16074 clobbers
= tree_cons (NULL_TREE
, string_literal
, clobbers
);
16075 /* If the next token is not a `,', then the list is
16077 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
16079 /* Consume the `,' token. */
16080 cp_lexer_consume_token (parser
->lexer
);
16086 /* Parse an (optional) series of attributes.
16089 attributes attribute
16092 __attribute__ (( attribute-list [opt] ))
16094 The return value is as for cp_parser_attribute_list. */
16097 cp_parser_attributes_opt (cp_parser
* parser
)
16099 tree attributes
= NULL_TREE
;
16104 tree attribute_list
;
16106 /* Peek at the next token. */
16107 token
= cp_lexer_peek_token (parser
->lexer
);
16108 /* If it's not `__attribute__', then we're done. */
16109 if (token
->keyword
!= RID_ATTRIBUTE
)
16112 /* Consume the `__attribute__' keyword. */
16113 cp_lexer_consume_token (parser
->lexer
);
16114 /* Look for the two `(' tokens. */
16115 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
16116 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
16118 /* Peek at the next token. */
16119 token
= cp_lexer_peek_token (parser
->lexer
);
16120 if (token
->type
!= CPP_CLOSE_PAREN
)
16121 /* Parse the attribute-list. */
16122 attribute_list
= cp_parser_attribute_list (parser
);
16124 /* If the next token is a `)', then there is no attribute
16126 attribute_list
= NULL
;
16128 /* Look for the two `)' tokens. */
16129 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
16130 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
16132 /* Add these new attributes to the list. */
16133 attributes
= chainon (attributes
, attribute_list
);
16139 /* Parse an attribute-list.
16143 attribute-list , attribute
16147 identifier ( identifier )
16148 identifier ( identifier , expression-list )
16149 identifier ( expression-list )
16151 Returns a TREE_LIST, or NULL_TREE on error. Each node corresponds
16152 to an attribute. The TREE_PURPOSE of each node is the identifier
16153 indicating which attribute is in use. The TREE_VALUE represents
16154 the arguments, if any. */
16157 cp_parser_attribute_list (cp_parser
* parser
)
16159 tree attribute_list
= NULL_TREE
;
16160 bool save_translate_strings_p
= parser
->translate_strings_p
;
16162 parser
->translate_strings_p
= false;
16169 /* Look for the identifier. We also allow keywords here; for
16170 example `__attribute__ ((const))' is legal. */
16171 token
= cp_lexer_peek_token (parser
->lexer
);
16172 if (token
->type
== CPP_NAME
16173 || token
->type
== CPP_KEYWORD
)
16175 tree arguments
= NULL_TREE
;
16177 /* Consume the token. */
16178 token
= cp_lexer_consume_token (parser
->lexer
);
16180 /* Save away the identifier that indicates which attribute
16182 identifier
= token
->u
.value
;
16183 attribute
= build_tree_list (identifier
, NULL_TREE
);
16185 /* Peek at the next token. */
16186 token
= cp_lexer_peek_token (parser
->lexer
);
16187 /* If it's an `(', then parse the attribute arguments. */
16188 if (token
->type
== CPP_OPEN_PAREN
)
16190 arguments
= cp_parser_parenthesized_expression_list
16191 (parser
, true, /*cast_p=*/false,
16192 /*allow_expansion_p=*/false,
16193 /*non_constant_p=*/NULL
);
16194 /* Save the arguments away. */
16195 TREE_VALUE (attribute
) = arguments
;
16198 if (arguments
!= error_mark_node
)
16200 /* Add this attribute to the list. */
16201 TREE_CHAIN (attribute
) = attribute_list
;
16202 attribute_list
= attribute
;
16205 token
= cp_lexer_peek_token (parser
->lexer
);
16207 /* Now, look for more attributes. If the next token isn't a
16208 `,', we're done. */
16209 if (token
->type
!= CPP_COMMA
)
16212 /* Consume the comma and keep going. */
16213 cp_lexer_consume_token (parser
->lexer
);
16215 parser
->translate_strings_p
= save_translate_strings_p
;
16217 /* We built up the list in reverse order. */
16218 return nreverse (attribute_list
);
16221 /* Parse an optional `__extension__' keyword. Returns TRUE if it is
16222 present, and FALSE otherwise. *SAVED_PEDANTIC is set to the
16223 current value of the PEDANTIC flag, regardless of whether or not
16224 the `__extension__' keyword is present. The caller is responsible
16225 for restoring the value of the PEDANTIC flag. */
16228 cp_parser_extension_opt (cp_parser
* parser
, int* saved_pedantic
)
16230 /* Save the old value of the PEDANTIC flag. */
16231 *saved_pedantic
= pedantic
;
16233 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_EXTENSION
))
16235 /* Consume the `__extension__' token. */
16236 cp_lexer_consume_token (parser
->lexer
);
16237 /* We're not being pedantic while the `__extension__' keyword is
16247 /* Parse a label declaration.
16250 __label__ label-declarator-seq ;
16252 label-declarator-seq:
16253 identifier , label-declarator-seq
16257 cp_parser_label_declaration (cp_parser
* parser
)
16259 /* Look for the `__label__' keyword. */
16260 cp_parser_require_keyword (parser
, RID_LABEL
, "%<__label__%>");
16266 /* Look for an identifier. */
16267 identifier
= cp_parser_identifier (parser
);
16268 /* If we failed, stop. */
16269 if (identifier
== error_mark_node
)
16271 /* Declare it as a label. */
16272 finish_label_decl (identifier
);
16273 /* If the next token is a `;', stop. */
16274 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
))
16276 /* Look for the `,' separating the label declarations. */
16277 cp_parser_require (parser
, CPP_COMMA
, "%<,%>");
16280 /* Look for the final `;'. */
16281 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
16284 /* Support Functions */
16286 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
16287 NAME should have one of the representations used for an
16288 id-expression. If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
16289 is returned. If PARSER->SCOPE is a dependent type, then a
16290 SCOPE_REF is returned.
16292 If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
16293 returned; the name was already resolved when the TEMPLATE_ID_EXPR
16294 was formed. Abstractly, such entities should not be passed to this
16295 function, because they do not need to be looked up, but it is
16296 simpler to check for this special case here, rather than at the
16299 In cases not explicitly covered above, this function returns a
16300 DECL, OVERLOAD, or baselink representing the result of the lookup.
16301 If there was no entity with the indicated NAME, the ERROR_MARK_NODE
16304 If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
16305 (e.g., "struct") that was used. In that case bindings that do not
16306 refer to types are ignored.
16308 If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
16311 If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
16314 If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
16317 If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
16318 TREE_LIST of candidates if name-lookup results in an ambiguity, and
16319 NULL_TREE otherwise. */
16322 cp_parser_lookup_name (cp_parser
*parser
, tree name
,
16323 enum tag_types tag_type
,
16326 bool check_dependency
,
16327 tree
*ambiguous_decls
)
16331 tree object_type
= parser
->context
->object_type
;
16333 if (!cp_parser_uncommitted_to_tentative_parse_p (parser
))
16334 flags
|= LOOKUP_COMPLAIN
;
16336 /* Assume that the lookup will be unambiguous. */
16337 if (ambiguous_decls
)
16338 *ambiguous_decls
= NULL_TREE
;
16340 /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
16341 no longer valid. Note that if we are parsing tentatively, and
16342 the parse fails, OBJECT_TYPE will be automatically restored. */
16343 parser
->context
->object_type
= NULL_TREE
;
16345 if (name
== error_mark_node
)
16346 return error_mark_node
;
16348 /* A template-id has already been resolved; there is no lookup to
16350 if (TREE_CODE (name
) == TEMPLATE_ID_EXPR
)
16352 if (BASELINK_P (name
))
16354 gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name
))
16355 == TEMPLATE_ID_EXPR
);
16359 /* A BIT_NOT_EXPR is used to represent a destructor. By this point,
16360 it should already have been checked to make sure that the name
16361 used matches the type being destroyed. */
16362 if (TREE_CODE (name
) == BIT_NOT_EXPR
)
16366 /* Figure out to which type this destructor applies. */
16368 type
= parser
->scope
;
16369 else if (object_type
)
16370 type
= object_type
;
16372 type
= current_class_type
;
16373 /* If that's not a class type, there is no destructor. */
16374 if (!type
|| !CLASS_TYPE_P (type
))
16375 return error_mark_node
;
16376 if (CLASSTYPE_LAZY_DESTRUCTOR (type
))
16377 lazily_declare_fn (sfk_destructor
, type
);
16378 if (!CLASSTYPE_DESTRUCTORS (type
))
16379 return error_mark_node
;
16380 /* If it was a class type, return the destructor. */
16381 return CLASSTYPE_DESTRUCTORS (type
);
16384 /* By this point, the NAME should be an ordinary identifier. If
16385 the id-expression was a qualified name, the qualifying scope is
16386 stored in PARSER->SCOPE at this point. */
16387 gcc_assert (TREE_CODE (name
) == IDENTIFIER_NODE
);
16389 /* Perform the lookup. */
16394 if (parser
->scope
== error_mark_node
)
16395 return error_mark_node
;
16397 /* If the SCOPE is dependent, the lookup must be deferred until
16398 the template is instantiated -- unless we are explicitly
16399 looking up names in uninstantiated templates. Even then, we
16400 cannot look up the name if the scope is not a class type; it
16401 might, for example, be a template type parameter. */
16402 dependent_p
= (TYPE_P (parser
->scope
)
16403 && !(parser
->in_declarator_p
16404 && currently_open_class (parser
->scope
))
16405 && dependent_type_p (parser
->scope
));
16406 if ((check_dependency
|| !CLASS_TYPE_P (parser
->scope
))
16413 /* The resolution to Core Issue 180 says that `struct
16414 A::B' should be considered a type-name, even if `A'
16416 type
= make_typename_type (parser
->scope
, name
, tag_type
,
16417 /*complain=*/tf_error
);
16418 decl
= TYPE_NAME (type
);
16420 else if (is_template
16421 && (cp_parser_next_token_ends_template_argument_p (parser
)
16422 || cp_lexer_next_token_is (parser
->lexer
,
16424 decl
= make_unbound_class_template (parser
->scope
,
16426 /*complain=*/tf_error
);
16428 decl
= build_qualified_name (/*type=*/NULL_TREE
,
16429 parser
->scope
, name
,
16434 tree pushed_scope
= NULL_TREE
;
16436 /* If PARSER->SCOPE is a dependent type, then it must be a
16437 class type, and we must not be checking dependencies;
16438 otherwise, we would have processed this lookup above. So
16439 that PARSER->SCOPE is not considered a dependent base by
16440 lookup_member, we must enter the scope here. */
16442 pushed_scope
= push_scope (parser
->scope
);
16443 /* If the PARSER->SCOPE is a template specialization, it
16444 may be instantiated during name lookup. In that case,
16445 errors may be issued. Even if we rollback the current
16446 tentative parse, those errors are valid. */
16447 decl
= lookup_qualified_name (parser
->scope
, name
,
16448 tag_type
!= none_type
,
16449 /*complain=*/true);
16451 /* If we have a single function from a using decl, pull it out. */
16453 && TREE_CODE (decl
) == OVERLOAD
16454 && !really_overloaded_fn (decl
))
16455 decl
= OVL_FUNCTION (decl
);
16458 pop_scope (pushed_scope
);
16460 parser
->qualifying_scope
= parser
->scope
;
16461 parser
->object_scope
= NULL_TREE
;
16463 else if (object_type
)
16465 tree object_decl
= NULL_TREE
;
16466 /* Look up the name in the scope of the OBJECT_TYPE, unless the
16467 OBJECT_TYPE is not a class. */
16468 if (CLASS_TYPE_P (object_type
))
16469 /* If the OBJECT_TYPE is a template specialization, it may
16470 be instantiated during name lookup. In that case, errors
16471 may be issued. Even if we rollback the current tentative
16472 parse, those errors are valid. */
16473 object_decl
= lookup_member (object_type
,
16476 tag_type
!= none_type
);
16477 /* Look it up in the enclosing context, too. */
16478 decl
= lookup_name_real (name
, tag_type
!= none_type
,
16480 /*block_p=*/true, is_namespace
, flags
);
16481 parser
->object_scope
= object_type
;
16482 parser
->qualifying_scope
= NULL_TREE
;
16484 decl
= object_decl
;
16488 decl
= lookup_name_real (name
, tag_type
!= none_type
,
16490 /*block_p=*/true, is_namespace
, flags
);
16491 parser
->qualifying_scope
= NULL_TREE
;
16492 parser
->object_scope
= NULL_TREE
;
16495 /* If the lookup failed, let our caller know. */
16496 if (!decl
|| decl
== error_mark_node
)
16497 return error_mark_node
;
16499 /* If it's a TREE_LIST, the result of the lookup was ambiguous. */
16500 if (TREE_CODE (decl
) == TREE_LIST
)
16502 if (ambiguous_decls
)
16503 *ambiguous_decls
= decl
;
16504 /* The error message we have to print is too complicated for
16505 cp_parser_error, so we incorporate its actions directly. */
16506 if (!cp_parser_simulate_error (parser
))
16508 error ("reference to %qD is ambiguous", name
);
16509 print_candidates (decl
);
16511 return error_mark_node
;
16514 gcc_assert (DECL_P (decl
)
16515 || TREE_CODE (decl
) == OVERLOAD
16516 || TREE_CODE (decl
) == SCOPE_REF
16517 || TREE_CODE (decl
) == UNBOUND_CLASS_TEMPLATE
16518 || BASELINK_P (decl
));
16520 /* If we have resolved the name of a member declaration, check to
16521 see if the declaration is accessible. When the name resolves to
16522 set of overloaded functions, accessibility is checked when
16523 overload resolution is done.
16525 During an explicit instantiation, access is not checked at all,
16526 as per [temp.explicit]. */
16528 check_accessibility_of_qualified_id (decl
, object_type
, parser
->scope
);
16533 /* Like cp_parser_lookup_name, but for use in the typical case where
16534 CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
16535 IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE. */
16538 cp_parser_lookup_name_simple (cp_parser
* parser
, tree name
)
16540 return cp_parser_lookup_name (parser
, name
,
16542 /*is_template=*/false,
16543 /*is_namespace=*/false,
16544 /*check_dependency=*/true,
16545 /*ambiguous_decls=*/NULL
);
16548 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
16549 the current context, return the TYPE_DECL. If TAG_NAME_P is
16550 true, the DECL indicates the class being defined in a class-head,
16551 or declared in an elaborated-type-specifier.
16553 Otherwise, return DECL. */
16556 cp_parser_maybe_treat_template_as_class (tree decl
, bool tag_name_p
)
16558 /* If the TEMPLATE_DECL is being declared as part of a class-head,
16559 the translation from TEMPLATE_DECL to TYPE_DECL occurs:
16562 template <typename T> struct B;
16565 template <typename T> struct A::B {};
16567 Similarly, in an elaborated-type-specifier:
16569 namespace N { struct X{}; }
16572 template <typename T> friend struct N::X;
16575 However, if the DECL refers to a class type, and we are in
16576 the scope of the class, then the name lookup automatically
16577 finds the TYPE_DECL created by build_self_reference rather
16578 than a TEMPLATE_DECL. For example, in:
16580 template <class T> struct S {
16584 there is no need to handle such case. */
16586 if (DECL_CLASS_TEMPLATE_P (decl
) && tag_name_p
)
16587 return DECL_TEMPLATE_RESULT (decl
);
16592 /* If too many, or too few, template-parameter lists apply to the
16593 declarator, issue an error message. Returns TRUE if all went well,
16594 and FALSE otherwise. */
16597 cp_parser_check_declarator_template_parameters (cp_parser
* parser
,
16598 cp_declarator
*declarator
)
16600 unsigned num_templates
;
16602 /* We haven't seen any classes that involve template parameters yet. */
16605 switch (declarator
->kind
)
16608 if (declarator
->u
.id
.qualifying_scope
)
16613 scope
= declarator
->u
.id
.qualifying_scope
;
16614 member
= declarator
->u
.id
.unqualified_name
;
16616 while (scope
&& CLASS_TYPE_P (scope
))
16618 /* You're supposed to have one `template <...>'
16619 for every template class, but you don't need one
16620 for a full specialization. For example:
16622 template <class T> struct S{};
16623 template <> struct S<int> { void f(); };
16624 void S<int>::f () {}
16626 is correct; there shouldn't be a `template <>' for
16627 the definition of `S<int>::f'. */
16628 if (!CLASSTYPE_TEMPLATE_INFO (scope
))
16629 /* If SCOPE does not have template information of any
16630 kind, then it is not a template, nor is it nested
16631 within a template. */
16633 if (explicit_class_specialization_p (scope
))
16635 if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope
)))
16638 scope
= TYPE_CONTEXT (scope
);
16641 else if (TREE_CODE (declarator
->u
.id
.unqualified_name
)
16642 == TEMPLATE_ID_EXPR
)
16643 /* If the DECLARATOR has the form `X<y>' then it uses one
16644 additional level of template parameters. */
16647 return cp_parser_check_template_parameters (parser
,
16653 case cdk_reference
:
16655 return (cp_parser_check_declarator_template_parameters
16656 (parser
, declarator
->declarator
));
16662 gcc_unreachable ();
16667 /* NUM_TEMPLATES were used in the current declaration. If that is
16668 invalid, return FALSE and issue an error messages. Otherwise,
16672 cp_parser_check_template_parameters (cp_parser
* parser
,
16673 unsigned num_templates
)
16675 /* If there are more template classes than parameter lists, we have
16678 template <class T> void S<T>::R<T>::f (); */
16679 if (parser
->num_template_parameter_lists
< num_templates
)
16681 error ("too few template-parameter-lists");
16684 /* If there are the same number of template classes and parameter
16685 lists, that's OK. */
16686 if (parser
->num_template_parameter_lists
== num_templates
)
16688 /* If there are more, but only one more, then we are referring to a
16689 member template. That's OK too. */
16690 if (parser
->num_template_parameter_lists
== num_templates
+ 1)
16692 /* Otherwise, there are too many template parameter lists. We have
16695 template <class T> template <class U> void S::f(); */
16696 error ("too many template-parameter-lists");
16700 /* Parse an optional `::' token indicating that the following name is
16701 from the global namespace. If so, PARSER->SCOPE is set to the
16702 GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
16703 unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
16704 Returns the new value of PARSER->SCOPE, if the `::' token is
16705 present, and NULL_TREE otherwise. */
16708 cp_parser_global_scope_opt (cp_parser
* parser
, bool current_scope_valid_p
)
16712 /* Peek at the next token. */
16713 token
= cp_lexer_peek_token (parser
->lexer
);
16714 /* If we're looking at a `::' token then we're starting from the
16715 global namespace, not our current location. */
16716 if (token
->type
== CPP_SCOPE
)
16718 /* Consume the `::' token. */
16719 cp_lexer_consume_token (parser
->lexer
);
16720 /* Set the SCOPE so that we know where to start the lookup. */
16721 parser
->scope
= global_namespace
;
16722 parser
->qualifying_scope
= global_namespace
;
16723 parser
->object_scope
= NULL_TREE
;
16725 return parser
->scope
;
16727 else if (!current_scope_valid_p
)
16729 parser
->scope
= NULL_TREE
;
16730 parser
->qualifying_scope
= NULL_TREE
;
16731 parser
->object_scope
= NULL_TREE
;
16737 /* Returns TRUE if the upcoming token sequence is the start of a
16738 constructor declarator. If FRIEND_P is true, the declarator is
16739 preceded by the `friend' specifier. */
16742 cp_parser_constructor_declarator_p (cp_parser
*parser
, bool friend_p
)
16744 bool constructor_p
;
16745 tree type_decl
= NULL_TREE
;
16746 bool nested_name_p
;
16747 cp_token
*next_token
;
16749 /* The common case is that this is not a constructor declarator, so
16750 try to avoid doing lots of work if at all possible. It's not
16751 valid declare a constructor at function scope. */
16752 if (parser
->in_function_body
)
16754 /* And only certain tokens can begin a constructor declarator. */
16755 next_token
= cp_lexer_peek_token (parser
->lexer
);
16756 if (next_token
->type
!= CPP_NAME
16757 && next_token
->type
!= CPP_SCOPE
16758 && next_token
->type
!= CPP_NESTED_NAME_SPECIFIER
16759 && next_token
->type
!= CPP_TEMPLATE_ID
)
16762 /* Parse tentatively; we are going to roll back all of the tokens
16764 cp_parser_parse_tentatively (parser
);
16765 /* Assume that we are looking at a constructor declarator. */
16766 constructor_p
= true;
16768 /* Look for the optional `::' operator. */
16769 cp_parser_global_scope_opt (parser
,
16770 /*current_scope_valid_p=*/false);
16771 /* Look for the nested-name-specifier. */
16773 = (cp_parser_nested_name_specifier_opt (parser
,
16774 /*typename_keyword_p=*/false,
16775 /*check_dependency_p=*/false,
16777 /*is_declaration=*/false)
16779 /* Outside of a class-specifier, there must be a
16780 nested-name-specifier. */
16781 if (!nested_name_p
&&
16782 (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type
)
16784 constructor_p
= false;
16785 /* If we still think that this might be a constructor-declarator,
16786 look for a class-name. */
16791 template <typename T> struct S { S(); };
16792 template <typename T> S<T>::S ();
16794 we must recognize that the nested `S' names a class.
16797 template <typename T> S<T>::S<T> ();
16799 we must recognize that the nested `S' names a template. */
16800 type_decl
= cp_parser_class_name (parser
,
16801 /*typename_keyword_p=*/false,
16802 /*template_keyword_p=*/false,
16804 /*check_dependency_p=*/false,
16805 /*class_head_p=*/false,
16806 /*is_declaration=*/false);
16807 /* If there was no class-name, then this is not a constructor. */
16808 constructor_p
= !cp_parser_error_occurred (parser
);
16811 /* If we're still considering a constructor, we have to see a `(',
16812 to begin the parameter-declaration-clause, followed by either a
16813 `)', an `...', or a decl-specifier. We need to check for a
16814 type-specifier to avoid being fooled into thinking that:
16818 is a constructor. (It is actually a function named `f' that
16819 takes one parameter (of type `int') and returns a value of type
16822 && cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
16824 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_CLOSE_PAREN
)
16825 && cp_lexer_next_token_is_not (parser
->lexer
, CPP_ELLIPSIS
)
16826 /* A parameter declaration begins with a decl-specifier,
16827 which is either the "attribute" keyword, a storage class
16828 specifier, or (usually) a type-specifier. */
16829 && !cp_lexer_next_token_is_decl_specifier_keyword (parser
->lexer
))
16832 tree pushed_scope
= NULL_TREE
;
16833 unsigned saved_num_template_parameter_lists
;
16835 /* Names appearing in the type-specifier should be looked up
16836 in the scope of the class. */
16837 if (current_class_type
)
16841 type
= TREE_TYPE (type_decl
);
16842 if (TREE_CODE (type
) == TYPENAME_TYPE
)
16844 type
= resolve_typename_type (type
,
16845 /*only_current_p=*/false);
16846 if (TREE_CODE (type
) == TYPENAME_TYPE
)
16848 cp_parser_abort_tentative_parse (parser
);
16852 pushed_scope
= push_scope (type
);
16855 /* Inside the constructor parameter list, surrounding
16856 template-parameter-lists do not apply. */
16857 saved_num_template_parameter_lists
16858 = parser
->num_template_parameter_lists
;
16859 parser
->num_template_parameter_lists
= 0;
16861 /* Look for the type-specifier. */
16862 cp_parser_type_specifier (parser
,
16863 CP_PARSER_FLAGS_NONE
,
16864 /*decl_specs=*/NULL
,
16865 /*is_declarator=*/true,
16866 /*declares_class_or_enum=*/NULL
,
16867 /*is_cv_qualifier=*/NULL
);
16869 parser
->num_template_parameter_lists
16870 = saved_num_template_parameter_lists
;
16872 /* Leave the scope of the class. */
16874 pop_scope (pushed_scope
);
16876 constructor_p
= !cp_parser_error_occurred (parser
);
16880 constructor_p
= false;
16881 /* We did not really want to consume any tokens. */
16882 cp_parser_abort_tentative_parse (parser
);
16884 return constructor_p
;
16887 /* Parse the definition of the function given by the DECL_SPECIFIERS,
16888 ATTRIBUTES, and DECLARATOR. The access checks have been deferred;
16889 they must be performed once we are in the scope of the function.
16891 Returns the function defined. */
16894 cp_parser_function_definition_from_specifiers_and_declarator
16895 (cp_parser
* parser
,
16896 cp_decl_specifier_seq
*decl_specifiers
,
16898 const cp_declarator
*declarator
)
16903 /* Begin the function-definition. */
16904 success_p
= start_function (decl_specifiers
, declarator
, attributes
);
16906 /* The things we're about to see are not directly qualified by any
16907 template headers we've seen thus far. */
16908 reset_specialization ();
16910 /* If there were names looked up in the decl-specifier-seq that we
16911 did not check, check them now. We must wait until we are in the
16912 scope of the function to perform the checks, since the function
16913 might be a friend. */
16914 perform_deferred_access_checks ();
16918 /* Skip the entire function. */
16919 cp_parser_skip_to_end_of_block_or_statement (parser
);
16920 fn
= error_mark_node
;
16922 else if (DECL_INITIAL (current_function_decl
) != error_mark_node
)
16924 /* Seen already, skip it. An error message has already been output. */
16925 cp_parser_skip_to_end_of_block_or_statement (parser
);
16926 fn
= current_function_decl
;
16927 current_function_decl
= NULL_TREE
;
16928 /* If this is a function from a class, pop the nested class. */
16929 if (current_class_name
)
16930 pop_nested_class ();
16933 fn
= cp_parser_function_definition_after_declarator (parser
,
16934 /*inline_p=*/false);
16939 /* Parse the part of a function-definition that follows the
16940 declarator. INLINE_P is TRUE iff this function is an inline
16941 function defined with a class-specifier.
16943 Returns the function defined. */
16946 cp_parser_function_definition_after_declarator (cp_parser
* parser
,
16950 bool ctor_initializer_p
= false;
16951 bool saved_in_unbraced_linkage_specification_p
;
16952 bool saved_in_function_body
;
16953 unsigned saved_num_template_parameter_lists
;
16955 saved_in_function_body
= parser
->in_function_body
;
16956 parser
->in_function_body
= true;
16957 /* If the next token is `return', then the code may be trying to
16958 make use of the "named return value" extension that G++ used to
16960 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_RETURN
))
16962 /* Consume the `return' keyword. */
16963 cp_lexer_consume_token (parser
->lexer
);
16964 /* Look for the identifier that indicates what value is to be
16966 cp_parser_identifier (parser
);
16967 /* Issue an error message. */
16968 error ("named return values are no longer supported");
16969 /* Skip tokens until we reach the start of the function body. */
16972 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
16973 if (token
->type
== CPP_OPEN_BRACE
16974 || token
->type
== CPP_EOF
16975 || token
->type
== CPP_PRAGMA_EOL
)
16977 cp_lexer_consume_token (parser
->lexer
);
16980 /* The `extern' in `extern "C" void f () { ... }' does not apply to
16981 anything declared inside `f'. */
16982 saved_in_unbraced_linkage_specification_p
16983 = parser
->in_unbraced_linkage_specification_p
;
16984 parser
->in_unbraced_linkage_specification_p
= false;
16985 /* Inside the function, surrounding template-parameter-lists do not
16987 saved_num_template_parameter_lists
16988 = parser
->num_template_parameter_lists
;
16989 parser
->num_template_parameter_lists
= 0;
16990 /* If the next token is `try', then we are looking at a
16991 function-try-block. */
16992 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_TRY
))
16993 ctor_initializer_p
= cp_parser_function_try_block (parser
);
16994 /* A function-try-block includes the function-body, so we only do
16995 this next part if we're not processing a function-try-block. */
16998 = cp_parser_ctor_initializer_opt_and_function_body (parser
);
17000 /* Finish the function. */
17001 fn
= finish_function ((ctor_initializer_p
? 1 : 0) |
17002 (inline_p
? 2 : 0));
17003 /* Generate code for it, if necessary. */
17004 expand_or_defer_fn (fn
);
17005 /* Restore the saved values. */
17006 parser
->in_unbraced_linkage_specification_p
17007 = saved_in_unbraced_linkage_specification_p
;
17008 parser
->num_template_parameter_lists
17009 = saved_num_template_parameter_lists
;
17010 parser
->in_function_body
= saved_in_function_body
;
17015 /* Parse a template-declaration, assuming that the `export' (and
17016 `extern') keywords, if present, has already been scanned. MEMBER_P
17017 is as for cp_parser_template_declaration. */
17020 cp_parser_template_declaration_after_export (cp_parser
* parser
, bool member_p
)
17022 tree decl
= NULL_TREE
;
17023 VEC (deferred_access_check
,gc
) *checks
;
17024 tree parameter_list
;
17025 bool friend_p
= false;
17026 bool need_lang_pop
;
17028 /* Look for the `template' keyword. */
17029 if (!cp_parser_require_keyword (parser
, RID_TEMPLATE
, "%<template%>"))
17033 if (!cp_parser_require (parser
, CPP_LESS
, "%<<%>"))
17035 if (at_class_scope_p () && current_function_decl
)
17037 /* 14.5.2.2 [temp.mem]
17039 A local class shall not have member templates. */
17040 error ("invalid declaration of member template in local class");
17041 cp_parser_skip_to_end_of_block_or_statement (parser
);
17046 A template ... shall not have C linkage. */
17047 if (current_lang_name
== lang_name_c
)
17049 error ("template with C linkage");
17050 /* Give it C++ linkage to avoid confusing other parts of the
17052 push_lang_context (lang_name_cplusplus
);
17053 need_lang_pop
= true;
17056 need_lang_pop
= false;
17058 /* We cannot perform access checks on the template parameter
17059 declarations until we know what is being declared, just as we
17060 cannot check the decl-specifier list. */
17061 push_deferring_access_checks (dk_deferred
);
17063 /* If the next token is `>', then we have an invalid
17064 specialization. Rather than complain about an invalid template
17065 parameter, issue an error message here. */
17066 if (cp_lexer_next_token_is (parser
->lexer
, CPP_GREATER
))
17068 cp_parser_error (parser
, "invalid explicit specialization");
17069 begin_specialization ();
17070 parameter_list
= NULL_TREE
;
17073 /* Parse the template parameters. */
17074 parameter_list
= cp_parser_template_parameter_list (parser
);
17076 /* Get the deferred access checks from the parameter list. These
17077 will be checked once we know what is being declared, as for a
17078 member template the checks must be performed in the scope of the
17079 class containing the member. */
17080 checks
= get_deferred_access_checks ();
17082 /* Look for the `>'. */
17083 cp_parser_skip_to_end_of_template_parameter_list (parser
);
17084 /* We just processed one more parameter list. */
17085 ++parser
->num_template_parameter_lists
;
17086 /* If the next token is `template', there are more template
17088 if (cp_lexer_next_token_is_keyword (parser
->lexer
,
17090 cp_parser_template_declaration_after_export (parser
, member_p
);
17093 /* There are no access checks when parsing a template, as we do not
17094 know if a specialization will be a friend. */
17095 push_deferring_access_checks (dk_no_check
);
17096 decl
= cp_parser_single_declaration (parser
,
17099 /*explicit_specialization_p=*/false,
17101 pop_deferring_access_checks ();
17103 /* If this is a member template declaration, let the front
17105 if (member_p
&& !friend_p
&& decl
)
17107 if (TREE_CODE (decl
) == TYPE_DECL
)
17108 cp_parser_check_access_in_redeclaration (decl
);
17110 decl
= finish_member_template_decl (decl
);
17112 else if (friend_p
&& decl
&& TREE_CODE (decl
) == TYPE_DECL
)
17113 make_friend_class (current_class_type
, TREE_TYPE (decl
),
17114 /*complain=*/true);
17116 /* We are done with the current parameter list. */
17117 --parser
->num_template_parameter_lists
;
17119 pop_deferring_access_checks ();
17122 finish_template_decl (parameter_list
);
17124 /* Register member declarations. */
17125 if (member_p
&& !friend_p
&& decl
&& !DECL_CLASS_TEMPLATE_P (decl
))
17126 finish_member_declaration (decl
);
17127 /* For the erroneous case of a template with C linkage, we pushed an
17128 implicit C++ linkage scope; exit that scope now. */
17130 pop_lang_context ();
17131 /* If DECL is a function template, we must return to parse it later.
17132 (Even though there is no definition, there might be default
17133 arguments that need handling.) */
17134 if (member_p
&& decl
17135 && (TREE_CODE (decl
) == FUNCTION_DECL
17136 || DECL_FUNCTION_TEMPLATE_P (decl
)))
17137 TREE_VALUE (parser
->unparsed_functions_queues
)
17138 = tree_cons (NULL_TREE
, decl
,
17139 TREE_VALUE (parser
->unparsed_functions_queues
));
17142 /* Perform the deferred access checks from a template-parameter-list.
17143 CHECKS is a TREE_LIST of access checks, as returned by
17144 get_deferred_access_checks. */
17147 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check
,gc
)* checks
)
17149 ++processing_template_parmlist
;
17150 perform_access_checks (checks
);
17151 --processing_template_parmlist
;
17154 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
17155 `function-definition' sequence. MEMBER_P is true, this declaration
17156 appears in a class scope.
17158 Returns the DECL for the declared entity. If FRIEND_P is non-NULL,
17159 *FRIEND_P is set to TRUE iff the declaration is a friend. */
17162 cp_parser_single_declaration (cp_parser
* parser
,
17163 VEC (deferred_access_check
,gc
)* checks
,
17165 bool explicit_specialization_p
,
17168 int declares_class_or_enum
;
17169 tree decl
= NULL_TREE
;
17170 cp_decl_specifier_seq decl_specifiers
;
17171 bool function_definition_p
= false;
17173 /* This function is only used when processing a template
17175 gcc_assert (innermost_scope_kind () == sk_template_parms
17176 || innermost_scope_kind () == sk_template_spec
);
17178 /* Defer access checks until we know what is being declared. */
17179 push_deferring_access_checks (dk_deferred
);
17181 /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
17183 cp_parser_decl_specifier_seq (parser
,
17184 CP_PARSER_FLAGS_OPTIONAL
,
17186 &declares_class_or_enum
);
17188 *friend_p
= cp_parser_friend_p (&decl_specifiers
);
17190 /* There are no template typedefs. */
17191 if (decl_specifiers
.specs
[(int) ds_typedef
])
17193 error ("template declaration of %qs", "typedef");
17194 decl
= error_mark_node
;
17197 /* Gather up the access checks that occurred the
17198 decl-specifier-seq. */
17199 stop_deferring_access_checks ();
17201 /* Check for the declaration of a template class. */
17202 if (declares_class_or_enum
)
17204 if (cp_parser_declares_only_class_p (parser
))
17206 decl
= shadow_tag (&decl_specifiers
);
17211 friend template <typename T> struct A<T>::B;
17214 A<T>::B will be represented by a TYPENAME_TYPE, and
17215 therefore not recognized by shadow_tag. */
17216 if (friend_p
&& *friend_p
17218 && decl_specifiers
.type
17219 && TYPE_P (decl_specifiers
.type
))
17220 decl
= decl_specifiers
.type
;
17222 if (decl
&& decl
!= error_mark_node
)
17223 decl
= TYPE_NAME (decl
);
17225 decl
= error_mark_node
;
17227 /* Perform access checks for template parameters. */
17228 cp_parser_perform_template_parameter_access_checks (checks
);
17231 /* If it's not a template class, try for a template function. If
17232 the next token is a `;', then this declaration does not declare
17233 anything. But, if there were errors in the decl-specifiers, then
17234 the error might well have come from an attempted class-specifier.
17235 In that case, there's no need to warn about a missing declarator. */
17237 && (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
)
17238 || decl_specifiers
.type
!= error_mark_node
))
17240 decl
= cp_parser_init_declarator (parser
,
17243 /*function_definition_allowed_p=*/true,
17245 declares_class_or_enum
,
17246 &function_definition_p
);
17248 /* 7.1.1-1 [dcl.stc]
17250 A storage-class-specifier shall not be specified in an explicit
17251 specialization... */
17253 && explicit_specialization_p
17254 && decl_specifiers
.storage_class
!= sc_none
)
17256 error ("explicit template specialization cannot have a storage class");
17257 decl
= error_mark_node
;
17261 pop_deferring_access_checks ();
17263 /* Clear any current qualification; whatever comes next is the start
17264 of something new. */
17265 parser
->scope
= NULL_TREE
;
17266 parser
->qualifying_scope
= NULL_TREE
;
17267 parser
->object_scope
= NULL_TREE
;
17268 /* Look for a trailing `;' after the declaration. */
17269 if (!function_definition_p
17270 && (decl
== error_mark_node
17271 || !cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>")))
17272 cp_parser_skip_to_end_of_block_or_statement (parser
);
17277 /* Parse a cast-expression that is not the operand of a unary "&". */
17280 cp_parser_simple_cast_expression (cp_parser
*parser
)
17282 return cp_parser_cast_expression (parser
, /*address_p=*/false,
17286 /* Parse a functional cast to TYPE. Returns an expression
17287 representing the cast. */
17290 cp_parser_functional_cast (cp_parser
* parser
, tree type
)
17292 tree expression_list
;
17296 = cp_parser_parenthesized_expression_list (parser
, false,
17298 /*allow_expansion_p=*/true,
17299 /*non_constant_p=*/NULL
);
17301 cast
= build_functional_cast (type
, expression_list
,
17302 tf_warning_or_error
);
17303 /* [expr.const]/1: In an integral constant expression "only type
17304 conversions to integral or enumeration type can be used". */
17305 if (TREE_CODE (type
) == TYPE_DECL
)
17306 type
= TREE_TYPE (type
);
17307 if (cast
!= error_mark_node
17308 && !cast_valid_in_integral_constant_expression_p (type
)
17309 && (cp_parser_non_integral_constant_expression
17310 (parser
, "a call to a constructor")))
17311 return error_mark_node
;
17315 /* Save the tokens that make up the body of a member function defined
17316 in a class-specifier. The DECL_SPECIFIERS and DECLARATOR have
17317 already been parsed. The ATTRIBUTES are any GNU "__attribute__"
17318 specifiers applied to the declaration. Returns the FUNCTION_DECL
17319 for the member function. */
17322 cp_parser_save_member_function_body (cp_parser
* parser
,
17323 cp_decl_specifier_seq
*decl_specifiers
,
17324 cp_declarator
*declarator
,
17331 /* Create the function-declaration. */
17332 fn
= start_method (decl_specifiers
, declarator
, attributes
);
17333 /* If something went badly wrong, bail out now. */
17334 if (fn
== error_mark_node
)
17336 /* If there's a function-body, skip it. */
17337 if (cp_parser_token_starts_function_definition_p
17338 (cp_lexer_peek_token (parser
->lexer
)))
17339 cp_parser_skip_to_end_of_block_or_statement (parser
);
17340 return error_mark_node
;
17343 /* Remember it, if there default args to post process. */
17344 cp_parser_save_default_args (parser
, fn
);
17346 /* Save away the tokens that make up the body of the
17348 first
= parser
->lexer
->next_token
;
17349 cp_parser_cache_group (parser
, CPP_CLOSE_BRACE
, /*depth=*/0);
17350 /* Handle function try blocks. */
17351 while (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_CATCH
))
17352 cp_parser_cache_group (parser
, CPP_CLOSE_BRACE
, /*depth=*/0);
17353 last
= parser
->lexer
->next_token
;
17355 /* Save away the inline definition; we will process it when the
17356 class is complete. */
17357 DECL_PENDING_INLINE_INFO (fn
) = cp_token_cache_new (first
, last
);
17358 DECL_PENDING_INLINE_P (fn
) = 1;
17360 /* We need to know that this was defined in the class, so that
17361 friend templates are handled correctly. */
17362 DECL_INITIALIZED_IN_CLASS_P (fn
) = 1;
17364 /* We're done with the inline definition. */
17365 finish_method (fn
);
17367 /* Add FN to the queue of functions to be parsed later. */
17368 TREE_VALUE (parser
->unparsed_functions_queues
)
17369 = tree_cons (NULL_TREE
, fn
,
17370 TREE_VALUE (parser
->unparsed_functions_queues
));
17375 /* Parse a template-argument-list, as well as the trailing ">" (but
17376 not the opening ">"). See cp_parser_template_argument_list for the
17380 cp_parser_enclosed_template_argument_list (cp_parser
* parser
)
17384 tree saved_qualifying_scope
;
17385 tree saved_object_scope
;
17386 bool saved_greater_than_is_operator_p
;
17387 bool saved_skip_evaluation
;
17391 When parsing a template-id, the first non-nested `>' is taken as
17392 the end of the template-argument-list rather than a greater-than
17394 saved_greater_than_is_operator_p
17395 = parser
->greater_than_is_operator_p
;
17396 parser
->greater_than_is_operator_p
= false;
17397 /* Parsing the argument list may modify SCOPE, so we save it
17399 saved_scope
= parser
->scope
;
17400 saved_qualifying_scope
= parser
->qualifying_scope
;
17401 saved_object_scope
= parser
->object_scope
;
17402 /* We need to evaluate the template arguments, even though this
17403 template-id may be nested within a "sizeof". */
17404 saved_skip_evaluation
= skip_evaluation
;
17405 skip_evaluation
= false;
17406 /* Parse the template-argument-list itself. */
17407 if (cp_lexer_next_token_is (parser
->lexer
, CPP_GREATER
)
17408 || cp_lexer_next_token_is (parser
->lexer
, CPP_RSHIFT
))
17409 arguments
= NULL_TREE
;
17411 arguments
= cp_parser_template_argument_list (parser
);
17412 /* Look for the `>' that ends the template-argument-list. If we find
17413 a '>>' instead, it's probably just a typo. */
17414 if (cp_lexer_next_token_is (parser
->lexer
, CPP_RSHIFT
))
17416 if (cxx_dialect
!= cxx98
)
17418 /* In C++0x, a `>>' in a template argument list or cast
17419 expression is considered to be two separate `>'
17420 tokens. So, change the current token to a `>', but don't
17421 consume it: it will be consumed later when the outer
17422 template argument list (or cast expression) is parsed.
17423 Note that this replacement of `>' for `>>' is necessary
17424 even if we are parsing tentatively: in the tentative
17425 case, after calling
17426 cp_parser_enclosed_template_argument_list we will always
17427 throw away all of the template arguments and the first
17428 closing `>', either because the template argument list
17429 was erroneous or because we are replacing those tokens
17430 with a CPP_TEMPLATE_ID token. The second `>' (which will
17431 not have been thrown away) is needed either to close an
17432 outer template argument list or to complete a new-style
17434 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
17435 token
->type
= CPP_GREATER
;
17437 else if (!saved_greater_than_is_operator_p
)
17439 /* If we're in a nested template argument list, the '>>' has
17440 to be a typo for '> >'. We emit the error message, but we
17441 continue parsing and we push a '>' as next token, so that
17442 the argument list will be parsed correctly. Note that the
17443 global source location is still on the token before the
17444 '>>', so we need to say explicitly where we want it. */
17445 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
17446 error ("%H%<>>%> should be %<> >%> "
17447 "within a nested template argument list",
17450 token
->type
= CPP_GREATER
;
17454 /* If this is not a nested template argument list, the '>>'
17455 is a typo for '>'. Emit an error message and continue.
17456 Same deal about the token location, but here we can get it
17457 right by consuming the '>>' before issuing the diagnostic. */
17458 cp_lexer_consume_token (parser
->lexer
);
17459 error ("spurious %<>>%>, use %<>%> to terminate "
17460 "a template argument list");
17464 cp_parser_skip_to_end_of_template_parameter_list (parser
);
17465 /* The `>' token might be a greater-than operator again now. */
17466 parser
->greater_than_is_operator_p
17467 = saved_greater_than_is_operator_p
;
17468 /* Restore the SAVED_SCOPE. */
17469 parser
->scope
= saved_scope
;
17470 parser
->qualifying_scope
= saved_qualifying_scope
;
17471 parser
->object_scope
= saved_object_scope
;
17472 skip_evaluation
= saved_skip_evaluation
;
17477 /* MEMBER_FUNCTION is a member function, or a friend. If default
17478 arguments, or the body of the function have not yet been parsed,
17482 cp_parser_late_parsing_for_member (cp_parser
* parser
, tree member_function
)
17484 /* If this member is a template, get the underlying
17486 if (DECL_FUNCTION_TEMPLATE_P (member_function
))
17487 member_function
= DECL_TEMPLATE_RESULT (member_function
);
17489 /* There should not be any class definitions in progress at this
17490 point; the bodies of members are only parsed outside of all class
17492 gcc_assert (parser
->num_classes_being_defined
== 0);
17493 /* While we're parsing the member functions we might encounter more
17494 classes. We want to handle them right away, but we don't want
17495 them getting mixed up with functions that are currently in the
17497 parser
->unparsed_functions_queues
17498 = tree_cons (NULL_TREE
, NULL_TREE
, parser
->unparsed_functions_queues
);
17500 /* Make sure that any template parameters are in scope. */
17501 maybe_begin_member_template_processing (member_function
);
17503 /* If the body of the function has not yet been parsed, parse it
17505 if (DECL_PENDING_INLINE_P (member_function
))
17507 tree function_scope
;
17508 cp_token_cache
*tokens
;
17510 /* The function is no longer pending; we are processing it. */
17511 tokens
= DECL_PENDING_INLINE_INFO (member_function
);
17512 DECL_PENDING_INLINE_INFO (member_function
) = NULL
;
17513 DECL_PENDING_INLINE_P (member_function
) = 0;
17515 /* If this is a local class, enter the scope of the containing
17517 function_scope
= current_function_decl
;
17518 if (function_scope
)
17519 push_function_context ();
17521 /* Push the body of the function onto the lexer stack. */
17522 cp_parser_push_lexer_for_tokens (parser
, tokens
);
17524 /* Let the front end know that we going to be defining this
17526 start_preparsed_function (member_function
, NULL_TREE
,
17527 SF_PRE_PARSED
| SF_INCLASS_INLINE
);
17529 /* Don't do access checking if it is a templated function. */
17530 if (processing_template_decl
)
17531 push_deferring_access_checks (dk_no_check
);
17533 /* Now, parse the body of the function. */
17534 cp_parser_function_definition_after_declarator (parser
,
17535 /*inline_p=*/true);
17537 if (processing_template_decl
)
17538 pop_deferring_access_checks ();
17540 /* Leave the scope of the containing function. */
17541 if (function_scope
)
17542 pop_function_context ();
17543 cp_parser_pop_lexer (parser
);
17546 /* Remove any template parameters from the symbol table. */
17547 maybe_end_member_template_processing ();
17549 /* Restore the queue. */
17550 parser
->unparsed_functions_queues
17551 = TREE_CHAIN (parser
->unparsed_functions_queues
);
17554 /* If DECL contains any default args, remember it on the unparsed
17555 functions queue. */
17558 cp_parser_save_default_args (cp_parser
* parser
, tree decl
)
17562 for (probe
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
17564 probe
= TREE_CHAIN (probe
))
17565 if (TREE_PURPOSE (probe
))
17567 TREE_PURPOSE (parser
->unparsed_functions_queues
)
17568 = tree_cons (current_class_type
, decl
,
17569 TREE_PURPOSE (parser
->unparsed_functions_queues
));
17574 /* FN is a FUNCTION_DECL which may contains a parameter with an
17575 unparsed DEFAULT_ARG. Parse the default args now. This function
17576 assumes that the current scope is the scope in which the default
17577 argument should be processed. */
17580 cp_parser_late_parsing_default_args (cp_parser
*parser
, tree fn
)
17582 bool saved_local_variables_forbidden_p
;
17585 /* While we're parsing the default args, we might (due to the
17586 statement expression extension) encounter more classes. We want
17587 to handle them right away, but we don't want them getting mixed
17588 up with default args that are currently in the queue. */
17589 parser
->unparsed_functions_queues
17590 = tree_cons (NULL_TREE
, NULL_TREE
, parser
->unparsed_functions_queues
);
17592 /* Local variable names (and the `this' keyword) may not appear
17593 in a default argument. */
17594 saved_local_variables_forbidden_p
= parser
->local_variables_forbidden_p
;
17595 parser
->local_variables_forbidden_p
= true;
17597 for (parm
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
17599 parm
= TREE_CHAIN (parm
))
17601 cp_token_cache
*tokens
;
17602 tree default_arg
= TREE_PURPOSE (parm
);
17604 VEC(tree
,gc
) *insts
;
17611 if (TREE_CODE (default_arg
) != DEFAULT_ARG
)
17612 /* This can happen for a friend declaration for a function
17613 already declared with default arguments. */
17616 /* Push the saved tokens for the default argument onto the parser's
17618 tokens
= DEFARG_TOKENS (default_arg
);
17619 cp_parser_push_lexer_for_tokens (parser
, tokens
);
17621 /* Parse the assignment-expression. */
17622 parsed_arg
= cp_parser_assignment_expression (parser
, /*cast_p=*/false);
17624 if (!processing_template_decl
)
17625 parsed_arg
= check_default_argument (TREE_VALUE (parm
), parsed_arg
);
17627 TREE_PURPOSE (parm
) = parsed_arg
;
17629 /* Update any instantiations we've already created. */
17630 for (insts
= DEFARG_INSTANTIATIONS (default_arg
), ix
= 0;
17631 VEC_iterate (tree
, insts
, ix
, copy
); ix
++)
17632 TREE_PURPOSE (copy
) = parsed_arg
;
17634 /* If the token stream has not been completely used up, then
17635 there was extra junk after the end of the default
17637 if (!cp_lexer_next_token_is (parser
->lexer
, CPP_EOF
))
17638 cp_parser_error (parser
, "expected %<,%>");
17640 /* Revert to the main lexer. */
17641 cp_parser_pop_lexer (parser
);
17644 /* Make sure no default arg is missing. */
17645 check_default_args (fn
);
17647 /* Restore the state of local_variables_forbidden_p. */
17648 parser
->local_variables_forbidden_p
= saved_local_variables_forbidden_p
;
17650 /* Restore the queue. */
17651 parser
->unparsed_functions_queues
17652 = TREE_CHAIN (parser
->unparsed_functions_queues
);
17655 /* Parse the operand of `sizeof' (or a similar operator). Returns
17656 either a TYPE or an expression, depending on the form of the
17657 input. The KEYWORD indicates which kind of expression we have
17661 cp_parser_sizeof_operand (cp_parser
* parser
, enum rid keyword
)
17663 tree expr
= NULL_TREE
;
17664 const char *saved_message
;
17666 bool saved_integral_constant_expression_p
;
17667 bool saved_non_integral_constant_expression_p
;
17668 bool pack_expansion_p
= false;
17670 /* Types cannot be defined in a `sizeof' expression. Save away the
17672 saved_message
= parser
->type_definition_forbidden_message
;
17673 /* And create the new one. */
17674 tmp
= concat ("types may not be defined in %<",
17675 IDENTIFIER_POINTER (ridpointers
[keyword
]),
17676 "%> expressions", NULL
);
17677 parser
->type_definition_forbidden_message
= tmp
;
17679 /* The restrictions on constant-expressions do not apply inside
17680 sizeof expressions. */
17681 saved_integral_constant_expression_p
17682 = parser
->integral_constant_expression_p
;
17683 saved_non_integral_constant_expression_p
17684 = parser
->non_integral_constant_expression_p
;
17685 parser
->integral_constant_expression_p
= false;
17687 /* If it's a `...', then we are computing the length of a parameter
17689 if (keyword
== RID_SIZEOF
17690 && cp_lexer_next_token_is (parser
->lexer
, CPP_ELLIPSIS
))
17692 /* Consume the `...'. */
17693 cp_lexer_consume_token (parser
->lexer
);
17694 maybe_warn_variadic_templates ();
17696 /* Note that this is an expansion. */
17697 pack_expansion_p
= true;
17700 /* Do not actually evaluate the expression. */
17702 /* If it's a `(', then we might be looking at the type-id
17704 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_PAREN
))
17707 bool saved_in_type_id_in_expr_p
;
17709 /* We can't be sure yet whether we're looking at a type-id or an
17711 cp_parser_parse_tentatively (parser
);
17712 /* Consume the `('. */
17713 cp_lexer_consume_token (parser
->lexer
);
17714 /* Parse the type-id. */
17715 saved_in_type_id_in_expr_p
= parser
->in_type_id_in_expr_p
;
17716 parser
->in_type_id_in_expr_p
= true;
17717 type
= cp_parser_type_id (parser
);
17718 parser
->in_type_id_in_expr_p
= saved_in_type_id_in_expr_p
;
17719 /* Now, look for the trailing `)'. */
17720 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
17721 /* If all went well, then we're done. */
17722 if (cp_parser_parse_definitely (parser
))
17724 cp_decl_specifier_seq decl_specs
;
17726 /* Build a trivial decl-specifier-seq. */
17727 clear_decl_specs (&decl_specs
);
17728 decl_specs
.type
= type
;
17730 /* Call grokdeclarator to figure out what type this is. */
17731 expr
= grokdeclarator (NULL
,
17735 /*attrlist=*/NULL
);
17739 /* If the type-id production did not work out, then we must be
17740 looking at the unary-expression production. */
17742 expr
= cp_parser_unary_expression (parser
, /*address_p=*/false,
17745 if (pack_expansion_p
)
17746 /* Build a pack expansion. */
17747 expr
= make_pack_expansion (expr
);
17749 /* Go back to evaluating expressions. */
17752 /* Free the message we created. */
17754 /* And restore the old one. */
17755 parser
->type_definition_forbidden_message
= saved_message
;
17756 parser
->integral_constant_expression_p
17757 = saved_integral_constant_expression_p
;
17758 parser
->non_integral_constant_expression_p
17759 = saved_non_integral_constant_expression_p
;
17764 /* If the current declaration has no declarator, return true. */
17767 cp_parser_declares_only_class_p (cp_parser
*parser
)
17769 /* If the next token is a `;' or a `,' then there is no
17771 return (cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
)
17772 || cp_lexer_next_token_is (parser
->lexer
, CPP_COMMA
));
17775 /* Update the DECL_SPECS to reflect the storage class indicated by
17779 cp_parser_set_storage_class (cp_parser
*parser
,
17780 cp_decl_specifier_seq
*decl_specs
,
17783 cp_storage_class storage_class
;
17785 if (parser
->in_unbraced_linkage_specification_p
)
17787 error ("invalid use of %qD in linkage specification",
17788 ridpointers
[keyword
]);
17791 else if (decl_specs
->storage_class
!= sc_none
)
17793 decl_specs
->conflicting_specifiers_p
= true;
17797 if ((keyword
== RID_EXTERN
|| keyword
== RID_STATIC
)
17798 && decl_specs
->specs
[(int) ds_thread
])
17800 error ("%<__thread%> before %qD", ridpointers
[keyword
]);
17801 decl_specs
->specs
[(int) ds_thread
] = 0;
17807 storage_class
= sc_auto
;
17810 storage_class
= sc_register
;
17813 storage_class
= sc_static
;
17816 storage_class
= sc_extern
;
17819 storage_class
= sc_mutable
;
17822 gcc_unreachable ();
17824 decl_specs
->storage_class
= storage_class
;
17826 /* A storage class specifier cannot be applied alongside a typedef
17827 specifier. If there is a typedef specifier present then set
17828 conflicting_specifiers_p which will trigger an error later
17829 on in grokdeclarator. */
17830 if (decl_specs
->specs
[(int)ds_typedef
])
17831 decl_specs
->conflicting_specifiers_p
= true;
17834 /* Update the DECL_SPECS to reflect the TYPE_SPEC. If USER_DEFINED_P
17835 is true, the type is a user-defined type; otherwise it is a
17836 built-in type specified by a keyword. */
17839 cp_parser_set_decl_spec_type (cp_decl_specifier_seq
*decl_specs
,
17841 bool user_defined_p
)
17843 decl_specs
->any_specifiers_p
= true;
17845 /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
17846 (with, for example, in "typedef int wchar_t;") we remember that
17847 this is what happened. In system headers, we ignore these
17848 declarations so that G++ can work with system headers that are not
17850 if (decl_specs
->specs
[(int) ds_typedef
]
17852 && (type_spec
== boolean_type_node
17853 || type_spec
== char16_type_node
17854 || type_spec
== char32_type_node
17855 || type_spec
== wchar_type_node
)
17856 && (decl_specs
->type
17857 || decl_specs
->specs
[(int) ds_long
]
17858 || decl_specs
->specs
[(int) ds_short
]
17859 || decl_specs
->specs
[(int) ds_unsigned
]
17860 || decl_specs
->specs
[(int) ds_signed
]))
17862 decl_specs
->redefined_builtin_type
= type_spec
;
17863 if (!decl_specs
->type
)
17865 decl_specs
->type
= type_spec
;
17866 decl_specs
->user_defined_type_p
= false;
17869 else if (decl_specs
->type
)
17870 decl_specs
->multiple_types_p
= true;
17873 decl_specs
->type
= type_spec
;
17874 decl_specs
->user_defined_type_p
= user_defined_p
;
17875 decl_specs
->redefined_builtin_type
= NULL_TREE
;
17879 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
17880 Returns TRUE iff `friend' appears among the DECL_SPECIFIERS. */
17883 cp_parser_friend_p (const cp_decl_specifier_seq
*decl_specifiers
)
17885 return decl_specifiers
->specs
[(int) ds_friend
] != 0;
17888 /* If the next token is of the indicated TYPE, consume it. Otherwise,
17889 issue an error message indicating that TOKEN_DESC was expected.
17891 Returns the token consumed, if the token had the appropriate type.
17892 Otherwise, returns NULL. */
17895 cp_parser_require (cp_parser
* parser
,
17896 enum cpp_ttype type
,
17897 const char* token_desc
)
17899 if (cp_lexer_next_token_is (parser
->lexer
, type
))
17900 return cp_lexer_consume_token (parser
->lexer
);
17903 /* Output the MESSAGE -- unless we're parsing tentatively. */
17904 if (!cp_parser_simulate_error (parser
))
17906 char *message
= concat ("expected ", token_desc
, NULL
);
17907 cp_parser_error (parser
, message
);
17914 /* An error message is produced if the next token is not '>'.
17915 All further tokens are skipped until the desired token is
17916 found or '{', '}', ';' or an unbalanced ')' or ']'. */
17919 cp_parser_skip_to_end_of_template_parameter_list (cp_parser
* parser
)
17921 /* Current level of '< ... >'. */
17922 unsigned level
= 0;
17923 /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'. */
17924 unsigned nesting_depth
= 0;
17926 /* Are we ready, yet? If not, issue error message. */
17927 if (cp_parser_require (parser
, CPP_GREATER
, "%<>%>"))
17930 /* Skip tokens until the desired token is found. */
17933 /* Peek at the next token. */
17934 switch (cp_lexer_peek_token (parser
->lexer
)->type
)
17937 if (!nesting_depth
)
17942 if (cxx_dialect
== cxx98
)
17943 /* C++0x views the `>>' operator as two `>' tokens, but
17946 else if (!nesting_depth
&& level
-- == 0)
17948 /* We've hit a `>>' where the first `>' closes the
17949 template argument list, and the second `>' is
17950 spurious. Just consume the `>>' and stop; we've
17951 already produced at least one error. */
17952 cp_lexer_consume_token (parser
->lexer
);
17955 /* Fall through for C++0x, so we handle the second `>' in
17959 if (!nesting_depth
&& level
-- == 0)
17961 /* We've reached the token we want, consume it and stop. */
17962 cp_lexer_consume_token (parser
->lexer
);
17967 case CPP_OPEN_PAREN
:
17968 case CPP_OPEN_SQUARE
:
17972 case CPP_CLOSE_PAREN
:
17973 case CPP_CLOSE_SQUARE
:
17974 if (nesting_depth
-- == 0)
17979 case CPP_PRAGMA_EOL
:
17980 case CPP_SEMICOLON
:
17981 case CPP_OPEN_BRACE
:
17982 case CPP_CLOSE_BRACE
:
17983 /* The '>' was probably forgotten, don't look further. */
17990 /* Consume this token. */
17991 cp_lexer_consume_token (parser
->lexer
);
17995 /* If the next token is the indicated keyword, consume it. Otherwise,
17996 issue an error message indicating that TOKEN_DESC was expected.
17998 Returns the token consumed, if the token had the appropriate type.
17999 Otherwise, returns NULL. */
18002 cp_parser_require_keyword (cp_parser
* parser
,
18004 const char* token_desc
)
18006 cp_token
*token
= cp_parser_require (parser
, CPP_KEYWORD
, token_desc
);
18008 if (token
&& token
->keyword
!= keyword
)
18010 dyn_string_t error_msg
;
18012 /* Format the error message. */
18013 error_msg
= dyn_string_new (0);
18014 dyn_string_append_cstr (error_msg
, "expected ");
18015 dyn_string_append_cstr (error_msg
, token_desc
);
18016 cp_parser_error (parser
, error_msg
->s
);
18017 dyn_string_delete (error_msg
);
18024 /* Returns TRUE iff TOKEN is a token that can begin the body of a
18025 function-definition. */
18028 cp_parser_token_starts_function_definition_p (cp_token
* token
)
18030 return (/* An ordinary function-body begins with an `{'. */
18031 token
->type
== CPP_OPEN_BRACE
18032 /* A ctor-initializer begins with a `:'. */
18033 || token
->type
== CPP_COLON
18034 /* A function-try-block begins with `try'. */
18035 || token
->keyword
== RID_TRY
18036 /* The named return value extension begins with `return'. */
18037 || token
->keyword
== RID_RETURN
);
18040 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
18044 cp_parser_next_token_starts_class_definition_p (cp_parser
*parser
)
18048 token
= cp_lexer_peek_token (parser
->lexer
);
18049 return (token
->type
== CPP_OPEN_BRACE
|| token
->type
== CPP_COLON
);
18052 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
18053 C++0x) ending a template-argument. */
18056 cp_parser_next_token_ends_template_argument_p (cp_parser
*parser
)
18060 token
= cp_lexer_peek_token (parser
->lexer
);
18061 return (token
->type
== CPP_COMMA
18062 || token
->type
== CPP_GREATER
18063 || token
->type
== CPP_ELLIPSIS
18064 || ((cxx_dialect
!= cxx98
) && token
->type
== CPP_RSHIFT
));
18067 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
18068 (n+1)-th is a ":" (which is a possible digraph typo for "< ::"). */
18071 cp_parser_nth_token_starts_template_argument_list_p (cp_parser
* parser
,
18076 token
= cp_lexer_peek_nth_token (parser
->lexer
, n
);
18077 if (token
->type
== CPP_LESS
)
18079 /* Check for the sequence `<::' in the original code. It would be lexed as
18080 `[:', where `[' is a digraph, and there is no whitespace before
18082 if (token
->type
== CPP_OPEN_SQUARE
&& token
->flags
& DIGRAPH
)
18085 token2
= cp_lexer_peek_nth_token (parser
->lexer
, n
+1);
18086 if (token2
->type
== CPP_COLON
&& !(token2
->flags
& PREV_WHITE
))
18092 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
18093 or none_type otherwise. */
18095 static enum tag_types
18096 cp_parser_token_is_class_key (cp_token
* token
)
18098 switch (token
->keyword
)
18103 return record_type
;
18112 /* Issue an error message if the CLASS_KEY does not match the TYPE. */
18115 cp_parser_check_class_key (enum tag_types class_key
, tree type
)
18117 if ((TREE_CODE (type
) == UNION_TYPE
) != (class_key
== union_type
))
18118 pedwarn ("%qs tag used in naming %q#T",
18119 class_key
== union_type
? "union"
18120 : class_key
== record_type
? "struct" : "class",
18124 /* Issue an error message if DECL is redeclared with different
18125 access than its original declaration [class.access.spec/3].
18126 This applies to nested classes and nested class templates.
18130 cp_parser_check_access_in_redeclaration (tree decl
)
18132 if (!decl
|| !CLASS_TYPE_P (TREE_TYPE (decl
)))
18135 if ((TREE_PRIVATE (decl
)
18136 != (current_access_specifier
== access_private_node
))
18137 || (TREE_PROTECTED (decl
)
18138 != (current_access_specifier
== access_protected_node
)))
18139 error ("%qD redeclared with different access", decl
);
18142 /* Look for the `template' keyword, as a syntactic disambiguator.
18143 Return TRUE iff it is present, in which case it will be
18147 cp_parser_optional_template_keyword (cp_parser
*parser
)
18149 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_TEMPLATE
))
18151 /* The `template' keyword can only be used within templates;
18152 outside templates the parser can always figure out what is a
18153 template and what is not. */
18154 if (!processing_template_decl
)
18156 error ("%<template%> (as a disambiguator) is only allowed "
18157 "within templates");
18158 /* If this part of the token stream is rescanned, the same
18159 error message would be generated. So, we purge the token
18160 from the stream. */
18161 cp_lexer_purge_token (parser
->lexer
);
18166 /* Consume the `template' keyword. */
18167 cp_lexer_consume_token (parser
->lexer
);
18175 /* The next token is a CPP_NESTED_NAME_SPECIFIER. Consume the token,
18176 set PARSER->SCOPE, and perform other related actions. */
18179 cp_parser_pre_parsed_nested_name_specifier (cp_parser
*parser
)
18182 struct tree_check
*check_value
;
18183 deferred_access_check
*chk
;
18184 VEC (deferred_access_check
,gc
) *checks
;
18186 /* Get the stored value. */
18187 check_value
= cp_lexer_consume_token (parser
->lexer
)->u
.tree_check_value
;
18188 /* Perform any access checks that were deferred. */
18189 checks
= check_value
->checks
;
18193 VEC_iterate (deferred_access_check
, checks
, i
, chk
) ;
18196 perform_or_defer_access_check (chk
->binfo
,
18201 /* Set the scope from the stored value. */
18202 parser
->scope
= check_value
->value
;
18203 parser
->qualifying_scope
= check_value
->qualifying_scope
;
18204 parser
->object_scope
= NULL_TREE
;
18207 /* Consume tokens up through a non-nested END token. */
18210 cp_parser_cache_group (cp_parser
*parser
,
18211 enum cpp_ttype end
,
18218 /* Abort a parenthesized expression if we encounter a brace. */
18219 if ((end
== CPP_CLOSE_PAREN
|| depth
== 0)
18220 && cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
))
18222 /* If we've reached the end of the file, stop. */
18223 if (cp_lexer_next_token_is (parser
->lexer
, CPP_EOF
)
18224 || (end
!= CPP_PRAGMA_EOL
18225 && cp_lexer_next_token_is (parser
->lexer
, CPP_PRAGMA_EOL
)))
18227 /* Consume the next token. */
18228 token
= cp_lexer_consume_token (parser
->lexer
);
18229 /* See if it starts a new group. */
18230 if (token
->type
== CPP_OPEN_BRACE
)
18232 cp_parser_cache_group (parser
, CPP_CLOSE_BRACE
, depth
+ 1);
18236 else if (token
->type
== CPP_OPEN_PAREN
)
18237 cp_parser_cache_group (parser
, CPP_CLOSE_PAREN
, depth
+ 1);
18238 else if (token
->type
== CPP_PRAGMA
)
18239 cp_parser_cache_group (parser
, CPP_PRAGMA_EOL
, depth
+ 1);
18240 else if (token
->type
== end
)
18245 /* Begin parsing tentatively. We always save tokens while parsing
18246 tentatively so that if the tentative parsing fails we can restore the
18250 cp_parser_parse_tentatively (cp_parser
* parser
)
18252 /* Enter a new parsing context. */
18253 parser
->context
= cp_parser_context_new (parser
->context
);
18254 /* Begin saving tokens. */
18255 cp_lexer_save_tokens (parser
->lexer
);
18256 /* In order to avoid repetitive access control error messages,
18257 access checks are queued up until we are no longer parsing
18259 push_deferring_access_checks (dk_deferred
);
18262 /* Commit to the currently active tentative parse. */
18265 cp_parser_commit_to_tentative_parse (cp_parser
* parser
)
18267 cp_parser_context
*context
;
18270 /* Mark all of the levels as committed. */
18271 lexer
= parser
->lexer
;
18272 for (context
= parser
->context
; context
->next
; context
= context
->next
)
18274 if (context
->status
== CP_PARSER_STATUS_KIND_COMMITTED
)
18276 context
->status
= CP_PARSER_STATUS_KIND_COMMITTED
;
18277 while (!cp_lexer_saving_tokens (lexer
))
18278 lexer
= lexer
->next
;
18279 cp_lexer_commit_tokens (lexer
);
18283 /* Abort the currently active tentative parse. All consumed tokens
18284 will be rolled back, and no diagnostics will be issued. */
18287 cp_parser_abort_tentative_parse (cp_parser
* parser
)
18289 cp_parser_simulate_error (parser
);
18290 /* Now, pretend that we want to see if the construct was
18291 successfully parsed. */
18292 cp_parser_parse_definitely (parser
);
18295 /* Stop parsing tentatively. If a parse error has occurred, restore the
18296 token stream. Otherwise, commit to the tokens we have consumed.
18297 Returns true if no error occurred; false otherwise. */
18300 cp_parser_parse_definitely (cp_parser
* parser
)
18302 bool error_occurred
;
18303 cp_parser_context
*context
;
18305 /* Remember whether or not an error occurred, since we are about to
18306 destroy that information. */
18307 error_occurred
= cp_parser_error_occurred (parser
);
18308 /* Remove the topmost context from the stack. */
18309 context
= parser
->context
;
18310 parser
->context
= context
->next
;
18311 /* If no parse errors occurred, commit to the tentative parse. */
18312 if (!error_occurred
)
18314 /* Commit to the tokens read tentatively, unless that was
18316 if (context
->status
!= CP_PARSER_STATUS_KIND_COMMITTED
)
18317 cp_lexer_commit_tokens (parser
->lexer
);
18319 pop_to_parent_deferring_access_checks ();
18321 /* Otherwise, if errors occurred, roll back our state so that things
18322 are just as they were before we began the tentative parse. */
18325 cp_lexer_rollback_tokens (parser
->lexer
);
18326 pop_deferring_access_checks ();
18328 /* Add the context to the front of the free list. */
18329 context
->next
= cp_parser_context_free_list
;
18330 cp_parser_context_free_list
= context
;
18332 return !error_occurred
;
18335 /* Returns true if we are parsing tentatively and are not committed to
18336 this tentative parse. */
18339 cp_parser_uncommitted_to_tentative_parse_p (cp_parser
* parser
)
18341 return (cp_parser_parsing_tentatively (parser
)
18342 && parser
->context
->status
!= CP_PARSER_STATUS_KIND_COMMITTED
);
18345 /* Returns nonzero iff an error has occurred during the most recent
18346 tentative parse. */
18349 cp_parser_error_occurred (cp_parser
* parser
)
18351 return (cp_parser_parsing_tentatively (parser
)
18352 && parser
->context
->status
== CP_PARSER_STATUS_KIND_ERROR
);
18355 /* Returns nonzero if GNU extensions are allowed. */
18358 cp_parser_allow_gnu_extensions_p (cp_parser
* parser
)
18360 return parser
->allow_gnu_extensions_p
;
18363 /* Objective-C++ Productions */
18366 /* Parse an Objective-C expression, which feeds into a primary-expression
18370 objc-message-expression
18371 objc-string-literal
18372 objc-encode-expression
18373 objc-protocol-expression
18374 objc-selector-expression
18376 Returns a tree representation of the expression. */
18379 cp_parser_objc_expression (cp_parser
* parser
)
18381 /* Try to figure out what kind of declaration is present. */
18382 cp_token
*kwd
= cp_lexer_peek_token (parser
->lexer
);
18386 case CPP_OPEN_SQUARE
:
18387 return cp_parser_objc_message_expression (parser
);
18389 case CPP_OBJC_STRING
:
18390 kwd
= cp_lexer_consume_token (parser
->lexer
);
18391 return objc_build_string_object (kwd
->u
.value
);
18394 switch (kwd
->keyword
)
18396 case RID_AT_ENCODE
:
18397 return cp_parser_objc_encode_expression (parser
);
18399 case RID_AT_PROTOCOL
:
18400 return cp_parser_objc_protocol_expression (parser
);
18402 case RID_AT_SELECTOR
:
18403 return cp_parser_objc_selector_expression (parser
);
18409 error ("misplaced %<@%D%> Objective-C++ construct", kwd
->u
.value
);
18410 cp_parser_skip_to_end_of_block_or_statement (parser
);
18413 return error_mark_node
;
18416 /* Parse an Objective-C message expression.
18418 objc-message-expression:
18419 [ objc-message-receiver objc-message-args ]
18421 Returns a representation of an Objective-C message. */
18424 cp_parser_objc_message_expression (cp_parser
* parser
)
18426 tree receiver
, messageargs
;
18428 cp_lexer_consume_token (parser
->lexer
); /* Eat '['. */
18429 receiver
= cp_parser_objc_message_receiver (parser
);
18430 messageargs
= cp_parser_objc_message_args (parser
);
18431 cp_parser_require (parser
, CPP_CLOSE_SQUARE
, "%<]%>");
18433 return objc_build_message_expr (build_tree_list (receiver
, messageargs
));
18436 /* Parse an objc-message-receiver.
18438 objc-message-receiver:
18440 simple-type-specifier
18442 Returns a representation of the type or expression. */
18445 cp_parser_objc_message_receiver (cp_parser
* parser
)
18449 /* An Objective-C message receiver may be either (1) a type
18450 or (2) an expression. */
18451 cp_parser_parse_tentatively (parser
);
18452 rcv
= cp_parser_expression (parser
, false);
18454 if (cp_parser_parse_definitely (parser
))
18457 rcv
= cp_parser_simple_type_specifier (parser
,
18458 /*decl_specs=*/NULL
,
18459 CP_PARSER_FLAGS_NONE
);
18461 return objc_get_class_reference (rcv
);
18464 /* Parse the arguments and selectors comprising an Objective-C message.
18469 objc-selector-args , objc-comma-args
18471 objc-selector-args:
18472 objc-selector [opt] : assignment-expression
18473 objc-selector-args objc-selector [opt] : assignment-expression
18476 assignment-expression
18477 objc-comma-args , assignment-expression
18479 Returns a TREE_LIST, with TREE_PURPOSE containing a list of
18480 selector arguments and TREE_VALUE containing a list of comma
18484 cp_parser_objc_message_args (cp_parser
* parser
)
18486 tree sel_args
= NULL_TREE
, addl_args
= NULL_TREE
;
18487 bool maybe_unary_selector_p
= true;
18488 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
18490 while (cp_parser_objc_selector_p (token
->type
) || token
->type
== CPP_COLON
)
18492 tree selector
= NULL_TREE
, arg
;
18494 if (token
->type
!= CPP_COLON
)
18495 selector
= cp_parser_objc_selector (parser
);
18497 /* Detect if we have a unary selector. */
18498 if (maybe_unary_selector_p
18499 && cp_lexer_next_token_is_not (parser
->lexer
, CPP_COLON
))
18500 return build_tree_list (selector
, NULL_TREE
);
18502 maybe_unary_selector_p
= false;
18503 cp_parser_require (parser
, CPP_COLON
, "%<:%>");
18504 arg
= cp_parser_assignment_expression (parser
, false);
18507 = chainon (sel_args
,
18508 build_tree_list (selector
, arg
));
18510 token
= cp_lexer_peek_token (parser
->lexer
);
18513 /* Handle non-selector arguments, if any. */
18514 while (token
->type
== CPP_COMMA
)
18518 cp_lexer_consume_token (parser
->lexer
);
18519 arg
= cp_parser_assignment_expression (parser
, false);
18522 = chainon (addl_args
,
18523 build_tree_list (NULL_TREE
, arg
));
18525 token
= cp_lexer_peek_token (parser
->lexer
);
18528 return build_tree_list (sel_args
, addl_args
);
18531 /* Parse an Objective-C encode expression.
18533 objc-encode-expression:
18534 @encode objc-typename
18536 Returns an encoded representation of the type argument. */
18539 cp_parser_objc_encode_expression (cp_parser
* parser
)
18543 cp_lexer_consume_token (parser
->lexer
); /* Eat '@encode'. */
18544 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
18545 type
= complete_type (cp_parser_type_id (parser
));
18546 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
18550 error ("%<@encode%> must specify a type as an argument");
18551 return error_mark_node
;
18554 return objc_build_encode_expr (type
);
18557 /* Parse an Objective-C @defs expression. */
18560 cp_parser_objc_defs_expression (cp_parser
*parser
)
18564 cp_lexer_consume_token (parser
->lexer
); /* Eat '@defs'. */
18565 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
18566 name
= cp_parser_identifier (parser
);
18567 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
18569 return objc_get_class_ivars (name
);
18572 /* Parse an Objective-C protocol expression.
18574 objc-protocol-expression:
18575 @protocol ( identifier )
18577 Returns a representation of the protocol expression. */
18580 cp_parser_objc_protocol_expression (cp_parser
* parser
)
18584 cp_lexer_consume_token (parser
->lexer
); /* Eat '@protocol'. */
18585 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
18586 proto
= cp_parser_identifier (parser
);
18587 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
18589 return objc_build_protocol_expr (proto
);
18592 /* Parse an Objective-C selector expression.
18594 objc-selector-expression:
18595 @selector ( objc-method-signature )
18597 objc-method-signature:
18603 objc-selector-seq objc-selector :
18605 Returns a representation of the method selector. */
18608 cp_parser_objc_selector_expression (cp_parser
* parser
)
18610 tree sel_seq
= NULL_TREE
;
18611 bool maybe_unary_selector_p
= true;
18614 cp_lexer_consume_token (parser
->lexer
); /* Eat '@selector'. */
18615 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
18616 token
= cp_lexer_peek_token (parser
->lexer
);
18618 while (cp_parser_objc_selector_p (token
->type
) || token
->type
== CPP_COLON
18619 || token
->type
== CPP_SCOPE
)
18621 tree selector
= NULL_TREE
;
18623 if (token
->type
!= CPP_COLON
18624 || token
->type
== CPP_SCOPE
)
18625 selector
= cp_parser_objc_selector (parser
);
18627 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COLON
)
18628 && cp_lexer_next_token_is_not (parser
->lexer
, CPP_SCOPE
))
18630 /* Detect if we have a unary selector. */
18631 if (maybe_unary_selector_p
)
18633 sel_seq
= selector
;
18634 goto finish_selector
;
18638 cp_parser_error (parser
, "expected %<:%>");
18641 maybe_unary_selector_p
= false;
18642 token
= cp_lexer_consume_token (parser
->lexer
);
18644 if (token
->type
== CPP_SCOPE
)
18647 = chainon (sel_seq
,
18648 build_tree_list (selector
, NULL_TREE
));
18650 = chainon (sel_seq
,
18651 build_tree_list (NULL_TREE
, NULL_TREE
));
18655 = chainon (sel_seq
,
18656 build_tree_list (selector
, NULL_TREE
));
18658 token
= cp_lexer_peek_token (parser
->lexer
);
18662 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
18664 return objc_build_selector_expr (sel_seq
);
18667 /* Parse a list of identifiers.
18669 objc-identifier-list:
18671 objc-identifier-list , identifier
18673 Returns a TREE_LIST of identifier nodes. */
18676 cp_parser_objc_identifier_list (cp_parser
* parser
)
18678 tree list
= build_tree_list (NULL_TREE
, cp_parser_identifier (parser
));
18679 cp_token
*sep
= cp_lexer_peek_token (parser
->lexer
);
18681 while (sep
->type
== CPP_COMMA
)
18683 cp_lexer_consume_token (parser
->lexer
); /* Eat ','. */
18684 list
= chainon (list
,
18685 build_tree_list (NULL_TREE
,
18686 cp_parser_identifier (parser
)));
18687 sep
= cp_lexer_peek_token (parser
->lexer
);
18693 /* Parse an Objective-C alias declaration.
18695 objc-alias-declaration:
18696 @compatibility_alias identifier identifier ;
18698 This function registers the alias mapping with the Objective-C front end.
18699 It returns nothing. */
18702 cp_parser_objc_alias_declaration (cp_parser
* parser
)
18706 cp_lexer_consume_token (parser
->lexer
); /* Eat '@compatibility_alias'. */
18707 alias
= cp_parser_identifier (parser
);
18708 orig
= cp_parser_identifier (parser
);
18709 objc_declare_alias (alias
, orig
);
18710 cp_parser_consume_semicolon_at_end_of_statement (parser
);
18713 /* Parse an Objective-C class forward-declaration.
18715 objc-class-declaration:
18716 @class objc-identifier-list ;
18718 The function registers the forward declarations with the Objective-C
18719 front end. It returns nothing. */
18722 cp_parser_objc_class_declaration (cp_parser
* parser
)
18724 cp_lexer_consume_token (parser
->lexer
); /* Eat '@class'. */
18725 objc_declare_class (cp_parser_objc_identifier_list (parser
));
18726 cp_parser_consume_semicolon_at_end_of_statement (parser
);
18729 /* Parse a list of Objective-C protocol references.
18731 objc-protocol-refs-opt:
18732 objc-protocol-refs [opt]
18734 objc-protocol-refs:
18735 < objc-identifier-list >
18737 Returns a TREE_LIST of identifiers, if any. */
18740 cp_parser_objc_protocol_refs_opt (cp_parser
* parser
)
18742 tree protorefs
= NULL_TREE
;
18744 if(cp_lexer_next_token_is (parser
->lexer
, CPP_LESS
))
18746 cp_lexer_consume_token (parser
->lexer
); /* Eat '<'. */
18747 protorefs
= cp_parser_objc_identifier_list (parser
);
18748 cp_parser_require (parser
, CPP_GREATER
, "%<>%>");
18754 /* Parse a Objective-C visibility specification. */
18757 cp_parser_objc_visibility_spec (cp_parser
* parser
)
18759 cp_token
*vis
= cp_lexer_peek_token (parser
->lexer
);
18761 switch (vis
->keyword
)
18763 case RID_AT_PRIVATE
:
18764 objc_set_visibility (2);
18766 case RID_AT_PROTECTED
:
18767 objc_set_visibility (0);
18769 case RID_AT_PUBLIC
:
18770 objc_set_visibility (1);
18776 /* Eat '@private'/'@protected'/'@public'. */
18777 cp_lexer_consume_token (parser
->lexer
);
18780 /* Parse an Objective-C method type. */
18783 cp_parser_objc_method_type (cp_parser
* parser
)
18785 objc_set_method_type
18786 (cp_lexer_consume_token (parser
->lexer
)->type
== CPP_PLUS
18791 /* Parse an Objective-C protocol qualifier. */
18794 cp_parser_objc_protocol_qualifiers (cp_parser
* parser
)
18796 tree quals
= NULL_TREE
, node
;
18797 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
18799 node
= token
->u
.value
;
18801 while (node
&& TREE_CODE (node
) == IDENTIFIER_NODE
18802 && (node
== ridpointers
[(int) RID_IN
]
18803 || node
== ridpointers
[(int) RID_OUT
]
18804 || node
== ridpointers
[(int) RID_INOUT
]
18805 || node
== ridpointers
[(int) RID_BYCOPY
]
18806 || node
== ridpointers
[(int) RID_BYREF
]
18807 || node
== ridpointers
[(int) RID_ONEWAY
]))
18809 quals
= tree_cons (NULL_TREE
, node
, quals
);
18810 cp_lexer_consume_token (parser
->lexer
);
18811 token
= cp_lexer_peek_token (parser
->lexer
);
18812 node
= token
->u
.value
;
18818 /* Parse an Objective-C typename. */
18821 cp_parser_objc_typename (cp_parser
* parser
)
18823 tree typename
= NULL_TREE
;
18825 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_PAREN
))
18827 tree proto_quals
, cp_type
= NULL_TREE
;
18829 cp_lexer_consume_token (parser
->lexer
); /* Eat '('. */
18830 proto_quals
= cp_parser_objc_protocol_qualifiers (parser
);
18832 /* An ObjC type name may consist of just protocol qualifiers, in which
18833 case the type shall default to 'id'. */
18834 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_CLOSE_PAREN
))
18835 cp_type
= cp_parser_type_id (parser
);
18837 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
18838 typename
= build_tree_list (proto_quals
, cp_type
);
18844 /* Check to see if TYPE refers to an Objective-C selector name. */
18847 cp_parser_objc_selector_p (enum cpp_ttype type
)
18849 return (type
== CPP_NAME
|| type
== CPP_KEYWORD
18850 || type
== CPP_AND_AND
|| type
== CPP_AND_EQ
|| type
== CPP_AND
18851 || type
== CPP_OR
|| type
== CPP_COMPL
|| type
== CPP_NOT
18852 || type
== CPP_NOT_EQ
|| type
== CPP_OR_OR
|| type
== CPP_OR_EQ
18853 || type
== CPP_XOR
|| type
== CPP_XOR_EQ
);
18856 /* Parse an Objective-C selector. */
18859 cp_parser_objc_selector (cp_parser
* parser
)
18861 cp_token
*token
= cp_lexer_consume_token (parser
->lexer
);
18863 if (!cp_parser_objc_selector_p (token
->type
))
18865 error ("invalid Objective-C++ selector name");
18866 return error_mark_node
;
18869 /* C++ operator names are allowed to appear in ObjC selectors. */
18870 switch (token
->type
)
18872 case CPP_AND_AND
: return get_identifier ("and");
18873 case CPP_AND_EQ
: return get_identifier ("and_eq");
18874 case CPP_AND
: return get_identifier ("bitand");
18875 case CPP_OR
: return get_identifier ("bitor");
18876 case CPP_COMPL
: return get_identifier ("compl");
18877 case CPP_NOT
: return get_identifier ("not");
18878 case CPP_NOT_EQ
: return get_identifier ("not_eq");
18879 case CPP_OR_OR
: return get_identifier ("or");
18880 case CPP_OR_EQ
: return get_identifier ("or_eq");
18881 case CPP_XOR
: return get_identifier ("xor");
18882 case CPP_XOR_EQ
: return get_identifier ("xor_eq");
18883 default: return token
->u
.value
;
18887 /* Parse an Objective-C params list. */
18890 cp_parser_objc_method_keyword_params (cp_parser
* parser
)
18892 tree params
= NULL_TREE
;
18893 bool maybe_unary_selector_p
= true;
18894 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
18896 while (cp_parser_objc_selector_p (token
->type
) || token
->type
== CPP_COLON
)
18898 tree selector
= NULL_TREE
, typename
, identifier
;
18900 if (token
->type
!= CPP_COLON
)
18901 selector
= cp_parser_objc_selector (parser
);
18903 /* Detect if we have a unary selector. */
18904 if (maybe_unary_selector_p
18905 && cp_lexer_next_token_is_not (parser
->lexer
, CPP_COLON
))
18908 maybe_unary_selector_p
= false;
18909 cp_parser_require (parser
, CPP_COLON
, "%<:%>");
18910 typename
= cp_parser_objc_typename (parser
);
18911 identifier
= cp_parser_identifier (parser
);
18915 objc_build_keyword_decl (selector
,
18919 token
= cp_lexer_peek_token (parser
->lexer
);
18925 /* Parse the non-keyword Objective-C params. */
18928 cp_parser_objc_method_tail_params_opt (cp_parser
* parser
, bool *ellipsisp
)
18930 tree params
= make_node (TREE_LIST
);
18931 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
18932 *ellipsisp
= false; /* Initially, assume no ellipsis. */
18934 while (token
->type
== CPP_COMMA
)
18936 cp_parameter_declarator
*parmdecl
;
18939 cp_lexer_consume_token (parser
->lexer
); /* Eat ','. */
18940 token
= cp_lexer_peek_token (parser
->lexer
);
18942 if (token
->type
== CPP_ELLIPSIS
)
18944 cp_lexer_consume_token (parser
->lexer
); /* Eat '...'. */
18949 parmdecl
= cp_parser_parameter_declaration (parser
, false, NULL
);
18950 parm
= grokdeclarator (parmdecl
->declarator
,
18951 &parmdecl
->decl_specifiers
,
18952 PARM
, /*initialized=*/0,
18953 /*attrlist=*/NULL
);
18955 chainon (params
, build_tree_list (NULL_TREE
, parm
));
18956 token
= cp_lexer_peek_token (parser
->lexer
);
18962 /* Parse a linkage specification, a pragma, an extra semicolon or a block. */
18965 cp_parser_objc_interstitial_code (cp_parser
* parser
)
18967 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
18969 /* If the next token is `extern' and the following token is a string
18970 literal, then we have a linkage specification. */
18971 if (token
->keyword
== RID_EXTERN
18972 && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser
->lexer
, 2)))
18973 cp_parser_linkage_specification (parser
);
18974 /* Handle #pragma, if any. */
18975 else if (token
->type
== CPP_PRAGMA
)
18976 cp_parser_pragma (parser
, pragma_external
);
18977 /* Allow stray semicolons. */
18978 else if (token
->type
== CPP_SEMICOLON
)
18979 cp_lexer_consume_token (parser
->lexer
);
18980 /* Finally, try to parse a block-declaration, or a function-definition. */
18982 cp_parser_block_declaration (parser
, /*statement_p=*/false);
18985 /* Parse a method signature. */
18988 cp_parser_objc_method_signature (cp_parser
* parser
)
18990 tree rettype
, kwdparms
, optparms
;
18991 bool ellipsis
= false;
18993 cp_parser_objc_method_type (parser
);
18994 rettype
= cp_parser_objc_typename (parser
);
18995 kwdparms
= cp_parser_objc_method_keyword_params (parser
);
18996 optparms
= cp_parser_objc_method_tail_params_opt (parser
, &ellipsis
);
18998 return objc_build_method_signature (rettype
, kwdparms
, optparms
, ellipsis
);
19001 /* Pars an Objective-C method prototype list. */
19004 cp_parser_objc_method_prototype_list (cp_parser
* parser
)
19006 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
19008 while (token
->keyword
!= RID_AT_END
)
19010 if (token
->type
== CPP_PLUS
|| token
->type
== CPP_MINUS
)
19012 objc_add_method_declaration
19013 (cp_parser_objc_method_signature (parser
));
19014 cp_parser_consume_semicolon_at_end_of_statement (parser
);
19017 /* Allow for interspersed non-ObjC++ code. */
19018 cp_parser_objc_interstitial_code (parser
);
19020 token
= cp_lexer_peek_token (parser
->lexer
);
19023 cp_lexer_consume_token (parser
->lexer
); /* Eat '@end'. */
19024 objc_finish_interface ();
19027 /* Parse an Objective-C method definition list. */
19030 cp_parser_objc_method_definition_list (cp_parser
* parser
)
19032 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
19034 while (token
->keyword
!= RID_AT_END
)
19038 if (token
->type
== CPP_PLUS
|| token
->type
== CPP_MINUS
)
19040 push_deferring_access_checks (dk_deferred
);
19041 objc_start_method_definition
19042 (cp_parser_objc_method_signature (parser
));
19044 /* For historical reasons, we accept an optional semicolon. */
19045 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
))
19046 cp_lexer_consume_token (parser
->lexer
);
19048 perform_deferred_access_checks ();
19049 stop_deferring_access_checks ();
19050 meth
= cp_parser_function_definition_after_declarator (parser
,
19052 pop_deferring_access_checks ();
19053 objc_finish_method_definition (meth
);
19056 /* Allow for interspersed non-ObjC++ code. */
19057 cp_parser_objc_interstitial_code (parser
);
19059 token
= cp_lexer_peek_token (parser
->lexer
);
19062 cp_lexer_consume_token (parser
->lexer
); /* Eat '@end'. */
19063 objc_finish_implementation ();
19066 /* Parse Objective-C ivars. */
19069 cp_parser_objc_class_ivars (cp_parser
* parser
)
19071 cp_token
*token
= cp_lexer_peek_token (parser
->lexer
);
19073 if (token
->type
!= CPP_OPEN_BRACE
)
19074 return; /* No ivars specified. */
19076 cp_lexer_consume_token (parser
->lexer
); /* Eat '{'. */
19077 token
= cp_lexer_peek_token (parser
->lexer
);
19079 while (token
->type
!= CPP_CLOSE_BRACE
)
19081 cp_decl_specifier_seq declspecs
;
19082 int decl_class_or_enum_p
;
19083 tree prefix_attributes
;
19085 cp_parser_objc_visibility_spec (parser
);
19087 if (cp_lexer_next_token_is (parser
->lexer
, CPP_CLOSE_BRACE
))
19090 cp_parser_decl_specifier_seq (parser
,
19091 CP_PARSER_FLAGS_OPTIONAL
,
19093 &decl_class_or_enum_p
);
19094 prefix_attributes
= declspecs
.attributes
;
19095 declspecs
.attributes
= NULL_TREE
;
19097 /* Keep going until we hit the `;' at the end of the
19099 while (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
19101 tree width
= NULL_TREE
, attributes
, first_attribute
, decl
;
19102 cp_declarator
*declarator
= NULL
;
19103 int ctor_dtor_or_conv_p
;
19105 /* Check for a (possibly unnamed) bitfield declaration. */
19106 token
= cp_lexer_peek_token (parser
->lexer
);
19107 if (token
->type
== CPP_COLON
)
19110 if (token
->type
== CPP_NAME
19111 && (cp_lexer_peek_nth_token (parser
->lexer
, 2)->type
19114 /* Get the name of the bitfield. */
19115 declarator
= make_id_declarator (NULL_TREE
,
19116 cp_parser_identifier (parser
),
19120 cp_lexer_consume_token (parser
->lexer
); /* Eat ':'. */
19121 /* Get the width of the bitfield. */
19123 = cp_parser_constant_expression (parser
,
19124 /*allow_non_constant=*/false,
19129 /* Parse the declarator. */
19131 = cp_parser_declarator (parser
, CP_PARSER_DECLARATOR_NAMED
,
19132 &ctor_dtor_or_conv_p
,
19133 /*parenthesized_p=*/NULL
,
19134 /*member_p=*/false);
19137 /* Look for attributes that apply to the ivar. */
19138 attributes
= cp_parser_attributes_opt (parser
);
19139 /* Remember which attributes are prefix attributes and
19141 first_attribute
= attributes
;
19142 /* Combine the attributes. */
19143 attributes
= chainon (prefix_attributes
, attributes
);
19147 /* Create the bitfield declaration. */
19148 decl
= grokbitfield (declarator
, &declspecs
, width
);
19149 cplus_decl_attributes (&decl
, attributes
, /*flags=*/0);
19152 decl
= grokfield (declarator
, &declspecs
,
19153 NULL_TREE
, /*init_const_expr_p=*/false,
19154 NULL_TREE
, attributes
);
19156 /* Add the instance variable. */
19157 objc_add_instance_variable (decl
);
19159 /* Reset PREFIX_ATTRIBUTES. */
19160 while (attributes
&& TREE_CHAIN (attributes
) != first_attribute
)
19161 attributes
= TREE_CHAIN (attributes
);
19163 TREE_CHAIN (attributes
) = NULL_TREE
;
19165 token
= cp_lexer_peek_token (parser
->lexer
);
19167 if (token
->type
== CPP_COMMA
)
19169 cp_lexer_consume_token (parser
->lexer
); /* Eat ','. */
19175 cp_parser_consume_semicolon_at_end_of_statement (parser
);
19176 token
= cp_lexer_peek_token (parser
->lexer
);
19179 cp_lexer_consume_token (parser
->lexer
); /* Eat '}'. */
19180 /* For historical reasons, we accept an optional semicolon. */
19181 if (cp_lexer_next_token_is (parser
->lexer
, CPP_SEMICOLON
))
19182 cp_lexer_consume_token (parser
->lexer
);
19185 /* Parse an Objective-C protocol declaration. */
19188 cp_parser_objc_protocol_declaration (cp_parser
* parser
)
19190 tree proto
, protorefs
;
19193 cp_lexer_consume_token (parser
->lexer
); /* Eat '@protocol'. */
19194 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_NAME
))
19196 error ("identifier expected after %<@protocol%>");
19200 /* See if we have a forward declaration or a definition. */
19201 tok
= cp_lexer_peek_nth_token (parser
->lexer
, 2);
19203 /* Try a forward declaration first. */
19204 if (tok
->type
== CPP_COMMA
|| tok
->type
== CPP_SEMICOLON
)
19206 objc_declare_protocols (cp_parser_objc_identifier_list (parser
));
19208 cp_parser_consume_semicolon_at_end_of_statement (parser
);
19211 /* Ok, we got a full-fledged definition (or at least should). */
19214 proto
= cp_parser_identifier (parser
);
19215 protorefs
= cp_parser_objc_protocol_refs_opt (parser
);
19216 objc_start_protocol (proto
, protorefs
);
19217 cp_parser_objc_method_prototype_list (parser
);
19221 /* Parse an Objective-C superclass or category. */
19224 cp_parser_objc_superclass_or_category (cp_parser
*parser
, tree
*super
,
19227 cp_token
*next
= cp_lexer_peek_token (parser
->lexer
);
19229 *super
= *categ
= NULL_TREE
;
19230 if (next
->type
== CPP_COLON
)
19232 cp_lexer_consume_token (parser
->lexer
); /* Eat ':'. */
19233 *super
= cp_parser_identifier (parser
);
19235 else if (next
->type
== CPP_OPEN_PAREN
)
19237 cp_lexer_consume_token (parser
->lexer
); /* Eat '('. */
19238 *categ
= cp_parser_identifier (parser
);
19239 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
19243 /* Parse an Objective-C class interface. */
19246 cp_parser_objc_class_interface (cp_parser
* parser
)
19248 tree name
, super
, categ
, protos
;
19250 cp_lexer_consume_token (parser
->lexer
); /* Eat '@interface'. */
19251 name
= cp_parser_identifier (parser
);
19252 cp_parser_objc_superclass_or_category (parser
, &super
, &categ
);
19253 protos
= cp_parser_objc_protocol_refs_opt (parser
);
19255 /* We have either a class or a category on our hands. */
19257 objc_start_category_interface (name
, categ
, protos
);
19260 objc_start_class_interface (name
, super
, protos
);
19261 /* Handle instance variable declarations, if any. */
19262 cp_parser_objc_class_ivars (parser
);
19263 objc_continue_interface ();
19266 cp_parser_objc_method_prototype_list (parser
);
19269 /* Parse an Objective-C class implementation. */
19272 cp_parser_objc_class_implementation (cp_parser
* parser
)
19274 tree name
, super
, categ
;
19276 cp_lexer_consume_token (parser
->lexer
); /* Eat '@implementation'. */
19277 name
= cp_parser_identifier (parser
);
19278 cp_parser_objc_superclass_or_category (parser
, &super
, &categ
);
19280 /* We have either a class or a category on our hands. */
19282 objc_start_category_implementation (name
, categ
);
19285 objc_start_class_implementation (name
, super
);
19286 /* Handle instance variable declarations, if any. */
19287 cp_parser_objc_class_ivars (parser
);
19288 objc_continue_implementation ();
19291 cp_parser_objc_method_definition_list (parser
);
19294 /* Consume the @end token and finish off the implementation. */
19297 cp_parser_objc_end_implementation (cp_parser
* parser
)
19299 cp_lexer_consume_token (parser
->lexer
); /* Eat '@end'. */
19300 objc_finish_implementation ();
19303 /* Parse an Objective-C declaration. */
19306 cp_parser_objc_declaration (cp_parser
* parser
)
19308 /* Try to figure out what kind of declaration is present. */
19309 cp_token
*kwd
= cp_lexer_peek_token (parser
->lexer
);
19311 switch (kwd
->keyword
)
19314 cp_parser_objc_alias_declaration (parser
);
19317 cp_parser_objc_class_declaration (parser
);
19319 case RID_AT_PROTOCOL
:
19320 cp_parser_objc_protocol_declaration (parser
);
19322 case RID_AT_INTERFACE
:
19323 cp_parser_objc_class_interface (parser
);
19325 case RID_AT_IMPLEMENTATION
:
19326 cp_parser_objc_class_implementation (parser
);
19329 cp_parser_objc_end_implementation (parser
);
19332 error ("misplaced %<@%D%> Objective-C++ construct", kwd
->u
.value
);
19333 cp_parser_skip_to_end_of_block_or_statement (parser
);
19337 /* Parse an Objective-C try-catch-finally statement.
19339 objc-try-catch-finally-stmt:
19340 @try compound-statement objc-catch-clause-seq [opt]
19341 objc-finally-clause [opt]
19343 objc-catch-clause-seq:
19344 objc-catch-clause objc-catch-clause-seq [opt]
19347 @catch ( exception-declaration ) compound-statement
19349 objc-finally-clause
19350 @finally compound-statement
19352 Returns NULL_TREE. */
19355 cp_parser_objc_try_catch_finally_statement (cp_parser
*parser
) {
19356 location_t location
;
19359 cp_parser_require_keyword (parser
, RID_AT_TRY
, "%<@try%>");
19360 location
= cp_lexer_peek_token (parser
->lexer
)->location
;
19361 /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
19362 node, lest it get absorbed into the surrounding block. */
19363 stmt
= push_stmt_list ();
19364 cp_parser_compound_statement (parser
, NULL
, false);
19365 objc_begin_try_stmt (location
, pop_stmt_list (stmt
));
19367 while (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_AT_CATCH
))
19369 cp_parameter_declarator
*parmdecl
;
19372 cp_lexer_consume_token (parser
->lexer
);
19373 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
19374 parmdecl
= cp_parser_parameter_declaration (parser
, false, NULL
);
19375 parm
= grokdeclarator (parmdecl
->declarator
,
19376 &parmdecl
->decl_specifiers
,
19377 PARM
, /*initialized=*/0,
19378 /*attrlist=*/NULL
);
19379 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
19380 objc_begin_catch_clause (parm
);
19381 cp_parser_compound_statement (parser
, NULL
, false);
19382 objc_finish_catch_clause ();
19385 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_AT_FINALLY
))
19387 cp_lexer_consume_token (parser
->lexer
);
19388 location
= cp_lexer_peek_token (parser
->lexer
)->location
;
19389 /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
19390 node, lest it get absorbed into the surrounding block. */
19391 stmt
= push_stmt_list ();
19392 cp_parser_compound_statement (parser
, NULL
, false);
19393 objc_build_finally_clause (location
, pop_stmt_list (stmt
));
19396 return objc_finish_try_stmt ();
19399 /* Parse an Objective-C synchronized statement.
19401 objc-synchronized-stmt:
19402 @synchronized ( expression ) compound-statement
19404 Returns NULL_TREE. */
19407 cp_parser_objc_synchronized_statement (cp_parser
*parser
) {
19408 location_t location
;
19411 cp_parser_require_keyword (parser
, RID_AT_SYNCHRONIZED
, "%<@synchronized%>");
19413 location
= cp_lexer_peek_token (parser
->lexer
)->location
;
19414 cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>");
19415 lock
= cp_parser_expression (parser
, false);
19416 cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>");
19418 /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
19419 node, lest it get absorbed into the surrounding block. */
19420 stmt
= push_stmt_list ();
19421 cp_parser_compound_statement (parser
, NULL
, false);
19423 return objc_build_synchronized (location
, lock
, pop_stmt_list (stmt
));
19426 /* Parse an Objective-C throw statement.
19429 @throw assignment-expression [opt] ;
19431 Returns a constructed '@throw' statement. */
19434 cp_parser_objc_throw_statement (cp_parser
*parser
) {
19435 tree expr
= NULL_TREE
;
19437 cp_parser_require_keyword (parser
, RID_AT_THROW
, "%<@throw%>");
19439 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
19440 expr
= cp_parser_assignment_expression (parser
, false);
19442 cp_parser_consume_semicolon_at_end_of_statement (parser
);
19444 return objc_build_throw_stmt (expr
);
19447 /* Parse an Objective-C statement. */
19450 cp_parser_objc_statement (cp_parser
* parser
) {
19451 /* Try to figure out what kind of declaration is present. */
19452 cp_token
*kwd
= cp_lexer_peek_token (parser
->lexer
);
19454 switch (kwd
->keyword
)
19457 return cp_parser_objc_try_catch_finally_statement (parser
);
19458 case RID_AT_SYNCHRONIZED
:
19459 return cp_parser_objc_synchronized_statement (parser
);
19461 return cp_parser_objc_throw_statement (parser
);
19463 error ("misplaced %<@%D%> Objective-C++ construct", kwd
->u
.value
);
19464 cp_parser_skip_to_end_of_block_or_statement (parser
);
19467 return error_mark_node
;
19470 /* OpenMP 2.5 parsing routines. */
19472 /* Returns name of the next clause.
19473 If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
19474 the token is not consumed. Otherwise appropriate pragma_omp_clause is
19475 returned and the token is consumed. */
19477 static pragma_omp_clause
19478 cp_parser_omp_clause_name (cp_parser
*parser
)
19480 pragma_omp_clause result
= PRAGMA_OMP_CLAUSE_NONE
;
19482 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_IF
))
19483 result
= PRAGMA_OMP_CLAUSE_IF
;
19484 else if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_DEFAULT
))
19485 result
= PRAGMA_OMP_CLAUSE_DEFAULT
;
19486 else if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_PRIVATE
))
19487 result
= PRAGMA_OMP_CLAUSE_PRIVATE
;
19488 else if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
19490 tree id
= cp_lexer_peek_token (parser
->lexer
)->u
.value
;
19491 const char *p
= IDENTIFIER_POINTER (id
);
19496 if (!strcmp ("copyin", p
))
19497 result
= PRAGMA_OMP_CLAUSE_COPYIN
;
19498 else if (!strcmp ("copyprivate", p
))
19499 result
= PRAGMA_OMP_CLAUSE_COPYPRIVATE
;
19502 if (!strcmp ("firstprivate", p
))
19503 result
= PRAGMA_OMP_CLAUSE_FIRSTPRIVATE
;
19506 if (!strcmp ("lastprivate", p
))
19507 result
= PRAGMA_OMP_CLAUSE_LASTPRIVATE
;
19510 if (!strcmp ("nowait", p
))
19511 result
= PRAGMA_OMP_CLAUSE_NOWAIT
;
19512 else if (!strcmp ("num_threads", p
))
19513 result
= PRAGMA_OMP_CLAUSE_NUM_THREADS
;
19516 if (!strcmp ("ordered", p
))
19517 result
= PRAGMA_OMP_CLAUSE_ORDERED
;
19520 if (!strcmp ("reduction", p
))
19521 result
= PRAGMA_OMP_CLAUSE_REDUCTION
;
19524 if (!strcmp ("schedule", p
))
19525 result
= PRAGMA_OMP_CLAUSE_SCHEDULE
;
19526 else if (!strcmp ("shared", p
))
19527 result
= PRAGMA_OMP_CLAUSE_SHARED
;
19532 if (result
!= PRAGMA_OMP_CLAUSE_NONE
)
19533 cp_lexer_consume_token (parser
->lexer
);
19538 /* Validate that a clause of the given type does not already exist. */
19541 check_no_duplicate_clause (tree clauses
, enum tree_code code
, const char *name
)
19545 for (c
= clauses
; c
; c
= OMP_CLAUSE_CHAIN (c
))
19546 if (OMP_CLAUSE_CODE (c
) == code
)
19548 error ("too many %qs clauses", name
);
19556 variable-list , identifier
19558 In addition, we match a closing parenthesis. An opening parenthesis
19559 will have been consumed by the caller.
19561 If KIND is nonzero, create the appropriate node and install the decl
19562 in OMP_CLAUSE_DECL and add the node to the head of the list.
19564 If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
19565 return the list created. */
19568 cp_parser_omp_var_list_no_open (cp_parser
*parser
, enum omp_clause_code kind
,
19575 name
= cp_parser_id_expression (parser
, /*template_p=*/false,
19576 /*check_dependency_p=*/true,
19577 /*template_p=*/NULL
,
19578 /*declarator_p=*/false,
19579 /*optional_p=*/false);
19580 if (name
== error_mark_node
)
19583 decl
= cp_parser_lookup_name_simple (parser
, name
);
19584 if (decl
== error_mark_node
)
19585 cp_parser_name_lookup_error (parser
, name
, decl
, NULL
);
19586 else if (kind
!= 0)
19588 tree u
= build_omp_clause (kind
);
19589 OMP_CLAUSE_DECL (u
) = decl
;
19590 OMP_CLAUSE_CHAIN (u
) = list
;
19594 list
= tree_cons (decl
, NULL_TREE
, list
);
19597 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_COMMA
))
19599 cp_lexer_consume_token (parser
->lexer
);
19602 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
19606 /* Try to resync to an unnested comma. Copied from
19607 cp_parser_parenthesized_expression_list. */
19609 ending
= cp_parser_skip_to_closing_parenthesis (parser
,
19610 /*recovering=*/true,
19612 /*consume_paren=*/true);
19620 /* Similarly, but expect leading and trailing parenthesis. This is a very
19621 common case for omp clauses. */
19624 cp_parser_omp_var_list (cp_parser
*parser
, enum omp_clause_code kind
, tree list
)
19626 if (cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
19627 return cp_parser_omp_var_list_no_open (parser
, kind
, list
);
19632 default ( shared | none ) */
19635 cp_parser_omp_clause_default (cp_parser
*parser
, tree list
)
19637 enum omp_clause_default_kind kind
= OMP_CLAUSE_DEFAULT_UNSPECIFIED
;
19640 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
19642 if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
19644 tree id
= cp_lexer_peek_token (parser
->lexer
)->u
.value
;
19645 const char *p
= IDENTIFIER_POINTER (id
);
19650 if (strcmp ("none", p
) != 0)
19652 kind
= OMP_CLAUSE_DEFAULT_NONE
;
19656 if (strcmp ("shared", p
) != 0)
19658 kind
= OMP_CLAUSE_DEFAULT_SHARED
;
19665 cp_lexer_consume_token (parser
->lexer
);
19670 cp_parser_error (parser
, "expected %<none%> or %<shared%>");
19673 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
19674 cp_parser_skip_to_closing_parenthesis (parser
, /*recovering=*/true,
19675 /*or_comma=*/false,
19676 /*consume_paren=*/true);
19678 if (kind
== OMP_CLAUSE_DEFAULT_UNSPECIFIED
)
19681 check_no_duplicate_clause (list
, OMP_CLAUSE_DEFAULT
, "default");
19682 c
= build_omp_clause (OMP_CLAUSE_DEFAULT
);
19683 OMP_CLAUSE_CHAIN (c
) = list
;
19684 OMP_CLAUSE_DEFAULT_KIND (c
) = kind
;
19690 if ( expression ) */
19693 cp_parser_omp_clause_if (cp_parser
*parser
, tree list
)
19697 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
19700 t
= cp_parser_condition (parser
);
19702 if (t
== error_mark_node
19703 || !cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
19704 cp_parser_skip_to_closing_parenthesis (parser
, /*recovering=*/true,
19705 /*or_comma=*/false,
19706 /*consume_paren=*/true);
19708 check_no_duplicate_clause (list
, OMP_CLAUSE_IF
, "if");
19710 c
= build_omp_clause (OMP_CLAUSE_IF
);
19711 OMP_CLAUSE_IF_EXPR (c
) = t
;
19712 OMP_CLAUSE_CHAIN (c
) = list
;
19721 cp_parser_omp_clause_nowait (cp_parser
*parser ATTRIBUTE_UNUSED
, tree list
)
19725 check_no_duplicate_clause (list
, OMP_CLAUSE_NOWAIT
, "nowait");
19727 c
= build_omp_clause (OMP_CLAUSE_NOWAIT
);
19728 OMP_CLAUSE_CHAIN (c
) = list
;
19733 num_threads ( expression ) */
19736 cp_parser_omp_clause_num_threads (cp_parser
*parser
, tree list
)
19740 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
19743 t
= cp_parser_expression (parser
, false);
19745 if (t
== error_mark_node
19746 || !cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
19747 cp_parser_skip_to_closing_parenthesis (parser
, /*recovering=*/true,
19748 /*or_comma=*/false,
19749 /*consume_paren=*/true);
19751 check_no_duplicate_clause (list
, OMP_CLAUSE_NUM_THREADS
, "num_threads");
19753 c
= build_omp_clause (OMP_CLAUSE_NUM_THREADS
);
19754 OMP_CLAUSE_NUM_THREADS_EXPR (c
) = t
;
19755 OMP_CLAUSE_CHAIN (c
) = list
;
19764 cp_parser_omp_clause_ordered (cp_parser
*parser ATTRIBUTE_UNUSED
, tree list
)
19768 check_no_duplicate_clause (list
, OMP_CLAUSE_ORDERED
, "ordered");
19770 c
= build_omp_clause (OMP_CLAUSE_ORDERED
);
19771 OMP_CLAUSE_CHAIN (c
) = list
;
19776 reduction ( reduction-operator : variable-list )
19778 reduction-operator:
19779 One of: + * - & ^ | && || */
19782 cp_parser_omp_clause_reduction (cp_parser
*parser
, tree list
)
19784 enum tree_code code
;
19787 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
19790 switch (cp_lexer_peek_token (parser
->lexer
)->type
)
19802 code
= BIT_AND_EXPR
;
19805 code
= BIT_XOR_EXPR
;
19808 code
= BIT_IOR_EXPR
;
19811 code
= TRUTH_ANDIF_EXPR
;
19814 code
= TRUTH_ORIF_EXPR
;
19817 cp_parser_error (parser
, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
19818 "%<|%>, %<&&%>, or %<||%>");
19820 cp_parser_skip_to_closing_parenthesis (parser
, /*recovering=*/true,
19821 /*or_comma=*/false,
19822 /*consume_paren=*/true);
19825 cp_lexer_consume_token (parser
->lexer
);
19827 if (!cp_parser_require (parser
, CPP_COLON
, "%<:%>"))
19830 nlist
= cp_parser_omp_var_list_no_open (parser
, OMP_CLAUSE_REDUCTION
, list
);
19831 for (c
= nlist
; c
!= list
; c
= OMP_CLAUSE_CHAIN (c
))
19832 OMP_CLAUSE_REDUCTION_CODE (c
) = code
;
19838 schedule ( schedule-kind )
19839 schedule ( schedule-kind , expression )
19842 static | dynamic | guided | runtime */
19845 cp_parser_omp_clause_schedule (cp_parser
*parser
, tree list
)
19849 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
19852 c
= build_omp_clause (OMP_CLAUSE_SCHEDULE
);
19854 if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
19856 tree id
= cp_lexer_peek_token (parser
->lexer
)->u
.value
;
19857 const char *p
= IDENTIFIER_POINTER (id
);
19862 if (strcmp ("dynamic", p
) != 0)
19864 OMP_CLAUSE_SCHEDULE_KIND (c
) = OMP_CLAUSE_SCHEDULE_DYNAMIC
;
19868 if (strcmp ("guided", p
) != 0)
19870 OMP_CLAUSE_SCHEDULE_KIND (c
) = OMP_CLAUSE_SCHEDULE_GUIDED
;
19874 if (strcmp ("runtime", p
) != 0)
19876 OMP_CLAUSE_SCHEDULE_KIND (c
) = OMP_CLAUSE_SCHEDULE_RUNTIME
;
19883 else if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_STATIC
))
19884 OMP_CLAUSE_SCHEDULE_KIND (c
) = OMP_CLAUSE_SCHEDULE_STATIC
;
19887 cp_lexer_consume_token (parser
->lexer
);
19889 if (cp_lexer_next_token_is (parser
->lexer
, CPP_COMMA
))
19891 cp_lexer_consume_token (parser
->lexer
);
19893 t
= cp_parser_assignment_expression (parser
, false);
19895 if (t
== error_mark_node
)
19897 else if (OMP_CLAUSE_SCHEDULE_KIND (c
) == OMP_CLAUSE_SCHEDULE_RUNTIME
)
19898 error ("schedule %<runtime%> does not take "
19899 "a %<chunk_size%> parameter");
19901 OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c
) = t
;
19903 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
19906 else if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<,%> or %<)%>"))
19909 check_no_duplicate_clause (list
, OMP_CLAUSE_SCHEDULE
, "schedule");
19910 OMP_CLAUSE_CHAIN (c
) = list
;
19914 cp_parser_error (parser
, "invalid schedule kind");
19916 cp_parser_skip_to_closing_parenthesis (parser
, /*recovering=*/true,
19917 /*or_comma=*/false,
19918 /*consume_paren=*/true);
19922 /* Parse all OpenMP clauses. The set clauses allowed by the directive
19923 is a bitmask in MASK. Return the list of clauses found; the result
19924 of clause default goes in *pdefault. */
19927 cp_parser_omp_all_clauses (cp_parser
*parser
, unsigned int mask
,
19928 const char *where
, cp_token
*pragma_tok
)
19930 tree clauses
= NULL
;
19933 while (cp_lexer_next_token_is_not (parser
->lexer
, CPP_PRAGMA_EOL
))
19935 pragma_omp_clause c_kind
;
19936 const char *c_name
;
19937 tree prev
= clauses
;
19939 if (!first
&& cp_lexer_next_token_is (parser
->lexer
, CPP_COMMA
))
19940 cp_lexer_consume_token (parser
->lexer
);
19942 c_kind
= cp_parser_omp_clause_name (parser
);
19947 case PRAGMA_OMP_CLAUSE_COPYIN
:
19948 clauses
= cp_parser_omp_var_list (parser
, OMP_CLAUSE_COPYIN
, clauses
);
19951 case PRAGMA_OMP_CLAUSE_COPYPRIVATE
:
19952 clauses
= cp_parser_omp_var_list (parser
, OMP_CLAUSE_COPYPRIVATE
,
19954 c_name
= "copyprivate";
19956 case PRAGMA_OMP_CLAUSE_DEFAULT
:
19957 clauses
= cp_parser_omp_clause_default (parser
, clauses
);
19958 c_name
= "default";
19960 case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE
:
19961 clauses
= cp_parser_omp_var_list (parser
, OMP_CLAUSE_FIRSTPRIVATE
,
19963 c_name
= "firstprivate";
19965 case PRAGMA_OMP_CLAUSE_IF
:
19966 clauses
= cp_parser_omp_clause_if (parser
, clauses
);
19969 case PRAGMA_OMP_CLAUSE_LASTPRIVATE
:
19970 clauses
= cp_parser_omp_var_list (parser
, OMP_CLAUSE_LASTPRIVATE
,
19972 c_name
= "lastprivate";
19974 case PRAGMA_OMP_CLAUSE_NOWAIT
:
19975 clauses
= cp_parser_omp_clause_nowait (parser
, clauses
);
19978 case PRAGMA_OMP_CLAUSE_NUM_THREADS
:
19979 clauses
= cp_parser_omp_clause_num_threads (parser
, clauses
);
19980 c_name
= "num_threads";
19982 case PRAGMA_OMP_CLAUSE_ORDERED
:
19983 clauses
= cp_parser_omp_clause_ordered (parser
, clauses
);
19984 c_name
= "ordered";
19986 case PRAGMA_OMP_CLAUSE_PRIVATE
:
19987 clauses
= cp_parser_omp_var_list (parser
, OMP_CLAUSE_PRIVATE
,
19989 c_name
= "private";
19991 case PRAGMA_OMP_CLAUSE_REDUCTION
:
19992 clauses
= cp_parser_omp_clause_reduction (parser
, clauses
);
19993 c_name
= "reduction";
19995 case PRAGMA_OMP_CLAUSE_SCHEDULE
:
19996 clauses
= cp_parser_omp_clause_schedule (parser
, clauses
);
19997 c_name
= "schedule";
19999 case PRAGMA_OMP_CLAUSE_SHARED
:
20000 clauses
= cp_parser_omp_var_list (parser
, OMP_CLAUSE_SHARED
,
20005 cp_parser_error (parser
, "expected %<#pragma omp%> clause");
20009 if (((mask
>> c_kind
) & 1) == 0)
20011 /* Remove the invalid clause(s) from the list to avoid
20012 confusing the rest of the compiler. */
20014 error ("%qs is not valid for %qs", c_name
, where
);
20018 cp_parser_skip_to_pragma_eol (parser
, pragma_tok
);
20019 return finish_omp_clauses (clauses
);
20026 In practice, we're also interested in adding the statement to an
20027 outer node. So it is convenient if we work around the fact that
20028 cp_parser_statement calls add_stmt. */
20031 cp_parser_begin_omp_structured_block (cp_parser
*parser
)
20033 unsigned save
= parser
->in_statement
;
20035 /* Only move the values to IN_OMP_BLOCK if they weren't false.
20036 This preserves the "not within loop or switch" style error messages
20037 for nonsense cases like
20043 if (parser
->in_statement
)
20044 parser
->in_statement
= IN_OMP_BLOCK
;
20050 cp_parser_end_omp_structured_block (cp_parser
*parser
, unsigned save
)
20052 parser
->in_statement
= save
;
20056 cp_parser_omp_structured_block (cp_parser
*parser
)
20058 tree stmt
= begin_omp_structured_block ();
20059 unsigned int save
= cp_parser_begin_omp_structured_block (parser
);
20061 cp_parser_statement (parser
, NULL_TREE
, false, NULL
);
20063 cp_parser_end_omp_structured_block (parser
, save
);
20064 return finish_omp_structured_block (stmt
);
20068 # pragma omp atomic new-line
20072 x binop= expr | x++ | ++x | x-- | --x
20074 +, *, -, /, &, ^, |, <<, >>
20076 where x is an lvalue expression with scalar type. */
20079 cp_parser_omp_atomic (cp_parser
*parser
, cp_token
*pragma_tok
)
20082 enum tree_code code
;
20084 cp_parser_require_pragma_eol (parser
, pragma_tok
);
20086 lhs
= cp_parser_unary_expression (parser
, /*address_p=*/false,
20088 switch (TREE_CODE (lhs
))
20093 case PREINCREMENT_EXPR
:
20094 case POSTINCREMENT_EXPR
:
20095 lhs
= TREE_OPERAND (lhs
, 0);
20097 rhs
= integer_one_node
;
20100 case PREDECREMENT_EXPR
:
20101 case POSTDECREMENT_EXPR
:
20102 lhs
= TREE_OPERAND (lhs
, 0);
20104 rhs
= integer_one_node
;
20108 switch (cp_lexer_peek_token (parser
->lexer
)->type
)
20114 code
= TRUNC_DIV_EXPR
;
20122 case CPP_LSHIFT_EQ
:
20123 code
= LSHIFT_EXPR
;
20125 case CPP_RSHIFT_EQ
:
20126 code
= RSHIFT_EXPR
;
20129 code
= BIT_AND_EXPR
;
20132 code
= BIT_IOR_EXPR
;
20135 code
= BIT_XOR_EXPR
;
20138 cp_parser_error (parser
,
20139 "invalid operator for %<#pragma omp atomic%>");
20142 cp_lexer_consume_token (parser
->lexer
);
20144 rhs
= cp_parser_expression (parser
, false);
20145 if (rhs
== error_mark_node
)
20149 finish_omp_atomic (code
, lhs
, rhs
);
20150 cp_parser_consume_semicolon_at_end_of_statement (parser
);
20154 cp_parser_skip_to_end_of_block_or_statement (parser
);
20159 # pragma omp barrier new-line */
20162 cp_parser_omp_barrier (cp_parser
*parser
, cp_token
*pragma_tok
)
20164 cp_parser_require_pragma_eol (parser
, pragma_tok
);
20165 finish_omp_barrier ();
20169 # pragma omp critical [(name)] new-line
20170 structured-block */
20173 cp_parser_omp_critical (cp_parser
*parser
, cp_token
*pragma_tok
)
20175 tree stmt
, name
= NULL
;
20177 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_PAREN
))
20179 cp_lexer_consume_token (parser
->lexer
);
20181 name
= cp_parser_identifier (parser
);
20183 if (name
== error_mark_node
20184 || !cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
20185 cp_parser_skip_to_closing_parenthesis (parser
, /*recovering=*/true,
20186 /*or_comma=*/false,
20187 /*consume_paren=*/true);
20188 if (name
== error_mark_node
)
20191 cp_parser_require_pragma_eol (parser
, pragma_tok
);
20193 stmt
= cp_parser_omp_structured_block (parser
);
20194 return c_finish_omp_critical (stmt
, name
);
20198 # pragma omp flush flush-vars[opt] new-line
20201 ( variable-list ) */
20204 cp_parser_omp_flush (cp_parser
*parser
, cp_token
*pragma_tok
)
20206 if (cp_lexer_next_token_is (parser
->lexer
, CPP_OPEN_PAREN
))
20207 (void) cp_parser_omp_var_list (parser
, 0, NULL
);
20208 cp_parser_require_pragma_eol (parser
, pragma_tok
);
20210 finish_omp_flush ();
20213 /* Parse the restricted form of the for statment allowed by OpenMP. */
20216 cp_parser_omp_for_loop (cp_parser
*parser
)
20218 tree init
, cond
, incr
, body
, decl
, pre_body
;
20221 if (!cp_lexer_next_token_is_keyword (parser
->lexer
, RID_FOR
))
20223 cp_parser_error (parser
, "for statement expected");
20226 loc
= cp_lexer_consume_token (parser
->lexer
)->location
;
20227 if (!cp_parser_require (parser
, CPP_OPEN_PAREN
, "%<(%>"))
20230 init
= decl
= NULL
;
20231 pre_body
= push_stmt_list ();
20232 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
20234 cp_decl_specifier_seq type_specifiers
;
20236 /* First, try to parse as an initialized declaration. See
20237 cp_parser_condition, from whence the bulk of this is copied. */
20239 cp_parser_parse_tentatively (parser
);
20240 cp_parser_type_specifier_seq (parser
, /*is_condition=*/false,
20242 if (!cp_parser_error_occurred (parser
))
20244 tree asm_specification
, attributes
;
20245 cp_declarator
*declarator
;
20247 declarator
= cp_parser_declarator (parser
,
20248 CP_PARSER_DECLARATOR_NAMED
,
20249 /*ctor_dtor_or_conv_p=*/NULL
,
20250 /*parenthesized_p=*/NULL
,
20251 /*member_p=*/false);
20252 attributes
= cp_parser_attributes_opt (parser
);
20253 asm_specification
= cp_parser_asm_specification_opt (parser
);
20255 cp_parser_require (parser
, CPP_EQ
, "%<=%>");
20256 if (cp_parser_parse_definitely (parser
))
20260 decl
= start_decl (declarator
, &type_specifiers
,
20261 /*initialized_p=*/false, attributes
,
20262 /*prefix_attributes=*/NULL_TREE
,
20265 init
= cp_parser_assignment_expression (parser
, false);
20267 if (TREE_CODE (TREE_TYPE (decl
)) == REFERENCE_TYPE
)
20268 init
= error_mark_node
;
20270 cp_finish_decl (decl
, NULL_TREE
, /*init_const_expr_p=*/false,
20271 asm_specification
, LOOKUP_ONLYCONVERTING
);
20274 pop_scope (pushed_scope
);
20278 cp_parser_abort_tentative_parse (parser
);
20280 /* If parsing as an initialized declaration failed, try again as
20281 a simple expression. */
20283 init
= cp_parser_expression (parser
, false);
20285 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
20286 pre_body
= pop_stmt_list (pre_body
);
20289 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_SEMICOLON
))
20290 cond
= cp_parser_condition (parser
);
20291 cp_parser_require (parser
, CPP_SEMICOLON
, "%<;%>");
20294 if (cp_lexer_next_token_is_not (parser
->lexer
, CPP_CLOSE_PAREN
))
20295 incr
= cp_parser_expression (parser
, false);
20297 if (!cp_parser_require (parser
, CPP_CLOSE_PAREN
, "%<)%>"))
20298 cp_parser_skip_to_closing_parenthesis (parser
, /*recovering=*/true,
20299 /*or_comma=*/false,
20300 /*consume_paren=*/true);
20302 /* Note that we saved the original contents of this flag when we entered
20303 the structured block, and so we don't need to re-save it here. */
20304 parser
->in_statement
= IN_OMP_FOR
;
20306 /* Note that the grammar doesn't call for a structured block here,
20307 though the loop as a whole is a structured block. */
20308 body
= push_stmt_list ();
20309 cp_parser_statement (parser
, NULL_TREE
, false, NULL
);
20310 body
= pop_stmt_list (body
);
20312 return finish_omp_for (loc
, decl
, init
, cond
, incr
, body
, pre_body
);
20316 #pragma omp for for-clause[optseq] new-line
20319 #define OMP_FOR_CLAUSE_MASK \
20320 ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE) \
20321 | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE) \
20322 | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE) \
20323 | (1u << PRAGMA_OMP_CLAUSE_REDUCTION) \
20324 | (1u << PRAGMA_OMP_CLAUSE_ORDERED) \
20325 | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE) \
20326 | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
20329 cp_parser_omp_for (cp_parser
*parser
, cp_token
*pragma_tok
)
20331 tree clauses
, sb
, ret
;
20334 clauses
= cp_parser_omp_all_clauses (parser
, OMP_FOR_CLAUSE_MASK
,
20335 "#pragma omp for", pragma_tok
);
20337 sb
= begin_omp_structured_block ();
20338 save
= cp_parser_begin_omp_structured_block (parser
);
20340 ret
= cp_parser_omp_for_loop (parser
);
20342 OMP_FOR_CLAUSES (ret
) = clauses
;
20344 cp_parser_end_omp_structured_block (parser
, save
);
20345 add_stmt (finish_omp_structured_block (sb
));
20351 # pragma omp master new-line
20352 structured-block */
20355 cp_parser_omp_master (cp_parser
*parser
, cp_token
*pragma_tok
)
20357 cp_parser_require_pragma_eol (parser
, pragma_tok
);
20358 return c_finish_omp_master (cp_parser_omp_structured_block (parser
));
20362 # pragma omp ordered new-line
20363 structured-block */
20366 cp_parser_omp_ordered (cp_parser
*parser
, cp_token
*pragma_tok
)
20368 cp_parser_require_pragma_eol (parser
, pragma_tok
);
20369 return c_finish_omp_ordered (cp_parser_omp_structured_block (parser
));
20375 { section-sequence }
20378 section-directive[opt] structured-block
20379 section-sequence section-directive structured-block */
20382 cp_parser_omp_sections_scope (cp_parser
*parser
)
20384 tree stmt
, substmt
;
20385 bool error_suppress
= false;
20388 if (!cp_parser_require (parser
, CPP_OPEN_BRACE
, "%<{%>"))
20391 stmt
= push_stmt_list ();
20393 if (cp_lexer_peek_token (parser
->lexer
)->pragma_kind
!= PRAGMA_OMP_SECTION
)
20397 substmt
= begin_omp_structured_block ();
20398 save
= cp_parser_begin_omp_structured_block (parser
);
20402 cp_parser_statement (parser
, NULL_TREE
, false, NULL
);
20404 tok
= cp_lexer_peek_token (parser
->lexer
);
20405 if (tok
->pragma_kind
== PRAGMA_OMP_SECTION
)
20407 if (tok
->type
== CPP_CLOSE_BRACE
)
20409 if (tok
->type
== CPP_EOF
)
20413 cp_parser_end_omp_structured_block (parser
, save
);
20414 substmt
= finish_omp_structured_block (substmt
);
20415 substmt
= build1 (OMP_SECTION
, void_type_node
, substmt
);
20416 add_stmt (substmt
);
20421 tok
= cp_lexer_peek_token (parser
->lexer
);
20422 if (tok
->type
== CPP_CLOSE_BRACE
)
20424 if (tok
->type
== CPP_EOF
)
20427 if (tok
->pragma_kind
== PRAGMA_OMP_SECTION
)
20429 cp_lexer_consume_token (parser
->lexer
);
20430 cp_parser_require_pragma_eol (parser
, tok
);
20431 error_suppress
= false;
20433 else if (!error_suppress
)
20435 cp_parser_error (parser
, "expected %<#pragma omp section%> or %<}%>");
20436 error_suppress
= true;
20439 substmt
= cp_parser_omp_structured_block (parser
);
20440 substmt
= build1 (OMP_SECTION
, void_type_node
, substmt
);
20441 add_stmt (substmt
);
20443 cp_parser_require (parser
, CPP_CLOSE_BRACE
, "%<}%>");
20445 substmt
= pop_stmt_list (stmt
);
20447 stmt
= make_node (OMP_SECTIONS
);
20448 TREE_TYPE (stmt
) = void_type_node
;
20449 OMP_SECTIONS_BODY (stmt
) = substmt
;
20456 # pragma omp sections sections-clause[optseq] newline
20459 #define OMP_SECTIONS_CLAUSE_MASK \
20460 ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE) \
20461 | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE) \
20462 | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE) \
20463 | (1u << PRAGMA_OMP_CLAUSE_REDUCTION) \
20464 | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
20467 cp_parser_omp_sections (cp_parser
*parser
, cp_token
*pragma_tok
)
20471 clauses
= cp_parser_omp_all_clauses (parser
, OMP_SECTIONS_CLAUSE_MASK
,
20472 "#pragma omp sections", pragma_tok
);
20474 ret
= cp_parser_omp_sections_scope (parser
);
20476 OMP_SECTIONS_CLAUSES (ret
) = clauses
;
20482 # pragma parallel parallel-clause new-line
20483 # pragma parallel for parallel-for-clause new-line
20484 # pragma parallel sections parallel-sections-clause new-line */
20486 #define OMP_PARALLEL_CLAUSE_MASK \
20487 ( (1u << PRAGMA_OMP_CLAUSE_IF) \
20488 | (1u << PRAGMA_OMP_CLAUSE_PRIVATE) \
20489 | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE) \
20490 | (1u << PRAGMA_OMP_CLAUSE_DEFAULT) \
20491 | (1u << PRAGMA_OMP_CLAUSE_SHARED) \
20492 | (1u << PRAGMA_OMP_CLAUSE_COPYIN) \
20493 | (1u << PRAGMA_OMP_CLAUSE_REDUCTION) \
20494 | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
20497 cp_parser_omp_parallel (cp_parser
*parser
, cp_token
*pragma_tok
)
20499 enum pragma_kind p_kind
= PRAGMA_OMP_PARALLEL
;
20500 const char *p_name
= "#pragma omp parallel";
20501 tree stmt
, clauses
, par_clause
, ws_clause
, block
;
20502 unsigned int mask
= OMP_PARALLEL_CLAUSE_MASK
;
20505 if (cp_lexer_next_token_is_keyword (parser
->lexer
, RID_FOR
))
20507 cp_lexer_consume_token (parser
->lexer
);
20508 p_kind
= PRAGMA_OMP_PARALLEL_FOR
;
20509 p_name
= "#pragma omp parallel for";
20510 mask
|= OMP_FOR_CLAUSE_MASK
;
20511 mask
&= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT
);
20513 else if (cp_lexer_next_token_is (parser
->lexer
, CPP_NAME
))
20515 tree id
= cp_lexer_peek_token (parser
->lexer
)->u
.value
;
20516 const char *p
= IDENTIFIER_POINTER (id
);
20517 if (strcmp (p
, "sections") == 0)
20519 cp_lexer_consume_token (parser
->lexer
);
20520 p_kind
= PRAGMA_OMP_PARALLEL_SECTIONS
;
20521 p_name
= "#pragma omp parallel sections";
20522 mask
|= OMP_SECTIONS_CLAUSE_MASK
;
20523 mask
&= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT
);
20527 clauses
= cp_parser_omp_all_clauses (parser
, mask
, p_name
, pragma_tok
);
20528 block
= begin_omp_parallel ();
20529 save
= cp_parser_begin_omp_structured_block (parser
);
20533 case PRAGMA_OMP_PARALLEL
:
20534 cp_parser_statement (parser
, NULL_TREE
, false, NULL
);
20535 par_clause
= clauses
;
20538 case PRAGMA_OMP_PARALLEL_FOR
:
20539 c_split_parallel_clauses (clauses
, &par_clause
, &ws_clause
);
20540 stmt
= cp_parser_omp_for_loop (parser
);
20542 OMP_FOR_CLAUSES (stmt
) = ws_clause
;
20545 case PRAGMA_OMP_PARALLEL_SECTIONS
:
20546 c_split_parallel_clauses (clauses
, &par_clause
, &ws_clause
);
20547 stmt
= cp_parser_omp_sections_scope (parser
);
20549 OMP_SECTIONS_CLAUSES (stmt
) = ws_clause
;
20553 gcc_unreachable ();
20556 cp_parser_end_omp_structured_block (parser
, save
);
20557 stmt
= finish_omp_parallel (par_clause
, block
);
20558 if (p_kind
!= PRAGMA_OMP_PARALLEL
)
20559 OMP_PARALLEL_COMBINED (stmt
) = 1;
20564 # pragma omp single single-clause[optseq] new-line
20565 structured-block */
20567 #define OMP_SINGLE_CLAUSE_MASK \
20568 ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE) \
20569 | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE) \
20570 | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE) \
20571 | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
20574 cp_parser_omp_single (cp_parser
*parser
, cp_token
*pragma_tok
)
20576 tree stmt
= make_node (OMP_SINGLE
);
20577 TREE_TYPE (stmt
) = void_type_node
;
20579 OMP_SINGLE_CLAUSES (stmt
)
20580 = cp_parser_omp_all_clauses (parser
, OMP_SINGLE_CLAUSE_MASK
,
20581 "#pragma omp single", pragma_tok
);
20582 OMP_SINGLE_BODY (stmt
) = cp_parser_omp_structured_block (parser
);
20584 return add_stmt (stmt
);
20588 # pragma omp threadprivate (variable-list) */
20591 cp_parser_omp_threadprivate (cp_parser
*parser
, cp_token
*pragma_tok
)
20595 vars
= cp_parser_omp_var_list (parser
, 0, NULL
);
20596 cp_parser_require_pragma_eol (parser
, pragma_tok
);
20598 finish_omp_threadprivate (vars
);
20601 /* Main entry point to OpenMP statement pragmas. */
20604 cp_parser_omp_construct (cp_parser
*parser
, cp_token
*pragma_tok
)
20608 switch (pragma_tok
->pragma_kind
)
20610 case PRAGMA_OMP_ATOMIC
:
20611 cp_parser_omp_atomic (parser
, pragma_tok
);
20613 case PRAGMA_OMP_CRITICAL
:
20614 stmt
= cp_parser_omp_critical (parser
, pragma_tok
);
20616 case PRAGMA_OMP_FOR
:
20617 stmt
= cp_parser_omp_for (parser
, pragma_tok
);
20619 case PRAGMA_OMP_MASTER
:
20620 stmt
= cp_parser_omp_master (parser
, pragma_tok
);
20622 case PRAGMA_OMP_ORDERED
:
20623 stmt
= cp_parser_omp_ordered (parser
, pragma_tok
);
20625 case PRAGMA_OMP_PARALLEL
:
20626 stmt
= cp_parser_omp_parallel (parser
, pragma_tok
);
20628 case PRAGMA_OMP_SECTIONS
:
20629 stmt
= cp_parser_omp_sections (parser
, pragma_tok
);
20631 case PRAGMA_OMP_SINGLE
:
20632 stmt
= cp_parser_omp_single (parser
, pragma_tok
);
20635 gcc_unreachable ();
20639 SET_EXPR_LOCATION (stmt
, pragma_tok
->location
);
20644 static GTY (()) cp_parser
*the_parser
;
20647 /* Special handling for the first token or line in the file. The first
20648 thing in the file might be #pragma GCC pch_preprocess, which loads a
20649 PCH file, which is a GC collection point. So we need to handle this
20650 first pragma without benefit of an existing lexer structure.
20652 Always returns one token to the caller in *FIRST_TOKEN. This is
20653 either the true first token of the file, or the first token after
20654 the initial pragma. */
20657 cp_parser_initial_pragma (cp_token
*first_token
)
20661 cp_lexer_get_preprocessor_token (NULL
, first_token
);
20662 if (first_token
->pragma_kind
!= PRAGMA_GCC_PCH_PREPROCESS
)
20665 cp_lexer_get_preprocessor_token (NULL
, first_token
);
20666 if (first_token
->type
== CPP_STRING
)
20668 name
= first_token
->u
.value
;
20670 cp_lexer_get_preprocessor_token (NULL
, first_token
);
20671 if (first_token
->type
!= CPP_PRAGMA_EOL
)
20672 error ("junk at end of %<#pragma GCC pch_preprocess%>");
20675 error ("expected string literal");
20677 /* Skip to the end of the pragma. */
20678 while (first_token
->type
!= CPP_PRAGMA_EOL
&& first_token
->type
!= CPP_EOF
)
20679 cp_lexer_get_preprocessor_token (NULL
, first_token
);
20681 /* Now actually load the PCH file. */
20683 c_common_pch_pragma (parse_in
, TREE_STRING_POINTER (name
));
20685 /* Read one more token to return to our caller. We have to do this
20686 after reading the PCH file in, since its pointers have to be
20688 cp_lexer_get_preprocessor_token (NULL
, first_token
);
20691 /* Normal parsing of a pragma token. Here we can (and must) use the
20695 cp_parser_pragma (cp_parser
*parser
, enum pragma_context context
)
20697 cp_token
*pragma_tok
;
20700 pragma_tok
= cp_lexer_consume_token (parser
->lexer
);
20701 gcc_assert (pragma_tok
->type
== CPP_PRAGMA
);
20702 parser
->lexer
->in_pragma
= true;
20704 id
= pragma_tok
->pragma_kind
;
20707 case PRAGMA_GCC_PCH_PREPROCESS
:
20708 error ("%<#pragma GCC pch_preprocess%> must be first");
20711 case PRAGMA_OMP_BARRIER
:
20714 case pragma_compound
:
20715 cp_parser_omp_barrier (parser
, pragma_tok
);
20718 error ("%<#pragma omp barrier%> may only be "
20719 "used in compound statements");
20726 case PRAGMA_OMP_FLUSH
:
20729 case pragma_compound
:
20730 cp_parser_omp_flush (parser
, pragma_tok
);
20733 error ("%<#pragma omp flush%> may only be "
20734 "used in compound statements");
20741 case PRAGMA_OMP_THREADPRIVATE
:
20742 cp_parser_omp_threadprivate (parser
, pragma_tok
);
20745 case PRAGMA_OMP_ATOMIC
:
20746 case PRAGMA_OMP_CRITICAL
:
20747 case PRAGMA_OMP_FOR
:
20748 case PRAGMA_OMP_MASTER
:
20749 case PRAGMA_OMP_ORDERED
:
20750 case PRAGMA_OMP_PARALLEL
:
20751 case PRAGMA_OMP_SECTIONS
:
20752 case PRAGMA_OMP_SINGLE
:
20753 if (context
== pragma_external
)
20755 cp_parser_omp_construct (parser
, pragma_tok
);
20758 case PRAGMA_OMP_SECTION
:
20759 error ("%<#pragma omp section%> may only be used in "
20760 "%<#pragma omp sections%> construct");
20764 gcc_assert (id
>= PRAGMA_FIRST_EXTERNAL
);
20765 c_invoke_pragma_handler (id
);
20769 cp_parser_error (parser
, "expected declaration specifiers");
20773 cp_parser_skip_to_pragma_eol (parser
, pragma_tok
);
20777 /* The interface the pragma parsers have to the lexer. */
20780 pragma_lex (tree
*value
)
20783 enum cpp_ttype ret
;
20785 tok
= cp_lexer_peek_token (the_parser
->lexer
);
20788 *value
= tok
->u
.value
;
20790 if (ret
== CPP_PRAGMA_EOL
|| ret
== CPP_EOF
)
20792 else if (ret
== CPP_STRING
)
20793 *value
= cp_parser_string_literal (the_parser
, false, false);
20796 cp_lexer_consume_token (the_parser
->lexer
);
20797 if (ret
== CPP_KEYWORD
)
20805 /* External interface. */
20807 /* Parse one entire translation unit. */
20810 c_parse_file (void)
20812 bool error_occurred
;
20813 static bool already_called
= false;
20815 if (already_called
)
20817 sorry ("inter-module optimizations not implemented for C++");
20820 already_called
= true;
20822 the_parser
= cp_parser_new ();
20823 push_deferring_access_checks (flag_access_control
20824 ? dk_no_deferred
: dk_no_check
);
20825 error_occurred
= cp_parser_translation_unit (the_parser
);
20829 #include "gt-cp-parser.h"