re PR c++/29080 (Multiple-inheritance with template method function code triggers...
[platform/upstream/gcc.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005  Free Software Foundation, Inc.
4    Written by Mark Mitchell <mark@codesourcery.com>.
5
6    This file is part of GCC.
7
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 2, or (at your option)
11    any later version.
12
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.
17
18    You should have received a copy of the GNU General Public License
19    along with GCC; see the file COPYING.  If not, write to the Free
20    Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21    02110-1301, USA.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "dyn-string.h"
28 #include "varray.h"
29 #include "cpplib.h"
30 #include "tree.h"
31 #include "cp-tree.h"
32 #include "c-pragma.h"
33 #include "decl.h"
34 #include "flags.h"
35 #include "diagnostic.h"
36 #include "toplev.h"
37 #include "output.h"
38 #include "target.h"
39 #include "cgraph.h"
40 #include "c-common.h"
41
42 \f
43 /* The lexer.  */
44
45 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
46    and c-lex.c) and the C++ parser.  */
47
48 /* A C++ token.  */
49
50 typedef struct cp_token GTY (())
51 {
52   /* The kind of token.  */
53   ENUM_BITFIELD (cpp_ttype) type : 8;
54   /* If this token is a keyword, this value indicates which keyword.
55      Otherwise, this value is RID_MAX.  */
56   ENUM_BITFIELD (rid) keyword : 8;
57   /* Token flags.  */
58   unsigned char flags;
59   /* Identifier for the pragma.  */
60   ENUM_BITFIELD (pragma_kind) pragma_kind : 6;
61   /* True if this token is from a system header.  */
62   BOOL_BITFIELD in_system_header : 1;
63   /* True if this token is from a context where it is implicitly extern "C" */
64   BOOL_BITFIELD implicit_extern_c : 1;
65   /* True for a CPP_NAME token that is not a keyword (i.e., for which
66      KEYWORD is RID_MAX) iff this name was looked up and found to be
67      ambiguous.  An error has already been reported.  */
68   BOOL_BITFIELD ambiguous_p : 1;
69   /* The input file stack index at which this token was found.  */
70   unsigned input_file_stack_index : INPUT_FILE_STACK_BITS;
71   /* The value associated with this token, if any.  */
72   tree value;
73   /* The location at which this token was found.  */
74   location_t location;
75 } cp_token;
76
77 /* We use a stack of token pointer for saving token sets.  */
78 typedef struct cp_token *cp_token_position;
79 DEF_VEC_P (cp_token_position);
80 DEF_VEC_ALLOC_P (cp_token_position,heap);
81
82 static const cp_token eof_token =
83 {
84   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, 0, 0, false, 0, NULL_TREE,
85 #if USE_MAPPED_LOCATION
86   0
87 #else
88   {0, 0}
89 #endif
90 };
91
92 /* The cp_lexer structure represents the C++ lexer.  It is responsible
93    for managing the token stream from the preprocessor and supplying
94    it to the parser.  Tokens are never added to the cp_lexer after
95    it is created.  */
96
97 typedef struct cp_lexer GTY (())
98 {
99   /* The memory allocated for the buffer.  NULL if this lexer does not
100      own the token buffer.  */
101   cp_token * GTY ((length ("%h.buffer_length"))) buffer;
102   /* If the lexer owns the buffer, this is the number of tokens in the
103      buffer.  */
104   size_t buffer_length;
105
106   /* A pointer just past the last available token.  The tokens
107      in this lexer are [buffer, last_token).  */
108   cp_token_position GTY ((skip)) last_token;
109
110   /* The next available token.  If NEXT_TOKEN is &eof_token, then there are
111      no more available tokens.  */
112   cp_token_position GTY ((skip)) next_token;
113
114   /* A stack indicating positions at which cp_lexer_save_tokens was
115      called.  The top entry is the most recent position at which we
116      began saving tokens.  If the stack is non-empty, we are saving
117      tokens.  */
118   VEC(cp_token_position,heap) *GTY ((skip)) saved_tokens;
119
120   /* The next lexer in a linked list of lexers.  */
121   struct cp_lexer *next;
122
123   /* True if we should output debugging information.  */
124   bool debugging_p;
125
126   /* True if we're in the context of parsing a pragma, and should not
127      increment past the end-of-line marker.  */
128   bool in_pragma;
129 } cp_lexer;
130
131 /* cp_token_cache is a range of tokens.  There is no need to represent
132    allocate heap memory for it, since tokens are never removed from the
133    lexer's array.  There is also no need for the GC to walk through
134    a cp_token_cache, since everything in here is referenced through
135    a lexer.  */
136
137 typedef struct cp_token_cache GTY(())
138 {
139   /* The beginning of the token range.  */
140   cp_token * GTY((skip)) first;
141
142   /* Points immediately after the last token in the range.  */
143   cp_token * GTY ((skip)) last;
144 } cp_token_cache;
145
146 /* Prototypes.  */
147
148 static cp_lexer *cp_lexer_new_main
149   (void);
150 static cp_lexer *cp_lexer_new_from_tokens
151   (cp_token_cache *tokens);
152 static void cp_lexer_destroy
153   (cp_lexer *);
154 static int cp_lexer_saving_tokens
155   (const cp_lexer *);
156 static cp_token_position cp_lexer_token_position
157   (cp_lexer *, bool);
158 static cp_token *cp_lexer_token_at
159   (cp_lexer *, cp_token_position);
160 static void cp_lexer_get_preprocessor_token
161   (cp_lexer *, cp_token *);
162 static inline cp_token *cp_lexer_peek_token
163   (cp_lexer *);
164 static cp_token *cp_lexer_peek_nth_token
165   (cp_lexer *, size_t);
166 static inline bool cp_lexer_next_token_is
167   (cp_lexer *, enum cpp_ttype);
168 static bool cp_lexer_next_token_is_not
169   (cp_lexer *, enum cpp_ttype);
170 static bool cp_lexer_next_token_is_keyword
171   (cp_lexer *, enum rid);
172 static cp_token *cp_lexer_consume_token
173   (cp_lexer *);
174 static void cp_lexer_purge_token
175   (cp_lexer *);
176 static void cp_lexer_purge_tokens_after
177   (cp_lexer *, cp_token_position);
178 static void cp_lexer_save_tokens
179   (cp_lexer *);
180 static void cp_lexer_commit_tokens
181   (cp_lexer *);
182 static void cp_lexer_rollback_tokens
183   (cp_lexer *);
184 #ifdef ENABLE_CHECKING
185 static void cp_lexer_print_token
186   (FILE *, cp_token *);
187 static inline bool cp_lexer_debugging_p
188   (cp_lexer *);
189 static void cp_lexer_start_debugging
190   (cp_lexer *) ATTRIBUTE_UNUSED;
191 static void cp_lexer_stop_debugging
192   (cp_lexer *) ATTRIBUTE_UNUSED;
193 #else
194 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
195    about passing NULL to functions that require non-NULL arguments
196    (fputs, fprintf).  It will never be used, so all we need is a value
197    of the right type that's guaranteed not to be NULL.  */
198 #define cp_lexer_debug_stream stdout
199 #define cp_lexer_print_token(str, tok) (void) 0
200 #define cp_lexer_debugging_p(lexer) 0
201 #endif /* ENABLE_CHECKING */
202
203 static cp_token_cache *cp_token_cache_new
204   (cp_token *, cp_token *);
205
206 static void cp_parser_initial_pragma
207   (cp_token *);
208
209 /* Manifest constants.  */
210 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
211 #define CP_SAVED_TOKEN_STACK 5
212
213 /* A token type for keywords, as opposed to ordinary identifiers.  */
214 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
215
216 /* A token type for template-ids.  If a template-id is processed while
217    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
218    the value of the CPP_TEMPLATE_ID is whatever was returned by
219    cp_parser_template_id.  */
220 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
221
222 /* A token type for nested-name-specifiers.  If a
223    nested-name-specifier is processed while parsing tentatively, it is
224    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
225    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
226    cp_parser_nested_name_specifier_opt.  */
227 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
228
229 /* A token type for tokens that are not tokens at all; these are used
230    to represent slots in the array where there used to be a token
231    that has now been deleted.  */
232 #define CPP_PURGED ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
233
234 /* The number of token types, including C++-specific ones.  */
235 #define N_CP_TTYPES ((int) (CPP_PURGED + 1))
236
237 /* Variables.  */
238
239 #ifdef ENABLE_CHECKING
240 /* The stream to which debugging output should be written.  */
241 static FILE *cp_lexer_debug_stream;
242 #endif /* ENABLE_CHECKING */
243
244 /* Create a new main C++ lexer, the lexer that gets tokens from the
245    preprocessor.  */
246
247 static cp_lexer *
248 cp_lexer_new_main (void)
249 {
250   cp_token first_token;
251   cp_lexer *lexer;
252   cp_token *pos;
253   size_t alloc;
254   size_t space;
255   cp_token *buffer;
256
257   /* It's possible that parsing the first pragma will load a PCH file,
258      which is a GC collection point.  So we have to do that before
259      allocating any memory.  */
260   cp_parser_initial_pragma (&first_token);
261
262   /* Tell c_lex_with_flags not to merge string constants.  */
263   c_lex_return_raw_strings = true;
264
265   c_common_no_more_pch ();
266
267   /* Allocate the memory.  */
268   lexer = GGC_CNEW (cp_lexer);
269
270 #ifdef ENABLE_CHECKING
271   /* Initially we are not debugging.  */
272   lexer->debugging_p = false;
273 #endif /* ENABLE_CHECKING */
274   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
275                                    CP_SAVED_TOKEN_STACK);
276
277   /* Create the buffer.  */
278   alloc = CP_LEXER_BUFFER_SIZE;
279   buffer = GGC_NEWVEC (cp_token, alloc);
280
281   /* Put the first token in the buffer.  */
282   space = alloc;
283   pos = buffer;
284   *pos = first_token;
285
286   /* Get the remaining tokens from the preprocessor.  */
287   while (pos->type != CPP_EOF)
288     {
289       pos++;
290       if (!--space)
291         {
292           space = alloc;
293           alloc *= 2;
294           buffer = GGC_RESIZEVEC (cp_token, buffer, alloc);
295           pos = buffer + space;
296         }
297       cp_lexer_get_preprocessor_token (lexer, pos);
298     }
299   lexer->buffer = buffer;
300   lexer->buffer_length = alloc - space;
301   lexer->last_token = pos;
302   lexer->next_token = lexer->buffer_length ? buffer : (cp_token *)&eof_token;
303
304   /* Subsequent preprocessor diagnostics should use compiler
305      diagnostic functions to get the compiler source location.  */
306   cpp_get_options (parse_in)->client_diagnostic = true;
307   cpp_get_callbacks (parse_in)->error = cp_cpp_error;
308
309   gcc_assert (lexer->next_token->type != CPP_PURGED);
310   return lexer;
311 }
312
313 /* Create a new lexer whose token stream is primed with the tokens in
314    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
315
316 static cp_lexer *
317 cp_lexer_new_from_tokens (cp_token_cache *cache)
318 {
319   cp_token *first = cache->first;
320   cp_token *last = cache->last;
321   cp_lexer *lexer = GGC_CNEW (cp_lexer);
322
323   /* We do not own the buffer.  */
324   lexer->buffer = NULL;
325   lexer->buffer_length = 0;
326   lexer->next_token = first == last ? (cp_token *)&eof_token : first;
327   lexer->last_token = last;
328
329   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
330                                    CP_SAVED_TOKEN_STACK);
331
332 #ifdef ENABLE_CHECKING
333   /* Initially we are not debugging.  */
334   lexer->debugging_p = false;
335 #endif
336
337   gcc_assert (lexer->next_token->type != CPP_PURGED);
338   return lexer;
339 }
340
341 /* Frees all resources associated with LEXER.  */
342
343 static void
344 cp_lexer_destroy (cp_lexer *lexer)
345 {
346   if (lexer->buffer)
347     ggc_free (lexer->buffer);
348   VEC_free (cp_token_position, heap, lexer->saved_tokens);
349   ggc_free (lexer);
350 }
351
352 /* Returns nonzero if debugging information should be output.  */
353
354 #ifdef ENABLE_CHECKING
355
356 static inline bool
357 cp_lexer_debugging_p (cp_lexer *lexer)
358 {
359   return lexer->debugging_p;
360 }
361
362 #endif /* ENABLE_CHECKING */
363
364 static inline cp_token_position
365 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
366 {
367   gcc_assert (!previous_p || lexer->next_token != &eof_token);
368
369   return lexer->next_token - previous_p;
370 }
371
372 static inline cp_token *
373 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
374 {
375   return pos;
376 }
377
378 /* nonzero if we are presently saving tokens.  */
379
380 static inline int
381 cp_lexer_saving_tokens (const cp_lexer* lexer)
382 {
383   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
384 }
385
386 /* Store the next token from the preprocessor in *TOKEN.  Return true
387    if we reach EOF.  */
388
389 static void
390 cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
391                                  cp_token *token)
392 {
393   static int is_extern_c = 0;
394
395    /* Get a new token from the preprocessor.  */
396   token->type
397     = c_lex_with_flags (&token->value, &token->location, &token->flags);
398   token->input_file_stack_index = input_file_stack_tick;
399   token->keyword = RID_MAX;
400   token->pragma_kind = PRAGMA_NONE;
401   token->in_system_header = in_system_header;
402
403   /* On some systems, some header files are surrounded by an
404      implicit extern "C" block.  Set a flag in the token if it
405      comes from such a header.  */
406   is_extern_c += pending_lang_change;
407   pending_lang_change = 0;
408   token->implicit_extern_c = is_extern_c > 0;
409
410   /* Check to see if this token is a keyword.  */
411   if (token->type == CPP_NAME)
412     {
413       if (C_IS_RESERVED_WORD (token->value))
414         {
415           /* Mark this token as a keyword.  */
416           token->type = CPP_KEYWORD;
417           /* Record which keyword.  */
418           token->keyword = C_RID_CODE (token->value);
419           /* Update the value.  Some keywords are mapped to particular
420              entities, rather than simply having the value of the
421              corresponding IDENTIFIER_NODE.  For example, `__const' is
422              mapped to `const'.  */
423           token->value = ridpointers[token->keyword];
424         }
425       else
426         {
427           token->ambiguous_p = false;
428           token->keyword = RID_MAX;
429         }
430     }
431   /* Handle Objective-C++ keywords.  */
432   else if (token->type == CPP_AT_NAME)
433     {
434       token->type = CPP_KEYWORD;
435       switch (C_RID_CODE (token->value))
436         {
437         /* Map 'class' to '@class', 'private' to '@private', etc.  */
438         case RID_CLASS: token->keyword = RID_AT_CLASS; break;
439         case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
440         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
441         case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
442         case RID_THROW: token->keyword = RID_AT_THROW; break;
443         case RID_TRY: token->keyword = RID_AT_TRY; break;
444         case RID_CATCH: token->keyword = RID_AT_CATCH; break;
445         default: token->keyword = C_RID_CODE (token->value);
446         }
447     }
448   else if (token->type == CPP_PRAGMA)
449     {
450       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
451       token->pragma_kind = TREE_INT_CST_LOW (token->value);
452       token->value = NULL;
453     }
454 }
455
456 /* Update the globals input_location and in_system_header and the
457    input file stack from TOKEN.  */
458 static inline void
459 cp_lexer_set_source_position_from_token (cp_token *token)
460 {
461   if (token->type != CPP_EOF)
462     {
463       input_location = token->location;
464       in_system_header = token->in_system_header;
465       restore_input_file_stack (token->input_file_stack_index);
466     }
467 }
468
469 /* Return a pointer to the next token in the token stream, but do not
470    consume it.  */
471
472 static inline cp_token *
473 cp_lexer_peek_token (cp_lexer *lexer)
474 {
475   if (cp_lexer_debugging_p (lexer))
476     {
477       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
478       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
479       putc ('\n', cp_lexer_debug_stream);
480     }
481   return lexer->next_token;
482 }
483
484 /* Return true if the next token has the indicated TYPE.  */
485
486 static inline bool
487 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
488 {
489   return cp_lexer_peek_token (lexer)->type == type;
490 }
491
492 /* Return true if the next token does not have the indicated TYPE.  */
493
494 static inline bool
495 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
496 {
497   return !cp_lexer_next_token_is (lexer, type);
498 }
499
500 /* Return true if the next token is the indicated KEYWORD.  */
501
502 static inline bool
503 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
504 {
505   return cp_lexer_peek_token (lexer)->keyword == keyword;
506 }
507
508 /* Return a pointer to the Nth token in the token stream.  If N is 1,
509    then this is precisely equivalent to cp_lexer_peek_token (except
510    that it is not inline).  One would like to disallow that case, but
511    there is one case (cp_parser_nth_token_starts_template_id) where
512    the caller passes a variable for N and it might be 1.  */
513
514 static cp_token *
515 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
516 {
517   cp_token *token;
518
519   /* N is 1-based, not zero-based.  */
520   gcc_assert (n > 0);
521
522   if (cp_lexer_debugging_p (lexer))
523     fprintf (cp_lexer_debug_stream,
524              "cp_lexer: peeking ahead %ld at token: ", (long)n);
525
526   --n;
527   token = lexer->next_token;
528   gcc_assert (!n || token != &eof_token);
529   while (n != 0)
530     {
531       ++token;
532       if (token == lexer->last_token)
533         {
534           token = (cp_token *)&eof_token;
535           break;
536         }
537
538       if (token->type != CPP_PURGED)
539         --n;
540     }
541
542   if (cp_lexer_debugging_p (lexer))
543     {
544       cp_lexer_print_token (cp_lexer_debug_stream, token);
545       putc ('\n', cp_lexer_debug_stream);
546     }
547
548   return token;
549 }
550
551 /* Return the next token, and advance the lexer's next_token pointer
552    to point to the next non-purged token.  */
553
554 static cp_token *
555 cp_lexer_consume_token (cp_lexer* lexer)
556 {
557   cp_token *token = lexer->next_token;
558
559   gcc_assert (token != &eof_token);
560   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
561
562   do
563     {
564       lexer->next_token++;
565       if (lexer->next_token == lexer->last_token)
566         {
567           lexer->next_token = (cp_token *)&eof_token;
568           break;
569         }
570
571     }
572   while (lexer->next_token->type == CPP_PURGED);
573
574   cp_lexer_set_source_position_from_token (token);
575
576   /* Provide debugging output.  */
577   if (cp_lexer_debugging_p (lexer))
578     {
579       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
580       cp_lexer_print_token (cp_lexer_debug_stream, token);
581       putc ('\n', cp_lexer_debug_stream);
582     }
583
584   return token;
585 }
586
587 /* Permanently remove the next token from the token stream, and
588    advance the next_token pointer to refer to the next non-purged
589    token.  */
590
591 static void
592 cp_lexer_purge_token (cp_lexer *lexer)
593 {
594   cp_token *tok = lexer->next_token;
595
596   gcc_assert (tok != &eof_token);
597   tok->type = CPP_PURGED;
598   tok->location = UNKNOWN_LOCATION;
599   tok->value = NULL_TREE;
600   tok->keyword = RID_MAX;
601
602   do
603     {
604       tok++;
605       if (tok == lexer->last_token)
606         {
607           tok = (cp_token *)&eof_token;
608           break;
609         }
610     }
611   while (tok->type == CPP_PURGED);
612   lexer->next_token = tok;
613 }
614
615 /* Permanently remove all tokens after TOK, up to, but not
616    including, the token that will be returned next by
617    cp_lexer_peek_token.  */
618
619 static void
620 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
621 {
622   cp_token *peek = lexer->next_token;
623
624   if (peek == &eof_token)
625     peek = lexer->last_token;
626
627   gcc_assert (tok < peek);
628
629   for ( tok += 1; tok != peek; tok += 1)
630     {
631       tok->type = CPP_PURGED;
632       tok->location = UNKNOWN_LOCATION;
633       tok->value = NULL_TREE;
634       tok->keyword = RID_MAX;
635     }
636 }
637
638 /* Begin saving tokens.  All tokens consumed after this point will be
639    preserved.  */
640
641 static void
642 cp_lexer_save_tokens (cp_lexer* lexer)
643 {
644   /* Provide debugging output.  */
645   if (cp_lexer_debugging_p (lexer))
646     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
647
648   VEC_safe_push (cp_token_position, heap,
649                  lexer->saved_tokens, lexer->next_token);
650 }
651
652 /* Commit to the portion of the token stream most recently saved.  */
653
654 static void
655 cp_lexer_commit_tokens (cp_lexer* lexer)
656 {
657   /* Provide debugging output.  */
658   if (cp_lexer_debugging_p (lexer))
659     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
660
661   VEC_pop (cp_token_position, lexer->saved_tokens);
662 }
663
664 /* Return all tokens saved since the last call to cp_lexer_save_tokens
665    to the token stream.  Stop saving tokens.  */
666
667 static void
668 cp_lexer_rollback_tokens (cp_lexer* lexer)
669 {
670   /* Provide debugging output.  */
671   if (cp_lexer_debugging_p (lexer))
672     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
673
674   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
675 }
676
677 /* Print a representation of the TOKEN on the STREAM.  */
678
679 #ifdef ENABLE_CHECKING
680
681 static void
682 cp_lexer_print_token (FILE * stream, cp_token *token)
683 {
684   /* We don't use cpp_type2name here because the parser defines
685      a few tokens of its own.  */
686   static const char *const token_names[] = {
687     /* cpplib-defined token types */
688 #define OP(e, s) #e,
689 #define TK(e, s) #e,
690     TTYPE_TABLE
691 #undef OP
692 #undef TK
693     /* C++ parser token types - see "Manifest constants", above.  */
694     "KEYWORD",
695     "TEMPLATE_ID",
696     "NESTED_NAME_SPECIFIER",
697     "PURGED"
698   };
699
700   /* If we have a name for the token, print it out.  Otherwise, we
701      simply give the numeric code.  */
702   gcc_assert (token->type < ARRAY_SIZE(token_names));
703   fputs (token_names[token->type], stream);
704
705   /* For some tokens, print the associated data.  */
706   switch (token->type)
707     {
708     case CPP_KEYWORD:
709       /* Some keywords have a value that is not an IDENTIFIER_NODE.
710          For example, `struct' is mapped to an INTEGER_CST.  */
711       if (TREE_CODE (token->value) != IDENTIFIER_NODE)
712         break;
713       /* else fall through */
714     case CPP_NAME:
715       fputs (IDENTIFIER_POINTER (token->value), stream);
716       break;
717
718     case CPP_STRING:
719     case CPP_WSTRING:
720       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->value));
721       break;
722
723     default:
724       break;
725     }
726 }
727
728 /* Start emitting debugging information.  */
729
730 static void
731 cp_lexer_start_debugging (cp_lexer* lexer)
732 {
733   lexer->debugging_p = true;
734 }
735
736 /* Stop emitting debugging information.  */
737
738 static void
739 cp_lexer_stop_debugging (cp_lexer* lexer)
740 {
741   lexer->debugging_p = false;
742 }
743
744 #endif /* ENABLE_CHECKING */
745
746 /* Create a new cp_token_cache, representing a range of tokens.  */
747
748 static cp_token_cache *
749 cp_token_cache_new (cp_token *first, cp_token *last)
750 {
751   cp_token_cache *cache = GGC_NEW (cp_token_cache);
752   cache->first = first;
753   cache->last = last;
754   return cache;
755 }
756
757 \f
758 /* Decl-specifiers.  */
759
760 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
761
762 static void
763 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
764 {
765   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
766 }
767
768 /* Declarators.  */
769
770 /* Nothing other than the parser should be creating declarators;
771    declarators are a semi-syntactic representation of C++ entities.
772    Other parts of the front end that need to create entities (like
773    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
774
775 static cp_declarator *make_call_declarator
776   (cp_declarator *, cp_parameter_declarator *, cp_cv_quals, tree);
777 static cp_declarator *make_array_declarator
778   (cp_declarator *, tree);
779 static cp_declarator *make_pointer_declarator
780   (cp_cv_quals, cp_declarator *);
781 static cp_declarator *make_reference_declarator
782   (cp_cv_quals, cp_declarator *);
783 static cp_parameter_declarator *make_parameter_declarator
784   (cp_decl_specifier_seq *, cp_declarator *, tree);
785 static cp_declarator *make_ptrmem_declarator
786   (cp_cv_quals, tree, cp_declarator *);
787
788 /* An erroneous declarator.  */
789 static cp_declarator *cp_error_declarator;
790
791 /* The obstack on which declarators and related data structures are
792    allocated.  */
793 static struct obstack declarator_obstack;
794
795 /* Alloc BYTES from the declarator memory pool.  */
796
797 static inline void *
798 alloc_declarator (size_t bytes)
799 {
800   return obstack_alloc (&declarator_obstack, bytes);
801 }
802
803 /* Allocate a declarator of the indicated KIND.  Clear fields that are
804    common to all declarators.  */
805
806 static cp_declarator *
807 make_declarator (cp_declarator_kind kind)
808 {
809   cp_declarator *declarator;
810
811   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
812   declarator->kind = kind;
813   declarator->attributes = NULL_TREE;
814   declarator->declarator = NULL;
815
816   return declarator;
817 }
818
819 /* Make a declarator for a generalized identifier.  If
820    QUALIFYING_SCOPE is non-NULL, the identifier is
821    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
822    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
823    is, if any.   */
824
825 static cp_declarator *
826 make_id_declarator (tree qualifying_scope, tree unqualified_name,
827                     special_function_kind sfk)
828 {
829   cp_declarator *declarator;
830
831   /* It is valid to write:
832
833        class C { void f(); };
834        typedef C D;
835        void D::f();
836
837      The standard is not clear about whether `typedef const C D' is
838      legal; as of 2002-09-15 the committee is considering that
839      question.  EDG 3.0 allows that syntax.  Therefore, we do as
840      well.  */
841   if (qualifying_scope && TYPE_P (qualifying_scope))
842     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
843
844   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
845               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
846               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
847
848   declarator = make_declarator (cdk_id);
849   declarator->u.id.qualifying_scope = qualifying_scope;
850   declarator->u.id.unqualified_name = unqualified_name;
851   declarator->u.id.sfk = sfk;
852
853   return declarator;
854 }
855
856 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
857    of modifiers such as const or volatile to apply to the pointer
858    type, represented as identifiers.  */
859
860 cp_declarator *
861 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
862 {
863   cp_declarator *declarator;
864
865   declarator = make_declarator (cdk_pointer);
866   declarator->declarator = target;
867   declarator->u.pointer.qualifiers = cv_qualifiers;
868   declarator->u.pointer.class_type = NULL_TREE;
869
870   return declarator;
871 }
872
873 /* Like make_pointer_declarator -- but for references.  */
874
875 cp_declarator *
876 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
877 {
878   cp_declarator *declarator;
879
880   declarator = make_declarator (cdk_reference);
881   declarator->declarator = target;
882   declarator->u.pointer.qualifiers = cv_qualifiers;
883   declarator->u.pointer.class_type = NULL_TREE;
884
885   return declarator;
886 }
887
888 /* Like make_pointer_declarator -- but for a pointer to a non-static
889    member of CLASS_TYPE.  */
890
891 cp_declarator *
892 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
893                         cp_declarator *pointee)
894 {
895   cp_declarator *declarator;
896
897   declarator = make_declarator (cdk_ptrmem);
898   declarator->declarator = pointee;
899   declarator->u.pointer.qualifiers = cv_qualifiers;
900   declarator->u.pointer.class_type = class_type;
901
902   return declarator;
903 }
904
905 /* Make a declarator for the function given by TARGET, with the
906    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
907    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
908    indicates what exceptions can be thrown.  */
909
910 cp_declarator *
911 make_call_declarator (cp_declarator *target,
912                       cp_parameter_declarator *parms,
913                       cp_cv_quals cv_qualifiers,
914                       tree exception_specification)
915 {
916   cp_declarator *declarator;
917
918   declarator = make_declarator (cdk_function);
919   declarator->declarator = target;
920   declarator->u.function.parameters = parms;
921   declarator->u.function.qualifiers = cv_qualifiers;
922   declarator->u.function.exception_specification = exception_specification;
923
924   return declarator;
925 }
926
927 /* Make a declarator for an array of BOUNDS elements, each of which is
928    defined by ELEMENT.  */
929
930 cp_declarator *
931 make_array_declarator (cp_declarator *element, tree bounds)
932 {
933   cp_declarator *declarator;
934
935   declarator = make_declarator (cdk_array);
936   declarator->declarator = element;
937   declarator->u.array.bounds = bounds;
938
939   return declarator;
940 }
941
942 cp_parameter_declarator *no_parameters;
943
944 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
945    DECLARATOR and DEFAULT_ARGUMENT.  */
946
947 cp_parameter_declarator *
948 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
949                            cp_declarator *declarator,
950                            tree default_argument)
951 {
952   cp_parameter_declarator *parameter;
953
954   parameter = ((cp_parameter_declarator *)
955                alloc_declarator (sizeof (cp_parameter_declarator)));
956   parameter->next = NULL;
957   if (decl_specifiers)
958     parameter->decl_specifiers = *decl_specifiers;
959   else
960     clear_decl_specs (&parameter->decl_specifiers);
961   parameter->declarator = declarator;
962   parameter->default_argument = default_argument;
963   parameter->ellipsis_p = false;
964
965   return parameter;
966 }
967
968 /* The parser.  */
969
970 /* Overview
971    --------
972
973    A cp_parser parses the token stream as specified by the C++
974    grammar.  Its job is purely parsing, not semantic analysis.  For
975    example, the parser breaks the token stream into declarators,
976    expressions, statements, and other similar syntactic constructs.
977    It does not check that the types of the expressions on either side
978    of an assignment-statement are compatible, or that a function is
979    not declared with a parameter of type `void'.
980
981    The parser invokes routines elsewhere in the compiler to perform
982    semantic analysis and to build up the abstract syntax tree for the
983    code processed.
984
985    The parser (and the template instantiation code, which is, in a
986    way, a close relative of parsing) are the only parts of the
987    compiler that should be calling push_scope and pop_scope, or
988    related functions.  The parser (and template instantiation code)
989    keeps track of what scope is presently active; everything else
990    should simply honor that.  (The code that generates static
991    initializers may also need to set the scope, in order to check
992    access control correctly when emitting the initializers.)
993
994    Methodology
995    -----------
996
997    The parser is of the standard recursive-descent variety.  Upcoming
998    tokens in the token stream are examined in order to determine which
999    production to use when parsing a non-terminal.  Some C++ constructs
1000    require arbitrary look ahead to disambiguate.  For example, it is
1001    impossible, in the general case, to tell whether a statement is an
1002    expression or declaration without scanning the entire statement.
1003    Therefore, the parser is capable of "parsing tentatively."  When the
1004    parser is not sure what construct comes next, it enters this mode.
1005    Then, while we attempt to parse the construct, the parser queues up
1006    error messages, rather than issuing them immediately, and saves the
1007    tokens it consumes.  If the construct is parsed successfully, the
1008    parser "commits", i.e., it issues any queued error messages and
1009    the tokens that were being preserved are permanently discarded.
1010    If, however, the construct is not parsed successfully, the parser
1011    rolls back its state completely so that it can resume parsing using
1012    a different alternative.
1013
1014    Future Improvements
1015    -------------------
1016
1017    The performance of the parser could probably be improved substantially.
1018    We could often eliminate the need to parse tentatively by looking ahead
1019    a little bit.  In some places, this approach might not entirely eliminate
1020    the need to parse tentatively, but it might still speed up the average
1021    case.  */
1022
1023 /* Flags that are passed to some parsing functions.  These values can
1024    be bitwise-ored together.  */
1025
1026 typedef enum cp_parser_flags
1027 {
1028   /* No flags.  */
1029   CP_PARSER_FLAGS_NONE = 0x0,
1030   /* The construct is optional.  If it is not present, then no error
1031      should be issued.  */
1032   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1033   /* When parsing a type-specifier, do not allow user-defined types.  */
1034   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1035 } cp_parser_flags;
1036
1037 /* The different kinds of declarators we want to parse.  */
1038
1039 typedef enum cp_parser_declarator_kind
1040 {
1041   /* We want an abstract declarator.  */
1042   CP_PARSER_DECLARATOR_ABSTRACT,
1043   /* We want a named declarator.  */
1044   CP_PARSER_DECLARATOR_NAMED,
1045   /* We don't mind, but the name must be an unqualified-id.  */
1046   CP_PARSER_DECLARATOR_EITHER
1047 } cp_parser_declarator_kind;
1048
1049 /* The precedence values used to parse binary expressions.  The minimum value
1050    of PREC must be 1, because zero is reserved to quickly discriminate
1051    binary operators from other tokens.  */
1052
1053 enum cp_parser_prec
1054 {
1055   PREC_NOT_OPERATOR,
1056   PREC_LOGICAL_OR_EXPRESSION,
1057   PREC_LOGICAL_AND_EXPRESSION,
1058   PREC_INCLUSIVE_OR_EXPRESSION,
1059   PREC_EXCLUSIVE_OR_EXPRESSION,
1060   PREC_AND_EXPRESSION,
1061   PREC_EQUALITY_EXPRESSION,
1062   PREC_RELATIONAL_EXPRESSION,
1063   PREC_SHIFT_EXPRESSION,
1064   PREC_ADDITIVE_EXPRESSION,
1065   PREC_MULTIPLICATIVE_EXPRESSION,
1066   PREC_PM_EXPRESSION,
1067   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1068 };
1069
1070 /* A mapping from a token type to a corresponding tree node type, with a
1071    precedence value.  */
1072
1073 typedef struct cp_parser_binary_operations_map_node
1074 {
1075   /* The token type.  */
1076   enum cpp_ttype token_type;
1077   /* The corresponding tree code.  */
1078   enum tree_code tree_type;
1079   /* The precedence of this operator.  */
1080   enum cp_parser_prec prec;
1081 } cp_parser_binary_operations_map_node;
1082
1083 /* The status of a tentative parse.  */
1084
1085 typedef enum cp_parser_status_kind
1086 {
1087   /* No errors have occurred.  */
1088   CP_PARSER_STATUS_KIND_NO_ERROR,
1089   /* An error has occurred.  */
1090   CP_PARSER_STATUS_KIND_ERROR,
1091   /* We are committed to this tentative parse, whether or not an error
1092      has occurred.  */
1093   CP_PARSER_STATUS_KIND_COMMITTED
1094 } cp_parser_status_kind;
1095
1096 typedef struct cp_parser_expression_stack_entry
1097 {
1098   tree lhs;
1099   enum tree_code tree_type;
1100   int prec;
1101 } cp_parser_expression_stack_entry;
1102
1103 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1104    entries because precedence levels on the stack are monotonically
1105    increasing.  */
1106 typedef struct cp_parser_expression_stack_entry
1107   cp_parser_expression_stack[NUM_PREC_VALUES];
1108
1109 /* Context that is saved and restored when parsing tentatively.  */
1110 typedef struct cp_parser_context GTY (())
1111 {
1112   /* If this is a tentative parsing context, the status of the
1113      tentative parse.  */
1114   enum cp_parser_status_kind status;
1115   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1116      that are looked up in this context must be looked up both in the
1117      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1118      the context of the containing expression.  */
1119   tree object_type;
1120
1121   /* The next parsing context in the stack.  */
1122   struct cp_parser_context *next;
1123 } cp_parser_context;
1124
1125 /* Prototypes.  */
1126
1127 /* Constructors and destructors.  */
1128
1129 static cp_parser_context *cp_parser_context_new
1130   (cp_parser_context *);
1131
1132 /* Class variables.  */
1133
1134 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1135
1136 /* The operator-precedence table used by cp_parser_binary_expression.
1137    Transformed into an associative array (binops_by_token) by
1138    cp_parser_new.  */
1139
1140 static const cp_parser_binary_operations_map_node binops[] = {
1141   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1142   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1143
1144   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1145   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1146   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1147
1148   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1149   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1150
1151   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1152   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1153
1154   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1155   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1156   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1157   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1158
1159   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1160   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1161
1162   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1163
1164   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1165
1166   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1167
1168   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1169
1170   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1171 };
1172
1173 /* The same as binops, but initialized by cp_parser_new so that
1174    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1175    for speed.  */
1176 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1177
1178 /* Constructors and destructors.  */
1179
1180 /* Construct a new context.  The context below this one on the stack
1181    is given by NEXT.  */
1182
1183 static cp_parser_context *
1184 cp_parser_context_new (cp_parser_context* next)
1185 {
1186   cp_parser_context *context;
1187
1188   /* Allocate the storage.  */
1189   if (cp_parser_context_free_list != NULL)
1190     {
1191       /* Pull the first entry from the free list.  */
1192       context = cp_parser_context_free_list;
1193       cp_parser_context_free_list = context->next;
1194       memset (context, 0, sizeof (*context));
1195     }
1196   else
1197     context = GGC_CNEW (cp_parser_context);
1198
1199   /* No errors have occurred yet in this context.  */
1200   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1201   /* If this is not the bottomost context, copy information that we
1202      need from the previous context.  */
1203   if (next)
1204     {
1205       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1206          expression, then we are parsing one in this context, too.  */
1207       context->object_type = next->object_type;
1208       /* Thread the stack.  */
1209       context->next = next;
1210     }
1211
1212   return context;
1213 }
1214
1215 /* The cp_parser structure represents the C++ parser.  */
1216
1217 typedef struct cp_parser GTY(())
1218 {
1219   /* The lexer from which we are obtaining tokens.  */
1220   cp_lexer *lexer;
1221
1222   /* The scope in which names should be looked up.  If NULL_TREE, then
1223      we look up names in the scope that is currently open in the
1224      source program.  If non-NULL, this is either a TYPE or
1225      NAMESPACE_DECL for the scope in which we should look.  It can
1226      also be ERROR_MARK, when we've parsed a bogus scope.
1227
1228      This value is not cleared automatically after a name is looked
1229      up, so we must be careful to clear it before starting a new look
1230      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1231      will look up `Z' in the scope of `X', rather than the current
1232      scope.)  Unfortunately, it is difficult to tell when name lookup
1233      is complete, because we sometimes peek at a token, look it up,
1234      and then decide not to consume it.   */
1235   tree scope;
1236
1237   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1238      last lookup took place.  OBJECT_SCOPE is used if an expression
1239      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1240      respectively.  QUALIFYING_SCOPE is used for an expression of the
1241      form "X::Y"; it refers to X.  */
1242   tree object_scope;
1243   tree qualifying_scope;
1244
1245   /* A stack of parsing contexts.  All but the bottom entry on the
1246      stack will be tentative contexts.
1247
1248      We parse tentatively in order to determine which construct is in
1249      use in some situations.  For example, in order to determine
1250      whether a statement is an expression-statement or a
1251      declaration-statement we parse it tentatively as a
1252      declaration-statement.  If that fails, we then reparse the same
1253      token stream as an expression-statement.  */
1254   cp_parser_context *context;
1255
1256   /* True if we are parsing GNU C++.  If this flag is not set, then
1257      GNU extensions are not recognized.  */
1258   bool allow_gnu_extensions_p;
1259
1260   /* TRUE if the `>' token should be interpreted as the greater-than
1261      operator.  FALSE if it is the end of a template-id or
1262      template-parameter-list.  */
1263   bool greater_than_is_operator_p;
1264
1265   /* TRUE if default arguments are allowed within a parameter list
1266      that starts at this point. FALSE if only a gnu extension makes
1267      them permissible.  */
1268   bool default_arg_ok_p;
1269
1270   /* TRUE if we are parsing an integral constant-expression.  See
1271      [expr.const] for a precise definition.  */
1272   bool integral_constant_expression_p;
1273
1274   /* TRUE if we are parsing an integral constant-expression -- but a
1275      non-constant expression should be permitted as well.  This flag
1276      is used when parsing an array bound so that GNU variable-length
1277      arrays are tolerated.  */
1278   bool allow_non_integral_constant_expression_p;
1279
1280   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1281      been seen that makes the expression non-constant.  */
1282   bool non_integral_constant_expression_p;
1283
1284   /* TRUE if local variable names and `this' are forbidden in the
1285      current context.  */
1286   bool local_variables_forbidden_p;
1287
1288   /* TRUE if the declaration we are parsing is part of a
1289      linkage-specification of the form `extern string-literal
1290      declaration'.  */
1291   bool in_unbraced_linkage_specification_p;
1292
1293   /* TRUE if we are presently parsing a declarator, after the
1294      direct-declarator.  */
1295   bool in_declarator_p;
1296
1297   /* TRUE if we are presently parsing a template-argument-list.  */
1298   bool in_template_argument_list_p;
1299
1300   /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1301      to IN_OMP_BLOCK if parsing OpenMP structured block and
1302      IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1303      this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1304      iteration-statement, OpenMP block or loop within that switch.  */
1305 #define IN_SWITCH_STMT          1
1306 #define IN_ITERATION_STMT       2
1307 #define IN_OMP_BLOCK            4
1308 #define IN_OMP_FOR              8
1309   unsigned char in_statement;
1310
1311   /* TRUE if we are presently parsing the body of a switch statement.
1312      Note that this doesn't quite overlap with in_statement above.
1313      The difference relates to giving the right sets of error messages:
1314      "case not in switch" vs "break statement used with OpenMP...".  */
1315   bool in_switch_statement_p;
1316
1317   /* TRUE if we are parsing a type-id in an expression context.  In
1318      such a situation, both "type (expr)" and "type (type)" are valid
1319      alternatives.  */
1320   bool in_type_id_in_expr_p;
1321
1322   /* TRUE if we are currently in a header file where declarations are
1323      implicitly extern "C".  */
1324   bool implicit_extern_c;
1325
1326   /* TRUE if strings in expressions should be translated to the execution
1327      character set.  */
1328   bool translate_strings_p;
1329
1330   /* If non-NULL, then we are parsing a construct where new type
1331      definitions are not permitted.  The string stored here will be
1332      issued as an error message if a type is defined.  */
1333   const char *type_definition_forbidden_message;
1334
1335   /* A list of lists. The outer list is a stack, used for member
1336      functions of local classes. At each level there are two sub-list,
1337      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1338      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1339      TREE_VALUE's. The functions are chained in reverse declaration
1340      order.
1341
1342      The TREE_PURPOSE sublist contains those functions with default
1343      arguments that need post processing, and the TREE_VALUE sublist
1344      contains those functions with definitions that need post
1345      processing.
1346
1347      These lists can only be processed once the outermost class being
1348      defined is complete.  */
1349   tree unparsed_functions_queues;
1350
1351   /* The number of classes whose definitions are currently in
1352      progress.  */
1353   unsigned num_classes_being_defined;
1354
1355   /* The number of template parameter lists that apply directly to the
1356      current declaration.  */
1357   unsigned num_template_parameter_lists;
1358 } cp_parser;
1359
1360 /* Prototypes.  */
1361
1362 /* Constructors and destructors.  */
1363
1364 static cp_parser *cp_parser_new
1365   (void);
1366
1367 /* Routines to parse various constructs.
1368
1369    Those that return `tree' will return the error_mark_node (rather
1370    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1371    Sometimes, they will return an ordinary node if error-recovery was
1372    attempted, even though a parse error occurred.  So, to check
1373    whether or not a parse error occurred, you should always use
1374    cp_parser_error_occurred.  If the construct is optional (indicated
1375    either by an `_opt' in the name of the function that does the
1376    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1377    the construct is not present.  */
1378
1379 /* Lexical conventions [gram.lex]  */
1380
1381 static tree cp_parser_identifier
1382   (cp_parser *);
1383 static tree cp_parser_string_literal
1384   (cp_parser *, bool, bool);
1385
1386 /* Basic concepts [gram.basic]  */
1387
1388 static bool cp_parser_translation_unit
1389   (cp_parser *);
1390
1391 /* Expressions [gram.expr]  */
1392
1393 static tree cp_parser_primary_expression
1394   (cp_parser *, bool, bool, bool, cp_id_kind *);
1395 static tree cp_parser_id_expression
1396   (cp_parser *, bool, bool, bool *, bool, bool);
1397 static tree cp_parser_unqualified_id
1398   (cp_parser *, bool, bool, bool, bool);
1399 static tree cp_parser_nested_name_specifier_opt
1400   (cp_parser *, bool, bool, bool, bool);
1401 static tree cp_parser_nested_name_specifier
1402   (cp_parser *, bool, bool, bool, bool);
1403 static tree cp_parser_class_or_namespace_name
1404   (cp_parser *, bool, bool, bool, bool, bool);
1405 static tree cp_parser_postfix_expression
1406   (cp_parser *, bool, bool);
1407 static tree cp_parser_postfix_open_square_expression
1408   (cp_parser *, tree, bool);
1409 static tree cp_parser_postfix_dot_deref_expression
1410   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1411 static tree cp_parser_parenthesized_expression_list
1412   (cp_parser *, bool, bool, bool *);
1413 static void cp_parser_pseudo_destructor_name
1414   (cp_parser *, tree *, tree *);
1415 static tree cp_parser_unary_expression
1416   (cp_parser *, bool, bool);
1417 static enum tree_code cp_parser_unary_operator
1418   (cp_token *);
1419 static tree cp_parser_new_expression
1420   (cp_parser *);
1421 static tree cp_parser_new_placement
1422   (cp_parser *);
1423 static tree cp_parser_new_type_id
1424   (cp_parser *, tree *);
1425 static cp_declarator *cp_parser_new_declarator_opt
1426   (cp_parser *);
1427 static cp_declarator *cp_parser_direct_new_declarator
1428   (cp_parser *);
1429 static tree cp_parser_new_initializer
1430   (cp_parser *);
1431 static tree cp_parser_delete_expression
1432   (cp_parser *);
1433 static tree cp_parser_cast_expression
1434   (cp_parser *, bool, bool);
1435 static tree cp_parser_binary_expression
1436   (cp_parser *, bool);
1437 static tree cp_parser_question_colon_clause
1438   (cp_parser *, tree);
1439 static tree cp_parser_assignment_expression
1440   (cp_parser *, bool);
1441 static enum tree_code cp_parser_assignment_operator_opt
1442   (cp_parser *);
1443 static tree cp_parser_expression
1444   (cp_parser *, bool);
1445 static tree cp_parser_constant_expression
1446   (cp_parser *, bool, bool *);
1447 static tree cp_parser_builtin_offsetof
1448   (cp_parser *);
1449
1450 /* Statements [gram.stmt.stmt]  */
1451
1452 static void cp_parser_statement
1453   (cp_parser *, tree, bool);
1454 static void cp_parser_label_for_labeled_statement
1455   (cp_parser *);
1456 static tree cp_parser_expression_statement
1457   (cp_parser *, tree);
1458 static tree cp_parser_compound_statement
1459   (cp_parser *, tree, bool);
1460 static void cp_parser_statement_seq_opt
1461   (cp_parser *, tree);
1462 static tree cp_parser_selection_statement
1463   (cp_parser *);
1464 static tree cp_parser_condition
1465   (cp_parser *);
1466 static tree cp_parser_iteration_statement
1467   (cp_parser *);
1468 static void cp_parser_for_init_statement
1469   (cp_parser *);
1470 static tree cp_parser_jump_statement
1471   (cp_parser *);
1472 static void cp_parser_declaration_statement
1473   (cp_parser *);
1474
1475 static tree cp_parser_implicitly_scoped_statement
1476   (cp_parser *);
1477 static void cp_parser_already_scoped_statement
1478   (cp_parser *);
1479
1480 /* Declarations [gram.dcl.dcl] */
1481
1482 static void cp_parser_declaration_seq_opt
1483   (cp_parser *);
1484 static void cp_parser_declaration
1485   (cp_parser *);
1486 static void cp_parser_block_declaration
1487   (cp_parser *, bool);
1488 static void cp_parser_simple_declaration
1489   (cp_parser *, bool);
1490 static void cp_parser_decl_specifier_seq
1491   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1492 static tree cp_parser_storage_class_specifier_opt
1493   (cp_parser *);
1494 static tree cp_parser_function_specifier_opt
1495   (cp_parser *, cp_decl_specifier_seq *);
1496 static tree cp_parser_type_specifier
1497   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1498    int *, bool *);
1499 static tree cp_parser_simple_type_specifier
1500   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1501 static tree cp_parser_type_name
1502   (cp_parser *);
1503 static tree cp_parser_elaborated_type_specifier
1504   (cp_parser *, bool, bool);
1505 static tree cp_parser_enum_specifier
1506   (cp_parser *);
1507 static void cp_parser_enumerator_list
1508   (cp_parser *, tree);
1509 static void cp_parser_enumerator_definition
1510   (cp_parser *, tree);
1511 static tree cp_parser_namespace_name
1512   (cp_parser *);
1513 static void cp_parser_namespace_definition
1514   (cp_parser *);
1515 static void cp_parser_namespace_body
1516   (cp_parser *);
1517 static tree cp_parser_qualified_namespace_specifier
1518   (cp_parser *);
1519 static void cp_parser_namespace_alias_definition
1520   (cp_parser *);
1521 static void cp_parser_using_declaration
1522   (cp_parser *);
1523 static void cp_parser_using_directive
1524   (cp_parser *);
1525 static void cp_parser_asm_definition
1526   (cp_parser *);
1527 static void cp_parser_linkage_specification
1528   (cp_parser *);
1529
1530 /* Declarators [gram.dcl.decl] */
1531
1532 static tree cp_parser_init_declarator
1533   (cp_parser *, cp_decl_specifier_seq *, tree, bool, bool, int, bool *);
1534 static cp_declarator *cp_parser_declarator
1535   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1536 static cp_declarator *cp_parser_direct_declarator
1537   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1538 static enum tree_code cp_parser_ptr_operator
1539   (cp_parser *, tree *, cp_cv_quals *);
1540 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1541   (cp_parser *);
1542 static tree cp_parser_declarator_id
1543   (cp_parser *, bool);
1544 static tree cp_parser_type_id
1545   (cp_parser *);
1546 static void cp_parser_type_specifier_seq
1547   (cp_parser *, bool, cp_decl_specifier_seq *);
1548 static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1549   (cp_parser *);
1550 static cp_parameter_declarator *cp_parser_parameter_declaration_list
1551   (cp_parser *, bool *);
1552 static cp_parameter_declarator *cp_parser_parameter_declaration
1553   (cp_parser *, bool, bool *);
1554 static void cp_parser_function_body
1555   (cp_parser *);
1556 static tree cp_parser_initializer
1557   (cp_parser *, bool *, bool *);
1558 static tree cp_parser_initializer_clause
1559   (cp_parser *, bool *);
1560 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1561   (cp_parser *, bool *);
1562
1563 static bool cp_parser_ctor_initializer_opt_and_function_body
1564   (cp_parser *);
1565
1566 /* Classes [gram.class] */
1567
1568 static tree cp_parser_class_name
1569   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1570 static tree cp_parser_class_specifier
1571   (cp_parser *);
1572 static tree cp_parser_class_head
1573   (cp_parser *, bool *, tree *);
1574 static enum tag_types cp_parser_class_key
1575   (cp_parser *);
1576 static void cp_parser_member_specification_opt
1577   (cp_parser *);
1578 static void cp_parser_member_declaration
1579   (cp_parser *);
1580 static tree cp_parser_pure_specifier
1581   (cp_parser *);
1582 static tree cp_parser_constant_initializer
1583   (cp_parser *);
1584
1585 /* Derived classes [gram.class.derived] */
1586
1587 static tree cp_parser_base_clause
1588   (cp_parser *);
1589 static tree cp_parser_base_specifier
1590   (cp_parser *);
1591
1592 /* Special member functions [gram.special] */
1593
1594 static tree cp_parser_conversion_function_id
1595   (cp_parser *);
1596 static tree cp_parser_conversion_type_id
1597   (cp_parser *);
1598 static cp_declarator *cp_parser_conversion_declarator_opt
1599   (cp_parser *);
1600 static bool cp_parser_ctor_initializer_opt
1601   (cp_parser *);
1602 static void cp_parser_mem_initializer_list
1603   (cp_parser *);
1604 static tree cp_parser_mem_initializer
1605   (cp_parser *);
1606 static tree cp_parser_mem_initializer_id
1607   (cp_parser *);
1608
1609 /* Overloading [gram.over] */
1610
1611 static tree cp_parser_operator_function_id
1612   (cp_parser *);
1613 static tree cp_parser_operator
1614   (cp_parser *);
1615
1616 /* Templates [gram.temp] */
1617
1618 static void cp_parser_template_declaration
1619   (cp_parser *, bool);
1620 static tree cp_parser_template_parameter_list
1621   (cp_parser *);
1622 static tree cp_parser_template_parameter
1623   (cp_parser *, bool *);
1624 static tree cp_parser_type_parameter
1625   (cp_parser *);
1626 static tree cp_parser_template_id
1627   (cp_parser *, bool, bool, bool);
1628 static tree cp_parser_template_name
1629   (cp_parser *, bool, bool, bool, bool *);
1630 static tree cp_parser_template_argument_list
1631   (cp_parser *);
1632 static tree cp_parser_template_argument
1633   (cp_parser *);
1634 static void cp_parser_explicit_instantiation
1635   (cp_parser *);
1636 static void cp_parser_explicit_specialization
1637   (cp_parser *);
1638
1639 /* Exception handling [gram.exception] */
1640
1641 static tree cp_parser_try_block
1642   (cp_parser *);
1643 static bool cp_parser_function_try_block
1644   (cp_parser *);
1645 static void cp_parser_handler_seq
1646   (cp_parser *);
1647 static void cp_parser_handler
1648   (cp_parser *);
1649 static tree cp_parser_exception_declaration
1650   (cp_parser *);
1651 static tree cp_parser_throw_expression
1652   (cp_parser *);
1653 static tree cp_parser_exception_specification_opt
1654   (cp_parser *);
1655 static tree cp_parser_type_id_list
1656   (cp_parser *);
1657
1658 /* GNU Extensions */
1659
1660 static tree cp_parser_asm_specification_opt
1661   (cp_parser *);
1662 static tree cp_parser_asm_operand_list
1663   (cp_parser *);
1664 static tree cp_parser_asm_clobber_list
1665   (cp_parser *);
1666 static tree cp_parser_attributes_opt
1667   (cp_parser *);
1668 static tree cp_parser_attribute_list
1669   (cp_parser *);
1670 static bool cp_parser_extension_opt
1671   (cp_parser *, int *);
1672 static void cp_parser_label_declaration
1673   (cp_parser *);
1674
1675 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1676 static bool cp_parser_pragma
1677   (cp_parser *, enum pragma_context);
1678
1679 /* Objective-C++ Productions */
1680
1681 static tree cp_parser_objc_message_receiver
1682   (cp_parser *);
1683 static tree cp_parser_objc_message_args
1684   (cp_parser *);
1685 static tree cp_parser_objc_message_expression
1686   (cp_parser *);
1687 static tree cp_parser_objc_encode_expression
1688   (cp_parser *);
1689 static tree cp_parser_objc_defs_expression
1690   (cp_parser *);
1691 static tree cp_parser_objc_protocol_expression
1692   (cp_parser *);
1693 static tree cp_parser_objc_selector_expression
1694   (cp_parser *);
1695 static tree cp_parser_objc_expression
1696   (cp_parser *);
1697 static bool cp_parser_objc_selector_p
1698   (enum cpp_ttype);
1699 static tree cp_parser_objc_selector
1700   (cp_parser *);
1701 static tree cp_parser_objc_protocol_refs_opt
1702   (cp_parser *);
1703 static void cp_parser_objc_declaration
1704   (cp_parser *);
1705 static tree cp_parser_objc_statement
1706   (cp_parser *);
1707
1708 /* Utility Routines */
1709
1710 static tree cp_parser_lookup_name
1711   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *);
1712 static tree cp_parser_lookup_name_simple
1713   (cp_parser *, tree);
1714 static tree cp_parser_maybe_treat_template_as_class
1715   (tree, bool);
1716 static bool cp_parser_check_declarator_template_parameters
1717   (cp_parser *, cp_declarator *);
1718 static bool cp_parser_check_template_parameters
1719   (cp_parser *, unsigned);
1720 static tree cp_parser_simple_cast_expression
1721   (cp_parser *);
1722 static tree cp_parser_global_scope_opt
1723   (cp_parser *, bool);
1724 static bool cp_parser_constructor_declarator_p
1725   (cp_parser *, bool);
1726 static tree cp_parser_function_definition_from_specifiers_and_declarator
1727   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1728 static tree cp_parser_function_definition_after_declarator
1729   (cp_parser *, bool);
1730 static void cp_parser_template_declaration_after_export
1731   (cp_parser *, bool);
1732 static void cp_parser_perform_template_parameter_access_checks
1733   (tree);
1734 static tree cp_parser_single_declaration
1735   (cp_parser *, tree, bool, bool *);
1736 static tree cp_parser_functional_cast
1737   (cp_parser *, tree);
1738 static tree cp_parser_save_member_function_body
1739   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1740 static tree cp_parser_enclosed_template_argument_list
1741   (cp_parser *);
1742 static void cp_parser_save_default_args
1743   (cp_parser *, tree);
1744 static void cp_parser_late_parsing_for_member
1745   (cp_parser *, tree);
1746 static void cp_parser_late_parsing_default_args
1747   (cp_parser *, tree);
1748 static tree cp_parser_sizeof_operand
1749   (cp_parser *, enum rid);
1750 static bool cp_parser_declares_only_class_p
1751   (cp_parser *);
1752 static void cp_parser_set_storage_class
1753   (cp_parser *, cp_decl_specifier_seq *, enum rid);
1754 static void cp_parser_set_decl_spec_type
1755   (cp_decl_specifier_seq *, tree, bool);
1756 static bool cp_parser_friend_p
1757   (const cp_decl_specifier_seq *);
1758 static cp_token *cp_parser_require
1759   (cp_parser *, enum cpp_ttype, const char *);
1760 static cp_token *cp_parser_require_keyword
1761   (cp_parser *, enum rid, const char *);
1762 static bool cp_parser_token_starts_function_definition_p
1763   (cp_token *);
1764 static bool cp_parser_next_token_starts_class_definition_p
1765   (cp_parser *);
1766 static bool cp_parser_next_token_ends_template_argument_p
1767   (cp_parser *);
1768 static bool cp_parser_nth_token_starts_template_argument_list_p
1769   (cp_parser *, size_t);
1770 static enum tag_types cp_parser_token_is_class_key
1771   (cp_token *);
1772 static void cp_parser_check_class_key
1773   (enum tag_types, tree type);
1774 static void cp_parser_check_access_in_redeclaration
1775   (tree type);
1776 static bool cp_parser_optional_template_keyword
1777   (cp_parser *);
1778 static void cp_parser_pre_parsed_nested_name_specifier
1779   (cp_parser *);
1780 static void cp_parser_cache_group
1781   (cp_parser *, enum cpp_ttype, unsigned);
1782 static void cp_parser_parse_tentatively
1783   (cp_parser *);
1784 static void cp_parser_commit_to_tentative_parse
1785   (cp_parser *);
1786 static void cp_parser_abort_tentative_parse
1787   (cp_parser *);
1788 static bool cp_parser_parse_definitely
1789   (cp_parser *);
1790 static inline bool cp_parser_parsing_tentatively
1791   (cp_parser *);
1792 static bool cp_parser_uncommitted_to_tentative_parse_p
1793   (cp_parser *);
1794 static void cp_parser_error
1795   (cp_parser *, const char *);
1796 static void cp_parser_name_lookup_error
1797   (cp_parser *, tree, tree, const char *);
1798 static bool cp_parser_simulate_error
1799   (cp_parser *);
1800 static void cp_parser_check_type_definition
1801   (cp_parser *);
1802 static void cp_parser_check_for_definition_in_return_type
1803   (cp_declarator *, tree);
1804 static void cp_parser_check_for_invalid_template_id
1805   (cp_parser *, tree);
1806 static bool cp_parser_non_integral_constant_expression
1807   (cp_parser *, const char *);
1808 static void cp_parser_diagnose_invalid_type_name
1809   (cp_parser *, tree, tree);
1810 static bool cp_parser_parse_and_diagnose_invalid_type_name
1811   (cp_parser *);
1812 static int cp_parser_skip_to_closing_parenthesis
1813   (cp_parser *, bool, bool, bool);
1814 static void cp_parser_skip_to_end_of_statement
1815   (cp_parser *);
1816 static void cp_parser_consume_semicolon_at_end_of_statement
1817   (cp_parser *);
1818 static void cp_parser_skip_to_end_of_block_or_statement
1819   (cp_parser *);
1820 static void cp_parser_skip_to_closing_brace
1821   (cp_parser *);
1822 static void cp_parser_skip_to_end_of_template_parameter_list
1823   (cp_parser *);
1824 static void cp_parser_skip_to_pragma_eol
1825   (cp_parser*, cp_token *);
1826 static bool cp_parser_error_occurred
1827   (cp_parser *);
1828 static bool cp_parser_allow_gnu_extensions_p
1829   (cp_parser *);
1830 static bool cp_parser_is_string_literal
1831   (cp_token *);
1832 static bool cp_parser_is_keyword
1833   (cp_token *, enum rid);
1834 static tree cp_parser_make_typename_type
1835   (cp_parser *, tree, tree);
1836
1837 /* Returns nonzero if we are parsing tentatively.  */
1838
1839 static inline bool
1840 cp_parser_parsing_tentatively (cp_parser* parser)
1841 {
1842   return parser->context->next != NULL;
1843 }
1844
1845 /* Returns nonzero if TOKEN is a string literal.  */
1846
1847 static bool
1848 cp_parser_is_string_literal (cp_token* token)
1849 {
1850   return (token->type == CPP_STRING || token->type == CPP_WSTRING);
1851 }
1852
1853 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
1854
1855 static bool
1856 cp_parser_is_keyword (cp_token* token, enum rid keyword)
1857 {
1858   return token->keyword == keyword;
1859 }
1860
1861 /* If not parsing tentatively, issue a diagnostic of the form
1862       FILE:LINE: MESSAGE before TOKEN
1863    where TOKEN is the next token in the input stream.  MESSAGE
1864    (specified by the caller) is usually of the form "expected
1865    OTHER-TOKEN".  */
1866
1867 static void
1868 cp_parser_error (cp_parser* parser, const char* message)
1869 {
1870   if (!cp_parser_simulate_error (parser))
1871     {
1872       cp_token *token = cp_lexer_peek_token (parser->lexer);
1873       /* This diagnostic makes more sense if it is tagged to the line
1874          of the token we just peeked at.  */
1875       cp_lexer_set_source_position_from_token (token);
1876
1877       if (token->type == CPP_PRAGMA)
1878         {
1879           error ("%<#pragma%> is not allowed here");
1880           cp_parser_skip_to_pragma_eol (parser, token);
1881           return;
1882         }
1883
1884       c_parse_error (message,
1885                      /* Because c_parser_error does not understand
1886                         CPP_KEYWORD, keywords are treated like
1887                         identifiers.  */
1888                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
1889                      token->value);
1890     }
1891 }
1892
1893 /* Issue an error about name-lookup failing.  NAME is the
1894    IDENTIFIER_NODE DECL is the result of
1895    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
1896    the thing that we hoped to find.  */
1897
1898 static void
1899 cp_parser_name_lookup_error (cp_parser* parser,
1900                              tree name,
1901                              tree decl,
1902                              const char* desired)
1903 {
1904   /* If name lookup completely failed, tell the user that NAME was not
1905      declared.  */
1906   if (decl == error_mark_node)
1907     {
1908       if (parser->scope && parser->scope != global_namespace)
1909         error ("%<%D::%D%> has not been declared",
1910                parser->scope, name);
1911       else if (parser->scope == global_namespace)
1912         error ("%<::%D%> has not been declared", name);
1913       else if (parser->object_scope
1914                && !CLASS_TYPE_P (parser->object_scope))
1915         error ("request for member %qD in non-class type %qT",
1916                name, parser->object_scope);
1917       else if (parser->object_scope)
1918         error ("%<%T::%D%> has not been declared",
1919                parser->object_scope, name);
1920       else
1921         error ("%qD has not been declared", name);
1922     }
1923   else if (parser->scope && parser->scope != global_namespace)
1924     error ("%<%D::%D%> %s", parser->scope, name, desired);
1925   else if (parser->scope == global_namespace)
1926     error ("%<::%D%> %s", name, desired);
1927   else
1928     error ("%qD %s", name, desired);
1929 }
1930
1931 /* If we are parsing tentatively, remember that an error has occurred
1932    during this tentative parse.  Returns true if the error was
1933    simulated; false if a message should be issued by the caller.  */
1934
1935 static bool
1936 cp_parser_simulate_error (cp_parser* parser)
1937 {
1938   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
1939     {
1940       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
1941       return true;
1942     }
1943   return false;
1944 }
1945
1946 /* Check for repeated decl-specifiers.  */
1947
1948 static void
1949 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs)
1950 {
1951   cp_decl_spec ds;
1952
1953   for (ds = ds_first; ds != ds_last; ++ds)
1954     {
1955       unsigned count = decl_specs->specs[(int)ds];
1956       if (count < 2)
1957         continue;
1958       /* The "long" specifier is a special case because of "long long".  */
1959       if (ds == ds_long)
1960         {
1961           if (count > 2)
1962             error ("%<long long long%> is too long for GCC");
1963           else if (pedantic && !in_system_header && warn_long_long)
1964             pedwarn ("ISO C++ does not support %<long long%>");
1965         }
1966       else if (count > 1)
1967         {
1968           static const char *const decl_spec_names[] = {
1969             "signed",
1970             "unsigned",
1971             "short",
1972             "long",
1973             "const",
1974             "volatile",
1975             "restrict",
1976             "inline",
1977             "virtual",
1978             "explicit",
1979             "friend",
1980             "typedef",
1981             "__complex",
1982             "__thread"
1983           };
1984           error ("duplicate %qs", decl_spec_names[(int)ds]);
1985         }
1986     }
1987 }
1988
1989 /* This function is called when a type is defined.  If type
1990    definitions are forbidden at this point, an error message is
1991    issued.  */
1992
1993 static void
1994 cp_parser_check_type_definition (cp_parser* parser)
1995 {
1996   /* If types are forbidden here, issue a message.  */
1997   if (parser->type_definition_forbidden_message)
1998     /* Use `%s' to print the string in case there are any escape
1999        characters in the message.  */
2000     error ("%s", parser->type_definition_forbidden_message);
2001 }
2002
2003 /* This function is called when the DECLARATOR is processed.  The TYPE
2004    was a type defined in the decl-specifiers.  If it is invalid to
2005    define a type in the decl-specifiers for DECLARATOR, an error is
2006    issued.  */
2007
2008 static void
2009 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2010                                                tree type)
2011 {
2012   /* [dcl.fct] forbids type definitions in return types.
2013      Unfortunately, it's not easy to know whether or not we are
2014      processing a return type until after the fact.  */
2015   while (declarator
2016          && (declarator->kind == cdk_pointer
2017              || declarator->kind == cdk_reference
2018              || declarator->kind == cdk_ptrmem))
2019     declarator = declarator->declarator;
2020   if (declarator
2021       && declarator->kind == cdk_function)
2022     {
2023       error ("new types may not be defined in a return type");
2024       inform ("(perhaps a semicolon is missing after the definition of %qT)",
2025               type);
2026     }
2027 }
2028
2029 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2030    "<" in any valid C++ program.  If the next token is indeed "<",
2031    issue a message warning the user about what appears to be an
2032    invalid attempt to form a template-id.  */
2033
2034 static void
2035 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2036                                          tree type)
2037 {
2038   cp_token_position start = 0;
2039
2040   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2041     {
2042       if (TYPE_P (type))
2043         error ("%qT is not a template", type);
2044       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2045         error ("%qE is not a template", type);
2046       else
2047         error ("invalid template-id");
2048       /* Remember the location of the invalid "<".  */
2049       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2050         start = cp_lexer_token_position (parser->lexer, true);
2051       /* Consume the "<".  */
2052       cp_lexer_consume_token (parser->lexer);
2053       /* Parse the template arguments.  */
2054       cp_parser_enclosed_template_argument_list (parser);
2055       /* Permanently remove the invalid template arguments so that
2056          this error message is not issued again.  */
2057       if (start)
2058         cp_lexer_purge_tokens_after (parser->lexer, start);
2059     }
2060 }
2061
2062 /* If parsing an integral constant-expression, issue an error message
2063    about the fact that THING appeared and return true.  Otherwise,
2064    return false.  In either case, set
2065    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2066
2067 static bool
2068 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2069                                             const char *thing)
2070 {
2071   parser->non_integral_constant_expression_p = true;
2072   if (parser->integral_constant_expression_p)
2073     {
2074       if (!parser->allow_non_integral_constant_expression_p)
2075         {
2076           error ("%s cannot appear in a constant-expression", thing);
2077           return true;
2078         }
2079     }
2080   return false;
2081 }
2082
2083 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2084    qualifying scope (or NULL, if none) for ID.  This function commits
2085    to the current active tentative parse, if any.  (Otherwise, the
2086    problematic construct might be encountered again later, resulting
2087    in duplicate error messages.)  */
2088
2089 static void
2090 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
2091 {
2092   tree decl, old_scope;
2093   /* Try to lookup the identifier.  */
2094   old_scope = parser->scope;
2095   parser->scope = scope;
2096   decl = cp_parser_lookup_name_simple (parser, id);
2097   parser->scope = old_scope;
2098   /* If the lookup found a template-name, it means that the user forgot
2099   to specify an argument list. Emit a useful error message.  */
2100   if (TREE_CODE (decl) == TEMPLATE_DECL)
2101     error ("invalid use of template-name %qE without an argument list", decl);
2102   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2103     error ("invalid use of destructor %qD as a type", id);
2104   else if (TREE_CODE (decl) == TYPE_DECL)
2105     /* Something like 'unsigned A a;'  */
2106     error ("invalid combination of multiple type-specifiers");
2107   else if (!parser->scope)
2108     {
2109       /* Issue an error message.  */
2110       error ("%qE does not name a type", id);
2111       /* If we're in a template class, it's possible that the user was
2112          referring to a type from a base class.  For example:
2113
2114            template <typename T> struct A { typedef T X; };
2115            template <typename T> struct B : public A<T> { X x; };
2116
2117          The user should have said "typename A<T>::X".  */
2118       if (processing_template_decl && current_class_type
2119           && TYPE_BINFO (current_class_type))
2120         {
2121           tree b;
2122
2123           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2124                b;
2125                b = TREE_CHAIN (b))
2126             {
2127               tree base_type = BINFO_TYPE (b);
2128               if (CLASS_TYPE_P (base_type)
2129                   && dependent_type_p (base_type))
2130                 {
2131                   tree field;
2132                   /* Go from a particular instantiation of the
2133                      template (which will have an empty TYPE_FIELDs),
2134                      to the main version.  */
2135                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2136                   for (field = TYPE_FIELDS (base_type);
2137                        field;
2138                        field = TREE_CHAIN (field))
2139                     if (TREE_CODE (field) == TYPE_DECL
2140                         && DECL_NAME (field) == id)
2141                       {
2142                         inform ("(perhaps %<typename %T::%E%> was intended)",
2143                                 BINFO_TYPE (b), id);
2144                         break;
2145                       }
2146                   if (field)
2147                     break;
2148                 }
2149             }
2150         }
2151     }
2152   /* Here we diagnose qualified-ids where the scope is actually correct,
2153      but the identifier does not resolve to a valid type name.  */
2154   else if (parser->scope != error_mark_node)
2155     {
2156       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2157         error ("%qE in namespace %qE does not name a type",
2158                id, parser->scope);
2159       else if (TYPE_P (parser->scope))
2160         error ("%qE in class %qT does not name a type", id, parser->scope);
2161       else
2162         gcc_unreachable ();
2163     }
2164   cp_parser_commit_to_tentative_parse (parser);
2165 }
2166
2167 /* Check for a common situation where a type-name should be present,
2168    but is not, and issue a sensible error message.  Returns true if an
2169    invalid type-name was detected.
2170
2171    The situation handled by this function are variable declarations of the
2172    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2173    Usually, `ID' should name a type, but if we got here it means that it
2174    does not. We try to emit the best possible error message depending on
2175    how exactly the id-expression looks like.  */
2176
2177 static bool
2178 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2179 {
2180   tree id;
2181
2182   cp_parser_parse_tentatively (parser);
2183   id = cp_parser_id_expression (parser,
2184                                 /*template_keyword_p=*/false,
2185                                 /*check_dependency_p=*/true,
2186                                 /*template_p=*/NULL,
2187                                 /*declarator_p=*/true,
2188                                 /*optional_p=*/false);
2189   /* After the id-expression, there should be a plain identifier,
2190      otherwise this is not a simple variable declaration. Also, if
2191      the scope is dependent, we cannot do much.  */
2192   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2193       || (parser->scope && TYPE_P (parser->scope)
2194           && dependent_type_p (parser->scope)))
2195     {
2196       cp_parser_abort_tentative_parse (parser);
2197       return false;
2198     }
2199   if (!cp_parser_parse_definitely (parser) || TREE_CODE (id) == TYPE_DECL)
2200     return false;
2201
2202   /* Emit a diagnostic for the invalid type.  */
2203   cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2204   /* Skip to the end of the declaration; there's no point in
2205      trying to process it.  */
2206   cp_parser_skip_to_end_of_block_or_statement (parser);
2207   return true;
2208 }
2209
2210 /* Consume tokens up to, and including, the next non-nested closing `)'.
2211    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2212    are doing error recovery. Returns -1 if OR_COMMA is true and we
2213    found an unnested comma.  */
2214
2215 static int
2216 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2217                                        bool recovering,
2218                                        bool or_comma,
2219                                        bool consume_paren)
2220 {
2221   unsigned paren_depth = 0;
2222   unsigned brace_depth = 0;
2223
2224   if (recovering && !or_comma
2225       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2226     return 0;
2227
2228   while (true)
2229     {
2230       cp_token * token = cp_lexer_peek_token (parser->lexer);
2231
2232       switch (token->type)
2233         {
2234         case CPP_EOF:
2235         case CPP_PRAGMA_EOL:
2236           /* If we've run out of tokens, then there is no closing `)'.  */
2237           return 0;
2238
2239         case CPP_SEMICOLON:
2240           /* This matches the processing in skip_to_end_of_statement.  */
2241           if (!brace_depth)
2242             return 0;
2243           break;
2244
2245         case CPP_OPEN_BRACE:
2246           ++brace_depth;
2247           break;
2248         case CPP_CLOSE_BRACE:
2249           if (!brace_depth--)
2250             return 0;
2251           break;
2252
2253         case CPP_COMMA:
2254           if (recovering && or_comma && !brace_depth && !paren_depth)
2255             return -1;
2256           break;
2257
2258         case CPP_OPEN_PAREN:
2259           if (!brace_depth)
2260             ++paren_depth;
2261           break;
2262
2263         case CPP_CLOSE_PAREN:
2264           if (!brace_depth && !paren_depth--)
2265             {
2266               if (consume_paren)
2267                 cp_lexer_consume_token (parser->lexer);
2268               return 1;
2269             }
2270           break;
2271
2272         default:
2273           break;
2274         }
2275
2276       /* Consume the token.  */
2277       cp_lexer_consume_token (parser->lexer);
2278     }
2279 }
2280
2281 /* Consume tokens until we reach the end of the current statement.
2282    Normally, that will be just before consuming a `;'.  However, if a
2283    non-nested `}' comes first, then we stop before consuming that.  */
2284
2285 static void
2286 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2287 {
2288   unsigned nesting_depth = 0;
2289
2290   while (true)
2291     {
2292       cp_token *token = cp_lexer_peek_token (parser->lexer);
2293
2294       switch (token->type)
2295         {
2296         case CPP_EOF:
2297         case CPP_PRAGMA_EOL:
2298           /* If we've run out of tokens, stop.  */
2299           return;
2300
2301         case CPP_SEMICOLON:
2302           /* If the next token is a `;', we have reached the end of the
2303              statement.  */
2304           if (!nesting_depth)
2305             return;
2306           break;
2307
2308         case CPP_CLOSE_BRACE:
2309           /* If this is a non-nested '}', stop before consuming it.
2310              That way, when confronted with something like:
2311
2312                { 3 + }
2313
2314              we stop before consuming the closing '}', even though we
2315              have not yet reached a `;'.  */
2316           if (nesting_depth == 0)
2317             return;
2318
2319           /* If it is the closing '}' for a block that we have
2320              scanned, stop -- but only after consuming the token.
2321              That way given:
2322
2323                 void f g () { ... }
2324                 typedef int I;
2325
2326              we will stop after the body of the erroneously declared
2327              function, but before consuming the following `typedef'
2328              declaration.  */
2329           if (--nesting_depth == 0)
2330             {
2331               cp_lexer_consume_token (parser->lexer);
2332               return;
2333             }
2334
2335         case CPP_OPEN_BRACE:
2336           ++nesting_depth;
2337           break;
2338
2339         default:
2340           break;
2341         }
2342
2343       /* Consume the token.  */
2344       cp_lexer_consume_token (parser->lexer);
2345     }
2346 }
2347
2348 /* This function is called at the end of a statement or declaration.
2349    If the next token is a semicolon, it is consumed; otherwise, error
2350    recovery is attempted.  */
2351
2352 static void
2353 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2354 {
2355   /* Look for the trailing `;'.  */
2356   if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2357     {
2358       /* If there is additional (erroneous) input, skip to the end of
2359          the statement.  */
2360       cp_parser_skip_to_end_of_statement (parser);
2361       /* If the next token is now a `;', consume it.  */
2362       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2363         cp_lexer_consume_token (parser->lexer);
2364     }
2365 }
2366
2367 /* Skip tokens until we have consumed an entire block, or until we
2368    have consumed a non-nested `;'.  */
2369
2370 static void
2371 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2372 {
2373   int nesting_depth = 0;
2374
2375   while (nesting_depth >= 0)
2376     {
2377       cp_token *token = cp_lexer_peek_token (parser->lexer);
2378
2379       switch (token->type)
2380         {
2381         case CPP_EOF:
2382         case CPP_PRAGMA_EOL:
2383           /* If we've run out of tokens, stop.  */
2384           return;
2385
2386         case CPP_SEMICOLON:
2387           /* Stop if this is an unnested ';'. */
2388           if (!nesting_depth)
2389             nesting_depth = -1;
2390           break;
2391
2392         case CPP_CLOSE_BRACE:
2393           /* Stop if this is an unnested '}', or closes the outermost
2394              nesting level.  */
2395           nesting_depth--;
2396           if (!nesting_depth)
2397             nesting_depth = -1;
2398           break;
2399
2400         case CPP_OPEN_BRACE:
2401           /* Nest. */
2402           nesting_depth++;
2403           break;
2404
2405         default:
2406           break;
2407         }
2408
2409       /* Consume the token.  */
2410       cp_lexer_consume_token (parser->lexer);
2411     }
2412 }
2413
2414 /* Skip tokens until a non-nested closing curly brace is the next
2415    token.  */
2416
2417 static void
2418 cp_parser_skip_to_closing_brace (cp_parser *parser)
2419 {
2420   unsigned nesting_depth = 0;
2421
2422   while (true)
2423     {
2424       cp_token *token = cp_lexer_peek_token (parser->lexer);
2425
2426       switch (token->type)
2427         {
2428         case CPP_EOF:
2429         case CPP_PRAGMA_EOL:
2430           /* If we've run out of tokens, stop.  */
2431           return;
2432
2433         case CPP_CLOSE_BRACE:
2434           /* If the next token is a non-nested `}', then we have reached
2435              the end of the current block.  */
2436           if (nesting_depth-- == 0)
2437             return;
2438           break;
2439
2440         case CPP_OPEN_BRACE:
2441           /* If it the next token is a `{', then we are entering a new
2442              block.  Consume the entire block.  */
2443           ++nesting_depth;
2444           break;
2445
2446         default:
2447           break;
2448         }
2449
2450       /* Consume the token.  */
2451       cp_lexer_consume_token (parser->lexer);
2452     }
2453 }
2454
2455 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2456    parameter is the PRAGMA token, allowing us to purge the entire pragma
2457    sequence.  */
2458
2459 static void
2460 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2461 {
2462   cp_token *token;
2463
2464   parser->lexer->in_pragma = false;
2465
2466   do
2467     token = cp_lexer_consume_token (parser->lexer);
2468   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2469
2470   /* Ensure that the pragma is not parsed again.  */
2471   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2472 }
2473
2474 /* Require pragma end of line, resyncing with it as necessary.  The
2475    arguments are as for cp_parser_skip_to_pragma_eol.  */
2476
2477 static void
2478 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2479 {
2480   parser->lexer->in_pragma = false;
2481   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2482     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2483 }
2484
2485 /* This is a simple wrapper around make_typename_type. When the id is
2486    an unresolved identifier node, we can provide a superior diagnostic
2487    using cp_parser_diagnose_invalid_type_name.  */
2488
2489 static tree
2490 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2491 {
2492   tree result;
2493   if (TREE_CODE (id) == IDENTIFIER_NODE)
2494     {
2495       result = make_typename_type (scope, id, typename_type,
2496                                    /*complain=*/tf_none);
2497       if (result == error_mark_node)
2498         cp_parser_diagnose_invalid_type_name (parser, scope, id);
2499       return result;
2500     }
2501   return make_typename_type (scope, id, typename_type, tf_error);
2502 }
2503
2504
2505 /* Create a new C++ parser.  */
2506
2507 static cp_parser *
2508 cp_parser_new (void)
2509 {
2510   cp_parser *parser;
2511   cp_lexer *lexer;
2512   unsigned i;
2513
2514   /* cp_lexer_new_main is called before calling ggc_alloc because
2515      cp_lexer_new_main might load a PCH file.  */
2516   lexer = cp_lexer_new_main ();
2517
2518   /* Initialize the binops_by_token so that we can get the tree
2519      directly from the token.  */
2520   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2521     binops_by_token[binops[i].token_type] = binops[i];
2522
2523   parser = GGC_CNEW (cp_parser);
2524   parser->lexer = lexer;
2525   parser->context = cp_parser_context_new (NULL);
2526
2527   /* For now, we always accept GNU extensions.  */
2528   parser->allow_gnu_extensions_p = 1;
2529
2530   /* The `>' token is a greater-than operator, not the end of a
2531      template-id.  */
2532   parser->greater_than_is_operator_p = true;
2533
2534   parser->default_arg_ok_p = true;
2535
2536   /* We are not parsing a constant-expression.  */
2537   parser->integral_constant_expression_p = false;
2538   parser->allow_non_integral_constant_expression_p = false;
2539   parser->non_integral_constant_expression_p = false;
2540
2541   /* Local variable names are not forbidden.  */
2542   parser->local_variables_forbidden_p = false;
2543
2544   /* We are not processing an `extern "C"' declaration.  */
2545   parser->in_unbraced_linkage_specification_p = false;
2546
2547   /* We are not processing a declarator.  */
2548   parser->in_declarator_p = false;
2549
2550   /* We are not processing a template-argument-list.  */
2551   parser->in_template_argument_list_p = false;
2552
2553   /* We are not in an iteration statement.  */
2554   parser->in_statement = 0;
2555
2556   /* We are not in a switch statement.  */
2557   parser->in_switch_statement_p = false;
2558
2559   /* We are not parsing a type-id inside an expression.  */
2560   parser->in_type_id_in_expr_p = false;
2561
2562   /* Declarations aren't implicitly extern "C".  */
2563   parser->implicit_extern_c = false;
2564
2565   /* String literals should be translated to the execution character set.  */
2566   parser->translate_strings_p = true;
2567
2568   /* The unparsed function queue is empty.  */
2569   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2570
2571   /* There are no classes being defined.  */
2572   parser->num_classes_being_defined = 0;
2573
2574   /* No template parameters apply.  */
2575   parser->num_template_parameter_lists = 0;
2576
2577   return parser;
2578 }
2579
2580 /* Create a cp_lexer structure which will emit the tokens in CACHE
2581    and push it onto the parser's lexer stack.  This is used for delayed
2582    parsing of in-class method bodies and default arguments, and should
2583    not be confused with tentative parsing.  */
2584 static void
2585 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2586 {
2587   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2588   lexer->next = parser->lexer;
2589   parser->lexer = lexer;
2590
2591   /* Move the current source position to that of the first token in the
2592      new lexer.  */
2593   cp_lexer_set_source_position_from_token (lexer->next_token);
2594 }
2595
2596 /* Pop the top lexer off the parser stack.  This is never used for the
2597    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2598 static void
2599 cp_parser_pop_lexer (cp_parser *parser)
2600 {
2601   cp_lexer *lexer = parser->lexer;
2602   parser->lexer = lexer->next;
2603   cp_lexer_destroy (lexer);
2604
2605   /* Put the current source position back where it was before this
2606      lexer was pushed.  */
2607   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2608 }
2609
2610 /* Lexical conventions [gram.lex]  */
2611
2612 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2613    identifier.  */
2614
2615 static tree
2616 cp_parser_identifier (cp_parser* parser)
2617 {
2618   cp_token *token;
2619
2620   /* Look for the identifier.  */
2621   token = cp_parser_require (parser, CPP_NAME, "identifier");
2622   /* Return the value.  */
2623   return token ? token->value : error_mark_node;
2624 }
2625
2626 /* Parse a sequence of adjacent string constants.  Returns a
2627    TREE_STRING representing the combined, nul-terminated string
2628    constant.  If TRANSLATE is true, translate the string to the
2629    execution character set.  If WIDE_OK is true, a wide string is
2630    invalid here.
2631
2632    C++98 [lex.string] says that if a narrow string literal token is
2633    adjacent to a wide string literal token, the behavior is undefined.
2634    However, C99 6.4.5p4 says that this results in a wide string literal.
2635    We follow C99 here, for consistency with the C front end.
2636
2637    This code is largely lifted from lex_string() in c-lex.c.
2638
2639    FUTURE: ObjC++ will need to handle @-strings here.  */
2640 static tree
2641 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2642 {
2643   tree value;
2644   bool wide = false;
2645   size_t count;
2646   struct obstack str_ob;
2647   cpp_string str, istr, *strs;
2648   cp_token *tok;
2649
2650   tok = cp_lexer_peek_token (parser->lexer);
2651   if (!cp_parser_is_string_literal (tok))
2652     {
2653       cp_parser_error (parser, "expected string-literal");
2654       return error_mark_node;
2655     }
2656
2657   /* Try to avoid the overhead of creating and destroying an obstack
2658      for the common case of just one string.  */
2659   if (!cp_parser_is_string_literal
2660       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2661     {
2662       cp_lexer_consume_token (parser->lexer);
2663
2664       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->value);
2665       str.len = TREE_STRING_LENGTH (tok->value);
2666       count = 1;
2667       if (tok->type == CPP_WSTRING)
2668         wide = true;
2669
2670       strs = &str;
2671     }
2672   else
2673     {
2674       gcc_obstack_init (&str_ob);
2675       count = 0;
2676
2677       do
2678         {
2679           cp_lexer_consume_token (parser->lexer);
2680           count++;
2681           str.text = (unsigned char *)TREE_STRING_POINTER (tok->value);
2682           str.len = TREE_STRING_LENGTH (tok->value);
2683           if (tok->type == CPP_WSTRING)
2684             wide = true;
2685
2686           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2687
2688           tok = cp_lexer_peek_token (parser->lexer);
2689         }
2690       while (cp_parser_is_string_literal (tok));
2691
2692       strs = (cpp_string *) obstack_finish (&str_ob);
2693     }
2694
2695   if (wide && !wide_ok)
2696     {
2697       cp_parser_error (parser, "a wide string is invalid in this context");
2698       wide = false;
2699     }
2700
2701   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2702       (parse_in, strs, count, &istr, wide))
2703     {
2704       value = build_string (istr.len, (char *)istr.text);
2705       free ((void *)istr.text);
2706
2707       TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
2708       value = fix_string_type (value);
2709     }
2710   else
2711     /* cpp_interpret_string has issued an error.  */
2712     value = error_mark_node;
2713
2714   if (count > 1)
2715     obstack_free (&str_ob, 0);
2716
2717   return value;
2718 }
2719
2720
2721 /* Basic concepts [gram.basic]  */
2722
2723 /* Parse a translation-unit.
2724
2725    translation-unit:
2726      declaration-seq [opt]
2727
2728    Returns TRUE if all went well.  */
2729
2730 static bool
2731 cp_parser_translation_unit (cp_parser* parser)
2732 {
2733   /* The address of the first non-permanent object on the declarator
2734      obstack.  */
2735   static void *declarator_obstack_base;
2736
2737   bool success;
2738
2739   /* Create the declarator obstack, if necessary.  */
2740   if (!cp_error_declarator)
2741     {
2742       gcc_obstack_init (&declarator_obstack);
2743       /* Create the error declarator.  */
2744       cp_error_declarator = make_declarator (cdk_error);
2745       /* Create the empty parameter list.  */
2746       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
2747       /* Remember where the base of the declarator obstack lies.  */
2748       declarator_obstack_base = obstack_next_free (&declarator_obstack);
2749     }
2750
2751   cp_parser_declaration_seq_opt (parser);
2752
2753   /* If there are no tokens left then all went well.  */
2754   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2755     {
2756       /* Get rid of the token array; we don't need it any more.  */
2757       cp_lexer_destroy (parser->lexer);
2758       parser->lexer = NULL;
2759
2760       /* This file might have been a context that's implicitly extern
2761          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
2762       if (parser->implicit_extern_c)
2763         {
2764           pop_lang_context ();
2765           parser->implicit_extern_c = false;
2766         }
2767
2768       /* Finish up.  */
2769       finish_translation_unit ();
2770
2771       success = true;
2772     }
2773   else
2774     {
2775       cp_parser_error (parser, "expected declaration");
2776       success = false;
2777     }
2778
2779   /* Make sure the declarator obstack was fully cleaned up.  */
2780   gcc_assert (obstack_next_free (&declarator_obstack)
2781               == declarator_obstack_base);
2782
2783   /* All went well.  */
2784   return success;
2785 }
2786
2787 /* Expressions [gram.expr] */
2788
2789 /* Parse a primary-expression.
2790
2791    primary-expression:
2792      literal
2793      this
2794      ( expression )
2795      id-expression
2796
2797    GNU Extensions:
2798
2799    primary-expression:
2800      ( compound-statement )
2801      __builtin_va_arg ( assignment-expression , type-id )
2802      __builtin_offsetof ( type-id , offsetof-expression )
2803
2804    Objective-C++ Extension:
2805
2806    primary-expression:
2807      objc-expression
2808
2809    literal:
2810      __null
2811
2812    ADDRESS_P is true iff this expression was immediately preceded by
2813    "&" and therefore might denote a pointer-to-member.  CAST_P is true
2814    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
2815    true iff this expression is a template argument.
2816
2817    Returns a representation of the expression.  Upon return, *IDK
2818    indicates what kind of id-expression (if any) was present.  */
2819
2820 static tree
2821 cp_parser_primary_expression (cp_parser *parser,
2822                               bool address_p,
2823                               bool cast_p,
2824                               bool template_arg_p,
2825                               cp_id_kind *idk)
2826 {
2827   cp_token *token;
2828
2829   /* Assume the primary expression is not an id-expression.  */
2830   *idk = CP_ID_KIND_NONE;
2831
2832   /* Peek at the next token.  */
2833   token = cp_lexer_peek_token (parser->lexer);
2834   switch (token->type)
2835     {
2836       /* literal:
2837            integer-literal
2838            character-literal
2839            floating-literal
2840            string-literal
2841            boolean-literal  */
2842     case CPP_CHAR:
2843     case CPP_WCHAR:
2844     case CPP_NUMBER:
2845       token = cp_lexer_consume_token (parser->lexer);
2846       /* Floating-point literals are only allowed in an integral
2847          constant expression if they are cast to an integral or
2848          enumeration type.  */
2849       if (TREE_CODE (token->value) == REAL_CST
2850           && parser->integral_constant_expression_p
2851           && pedantic)
2852         {
2853           /* CAST_P will be set even in invalid code like "int(2.7 +
2854              ...)".   Therefore, we have to check that the next token
2855              is sure to end the cast.  */
2856           if (cast_p)
2857             {
2858               cp_token *next_token;
2859
2860               next_token = cp_lexer_peek_token (parser->lexer);
2861               if (/* The comma at the end of an
2862                      enumerator-definition.  */
2863                   next_token->type != CPP_COMMA
2864                   /* The curly brace at the end of an enum-specifier.  */
2865                   && next_token->type != CPP_CLOSE_BRACE
2866                   /* The end of a statement.  */
2867                   && next_token->type != CPP_SEMICOLON
2868                   /* The end of the cast-expression.  */
2869                   && next_token->type != CPP_CLOSE_PAREN
2870                   /* The end of an array bound.  */
2871                   && next_token->type != CPP_CLOSE_SQUARE
2872                   /* The closing ">" in a template-argument-list.  */
2873                   && (next_token->type != CPP_GREATER
2874                       || parser->greater_than_is_operator_p))
2875                 cast_p = false;
2876             }
2877
2878           /* If we are within a cast, then the constraint that the
2879              cast is to an integral or enumeration type will be
2880              checked at that point.  If we are not within a cast, then
2881              this code is invalid.  */
2882           if (!cast_p)
2883             cp_parser_non_integral_constant_expression
2884               (parser, "floating-point literal");
2885         }
2886       return token->value;
2887
2888     case CPP_STRING:
2889     case CPP_WSTRING:
2890       /* ??? Should wide strings be allowed when parser->translate_strings_p
2891          is false (i.e. in attributes)?  If not, we can kill the third
2892          argument to cp_parser_string_literal.  */
2893       return cp_parser_string_literal (parser,
2894                                        parser->translate_strings_p,
2895                                        true);
2896
2897     case CPP_OPEN_PAREN:
2898       {
2899         tree expr;
2900         bool saved_greater_than_is_operator_p;
2901
2902         /* Consume the `('.  */
2903         cp_lexer_consume_token (parser->lexer);
2904         /* Within a parenthesized expression, a `>' token is always
2905            the greater-than operator.  */
2906         saved_greater_than_is_operator_p
2907           = parser->greater_than_is_operator_p;
2908         parser->greater_than_is_operator_p = true;
2909         /* If we see `( { ' then we are looking at the beginning of
2910            a GNU statement-expression.  */
2911         if (cp_parser_allow_gnu_extensions_p (parser)
2912             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
2913           {
2914             /* Statement-expressions are not allowed by the standard.  */
2915             if (pedantic)
2916               pedwarn ("ISO C++ forbids braced-groups within expressions");
2917
2918             /* And they're not allowed outside of a function-body; you
2919                cannot, for example, write:
2920
2921                  int i = ({ int j = 3; j + 1; });
2922
2923                at class or namespace scope.  */
2924             if (!at_function_scope_p ())
2925               error ("statement-expressions are allowed only inside functions");
2926             /* Start the statement-expression.  */
2927             expr = begin_stmt_expr ();
2928             /* Parse the compound-statement.  */
2929             cp_parser_compound_statement (parser, expr, false);
2930             /* Finish up.  */
2931             expr = finish_stmt_expr (expr, false);
2932           }
2933         else
2934           {
2935             /* Parse the parenthesized expression.  */
2936             expr = cp_parser_expression (parser, cast_p);
2937             /* Let the front end know that this expression was
2938                enclosed in parentheses. This matters in case, for
2939                example, the expression is of the form `A::B', since
2940                `&A::B' might be a pointer-to-member, but `&(A::B)' is
2941                not.  */
2942             finish_parenthesized_expr (expr);
2943           }
2944         /* The `>' token might be the end of a template-id or
2945            template-parameter-list now.  */
2946         parser->greater_than_is_operator_p
2947           = saved_greater_than_is_operator_p;
2948         /* Consume the `)'.  */
2949         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
2950           cp_parser_skip_to_end_of_statement (parser);
2951
2952         return expr;
2953       }
2954
2955     case CPP_KEYWORD:
2956       switch (token->keyword)
2957         {
2958           /* These two are the boolean literals.  */
2959         case RID_TRUE:
2960           cp_lexer_consume_token (parser->lexer);
2961           return boolean_true_node;
2962         case RID_FALSE:
2963           cp_lexer_consume_token (parser->lexer);
2964           return boolean_false_node;
2965
2966           /* The `__null' literal.  */
2967         case RID_NULL:
2968           cp_lexer_consume_token (parser->lexer);
2969           return null_node;
2970
2971           /* Recognize the `this' keyword.  */
2972         case RID_THIS:
2973           cp_lexer_consume_token (parser->lexer);
2974           if (parser->local_variables_forbidden_p)
2975             {
2976               error ("%<this%> may not be used in this context");
2977               return error_mark_node;
2978             }
2979           /* Pointers cannot appear in constant-expressions.  */
2980           if (cp_parser_non_integral_constant_expression (parser,
2981                                                           "`this'"))
2982             return error_mark_node;
2983           return finish_this_expr ();
2984
2985           /* The `operator' keyword can be the beginning of an
2986              id-expression.  */
2987         case RID_OPERATOR:
2988           goto id_expression;
2989
2990         case RID_FUNCTION_NAME:
2991         case RID_PRETTY_FUNCTION_NAME:
2992         case RID_C99_FUNCTION_NAME:
2993           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
2994              __func__ are the names of variables -- but they are
2995              treated specially.  Therefore, they are handled here,
2996              rather than relying on the generic id-expression logic
2997              below.  Grammatically, these names are id-expressions.
2998
2999              Consume the token.  */
3000           token = cp_lexer_consume_token (parser->lexer);
3001           /* Look up the name.  */
3002           return finish_fname (token->value);
3003
3004         case RID_VA_ARG:
3005           {
3006             tree expression;
3007             tree type;
3008
3009             /* The `__builtin_va_arg' construct is used to handle
3010                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3011             cp_lexer_consume_token (parser->lexer);
3012             /* Look for the opening `('.  */
3013             cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3014             /* Now, parse the assignment-expression.  */
3015             expression = cp_parser_assignment_expression (parser,
3016                                                           /*cast_p=*/false);
3017             /* Look for the `,'.  */
3018             cp_parser_require (parser, CPP_COMMA, "`,'");
3019             /* Parse the type-id.  */
3020             type = cp_parser_type_id (parser);
3021             /* Look for the closing `)'.  */
3022             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3023             /* Using `va_arg' in a constant-expression is not
3024                allowed.  */
3025             if (cp_parser_non_integral_constant_expression (parser,
3026                                                             "`va_arg'"))
3027               return error_mark_node;
3028             return build_x_va_arg (expression, type);
3029           }
3030
3031         case RID_OFFSETOF:
3032           return cp_parser_builtin_offsetof (parser);
3033
3034           /* Objective-C++ expressions.  */
3035         case RID_AT_ENCODE:
3036         case RID_AT_PROTOCOL:
3037         case RID_AT_SELECTOR:
3038           return cp_parser_objc_expression (parser);
3039
3040         default:
3041           cp_parser_error (parser, "expected primary-expression");
3042           return error_mark_node;
3043         }
3044
3045       /* An id-expression can start with either an identifier, a
3046          `::' as the beginning of a qualified-id, or the "operator"
3047          keyword.  */
3048     case CPP_NAME:
3049     case CPP_SCOPE:
3050     case CPP_TEMPLATE_ID:
3051     case CPP_NESTED_NAME_SPECIFIER:
3052       {
3053         tree id_expression;
3054         tree decl;
3055         const char *error_msg;
3056         bool template_p;
3057         bool done;
3058
3059       id_expression:
3060         /* Parse the id-expression.  */
3061         id_expression
3062           = cp_parser_id_expression (parser,
3063                                      /*template_keyword_p=*/false,
3064                                      /*check_dependency_p=*/true,
3065                                      &template_p,
3066                                      /*declarator_p=*/false,
3067                                      /*optional_p=*/false);
3068         if (id_expression == error_mark_node)
3069           return error_mark_node;
3070         token = cp_lexer_peek_token (parser->lexer);
3071         done = (token->type != CPP_OPEN_SQUARE
3072                 && token->type != CPP_OPEN_PAREN
3073                 && token->type != CPP_DOT
3074                 && token->type != CPP_DEREF
3075                 && token->type != CPP_PLUS_PLUS
3076                 && token->type != CPP_MINUS_MINUS);
3077         /* If we have a template-id, then no further lookup is
3078            required.  If the template-id was for a template-class, we
3079            will sometimes have a TYPE_DECL at this point.  */
3080         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3081                  || TREE_CODE (id_expression) == TYPE_DECL)
3082           decl = id_expression;
3083         /* Look up the name.  */
3084         else
3085           {
3086             tree ambiguous_decls;
3087
3088             decl = cp_parser_lookup_name (parser, id_expression,
3089                                           none_type,
3090                                           template_p,
3091                                           /*is_namespace=*/false,
3092                                           /*check_dependency=*/true,
3093                                           &ambiguous_decls);
3094             /* If the lookup was ambiguous, an error will already have
3095                been issued.  */
3096             if (ambiguous_decls)
3097               return error_mark_node;
3098
3099             /* In Objective-C++, an instance variable (ivar) may be preferred
3100                to whatever cp_parser_lookup_name() found.  */
3101             decl = objc_lookup_ivar (decl, id_expression);
3102
3103             /* If name lookup gives us a SCOPE_REF, then the
3104                qualifying scope was dependent.  */
3105             if (TREE_CODE (decl) == SCOPE_REF)
3106               return decl;
3107             /* Check to see if DECL is a local variable in a context
3108                where that is forbidden.  */
3109             if (parser->local_variables_forbidden_p
3110                 && local_variable_p (decl))
3111               {
3112                 /* It might be that we only found DECL because we are
3113                    trying to be generous with pre-ISO scoping rules.
3114                    For example, consider:
3115
3116                      int i;
3117                      void g() {
3118                        for (int i = 0; i < 10; ++i) {}
3119                        extern void f(int j = i);
3120                      }
3121
3122                    Here, name look up will originally find the out
3123                    of scope `i'.  We need to issue a warning message,
3124                    but then use the global `i'.  */
3125                 decl = check_for_out_of_scope_variable (decl);
3126                 if (local_variable_p (decl))
3127                   {
3128                     error ("local variable %qD may not appear in this context",
3129                            decl);
3130                     return error_mark_node;
3131                   }
3132               }
3133           }
3134
3135         decl = (finish_id_expression
3136                 (id_expression, decl, parser->scope,
3137                  idk,
3138                  parser->integral_constant_expression_p,
3139                  parser->allow_non_integral_constant_expression_p,
3140                  &parser->non_integral_constant_expression_p,
3141                  template_p, done, address_p,
3142                  template_arg_p,
3143                  &error_msg));
3144         if (error_msg)
3145           cp_parser_error (parser, error_msg);
3146         return decl;
3147       }
3148
3149       /* Anything else is an error.  */
3150     default:
3151       /* ...unless we have an Objective-C++ message or string literal, that is.  */
3152       if (c_dialect_objc ()
3153           && (token->type == CPP_OPEN_SQUARE || token->type == CPP_OBJC_STRING))
3154         return cp_parser_objc_expression (parser);
3155
3156       cp_parser_error (parser, "expected primary-expression");
3157       return error_mark_node;
3158     }
3159 }
3160
3161 /* Parse an id-expression.
3162
3163    id-expression:
3164      unqualified-id
3165      qualified-id
3166
3167    qualified-id:
3168      :: [opt] nested-name-specifier template [opt] unqualified-id
3169      :: identifier
3170      :: operator-function-id
3171      :: template-id
3172
3173    Return a representation of the unqualified portion of the
3174    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3175    a `::' or nested-name-specifier.
3176
3177    Often, if the id-expression was a qualified-id, the caller will
3178    want to make a SCOPE_REF to represent the qualified-id.  This
3179    function does not do this in order to avoid wastefully creating
3180    SCOPE_REFs when they are not required.
3181
3182    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3183    `template' keyword.
3184
3185    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3186    uninstantiated templates.
3187
3188    If *TEMPLATE_P is non-NULL, it is set to true iff the
3189    `template' keyword is used to explicitly indicate that the entity
3190    named is a template.
3191
3192    If DECLARATOR_P is true, the id-expression is appearing as part of
3193    a declarator, rather than as part of an expression.  */
3194
3195 static tree
3196 cp_parser_id_expression (cp_parser *parser,
3197                          bool template_keyword_p,
3198                          bool check_dependency_p,
3199                          bool *template_p,
3200                          bool declarator_p,
3201                          bool optional_p)
3202 {
3203   bool global_scope_p;
3204   bool nested_name_specifier_p;
3205
3206   /* Assume the `template' keyword was not used.  */
3207   if (template_p)
3208     *template_p = template_keyword_p;
3209
3210   /* Look for the optional `::' operator.  */
3211   global_scope_p
3212     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3213        != NULL_TREE);
3214   /* Look for the optional nested-name-specifier.  */
3215   nested_name_specifier_p
3216     = (cp_parser_nested_name_specifier_opt (parser,
3217                                             /*typename_keyword_p=*/false,
3218                                             check_dependency_p,
3219                                             /*type_p=*/false,
3220                                             declarator_p)
3221        != NULL_TREE);
3222   /* If there is a nested-name-specifier, then we are looking at
3223      the first qualified-id production.  */
3224   if (nested_name_specifier_p)
3225     {
3226       tree saved_scope;
3227       tree saved_object_scope;
3228       tree saved_qualifying_scope;
3229       tree unqualified_id;
3230       bool is_template;
3231
3232       /* See if the next token is the `template' keyword.  */
3233       if (!template_p)
3234         template_p = &is_template;
3235       *template_p = cp_parser_optional_template_keyword (parser);
3236       /* Name lookup we do during the processing of the
3237          unqualified-id might obliterate SCOPE.  */
3238       saved_scope = parser->scope;
3239       saved_object_scope = parser->object_scope;
3240       saved_qualifying_scope = parser->qualifying_scope;
3241       /* Process the final unqualified-id.  */
3242       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3243                                                  check_dependency_p,
3244                                                  declarator_p,
3245                                                  /*optional_p=*/false);
3246       /* Restore the SAVED_SCOPE for our caller.  */
3247       parser->scope = saved_scope;
3248       parser->object_scope = saved_object_scope;
3249       parser->qualifying_scope = saved_qualifying_scope;
3250
3251       return unqualified_id;
3252     }
3253   /* Otherwise, if we are in global scope, then we are looking at one
3254      of the other qualified-id productions.  */
3255   else if (global_scope_p)
3256     {
3257       cp_token *token;
3258       tree id;
3259
3260       /* Peek at the next token.  */
3261       token = cp_lexer_peek_token (parser->lexer);
3262
3263       /* If it's an identifier, and the next token is not a "<", then
3264          we can avoid the template-id case.  This is an optimization
3265          for this common case.  */
3266       if (token->type == CPP_NAME
3267           && !cp_parser_nth_token_starts_template_argument_list_p
3268                (parser, 2))
3269         return cp_parser_identifier (parser);
3270
3271       cp_parser_parse_tentatively (parser);
3272       /* Try a template-id.  */
3273       id = cp_parser_template_id (parser,
3274                                   /*template_keyword_p=*/false,
3275                                   /*check_dependency_p=*/true,
3276                                   declarator_p);
3277       /* If that worked, we're done.  */
3278       if (cp_parser_parse_definitely (parser))
3279         return id;
3280
3281       /* Peek at the next token.  (Changes in the token buffer may
3282          have invalidated the pointer obtained above.)  */
3283       token = cp_lexer_peek_token (parser->lexer);
3284
3285       switch (token->type)
3286         {
3287         case CPP_NAME:
3288           return cp_parser_identifier (parser);
3289
3290         case CPP_KEYWORD:
3291           if (token->keyword == RID_OPERATOR)
3292             return cp_parser_operator_function_id (parser);
3293           /* Fall through.  */
3294
3295         default:
3296           cp_parser_error (parser, "expected id-expression");
3297           return error_mark_node;
3298         }
3299     }
3300   else
3301     return cp_parser_unqualified_id (parser, template_keyword_p,
3302                                      /*check_dependency_p=*/true,
3303                                      declarator_p,
3304                                      optional_p);
3305 }
3306
3307 /* Parse an unqualified-id.
3308
3309    unqualified-id:
3310      identifier
3311      operator-function-id
3312      conversion-function-id
3313      ~ class-name
3314      template-id
3315
3316    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3317    keyword, in a construct like `A::template ...'.
3318
3319    Returns a representation of unqualified-id.  For the `identifier'
3320    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3321    production a BIT_NOT_EXPR is returned; the operand of the
3322    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3323    other productions, see the documentation accompanying the
3324    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3325    names are looked up in uninstantiated templates.  If DECLARATOR_P
3326    is true, the unqualified-id is appearing as part of a declarator,
3327    rather than as part of an expression.  */
3328
3329 static tree
3330 cp_parser_unqualified_id (cp_parser* parser,
3331                           bool template_keyword_p,
3332                           bool check_dependency_p,
3333                           bool declarator_p,
3334                           bool optional_p)
3335 {
3336   cp_token *token;
3337
3338   /* Peek at the next token.  */
3339   token = cp_lexer_peek_token (parser->lexer);
3340
3341   switch (token->type)
3342     {
3343     case CPP_NAME:
3344       {
3345         tree id;
3346
3347         /* We don't know yet whether or not this will be a
3348            template-id.  */
3349         cp_parser_parse_tentatively (parser);
3350         /* Try a template-id.  */
3351         id = cp_parser_template_id (parser, template_keyword_p,
3352                                     check_dependency_p,
3353                                     declarator_p);
3354         /* If it worked, we're done.  */
3355         if (cp_parser_parse_definitely (parser))
3356           return id;
3357         /* Otherwise, it's an ordinary identifier.  */
3358         return cp_parser_identifier (parser);
3359       }
3360
3361     case CPP_TEMPLATE_ID:
3362       return cp_parser_template_id (parser, template_keyword_p,
3363                                     check_dependency_p,
3364                                     declarator_p);
3365
3366     case CPP_COMPL:
3367       {
3368         tree type_decl;
3369         tree qualifying_scope;
3370         tree object_scope;
3371         tree scope;
3372         bool done;
3373
3374         /* Consume the `~' token.  */
3375         cp_lexer_consume_token (parser->lexer);
3376         /* Parse the class-name.  The standard, as written, seems to
3377            say that:
3378
3379              template <typename T> struct S { ~S (); };
3380              template <typename T> S<T>::~S() {}
3381
3382            is invalid, since `~' must be followed by a class-name, but
3383            `S<T>' is dependent, and so not known to be a class.
3384            That's not right; we need to look in uninstantiated
3385            templates.  A further complication arises from:
3386
3387              template <typename T> void f(T t) {
3388                t.T::~T();
3389              }
3390
3391            Here, it is not possible to look up `T' in the scope of `T'
3392            itself.  We must look in both the current scope, and the
3393            scope of the containing complete expression.
3394
3395            Yet another issue is:
3396
3397              struct S {
3398                int S;
3399                ~S();
3400              };
3401
3402              S::~S() {}
3403
3404            The standard does not seem to say that the `S' in `~S'
3405            should refer to the type `S' and not the data member
3406            `S::S'.  */
3407
3408         /* DR 244 says that we look up the name after the "~" in the
3409            same scope as we looked up the qualifying name.  That idea
3410            isn't fully worked out; it's more complicated than that.  */
3411         scope = parser->scope;
3412         object_scope = parser->object_scope;
3413         qualifying_scope = parser->qualifying_scope;
3414
3415         /* Check for invalid scopes.  */
3416         if (scope == error_mark_node)
3417           {
3418             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3419               cp_lexer_consume_token (parser->lexer);
3420             return error_mark_node;
3421           }
3422         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3423           {
3424             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3425               error ("scope %qT before %<~%> is not a class-name", scope);
3426             cp_parser_simulate_error (parser);
3427             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3428               cp_lexer_consume_token (parser->lexer);
3429             return error_mark_node;
3430           }
3431         gcc_assert (!scope || TYPE_P (scope));
3432
3433         /* If the name is of the form "X::~X" it's OK.  */
3434         token = cp_lexer_peek_token (parser->lexer);
3435         if (scope
3436             && token->type == CPP_NAME
3437             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3438                 == CPP_OPEN_PAREN)
3439             && constructor_name_p (token->value, scope))
3440           {
3441             cp_lexer_consume_token (parser->lexer);
3442             return build_nt (BIT_NOT_EXPR, scope);
3443           }
3444
3445         /* If there was an explicit qualification (S::~T), first look
3446            in the scope given by the qualification (i.e., S).  */
3447         done = false;
3448         type_decl = NULL_TREE;
3449         if (scope)
3450           {
3451             cp_parser_parse_tentatively (parser);
3452             type_decl = cp_parser_class_name (parser,
3453                                               /*typename_keyword_p=*/false,
3454                                               /*template_keyword_p=*/false,
3455                                               none_type,
3456                                               /*check_dependency=*/false,
3457                                               /*class_head_p=*/false,
3458                                               declarator_p);
3459             if (cp_parser_parse_definitely (parser))
3460               done = true;
3461           }
3462         /* In "N::S::~S", look in "N" as well.  */
3463         if (!done && scope && qualifying_scope)
3464           {
3465             cp_parser_parse_tentatively (parser);
3466             parser->scope = qualifying_scope;
3467             parser->object_scope = NULL_TREE;
3468             parser->qualifying_scope = NULL_TREE;
3469             type_decl
3470               = cp_parser_class_name (parser,
3471                                       /*typename_keyword_p=*/false,
3472                                       /*template_keyword_p=*/false,
3473                                       none_type,
3474                                       /*check_dependency=*/false,
3475                                       /*class_head_p=*/false,
3476                                       declarator_p);
3477             if (cp_parser_parse_definitely (parser))
3478               done = true;
3479           }
3480         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3481         else if (!done && object_scope)
3482           {
3483             cp_parser_parse_tentatively (parser);
3484             parser->scope = object_scope;
3485             parser->object_scope = NULL_TREE;
3486             parser->qualifying_scope = NULL_TREE;
3487             type_decl
3488               = cp_parser_class_name (parser,
3489                                       /*typename_keyword_p=*/false,
3490                                       /*template_keyword_p=*/false,
3491                                       none_type,
3492                                       /*check_dependency=*/false,
3493                                       /*class_head_p=*/false,
3494                                       declarator_p);
3495             if (cp_parser_parse_definitely (parser))
3496               done = true;
3497           }
3498         /* Look in the surrounding context.  */
3499         if (!done)
3500           {
3501             parser->scope = NULL_TREE;
3502             parser->object_scope = NULL_TREE;
3503             parser->qualifying_scope = NULL_TREE;
3504             type_decl
3505               = cp_parser_class_name (parser,
3506                                       /*typename_keyword_p=*/false,
3507                                       /*template_keyword_p=*/false,
3508                                       none_type,
3509                                       /*check_dependency=*/false,
3510                                       /*class_head_p=*/false,
3511                                       declarator_p);
3512           }
3513         /* If an error occurred, assume that the name of the
3514            destructor is the same as the name of the qualifying
3515            class.  That allows us to keep parsing after running
3516            into ill-formed destructor names.  */
3517         if (type_decl == error_mark_node && scope)
3518           return build_nt (BIT_NOT_EXPR, scope);
3519         else if (type_decl == error_mark_node)
3520           return error_mark_node;
3521
3522         /* Check that destructor name and scope match.  */
3523         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3524           {
3525             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3526               error ("declaration of %<~%T%> as member of %qT",
3527                      type_decl, scope);
3528             cp_parser_simulate_error (parser);
3529             return error_mark_node;
3530           }
3531
3532         /* [class.dtor]
3533
3534            A typedef-name that names a class shall not be used as the
3535            identifier in the declarator for a destructor declaration.  */
3536         if (declarator_p
3537             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3538             && !DECL_SELF_REFERENCE_P (type_decl)
3539             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3540           error ("typedef-name %qD used as destructor declarator",
3541                  type_decl);
3542
3543         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3544       }
3545
3546     case CPP_KEYWORD:
3547       if (token->keyword == RID_OPERATOR)
3548         {
3549           tree id;
3550
3551           /* This could be a template-id, so we try that first.  */
3552           cp_parser_parse_tentatively (parser);
3553           /* Try a template-id.  */
3554           id = cp_parser_template_id (parser, template_keyword_p,
3555                                       /*check_dependency_p=*/true,
3556                                       declarator_p);
3557           /* If that worked, we're done.  */
3558           if (cp_parser_parse_definitely (parser))
3559             return id;
3560           /* We still don't know whether we're looking at an
3561              operator-function-id or a conversion-function-id.  */
3562           cp_parser_parse_tentatively (parser);
3563           /* Try an operator-function-id.  */
3564           id = cp_parser_operator_function_id (parser);
3565           /* If that didn't work, try a conversion-function-id.  */
3566           if (!cp_parser_parse_definitely (parser))
3567             id = cp_parser_conversion_function_id (parser);
3568
3569           return id;
3570         }
3571       /* Fall through.  */
3572
3573     default:
3574       if (optional_p)
3575         return NULL_TREE;
3576       cp_parser_error (parser, "expected unqualified-id");
3577       return error_mark_node;
3578     }
3579 }
3580
3581 /* Parse an (optional) nested-name-specifier.
3582
3583    nested-name-specifier:
3584      class-or-namespace-name :: nested-name-specifier [opt]
3585      class-or-namespace-name :: template nested-name-specifier [opt]
3586
3587    PARSER->SCOPE should be set appropriately before this function is
3588    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3589    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3590    in name lookups.
3591
3592    Sets PARSER->SCOPE to the class (TYPE) or namespace
3593    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3594    it unchanged if there is no nested-name-specifier.  Returns the new
3595    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3596
3597    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3598    part of a declaration and/or decl-specifier.  */
3599
3600 static tree
3601 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3602                                      bool typename_keyword_p,
3603                                      bool check_dependency_p,
3604                                      bool type_p,
3605                                      bool is_declaration)
3606 {
3607   bool success = false;
3608   cp_token_position start = 0;
3609   cp_token *token;
3610
3611   /* Remember where the nested-name-specifier starts.  */
3612   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3613     {
3614       start = cp_lexer_token_position (parser->lexer, false);
3615       push_deferring_access_checks (dk_deferred);
3616     }
3617
3618   while (true)
3619     {
3620       tree new_scope;
3621       tree old_scope;
3622       tree saved_qualifying_scope;
3623       bool template_keyword_p;
3624
3625       /* Spot cases that cannot be the beginning of a
3626          nested-name-specifier.  */
3627       token = cp_lexer_peek_token (parser->lexer);
3628
3629       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3630          the already parsed nested-name-specifier.  */
3631       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3632         {
3633           /* Grab the nested-name-specifier and continue the loop.  */
3634           cp_parser_pre_parsed_nested_name_specifier (parser);
3635           success = true;
3636           continue;
3637         }
3638
3639       /* Spot cases that cannot be the beginning of a
3640          nested-name-specifier.  On the second and subsequent times
3641          through the loop, we look for the `template' keyword.  */
3642       if (success && token->keyword == RID_TEMPLATE)
3643         ;
3644       /* A template-id can start a nested-name-specifier.  */
3645       else if (token->type == CPP_TEMPLATE_ID)
3646         ;
3647       else
3648         {
3649           /* If the next token is not an identifier, then it is
3650              definitely not a class-or-namespace-name.  */
3651           if (token->type != CPP_NAME)
3652             break;
3653           /* If the following token is neither a `<' (to begin a
3654              template-id), nor a `::', then we are not looking at a
3655              nested-name-specifier.  */
3656           token = cp_lexer_peek_nth_token (parser->lexer, 2);
3657           if (token->type != CPP_SCOPE
3658               && !cp_parser_nth_token_starts_template_argument_list_p
3659                   (parser, 2))
3660             break;
3661         }
3662
3663       /* The nested-name-specifier is optional, so we parse
3664          tentatively.  */
3665       cp_parser_parse_tentatively (parser);
3666
3667       /* Look for the optional `template' keyword, if this isn't the
3668          first time through the loop.  */
3669       if (success)
3670         template_keyword_p = cp_parser_optional_template_keyword (parser);
3671       else
3672         template_keyword_p = false;
3673
3674       /* Save the old scope since the name lookup we are about to do
3675          might destroy it.  */
3676       old_scope = parser->scope;
3677       saved_qualifying_scope = parser->qualifying_scope;
3678       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
3679          look up names in "X<T>::I" in order to determine that "Y" is
3680          a template.  So, if we have a typename at this point, we make
3681          an effort to look through it.  */
3682       if (is_declaration
3683           && !typename_keyword_p
3684           && parser->scope
3685           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3686         parser->scope = resolve_typename_type (parser->scope,
3687                                                /*only_current_p=*/false);
3688       /* Parse the qualifying entity.  */
3689       new_scope
3690         = cp_parser_class_or_namespace_name (parser,
3691                                              typename_keyword_p,
3692                                              template_keyword_p,
3693                                              check_dependency_p,
3694                                              type_p,
3695                                              is_declaration);
3696       /* Look for the `::' token.  */
3697       cp_parser_require (parser, CPP_SCOPE, "`::'");
3698
3699       /* If we found what we wanted, we keep going; otherwise, we're
3700          done.  */
3701       if (!cp_parser_parse_definitely (parser))
3702         {
3703           bool error_p = false;
3704
3705           /* Restore the OLD_SCOPE since it was valid before the
3706              failed attempt at finding the last
3707              class-or-namespace-name.  */
3708           parser->scope = old_scope;
3709           parser->qualifying_scope = saved_qualifying_scope;
3710           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3711             break;
3712           /* If the next token is an identifier, and the one after
3713              that is a `::', then any valid interpretation would have
3714              found a class-or-namespace-name.  */
3715           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3716                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3717                      == CPP_SCOPE)
3718                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3719                      != CPP_COMPL))
3720             {
3721               token = cp_lexer_consume_token (parser->lexer);
3722               if (!error_p)
3723                 {
3724                   if (!token->ambiguous_p)
3725                     {
3726                       tree decl;
3727                       tree ambiguous_decls;
3728
3729                       decl = cp_parser_lookup_name (parser, token->value,
3730                                                     none_type,
3731                                                     /*is_template=*/false,
3732                                                     /*is_namespace=*/false,
3733                                                     /*check_dependency=*/true,
3734                                                     &ambiguous_decls);
3735                       if (TREE_CODE (decl) == TEMPLATE_DECL)
3736                         error ("%qD used without template parameters", decl);
3737                       else if (ambiguous_decls)
3738                         {
3739                           error ("reference to %qD is ambiguous",
3740                                  token->value);
3741                           print_candidates (ambiguous_decls);
3742                           decl = error_mark_node;
3743                         }
3744                       else
3745                         cp_parser_name_lookup_error
3746                           (parser, token->value, decl,
3747                            "is not a class or namespace");
3748                     }
3749                   parser->scope = error_mark_node;
3750                   error_p = true;
3751                   /* Treat this as a successful nested-name-specifier
3752                      due to:
3753
3754                      [basic.lookup.qual]
3755
3756                      If the name found is not a class-name (clause
3757                      _class_) or namespace-name (_namespace.def_), the
3758                      program is ill-formed.  */
3759                   success = true;
3760                 }
3761               cp_lexer_consume_token (parser->lexer);
3762             }
3763           break;
3764         }
3765       /* We've found one valid nested-name-specifier.  */
3766       success = true;
3767       /* Name lookup always gives us a DECL.  */
3768       if (TREE_CODE (new_scope) == TYPE_DECL)
3769         new_scope = TREE_TYPE (new_scope);
3770       /* Uses of "template" must be followed by actual templates.  */
3771       if (template_keyword_p
3772           && !(CLASS_TYPE_P (new_scope)
3773                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
3774                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
3775                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
3776           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
3777                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
3778                    == TEMPLATE_ID_EXPR)))
3779         pedwarn (TYPE_P (new_scope)
3780                  ? "%qT is not a template"
3781                  : "%qD is not a template",
3782                  new_scope);
3783       /* If it is a class scope, try to complete it; we are about to
3784          be looking up names inside the class.  */
3785       if (TYPE_P (new_scope)
3786           /* Since checking types for dependency can be expensive,
3787              avoid doing it if the type is already complete.  */
3788           && !COMPLETE_TYPE_P (new_scope)
3789           /* Do not try to complete dependent types.  */
3790           && !dependent_type_p (new_scope))
3791         new_scope = complete_type (new_scope);
3792       /* Make sure we look in the right scope the next time through
3793          the loop.  */
3794       parser->scope = new_scope;
3795     }
3796
3797   /* If parsing tentatively, replace the sequence of tokens that makes
3798      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
3799      token.  That way, should we re-parse the token stream, we will
3800      not have to repeat the effort required to do the parse, nor will
3801      we issue duplicate error messages.  */
3802   if (success && start)
3803     {
3804       cp_token *token;
3805       tree access_checks;
3806
3807       token = cp_lexer_token_at (parser->lexer, start);
3808       /* Reset the contents of the START token.  */
3809       token->type = CPP_NESTED_NAME_SPECIFIER;
3810       /* Retrieve any deferred checks.  Do not pop this access checks yet
3811          so the memory will not be reclaimed during token replacing below.  */
3812       access_checks = get_deferred_access_checks ();
3813       token->value = build_tree_list (copy_list (access_checks),
3814                                       parser->scope);
3815       TREE_TYPE (token->value) = parser->qualifying_scope;
3816       token->keyword = RID_MAX;
3817
3818       /* Purge all subsequent tokens.  */
3819       cp_lexer_purge_tokens_after (parser->lexer, start);
3820     }
3821
3822   if (start)
3823     pop_to_parent_deferring_access_checks ();
3824
3825   return success ? parser->scope : NULL_TREE;
3826 }
3827
3828 /* Parse a nested-name-specifier.  See
3829    cp_parser_nested_name_specifier_opt for details.  This function
3830    behaves identically, except that it will an issue an error if no
3831    nested-name-specifier is present.  */
3832
3833 static tree
3834 cp_parser_nested_name_specifier (cp_parser *parser,
3835                                  bool typename_keyword_p,
3836                                  bool check_dependency_p,
3837                                  bool type_p,
3838                                  bool is_declaration)
3839 {
3840   tree scope;
3841
3842   /* Look for the nested-name-specifier.  */
3843   scope = cp_parser_nested_name_specifier_opt (parser,
3844                                                typename_keyword_p,
3845                                                check_dependency_p,
3846                                                type_p,
3847                                                is_declaration);
3848   /* If it was not present, issue an error message.  */
3849   if (!scope)
3850     {
3851       cp_parser_error (parser, "expected nested-name-specifier");
3852       parser->scope = NULL_TREE;
3853     }
3854
3855   return scope;
3856 }
3857
3858 /* Parse a class-or-namespace-name.
3859
3860    class-or-namespace-name:
3861      class-name
3862      namespace-name
3863
3864    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
3865    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
3866    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
3867    TYPE_P is TRUE iff the next name should be taken as a class-name,
3868    even the same name is declared to be another entity in the same
3869    scope.
3870
3871    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
3872    specified by the class-or-namespace-name.  If neither is found the
3873    ERROR_MARK_NODE is returned.  */
3874
3875 static tree
3876 cp_parser_class_or_namespace_name (cp_parser *parser,
3877                                    bool typename_keyword_p,
3878                                    bool template_keyword_p,
3879                                    bool check_dependency_p,
3880                                    bool type_p,
3881                                    bool is_declaration)
3882 {
3883   tree saved_scope;
3884   tree saved_qualifying_scope;
3885   tree saved_object_scope;
3886   tree scope;
3887   bool only_class_p;
3888
3889   /* Before we try to parse the class-name, we must save away the
3890      current PARSER->SCOPE since cp_parser_class_name will destroy
3891      it.  */
3892   saved_scope = parser->scope;
3893   saved_qualifying_scope = parser->qualifying_scope;
3894   saved_object_scope = parser->object_scope;
3895   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
3896      there is no need to look for a namespace-name.  */
3897   only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
3898   if (!only_class_p)
3899     cp_parser_parse_tentatively (parser);
3900   scope = cp_parser_class_name (parser,
3901                                 typename_keyword_p,
3902                                 template_keyword_p,
3903                                 type_p ? class_type : none_type,
3904                                 check_dependency_p,
3905                                 /*class_head_p=*/false,
3906                                 is_declaration);
3907   /* If that didn't work, try for a namespace-name.  */
3908   if (!only_class_p && !cp_parser_parse_definitely (parser))
3909     {
3910       /* Restore the saved scope.  */
3911       parser->scope = saved_scope;
3912       parser->qualifying_scope = saved_qualifying_scope;
3913       parser->object_scope = saved_object_scope;
3914       /* If we are not looking at an identifier followed by the scope
3915          resolution operator, then this is not part of a
3916          nested-name-specifier.  (Note that this function is only used
3917          to parse the components of a nested-name-specifier.)  */
3918       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
3919           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
3920         return error_mark_node;
3921       scope = cp_parser_namespace_name (parser);
3922     }
3923
3924   return scope;
3925 }
3926
3927 /* Parse a postfix-expression.
3928
3929    postfix-expression:
3930      primary-expression
3931      postfix-expression [ expression ]
3932      postfix-expression ( expression-list [opt] )
3933      simple-type-specifier ( expression-list [opt] )
3934      typename :: [opt] nested-name-specifier identifier
3935        ( expression-list [opt] )
3936      typename :: [opt] nested-name-specifier template [opt] template-id
3937        ( expression-list [opt] )
3938      postfix-expression . template [opt] id-expression
3939      postfix-expression -> template [opt] id-expression
3940      postfix-expression . pseudo-destructor-name
3941      postfix-expression -> pseudo-destructor-name
3942      postfix-expression ++
3943      postfix-expression --
3944      dynamic_cast < type-id > ( expression )
3945      static_cast < type-id > ( expression )
3946      reinterpret_cast < type-id > ( expression )
3947      const_cast < type-id > ( expression )
3948      typeid ( expression )
3949      typeid ( type-id )
3950
3951    GNU Extension:
3952
3953    postfix-expression:
3954      ( type-id ) { initializer-list , [opt] }
3955
3956    This extension is a GNU version of the C99 compound-literal
3957    construct.  (The C99 grammar uses `type-name' instead of `type-id',
3958    but they are essentially the same concept.)
3959
3960    If ADDRESS_P is true, the postfix expression is the operand of the
3961    `&' operator.  CAST_P is true if this expression is the target of a
3962    cast.
3963
3964    Returns a representation of the expression.  */
3965
3966 static tree
3967 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
3968 {
3969   cp_token *token;
3970   enum rid keyword;
3971   cp_id_kind idk = CP_ID_KIND_NONE;
3972   tree postfix_expression = NULL_TREE;
3973
3974   /* Peek at the next token.  */
3975   token = cp_lexer_peek_token (parser->lexer);
3976   /* Some of the productions are determined by keywords.  */
3977   keyword = token->keyword;
3978   switch (keyword)
3979     {
3980     case RID_DYNCAST:
3981     case RID_STATCAST:
3982     case RID_REINTCAST:
3983     case RID_CONSTCAST:
3984       {
3985         tree type;
3986         tree expression;
3987         const char *saved_message;
3988
3989         /* All of these can be handled in the same way from the point
3990            of view of parsing.  Begin by consuming the token
3991            identifying the cast.  */
3992         cp_lexer_consume_token (parser->lexer);
3993
3994         /* New types cannot be defined in the cast.  */
3995         saved_message = parser->type_definition_forbidden_message;
3996         parser->type_definition_forbidden_message
3997           = "types may not be defined in casts";
3998
3999         /* Look for the opening `<'.  */
4000         cp_parser_require (parser, CPP_LESS, "`<'");
4001         /* Parse the type to which we are casting.  */
4002         type = cp_parser_type_id (parser);
4003         /* Look for the closing `>'.  */
4004         cp_parser_require (parser, CPP_GREATER, "`>'");
4005         /* Restore the old message.  */
4006         parser->type_definition_forbidden_message = saved_message;
4007
4008         /* And the expression which is being cast.  */
4009         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4010         expression = cp_parser_expression (parser, /*cast_p=*/true);
4011         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4012
4013         /* Only type conversions to integral or enumeration types
4014            can be used in constant-expressions.  */
4015         if (!cast_valid_in_integral_constant_expression_p (type)
4016             && (cp_parser_non_integral_constant_expression
4017                 (parser,
4018                  "a cast to a type other than an integral or "
4019                  "enumeration type")))
4020           return error_mark_node;
4021
4022         switch (keyword)
4023           {
4024           case RID_DYNCAST:
4025             postfix_expression
4026               = build_dynamic_cast (type, expression);
4027             break;
4028           case RID_STATCAST:
4029             postfix_expression
4030               = build_static_cast (type, expression);
4031             break;
4032           case RID_REINTCAST:
4033             postfix_expression
4034               = build_reinterpret_cast (type, expression);
4035             break;
4036           case RID_CONSTCAST:
4037             postfix_expression
4038               = build_const_cast (type, expression);
4039             break;
4040           default:
4041             gcc_unreachable ();
4042           }
4043       }
4044       break;
4045
4046     case RID_TYPEID:
4047       {
4048         tree type;
4049         const char *saved_message;
4050         bool saved_in_type_id_in_expr_p;
4051
4052         /* Consume the `typeid' token.  */
4053         cp_lexer_consume_token (parser->lexer);
4054         /* Look for the `(' token.  */
4055         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4056         /* Types cannot be defined in a `typeid' expression.  */
4057         saved_message = parser->type_definition_forbidden_message;
4058         parser->type_definition_forbidden_message
4059           = "types may not be defined in a `typeid\' expression";
4060         /* We can't be sure yet whether we're looking at a type-id or an
4061            expression.  */
4062         cp_parser_parse_tentatively (parser);
4063         /* Try a type-id first.  */
4064         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4065         parser->in_type_id_in_expr_p = true;
4066         type = cp_parser_type_id (parser);
4067         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4068         /* Look for the `)' token.  Otherwise, we can't be sure that
4069            we're not looking at an expression: consider `typeid (int
4070            (3))', for example.  */
4071         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4072         /* If all went well, simply lookup the type-id.  */
4073         if (cp_parser_parse_definitely (parser))
4074           postfix_expression = get_typeid (type);
4075         /* Otherwise, fall back to the expression variant.  */
4076         else
4077           {
4078             tree expression;
4079
4080             /* Look for an expression.  */
4081             expression = cp_parser_expression (parser, /*cast_p=*/false);
4082             /* Compute its typeid.  */
4083             postfix_expression = build_typeid (expression);
4084             /* Look for the `)' token.  */
4085             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4086           }
4087         /* Restore the saved message.  */
4088         parser->type_definition_forbidden_message = saved_message;
4089         /* `typeid' may not appear in an integral constant expression.  */
4090         if (cp_parser_non_integral_constant_expression(parser,
4091                                                        "`typeid' operator"))
4092           return error_mark_node;
4093       }
4094       break;
4095
4096     case RID_TYPENAME:
4097       {
4098         tree type;
4099         /* The syntax permitted here is the same permitted for an
4100            elaborated-type-specifier.  */
4101         type = cp_parser_elaborated_type_specifier (parser,
4102                                                     /*is_friend=*/false,
4103                                                     /*is_declaration=*/false);
4104         postfix_expression = cp_parser_functional_cast (parser, type);
4105       }
4106       break;
4107
4108     default:
4109       {
4110         tree type;
4111
4112         /* If the next thing is a simple-type-specifier, we may be
4113            looking at a functional cast.  We could also be looking at
4114            an id-expression.  So, we try the functional cast, and if
4115            that doesn't work we fall back to the primary-expression.  */
4116         cp_parser_parse_tentatively (parser);
4117         /* Look for the simple-type-specifier.  */
4118         type = cp_parser_simple_type_specifier (parser,
4119                                                 /*decl_specs=*/NULL,
4120                                                 CP_PARSER_FLAGS_NONE);
4121         /* Parse the cast itself.  */
4122         if (!cp_parser_error_occurred (parser))
4123           postfix_expression
4124             = cp_parser_functional_cast (parser, type);
4125         /* If that worked, we're done.  */
4126         if (cp_parser_parse_definitely (parser))
4127           break;
4128
4129         /* If the functional-cast didn't work out, try a
4130            compound-literal.  */
4131         if (cp_parser_allow_gnu_extensions_p (parser)
4132             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4133           {
4134             VEC(constructor_elt,gc) *initializer_list = NULL;
4135             bool saved_in_type_id_in_expr_p;
4136
4137             cp_parser_parse_tentatively (parser);
4138             /* Consume the `('.  */
4139             cp_lexer_consume_token (parser->lexer);
4140             /* Parse the type.  */
4141             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4142             parser->in_type_id_in_expr_p = true;
4143             type = cp_parser_type_id (parser);
4144             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4145             /* Look for the `)'.  */
4146             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4147             /* Look for the `{'.  */
4148             cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
4149             /* If things aren't going well, there's no need to
4150                keep going.  */
4151             if (!cp_parser_error_occurred (parser))
4152               {
4153                 bool non_constant_p;
4154                 /* Parse the initializer-list.  */
4155                 initializer_list
4156                   = cp_parser_initializer_list (parser, &non_constant_p);
4157                 /* Allow a trailing `,'.  */
4158                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4159                   cp_lexer_consume_token (parser->lexer);
4160                 /* Look for the final `}'.  */
4161                 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
4162               }
4163             /* If that worked, we're definitely looking at a
4164                compound-literal expression.  */
4165             if (cp_parser_parse_definitely (parser))
4166               {
4167                 /* Warn the user that a compound literal is not
4168                    allowed in standard C++.  */
4169                 if (pedantic)
4170                   pedwarn ("ISO C++ forbids compound-literals");
4171                 /* Form the representation of the compound-literal.  */
4172                 postfix_expression
4173                   = finish_compound_literal (type, initializer_list);
4174                 break;
4175               }
4176           }
4177
4178         /* It must be a primary-expression.  */
4179         postfix_expression
4180           = cp_parser_primary_expression (parser, address_p, cast_p,
4181                                           /*template_arg_p=*/false,
4182                                           &idk);
4183       }
4184       break;
4185     }
4186
4187   /* Keep looping until the postfix-expression is complete.  */
4188   while (true)
4189     {
4190       if (idk == CP_ID_KIND_UNQUALIFIED
4191           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4192           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4193         /* It is not a Koenig lookup function call.  */
4194         postfix_expression
4195           = unqualified_name_lookup_error (postfix_expression);
4196
4197       /* Peek at the next token.  */
4198       token = cp_lexer_peek_token (parser->lexer);
4199
4200       switch (token->type)
4201         {
4202         case CPP_OPEN_SQUARE:
4203           postfix_expression
4204             = cp_parser_postfix_open_square_expression (parser,
4205                                                         postfix_expression,
4206                                                         false);
4207           idk = CP_ID_KIND_NONE;
4208           break;
4209
4210         case CPP_OPEN_PAREN:
4211           /* postfix-expression ( expression-list [opt] ) */
4212           {
4213             bool koenig_p;
4214             bool is_builtin_constant_p;
4215             bool saved_integral_constant_expression_p = false;
4216             bool saved_non_integral_constant_expression_p = false;
4217             tree args;
4218
4219             is_builtin_constant_p
4220               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4221             if (is_builtin_constant_p)
4222               {
4223                 /* The whole point of __builtin_constant_p is to allow
4224                    non-constant expressions to appear as arguments.  */
4225                 saved_integral_constant_expression_p
4226                   = parser->integral_constant_expression_p;
4227                 saved_non_integral_constant_expression_p
4228                   = parser->non_integral_constant_expression_p;
4229                 parser->integral_constant_expression_p = false;
4230               }
4231             args = (cp_parser_parenthesized_expression_list
4232                     (parser, /*is_attribute_list=*/false,
4233                      /*cast_p=*/false,
4234                      /*non_constant_p=*/NULL));
4235             if (is_builtin_constant_p)
4236               {
4237                 parser->integral_constant_expression_p
4238                   = saved_integral_constant_expression_p;
4239                 parser->non_integral_constant_expression_p
4240                   = saved_non_integral_constant_expression_p;
4241               }
4242
4243             if (args == error_mark_node)
4244               {
4245                 postfix_expression = error_mark_node;
4246                 break;
4247               }
4248
4249             /* Function calls are not permitted in
4250                constant-expressions.  */
4251             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4252                 && cp_parser_non_integral_constant_expression (parser,
4253                                                                "a function call"))
4254               {
4255                 postfix_expression = error_mark_node;
4256                 break;
4257               }
4258
4259             koenig_p = false;
4260             if (idk == CP_ID_KIND_UNQUALIFIED)
4261               {
4262                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4263                   {
4264                     if (args)
4265                       {
4266                         koenig_p = true;
4267                         postfix_expression
4268                           = perform_koenig_lookup (postfix_expression, args);
4269                       }
4270                     else
4271                       postfix_expression
4272                         = unqualified_fn_lookup_error (postfix_expression);
4273                   }
4274                 /* We do not perform argument-dependent lookup if
4275                    normal lookup finds a non-function, in accordance
4276                    with the expected resolution of DR 218.  */
4277                 else if (args && is_overloaded_fn (postfix_expression))
4278                   {
4279                     tree fn = get_first_fn (postfix_expression);
4280
4281                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4282                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4283
4284                     /* Only do argument dependent lookup if regular
4285                        lookup does not find a set of member functions.
4286                        [basic.lookup.koenig]/2a  */
4287                     if (!DECL_FUNCTION_MEMBER_P (fn))
4288                       {
4289                         koenig_p = true;
4290                         postfix_expression
4291                           = perform_koenig_lookup (postfix_expression, args);
4292                       }
4293                   }
4294               }
4295
4296             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4297               {
4298                 tree instance = TREE_OPERAND (postfix_expression, 0);
4299                 tree fn = TREE_OPERAND (postfix_expression, 1);
4300
4301                 if (processing_template_decl
4302                     && (type_dependent_expression_p (instance)
4303                         || (!BASELINK_P (fn)
4304                             && TREE_CODE (fn) != FIELD_DECL)
4305                         || type_dependent_expression_p (fn)
4306                         || any_type_dependent_arguments_p (args)))
4307                   {
4308                     postfix_expression
4309                       = build_min_nt (CALL_EXPR, postfix_expression,
4310                                       args, NULL_TREE);
4311                     break;
4312                   }
4313
4314                 if (BASELINK_P (fn))
4315                   postfix_expression
4316                     = (build_new_method_call
4317                        (instance, fn, args, NULL_TREE,
4318                         (idk == CP_ID_KIND_QUALIFIED
4319                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4320                         /*fn_p=*/NULL));
4321                 else
4322                   postfix_expression
4323                     = finish_call_expr (postfix_expression, args,
4324                                         /*disallow_virtual=*/false,
4325                                         /*koenig_p=*/false);
4326               }
4327             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4328                      || TREE_CODE (postfix_expression) == MEMBER_REF
4329                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4330               postfix_expression = (build_offset_ref_call_from_tree
4331                                     (postfix_expression, args));
4332             else if (idk == CP_ID_KIND_QUALIFIED)
4333               /* A call to a static class member, or a namespace-scope
4334                  function.  */
4335               postfix_expression
4336                 = finish_call_expr (postfix_expression, args,
4337                                     /*disallow_virtual=*/true,
4338                                     koenig_p);
4339             else
4340               /* All other function calls.  */
4341               postfix_expression
4342                 = finish_call_expr (postfix_expression, args,
4343                                     /*disallow_virtual=*/false,
4344                                     koenig_p);
4345
4346             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4347             idk = CP_ID_KIND_NONE;
4348           }
4349           break;
4350
4351         case CPP_DOT:
4352         case CPP_DEREF:
4353           /* postfix-expression . template [opt] id-expression
4354              postfix-expression . pseudo-destructor-name
4355              postfix-expression -> template [opt] id-expression
4356              postfix-expression -> pseudo-destructor-name */
4357
4358           /* Consume the `.' or `->' operator.  */
4359           cp_lexer_consume_token (parser->lexer);
4360
4361           postfix_expression
4362             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4363                                                       postfix_expression,
4364                                                       false, &idk);
4365           break;
4366
4367         case CPP_PLUS_PLUS:
4368           /* postfix-expression ++  */
4369           /* Consume the `++' token.  */
4370           cp_lexer_consume_token (parser->lexer);
4371           /* Generate a representation for the complete expression.  */
4372           postfix_expression
4373             = finish_increment_expr (postfix_expression,
4374                                      POSTINCREMENT_EXPR);
4375           /* Increments may not appear in constant-expressions.  */
4376           if (cp_parser_non_integral_constant_expression (parser,
4377                                                           "an increment"))
4378             postfix_expression = error_mark_node;
4379           idk = CP_ID_KIND_NONE;
4380           break;
4381
4382         case CPP_MINUS_MINUS:
4383           /* postfix-expression -- */
4384           /* Consume the `--' token.  */
4385           cp_lexer_consume_token (parser->lexer);
4386           /* Generate a representation for the complete expression.  */
4387           postfix_expression
4388             = finish_increment_expr (postfix_expression,
4389                                      POSTDECREMENT_EXPR);
4390           /* Decrements may not appear in constant-expressions.  */
4391           if (cp_parser_non_integral_constant_expression (parser,
4392                                                           "a decrement"))
4393             postfix_expression = error_mark_node;
4394           idk = CP_ID_KIND_NONE;
4395           break;
4396
4397         default:
4398           return postfix_expression;
4399         }
4400     }
4401
4402   /* We should never get here.  */
4403   gcc_unreachable ();
4404   return error_mark_node;
4405 }
4406
4407 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4408    by cp_parser_builtin_offsetof.  We're looking for
4409
4410      postfix-expression [ expression ]
4411
4412    FOR_OFFSETOF is set if we're being called in that context, which
4413    changes how we deal with integer constant expressions.  */
4414
4415 static tree
4416 cp_parser_postfix_open_square_expression (cp_parser *parser,
4417                                           tree postfix_expression,
4418                                           bool for_offsetof)
4419 {
4420   tree index;
4421
4422   /* Consume the `[' token.  */
4423   cp_lexer_consume_token (parser->lexer);
4424
4425   /* Parse the index expression.  */
4426   /* ??? For offsetof, there is a question of what to allow here.  If
4427      offsetof is not being used in an integral constant expression context,
4428      then we *could* get the right answer by computing the value at runtime.
4429      If we are in an integral constant expression context, then we might
4430      could accept any constant expression; hard to say without analysis.
4431      Rather than open the barn door too wide right away, allow only integer
4432      constant expressions here.  */
4433   if (for_offsetof)
4434     index = cp_parser_constant_expression (parser, false, NULL);
4435   else
4436     index = cp_parser_expression (parser, /*cast_p=*/false);
4437
4438   /* Look for the closing `]'.  */
4439   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4440
4441   /* Build the ARRAY_REF.  */
4442   postfix_expression = grok_array_decl (postfix_expression, index);
4443
4444   /* When not doing offsetof, array references are not permitted in
4445      constant-expressions.  */
4446   if (!for_offsetof
4447       && (cp_parser_non_integral_constant_expression
4448           (parser, "an array reference")))
4449     postfix_expression = error_mark_node;
4450
4451   return postfix_expression;
4452 }
4453
4454 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4455    by cp_parser_builtin_offsetof.  We're looking for
4456
4457      postfix-expression . template [opt] id-expression
4458      postfix-expression . pseudo-destructor-name
4459      postfix-expression -> template [opt] id-expression
4460      postfix-expression -> pseudo-destructor-name
4461
4462    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4463    limits what of the above we'll actually accept, but nevermind.
4464    TOKEN_TYPE is the "." or "->" token, which will already have been
4465    removed from the stream.  */
4466
4467 static tree
4468 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4469                                         enum cpp_ttype token_type,
4470                                         tree postfix_expression,
4471                                         bool for_offsetof, cp_id_kind *idk)
4472 {
4473   tree name;
4474   bool dependent_p;
4475   bool pseudo_destructor_p;
4476   tree scope = NULL_TREE;
4477
4478   /* If this is a `->' operator, dereference the pointer.  */
4479   if (token_type == CPP_DEREF)
4480     postfix_expression = build_x_arrow (postfix_expression);
4481   /* Check to see whether or not the expression is type-dependent.  */
4482   dependent_p = type_dependent_expression_p (postfix_expression);
4483   /* The identifier following the `->' or `.' is not qualified.  */
4484   parser->scope = NULL_TREE;
4485   parser->qualifying_scope = NULL_TREE;
4486   parser->object_scope = NULL_TREE;
4487   *idk = CP_ID_KIND_NONE;
4488   /* Enter the scope corresponding to the type of the object
4489      given by the POSTFIX_EXPRESSION.  */
4490   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4491     {
4492       scope = TREE_TYPE (postfix_expression);
4493       /* According to the standard, no expression should ever have
4494          reference type.  Unfortunately, we do not currently match
4495          the standard in this respect in that our internal representation
4496          of an expression may have reference type even when the standard
4497          says it does not.  Therefore, we have to manually obtain the
4498          underlying type here.  */
4499       scope = non_reference (scope);
4500       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4501       if (scope == unknown_type_node)
4502         {
4503           error ("%qE does not have class type", postfix_expression);
4504           scope = NULL_TREE;
4505         }
4506       else
4507         scope = complete_type_or_else (scope, NULL_TREE);
4508       /* Let the name lookup machinery know that we are processing a
4509          class member access expression.  */
4510       parser->context->object_type = scope;
4511       /* If something went wrong, we want to be able to discern that case,
4512          as opposed to the case where there was no SCOPE due to the type
4513          of expression being dependent.  */
4514       if (!scope)
4515         scope = error_mark_node;
4516       /* If the SCOPE was erroneous, make the various semantic analysis
4517          functions exit quickly -- and without issuing additional error
4518          messages.  */
4519       if (scope == error_mark_node)
4520         postfix_expression = error_mark_node;
4521     }
4522
4523   /* Assume this expression is not a pseudo-destructor access.  */
4524   pseudo_destructor_p = false;
4525
4526   /* If the SCOPE is a scalar type, then, if this is a valid program,
4527      we must be looking at a pseudo-destructor-name.  */
4528   if (scope && SCALAR_TYPE_P (scope))
4529     {
4530       tree s;
4531       tree type;
4532
4533       cp_parser_parse_tentatively (parser);
4534       /* Parse the pseudo-destructor-name.  */
4535       s = NULL_TREE;
4536       cp_parser_pseudo_destructor_name (parser, &s, &type);
4537       if (cp_parser_parse_definitely (parser))
4538         {
4539           pseudo_destructor_p = true;
4540           postfix_expression
4541             = finish_pseudo_destructor_expr (postfix_expression,
4542                                              s, TREE_TYPE (type));
4543         }
4544     }
4545
4546   if (!pseudo_destructor_p)
4547     {
4548       /* If the SCOPE is not a scalar type, we are looking at an
4549          ordinary class member access expression, rather than a
4550          pseudo-destructor-name.  */
4551       bool template_p;
4552       /* Parse the id-expression.  */
4553       name = (cp_parser_id_expression
4554               (parser,
4555                cp_parser_optional_template_keyword (parser),
4556                /*check_dependency_p=*/true,
4557                &template_p,
4558                /*declarator_p=*/false,
4559                /*optional_p=*/false));
4560       /* In general, build a SCOPE_REF if the member name is qualified.
4561          However, if the name was not dependent and has already been
4562          resolved; there is no need to build the SCOPE_REF.  For example;
4563
4564              struct X { void f(); };
4565              template <typename T> void f(T* t) { t->X::f(); }
4566
4567          Even though "t" is dependent, "X::f" is not and has been resolved
4568          to a BASELINK; there is no need to include scope information.  */
4569
4570       /* But we do need to remember that there was an explicit scope for
4571          virtual function calls.  */
4572       if (parser->scope)
4573         *idk = CP_ID_KIND_QUALIFIED;
4574
4575       /* If the name is a template-id that names a type, we will get a
4576          TYPE_DECL here.  That is invalid code.  */
4577       if (TREE_CODE (name) == TYPE_DECL)
4578         {
4579           error ("invalid use of %qD", name);
4580           postfix_expression = error_mark_node;
4581         }
4582       else
4583         {
4584           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4585             {
4586               name = build_qualified_name (/*type=*/NULL_TREE,
4587                                            parser->scope,
4588                                            name,
4589                                            template_p);
4590               parser->scope = NULL_TREE;
4591               parser->qualifying_scope = NULL_TREE;
4592               parser->object_scope = NULL_TREE;
4593             }
4594           if (scope && name && BASELINK_P (name))
4595             adjust_result_of_qualified_name_lookup
4596               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
4597           postfix_expression
4598             = finish_class_member_access_expr (postfix_expression, name,
4599                                                template_p);
4600         }
4601     }
4602
4603   /* We no longer need to look up names in the scope of the object on
4604      the left-hand side of the `.' or `->' operator.  */
4605   parser->context->object_type = NULL_TREE;
4606
4607   /* Outside of offsetof, these operators may not appear in
4608      constant-expressions.  */
4609   if (!for_offsetof
4610       && (cp_parser_non_integral_constant_expression
4611           (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4612     postfix_expression = error_mark_node;
4613
4614   return postfix_expression;
4615 }
4616
4617 /* Parse a parenthesized expression-list.
4618
4619    expression-list:
4620      assignment-expression
4621      expression-list, assignment-expression
4622
4623    attribute-list:
4624      expression-list
4625      identifier
4626      identifier, expression-list
4627
4628    CAST_P is true if this expression is the target of a cast.
4629
4630    Returns a TREE_LIST.  The TREE_VALUE of each node is a
4631    representation of an assignment-expression.  Note that a TREE_LIST
4632    is returned even if there is only a single expression in the list.
4633    error_mark_node is returned if the ( and or ) are
4634    missing. NULL_TREE is returned on no expressions. The parentheses
4635    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4636    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4637    indicates whether or not all of the expressions in the list were
4638    constant.  */
4639
4640 static tree
4641 cp_parser_parenthesized_expression_list (cp_parser* parser,
4642                                          bool is_attribute_list,
4643                                          bool cast_p,
4644                                          bool *non_constant_p)
4645 {
4646   tree expression_list = NULL_TREE;
4647   bool fold_expr_p = is_attribute_list;
4648   tree identifier = NULL_TREE;
4649
4650   /* Assume all the expressions will be constant.  */
4651   if (non_constant_p)
4652     *non_constant_p = false;
4653
4654   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4655     return error_mark_node;
4656
4657   /* Consume expressions until there are no more.  */
4658   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4659     while (true)
4660       {
4661         tree expr;
4662
4663         /* At the beginning of attribute lists, check to see if the
4664            next token is an identifier.  */
4665         if (is_attribute_list
4666             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4667           {
4668             cp_token *token;
4669
4670             /* Consume the identifier.  */
4671             token = cp_lexer_consume_token (parser->lexer);
4672             /* Save the identifier.  */
4673             identifier = token->value;
4674           }
4675         else
4676           {
4677             /* Parse the next assignment-expression.  */
4678             if (non_constant_p)
4679               {
4680                 bool expr_non_constant_p;
4681                 expr = (cp_parser_constant_expression
4682                         (parser, /*allow_non_constant_p=*/true,
4683                          &expr_non_constant_p));
4684                 if (expr_non_constant_p)
4685                   *non_constant_p = true;
4686               }
4687             else
4688               expr = cp_parser_assignment_expression (parser, cast_p);
4689
4690             if (fold_expr_p)
4691               expr = fold_non_dependent_expr (expr);
4692
4693              /* Add it to the list.  We add error_mark_node
4694                 expressions to the list, so that we can still tell if
4695                 the correct form for a parenthesized expression-list
4696                 is found. That gives better errors.  */
4697             expression_list = tree_cons (NULL_TREE, expr, expression_list);
4698
4699             if (expr == error_mark_node)
4700               goto skip_comma;
4701           }
4702
4703         /* After the first item, attribute lists look the same as
4704            expression lists.  */
4705         is_attribute_list = false;
4706
4707       get_comma:;
4708         /* If the next token isn't a `,', then we are done.  */
4709         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4710           break;
4711
4712         /* Otherwise, consume the `,' and keep going.  */
4713         cp_lexer_consume_token (parser->lexer);
4714       }
4715
4716   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
4717     {
4718       int ending;
4719
4720     skip_comma:;
4721       /* We try and resync to an unnested comma, as that will give the
4722          user better diagnostics.  */
4723       ending = cp_parser_skip_to_closing_parenthesis (parser,
4724                                                       /*recovering=*/true,
4725                                                       /*or_comma=*/true,
4726                                                       /*consume_paren=*/true);
4727       if (ending < 0)
4728         goto get_comma;
4729       if (!ending)
4730         return error_mark_node;
4731     }
4732
4733   /* We built up the list in reverse order so we must reverse it now.  */
4734   expression_list = nreverse (expression_list);
4735   if (identifier)
4736     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
4737
4738   return expression_list;
4739 }
4740
4741 /* Parse a pseudo-destructor-name.
4742
4743    pseudo-destructor-name:
4744      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
4745      :: [opt] nested-name-specifier template template-id :: ~ type-name
4746      :: [opt] nested-name-specifier [opt] ~ type-name
4747
4748    If either of the first two productions is used, sets *SCOPE to the
4749    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
4750    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
4751    or ERROR_MARK_NODE if the parse fails.  */
4752
4753 static void
4754 cp_parser_pseudo_destructor_name (cp_parser* parser,
4755                                   tree* scope,
4756                                   tree* type)
4757 {
4758   bool nested_name_specifier_p;
4759
4760   /* Assume that things will not work out.  */
4761   *type = error_mark_node;
4762
4763   /* Look for the optional `::' operator.  */
4764   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
4765   /* Look for the optional nested-name-specifier.  */
4766   nested_name_specifier_p
4767     = (cp_parser_nested_name_specifier_opt (parser,
4768                                             /*typename_keyword_p=*/false,
4769                                             /*check_dependency_p=*/true,
4770                                             /*type_p=*/false,
4771                                             /*is_declaration=*/true)
4772        != NULL_TREE);
4773   /* Now, if we saw a nested-name-specifier, we might be doing the
4774      second production.  */
4775   if (nested_name_specifier_p
4776       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
4777     {
4778       /* Consume the `template' keyword.  */
4779       cp_lexer_consume_token (parser->lexer);
4780       /* Parse the template-id.  */
4781       cp_parser_template_id (parser,
4782                              /*template_keyword_p=*/true,
4783                              /*check_dependency_p=*/false,
4784                              /*is_declaration=*/true);
4785       /* Look for the `::' token.  */
4786       cp_parser_require (parser, CPP_SCOPE, "`::'");
4787     }
4788   /* If the next token is not a `~', then there might be some
4789      additional qualification.  */
4790   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
4791     {
4792       /* Look for the type-name.  */
4793       *scope = TREE_TYPE (cp_parser_type_name (parser));
4794
4795       if (*scope == error_mark_node)
4796         return;
4797
4798       /* If we don't have ::~, then something has gone wrong.  Since
4799          the only caller of this function is looking for something
4800          after `.' or `->' after a scalar type, most likely the
4801          program is trying to get a member of a non-aggregate
4802          type.  */
4803       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
4804           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
4805         {
4806           cp_parser_error (parser, "request for member of non-aggregate type");
4807           return;
4808         }
4809
4810       /* Look for the `::' token.  */
4811       cp_parser_require (parser, CPP_SCOPE, "`::'");
4812     }
4813   else
4814     *scope = NULL_TREE;
4815
4816   /* Look for the `~'.  */
4817   cp_parser_require (parser, CPP_COMPL, "`~'");
4818   /* Look for the type-name again.  We are not responsible for
4819      checking that it matches the first type-name.  */
4820   *type = cp_parser_type_name (parser);
4821 }
4822
4823 /* Parse a unary-expression.
4824
4825    unary-expression:
4826      postfix-expression
4827      ++ cast-expression
4828      -- cast-expression
4829      unary-operator cast-expression
4830      sizeof unary-expression
4831      sizeof ( type-id )
4832      new-expression
4833      delete-expression
4834
4835    GNU Extensions:
4836
4837    unary-expression:
4838      __extension__ cast-expression
4839      __alignof__ unary-expression
4840      __alignof__ ( type-id )
4841      __real__ cast-expression
4842      __imag__ cast-expression
4843      && identifier
4844
4845    ADDRESS_P is true iff the unary-expression is appearing as the
4846    operand of the `&' operator.   CAST_P is true if this expression is
4847    the target of a cast.
4848
4849    Returns a representation of the expression.  */
4850
4851 static tree
4852 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
4853 {
4854   cp_token *token;
4855   enum tree_code unary_operator;
4856
4857   /* Peek at the next token.  */
4858   token = cp_lexer_peek_token (parser->lexer);
4859   /* Some keywords give away the kind of expression.  */
4860   if (token->type == CPP_KEYWORD)
4861     {
4862       enum rid keyword = token->keyword;
4863
4864       switch (keyword)
4865         {
4866         case RID_ALIGNOF:
4867         case RID_SIZEOF:
4868           {
4869             tree operand;
4870             enum tree_code op;
4871
4872             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
4873             /* Consume the token.  */
4874             cp_lexer_consume_token (parser->lexer);
4875             /* Parse the operand.  */
4876             operand = cp_parser_sizeof_operand (parser, keyword);
4877
4878             if (TYPE_P (operand))
4879               return cxx_sizeof_or_alignof_type (operand, op, true);
4880             else
4881               return cxx_sizeof_or_alignof_expr (operand, op);
4882           }
4883
4884         case RID_NEW:
4885           return cp_parser_new_expression (parser);
4886
4887         case RID_DELETE:
4888           return cp_parser_delete_expression (parser);
4889
4890         case RID_EXTENSION:
4891           {
4892             /* The saved value of the PEDANTIC flag.  */
4893             int saved_pedantic;
4894             tree expr;
4895
4896             /* Save away the PEDANTIC flag.  */
4897             cp_parser_extension_opt (parser, &saved_pedantic);
4898             /* Parse the cast-expression.  */
4899             expr = cp_parser_simple_cast_expression (parser);
4900             /* Restore the PEDANTIC flag.  */
4901             pedantic = saved_pedantic;
4902
4903             return expr;
4904           }
4905
4906         case RID_REALPART:
4907         case RID_IMAGPART:
4908           {
4909             tree expression;
4910
4911             /* Consume the `__real__' or `__imag__' token.  */
4912             cp_lexer_consume_token (parser->lexer);
4913             /* Parse the cast-expression.  */
4914             expression = cp_parser_simple_cast_expression (parser);
4915             /* Create the complete representation.  */
4916             return build_x_unary_op ((keyword == RID_REALPART
4917                                       ? REALPART_EXPR : IMAGPART_EXPR),
4918                                      expression);
4919           }
4920           break;
4921
4922         default:
4923           break;
4924         }
4925     }
4926
4927   /* Look for the `:: new' and `:: delete', which also signal the
4928      beginning of a new-expression, or delete-expression,
4929      respectively.  If the next token is `::', then it might be one of
4930      these.  */
4931   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
4932     {
4933       enum rid keyword;
4934
4935       /* See if the token after the `::' is one of the keywords in
4936          which we're interested.  */
4937       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
4938       /* If it's `new', we have a new-expression.  */
4939       if (keyword == RID_NEW)
4940         return cp_parser_new_expression (parser);
4941       /* Similarly, for `delete'.  */
4942       else if (keyword == RID_DELETE)
4943         return cp_parser_delete_expression (parser);
4944     }
4945
4946   /* Look for a unary operator.  */
4947   unary_operator = cp_parser_unary_operator (token);
4948   /* The `++' and `--' operators can be handled similarly, even though
4949      they are not technically unary-operators in the grammar.  */
4950   if (unary_operator == ERROR_MARK)
4951     {
4952       if (token->type == CPP_PLUS_PLUS)
4953         unary_operator = PREINCREMENT_EXPR;
4954       else if (token->type == CPP_MINUS_MINUS)
4955         unary_operator = PREDECREMENT_EXPR;
4956       /* Handle the GNU address-of-label extension.  */
4957       else if (cp_parser_allow_gnu_extensions_p (parser)
4958                && token->type == CPP_AND_AND)
4959         {
4960           tree identifier;
4961
4962           /* Consume the '&&' token.  */
4963           cp_lexer_consume_token (parser->lexer);
4964           /* Look for the identifier.  */
4965           identifier = cp_parser_identifier (parser);
4966           /* Create an expression representing the address.  */
4967           return finish_label_address_expr (identifier);
4968         }
4969     }
4970   if (unary_operator != ERROR_MARK)
4971     {
4972       tree cast_expression;
4973       tree expression = error_mark_node;
4974       const char *non_constant_p = NULL;
4975
4976       /* Consume the operator token.  */
4977       token = cp_lexer_consume_token (parser->lexer);
4978       /* Parse the cast-expression.  */
4979       cast_expression
4980         = cp_parser_cast_expression (parser,
4981                                      unary_operator == ADDR_EXPR,
4982                                      /*cast_p=*/false);
4983       /* Now, build an appropriate representation.  */
4984       switch (unary_operator)
4985         {
4986         case INDIRECT_REF:
4987           non_constant_p = "`*'";
4988           expression = build_x_indirect_ref (cast_expression, "unary *");
4989           break;
4990
4991         case ADDR_EXPR:
4992           non_constant_p = "`&'";
4993           /* Fall through.  */
4994         case BIT_NOT_EXPR:
4995           expression = build_x_unary_op (unary_operator, cast_expression);
4996           break;
4997
4998         case PREINCREMENT_EXPR:
4999         case PREDECREMENT_EXPR:
5000           non_constant_p = (unary_operator == PREINCREMENT_EXPR
5001                             ? "`++'" : "`--'");
5002           /* Fall through.  */
5003         case UNARY_PLUS_EXPR:
5004         case NEGATE_EXPR:
5005         case TRUTH_NOT_EXPR:
5006           expression = finish_unary_op_expr (unary_operator, cast_expression);
5007           break;
5008
5009         default:
5010           gcc_unreachable ();
5011         }
5012
5013       if (non_constant_p
5014           && cp_parser_non_integral_constant_expression (parser,
5015                                                          non_constant_p))
5016         expression = error_mark_node;
5017
5018       return expression;
5019     }
5020
5021   return cp_parser_postfix_expression (parser, address_p, cast_p);
5022 }
5023
5024 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5025    unary-operator, the corresponding tree code is returned.  */
5026
5027 static enum tree_code
5028 cp_parser_unary_operator (cp_token* token)
5029 {
5030   switch (token->type)
5031     {
5032     case CPP_MULT:
5033       return INDIRECT_REF;
5034
5035     case CPP_AND:
5036       return ADDR_EXPR;
5037
5038     case CPP_PLUS:
5039       return UNARY_PLUS_EXPR;
5040
5041     case CPP_MINUS:
5042       return NEGATE_EXPR;
5043
5044     case CPP_NOT:
5045       return TRUTH_NOT_EXPR;
5046
5047     case CPP_COMPL:
5048       return BIT_NOT_EXPR;
5049
5050     default:
5051       return ERROR_MARK;
5052     }
5053 }
5054
5055 /* Parse a new-expression.
5056
5057    new-expression:
5058      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5059      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5060
5061    Returns a representation of the expression.  */
5062
5063 static tree
5064 cp_parser_new_expression (cp_parser* parser)
5065 {
5066   bool global_scope_p;
5067   tree placement;
5068   tree type;
5069   tree initializer;
5070   tree nelts;
5071
5072   /* Look for the optional `::' operator.  */
5073   global_scope_p
5074     = (cp_parser_global_scope_opt (parser,
5075                                    /*current_scope_valid_p=*/false)
5076        != NULL_TREE);
5077   /* Look for the `new' operator.  */
5078   cp_parser_require_keyword (parser, RID_NEW, "`new'");
5079   /* There's no easy way to tell a new-placement from the
5080      `( type-id )' construct.  */
5081   cp_parser_parse_tentatively (parser);
5082   /* Look for a new-placement.  */
5083   placement = cp_parser_new_placement (parser);
5084   /* If that didn't work out, there's no new-placement.  */
5085   if (!cp_parser_parse_definitely (parser))
5086     placement = NULL_TREE;
5087
5088   /* If the next token is a `(', then we have a parenthesized
5089      type-id.  */
5090   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5091     {
5092       /* Consume the `('.  */
5093       cp_lexer_consume_token (parser->lexer);
5094       /* Parse the type-id.  */
5095       type = cp_parser_type_id (parser);
5096       /* Look for the closing `)'.  */
5097       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5098       /* There should not be a direct-new-declarator in this production,
5099          but GCC used to allowed this, so we check and emit a sensible error
5100          message for this case.  */
5101       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5102         {
5103           error ("array bound forbidden after parenthesized type-id");
5104           inform ("try removing the parentheses around the type-id");
5105           cp_parser_direct_new_declarator (parser);
5106         }
5107       nelts = NULL_TREE;
5108     }
5109   /* Otherwise, there must be a new-type-id.  */
5110   else
5111     type = cp_parser_new_type_id (parser, &nelts);
5112
5113   /* If the next token is a `(', then we have a new-initializer.  */
5114   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5115     initializer = cp_parser_new_initializer (parser);
5116   else
5117     initializer = NULL_TREE;
5118
5119   /* A new-expression may not appear in an integral constant
5120      expression.  */
5121   if (cp_parser_non_integral_constant_expression (parser, "`new'"))
5122     return error_mark_node;
5123
5124   /* Create a representation of the new-expression.  */
5125   return build_new (placement, type, nelts, initializer, global_scope_p);
5126 }
5127
5128 /* Parse a new-placement.
5129
5130    new-placement:
5131      ( expression-list )
5132
5133    Returns the same representation as for an expression-list.  */
5134
5135 static tree
5136 cp_parser_new_placement (cp_parser* parser)
5137 {
5138   tree expression_list;
5139
5140   /* Parse the expression-list.  */
5141   expression_list = (cp_parser_parenthesized_expression_list
5142                      (parser, false, /*cast_p=*/false,
5143                       /*non_constant_p=*/NULL));
5144
5145   return expression_list;
5146 }
5147
5148 /* Parse a new-type-id.
5149
5150    new-type-id:
5151      type-specifier-seq new-declarator [opt]
5152
5153    Returns the TYPE allocated.  If the new-type-id indicates an array
5154    type, *NELTS is set to the number of elements in the last array
5155    bound; the TYPE will not include the last array bound.  */
5156
5157 static tree
5158 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5159 {
5160   cp_decl_specifier_seq type_specifier_seq;
5161   cp_declarator *new_declarator;
5162   cp_declarator *declarator;
5163   cp_declarator *outer_declarator;
5164   const char *saved_message;
5165   tree type;
5166
5167   /* The type-specifier sequence must not contain type definitions.
5168      (It cannot contain declarations of new types either, but if they
5169      are not definitions we will catch that because they are not
5170      complete.)  */
5171   saved_message = parser->type_definition_forbidden_message;
5172   parser->type_definition_forbidden_message
5173     = "types may not be defined in a new-type-id";
5174   /* Parse the type-specifier-seq.  */
5175   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5176                                 &type_specifier_seq);
5177   /* Restore the old message.  */
5178   parser->type_definition_forbidden_message = saved_message;
5179   /* Parse the new-declarator.  */
5180   new_declarator = cp_parser_new_declarator_opt (parser);
5181
5182   /* Determine the number of elements in the last array dimension, if
5183      any.  */
5184   *nelts = NULL_TREE;
5185   /* Skip down to the last array dimension.  */
5186   declarator = new_declarator;
5187   outer_declarator = NULL;
5188   while (declarator && (declarator->kind == cdk_pointer
5189                         || declarator->kind == cdk_ptrmem))
5190     {
5191       outer_declarator = declarator;
5192       declarator = declarator->declarator;
5193     }
5194   while (declarator
5195          && declarator->kind == cdk_array
5196          && declarator->declarator
5197          && declarator->declarator->kind == cdk_array)
5198     {
5199       outer_declarator = declarator;
5200       declarator = declarator->declarator;
5201     }
5202
5203   if (declarator && declarator->kind == cdk_array)
5204     {
5205       *nelts = declarator->u.array.bounds;
5206       if (*nelts == error_mark_node)
5207         *nelts = integer_one_node;
5208
5209       if (outer_declarator)
5210         outer_declarator->declarator = declarator->declarator;
5211       else
5212         new_declarator = NULL;
5213     }
5214
5215   type = groktypename (&type_specifier_seq, new_declarator);
5216   if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
5217     {
5218       *nelts = array_type_nelts_top (type);
5219       type = TREE_TYPE (type);
5220     }
5221   return type;
5222 }
5223
5224 /* Parse an (optional) new-declarator.
5225
5226    new-declarator:
5227      ptr-operator new-declarator [opt]
5228      direct-new-declarator
5229
5230    Returns the declarator.  */
5231
5232 static cp_declarator *
5233 cp_parser_new_declarator_opt (cp_parser* parser)
5234 {
5235   enum tree_code code;
5236   tree type;
5237   cp_cv_quals cv_quals;
5238
5239   /* We don't know if there's a ptr-operator next, or not.  */
5240   cp_parser_parse_tentatively (parser);
5241   /* Look for a ptr-operator.  */
5242   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5243   /* If that worked, look for more new-declarators.  */
5244   if (cp_parser_parse_definitely (parser))
5245     {
5246       cp_declarator *declarator;
5247
5248       /* Parse another optional declarator.  */
5249       declarator = cp_parser_new_declarator_opt (parser);
5250
5251       /* Create the representation of the declarator.  */
5252       if (type)
5253         declarator = make_ptrmem_declarator (cv_quals, type, declarator);
5254       else if (code == INDIRECT_REF)
5255         declarator = make_pointer_declarator (cv_quals, declarator);
5256       else
5257         declarator = make_reference_declarator (cv_quals, declarator);
5258
5259       return declarator;
5260     }
5261
5262   /* If the next token is a `[', there is a direct-new-declarator.  */
5263   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5264     return cp_parser_direct_new_declarator (parser);
5265
5266   return NULL;
5267 }
5268
5269 /* Parse a direct-new-declarator.
5270
5271    direct-new-declarator:
5272      [ expression ]
5273      direct-new-declarator [constant-expression]
5274
5275    */
5276
5277 static cp_declarator *
5278 cp_parser_direct_new_declarator (cp_parser* parser)
5279 {
5280   cp_declarator *declarator = NULL;
5281
5282   while (true)
5283     {
5284       tree expression;
5285
5286       /* Look for the opening `['.  */
5287       cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
5288       /* The first expression is not required to be constant.  */
5289       if (!declarator)
5290         {
5291           expression = cp_parser_expression (parser, /*cast_p=*/false);
5292           /* The standard requires that the expression have integral
5293              type.  DR 74 adds enumeration types.  We believe that the
5294              real intent is that these expressions be handled like the
5295              expression in a `switch' condition, which also allows
5296              classes with a single conversion to integral or
5297              enumeration type.  */
5298           if (!processing_template_decl)
5299             {
5300               expression
5301                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5302                                               expression,
5303                                               /*complain=*/true);
5304               if (!expression)
5305                 {
5306                   error ("expression in new-declarator must have integral "
5307                          "or enumeration type");
5308                   expression = error_mark_node;
5309                 }
5310             }
5311         }
5312       /* But all the other expressions must be.  */
5313       else
5314         expression
5315           = cp_parser_constant_expression (parser,
5316                                            /*allow_non_constant=*/false,
5317                                            NULL);
5318       /* Look for the closing `]'.  */
5319       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5320
5321       /* Add this bound to the declarator.  */
5322       declarator = make_array_declarator (declarator, expression);
5323
5324       /* If the next token is not a `[', then there are no more
5325          bounds.  */
5326       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5327         break;
5328     }
5329
5330   return declarator;
5331 }
5332
5333 /* Parse a new-initializer.
5334
5335    new-initializer:
5336      ( expression-list [opt] )
5337
5338    Returns a representation of the expression-list.  If there is no
5339    expression-list, VOID_ZERO_NODE is returned.  */
5340
5341 static tree
5342 cp_parser_new_initializer (cp_parser* parser)
5343 {
5344   tree expression_list;
5345
5346   expression_list = (cp_parser_parenthesized_expression_list
5347                      (parser, false, /*cast_p=*/false,
5348                       /*non_constant_p=*/NULL));
5349   if (!expression_list)
5350     expression_list = void_zero_node;
5351
5352   return expression_list;
5353 }
5354
5355 /* Parse a delete-expression.
5356
5357    delete-expression:
5358      :: [opt] delete cast-expression
5359      :: [opt] delete [ ] cast-expression
5360
5361    Returns a representation of the expression.  */
5362
5363 static tree
5364 cp_parser_delete_expression (cp_parser* parser)
5365 {
5366   bool global_scope_p;
5367   bool array_p;
5368   tree expression;
5369
5370   /* Look for the optional `::' operator.  */
5371   global_scope_p
5372     = (cp_parser_global_scope_opt (parser,
5373                                    /*current_scope_valid_p=*/false)
5374        != NULL_TREE);
5375   /* Look for the `delete' keyword.  */
5376   cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
5377   /* See if the array syntax is in use.  */
5378   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5379     {
5380       /* Consume the `[' token.  */
5381       cp_lexer_consume_token (parser->lexer);
5382       /* Look for the `]' token.  */
5383       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5384       /* Remember that this is the `[]' construct.  */
5385       array_p = true;
5386     }
5387   else
5388     array_p = false;
5389
5390   /* Parse the cast-expression.  */
5391   expression = cp_parser_simple_cast_expression (parser);
5392
5393   /* A delete-expression may not appear in an integral constant
5394      expression.  */
5395   if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
5396     return error_mark_node;
5397
5398   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5399 }
5400
5401 /* Parse a cast-expression.
5402
5403    cast-expression:
5404      unary-expression
5405      ( type-id ) cast-expression
5406
5407    ADDRESS_P is true iff the unary-expression is appearing as the
5408    operand of the `&' operator.   CAST_P is true if this expression is
5409    the target of a cast.
5410
5411    Returns a representation of the expression.  */
5412
5413 static tree
5414 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5415 {
5416   /* If it's a `(', then we might be looking at a cast.  */
5417   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5418     {
5419       tree type = NULL_TREE;
5420       tree expr = NULL_TREE;
5421       bool compound_literal_p;
5422       const char *saved_message;
5423
5424       /* There's no way to know yet whether or not this is a cast.
5425          For example, `(int (3))' is a unary-expression, while `(int)
5426          3' is a cast.  So, we resort to parsing tentatively.  */
5427       cp_parser_parse_tentatively (parser);
5428       /* Types may not be defined in a cast.  */
5429       saved_message = parser->type_definition_forbidden_message;
5430       parser->type_definition_forbidden_message
5431         = "types may not be defined in casts";
5432       /* Consume the `('.  */
5433       cp_lexer_consume_token (parser->lexer);
5434       /* A very tricky bit is that `(struct S) { 3 }' is a
5435          compound-literal (which we permit in C++ as an extension).
5436          But, that construct is not a cast-expression -- it is a
5437          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5438          is legal; if the compound-literal were a cast-expression,
5439          you'd need an extra set of parentheses.)  But, if we parse
5440          the type-id, and it happens to be a class-specifier, then we
5441          will commit to the parse at that point, because we cannot
5442          undo the action that is done when creating a new class.  So,
5443          then we cannot back up and do a postfix-expression.
5444
5445          Therefore, we scan ahead to the closing `)', and check to see
5446          if the token after the `)' is a `{'.  If so, we are not
5447          looking at a cast-expression.
5448
5449          Save tokens so that we can put them back.  */
5450       cp_lexer_save_tokens (parser->lexer);
5451       /* Skip tokens until the next token is a closing parenthesis.
5452          If we find the closing `)', and the next token is a `{', then
5453          we are looking at a compound-literal.  */
5454       compound_literal_p
5455         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5456                                                   /*consume_paren=*/true)
5457            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5458       /* Roll back the tokens we skipped.  */
5459       cp_lexer_rollback_tokens (parser->lexer);
5460       /* If we were looking at a compound-literal, simulate an error
5461          so that the call to cp_parser_parse_definitely below will
5462          fail.  */
5463       if (compound_literal_p)
5464         cp_parser_simulate_error (parser);
5465       else
5466         {
5467           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5468           parser->in_type_id_in_expr_p = true;
5469           /* Look for the type-id.  */
5470           type = cp_parser_type_id (parser);
5471           /* Look for the closing `)'.  */
5472           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5473           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5474         }
5475
5476       /* Restore the saved message.  */
5477       parser->type_definition_forbidden_message = saved_message;
5478
5479       /* If ok so far, parse the dependent expression. We cannot be
5480          sure it is a cast. Consider `(T ())'.  It is a parenthesized
5481          ctor of T, but looks like a cast to function returning T
5482          without a dependent expression.  */
5483       if (!cp_parser_error_occurred (parser))
5484         expr = cp_parser_cast_expression (parser,
5485                                           /*address_p=*/false,
5486                                           /*cast_p=*/true);
5487
5488       if (cp_parser_parse_definitely (parser))
5489         {
5490           /* Warn about old-style casts, if so requested.  */
5491           if (warn_old_style_cast
5492               && !in_system_header
5493               && !VOID_TYPE_P (type)
5494               && current_lang_name != lang_name_c)
5495             warning (OPT_Wold_style_cast, "use of old-style cast");
5496
5497           /* Only type conversions to integral or enumeration types
5498              can be used in constant-expressions.  */
5499           if (!cast_valid_in_integral_constant_expression_p (type)
5500               && (cp_parser_non_integral_constant_expression
5501                   (parser,
5502                    "a cast to a type other than an integral or "
5503                    "enumeration type")))
5504             return error_mark_node;
5505
5506           /* Perform the cast.  */
5507           expr = build_c_cast (type, expr);
5508           return expr;
5509         }
5510     }
5511
5512   /* If we get here, then it's not a cast, so it must be a
5513      unary-expression.  */
5514   return cp_parser_unary_expression (parser, address_p, cast_p);
5515 }
5516
5517 /* Parse a binary expression of the general form:
5518
5519    pm-expression:
5520      cast-expression
5521      pm-expression .* cast-expression
5522      pm-expression ->* cast-expression
5523
5524    multiplicative-expression:
5525      pm-expression
5526      multiplicative-expression * pm-expression
5527      multiplicative-expression / pm-expression
5528      multiplicative-expression % pm-expression
5529
5530    additive-expression:
5531      multiplicative-expression
5532      additive-expression + multiplicative-expression
5533      additive-expression - multiplicative-expression
5534
5535    shift-expression:
5536      additive-expression
5537      shift-expression << additive-expression
5538      shift-expression >> additive-expression
5539
5540    relational-expression:
5541      shift-expression
5542      relational-expression < shift-expression
5543      relational-expression > shift-expression
5544      relational-expression <= shift-expression
5545      relational-expression >= shift-expression
5546
5547   GNU Extension:
5548
5549    relational-expression:
5550      relational-expression <? shift-expression
5551      relational-expression >? shift-expression
5552
5553    equality-expression:
5554      relational-expression
5555      equality-expression == relational-expression
5556      equality-expression != relational-expression
5557
5558    and-expression:
5559      equality-expression
5560      and-expression & equality-expression
5561
5562    exclusive-or-expression:
5563      and-expression
5564      exclusive-or-expression ^ and-expression
5565
5566    inclusive-or-expression:
5567      exclusive-or-expression
5568      inclusive-or-expression | exclusive-or-expression
5569
5570    logical-and-expression:
5571      inclusive-or-expression
5572      logical-and-expression && inclusive-or-expression
5573
5574    logical-or-expression:
5575      logical-and-expression
5576      logical-or-expression || logical-and-expression
5577
5578    All these are implemented with a single function like:
5579
5580    binary-expression:
5581      simple-cast-expression
5582      binary-expression <token> binary-expression
5583
5584    CAST_P is true if this expression is the target of a cast.
5585
5586    The binops_by_token map is used to get the tree codes for each <token> type.
5587    binary-expressions are associated according to a precedence table.  */
5588
5589 #define TOKEN_PRECEDENCE(token) \
5590   ((token->type == CPP_GREATER && !parser->greater_than_is_operator_p) \
5591    ? PREC_NOT_OPERATOR \
5592    : binops_by_token[token->type].prec)
5593
5594 static tree
5595 cp_parser_binary_expression (cp_parser* parser, bool cast_p)
5596 {
5597   cp_parser_expression_stack stack;
5598   cp_parser_expression_stack_entry *sp = &stack[0];
5599   tree lhs, rhs;
5600   cp_token *token;
5601   enum tree_code tree_type;
5602   enum cp_parser_prec prec = PREC_NOT_OPERATOR, new_prec, lookahead_prec;
5603   bool overloaded_p;
5604
5605   /* Parse the first expression.  */
5606   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
5607
5608   for (;;)
5609     {
5610       /* Get an operator token.  */
5611       token = cp_lexer_peek_token (parser->lexer);
5612
5613       new_prec = TOKEN_PRECEDENCE (token);
5614
5615       /* Popping an entry off the stack means we completed a subexpression:
5616          - either we found a token which is not an operator (`>' where it is not
5617            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
5618            will happen repeatedly;
5619          - or, we found an operator which has lower priority.  This is the case
5620            where the recursive descent *ascends*, as in `3 * 4 + 5' after
5621            parsing `3 * 4'.  */
5622       if (new_prec <= prec)
5623         {
5624           if (sp == stack)
5625             break;
5626           else
5627             goto pop;
5628         }
5629
5630      get_rhs:
5631       tree_type = binops_by_token[token->type].tree_type;
5632
5633       /* We used the operator token.  */
5634       cp_lexer_consume_token (parser->lexer);
5635
5636       /* Extract another operand.  It may be the RHS of this expression
5637          or the LHS of a new, higher priority expression.  */
5638       rhs = cp_parser_simple_cast_expression (parser);
5639
5640       /* Get another operator token.  Look up its precedence to avoid
5641          building a useless (immediately popped) stack entry for common
5642          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
5643       token = cp_lexer_peek_token (parser->lexer);
5644       lookahead_prec = TOKEN_PRECEDENCE (token);
5645       if (lookahead_prec > new_prec)
5646         {
5647           /* ... and prepare to parse the RHS of the new, higher priority
5648              expression.  Since precedence levels on the stack are
5649              monotonically increasing, we do not have to care about
5650              stack overflows.  */
5651           sp->prec = prec;
5652           sp->tree_type = tree_type;
5653           sp->lhs = lhs;
5654           sp++;
5655           lhs = rhs;
5656           prec = new_prec;
5657           new_prec = lookahead_prec;
5658           goto get_rhs;
5659
5660          pop:
5661           /* If the stack is not empty, we have parsed into LHS the right side
5662              (`4' in the example above) of an expression we had suspended.
5663              We can use the information on the stack to recover the LHS (`3')
5664              from the stack together with the tree code (`MULT_EXPR'), and
5665              the precedence of the higher level subexpression
5666              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
5667              which will be used to actually build the additive expression.  */
5668           --sp;
5669           prec = sp->prec;
5670           tree_type = sp->tree_type;
5671           rhs = lhs;
5672           lhs = sp->lhs;
5673         }
5674
5675       overloaded_p = false;
5676       lhs = build_x_binary_op (tree_type, lhs, rhs, &overloaded_p);
5677
5678       /* If the binary operator required the use of an overloaded operator,
5679          then this expression cannot be an integral constant-expression.
5680          An overloaded operator can be used even if both operands are
5681          otherwise permissible in an integral constant-expression if at
5682          least one of the operands is of enumeration type.  */
5683
5684       if (overloaded_p
5685           && (cp_parser_non_integral_constant_expression
5686               (parser, "calls to overloaded operators")))
5687         return error_mark_node;
5688     }
5689
5690   return lhs;
5691 }
5692
5693
5694 /* Parse the `? expression : assignment-expression' part of a
5695    conditional-expression.  The LOGICAL_OR_EXPR is the
5696    logical-or-expression that started the conditional-expression.
5697    Returns a representation of the entire conditional-expression.
5698
5699    This routine is used by cp_parser_assignment_expression.
5700
5701      ? expression : assignment-expression
5702
5703    GNU Extensions:
5704
5705      ? : assignment-expression */
5706
5707 static tree
5708 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
5709 {
5710   tree expr;
5711   tree assignment_expr;
5712
5713   /* Consume the `?' token.  */
5714   cp_lexer_consume_token (parser->lexer);
5715   if (cp_parser_allow_gnu_extensions_p (parser)
5716       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
5717     /* Implicit true clause.  */
5718     expr = NULL_TREE;
5719   else
5720     /* Parse the expression.  */
5721     expr = cp_parser_expression (parser, /*cast_p=*/false);
5722
5723   /* The next token should be a `:'.  */
5724   cp_parser_require (parser, CPP_COLON, "`:'");
5725   /* Parse the assignment-expression.  */
5726   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5727
5728   /* Build the conditional-expression.  */
5729   return build_x_conditional_expr (logical_or_expr,
5730                                    expr,
5731                                    assignment_expr);
5732 }
5733
5734 /* Parse an assignment-expression.
5735
5736    assignment-expression:
5737      conditional-expression
5738      logical-or-expression assignment-operator assignment_expression
5739      throw-expression
5740
5741    CAST_P is true if this expression is the target of a cast.
5742
5743    Returns a representation for the expression.  */
5744
5745 static tree
5746 cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
5747 {
5748   tree expr;
5749
5750   /* If the next token is the `throw' keyword, then we're looking at
5751      a throw-expression.  */
5752   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
5753     expr = cp_parser_throw_expression (parser);
5754   /* Otherwise, it must be that we are looking at a
5755      logical-or-expression.  */
5756   else
5757     {
5758       /* Parse the binary expressions (logical-or-expression).  */
5759       expr = cp_parser_binary_expression (parser, cast_p);
5760       /* If the next token is a `?' then we're actually looking at a
5761          conditional-expression.  */
5762       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
5763         return cp_parser_question_colon_clause (parser, expr);
5764       else
5765         {
5766           enum tree_code assignment_operator;
5767
5768           /* If it's an assignment-operator, we're using the second
5769              production.  */
5770           assignment_operator
5771             = cp_parser_assignment_operator_opt (parser);
5772           if (assignment_operator != ERROR_MARK)
5773             {
5774               tree rhs;
5775
5776               /* Parse the right-hand side of the assignment.  */
5777               rhs = cp_parser_assignment_expression (parser, cast_p);
5778               /* An assignment may not appear in a
5779                  constant-expression.  */
5780               if (cp_parser_non_integral_constant_expression (parser,
5781                                                               "an assignment"))
5782                 return error_mark_node;
5783               /* Build the assignment expression.  */
5784               expr = build_x_modify_expr (expr,
5785                                           assignment_operator,
5786                                           rhs);
5787             }
5788         }
5789     }
5790
5791   return expr;
5792 }
5793
5794 /* Parse an (optional) assignment-operator.
5795
5796    assignment-operator: one of
5797      = *= /= %= += -= >>= <<= &= ^= |=
5798
5799    GNU Extension:
5800
5801    assignment-operator: one of
5802      <?= >?=
5803
5804    If the next token is an assignment operator, the corresponding tree
5805    code is returned, and the token is consumed.  For example, for
5806    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
5807    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
5808    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
5809    operator, ERROR_MARK is returned.  */
5810
5811 static enum tree_code
5812 cp_parser_assignment_operator_opt (cp_parser* parser)
5813 {
5814   enum tree_code op;
5815   cp_token *token;
5816
5817   /* Peek at the next toen.  */
5818   token = cp_lexer_peek_token (parser->lexer);
5819
5820   switch (token->type)
5821     {
5822     case CPP_EQ:
5823       op = NOP_EXPR;
5824       break;
5825
5826     case CPP_MULT_EQ:
5827       op = MULT_EXPR;
5828       break;
5829
5830     case CPP_DIV_EQ:
5831       op = TRUNC_DIV_EXPR;
5832       break;
5833
5834     case CPP_MOD_EQ:
5835       op = TRUNC_MOD_EXPR;
5836       break;
5837
5838     case CPP_PLUS_EQ:
5839       op = PLUS_EXPR;
5840       break;
5841
5842     case CPP_MINUS_EQ:
5843       op = MINUS_EXPR;
5844       break;
5845
5846     case CPP_RSHIFT_EQ:
5847       op = RSHIFT_EXPR;
5848       break;
5849
5850     case CPP_LSHIFT_EQ:
5851       op = LSHIFT_EXPR;
5852       break;
5853
5854     case CPP_AND_EQ:
5855       op = BIT_AND_EXPR;
5856       break;
5857
5858     case CPP_XOR_EQ:
5859       op = BIT_XOR_EXPR;
5860       break;
5861
5862     case CPP_OR_EQ:
5863       op = BIT_IOR_EXPR;
5864       break;
5865
5866     default:
5867       /* Nothing else is an assignment operator.  */
5868       op = ERROR_MARK;
5869     }
5870
5871   /* If it was an assignment operator, consume it.  */
5872   if (op != ERROR_MARK)
5873     cp_lexer_consume_token (parser->lexer);
5874
5875   return op;
5876 }
5877
5878 /* Parse an expression.
5879
5880    expression:
5881      assignment-expression
5882      expression , assignment-expression
5883
5884    CAST_P is true if this expression is the target of a cast.
5885
5886    Returns a representation of the expression.  */
5887
5888 static tree
5889 cp_parser_expression (cp_parser* parser, bool cast_p)
5890 {
5891   tree expression = NULL_TREE;
5892
5893   while (true)
5894     {
5895       tree assignment_expression;
5896
5897       /* Parse the next assignment-expression.  */
5898       assignment_expression
5899         = cp_parser_assignment_expression (parser, cast_p);
5900       /* If this is the first assignment-expression, we can just
5901          save it away.  */
5902       if (!expression)
5903         expression = assignment_expression;
5904       else
5905         expression = build_x_compound_expr (expression,
5906                                             assignment_expression);
5907       /* If the next token is not a comma, then we are done with the
5908          expression.  */
5909       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5910         break;
5911       /* Consume the `,'.  */
5912       cp_lexer_consume_token (parser->lexer);
5913       /* A comma operator cannot appear in a constant-expression.  */
5914       if (cp_parser_non_integral_constant_expression (parser,
5915                                                       "a comma operator"))
5916         expression = error_mark_node;
5917     }
5918
5919   return expression;
5920 }
5921
5922 /* Parse a constant-expression.
5923
5924    constant-expression:
5925      conditional-expression
5926
5927   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
5928   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
5929   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
5930   is false, NON_CONSTANT_P should be NULL.  */
5931
5932 static tree
5933 cp_parser_constant_expression (cp_parser* parser,
5934                                bool allow_non_constant_p,
5935                                bool *non_constant_p)
5936 {
5937   bool saved_integral_constant_expression_p;
5938   bool saved_allow_non_integral_constant_expression_p;
5939   bool saved_non_integral_constant_expression_p;
5940   tree expression;
5941
5942   /* It might seem that we could simply parse the
5943      conditional-expression, and then check to see if it were
5944      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
5945      one that the compiler can figure out is constant, possibly after
5946      doing some simplifications or optimizations.  The standard has a
5947      precise definition of constant-expression, and we must honor
5948      that, even though it is somewhat more restrictive.
5949
5950      For example:
5951
5952        int i[(2, 3)];
5953
5954      is not a legal declaration, because `(2, 3)' is not a
5955      constant-expression.  The `,' operator is forbidden in a
5956      constant-expression.  However, GCC's constant-folding machinery
5957      will fold this operation to an INTEGER_CST for `3'.  */
5958
5959   /* Save the old settings.  */
5960   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
5961   saved_allow_non_integral_constant_expression_p
5962     = parser->allow_non_integral_constant_expression_p;
5963   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
5964   /* We are now parsing a constant-expression.  */
5965   parser->integral_constant_expression_p = true;
5966   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
5967   parser->non_integral_constant_expression_p = false;
5968   /* Although the grammar says "conditional-expression", we parse an
5969      "assignment-expression", which also permits "throw-expression"
5970      and the use of assignment operators.  In the case that
5971      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
5972      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
5973      actually essential that we look for an assignment-expression.
5974      For example, cp_parser_initializer_clauses uses this function to
5975      determine whether a particular assignment-expression is in fact
5976      constant.  */
5977   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5978   /* Restore the old settings.  */
5979   parser->integral_constant_expression_p
5980     = saved_integral_constant_expression_p;
5981   parser->allow_non_integral_constant_expression_p
5982     = saved_allow_non_integral_constant_expression_p;
5983   if (allow_non_constant_p)
5984     *non_constant_p = parser->non_integral_constant_expression_p;
5985   else if (parser->non_integral_constant_expression_p)
5986     expression = error_mark_node;
5987   parser->non_integral_constant_expression_p
5988     = saved_non_integral_constant_expression_p;
5989
5990   return expression;
5991 }
5992
5993 /* Parse __builtin_offsetof.
5994
5995    offsetof-expression:
5996      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
5997
5998    offsetof-member-designator:
5999      id-expression
6000      | offsetof-member-designator "." id-expression
6001      | offsetof-member-designator "[" expression "]"  */
6002
6003 static tree
6004 cp_parser_builtin_offsetof (cp_parser *parser)
6005 {
6006   int save_ice_p, save_non_ice_p;
6007   tree type, expr;
6008   cp_id_kind dummy;
6009
6010   /* We're about to accept non-integral-constant things, but will
6011      definitely yield an integral constant expression.  Save and
6012      restore these values around our local parsing.  */
6013   save_ice_p = parser->integral_constant_expression_p;
6014   save_non_ice_p = parser->non_integral_constant_expression_p;
6015
6016   /* Consume the "__builtin_offsetof" token.  */
6017   cp_lexer_consume_token (parser->lexer);
6018   /* Consume the opening `('.  */
6019   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6020   /* Parse the type-id.  */
6021   type = cp_parser_type_id (parser);
6022   /* Look for the `,'.  */
6023   cp_parser_require (parser, CPP_COMMA, "`,'");
6024
6025   /* Build the (type *)null that begins the traditional offsetof macro.  */
6026   expr = build_static_cast (build_pointer_type (type), null_pointer_node);
6027
6028   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6029   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6030                                                  true, &dummy);
6031   while (true)
6032     {
6033       cp_token *token = cp_lexer_peek_token (parser->lexer);
6034       switch (token->type)
6035         {
6036         case CPP_OPEN_SQUARE:
6037           /* offsetof-member-designator "[" expression "]" */
6038           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6039           break;
6040
6041         case CPP_DOT:
6042           /* offsetof-member-designator "." identifier */
6043           cp_lexer_consume_token (parser->lexer);
6044           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
6045                                                          true, &dummy);
6046           break;
6047
6048         case CPP_CLOSE_PAREN:
6049           /* Consume the ")" token.  */
6050           cp_lexer_consume_token (parser->lexer);
6051           goto success;
6052
6053         default:
6054           /* Error.  We know the following require will fail, but
6055              that gives the proper error message.  */
6056           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6057           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6058           expr = error_mark_node;
6059           goto failure;
6060         }
6061     }
6062
6063  success:
6064   /* If we're processing a template, we can't finish the semantics yet.
6065      Otherwise we can fold the entire expression now.  */
6066   if (processing_template_decl)
6067     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6068   else
6069     expr = finish_offsetof (expr);
6070
6071  failure:
6072   parser->integral_constant_expression_p = save_ice_p;
6073   parser->non_integral_constant_expression_p = save_non_ice_p;
6074
6075   return expr;
6076 }
6077
6078 /* Statements [gram.stmt.stmt]  */
6079
6080 /* Parse a statement.
6081
6082    statement:
6083      labeled-statement
6084      expression-statement
6085      compound-statement
6086      selection-statement
6087      iteration-statement
6088      jump-statement
6089      declaration-statement
6090      try-block
6091
6092   IN_COMPOUND is true when the statement is nested inside a
6093   cp_parser_compound_statement; this matters for certain pragmas.  */
6094
6095 static void
6096 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6097                      bool in_compound)
6098 {
6099   tree statement;
6100   cp_token *token;
6101   location_t statement_location;
6102
6103  restart:
6104   /* There is no statement yet.  */
6105   statement = NULL_TREE;
6106   /* Peek at the next token.  */
6107   token = cp_lexer_peek_token (parser->lexer);
6108   /* Remember the location of the first token in the statement.  */
6109   statement_location = token->location;
6110   /* If this is a keyword, then that will often determine what kind of
6111      statement we have.  */
6112   if (token->type == CPP_KEYWORD)
6113     {
6114       enum rid keyword = token->keyword;
6115
6116       switch (keyword)
6117         {
6118         case RID_CASE:
6119         case RID_DEFAULT:
6120           /* Looks like a labeled-statement with a case label.
6121              Parse the label, and then use tail recursion to parse
6122              the statement.  */
6123           cp_parser_label_for_labeled_statement (parser);
6124           goto restart;
6125
6126         case RID_IF:
6127         case RID_SWITCH:
6128           statement = cp_parser_selection_statement (parser);
6129           break;
6130
6131         case RID_WHILE:
6132         case RID_DO:
6133         case RID_FOR:
6134           statement = cp_parser_iteration_statement (parser);
6135           break;
6136
6137         case RID_BREAK:
6138         case RID_CONTINUE:
6139         case RID_RETURN:
6140         case RID_GOTO:
6141           statement = cp_parser_jump_statement (parser);
6142           break;
6143
6144           /* Objective-C++ exception-handling constructs.  */
6145         case RID_AT_TRY:
6146         case RID_AT_CATCH:
6147         case RID_AT_FINALLY:
6148         case RID_AT_SYNCHRONIZED:
6149         case RID_AT_THROW:
6150           statement = cp_parser_objc_statement (parser);
6151           break;
6152
6153         case RID_TRY:
6154           statement = cp_parser_try_block (parser);
6155           break;
6156
6157         default:
6158           /* It might be a keyword like `int' that can start a
6159              declaration-statement.  */
6160           break;
6161         }
6162     }
6163   else if (token->type == CPP_NAME)
6164     {
6165       /* If the next token is a `:', then we are looking at a
6166          labeled-statement.  */
6167       token = cp_lexer_peek_nth_token (parser->lexer, 2);
6168       if (token->type == CPP_COLON)
6169         {
6170           /* Looks like a labeled-statement with an ordinary label.
6171              Parse the label, and then use tail recursion to parse
6172              the statement.  */
6173           cp_parser_label_for_labeled_statement (parser);
6174           goto restart;
6175         }
6176     }
6177   /* Anything that starts with a `{' must be a compound-statement.  */
6178   else if (token->type == CPP_OPEN_BRACE)
6179     statement = cp_parser_compound_statement (parser, NULL, false);
6180   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6181      a statement all its own.  */
6182   else if (token->type == CPP_PRAGMA)
6183     {
6184       /* Only certain OpenMP pragmas are attached to statements, and thus
6185          are considered statements themselves.  All others are not.  In
6186          the context of a compound, accept the pragma as a "statement" and
6187          return so that we can check for a close brace.  Otherwise we
6188          require a real statement and must go back and read one.  */
6189       if (in_compound)
6190         cp_parser_pragma (parser, pragma_compound);
6191       else if (!cp_parser_pragma (parser, pragma_stmt))
6192         goto restart;
6193       return;
6194     }
6195   else if (token->type == CPP_EOF)
6196     {
6197       cp_parser_error (parser, "expected statement");
6198       return;
6199     }
6200
6201   /* Everything else must be a declaration-statement or an
6202      expression-statement.  Try for the declaration-statement
6203      first, unless we are looking at a `;', in which case we know that
6204      we have an expression-statement.  */
6205   if (!statement)
6206     {
6207       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6208         {
6209           cp_parser_parse_tentatively (parser);
6210           /* Try to parse the declaration-statement.  */
6211           cp_parser_declaration_statement (parser);
6212           /* If that worked, we're done.  */
6213           if (cp_parser_parse_definitely (parser))
6214             return;
6215         }
6216       /* Look for an expression-statement instead.  */
6217       statement = cp_parser_expression_statement (parser, in_statement_expr);
6218     }
6219
6220   /* Set the line number for the statement.  */
6221   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
6222     SET_EXPR_LOCATION (statement, statement_location);
6223 }
6224
6225 /* Parse the label for a labeled-statement, i.e.
6226
6227    identifier :
6228    case constant-expression :
6229    default :
6230
6231    GNU Extension:
6232    case constant-expression ... constant-expression : statement
6233
6234    When a label is parsed without errors, the label is added to the
6235    parse tree by the finish_* functions, so this function doesn't
6236    have to return the label.  */
6237
6238 static void
6239 cp_parser_label_for_labeled_statement (cp_parser* parser)
6240 {
6241   cp_token *token;
6242
6243   /* The next token should be an identifier.  */
6244   token = cp_lexer_peek_token (parser->lexer);
6245   if (token->type != CPP_NAME
6246       && token->type != CPP_KEYWORD)
6247     {
6248       cp_parser_error (parser, "expected labeled-statement");
6249       return;
6250     }
6251
6252   switch (token->keyword)
6253     {
6254     case RID_CASE:
6255       {
6256         tree expr, expr_hi;
6257         cp_token *ellipsis;
6258
6259         /* Consume the `case' token.  */
6260         cp_lexer_consume_token (parser->lexer);
6261         /* Parse the constant-expression.  */
6262         expr = cp_parser_constant_expression (parser,
6263                                               /*allow_non_constant_p=*/false,
6264                                               NULL);
6265
6266         ellipsis = cp_lexer_peek_token (parser->lexer);
6267         if (ellipsis->type == CPP_ELLIPSIS)
6268           {
6269             /* Consume the `...' token.  */
6270             cp_lexer_consume_token (parser->lexer);
6271             expr_hi =
6272               cp_parser_constant_expression (parser,
6273                                              /*allow_non_constant_p=*/false,
6274                                              NULL);
6275             /* We don't need to emit warnings here, as the common code
6276                will do this for us.  */
6277           }
6278         else
6279           expr_hi = NULL_TREE;
6280
6281         if (parser->in_switch_statement_p)
6282           finish_case_label (expr, expr_hi);
6283         else
6284           error ("case label %qE not within a switch statement", expr);
6285       }
6286       break;
6287
6288     case RID_DEFAULT:
6289       /* Consume the `default' token.  */
6290       cp_lexer_consume_token (parser->lexer);
6291
6292       if (parser->in_switch_statement_p)
6293         finish_case_label (NULL_TREE, NULL_TREE);
6294       else
6295         error ("case label not within a switch statement");
6296       break;
6297
6298     default:
6299       /* Anything else must be an ordinary label.  */
6300       finish_label_stmt (cp_parser_identifier (parser));
6301       break;
6302     }
6303
6304   /* Require the `:' token.  */
6305   cp_parser_require (parser, CPP_COLON, "`:'");
6306 }
6307
6308 /* Parse an expression-statement.
6309
6310    expression-statement:
6311      expression [opt] ;
6312
6313    Returns the new EXPR_STMT -- or NULL_TREE if the expression
6314    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6315    indicates whether this expression-statement is part of an
6316    expression statement.  */
6317
6318 static tree
6319 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6320 {
6321   tree statement = NULL_TREE;
6322
6323   /* If the next token is a ';', then there is no expression
6324      statement.  */
6325   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6326     statement = cp_parser_expression (parser, /*cast_p=*/false);
6327
6328   /* Consume the final `;'.  */
6329   cp_parser_consume_semicolon_at_end_of_statement (parser);
6330
6331   if (in_statement_expr
6332       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6333     /* This is the final expression statement of a statement
6334        expression.  */
6335     statement = finish_stmt_expr_expr (statement, in_statement_expr);
6336   else if (statement)
6337     statement = finish_expr_stmt (statement);
6338   else
6339     finish_stmt ();
6340
6341   return statement;
6342 }
6343
6344 /* Parse a compound-statement.
6345
6346    compound-statement:
6347      { statement-seq [opt] }
6348
6349    Returns a tree representing the statement.  */
6350
6351 static tree
6352 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6353                               bool in_try)
6354 {
6355   tree compound_stmt;
6356
6357   /* Consume the `{'.  */
6358   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6359     return error_mark_node;
6360   /* Begin the compound-statement.  */
6361   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6362   /* Parse an (optional) statement-seq.  */
6363   cp_parser_statement_seq_opt (parser, in_statement_expr);
6364   /* Finish the compound-statement.  */
6365   finish_compound_stmt (compound_stmt);
6366   /* Consume the `}'.  */
6367   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6368
6369   return compound_stmt;
6370 }
6371
6372 /* Parse an (optional) statement-seq.
6373
6374    statement-seq:
6375      statement
6376      statement-seq [opt] statement  */
6377
6378 static void
6379 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6380 {
6381   /* Scan statements until there aren't any more.  */
6382   while (true)
6383     {
6384       cp_token *token = cp_lexer_peek_token (parser->lexer);
6385
6386       /* If we're looking at a `}', then we've run out of statements.  */
6387       if (token->type == CPP_CLOSE_BRACE
6388           || token->type == CPP_EOF
6389           || token->type == CPP_PRAGMA_EOL)
6390         break;
6391
6392       /* Parse the statement.  */
6393       cp_parser_statement (parser, in_statement_expr, true);
6394     }
6395 }
6396
6397 /* Parse a selection-statement.
6398
6399    selection-statement:
6400      if ( condition ) statement
6401      if ( condition ) statement else statement
6402      switch ( condition ) statement
6403
6404    Returns the new IF_STMT or SWITCH_STMT.  */
6405
6406 static tree
6407 cp_parser_selection_statement (cp_parser* parser)
6408 {
6409   cp_token *token;
6410   enum rid keyword;
6411
6412   /* Peek at the next token.  */
6413   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6414
6415   /* See what kind of keyword it is.  */
6416   keyword = token->keyword;
6417   switch (keyword)
6418     {
6419     case RID_IF:
6420     case RID_SWITCH:
6421       {
6422         tree statement;
6423         tree condition;
6424
6425         /* Look for the `('.  */
6426         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6427           {
6428             cp_parser_skip_to_end_of_statement (parser);
6429             return error_mark_node;
6430           }
6431
6432         /* Begin the selection-statement.  */
6433         if (keyword == RID_IF)
6434           statement = begin_if_stmt ();
6435         else
6436           statement = begin_switch_stmt ();
6437
6438         /* Parse the condition.  */
6439         condition = cp_parser_condition (parser);
6440         /* Look for the `)'.  */
6441         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6442           cp_parser_skip_to_closing_parenthesis (parser, true, false,
6443                                                  /*consume_paren=*/true);
6444
6445         if (keyword == RID_IF)
6446           {
6447             /* Add the condition.  */
6448             finish_if_stmt_cond (condition, statement);
6449
6450             /* Parse the then-clause.  */
6451             cp_parser_implicitly_scoped_statement (parser);
6452             finish_then_clause (statement);
6453
6454             /* If the next token is `else', parse the else-clause.  */
6455             if (cp_lexer_next_token_is_keyword (parser->lexer,
6456                                                 RID_ELSE))
6457               {
6458                 /* Consume the `else' keyword.  */
6459                 cp_lexer_consume_token (parser->lexer);
6460                 begin_else_clause (statement);
6461                 /* Parse the else-clause.  */
6462                 cp_parser_implicitly_scoped_statement (parser);
6463                 finish_else_clause (statement);
6464               }
6465
6466             /* Now we're all done with the if-statement.  */
6467             finish_if_stmt (statement);
6468           }
6469         else
6470           {
6471             bool in_switch_statement_p;
6472             unsigned char in_statement;
6473
6474             /* Add the condition.  */
6475             finish_switch_cond (condition, statement);
6476
6477             /* Parse the body of the switch-statement.  */
6478             in_switch_statement_p = parser->in_switch_statement_p;
6479             in_statement = parser->in_statement;
6480             parser->in_switch_statement_p = true;
6481             parser->in_statement |= IN_SWITCH_STMT;
6482             cp_parser_implicitly_scoped_statement (parser);
6483             parser->in_switch_statement_p = in_switch_statement_p;
6484             parser->in_statement = in_statement;
6485
6486             /* Now we're all done with the switch-statement.  */
6487             finish_switch_stmt (statement);
6488           }
6489
6490         return statement;
6491       }
6492       break;
6493
6494     default:
6495       cp_parser_error (parser, "expected selection-statement");
6496       return error_mark_node;
6497     }
6498 }
6499
6500 /* Parse a condition.
6501
6502    condition:
6503      expression
6504      type-specifier-seq declarator = assignment-expression
6505
6506    GNU Extension:
6507
6508    condition:
6509      type-specifier-seq declarator asm-specification [opt]
6510        attributes [opt] = assignment-expression
6511
6512    Returns the expression that should be tested.  */
6513
6514 static tree
6515 cp_parser_condition (cp_parser* parser)
6516 {
6517   cp_decl_specifier_seq type_specifiers;
6518   const char *saved_message;
6519
6520   /* Try the declaration first.  */
6521   cp_parser_parse_tentatively (parser);
6522   /* New types are not allowed in the type-specifier-seq for a
6523      condition.  */
6524   saved_message = parser->type_definition_forbidden_message;
6525   parser->type_definition_forbidden_message
6526     = "types may not be defined in conditions";
6527   /* Parse the type-specifier-seq.  */
6528   cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
6529                                 &type_specifiers);
6530   /* Restore the saved message.  */
6531   parser->type_definition_forbidden_message = saved_message;
6532   /* If all is well, we might be looking at a declaration.  */
6533   if (!cp_parser_error_occurred (parser))
6534     {
6535       tree decl;
6536       tree asm_specification;
6537       tree attributes;
6538       cp_declarator *declarator;
6539       tree initializer = NULL_TREE;
6540
6541       /* Parse the declarator.  */
6542       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6543                                          /*ctor_dtor_or_conv_p=*/NULL,
6544                                          /*parenthesized_p=*/NULL,
6545                                          /*member_p=*/false);
6546       /* Parse the attributes.  */
6547       attributes = cp_parser_attributes_opt (parser);
6548       /* Parse the asm-specification.  */
6549       asm_specification = cp_parser_asm_specification_opt (parser);
6550       /* If the next token is not an `=', then we might still be
6551          looking at an expression.  For example:
6552
6553            if (A(a).x)
6554
6555          looks like a decl-specifier-seq and a declarator -- but then
6556          there is no `=', so this is an expression.  */
6557       cp_parser_require (parser, CPP_EQ, "`='");
6558       /* If we did see an `=', then we are looking at a declaration
6559          for sure.  */
6560       if (cp_parser_parse_definitely (parser))
6561         {
6562           tree pushed_scope;
6563           bool non_constant_p;
6564
6565           /* Create the declaration.  */
6566           decl = start_decl (declarator, &type_specifiers,
6567                              /*initialized_p=*/true,
6568                              attributes, /*prefix_attributes=*/NULL_TREE,
6569                              &pushed_scope);
6570           /* Parse the assignment-expression.  */
6571           initializer
6572             = cp_parser_constant_expression (parser,
6573                                              /*allow_non_constant_p=*/true,
6574                                              &non_constant_p);
6575           if (!non_constant_p)
6576             initializer = fold_non_dependent_expr (initializer);
6577
6578           /* Process the initializer.  */
6579           cp_finish_decl (decl,
6580                           initializer, !non_constant_p,
6581                           asm_specification,
6582                           LOOKUP_ONLYCONVERTING);
6583
6584           if (pushed_scope)
6585             pop_scope (pushed_scope);
6586
6587           return convert_from_reference (decl);
6588         }
6589     }
6590   /* If we didn't even get past the declarator successfully, we are
6591      definitely not looking at a declaration.  */
6592   else
6593     cp_parser_abort_tentative_parse (parser);
6594
6595   /* Otherwise, we are looking at an expression.  */
6596   return cp_parser_expression (parser, /*cast_p=*/false);
6597 }
6598
6599 /* Parse an iteration-statement.
6600
6601    iteration-statement:
6602      while ( condition ) statement
6603      do statement while ( expression ) ;
6604      for ( for-init-statement condition [opt] ; expression [opt] )
6605        statement
6606
6607    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6608
6609 static tree
6610 cp_parser_iteration_statement (cp_parser* parser)
6611 {
6612   cp_token *token;
6613   enum rid keyword;
6614   tree statement;
6615   unsigned char in_statement;
6616
6617   /* Peek at the next token.  */
6618   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6619   if (!token)
6620     return error_mark_node;
6621
6622   /* Remember whether or not we are already within an iteration
6623      statement.  */
6624   in_statement = parser->in_statement;
6625
6626   /* See what kind of keyword it is.  */
6627   keyword = token->keyword;
6628   switch (keyword)
6629     {
6630     case RID_WHILE:
6631       {
6632         tree condition;
6633
6634         /* Begin the while-statement.  */
6635         statement = begin_while_stmt ();
6636         /* Look for the `('.  */
6637         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6638         /* Parse the condition.  */
6639         condition = cp_parser_condition (parser);
6640         finish_while_stmt_cond (condition, statement);
6641         /* Look for the `)'.  */
6642         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6643         /* Parse the dependent statement.  */
6644         parser->in_statement = IN_ITERATION_STMT;
6645         cp_parser_already_scoped_statement (parser);
6646         parser->in_statement = in_statement;
6647         /* We're done with the while-statement.  */
6648         finish_while_stmt (statement);
6649       }
6650       break;
6651
6652     case RID_DO:
6653       {
6654         tree expression;
6655
6656         /* Begin the do-statement.  */
6657         statement = begin_do_stmt ();
6658         /* Parse the body of the do-statement.  */
6659         parser->in_statement = IN_ITERATION_STMT;
6660         cp_parser_implicitly_scoped_statement (parser);
6661         parser->in_statement = in_statement;
6662         finish_do_body (statement);
6663         /* Look for the `while' keyword.  */
6664         cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6665         /* Look for the `('.  */
6666         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6667         /* Parse the expression.  */
6668         expression = cp_parser_expression (parser, /*cast_p=*/false);
6669         /* We're done with the do-statement.  */
6670         finish_do_stmt (expression, statement);
6671         /* Look for the `)'.  */
6672         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6673         /* Look for the `;'.  */
6674         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6675       }
6676       break;
6677
6678     case RID_FOR:
6679       {
6680         tree condition = NULL_TREE;
6681         tree expression = NULL_TREE;
6682
6683         /* Begin the for-statement.  */
6684         statement = begin_for_stmt ();
6685         /* Look for the `('.  */
6686         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6687         /* Parse the initialization.  */
6688         cp_parser_for_init_statement (parser);
6689         finish_for_init_stmt (statement);
6690
6691         /* If there's a condition, process it.  */
6692         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6693           condition = cp_parser_condition (parser);
6694         finish_for_cond (condition, statement);
6695         /* Look for the `;'.  */
6696         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6697
6698         /* If there's an expression, process it.  */
6699         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6700           expression = cp_parser_expression (parser, /*cast_p=*/false);
6701         finish_for_expr (expression, statement);
6702         /* Look for the `)'.  */
6703         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6704
6705         /* Parse the body of the for-statement.  */
6706         parser->in_statement = IN_ITERATION_STMT;
6707         cp_parser_already_scoped_statement (parser);
6708         parser->in_statement = in_statement;
6709
6710         /* We're done with the for-statement.  */
6711         finish_for_stmt (statement);
6712       }
6713       break;
6714
6715     default:
6716       cp_parser_error (parser, "expected iteration-statement");
6717       statement = error_mark_node;
6718       break;
6719     }
6720
6721   return statement;
6722 }
6723
6724 /* Parse a for-init-statement.
6725
6726    for-init-statement:
6727      expression-statement
6728      simple-declaration  */
6729
6730 static void
6731 cp_parser_for_init_statement (cp_parser* parser)
6732 {
6733   /* If the next token is a `;', then we have an empty
6734      expression-statement.  Grammatically, this is also a
6735      simple-declaration, but an invalid one, because it does not
6736      declare anything.  Therefore, if we did not handle this case
6737      specially, we would issue an error message about an invalid
6738      declaration.  */
6739   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6740     {
6741       /* We're going to speculatively look for a declaration, falling back
6742          to an expression, if necessary.  */
6743       cp_parser_parse_tentatively (parser);
6744       /* Parse the declaration.  */
6745       cp_parser_simple_declaration (parser,
6746                                     /*function_definition_allowed_p=*/false);
6747       /* If the tentative parse failed, then we shall need to look for an
6748          expression-statement.  */
6749       if (cp_parser_parse_definitely (parser))
6750         return;
6751     }
6752
6753   cp_parser_expression_statement (parser, false);
6754 }
6755
6756 /* Parse a jump-statement.
6757
6758    jump-statement:
6759      break ;
6760      continue ;
6761      return expression [opt] ;
6762      goto identifier ;
6763
6764    GNU extension:
6765
6766    jump-statement:
6767      goto * expression ;
6768
6769    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
6770
6771 static tree
6772 cp_parser_jump_statement (cp_parser* parser)
6773 {
6774   tree statement = error_mark_node;
6775   cp_token *token;
6776   enum rid keyword;
6777
6778   /* Peek at the next token.  */
6779   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6780   if (!token)
6781     return error_mark_node;
6782
6783   /* See what kind of keyword it is.  */
6784   keyword = token->keyword;
6785   switch (keyword)
6786     {
6787     case RID_BREAK:
6788       switch (parser->in_statement)
6789         {
6790         case 0:
6791           error ("break statement not within loop or switch");
6792           break;
6793         default:
6794           gcc_assert ((parser->in_statement & IN_SWITCH_STMT)
6795                       || parser->in_statement == IN_ITERATION_STMT);
6796           statement = finish_break_stmt ();
6797           break;
6798         case IN_OMP_BLOCK:
6799           error ("invalid exit from OpenMP structured block");
6800           break;
6801         case IN_OMP_FOR:
6802           error ("break statement used with OpenMP for loop");
6803           break;
6804         }
6805       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6806       break;
6807
6808     case RID_CONTINUE:
6809       switch (parser->in_statement & ~IN_SWITCH_STMT)
6810         {
6811         case 0:
6812           error ("continue statement not within a loop");
6813           break;
6814         case IN_ITERATION_STMT:
6815         case IN_OMP_FOR:
6816           statement = finish_continue_stmt ();
6817           break;
6818         case IN_OMP_BLOCK:
6819           error ("invalid exit from OpenMP structured block");
6820           break;
6821         default:
6822           gcc_unreachable ();
6823         }
6824       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6825       break;
6826
6827     case RID_RETURN:
6828       {
6829         tree expr;
6830
6831         /* If the next token is a `;', then there is no
6832            expression.  */
6833         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6834           expr = cp_parser_expression (parser, /*cast_p=*/false);
6835         else
6836           expr = NULL_TREE;
6837         /* Build the return-statement.  */
6838         statement = finish_return_stmt (expr);
6839         /* Look for the final `;'.  */
6840         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6841       }
6842       break;
6843
6844     case RID_GOTO:
6845       /* Create the goto-statement.  */
6846       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
6847         {
6848           /* Issue a warning about this use of a GNU extension.  */
6849           if (pedantic)
6850             pedwarn ("ISO C++ forbids computed gotos");
6851           /* Consume the '*' token.  */
6852           cp_lexer_consume_token (parser->lexer);
6853           /* Parse the dependent expression.  */
6854           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
6855         }
6856       else
6857         finish_goto_stmt (cp_parser_identifier (parser));
6858       /* Look for the final `;'.  */
6859       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6860       break;
6861
6862     default:
6863       cp_parser_error (parser, "expected jump-statement");
6864       break;
6865     }
6866
6867   return statement;
6868 }
6869
6870 /* Parse a declaration-statement.
6871
6872    declaration-statement:
6873      block-declaration  */
6874
6875 static void
6876 cp_parser_declaration_statement (cp_parser* parser)
6877 {
6878   void *p;
6879
6880   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
6881   p = obstack_alloc (&declarator_obstack, 0);
6882
6883  /* Parse the block-declaration.  */
6884   cp_parser_block_declaration (parser, /*statement_p=*/true);
6885
6886   /* Free any declarators allocated.  */
6887   obstack_free (&declarator_obstack, p);
6888
6889   /* Finish off the statement.  */
6890   finish_stmt ();
6891 }
6892
6893 /* Some dependent statements (like `if (cond) statement'), are
6894    implicitly in their own scope.  In other words, if the statement is
6895    a single statement (as opposed to a compound-statement), it is
6896    none-the-less treated as if it were enclosed in braces.  Any
6897    declarations appearing in the dependent statement are out of scope
6898    after control passes that point.  This function parses a statement,
6899    but ensures that is in its own scope, even if it is not a
6900    compound-statement.
6901
6902    Returns the new statement.  */
6903
6904 static tree
6905 cp_parser_implicitly_scoped_statement (cp_parser* parser)
6906 {
6907   tree statement;
6908
6909   /* Mark if () ; with a special NOP_EXPR.  */
6910   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
6911     {
6912       cp_lexer_consume_token (parser->lexer);
6913       statement = add_stmt (build_empty_stmt ());
6914     }
6915   /* if a compound is opened, we simply parse the statement directly.  */
6916   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6917     statement = cp_parser_compound_statement (parser, NULL, false);
6918   /* If the token is not a `{', then we must take special action.  */
6919   else
6920     {
6921       /* Create a compound-statement.  */
6922       statement = begin_compound_stmt (0);
6923       /* Parse the dependent-statement.  */
6924       cp_parser_statement (parser, NULL_TREE, false);
6925       /* Finish the dummy compound-statement.  */
6926       finish_compound_stmt (statement);
6927     }
6928
6929   /* Return the statement.  */
6930   return statement;
6931 }
6932
6933 /* For some dependent statements (like `while (cond) statement'), we
6934    have already created a scope.  Therefore, even if the dependent
6935    statement is a compound-statement, we do not want to create another
6936    scope.  */
6937
6938 static void
6939 cp_parser_already_scoped_statement (cp_parser* parser)
6940 {
6941   /* If the token is a `{', then we must take special action.  */
6942   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6943     cp_parser_statement (parser, NULL_TREE, false);
6944   else
6945     {
6946       /* Avoid calling cp_parser_compound_statement, so that we
6947          don't create a new scope.  Do everything else by hand.  */
6948       cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
6949       cp_parser_statement_seq_opt (parser, NULL_TREE);
6950       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6951     }
6952 }
6953
6954 /* Declarations [gram.dcl.dcl] */
6955
6956 /* Parse an optional declaration-sequence.
6957
6958    declaration-seq:
6959      declaration
6960      declaration-seq declaration  */
6961
6962 static void
6963 cp_parser_declaration_seq_opt (cp_parser* parser)
6964 {
6965   while (true)
6966     {
6967       cp_token *token;
6968
6969       token = cp_lexer_peek_token (parser->lexer);
6970
6971       if (token->type == CPP_CLOSE_BRACE
6972           || token->type == CPP_EOF
6973           || token->type == CPP_PRAGMA_EOL)
6974         break;
6975
6976       if (token->type == CPP_SEMICOLON)
6977         {
6978           /* A declaration consisting of a single semicolon is
6979              invalid.  Allow it unless we're being pedantic.  */
6980           cp_lexer_consume_token (parser->lexer);
6981           if (pedantic && !in_system_header)
6982             pedwarn ("extra %<;%>");
6983           continue;
6984         }
6985
6986       /* If we're entering or exiting a region that's implicitly
6987          extern "C", modify the lang context appropriately.  */
6988       if (!parser->implicit_extern_c && token->implicit_extern_c)
6989         {
6990           push_lang_context (lang_name_c);
6991           parser->implicit_extern_c = true;
6992         }
6993       else if (parser->implicit_extern_c && !token->implicit_extern_c)
6994         {
6995           pop_lang_context ();
6996           parser->implicit_extern_c = false;
6997         }
6998
6999       if (token->type == CPP_PRAGMA)
7000         {
7001           /* A top-level declaration can consist solely of a #pragma.
7002              A nested declaration cannot, so this is done here and not
7003              in cp_parser_declaration.  (A #pragma at block scope is
7004              handled in cp_parser_statement.)  */
7005           cp_parser_pragma (parser, pragma_external);
7006           continue;
7007         }
7008
7009       /* Parse the declaration itself.  */
7010       cp_parser_declaration (parser);
7011     }
7012 }
7013
7014 /* Parse a declaration.
7015
7016    declaration:
7017      block-declaration
7018      function-definition
7019      template-declaration
7020      explicit-instantiation
7021      explicit-specialization
7022      linkage-specification
7023      namespace-definition
7024
7025    GNU extension:
7026
7027    declaration:
7028       __extension__ declaration */
7029
7030 static void
7031 cp_parser_declaration (cp_parser* parser)
7032 {
7033   cp_token token1;
7034   cp_token token2;
7035   int saved_pedantic;
7036   void *p;
7037
7038   /* Check for the `__extension__' keyword.  */
7039   if (cp_parser_extension_opt (parser, &saved_pedantic))
7040     {
7041       /* Parse the qualified declaration.  */
7042       cp_parser_declaration (parser);
7043       /* Restore the PEDANTIC flag.  */
7044       pedantic = saved_pedantic;
7045
7046       return;
7047     }
7048
7049   /* Try to figure out what kind of declaration is present.  */
7050   token1 = *cp_lexer_peek_token (parser->lexer);
7051
7052   if (token1.type != CPP_EOF)
7053     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7054   else
7055     {
7056       token2.type = CPP_EOF;
7057       token2.keyword = RID_MAX;
7058     }
7059
7060   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7061   p = obstack_alloc (&declarator_obstack, 0);
7062
7063   /* If the next token is `extern' and the following token is a string
7064      literal, then we have a linkage specification.  */
7065   if (token1.keyword == RID_EXTERN
7066       && cp_parser_is_string_literal (&token2))
7067     cp_parser_linkage_specification (parser);
7068   /* If the next token is `template', then we have either a template
7069      declaration, an explicit instantiation, or an explicit
7070      specialization.  */
7071   else if (token1.keyword == RID_TEMPLATE)
7072     {
7073       /* `template <>' indicates a template specialization.  */
7074       if (token2.type == CPP_LESS
7075           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
7076         cp_parser_explicit_specialization (parser);
7077       /* `template <' indicates a template declaration.  */
7078       else if (token2.type == CPP_LESS)
7079         cp_parser_template_declaration (parser, /*member_p=*/false);
7080       /* Anything else must be an explicit instantiation.  */
7081       else
7082         cp_parser_explicit_instantiation (parser);
7083     }
7084   /* If the next token is `export', then we have a template
7085      declaration.  */
7086   else if (token1.keyword == RID_EXPORT)
7087     cp_parser_template_declaration (parser, /*member_p=*/false);
7088   /* If the next token is `extern', 'static' or 'inline' and the one
7089      after that is `template', we have a GNU extended explicit
7090      instantiation directive.  */
7091   else if (cp_parser_allow_gnu_extensions_p (parser)
7092            && (token1.keyword == RID_EXTERN
7093                || token1.keyword == RID_STATIC
7094                || token1.keyword == RID_INLINE)
7095            && token2.keyword == RID_TEMPLATE)
7096     cp_parser_explicit_instantiation (parser);
7097   /* If the next token is `namespace', check for a named or unnamed
7098      namespace definition.  */
7099   else if (token1.keyword == RID_NAMESPACE
7100            && (/* A named namespace definition.  */
7101                (token2.type == CPP_NAME
7102                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
7103                     != CPP_EQ))
7104                /* An unnamed namespace definition.  */
7105                || token2.type == CPP_OPEN_BRACE
7106                || token2.keyword == RID_ATTRIBUTE))
7107     cp_parser_namespace_definition (parser);
7108   /* Objective-C++ declaration/definition.  */
7109   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
7110     cp_parser_objc_declaration (parser);
7111   /* We must have either a block declaration or a function
7112      definition.  */
7113   else
7114     /* Try to parse a block-declaration, or a function-definition.  */
7115     cp_parser_block_declaration (parser, /*statement_p=*/false);
7116
7117   /* Free any declarators allocated.  */
7118   obstack_free (&declarator_obstack, p);
7119 }
7120
7121 /* Parse a block-declaration.
7122
7123    block-declaration:
7124      simple-declaration
7125      asm-definition
7126      namespace-alias-definition
7127      using-declaration
7128      using-directive
7129
7130    GNU Extension:
7131
7132    block-declaration:
7133      __extension__ block-declaration
7134      label-declaration
7135
7136    If STATEMENT_P is TRUE, then this block-declaration is occurring as
7137    part of a declaration-statement.  */
7138
7139 static void
7140 cp_parser_block_declaration (cp_parser *parser,
7141                              bool      statement_p)
7142 {
7143   cp_token *token1;
7144   int saved_pedantic;
7145
7146   /* Check for the `__extension__' keyword.  */
7147   if (cp_parser_extension_opt (parser, &saved_pedantic))
7148     {
7149       /* Parse the qualified declaration.  */
7150       cp_parser_block_declaration (parser, statement_p);
7151       /* Restore the PEDANTIC flag.  */
7152       pedantic = saved_pedantic;
7153
7154       return;
7155     }
7156
7157   /* Peek at the next token to figure out which kind of declaration is
7158      present.  */
7159   token1 = cp_lexer_peek_token (parser->lexer);
7160
7161   /* If the next keyword is `asm', we have an asm-definition.  */
7162   if (token1->keyword == RID_ASM)
7163     {
7164       if (statement_p)
7165         cp_parser_commit_to_tentative_parse (parser);
7166       cp_parser_asm_definition (parser);
7167     }
7168   /* If the next keyword is `namespace', we have a
7169      namespace-alias-definition.  */
7170   else if (token1->keyword == RID_NAMESPACE)
7171     cp_parser_namespace_alias_definition (parser);
7172   /* If the next keyword is `using', we have either a
7173      using-declaration or a using-directive.  */
7174   else if (token1->keyword == RID_USING)
7175     {
7176       cp_token *token2;
7177
7178       if (statement_p)
7179         cp_parser_commit_to_tentative_parse (parser);
7180       /* If the token after `using' is `namespace', then we have a
7181          using-directive.  */
7182       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
7183       if (token2->keyword == RID_NAMESPACE)
7184         cp_parser_using_directive (parser);
7185       /* Otherwise, it's a using-declaration.  */
7186       else
7187         cp_parser_using_declaration (parser);
7188     }
7189   /* If the next keyword is `__label__' we have a label declaration.  */
7190   else if (token1->keyword == RID_LABEL)
7191     {
7192       if (statement_p)
7193         cp_parser_commit_to_tentative_parse (parser);
7194       cp_parser_label_declaration (parser);
7195     }
7196   /* Anything else must be a simple-declaration.  */
7197   else
7198     cp_parser_simple_declaration (parser, !statement_p);
7199 }
7200
7201 /* Parse a simple-declaration.
7202
7203    simple-declaration:
7204      decl-specifier-seq [opt] init-declarator-list [opt] ;
7205
7206    init-declarator-list:
7207      init-declarator
7208      init-declarator-list , init-declarator
7209
7210    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
7211    function-definition as a simple-declaration.  */
7212
7213 static void
7214 cp_parser_simple_declaration (cp_parser* parser,
7215                               bool function_definition_allowed_p)
7216 {
7217   cp_decl_specifier_seq decl_specifiers;
7218   int declares_class_or_enum;
7219   bool saw_declarator;
7220
7221   /* Defer access checks until we know what is being declared; the
7222      checks for names appearing in the decl-specifier-seq should be
7223      done as if we were in the scope of the thing being declared.  */
7224   push_deferring_access_checks (dk_deferred);
7225
7226   /* Parse the decl-specifier-seq.  We have to keep track of whether
7227      or not the decl-specifier-seq declares a named class or
7228      enumeration type, since that is the only case in which the
7229      init-declarator-list is allowed to be empty.
7230
7231      [dcl.dcl]
7232
7233      In a simple-declaration, the optional init-declarator-list can be
7234      omitted only when declaring a class or enumeration, that is when
7235      the decl-specifier-seq contains either a class-specifier, an
7236      elaborated-type-specifier, or an enum-specifier.  */
7237   cp_parser_decl_specifier_seq (parser,
7238                                 CP_PARSER_FLAGS_OPTIONAL,
7239                                 &decl_specifiers,
7240                                 &declares_class_or_enum);
7241   /* We no longer need to defer access checks.  */
7242   stop_deferring_access_checks ();
7243
7244   /* In a block scope, a valid declaration must always have a
7245      decl-specifier-seq.  By not trying to parse declarators, we can
7246      resolve the declaration/expression ambiguity more quickly.  */
7247   if (!function_definition_allowed_p
7248       && !decl_specifiers.any_specifiers_p)
7249     {
7250       cp_parser_error (parser, "expected declaration");
7251       goto done;
7252     }
7253
7254   /* If the next two tokens are both identifiers, the code is
7255      erroneous. The usual cause of this situation is code like:
7256
7257        T t;
7258
7259      where "T" should name a type -- but does not.  */
7260   if (!decl_specifiers.type
7261       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
7262     {
7263       /* If parsing tentatively, we should commit; we really are
7264          looking at a declaration.  */
7265       cp_parser_commit_to_tentative_parse (parser);
7266       /* Give up.  */
7267       goto done;
7268     }
7269
7270   /* If we have seen at least one decl-specifier, and the next token
7271      is not a parenthesis, then we must be looking at a declaration.
7272      (After "int (" we might be looking at a functional cast.)  */
7273   if (decl_specifiers.any_specifiers_p
7274       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
7275     cp_parser_commit_to_tentative_parse (parser);
7276
7277   /* Keep going until we hit the `;' at the end of the simple
7278      declaration.  */
7279   saw_declarator = false;
7280   while (cp_lexer_next_token_is_not (parser->lexer,
7281                                      CPP_SEMICOLON))
7282     {
7283       cp_token *token;
7284       bool function_definition_p;
7285       tree decl;
7286
7287       if (saw_declarator)
7288         {
7289           /* If we are processing next declarator, coma is expected */
7290           token = cp_lexer_peek_token (parser->lexer);
7291           gcc_assert (token->type == CPP_COMMA);
7292           cp_lexer_consume_token (parser->lexer);
7293         }
7294       else
7295         saw_declarator = true;
7296
7297       /* Parse the init-declarator.  */
7298       decl = cp_parser_init_declarator (parser, &decl_specifiers,
7299                                         /*checks=*/NULL_TREE,
7300                                         function_definition_allowed_p,
7301                                         /*member_p=*/false,
7302                                         declares_class_or_enum,
7303                                         &function_definition_p);
7304       /* If an error occurred while parsing tentatively, exit quickly.
7305          (That usually happens when in the body of a function; each
7306          statement is treated as a declaration-statement until proven
7307          otherwise.)  */
7308       if (cp_parser_error_occurred (parser))
7309         goto done;
7310       /* Handle function definitions specially.  */
7311       if (function_definition_p)
7312         {
7313           /* If the next token is a `,', then we are probably
7314              processing something like:
7315
7316                void f() {}, *p;
7317
7318              which is erroneous.  */
7319           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7320             error ("mixing declarations and function-definitions is forbidden");
7321           /* Otherwise, we're done with the list of declarators.  */
7322           else
7323             {
7324               pop_deferring_access_checks ();
7325               return;
7326             }
7327         }
7328       /* The next token should be either a `,' or a `;'.  */
7329       token = cp_lexer_peek_token (parser->lexer);
7330       /* If it's a `,', there are more declarators to come.  */
7331       if (token->type == CPP_COMMA)
7332         /* will be consumed next time around */;
7333       /* If it's a `;', we are done.  */
7334       else if (token->type == CPP_SEMICOLON)
7335         break;
7336       /* Anything else is an error.  */
7337       else
7338         {
7339           /* If we have already issued an error message we don't need
7340              to issue another one.  */
7341           if (decl != error_mark_node
7342               || cp_parser_uncommitted_to_tentative_parse_p (parser))
7343             cp_parser_error (parser, "expected %<,%> or %<;%>");
7344           /* Skip tokens until we reach the end of the statement.  */
7345           cp_parser_skip_to_end_of_statement (parser);
7346           /* If the next token is now a `;', consume it.  */
7347           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7348             cp_lexer_consume_token (parser->lexer);
7349           goto done;
7350         }
7351       /* After the first time around, a function-definition is not
7352          allowed -- even if it was OK at first.  For example:
7353
7354            int i, f() {}
7355
7356          is not valid.  */
7357       function_definition_allowed_p = false;
7358     }
7359
7360   /* Issue an error message if no declarators are present, and the
7361      decl-specifier-seq does not itself declare a class or
7362      enumeration.  */
7363   if (!saw_declarator)
7364     {
7365       if (cp_parser_declares_only_class_p (parser))
7366         shadow_tag (&decl_specifiers);
7367       /* Perform any deferred access checks.  */
7368       perform_deferred_access_checks ();
7369     }
7370
7371   /* Consume the `;'.  */
7372   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7373
7374  done:
7375   pop_deferring_access_checks ();
7376 }
7377
7378 /* Parse a decl-specifier-seq.
7379
7380    decl-specifier-seq:
7381      decl-specifier-seq [opt] decl-specifier
7382
7383    decl-specifier:
7384      storage-class-specifier
7385      type-specifier
7386      function-specifier
7387      friend
7388      typedef
7389
7390    GNU Extension:
7391
7392    decl-specifier:
7393      attributes
7394
7395    Set *DECL_SPECS to a representation of the decl-specifier-seq.
7396
7397    The parser flags FLAGS is used to control type-specifier parsing.
7398
7399    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7400    flags:
7401
7402      1: one of the decl-specifiers is an elaborated-type-specifier
7403         (i.e., a type declaration)
7404      2: one of the decl-specifiers is an enum-specifier or a
7405         class-specifier (i.e., a type definition)
7406
7407    */
7408
7409 static void
7410 cp_parser_decl_specifier_seq (cp_parser* parser,
7411                               cp_parser_flags flags,
7412                               cp_decl_specifier_seq *decl_specs,
7413                               int* declares_class_or_enum)
7414 {
7415   bool constructor_possible_p = !parser->in_declarator_p;
7416
7417   /* Clear DECL_SPECS.  */
7418   clear_decl_specs (decl_specs);
7419
7420   /* Assume no class or enumeration type is declared.  */
7421   *declares_class_or_enum = 0;
7422
7423   /* Keep reading specifiers until there are no more to read.  */
7424   while (true)
7425     {
7426       bool constructor_p;
7427       bool found_decl_spec;
7428       cp_token *token;
7429
7430       /* Peek at the next token.  */
7431       token = cp_lexer_peek_token (parser->lexer);
7432       /* Handle attributes.  */
7433       if (token->keyword == RID_ATTRIBUTE)
7434         {
7435           /* Parse the attributes.  */
7436           decl_specs->attributes
7437             = chainon (decl_specs->attributes,
7438                        cp_parser_attributes_opt (parser));
7439           continue;
7440         }
7441       /* Assume we will find a decl-specifier keyword.  */
7442       found_decl_spec = true;
7443       /* If the next token is an appropriate keyword, we can simply
7444          add it to the list.  */
7445       switch (token->keyword)
7446         {
7447           /* decl-specifier:
7448                friend  */
7449         case RID_FRIEND:
7450           if (!at_class_scope_p ())
7451             {
7452               error ("%<friend%> used outside of class");
7453               cp_lexer_purge_token (parser->lexer);
7454             }
7455           else
7456             {
7457               ++decl_specs->specs[(int) ds_friend];
7458               /* Consume the token.  */
7459               cp_lexer_consume_token (parser->lexer);
7460             }
7461           break;
7462
7463           /* function-specifier:
7464                inline
7465                virtual
7466                explicit  */
7467         case RID_INLINE:
7468         case RID_VIRTUAL:
7469         case RID_EXPLICIT:
7470           cp_parser_function_specifier_opt (parser, decl_specs);
7471           break;
7472
7473           /* decl-specifier:
7474                typedef  */
7475         case RID_TYPEDEF:
7476           ++decl_specs->specs[(int) ds_typedef];
7477           /* Consume the token.  */
7478           cp_lexer_consume_token (parser->lexer);
7479           /* A constructor declarator cannot appear in a typedef.  */
7480           constructor_possible_p = false;
7481           /* The "typedef" keyword can only occur in a declaration; we
7482              may as well commit at this point.  */
7483           cp_parser_commit_to_tentative_parse (parser);
7484           break;
7485
7486           /* storage-class-specifier:
7487                auto
7488                register
7489                static
7490                extern
7491                mutable
7492
7493              GNU Extension:
7494                thread  */
7495         case RID_AUTO:
7496         case RID_REGISTER:
7497         case RID_STATIC:
7498         case RID_EXTERN:
7499         case RID_MUTABLE:
7500           /* Consume the token.  */
7501           cp_lexer_consume_token (parser->lexer);
7502           cp_parser_set_storage_class (parser, decl_specs, token->keyword);
7503           break;
7504         case RID_THREAD:
7505           /* Consume the token.  */
7506           cp_lexer_consume_token (parser->lexer);
7507           ++decl_specs->specs[(int) ds_thread];
7508           break;
7509
7510         default:
7511           /* We did not yet find a decl-specifier yet.  */
7512           found_decl_spec = false;
7513           break;
7514         }
7515
7516       /* Constructors are a special case.  The `S' in `S()' is not a
7517          decl-specifier; it is the beginning of the declarator.  */
7518       constructor_p
7519         = (!found_decl_spec
7520            && constructor_possible_p
7521            && (cp_parser_constructor_declarator_p
7522                (parser, decl_specs->specs[(int) ds_friend] != 0)));
7523
7524       /* If we don't have a DECL_SPEC yet, then we must be looking at
7525          a type-specifier.  */
7526       if (!found_decl_spec && !constructor_p)
7527         {
7528           int decl_spec_declares_class_or_enum;
7529           bool is_cv_qualifier;
7530           tree type_spec;
7531
7532           type_spec
7533             = cp_parser_type_specifier (parser, flags,
7534                                         decl_specs,
7535                                         /*is_declaration=*/true,
7536                                         &decl_spec_declares_class_or_enum,
7537                                         &is_cv_qualifier);
7538
7539           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
7540
7541           /* If this type-specifier referenced a user-defined type
7542              (a typedef, class-name, etc.), then we can't allow any
7543              more such type-specifiers henceforth.
7544
7545              [dcl.spec]
7546
7547              The longest sequence of decl-specifiers that could
7548              possibly be a type name is taken as the
7549              decl-specifier-seq of a declaration.  The sequence shall
7550              be self-consistent as described below.
7551
7552              [dcl.type]
7553
7554              As a general rule, at most one type-specifier is allowed
7555              in the complete decl-specifier-seq of a declaration.  The
7556              only exceptions are the following:
7557
7558              -- const or volatile can be combined with any other
7559                 type-specifier.
7560
7561              -- signed or unsigned can be combined with char, long,
7562                 short, or int.
7563
7564              -- ..
7565
7566              Example:
7567
7568                typedef char* Pc;
7569                void g (const int Pc);
7570
7571              Here, Pc is *not* part of the decl-specifier seq; it's
7572              the declarator.  Therefore, once we see a type-specifier
7573              (other than a cv-qualifier), we forbid any additional
7574              user-defined types.  We *do* still allow things like `int
7575              int' to be considered a decl-specifier-seq, and issue the
7576              error message later.  */
7577           if (type_spec && !is_cv_qualifier)
7578             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
7579           /* A constructor declarator cannot follow a type-specifier.  */
7580           if (type_spec)
7581             {
7582               constructor_possible_p = false;
7583               found_decl_spec = true;
7584             }
7585         }
7586
7587       /* If we still do not have a DECL_SPEC, then there are no more
7588          decl-specifiers.  */
7589       if (!found_decl_spec)
7590         break;
7591
7592       decl_specs->any_specifiers_p = true;
7593       /* After we see one decl-specifier, further decl-specifiers are
7594          always optional.  */
7595       flags |= CP_PARSER_FLAGS_OPTIONAL;
7596     }
7597
7598   cp_parser_check_decl_spec (decl_specs);
7599
7600   /* Don't allow a friend specifier with a class definition.  */
7601   if (decl_specs->specs[(int) ds_friend] != 0
7602       && (*declares_class_or_enum & 2))
7603     error ("class definition may not be declared a friend");
7604 }
7605
7606 /* Parse an (optional) storage-class-specifier.
7607
7608    storage-class-specifier:
7609      auto
7610      register
7611      static
7612      extern
7613      mutable
7614
7615    GNU Extension:
7616
7617    storage-class-specifier:
7618      thread
7619
7620    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7621
7622 static tree
7623 cp_parser_storage_class_specifier_opt (cp_parser* parser)
7624 {
7625   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7626     {
7627     case RID_AUTO:
7628     case RID_REGISTER:
7629     case RID_STATIC:
7630     case RID_EXTERN:
7631     case RID_MUTABLE:
7632     case RID_THREAD:
7633       /* Consume the token.  */
7634       return cp_lexer_consume_token (parser->lexer)->value;
7635
7636     default:
7637       return NULL_TREE;
7638     }
7639 }
7640
7641 /* Parse an (optional) function-specifier.
7642
7643    function-specifier:
7644      inline
7645      virtual
7646      explicit
7647
7648    Returns an IDENTIFIER_NODE corresponding to the keyword used.
7649    Updates DECL_SPECS, if it is non-NULL.  */
7650
7651 static tree
7652 cp_parser_function_specifier_opt (cp_parser* parser,
7653                                   cp_decl_specifier_seq *decl_specs)
7654 {
7655   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7656     {
7657     case RID_INLINE:
7658       if (decl_specs)
7659         ++decl_specs->specs[(int) ds_inline];
7660       break;
7661
7662     case RID_VIRTUAL:
7663       /* 14.5.2.3 [temp.mem]
7664
7665          A member function template shall not be virtual.  */
7666       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7667         error ("templates may not be %<virtual%>");
7668       else if (decl_specs)
7669         ++decl_specs->specs[(int) ds_virtual];
7670       break;
7671
7672     case RID_EXPLICIT:
7673       if (decl_specs)
7674         ++decl_specs->specs[(int) ds_explicit];
7675       break;
7676
7677     default:
7678       return NULL_TREE;
7679     }
7680
7681   /* Consume the token.  */
7682   return cp_lexer_consume_token (parser->lexer)->value;
7683 }
7684
7685 /* Parse a linkage-specification.
7686
7687    linkage-specification:
7688      extern string-literal { declaration-seq [opt] }
7689      extern string-literal declaration  */
7690
7691 static void
7692 cp_parser_linkage_specification (cp_parser* parser)
7693 {
7694   tree linkage;
7695
7696   /* Look for the `extern' keyword.  */
7697   cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7698
7699   /* Look for the string-literal.  */
7700   linkage = cp_parser_string_literal (parser, false, false);
7701
7702   /* Transform the literal into an identifier.  If the literal is a
7703      wide-character string, or contains embedded NULs, then we can't
7704      handle it as the user wants.  */
7705   if (strlen (TREE_STRING_POINTER (linkage))
7706       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
7707     {
7708       cp_parser_error (parser, "invalid linkage-specification");
7709       /* Assume C++ linkage.  */
7710       linkage = lang_name_cplusplus;
7711     }
7712   else
7713     linkage = get_identifier (TREE_STRING_POINTER (linkage));
7714
7715   /* We're now using the new linkage.  */
7716   push_lang_context (linkage);
7717
7718   /* If the next token is a `{', then we're using the first
7719      production.  */
7720   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7721     {
7722       /* Consume the `{' token.  */
7723       cp_lexer_consume_token (parser->lexer);
7724       /* Parse the declarations.  */
7725       cp_parser_declaration_seq_opt (parser);
7726       /* Look for the closing `}'.  */
7727       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7728     }
7729   /* Otherwise, there's just one declaration.  */
7730   else
7731     {
7732       bool saved_in_unbraced_linkage_specification_p;
7733
7734       saved_in_unbraced_linkage_specification_p
7735         = parser->in_unbraced_linkage_specification_p;
7736       parser->in_unbraced_linkage_specification_p = true;
7737       cp_parser_declaration (parser);
7738       parser->in_unbraced_linkage_specification_p
7739         = saved_in_unbraced_linkage_specification_p;
7740     }
7741
7742   /* We're done with the linkage-specification.  */
7743   pop_lang_context ();
7744 }
7745
7746 /* Special member functions [gram.special] */
7747
7748 /* Parse a conversion-function-id.
7749
7750    conversion-function-id:
7751      operator conversion-type-id
7752
7753    Returns an IDENTIFIER_NODE representing the operator.  */
7754
7755 static tree
7756 cp_parser_conversion_function_id (cp_parser* parser)
7757 {
7758   tree type;
7759   tree saved_scope;
7760   tree saved_qualifying_scope;
7761   tree saved_object_scope;
7762   tree pushed_scope = NULL_TREE;
7763
7764   /* Look for the `operator' token.  */
7765   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7766     return error_mark_node;
7767   /* When we parse the conversion-type-id, the current scope will be
7768      reset.  However, we need that information in able to look up the
7769      conversion function later, so we save it here.  */
7770   saved_scope = parser->scope;
7771   saved_qualifying_scope = parser->qualifying_scope;
7772   saved_object_scope = parser->object_scope;
7773   /* We must enter the scope of the class so that the names of
7774      entities declared within the class are available in the
7775      conversion-type-id.  For example, consider:
7776
7777        struct S {
7778          typedef int I;
7779          operator I();
7780        };
7781
7782        S::operator I() { ... }
7783
7784      In order to see that `I' is a type-name in the definition, we
7785      must be in the scope of `S'.  */
7786   if (saved_scope)
7787     pushed_scope = push_scope (saved_scope);
7788   /* Parse the conversion-type-id.  */
7789   type = cp_parser_conversion_type_id (parser);
7790   /* Leave the scope of the class, if any.  */
7791   if (pushed_scope)
7792     pop_scope (pushed_scope);
7793   /* Restore the saved scope.  */
7794   parser->scope = saved_scope;
7795   parser->qualifying_scope = saved_qualifying_scope;
7796   parser->object_scope = saved_object_scope;
7797   /* If the TYPE is invalid, indicate failure.  */
7798   if (type == error_mark_node)
7799     return error_mark_node;
7800   return mangle_conv_op_name_for_type (type);
7801 }
7802
7803 /* Parse a conversion-type-id:
7804
7805    conversion-type-id:
7806      type-specifier-seq conversion-declarator [opt]
7807
7808    Returns the TYPE specified.  */
7809
7810 static tree
7811 cp_parser_conversion_type_id (cp_parser* parser)
7812 {
7813   tree attributes;
7814   cp_decl_specifier_seq type_specifiers;
7815   cp_declarator *declarator;
7816   tree type_specified;
7817
7818   /* Parse the attributes.  */
7819   attributes = cp_parser_attributes_opt (parser);
7820   /* Parse the type-specifiers.  */
7821   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
7822                                 &type_specifiers);
7823   /* If that didn't work, stop.  */
7824   if (type_specifiers.type == error_mark_node)
7825     return error_mark_node;
7826   /* Parse the conversion-declarator.  */
7827   declarator = cp_parser_conversion_declarator_opt (parser);
7828
7829   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
7830                                     /*initialized=*/0, &attributes);
7831   if (attributes)
7832     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
7833   return type_specified;
7834 }
7835
7836 /* Parse an (optional) conversion-declarator.
7837
7838    conversion-declarator:
7839      ptr-operator conversion-declarator [opt]
7840
7841    */
7842
7843 static cp_declarator *
7844 cp_parser_conversion_declarator_opt (cp_parser* parser)
7845 {
7846   enum tree_code code;
7847   tree class_type;
7848   cp_cv_quals cv_quals;
7849
7850   /* We don't know if there's a ptr-operator next, or not.  */
7851   cp_parser_parse_tentatively (parser);
7852   /* Try the ptr-operator.  */
7853   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
7854   /* If it worked, look for more conversion-declarators.  */
7855   if (cp_parser_parse_definitely (parser))
7856     {
7857       cp_declarator *declarator;
7858
7859       /* Parse another optional declarator.  */
7860       declarator = cp_parser_conversion_declarator_opt (parser);
7861
7862       /* Create the representation of the declarator.  */
7863       if (class_type)
7864         declarator = make_ptrmem_declarator (cv_quals, class_type,
7865                                              declarator);
7866       else if (code == INDIRECT_REF)
7867         declarator = make_pointer_declarator (cv_quals, declarator);
7868       else
7869         declarator = make_reference_declarator (cv_quals, declarator);
7870
7871       return declarator;
7872    }
7873
7874   return NULL;
7875 }
7876
7877 /* Parse an (optional) ctor-initializer.
7878
7879    ctor-initializer:
7880      : mem-initializer-list
7881
7882    Returns TRUE iff the ctor-initializer was actually present.  */
7883
7884 static bool
7885 cp_parser_ctor_initializer_opt (cp_parser* parser)
7886 {
7887   /* If the next token is not a `:', then there is no
7888      ctor-initializer.  */
7889   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
7890     {
7891       /* Do default initialization of any bases and members.  */
7892       if (DECL_CONSTRUCTOR_P (current_function_decl))
7893         finish_mem_initializers (NULL_TREE);
7894
7895       return false;
7896     }
7897
7898   /* Consume the `:' token.  */
7899   cp_lexer_consume_token (parser->lexer);
7900   /* And the mem-initializer-list.  */
7901   cp_parser_mem_initializer_list (parser);
7902
7903   return true;
7904 }
7905
7906 /* Parse a mem-initializer-list.
7907
7908    mem-initializer-list:
7909      mem-initializer
7910      mem-initializer , mem-initializer-list  */
7911
7912 static void
7913 cp_parser_mem_initializer_list (cp_parser* parser)
7914 {
7915   tree mem_initializer_list = NULL_TREE;
7916
7917   /* Let the semantic analysis code know that we are starting the
7918      mem-initializer-list.  */
7919   if (!DECL_CONSTRUCTOR_P (current_function_decl))
7920     error ("only constructors take base initializers");
7921
7922   /* Loop through the list.  */
7923   while (true)
7924     {
7925       tree mem_initializer;
7926
7927       /* Parse the mem-initializer.  */
7928       mem_initializer = cp_parser_mem_initializer (parser);
7929       /* Add it to the list, unless it was erroneous.  */
7930       if (mem_initializer != error_mark_node)
7931         {
7932           TREE_CHAIN (mem_initializer) = mem_initializer_list;
7933           mem_initializer_list = mem_initializer;
7934         }
7935       /* If the next token is not a `,', we're done.  */
7936       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7937         break;
7938       /* Consume the `,' token.  */
7939       cp_lexer_consume_token (parser->lexer);
7940     }
7941
7942   /* Perform semantic analysis.  */
7943   if (DECL_CONSTRUCTOR_P (current_function_decl))
7944     finish_mem_initializers (mem_initializer_list);
7945 }
7946
7947 /* Parse a mem-initializer.
7948
7949    mem-initializer:
7950      mem-initializer-id ( expression-list [opt] )
7951
7952    GNU extension:
7953
7954    mem-initializer:
7955      ( expression-list [opt] )
7956
7957    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
7958    class) or FIELD_DECL (for a non-static data member) to initialize;
7959    the TREE_VALUE is the expression-list.  An empty initialization
7960    list is represented by void_list_node.  */
7961
7962 static tree
7963 cp_parser_mem_initializer (cp_parser* parser)
7964 {
7965   tree mem_initializer_id;
7966   tree expression_list;
7967   tree member;
7968
7969   /* Find out what is being initialized.  */
7970   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7971     {
7972       pedwarn ("anachronistic old-style base class initializer");
7973       mem_initializer_id = NULL_TREE;
7974     }
7975   else
7976     mem_initializer_id = cp_parser_mem_initializer_id (parser);
7977   member = expand_member_init (mem_initializer_id);
7978   if (member && !DECL_P (member))
7979     in_base_initializer = 1;
7980
7981   expression_list
7982     = cp_parser_parenthesized_expression_list (parser, false,
7983                                                /*cast_p=*/false,
7984                                                /*non_constant_p=*/NULL);
7985   if (expression_list == error_mark_node)
7986     return error_mark_node;
7987   if (!expression_list)
7988     expression_list = void_type_node;
7989
7990   in_base_initializer = 0;
7991
7992   return member ? build_tree_list (member, expression_list) : error_mark_node;
7993 }
7994
7995 /* Parse a mem-initializer-id.
7996
7997    mem-initializer-id:
7998      :: [opt] nested-name-specifier [opt] class-name
7999      identifier
8000
8001    Returns a TYPE indicating the class to be initializer for the first
8002    production.  Returns an IDENTIFIER_NODE indicating the data member
8003    to be initialized for the second production.  */
8004
8005 static tree
8006 cp_parser_mem_initializer_id (cp_parser* parser)
8007 {
8008   bool global_scope_p;
8009   bool nested_name_specifier_p;
8010   bool template_p = false;
8011   tree id;
8012
8013   /* `typename' is not allowed in this context ([temp.res]).  */
8014   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
8015     {
8016       error ("keyword %<typename%> not allowed in this context (a qualified "
8017              "member initializer is implicitly a type)");
8018       cp_lexer_consume_token (parser->lexer);
8019     }
8020   /* Look for the optional `::' operator.  */
8021   global_scope_p
8022     = (cp_parser_global_scope_opt (parser,
8023                                    /*current_scope_valid_p=*/false)
8024        != NULL_TREE);
8025   /* Look for the optional nested-name-specifier.  The simplest way to
8026      implement:
8027
8028        [temp.res]
8029
8030        The keyword `typename' is not permitted in a base-specifier or
8031        mem-initializer; in these contexts a qualified name that
8032        depends on a template-parameter is implicitly assumed to be a
8033        type name.
8034
8035      is to assume that we have seen the `typename' keyword at this
8036      point.  */
8037   nested_name_specifier_p
8038     = (cp_parser_nested_name_specifier_opt (parser,
8039                                             /*typename_keyword_p=*/true,
8040                                             /*check_dependency_p=*/true,
8041                                             /*type_p=*/true,
8042                                             /*is_declaration=*/true)
8043        != NULL_TREE);
8044   if (nested_name_specifier_p)
8045     template_p = cp_parser_optional_template_keyword (parser);
8046   /* If there is a `::' operator or a nested-name-specifier, then we
8047      are definitely looking for a class-name.  */
8048   if (global_scope_p || nested_name_specifier_p)
8049     return cp_parser_class_name (parser,
8050                                  /*typename_keyword_p=*/true,
8051                                  /*template_keyword_p=*/template_p,
8052                                  none_type,
8053                                  /*check_dependency_p=*/true,
8054                                  /*class_head_p=*/false,
8055                                  /*is_declaration=*/true);
8056   /* Otherwise, we could also be looking for an ordinary identifier.  */
8057   cp_parser_parse_tentatively (parser);
8058   /* Try a class-name.  */
8059   id = cp_parser_class_name (parser,
8060                              /*typename_keyword_p=*/true,
8061                              /*template_keyword_p=*/false,
8062                              none_type,
8063                              /*check_dependency_p=*/true,
8064                              /*class_head_p=*/false,
8065                              /*is_declaration=*/true);
8066   /* If we found one, we're done.  */
8067   if (cp_parser_parse_definitely (parser))
8068     return id;
8069   /* Otherwise, look for an ordinary identifier.  */
8070   return cp_parser_identifier (parser);
8071 }
8072
8073 /* Overloading [gram.over] */
8074
8075 /* Parse an operator-function-id.
8076
8077    operator-function-id:
8078      operator operator
8079
8080    Returns an IDENTIFIER_NODE for the operator which is a
8081    human-readable spelling of the identifier, e.g., `operator +'.  */
8082
8083 static tree
8084 cp_parser_operator_function_id (cp_parser* parser)
8085 {
8086   /* Look for the `operator' keyword.  */
8087   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
8088     return error_mark_node;
8089   /* And then the name of the operator itself.  */
8090   return cp_parser_operator (parser);
8091 }
8092
8093 /* Parse an operator.
8094
8095    operator:
8096      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
8097      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
8098      || ++ -- , ->* -> () []
8099
8100    GNU Extensions:
8101
8102    operator:
8103      <? >? <?= >?=
8104
8105    Returns an IDENTIFIER_NODE for the operator which is a
8106    human-readable spelling of the identifier, e.g., `operator +'.  */
8107
8108 static tree
8109 cp_parser_operator (cp_parser* parser)
8110 {
8111   tree id = NULL_TREE;
8112   cp_token *token;
8113
8114   /* Peek at the next token.  */
8115   token = cp_lexer_peek_token (parser->lexer);
8116   /* Figure out which operator we have.  */
8117   switch (token->type)
8118     {
8119     case CPP_KEYWORD:
8120       {
8121         enum tree_code op;
8122
8123         /* The keyword should be either `new' or `delete'.  */
8124         if (token->keyword == RID_NEW)
8125           op = NEW_EXPR;
8126         else if (token->keyword == RID_DELETE)
8127           op = DELETE_EXPR;
8128         else
8129           break;
8130
8131         /* Consume the `new' or `delete' token.  */
8132         cp_lexer_consume_token (parser->lexer);
8133
8134         /* Peek at the next token.  */
8135         token = cp_lexer_peek_token (parser->lexer);
8136         /* If it's a `[' token then this is the array variant of the
8137            operator.  */
8138         if (token->type == CPP_OPEN_SQUARE)
8139           {
8140             /* Consume the `[' token.  */
8141             cp_lexer_consume_token (parser->lexer);
8142             /* Look for the `]' token.  */
8143             cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8144             id = ansi_opname (op == NEW_EXPR
8145                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
8146           }
8147         /* Otherwise, we have the non-array variant.  */
8148         else
8149           id = ansi_opname (op);
8150
8151         return id;
8152       }
8153
8154     case CPP_PLUS:
8155       id = ansi_opname (PLUS_EXPR);
8156       break;
8157
8158     case CPP_MINUS:
8159       id = ansi_opname (MINUS_EXPR);
8160       break;
8161
8162     case CPP_MULT:
8163       id = ansi_opname (MULT_EXPR);
8164       break;
8165
8166     case CPP_DIV:
8167       id = ansi_opname (TRUNC_DIV_EXPR);
8168       break;
8169
8170     case CPP_MOD:
8171       id = ansi_opname (TRUNC_MOD_EXPR);
8172       break;
8173
8174     case CPP_XOR:
8175       id = ansi_opname (BIT_XOR_EXPR);
8176       break;
8177
8178     case CPP_AND:
8179       id = ansi_opname (BIT_AND_EXPR);
8180       break;
8181
8182     case CPP_OR:
8183       id = ansi_opname (BIT_IOR_EXPR);
8184       break;
8185
8186     case CPP_COMPL:
8187       id = ansi_opname (BIT_NOT_EXPR);
8188       break;
8189
8190     case CPP_NOT:
8191       id = ansi_opname (TRUTH_NOT_EXPR);
8192       break;
8193
8194     case CPP_EQ:
8195       id = ansi_assopname (NOP_EXPR);
8196       break;
8197
8198     case CPP_LESS:
8199       id = ansi_opname (LT_EXPR);
8200       break;
8201
8202     case CPP_GREATER:
8203       id = ansi_opname (GT_EXPR);
8204       break;
8205
8206     case CPP_PLUS_EQ:
8207       id = ansi_assopname (PLUS_EXPR);
8208       break;
8209
8210     case CPP_MINUS_EQ:
8211       id = ansi_assopname (MINUS_EXPR);
8212       break;
8213
8214     case CPP_MULT_EQ:
8215       id = ansi_assopname (MULT_EXPR);
8216       break;
8217
8218     case CPP_DIV_EQ:
8219       id = ansi_assopname (TRUNC_DIV_EXPR);
8220       break;
8221
8222     case CPP_MOD_EQ:
8223       id = ansi_assopname (TRUNC_MOD_EXPR);
8224       break;
8225
8226     case CPP_XOR_EQ:
8227       id = ansi_assopname (BIT_XOR_EXPR);
8228       break;
8229
8230     case CPP_AND_EQ:
8231       id = ansi_assopname (BIT_AND_EXPR);
8232       break;
8233
8234     case CPP_OR_EQ:
8235       id = ansi_assopname (BIT_IOR_EXPR);
8236       break;
8237
8238     case CPP_LSHIFT:
8239       id = ansi_opname (LSHIFT_EXPR);
8240       break;
8241
8242     case CPP_RSHIFT:
8243       id = ansi_opname (RSHIFT_EXPR);
8244       break;
8245
8246     case CPP_LSHIFT_EQ:
8247       id = ansi_assopname (LSHIFT_EXPR);
8248       break;
8249
8250     case CPP_RSHIFT_EQ:
8251       id = ansi_assopname (RSHIFT_EXPR);
8252       break;
8253
8254     case CPP_EQ_EQ:
8255       id = ansi_opname (EQ_EXPR);
8256       break;
8257
8258     case CPP_NOT_EQ:
8259       id = ansi_opname (NE_EXPR);
8260       break;
8261
8262     case CPP_LESS_EQ:
8263       id = ansi_opname (LE_EXPR);
8264       break;
8265
8266     case CPP_GREATER_EQ:
8267       id = ansi_opname (GE_EXPR);
8268       break;
8269
8270     case CPP_AND_AND:
8271       id = ansi_opname (TRUTH_ANDIF_EXPR);
8272       break;
8273
8274     case CPP_OR_OR:
8275       id = ansi_opname (TRUTH_ORIF_EXPR);
8276       break;
8277
8278     case CPP_PLUS_PLUS:
8279       id = ansi_opname (POSTINCREMENT_EXPR);
8280       break;
8281
8282     case CPP_MINUS_MINUS:
8283       id = ansi_opname (PREDECREMENT_EXPR);
8284       break;
8285
8286     case CPP_COMMA:
8287       id = ansi_opname (COMPOUND_EXPR);
8288       break;
8289
8290     case CPP_DEREF_STAR:
8291       id = ansi_opname (MEMBER_REF);
8292       break;
8293
8294     case CPP_DEREF:
8295       id = ansi_opname (COMPONENT_REF);
8296       break;
8297
8298     case CPP_OPEN_PAREN:
8299       /* Consume the `('.  */
8300       cp_lexer_consume_token (parser->lexer);
8301       /* Look for the matching `)'.  */
8302       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8303       return ansi_opname (CALL_EXPR);
8304
8305     case CPP_OPEN_SQUARE:
8306       /* Consume the `['.  */
8307       cp_lexer_consume_token (parser->lexer);
8308       /* Look for the matching `]'.  */
8309       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8310       return ansi_opname (ARRAY_REF);
8311
8312     default:
8313       /* Anything else is an error.  */
8314       break;
8315     }
8316
8317   /* If we have selected an identifier, we need to consume the
8318      operator token.  */
8319   if (id)
8320     cp_lexer_consume_token (parser->lexer);
8321   /* Otherwise, no valid operator name was present.  */
8322   else
8323     {
8324       cp_parser_error (parser, "expected operator");
8325       id = error_mark_node;
8326     }
8327
8328   return id;
8329 }
8330
8331 /* Parse a template-declaration.
8332
8333    template-declaration:
8334      export [opt] template < template-parameter-list > declaration
8335
8336    If MEMBER_P is TRUE, this template-declaration occurs within a
8337    class-specifier.
8338
8339    The grammar rule given by the standard isn't correct.  What
8340    is really meant is:
8341
8342    template-declaration:
8343      export [opt] template-parameter-list-seq
8344        decl-specifier-seq [opt] init-declarator [opt] ;
8345      export [opt] template-parameter-list-seq
8346        function-definition
8347
8348    template-parameter-list-seq:
8349      template-parameter-list-seq [opt]
8350      template < template-parameter-list >  */
8351
8352 static void
8353 cp_parser_template_declaration (cp_parser* parser, bool member_p)
8354 {
8355   /* Check for `export'.  */
8356   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8357     {
8358       /* Consume the `export' token.  */
8359       cp_lexer_consume_token (parser->lexer);
8360       /* Warn that we do not support `export'.  */
8361       warning (0, "keyword %<export%> not implemented, and will be ignored");
8362     }
8363
8364   cp_parser_template_declaration_after_export (parser, member_p);
8365 }
8366
8367 /* Parse a template-parameter-list.
8368
8369    template-parameter-list:
8370      template-parameter
8371      template-parameter-list , template-parameter
8372
8373    Returns a TREE_LIST.  Each node represents a template parameter.
8374    The nodes are connected via their TREE_CHAINs.  */
8375
8376 static tree
8377 cp_parser_template_parameter_list (cp_parser* parser)
8378 {
8379   tree parameter_list = NULL_TREE;
8380
8381   begin_template_parm_list ();
8382   while (true)
8383     {
8384       tree parameter;
8385       cp_token *token;
8386       bool is_non_type;
8387
8388       /* Parse the template-parameter.  */
8389       parameter = cp_parser_template_parameter (parser, &is_non_type);
8390       /* Add it to the list.  */
8391       if (parameter != error_mark_node)
8392         parameter_list = process_template_parm (parameter_list,
8393                                                 parameter,
8394                                                 is_non_type);
8395       else
8396        {
8397          tree err_parm = build_tree_list (parameter, parameter);
8398          TREE_VALUE (err_parm) = error_mark_node;
8399          parameter_list = chainon (parameter_list, err_parm);
8400        }
8401
8402       /* Peek at the next token.  */
8403       token = cp_lexer_peek_token (parser->lexer);
8404       /* If it's not a `,', we're done.  */
8405       if (token->type != CPP_COMMA)
8406         break;
8407       /* Otherwise, consume the `,' token.  */
8408       cp_lexer_consume_token (parser->lexer);
8409     }
8410
8411   return end_template_parm_list (parameter_list);
8412 }
8413
8414 /* Parse a template-parameter.
8415
8416    template-parameter:
8417      type-parameter
8418      parameter-declaration
8419
8420    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
8421    the parameter.  The TREE_PURPOSE is the default value, if any.
8422    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
8423    iff this parameter is a non-type parameter.  */
8424
8425 static tree
8426 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
8427 {
8428   cp_token *token;
8429   cp_parameter_declarator *parameter_declarator;
8430   tree parm;
8431
8432   /* Assume it is a type parameter or a template parameter.  */
8433   *is_non_type = false;
8434   /* Peek at the next token.  */
8435   token = cp_lexer_peek_token (parser->lexer);
8436   /* If it is `class' or `template', we have a type-parameter.  */
8437   if (token->keyword == RID_TEMPLATE)
8438     return cp_parser_type_parameter (parser);
8439   /* If it is `class' or `typename' we do not know yet whether it is a
8440      type parameter or a non-type parameter.  Consider:
8441
8442        template <typename T, typename T::X X> ...
8443
8444      or:
8445
8446        template <class C, class D*> ...
8447
8448      Here, the first parameter is a type parameter, and the second is
8449      a non-type parameter.  We can tell by looking at the token after
8450      the identifier -- if it is a `,', `=', or `>' then we have a type
8451      parameter.  */
8452   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
8453     {
8454       /* Peek at the token after `class' or `typename'.  */
8455       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8456       /* If it's an identifier, skip it.  */
8457       if (token->type == CPP_NAME)
8458         token = cp_lexer_peek_nth_token (parser->lexer, 3);
8459       /* Now, see if the token looks like the end of a template
8460          parameter.  */
8461       if (token->type == CPP_COMMA
8462           || token->type == CPP_EQ
8463           || token->type == CPP_GREATER)
8464         return cp_parser_type_parameter (parser);
8465     }
8466
8467   /* Otherwise, it is a non-type parameter.
8468
8469      [temp.param]
8470
8471      When parsing a default template-argument for a non-type
8472      template-parameter, the first non-nested `>' is taken as the end
8473      of the template parameter-list rather than a greater-than
8474      operator.  */
8475   *is_non_type = true;
8476   parameter_declarator
8477      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
8478                                         /*parenthesized_p=*/NULL);
8479   parm = grokdeclarator (parameter_declarator->declarator,
8480                          &parameter_declarator->decl_specifiers,
8481                          PARM, /*initialized=*/0,
8482                          /*attrlist=*/NULL);
8483   if (parm == error_mark_node)
8484     return error_mark_node;
8485   return build_tree_list (parameter_declarator->default_argument, parm);
8486 }
8487
8488 /* Parse a type-parameter.
8489
8490    type-parameter:
8491      class identifier [opt]
8492      class identifier [opt] = type-id
8493      typename identifier [opt]
8494      typename identifier [opt] = type-id
8495      template < template-parameter-list > class identifier [opt]
8496      template < template-parameter-list > class identifier [opt]
8497        = id-expression
8498
8499    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
8500    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
8501    the declaration of the parameter.  */
8502
8503 static tree
8504 cp_parser_type_parameter (cp_parser* parser)
8505 {
8506   cp_token *token;
8507   tree parameter;
8508
8509   /* Look for a keyword to tell us what kind of parameter this is.  */
8510   token = cp_parser_require (parser, CPP_KEYWORD,
8511                              "`class', `typename', or `template'");
8512   if (!token)
8513     return error_mark_node;
8514
8515   switch (token->keyword)
8516     {
8517     case RID_CLASS:
8518     case RID_TYPENAME:
8519       {
8520         tree identifier;
8521         tree default_argument;
8522
8523         /* If the next token is an identifier, then it names the
8524            parameter.  */
8525         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8526           identifier = cp_parser_identifier (parser);
8527         else
8528           identifier = NULL_TREE;
8529
8530         /* Create the parameter.  */
8531         parameter = finish_template_type_parm (class_type_node, identifier);
8532
8533         /* If the next token is an `=', we have a default argument.  */
8534         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8535           {
8536             /* Consume the `=' token.  */
8537             cp_lexer_consume_token (parser->lexer);
8538             /* Parse the default-argument.  */
8539             push_deferring_access_checks (dk_no_deferred);
8540             default_argument = cp_parser_type_id (parser);
8541             pop_deferring_access_checks ();
8542           }
8543         else
8544           default_argument = NULL_TREE;
8545
8546         /* Create the combined representation of the parameter and the
8547            default argument.  */
8548         parameter = build_tree_list (default_argument, parameter);
8549       }
8550       break;
8551
8552     case RID_TEMPLATE:
8553       {
8554         tree parameter_list;
8555         tree identifier;
8556         tree default_argument;
8557
8558         /* Look for the `<'.  */
8559         cp_parser_require (parser, CPP_LESS, "`<'");
8560         /* Parse the template-parameter-list.  */
8561         parameter_list = cp_parser_template_parameter_list (parser);
8562         /* Look for the `>'.  */
8563         cp_parser_require (parser, CPP_GREATER, "`>'");
8564         /* Look for the `class' keyword.  */
8565         cp_parser_require_keyword (parser, RID_CLASS, "`class'");
8566         /* If the next token is an `=', then there is a
8567            default-argument.  If the next token is a `>', we are at
8568            the end of the parameter-list.  If the next token is a `,',
8569            then we are at the end of this parameter.  */
8570         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8571             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
8572             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8573           {
8574             identifier = cp_parser_identifier (parser);
8575             /* Treat invalid names as if the parameter were nameless.  */
8576             if (identifier == error_mark_node)
8577               identifier = NULL_TREE;
8578           }
8579         else
8580           identifier = NULL_TREE;
8581
8582         /* Create the template parameter.  */
8583         parameter = finish_template_template_parm (class_type_node,
8584                                                    identifier);
8585
8586         /* If the next token is an `=', then there is a
8587            default-argument.  */
8588         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8589           {
8590             bool is_template;
8591
8592             /* Consume the `='.  */
8593             cp_lexer_consume_token (parser->lexer);
8594             /* Parse the id-expression.  */
8595             push_deferring_access_checks (dk_no_deferred);
8596             default_argument
8597               = cp_parser_id_expression (parser,
8598                                          /*template_keyword_p=*/false,
8599                                          /*check_dependency_p=*/true,
8600                                          /*template_p=*/&is_template,
8601                                          /*declarator_p=*/false,
8602                                          /*optional_p=*/false);
8603             if (TREE_CODE (default_argument) == TYPE_DECL)
8604               /* If the id-expression was a template-id that refers to
8605                  a template-class, we already have the declaration here,
8606                  so no further lookup is needed.  */
8607                  ;
8608             else
8609               /* Look up the name.  */
8610               default_argument
8611                 = cp_parser_lookup_name (parser, default_argument,
8612                                          none_type,
8613                                          /*is_template=*/is_template,
8614                                          /*is_namespace=*/false,
8615                                          /*check_dependency=*/true,
8616                                          /*ambiguous_decls=*/NULL);
8617             /* See if the default argument is valid.  */
8618             default_argument
8619               = check_template_template_default_arg (default_argument);
8620             pop_deferring_access_checks ();
8621           }
8622         else
8623           default_argument = NULL_TREE;
8624
8625         /* Create the combined representation of the parameter and the
8626            default argument.  */
8627         parameter = build_tree_list (default_argument, parameter);
8628       }
8629       break;
8630
8631     default:
8632       gcc_unreachable ();
8633       break;
8634     }
8635
8636   return parameter;
8637 }
8638
8639 /* Parse a template-id.
8640
8641    template-id:
8642      template-name < template-argument-list [opt] >
8643
8644    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8645    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8646    returned.  Otherwise, if the template-name names a function, or set
8647    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8648    names a class, returns a TYPE_DECL for the specialization.
8649
8650    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8651    uninstantiated templates.  */
8652
8653 static tree
8654 cp_parser_template_id (cp_parser *parser,
8655                        bool template_keyword_p,
8656                        bool check_dependency_p,
8657                        bool is_declaration)
8658 {
8659   tree template;
8660   tree arguments;
8661   tree template_id;
8662   cp_token_position start_of_id = 0;
8663   tree access_check = NULL_TREE;
8664   cp_token *next_token, *next_token_2;
8665   bool is_identifier;
8666
8667   /* If the next token corresponds to a template-id, there is no need
8668      to reparse it.  */
8669   next_token = cp_lexer_peek_token (parser->lexer);
8670   if (next_token->type == CPP_TEMPLATE_ID)
8671     {
8672       tree value;
8673       tree check;
8674
8675       /* Get the stored value.  */
8676       value = cp_lexer_consume_token (parser->lexer)->value;
8677       /* Perform any access checks that were deferred.  */
8678       for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
8679         perform_or_defer_access_check (TREE_PURPOSE (check),
8680                                        TREE_VALUE (check));
8681       /* Return the stored value.  */
8682       return TREE_VALUE (value);
8683     }
8684
8685   /* Avoid performing name lookup if there is no possibility of
8686      finding a template-id.  */
8687   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8688       || (next_token->type == CPP_NAME
8689           && !cp_parser_nth_token_starts_template_argument_list_p
8690                (parser, 2)))
8691     {
8692       cp_parser_error (parser, "expected template-id");
8693       return error_mark_node;
8694     }
8695
8696   /* Remember where the template-id starts.  */
8697   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
8698     start_of_id = cp_lexer_token_position (parser->lexer, false);
8699
8700   push_deferring_access_checks (dk_deferred);
8701
8702   /* Parse the template-name.  */
8703   is_identifier = false;
8704   template = cp_parser_template_name (parser, template_keyword_p,
8705                                       check_dependency_p,
8706                                       is_declaration,
8707                                       &is_identifier);
8708   if (template == error_mark_node || is_identifier)
8709     {
8710       pop_deferring_access_checks ();
8711       return template;
8712     }
8713
8714   /* If we find the sequence `[:' after a template-name, it's probably
8715      a digraph-typo for `< ::'. Substitute the tokens and check if we can
8716      parse correctly the argument list.  */
8717   next_token = cp_lexer_peek_token (parser->lexer);
8718   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8719   if (next_token->type == CPP_OPEN_SQUARE
8720       && next_token->flags & DIGRAPH
8721       && next_token_2->type == CPP_COLON
8722       && !(next_token_2->flags & PREV_WHITE))
8723     {
8724       cp_parser_parse_tentatively (parser);
8725       /* Change `:' into `::'.  */
8726       next_token_2->type = CPP_SCOPE;
8727       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8728          CPP_LESS.  */
8729       cp_lexer_consume_token (parser->lexer);
8730       /* Parse the arguments.  */
8731       arguments = cp_parser_enclosed_template_argument_list (parser);
8732       if (!cp_parser_parse_definitely (parser))
8733         {
8734           /* If we couldn't parse an argument list, then we revert our changes
8735              and return simply an error. Maybe this is not a template-id
8736              after all.  */
8737           next_token_2->type = CPP_COLON;
8738           cp_parser_error (parser, "expected %<<%>");
8739           pop_deferring_access_checks ();
8740           return error_mark_node;
8741         }
8742       /* Otherwise, emit an error about the invalid digraph, but continue
8743          parsing because we got our argument list.  */
8744       pedwarn ("%<<::%> cannot begin a template-argument list");
8745       inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
8746               "between %<<%> and %<::%>");
8747       if (!flag_permissive)
8748         {
8749           static bool hint;
8750           if (!hint)
8751             {
8752               inform ("(if you use -fpermissive G++ will accept your code)");
8753               hint = true;
8754             }
8755         }
8756     }
8757   else
8758     {
8759       /* Look for the `<' that starts the template-argument-list.  */
8760       if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8761         {
8762           pop_deferring_access_checks ();
8763           return error_mark_node;
8764         }
8765       /* Parse the arguments.  */
8766       arguments = cp_parser_enclosed_template_argument_list (parser);
8767     }
8768
8769   /* Build a representation of the specialization.  */
8770   if (TREE_CODE (template) == IDENTIFIER_NODE)
8771     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8772   else if (DECL_CLASS_TEMPLATE_P (template)
8773            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8774     {
8775       bool entering_scope;
8776       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
8777          template (rather than some instantiation thereof) only if
8778          is not nested within some other construct.  For example, in
8779          "template <typename T> void f(T) { A<T>::", A<T> is just an
8780          instantiation of A.  */
8781       entering_scope = (template_parm_scope_p ()
8782                         && cp_lexer_next_token_is (parser->lexer,
8783                                                    CPP_SCOPE));
8784       template_id
8785         = finish_template_type (template, arguments, entering_scope);
8786     }
8787   else
8788     {
8789       /* If it's not a class-template or a template-template, it should be
8790          a function-template.  */
8791       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8792                    || TREE_CODE (template) == OVERLOAD
8793                    || BASELINK_P (template)));
8794
8795       template_id = lookup_template_function (template, arguments);
8796     }
8797
8798   /* Retrieve any deferred checks.  Do not pop this access checks yet
8799      so the memory will not be reclaimed during token replacing below.  */
8800   access_check = get_deferred_access_checks ();
8801
8802   /* If parsing tentatively, replace the sequence of tokens that makes
8803      up the template-id with a CPP_TEMPLATE_ID token.  That way,
8804      should we re-parse the token stream, we will not have to repeat
8805      the effort required to do the parse, nor will we issue duplicate
8806      error messages about problems during instantiation of the
8807      template.  */
8808   if (start_of_id)
8809     {
8810       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
8811
8812       /* Reset the contents of the START_OF_ID token.  */
8813       token->type = CPP_TEMPLATE_ID;
8814       token->value = build_tree_list (access_check, template_id);
8815       token->keyword = RID_MAX;
8816
8817       /* Purge all subsequent tokens.  */
8818       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
8819
8820       /* ??? Can we actually assume that, if template_id ==
8821          error_mark_node, we will have issued a diagnostic to the
8822          user, as opposed to simply marking the tentative parse as
8823          failed?  */
8824       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
8825         error ("parse error in template argument list");
8826     }
8827
8828   pop_deferring_access_checks ();
8829   return template_id;
8830 }
8831
8832 /* Parse a template-name.
8833
8834    template-name:
8835      identifier
8836
8837    The standard should actually say:
8838
8839    template-name:
8840      identifier
8841      operator-function-id
8842
8843    A defect report has been filed about this issue.
8844
8845    A conversion-function-id cannot be a template name because they cannot
8846    be part of a template-id. In fact, looking at this code:
8847
8848    a.operator K<int>()
8849
8850    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
8851    It is impossible to call a templated conversion-function-id with an
8852    explicit argument list, since the only allowed template parameter is
8853    the type to which it is converting.
8854
8855    If TEMPLATE_KEYWORD_P is true, then we have just seen the
8856    `template' keyword, in a construction like:
8857
8858      T::template f<3>()
8859
8860    In that case `f' is taken to be a template-name, even though there
8861    is no way of knowing for sure.
8862
8863    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
8864    name refers to a set of overloaded functions, at least one of which
8865    is a template, or an IDENTIFIER_NODE with the name of the template,
8866    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
8867    names are looked up inside uninstantiated templates.  */
8868
8869 static tree
8870 cp_parser_template_name (cp_parser* parser,
8871                          bool template_keyword_p,
8872                          bool check_dependency_p,
8873                          bool is_declaration,
8874                          bool *is_identifier)
8875 {
8876   tree identifier;
8877   tree decl;
8878   tree fns;
8879
8880   /* If the next token is `operator', then we have either an
8881      operator-function-id or a conversion-function-id.  */
8882   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
8883     {
8884       /* We don't know whether we're looking at an
8885          operator-function-id or a conversion-function-id.  */
8886       cp_parser_parse_tentatively (parser);
8887       /* Try an operator-function-id.  */
8888       identifier = cp_parser_operator_function_id (parser);
8889       /* If that didn't work, try a conversion-function-id.  */
8890       if (!cp_parser_parse_definitely (parser))
8891         {
8892           cp_parser_error (parser, "expected template-name");
8893           return error_mark_node;
8894         }
8895     }
8896   /* Look for the identifier.  */
8897   else
8898     identifier = cp_parser_identifier (parser);
8899
8900   /* If we didn't find an identifier, we don't have a template-id.  */
8901   if (identifier == error_mark_node)
8902     return error_mark_node;
8903
8904   /* If the name immediately followed the `template' keyword, then it
8905      is a template-name.  However, if the next token is not `<', then
8906      we do not treat it as a template-name, since it is not being used
8907      as part of a template-id.  This enables us to handle constructs
8908      like:
8909
8910        template <typename T> struct S { S(); };
8911        template <typename T> S<T>::S();
8912
8913      correctly.  We would treat `S' as a template -- if it were `S<T>'
8914      -- but we do not if there is no `<'.  */
8915
8916   if (processing_template_decl
8917       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
8918     {
8919       /* In a declaration, in a dependent context, we pretend that the
8920          "template" keyword was present in order to improve error
8921          recovery.  For example, given:
8922
8923            template <typename T> void f(T::X<int>);
8924
8925          we want to treat "X<int>" as a template-id.  */
8926       if (is_declaration
8927           && !template_keyword_p
8928           && parser->scope && TYPE_P (parser->scope)
8929           && check_dependency_p
8930           && dependent_type_p (parser->scope)
8931           /* Do not do this for dtors (or ctors), since they never
8932              need the template keyword before their name.  */
8933           && !constructor_name_p (identifier, parser->scope))
8934         {
8935           cp_token_position start = 0;
8936
8937           /* Explain what went wrong.  */
8938           error ("non-template %qD used as template", identifier);
8939           inform ("use %<%T::template %D%> to indicate that it is a template",
8940                   parser->scope, identifier);
8941           /* If parsing tentatively, find the location of the "<" token.  */
8942           if (cp_parser_simulate_error (parser))
8943             start = cp_lexer_token_position (parser->lexer, true);
8944           /* Parse the template arguments so that we can issue error
8945              messages about them.  */
8946           cp_lexer_consume_token (parser->lexer);
8947           cp_parser_enclosed_template_argument_list (parser);
8948           /* Skip tokens until we find a good place from which to
8949              continue parsing.  */
8950           cp_parser_skip_to_closing_parenthesis (parser,
8951                                                  /*recovering=*/true,
8952                                                  /*or_comma=*/true,
8953                                                  /*consume_paren=*/false);
8954           /* If parsing tentatively, permanently remove the
8955              template argument list.  That will prevent duplicate
8956              error messages from being issued about the missing
8957              "template" keyword.  */
8958           if (start)
8959             cp_lexer_purge_tokens_after (parser->lexer, start);
8960           if (is_identifier)
8961             *is_identifier = true;
8962           return identifier;
8963         }
8964
8965       /* If the "template" keyword is present, then there is generally
8966          no point in doing name-lookup, so we just return IDENTIFIER.
8967          But, if the qualifying scope is non-dependent then we can
8968          (and must) do name-lookup normally.  */
8969       if (template_keyword_p
8970           && (!parser->scope
8971               || (TYPE_P (parser->scope)
8972                   && dependent_type_p (parser->scope))))
8973         return identifier;
8974     }
8975
8976   /* Look up the name.  */
8977   decl = cp_parser_lookup_name (parser, identifier,
8978                                 none_type,
8979                                 /*is_template=*/false,
8980                                 /*is_namespace=*/false,
8981                                 check_dependency_p,
8982                                 /*ambiguous_decls=*/NULL);
8983   decl = maybe_get_template_decl_from_type_decl (decl);
8984
8985   /* If DECL is a template, then the name was a template-name.  */
8986   if (TREE_CODE (decl) == TEMPLATE_DECL)
8987     ;
8988   else
8989     {
8990       tree fn = NULL_TREE;
8991
8992       /* The standard does not explicitly indicate whether a name that
8993          names a set of overloaded declarations, some of which are
8994          templates, is a template-name.  However, such a name should
8995          be a template-name; otherwise, there is no way to form a
8996          template-id for the overloaded templates.  */
8997       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
8998       if (TREE_CODE (fns) == OVERLOAD)
8999         for (fn = fns; fn; fn = OVL_NEXT (fn))
9000           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
9001             break;
9002
9003       if (!fn)
9004         {
9005           /* The name does not name a template.  */
9006           cp_parser_error (parser, "expected template-name");
9007           return error_mark_node;
9008         }
9009     }
9010
9011   /* If DECL is dependent, and refers to a function, then just return
9012      its name; we will look it up again during template instantiation.  */
9013   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
9014     {
9015       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
9016       if (TYPE_P (scope) && dependent_type_p (scope))
9017         return identifier;
9018     }
9019
9020   return decl;
9021 }
9022
9023 /* Parse a template-argument-list.
9024
9025    template-argument-list:
9026      template-argument
9027      template-argument-list , template-argument
9028
9029    Returns a TREE_VEC containing the arguments.  */
9030
9031 static tree
9032 cp_parser_template_argument_list (cp_parser* parser)
9033 {
9034   tree fixed_args[10];
9035   unsigned n_args = 0;
9036   unsigned alloced = 10;
9037   tree *arg_ary = fixed_args;
9038   tree vec;
9039   bool saved_in_template_argument_list_p;
9040   bool saved_ice_p;
9041   bool saved_non_ice_p;
9042
9043   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
9044   parser->in_template_argument_list_p = true;
9045   /* Even if the template-id appears in an integral
9046      constant-expression, the contents of the argument list do
9047      not.  */
9048   saved_ice_p = parser->integral_constant_expression_p;
9049   parser->integral_constant_expression_p = false;
9050   saved_non_ice_p = parser->non_integral_constant_expression_p;
9051   parser->non_integral_constant_expression_p = false;
9052   /* Parse the arguments.  */
9053   do
9054     {
9055       tree argument;
9056
9057       if (n_args)
9058         /* Consume the comma.  */
9059         cp_lexer_consume_token (parser->lexer);
9060
9061       /* Parse the template-argument.  */
9062       argument = cp_parser_template_argument (parser);
9063       if (n_args == alloced)
9064         {
9065           alloced *= 2;
9066
9067           if (arg_ary == fixed_args)
9068             {
9069               arg_ary = XNEWVEC (tree, alloced);
9070               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
9071             }
9072           else
9073             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
9074         }
9075       arg_ary[n_args++] = argument;
9076     }
9077   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
9078
9079   vec = make_tree_vec (n_args);
9080
9081   while (n_args--)
9082     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
9083
9084   if (arg_ary != fixed_args)
9085     free (arg_ary);
9086   parser->non_integral_constant_expression_p = saved_non_ice_p;
9087   parser->integral_constant_expression_p = saved_ice_p;
9088   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
9089   return vec;
9090 }
9091
9092 /* Parse a template-argument.
9093
9094    template-argument:
9095      assignment-expression
9096      type-id
9097      id-expression
9098
9099    The representation is that of an assignment-expression, type-id, or
9100    id-expression -- except that the qualified id-expression is
9101    evaluated, so that the value returned is either a DECL or an
9102    OVERLOAD.
9103
9104    Although the standard says "assignment-expression", it forbids
9105    throw-expressions or assignments in the template argument.
9106    Therefore, we use "conditional-expression" instead.  */
9107
9108 static tree
9109 cp_parser_template_argument (cp_parser* parser)
9110 {
9111   tree argument;
9112   bool template_p;
9113   bool address_p;
9114   bool maybe_type_id = false;
9115   cp_token *token;
9116   cp_id_kind idk;
9117
9118   /* There's really no way to know what we're looking at, so we just
9119      try each alternative in order.
9120
9121        [temp.arg]
9122
9123        In a template-argument, an ambiguity between a type-id and an
9124        expression is resolved to a type-id, regardless of the form of
9125        the corresponding template-parameter.
9126
9127      Therefore, we try a type-id first.  */
9128   cp_parser_parse_tentatively (parser);
9129   argument = cp_parser_type_id (parser);
9130   /* If there was no error parsing the type-id but the next token is a '>>',
9131      we probably found a typo for '> >'. But there are type-id which are
9132      also valid expressions. For instance:
9133
9134      struct X { int operator >> (int); };
9135      template <int V> struct Foo {};
9136      Foo<X () >> 5> r;
9137
9138      Here 'X()' is a valid type-id of a function type, but the user just
9139      wanted to write the expression "X() >> 5". Thus, we remember that we
9140      found a valid type-id, but we still try to parse the argument as an
9141      expression to see what happens.  */
9142   if (!cp_parser_error_occurred (parser)
9143       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
9144     {
9145       maybe_type_id = true;
9146       cp_parser_abort_tentative_parse (parser);
9147     }
9148   else
9149     {
9150       /* If the next token isn't a `,' or a `>', then this argument wasn't
9151       really finished. This means that the argument is not a valid
9152       type-id.  */
9153       if (!cp_parser_next_token_ends_template_argument_p (parser))
9154         cp_parser_error (parser, "expected template-argument");
9155       /* If that worked, we're done.  */
9156       if (cp_parser_parse_definitely (parser))
9157         return argument;
9158     }
9159   /* We're still not sure what the argument will be.  */
9160   cp_parser_parse_tentatively (parser);
9161   /* Try a template.  */
9162   argument = cp_parser_id_expression (parser,
9163                                       /*template_keyword_p=*/false,
9164                                       /*check_dependency_p=*/true,
9165                                       &template_p,
9166                                       /*declarator_p=*/false,
9167                                       /*optional_p=*/false);
9168   /* If the next token isn't a `,' or a `>', then this argument wasn't
9169      really finished.  */
9170   if (!cp_parser_next_token_ends_template_argument_p (parser))
9171     cp_parser_error (parser, "expected template-argument");
9172   if (!cp_parser_error_occurred (parser))
9173     {
9174       /* Figure out what is being referred to.  If the id-expression
9175          was for a class template specialization, then we will have a
9176          TYPE_DECL at this point.  There is no need to do name lookup
9177          at this point in that case.  */
9178       if (TREE_CODE (argument) != TYPE_DECL)
9179         argument = cp_parser_lookup_name (parser, argument,
9180                                           none_type,
9181                                           /*is_template=*/template_p,
9182                                           /*is_namespace=*/false,
9183                                           /*check_dependency=*/true,
9184                                           /*ambiguous_decls=*/NULL);
9185       if (TREE_CODE (argument) != TEMPLATE_DECL
9186           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
9187         cp_parser_error (parser, "expected template-name");
9188     }
9189   if (cp_parser_parse_definitely (parser))
9190     return argument;
9191   /* It must be a non-type argument.  There permitted cases are given
9192      in [temp.arg.nontype]:
9193
9194      -- an integral constant-expression of integral or enumeration
9195         type; or
9196
9197      -- the name of a non-type template-parameter; or
9198
9199      -- the name of an object or function with external linkage...
9200
9201      -- the address of an object or function with external linkage...
9202
9203      -- a pointer to member...  */
9204   /* Look for a non-type template parameter.  */
9205   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9206     {
9207       cp_parser_parse_tentatively (parser);
9208       argument = cp_parser_primary_expression (parser,
9209                                                /*adress_p=*/false,
9210                                                /*cast_p=*/false,
9211                                                /*template_arg_p=*/true,
9212                                                &idk);
9213       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
9214           || !cp_parser_next_token_ends_template_argument_p (parser))
9215         cp_parser_simulate_error (parser);
9216       if (cp_parser_parse_definitely (parser))
9217         return argument;
9218     }
9219
9220   /* If the next token is "&", the argument must be the address of an
9221      object or function with external linkage.  */
9222   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
9223   if (address_p)
9224     cp_lexer_consume_token (parser->lexer);
9225   /* See if we might have an id-expression.  */
9226   token = cp_lexer_peek_token (parser->lexer);
9227   if (token->type == CPP_NAME
9228       || token->keyword == RID_OPERATOR
9229       || token->type == CPP_SCOPE
9230       || token->type == CPP_TEMPLATE_ID
9231       || token->type == CPP_NESTED_NAME_SPECIFIER)
9232     {
9233       cp_parser_parse_tentatively (parser);
9234       argument = cp_parser_primary_expression (parser,
9235                                                address_p,
9236                                                /*cast_p=*/false,
9237                                                /*template_arg_p=*/true,
9238                                                &idk);
9239       if (cp_parser_error_occurred (parser)
9240           || !cp_parser_next_token_ends_template_argument_p (parser))
9241         cp_parser_abort_tentative_parse (parser);
9242       else
9243         {
9244           if (TREE_CODE (argument) == INDIRECT_REF)
9245             {
9246               gcc_assert (REFERENCE_REF_P (argument));
9247               argument = TREE_OPERAND (argument, 0);
9248             }
9249
9250           if (TREE_CODE (argument) == VAR_DECL)
9251             {
9252               /* A variable without external linkage might still be a
9253                  valid constant-expression, so no error is issued here
9254                  if the external-linkage check fails.  */
9255               if (!DECL_EXTERNAL_LINKAGE_P (argument))
9256                 cp_parser_simulate_error (parser);
9257             }
9258           else if (is_overloaded_fn (argument))
9259             /* All overloaded functions are allowed; if the external
9260                linkage test does not pass, an error will be issued
9261                later.  */
9262             ;
9263           else if (address_p
9264                    && (TREE_CODE (argument) == OFFSET_REF
9265                        || TREE_CODE (argument) == SCOPE_REF))
9266             /* A pointer-to-member.  */
9267             ;
9268           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
9269             ;
9270           else
9271             cp_parser_simulate_error (parser);
9272
9273           if (cp_parser_parse_definitely (parser))
9274             {
9275               if (address_p)
9276                 argument = build_x_unary_op (ADDR_EXPR, argument);
9277               return argument;
9278             }
9279         }
9280     }
9281   /* If the argument started with "&", there are no other valid
9282      alternatives at this point.  */
9283   if (address_p)
9284     {
9285       cp_parser_error (parser, "invalid non-type template argument");
9286       return error_mark_node;
9287     }
9288
9289   /* If the argument wasn't successfully parsed as a type-id followed
9290      by '>>', the argument can only be a constant expression now.
9291      Otherwise, we try parsing the constant-expression tentatively,
9292      because the argument could really be a type-id.  */
9293   if (maybe_type_id)
9294     cp_parser_parse_tentatively (parser);
9295   argument = cp_parser_constant_expression (parser,
9296                                             /*allow_non_constant_p=*/false,
9297                                             /*non_constant_p=*/NULL);
9298   argument = fold_non_dependent_expr (argument);
9299   if (!maybe_type_id)
9300     return argument;
9301   if (!cp_parser_next_token_ends_template_argument_p (parser))
9302     cp_parser_error (parser, "expected template-argument");
9303   if (cp_parser_parse_definitely (parser))
9304     return argument;
9305   /* We did our best to parse the argument as a non type-id, but that
9306      was the only alternative that matched (albeit with a '>' after
9307      it). We can assume it's just a typo from the user, and a
9308      diagnostic will then be issued.  */
9309   return cp_parser_type_id (parser);
9310 }
9311
9312 /* Parse an explicit-instantiation.
9313
9314    explicit-instantiation:
9315      template declaration
9316
9317    Although the standard says `declaration', what it really means is:
9318
9319    explicit-instantiation:
9320      template decl-specifier-seq [opt] declarator [opt] ;
9321
9322    Things like `template int S<int>::i = 5, int S<double>::j;' are not
9323    supposed to be allowed.  A defect report has been filed about this
9324    issue.
9325
9326    GNU Extension:
9327
9328    explicit-instantiation:
9329      storage-class-specifier template
9330        decl-specifier-seq [opt] declarator [opt] ;
9331      function-specifier template
9332        decl-specifier-seq [opt] declarator [opt] ;  */
9333
9334 static void
9335 cp_parser_explicit_instantiation (cp_parser* parser)
9336 {
9337   int declares_class_or_enum;
9338   cp_decl_specifier_seq decl_specifiers;
9339   tree extension_specifier = NULL_TREE;
9340
9341   /* Look for an (optional) storage-class-specifier or
9342      function-specifier.  */
9343   if (cp_parser_allow_gnu_extensions_p (parser))
9344     {
9345       extension_specifier
9346         = cp_parser_storage_class_specifier_opt (parser);
9347       if (!extension_specifier)
9348         extension_specifier
9349           = cp_parser_function_specifier_opt (parser,
9350                                               /*decl_specs=*/NULL);
9351     }
9352
9353   /* Look for the `template' keyword.  */
9354   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9355   /* Let the front end know that we are processing an explicit
9356      instantiation.  */
9357   begin_explicit_instantiation ();
9358   /* [temp.explicit] says that we are supposed to ignore access
9359      control while processing explicit instantiation directives.  */
9360   push_deferring_access_checks (dk_no_check);
9361   /* Parse a decl-specifier-seq.  */
9362   cp_parser_decl_specifier_seq (parser,
9363                                 CP_PARSER_FLAGS_OPTIONAL,
9364                                 &decl_specifiers,
9365                                 &declares_class_or_enum);
9366   /* If there was exactly one decl-specifier, and it declared a class,
9367      and there's no declarator, then we have an explicit type
9368      instantiation.  */
9369   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
9370     {
9371       tree type;
9372
9373       type = check_tag_decl (&decl_specifiers);
9374       /* Turn access control back on for names used during
9375          template instantiation.  */
9376       pop_deferring_access_checks ();
9377       if (type)
9378         do_type_instantiation (type, extension_specifier,
9379                                /*complain=*/tf_error);
9380     }
9381   else
9382     {
9383       cp_declarator *declarator;
9384       tree decl;
9385
9386       /* Parse the declarator.  */
9387       declarator
9388         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9389                                 /*ctor_dtor_or_conv_p=*/NULL,
9390                                 /*parenthesized_p=*/NULL,
9391                                 /*member_p=*/false);
9392       if (declares_class_or_enum & 2)
9393         cp_parser_check_for_definition_in_return_type (declarator,
9394                                                        decl_specifiers.type);
9395       if (declarator != cp_error_declarator)
9396         {
9397           decl = grokdeclarator (declarator, &decl_specifiers,
9398                                  NORMAL, 0, &decl_specifiers.attributes);
9399           /* Turn access control back on for names used during
9400              template instantiation.  */
9401           pop_deferring_access_checks ();
9402           /* Do the explicit instantiation.  */
9403           do_decl_instantiation (decl, extension_specifier);
9404         }
9405       else
9406         {
9407           pop_deferring_access_checks ();
9408           /* Skip the body of the explicit instantiation.  */
9409           cp_parser_skip_to_end_of_statement (parser);
9410         }
9411     }
9412   /* We're done with the instantiation.  */
9413   end_explicit_instantiation ();
9414
9415   cp_parser_consume_semicolon_at_end_of_statement (parser);
9416 }
9417
9418 /* Parse an explicit-specialization.
9419
9420    explicit-specialization:
9421      template < > declaration
9422
9423    Although the standard says `declaration', what it really means is:
9424
9425    explicit-specialization:
9426      template <> decl-specifier [opt] init-declarator [opt] ;
9427      template <> function-definition
9428      template <> explicit-specialization
9429      template <> template-declaration  */
9430
9431 static void
9432 cp_parser_explicit_specialization (cp_parser* parser)
9433 {
9434   bool need_lang_pop;
9435   /* Look for the `template' keyword.  */
9436   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9437   /* Look for the `<'.  */
9438   cp_parser_require (parser, CPP_LESS, "`<'");
9439   /* Look for the `>'.  */
9440   cp_parser_require (parser, CPP_GREATER, "`>'");
9441   /* We have processed another parameter list.  */
9442   ++parser->num_template_parameter_lists;
9443   /* [temp]
9444
9445      A template ... explicit specialization ... shall not have C
9446      linkage.  */
9447   if (current_lang_name == lang_name_c)
9448     {
9449       error ("template specialization with C linkage");
9450       /* Give it C++ linkage to avoid confusing other parts of the
9451          front end.  */
9452       push_lang_context (lang_name_cplusplus);
9453       need_lang_pop = true;
9454     }
9455   else
9456     need_lang_pop = false;
9457   /* Let the front end know that we are beginning a specialization.  */
9458   if (!begin_specialization ())
9459     {
9460       end_specialization ();
9461       cp_parser_skip_to_end_of_block_or_statement (parser);
9462       return;
9463     }
9464
9465   /* If the next keyword is `template', we need to figure out whether
9466      or not we're looking a template-declaration.  */
9467   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
9468     {
9469       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
9470           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
9471         cp_parser_template_declaration_after_export (parser,
9472                                                      /*member_p=*/false);
9473       else
9474         cp_parser_explicit_specialization (parser);
9475     }
9476   else
9477     /* Parse the dependent declaration.  */
9478     cp_parser_single_declaration (parser,
9479                                   /*checks=*/NULL_TREE,
9480                                   /*member_p=*/false,
9481                                   /*friend_p=*/NULL);
9482   /* We're done with the specialization.  */
9483   end_specialization ();
9484   /* For the erroneous case of a template with C linkage, we pushed an
9485      implicit C++ linkage scope; exit that scope now.  */
9486   if (need_lang_pop)
9487     pop_lang_context ();
9488   /* We're done with this parameter list.  */
9489   --parser->num_template_parameter_lists;
9490 }
9491
9492 /* Parse a type-specifier.
9493
9494    type-specifier:
9495      simple-type-specifier
9496      class-specifier
9497      enum-specifier
9498      elaborated-type-specifier
9499      cv-qualifier
9500
9501    GNU Extension:
9502
9503    type-specifier:
9504      __complex__
9505
9506    Returns a representation of the type-specifier.  For a
9507    class-specifier, enum-specifier, or elaborated-type-specifier, a
9508    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
9509
9510    The parser flags FLAGS is used to control type-specifier parsing.
9511
9512    If IS_DECLARATION is TRUE, then this type-specifier is appearing
9513    in a decl-specifier-seq.
9514
9515    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
9516    class-specifier, enum-specifier, or elaborated-type-specifier, then
9517    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
9518    if a type is declared; 2 if it is defined.  Otherwise, it is set to
9519    zero.
9520
9521    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
9522    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
9523    is set to FALSE.  */
9524
9525 static tree
9526 cp_parser_type_specifier (cp_parser* parser,
9527                           cp_parser_flags flags,
9528                           cp_decl_specifier_seq *decl_specs,
9529                           bool is_declaration,
9530                           int* declares_class_or_enum,
9531                           bool* is_cv_qualifier)
9532 {
9533   tree type_spec = NULL_TREE;
9534   cp_token *token;
9535   enum rid keyword;
9536   cp_decl_spec ds = ds_last;
9537
9538   /* Assume this type-specifier does not declare a new type.  */
9539   if (declares_class_or_enum)
9540     *declares_class_or_enum = 0;
9541   /* And that it does not specify a cv-qualifier.  */
9542   if (is_cv_qualifier)
9543     *is_cv_qualifier = false;
9544   /* Peek at the next token.  */
9545   token = cp_lexer_peek_token (parser->lexer);
9546
9547   /* If we're looking at a keyword, we can use that to guide the
9548      production we choose.  */
9549   keyword = token->keyword;
9550   switch (keyword)
9551     {
9552     case RID_ENUM:
9553       /* Look for the enum-specifier.  */
9554       type_spec = cp_parser_enum_specifier (parser);
9555       /* If that worked, we're done.  */
9556       if (type_spec)
9557         {
9558           if (declares_class_or_enum)
9559             *declares_class_or_enum = 2;
9560           if (decl_specs)
9561             cp_parser_set_decl_spec_type (decl_specs,
9562                                           type_spec,
9563                                           /*user_defined_p=*/true);
9564           return type_spec;
9565         }
9566       else
9567         goto elaborated_type_specifier;
9568
9569       /* Any of these indicate either a class-specifier, or an
9570          elaborated-type-specifier.  */
9571     case RID_CLASS:
9572     case RID_STRUCT:
9573     case RID_UNION:
9574       /* Parse tentatively so that we can back up if we don't find a
9575          class-specifier.  */
9576       cp_parser_parse_tentatively (parser);
9577       /* Look for the class-specifier.  */
9578       type_spec = cp_parser_class_specifier (parser);
9579       /* If that worked, we're done.  */
9580       if (cp_parser_parse_definitely (parser))
9581         {
9582           if (declares_class_or_enum)
9583             *declares_class_or_enum = 2;
9584           if (decl_specs)
9585             cp_parser_set_decl_spec_type (decl_specs,
9586                                           type_spec,
9587                                           /*user_defined_p=*/true);
9588           return type_spec;
9589         }
9590
9591       /* Fall through.  */
9592     elaborated_type_specifier:
9593       /* We're declaring (not defining) a class or enum.  */
9594       if (declares_class_or_enum)
9595         *declares_class_or_enum = 1;
9596
9597       /* Fall through.  */
9598     case RID_TYPENAME:
9599       /* Look for an elaborated-type-specifier.  */
9600       type_spec
9601         = (cp_parser_elaborated_type_specifier
9602            (parser,
9603             decl_specs && decl_specs->specs[(int) ds_friend],
9604             is_declaration));
9605       if (decl_specs)
9606         cp_parser_set_decl_spec_type (decl_specs,
9607                                       type_spec,
9608                                       /*user_defined_p=*/true);
9609       return type_spec;
9610
9611     case RID_CONST:
9612       ds = ds_const;
9613       if (is_cv_qualifier)
9614         *is_cv_qualifier = true;
9615       break;
9616
9617     case RID_VOLATILE:
9618       ds = ds_volatile;
9619       if (is_cv_qualifier)
9620         *is_cv_qualifier = true;
9621       break;
9622
9623     case RID_RESTRICT:
9624       ds = ds_restrict;
9625       if (is_cv_qualifier)
9626         *is_cv_qualifier = true;
9627       break;
9628
9629     case RID_COMPLEX:
9630       /* The `__complex__' keyword is a GNU extension.  */
9631       ds = ds_complex;
9632       break;
9633
9634     default:
9635       break;
9636     }
9637
9638   /* Handle simple keywords.  */
9639   if (ds != ds_last)
9640     {
9641       if (decl_specs)
9642         {
9643           ++decl_specs->specs[(int)ds];
9644           decl_specs->any_specifiers_p = true;
9645         }
9646       return cp_lexer_consume_token (parser->lexer)->value;
9647     }
9648
9649   /* If we do not already have a type-specifier, assume we are looking
9650      at a simple-type-specifier.  */
9651   type_spec = cp_parser_simple_type_specifier (parser,
9652                                                decl_specs,
9653                                                flags);
9654
9655   /* If we didn't find a type-specifier, and a type-specifier was not
9656      optional in this context, issue an error message.  */
9657   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9658     {
9659       cp_parser_error (parser, "expected type specifier");
9660       return error_mark_node;
9661     }
9662
9663   return type_spec;
9664 }
9665
9666 /* Parse a simple-type-specifier.
9667
9668    simple-type-specifier:
9669      :: [opt] nested-name-specifier [opt] type-name
9670      :: [opt] nested-name-specifier template template-id
9671      char
9672      wchar_t
9673      bool
9674      short
9675      int
9676      long
9677      signed
9678      unsigned
9679      float
9680      double
9681      void
9682
9683    GNU Extension:
9684
9685    simple-type-specifier:
9686      __typeof__ unary-expression
9687      __typeof__ ( type-id )
9688
9689    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
9690    appropriately updated.  */
9691
9692 static tree
9693 cp_parser_simple_type_specifier (cp_parser* parser,
9694                                  cp_decl_specifier_seq *decl_specs,
9695                                  cp_parser_flags flags)
9696 {
9697   tree type = NULL_TREE;
9698   cp_token *token;
9699
9700   /* Peek at the next token.  */
9701   token = cp_lexer_peek_token (parser->lexer);
9702
9703   /* If we're looking at a keyword, things are easy.  */
9704   switch (token->keyword)
9705     {
9706     case RID_CHAR:
9707       if (decl_specs)
9708         decl_specs->explicit_char_p = true;
9709       type = char_type_node;
9710       break;
9711     case RID_WCHAR:
9712       type = wchar_type_node;
9713       break;
9714     case RID_BOOL:
9715       type = boolean_type_node;
9716       break;
9717     case RID_SHORT:
9718       if (decl_specs)
9719         ++decl_specs->specs[(int) ds_short];
9720       type = short_integer_type_node;
9721       break;
9722     case RID_INT:
9723       if (decl_specs)
9724         decl_specs->explicit_int_p = true;
9725       type = integer_type_node;
9726       break;
9727     case RID_LONG:
9728       if (decl_specs)
9729         ++decl_specs->specs[(int) ds_long];
9730       type = long_integer_type_node;
9731       break;
9732     case RID_SIGNED:
9733       if (decl_specs)
9734         ++decl_specs->specs[(int) ds_signed];
9735       type = integer_type_node;
9736       break;
9737     case RID_UNSIGNED:
9738       if (decl_specs)
9739         ++decl_specs->specs[(int) ds_unsigned];
9740       type = unsigned_type_node;
9741       break;
9742     case RID_FLOAT:
9743       type = float_type_node;
9744       break;
9745     case RID_DOUBLE:
9746       type = double_type_node;
9747       break;
9748     case RID_VOID:
9749       type = void_type_node;
9750       break;
9751
9752     case RID_TYPEOF:
9753       /* Consume the `typeof' token.  */
9754       cp_lexer_consume_token (parser->lexer);
9755       /* Parse the operand to `typeof'.  */
9756       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9757       /* If it is not already a TYPE, take its type.  */
9758       if (!TYPE_P (type))
9759         type = finish_typeof (type);
9760
9761       if (decl_specs)
9762         cp_parser_set_decl_spec_type (decl_specs, type,
9763                                       /*user_defined_p=*/true);
9764
9765       return type;
9766
9767     default:
9768       break;
9769     }
9770
9771   /* If the type-specifier was for a built-in type, we're done.  */
9772   if (type)
9773     {
9774       tree id;
9775
9776       /* Record the type.  */
9777       if (decl_specs
9778           && (token->keyword != RID_SIGNED
9779               && token->keyword != RID_UNSIGNED
9780               && token->keyword != RID_SHORT
9781               && token->keyword != RID_LONG))
9782         cp_parser_set_decl_spec_type (decl_specs,
9783                                       type,
9784                                       /*user_defined=*/false);
9785       if (decl_specs)
9786         decl_specs->any_specifiers_p = true;
9787
9788       /* Consume the token.  */
9789       id = cp_lexer_consume_token (parser->lexer)->value;
9790
9791       /* There is no valid C++ program where a non-template type is
9792          followed by a "<".  That usually indicates that the user thought
9793          that the type was a template.  */
9794       cp_parser_check_for_invalid_template_id (parser, type);
9795
9796       return TYPE_NAME (type);
9797     }
9798
9799   /* The type-specifier must be a user-defined type.  */
9800   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
9801     {
9802       bool qualified_p;
9803       bool global_p;
9804
9805       /* Don't gobble tokens or issue error messages if this is an
9806          optional type-specifier.  */
9807       if (flags & CP_PARSER_FLAGS_OPTIONAL)
9808         cp_parser_parse_tentatively (parser);
9809
9810       /* Look for the optional `::' operator.  */
9811       global_p
9812         = (cp_parser_global_scope_opt (parser,
9813                                        /*current_scope_valid_p=*/false)
9814            != NULL_TREE);
9815       /* Look for the nested-name specifier.  */
9816       qualified_p
9817         = (cp_parser_nested_name_specifier_opt (parser,
9818                                                 /*typename_keyword_p=*/false,
9819                                                 /*check_dependency_p=*/true,
9820                                                 /*type_p=*/false,
9821                                                 /*is_declaration=*/false)
9822            != NULL_TREE);
9823       /* If we have seen a nested-name-specifier, and the next token
9824          is `template', then we are using the template-id production.  */
9825       if (parser->scope
9826           && cp_parser_optional_template_keyword (parser))
9827         {
9828           /* Look for the template-id.  */
9829           type = cp_parser_template_id (parser,
9830                                         /*template_keyword_p=*/true,
9831                                         /*check_dependency_p=*/true,
9832                                         /*is_declaration=*/false);
9833           /* If the template-id did not name a type, we are out of
9834              luck.  */
9835           if (TREE_CODE (type) != TYPE_DECL)
9836             {
9837               cp_parser_error (parser, "expected template-id for type");
9838               type = NULL_TREE;
9839             }
9840         }
9841       /* Otherwise, look for a type-name.  */
9842       else
9843         type = cp_parser_type_name (parser);
9844       /* Keep track of all name-lookups performed in class scopes.  */
9845       if (type
9846           && !global_p
9847           && !qualified_p
9848           && TREE_CODE (type) == TYPE_DECL
9849           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
9850         maybe_note_name_used_in_class (DECL_NAME (type), type);
9851       /* If it didn't work out, we don't have a TYPE.  */
9852       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
9853           && !cp_parser_parse_definitely (parser))
9854         type = NULL_TREE;
9855       if (type && decl_specs)
9856         cp_parser_set_decl_spec_type (decl_specs, type,
9857                                       /*user_defined=*/true);
9858     }
9859
9860   /* If we didn't get a type-name, issue an error message.  */
9861   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9862     {
9863       cp_parser_error (parser, "expected type-name");
9864       return error_mark_node;
9865     }
9866
9867   /* There is no valid C++ program where a non-template type is
9868      followed by a "<".  That usually indicates that the user thought
9869      that the type was a template.  */
9870   if (type && type != error_mark_node)
9871     {
9872       /* As a last-ditch effort, see if TYPE is an Objective-C type.
9873          If it is, then the '<'...'>' enclose protocol names rather than
9874          template arguments, and so everything is fine.  */
9875       if (c_dialect_objc ()
9876           && (objc_is_id (type) || objc_is_class_name (type)))
9877         {
9878           tree protos = cp_parser_objc_protocol_refs_opt (parser);
9879           tree qual_type = objc_get_protocol_qualified_type (type, protos);
9880
9881           /* Clobber the "unqualified" type previously entered into
9882              DECL_SPECS with the new, improved protocol-qualified version.  */
9883           if (decl_specs)
9884             decl_specs->type = qual_type;
9885
9886           return qual_type;
9887         }
9888
9889       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
9890     }
9891
9892   return type;
9893 }
9894
9895 /* Parse a type-name.
9896
9897    type-name:
9898      class-name
9899      enum-name
9900      typedef-name
9901
9902    enum-name:
9903      identifier
9904
9905    typedef-name:
9906      identifier
9907
9908    Returns a TYPE_DECL for the type.  */
9909
9910 static tree
9911 cp_parser_type_name (cp_parser* parser)
9912 {
9913   tree type_decl;
9914   tree identifier;
9915
9916   /* We can't know yet whether it is a class-name or not.  */
9917   cp_parser_parse_tentatively (parser);
9918   /* Try a class-name.  */
9919   type_decl = cp_parser_class_name (parser,
9920                                     /*typename_keyword_p=*/false,
9921                                     /*template_keyword_p=*/false,
9922                                     none_type,
9923                                     /*check_dependency_p=*/true,
9924                                     /*class_head_p=*/false,
9925                                     /*is_declaration=*/false);
9926   /* If it's not a class-name, keep looking.  */
9927   if (!cp_parser_parse_definitely (parser))
9928     {
9929       /* It must be a typedef-name or an enum-name.  */
9930       identifier = cp_parser_identifier (parser);
9931       if (identifier == error_mark_node)
9932         return error_mark_node;
9933
9934       /* Look up the type-name.  */
9935       type_decl = cp_parser_lookup_name_simple (parser, identifier);
9936
9937       if (TREE_CODE (type_decl) != TYPE_DECL
9938           && (objc_is_id (identifier) || objc_is_class_name (identifier)))
9939         {
9940           /* See if this is an Objective-C type.  */
9941           tree protos = cp_parser_objc_protocol_refs_opt (parser);
9942           tree type = objc_get_protocol_qualified_type (identifier, protos);
9943           if (type)
9944             type_decl = TYPE_NAME (type);
9945         }
9946
9947       /* Issue an error if we did not find a type-name.  */
9948       if (TREE_CODE (type_decl) != TYPE_DECL)
9949         {
9950           if (!cp_parser_simulate_error (parser))
9951             cp_parser_name_lookup_error (parser, identifier, type_decl,
9952                                          "is not a type");
9953           type_decl = error_mark_node;
9954         }
9955       /* Remember that the name was used in the definition of the
9956          current class so that we can check later to see if the
9957          meaning would have been different after the class was
9958          entirely defined.  */
9959       else if (type_decl != error_mark_node
9960                && !parser->scope)
9961         maybe_note_name_used_in_class (identifier, type_decl);
9962     }
9963
9964   return type_decl;
9965 }
9966
9967
9968 /* Parse an elaborated-type-specifier.  Note that the grammar given
9969    here incorporates the resolution to DR68.
9970
9971    elaborated-type-specifier:
9972      class-key :: [opt] nested-name-specifier [opt] identifier
9973      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
9974      enum :: [opt] nested-name-specifier [opt] identifier
9975      typename :: [opt] nested-name-specifier identifier
9976      typename :: [opt] nested-name-specifier template [opt]
9977        template-id
9978
9979    GNU extension:
9980
9981    elaborated-type-specifier:
9982      class-key attributes :: [opt] nested-name-specifier [opt] identifier
9983      class-key attributes :: [opt] nested-name-specifier [opt]
9984                template [opt] template-id
9985      enum attributes :: [opt] nested-name-specifier [opt] identifier
9986
9987    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
9988    declared `friend'.  If IS_DECLARATION is TRUE, then this
9989    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
9990    something is being declared.
9991
9992    Returns the TYPE specified.  */
9993
9994 static tree
9995 cp_parser_elaborated_type_specifier (cp_parser* parser,
9996                                      bool is_friend,
9997                                      bool is_declaration)
9998 {
9999   enum tag_types tag_type;
10000   tree identifier;
10001   tree type = NULL_TREE;
10002   tree attributes = NULL_TREE;
10003
10004   /* See if we're looking at the `enum' keyword.  */
10005   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
10006     {
10007       /* Consume the `enum' token.  */
10008       cp_lexer_consume_token (parser->lexer);
10009       /* Remember that it's an enumeration type.  */
10010       tag_type = enum_type;
10011       /* Parse the attributes.  */
10012       attributes = cp_parser_attributes_opt (parser);
10013     }
10014   /* Or, it might be `typename'.  */
10015   else if (cp_lexer_next_token_is_keyword (parser->lexer,
10016                                            RID_TYPENAME))
10017     {
10018       /* Consume the `typename' token.  */
10019       cp_lexer_consume_token (parser->lexer);
10020       /* Remember that it's a `typename' type.  */
10021       tag_type = typename_type;
10022       /* The `typename' keyword is only allowed in templates.  */
10023       if (!processing_template_decl)
10024         pedwarn ("using %<typename%> outside of template");
10025     }
10026   /* Otherwise it must be a class-key.  */
10027   else
10028     {
10029       tag_type = cp_parser_class_key (parser);
10030       if (tag_type == none_type)
10031         return error_mark_node;
10032       /* Parse the attributes.  */
10033       attributes = cp_parser_attributes_opt (parser);
10034     }
10035
10036   /* Look for the `::' operator.  */
10037   cp_parser_global_scope_opt (parser,
10038                               /*current_scope_valid_p=*/false);
10039   /* Look for the nested-name-specifier.  */
10040   if (tag_type == typename_type)
10041     {
10042       if (!cp_parser_nested_name_specifier (parser,
10043                                            /*typename_keyword_p=*/true,
10044                                            /*check_dependency_p=*/true,
10045                                            /*type_p=*/true,
10046                                             is_declaration))
10047         return error_mark_node;
10048     }
10049   else
10050     /* Even though `typename' is not present, the proposed resolution
10051        to Core Issue 180 says that in `class A<T>::B', `B' should be
10052        considered a type-name, even if `A<T>' is dependent.  */
10053     cp_parser_nested_name_specifier_opt (parser,
10054                                          /*typename_keyword_p=*/true,
10055                                          /*check_dependency_p=*/true,
10056                                          /*type_p=*/true,
10057                                          is_declaration);
10058   /* For everything but enumeration types, consider a template-id.  */
10059   /* For an enumeration type, consider only a plain identifier.  */
10060   if (tag_type != enum_type)
10061     {
10062       bool template_p = false;
10063       tree decl;
10064
10065       /* Allow the `template' keyword.  */
10066       template_p = cp_parser_optional_template_keyword (parser);
10067       /* If we didn't see `template', we don't know if there's a
10068          template-id or not.  */
10069       if (!template_p)
10070         cp_parser_parse_tentatively (parser);
10071       /* Parse the template-id.  */
10072       decl = cp_parser_template_id (parser, template_p,
10073                                     /*check_dependency_p=*/true,
10074                                     is_declaration);
10075       /* If we didn't find a template-id, look for an ordinary
10076          identifier.  */
10077       if (!template_p && !cp_parser_parse_definitely (parser))
10078         ;
10079       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
10080          in effect, then we must assume that, upon instantiation, the
10081          template will correspond to a class.  */
10082       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
10083                && tag_type == typename_type)
10084         type = make_typename_type (parser->scope, decl,
10085                                    typename_type,
10086                                    /*complain=*/tf_error);
10087       else
10088         type = TREE_TYPE (decl);
10089     }
10090
10091   if (!type)
10092     {
10093       identifier = cp_parser_identifier (parser);
10094
10095       if (identifier == error_mark_node)
10096         {
10097           parser->scope = NULL_TREE;
10098           return error_mark_node;
10099         }
10100
10101       /* For a `typename', we needn't call xref_tag.  */
10102       if (tag_type == typename_type
10103           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
10104         return cp_parser_make_typename_type (parser, parser->scope,
10105                                              identifier);
10106       /* Look up a qualified name in the usual way.  */
10107       if (parser->scope)
10108         {
10109           tree decl;
10110
10111           decl = cp_parser_lookup_name (parser, identifier,
10112                                         tag_type,
10113                                         /*is_template=*/false,
10114                                         /*is_namespace=*/false,
10115                                         /*check_dependency=*/true,
10116                                         /*ambiguous_decls=*/NULL);
10117
10118           /* If we are parsing friend declaration, DECL may be a
10119              TEMPLATE_DECL tree node here.  However, we need to check
10120              whether this TEMPLATE_DECL results in valid code.  Consider
10121              the following example:
10122
10123                namespace N {
10124                  template <class T> class C {};
10125                }
10126                class X {
10127                  template <class T> friend class N::C; // #1, valid code
10128                };
10129                template <class T> class Y {
10130                  friend class N::C;                    // #2, invalid code
10131                };
10132
10133              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
10134              name lookup of `N::C'.  We see that friend declaration must
10135              be template for the code to be valid.  Note that
10136              processing_template_decl does not work here since it is
10137              always 1 for the above two cases.  */
10138
10139           decl = (cp_parser_maybe_treat_template_as_class
10140                   (decl, /*tag_name_p=*/is_friend
10141                          && parser->num_template_parameter_lists));
10142
10143           if (TREE_CODE (decl) != TYPE_DECL)
10144             {
10145               cp_parser_diagnose_invalid_type_name (parser,
10146                                                     parser->scope,
10147                                                     identifier);
10148               return error_mark_node;
10149             }
10150
10151           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
10152             check_elaborated_type_specifier
10153               (tag_type, decl,
10154                (parser->num_template_parameter_lists
10155                 || DECL_SELF_REFERENCE_P (decl)));
10156
10157           type = TREE_TYPE (decl);
10158         }
10159       else
10160         {
10161           /* An elaborated-type-specifier sometimes introduces a new type and
10162              sometimes names an existing type.  Normally, the rule is that it
10163              introduces a new type only if there is not an existing type of
10164              the same name already in scope.  For example, given:
10165
10166                struct S {};
10167                void f() { struct S s; }
10168
10169              the `struct S' in the body of `f' is the same `struct S' as in
10170              the global scope; the existing definition is used.  However, if
10171              there were no global declaration, this would introduce a new
10172              local class named `S'.
10173
10174              An exception to this rule applies to the following code:
10175
10176                namespace N { struct S; }
10177
10178              Here, the elaborated-type-specifier names a new type
10179              unconditionally; even if there is already an `S' in the
10180              containing scope this declaration names a new type.
10181              This exception only applies if the elaborated-type-specifier
10182              forms the complete declaration:
10183
10184                [class.name]
10185
10186                A declaration consisting solely of `class-key identifier ;' is
10187                either a redeclaration of the name in the current scope or a
10188                forward declaration of the identifier as a class name.  It
10189                introduces the name into the current scope.
10190
10191              We are in this situation precisely when the next token is a `;'.
10192
10193              An exception to the exception is that a `friend' declaration does
10194              *not* name a new type; i.e., given:
10195
10196                struct S { friend struct T; };
10197
10198              `T' is not a new type in the scope of `S'.
10199
10200              Also, `new struct S' or `sizeof (struct S)' never results in the
10201              definition of a new type; a new type can only be declared in a
10202              declaration context.  */
10203
10204           tag_scope ts;
10205           bool template_p;
10206
10207           if (is_friend)
10208             /* Friends have special name lookup rules.  */
10209             ts = ts_within_enclosing_non_class;
10210           else if (is_declaration
10211                    && cp_lexer_next_token_is (parser->lexer,
10212                                               CPP_SEMICOLON))
10213             /* This is a `class-key identifier ;' */
10214             ts = ts_current;
10215           else
10216             ts = ts_global;
10217
10218           template_p =
10219             (parser->num_template_parameter_lists
10220              && (cp_parser_next_token_starts_class_definition_p (parser)
10221                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
10222           /* An unqualified name was used to reference this type, so
10223              there were no qualifying templates.  */
10224           if (!cp_parser_check_template_parameters (parser,
10225                                                     /*num_templates=*/0))
10226             return error_mark_node;
10227           type = xref_tag (tag_type, identifier, ts, template_p);
10228         }
10229     }
10230
10231   if (type == error_mark_node)
10232     return error_mark_node;
10233
10234   /* Allow attributes on forward declarations of classes.  */
10235   if (attributes)
10236     {
10237       if (TREE_CODE (type) == TYPENAME_TYPE)
10238         warning (OPT_Wattributes,
10239                  "attributes ignored on uninstantiated type");
10240       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
10241                && ! processing_explicit_instantiation)
10242         warning (OPT_Wattributes,
10243                  "attributes ignored on template instantiation");
10244       else if (is_declaration && cp_parser_declares_only_class_p (parser))
10245         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
10246       else
10247         warning (OPT_Wattributes,
10248                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
10249     }
10250
10251   if (tag_type != enum_type)
10252     cp_parser_check_class_key (tag_type, type);
10253
10254   /* A "<" cannot follow an elaborated type specifier.  If that
10255      happens, the user was probably trying to form a template-id.  */
10256   cp_parser_check_for_invalid_template_id (parser, type);
10257
10258   return type;
10259 }
10260
10261 /* Parse an enum-specifier.
10262
10263    enum-specifier:
10264      enum identifier [opt] { enumerator-list [opt] }
10265
10266    GNU Extensions:
10267      enum attributes[opt] identifier [opt] { enumerator-list [opt] }
10268        attributes[opt]
10269
10270    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
10271    if the token stream isn't an enum-specifier after all.  */
10272
10273 static tree
10274 cp_parser_enum_specifier (cp_parser* parser)
10275 {
10276   tree identifier;
10277   tree type;
10278   tree attributes;
10279
10280   /* Parse tentatively so that we can back up if we don't find a
10281      enum-specifier.  */
10282   cp_parser_parse_tentatively (parser);
10283
10284   /* Caller guarantees that the current token is 'enum', an identifier
10285      possibly follows, and the token after that is an opening brace.
10286      If we don't have an identifier, fabricate an anonymous name for
10287      the enumeration being defined.  */
10288   cp_lexer_consume_token (parser->lexer);
10289
10290   attributes = cp_parser_attributes_opt (parser);
10291
10292   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10293     identifier = cp_parser_identifier (parser);
10294   else
10295     identifier = make_anon_name ();
10296
10297   /* Look for the `{' but don't consume it yet.  */
10298   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10299     cp_parser_simulate_error (parser);
10300
10301   if (!cp_parser_parse_definitely (parser))
10302     return NULL_TREE;
10303
10304   /* Issue an error message if type-definitions are forbidden here.  */
10305   cp_parser_check_type_definition (parser);
10306
10307   /* Create the new type.  We do this before consuming the opening brace
10308      so the enum will be recorded as being on the line of its tag (or the
10309      'enum' keyword, if there is no tag).  */
10310   type = start_enum (identifier);
10311
10312   /* Consume the opening brace.  */
10313   cp_lexer_consume_token (parser->lexer);
10314
10315   if (type == error_mark_node)
10316     {
10317       cp_parser_skip_to_end_of_block_or_statement (parser);
10318       return error_mark_node;
10319     }
10320
10321   /* If the next token is not '}', then there are some enumerators.  */
10322   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
10323     cp_parser_enumerator_list (parser, type);
10324
10325   /* Consume the final '}'.  */
10326   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10327
10328   /* Look for trailing attributes to apply to this enumeration, and
10329      apply them if appropriate.  */
10330   if (cp_parser_allow_gnu_extensions_p (parser))
10331     {
10332       tree trailing_attr = cp_parser_attributes_opt (parser);
10333       cplus_decl_attributes (&type,
10334                              trailing_attr,
10335                              (int) ATTR_FLAG_TYPE_IN_PLACE);
10336     }
10337
10338   /* Finish up the enumeration.  */
10339   finish_enum (type);
10340
10341   return type;
10342 }
10343
10344 /* Parse an enumerator-list.  The enumerators all have the indicated
10345    TYPE.
10346
10347    enumerator-list:
10348      enumerator-definition
10349      enumerator-list , enumerator-definition  */
10350
10351 static void
10352 cp_parser_enumerator_list (cp_parser* parser, tree type)
10353 {
10354   while (true)
10355     {
10356       /* Parse an enumerator-definition.  */
10357       cp_parser_enumerator_definition (parser, type);
10358
10359       /* If the next token is not a ',', we've reached the end of
10360          the list.  */
10361       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10362         break;
10363       /* Otherwise, consume the `,' and keep going.  */
10364       cp_lexer_consume_token (parser->lexer);
10365       /* If the next token is a `}', there is a trailing comma.  */
10366       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
10367         {
10368           if (pedantic && !in_system_header)
10369             pedwarn ("comma at end of enumerator list");
10370           break;
10371         }
10372     }
10373 }
10374
10375 /* Parse an enumerator-definition.  The enumerator has the indicated
10376    TYPE.
10377
10378    enumerator-definition:
10379      enumerator
10380      enumerator = constant-expression
10381
10382    enumerator:
10383      identifier  */
10384
10385 static void
10386 cp_parser_enumerator_definition (cp_parser* parser, tree type)
10387 {
10388   tree identifier;
10389   tree value;
10390
10391   /* Look for the identifier.  */
10392   identifier = cp_parser_identifier (parser);
10393   if (identifier == error_mark_node)
10394     return;
10395
10396   /* If the next token is an '=', then there is an explicit value.  */
10397   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10398     {
10399       /* Consume the `=' token.  */
10400       cp_lexer_consume_token (parser->lexer);
10401       /* Parse the value.  */
10402       value = cp_parser_constant_expression (parser,
10403                                              /*allow_non_constant_p=*/false,
10404                                              NULL);
10405     }
10406   else
10407     value = NULL_TREE;
10408
10409   /* Create the enumerator.  */
10410   build_enumerator (identifier, value, type);
10411 }
10412
10413 /* Parse a namespace-name.
10414
10415    namespace-name:
10416      original-namespace-name
10417      namespace-alias
10418
10419    Returns the NAMESPACE_DECL for the namespace.  */
10420
10421 static tree
10422 cp_parser_namespace_name (cp_parser* parser)
10423 {
10424   tree identifier;
10425   tree namespace_decl;
10426
10427   /* Get the name of the namespace.  */
10428   identifier = cp_parser_identifier (parser);
10429   if (identifier == error_mark_node)
10430     return error_mark_node;
10431
10432   /* Look up the identifier in the currently active scope.  Look only
10433      for namespaces, due to:
10434
10435        [basic.lookup.udir]
10436
10437        When looking up a namespace-name in a using-directive or alias
10438        definition, only namespace names are considered.
10439
10440      And:
10441
10442        [basic.lookup.qual]
10443
10444        During the lookup of a name preceding the :: scope resolution
10445        operator, object, function, and enumerator names are ignored.
10446
10447      (Note that cp_parser_class_or_namespace_name only calls this
10448      function if the token after the name is the scope resolution
10449      operator.)  */
10450   namespace_decl = cp_parser_lookup_name (parser, identifier,
10451                                           none_type,
10452                                           /*is_template=*/false,
10453                                           /*is_namespace=*/true,
10454                                           /*check_dependency=*/true,
10455                                           /*ambiguous_decls=*/NULL);
10456   /* If it's not a namespace, issue an error.  */
10457   if (namespace_decl == error_mark_node
10458       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
10459     {
10460       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
10461         error ("%qD is not a namespace-name", identifier);
10462       cp_parser_error (parser, "expected namespace-name");
10463       namespace_decl = error_mark_node;
10464     }
10465
10466   return namespace_decl;
10467 }
10468
10469 /* Parse a namespace-definition.
10470
10471    namespace-definition:
10472      named-namespace-definition
10473      unnamed-namespace-definition
10474
10475    named-namespace-definition:
10476      original-namespace-definition
10477      extension-namespace-definition
10478
10479    original-namespace-definition:
10480      namespace identifier { namespace-body }
10481
10482    extension-namespace-definition:
10483      namespace original-namespace-name { namespace-body }
10484
10485    unnamed-namespace-definition:
10486      namespace { namespace-body } */
10487
10488 static void
10489 cp_parser_namespace_definition (cp_parser* parser)
10490 {
10491   tree identifier, attribs;
10492
10493   /* Look for the `namespace' keyword.  */
10494   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10495
10496   /* Get the name of the namespace.  We do not attempt to distinguish
10497      between an original-namespace-definition and an
10498      extension-namespace-definition at this point.  The semantic
10499      analysis routines are responsible for that.  */
10500   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10501     identifier = cp_parser_identifier (parser);
10502   else
10503     identifier = NULL_TREE;
10504
10505   /* Parse any specified attributes.  */
10506   attribs = cp_parser_attributes_opt (parser);
10507
10508   /* Look for the `{' to start the namespace.  */
10509   cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
10510   /* Start the namespace.  */
10511   push_namespace_with_attribs (identifier, attribs);
10512   /* Parse the body of the namespace.  */
10513   cp_parser_namespace_body (parser);
10514   /* Finish the namespace.  */
10515   pop_namespace ();
10516   /* Look for the final `}'.  */
10517   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10518 }
10519
10520 /* Parse a namespace-body.
10521
10522    namespace-body:
10523      declaration-seq [opt]  */
10524
10525 static void
10526 cp_parser_namespace_body (cp_parser* parser)
10527 {
10528   cp_parser_declaration_seq_opt (parser);
10529 }
10530
10531 /* Parse a namespace-alias-definition.
10532
10533    namespace-alias-definition:
10534      namespace identifier = qualified-namespace-specifier ;  */
10535
10536 static void
10537 cp_parser_namespace_alias_definition (cp_parser* parser)
10538 {
10539   tree identifier;
10540   tree namespace_specifier;
10541
10542   /* Look for the `namespace' keyword.  */
10543   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10544   /* Look for the identifier.  */
10545   identifier = cp_parser_identifier (parser);
10546   if (identifier == error_mark_node)
10547     return;
10548   /* Look for the `=' token.  */
10549   cp_parser_require (parser, CPP_EQ, "`='");
10550   /* Look for the qualified-namespace-specifier.  */
10551   namespace_specifier
10552     = cp_parser_qualified_namespace_specifier (parser);
10553   /* Look for the `;' token.  */
10554   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10555
10556   /* Register the alias in the symbol table.  */
10557   do_namespace_alias (identifier, namespace_specifier);
10558 }
10559
10560 /* Parse a qualified-namespace-specifier.
10561
10562    qualified-namespace-specifier:
10563      :: [opt] nested-name-specifier [opt] namespace-name
10564
10565    Returns a NAMESPACE_DECL corresponding to the specified
10566    namespace.  */
10567
10568 static tree
10569 cp_parser_qualified_namespace_specifier (cp_parser* parser)
10570 {
10571   /* Look for the optional `::'.  */
10572   cp_parser_global_scope_opt (parser,
10573                               /*current_scope_valid_p=*/false);
10574
10575   /* Look for the optional nested-name-specifier.  */
10576   cp_parser_nested_name_specifier_opt (parser,
10577                                        /*typename_keyword_p=*/false,
10578                                        /*check_dependency_p=*/true,
10579                                        /*type_p=*/false,
10580                                        /*is_declaration=*/true);
10581
10582   return cp_parser_namespace_name (parser);
10583 }
10584
10585 /* Parse a using-declaration.
10586
10587    using-declaration:
10588      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
10589      using :: unqualified-id ;  */
10590
10591 static void
10592 cp_parser_using_declaration (cp_parser* parser)
10593 {
10594   cp_token *token;
10595   bool typename_p = false;
10596   bool global_scope_p;
10597   tree decl;
10598   tree identifier;
10599   tree qscope;
10600
10601   /* Look for the `using' keyword.  */
10602   cp_parser_require_keyword (parser, RID_USING, "`using'");
10603
10604   /* Peek at the next token.  */
10605   token = cp_lexer_peek_token (parser->lexer);
10606   /* See if it's `typename'.  */
10607   if (token->keyword == RID_TYPENAME)
10608     {
10609       /* Remember that we've seen it.  */
10610       typename_p = true;
10611       /* Consume the `typename' token.  */
10612       cp_lexer_consume_token (parser->lexer);
10613     }
10614
10615   /* Look for the optional global scope qualification.  */
10616   global_scope_p
10617     = (cp_parser_global_scope_opt (parser,
10618                                    /*current_scope_valid_p=*/false)
10619        != NULL_TREE);
10620
10621   /* If we saw `typename', or didn't see `::', then there must be a
10622      nested-name-specifier present.  */
10623   if (typename_p || !global_scope_p)
10624     qscope = cp_parser_nested_name_specifier (parser, typename_p,
10625                                               /*check_dependency_p=*/true,
10626                                               /*type_p=*/false,
10627                                               /*is_declaration=*/true);
10628   /* Otherwise, we could be in either of the two productions.  In that
10629      case, treat the nested-name-specifier as optional.  */
10630   else
10631     qscope = cp_parser_nested_name_specifier_opt (parser,
10632                                                   /*typename_keyword_p=*/false,
10633                                                   /*check_dependency_p=*/true,
10634                                                   /*type_p=*/false,
10635                                                   /*is_declaration=*/true);
10636   if (!qscope)
10637     qscope = global_namespace;
10638
10639   /* Parse the unqualified-id.  */
10640   identifier = cp_parser_unqualified_id (parser,
10641                                          /*template_keyword_p=*/false,
10642                                          /*check_dependency_p=*/true,
10643                                          /*declarator_p=*/true,
10644                                          /*optional_p=*/false);
10645
10646   /* The function we call to handle a using-declaration is different
10647      depending on what scope we are in.  */
10648   if (qscope == error_mark_node || identifier == error_mark_node)
10649     ;
10650   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
10651            && TREE_CODE (identifier) != BIT_NOT_EXPR)
10652     /* [namespace.udecl]
10653
10654        A using declaration shall not name a template-id.  */
10655     error ("a template-id may not appear in a using-declaration");
10656   else
10657     {
10658       if (at_class_scope_p ())
10659         {
10660           /* Create the USING_DECL.  */
10661           decl = do_class_using_decl (parser->scope, identifier);
10662           /* Add it to the list of members in this class.  */
10663           finish_member_declaration (decl);
10664         }
10665       else
10666         {
10667           decl = cp_parser_lookup_name_simple (parser, identifier);
10668           if (decl == error_mark_node)
10669             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
10670           else if (!at_namespace_scope_p ())
10671             do_local_using_decl (decl, qscope, identifier);
10672           else
10673             do_toplevel_using_decl (decl, qscope, identifier);
10674         }
10675     }
10676
10677   /* Look for the final `;'.  */
10678   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10679 }
10680
10681 /* Parse a using-directive.
10682
10683    using-directive:
10684      using namespace :: [opt] nested-name-specifier [opt]
10685        namespace-name ;  */
10686
10687 static void
10688 cp_parser_using_directive (cp_parser* parser)
10689 {
10690   tree namespace_decl;
10691   tree attribs;
10692
10693   /* Look for the `using' keyword.  */
10694   cp_parser_require_keyword (parser, RID_USING, "`using'");
10695   /* And the `namespace' keyword.  */
10696   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10697   /* Look for the optional `::' operator.  */
10698   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
10699   /* And the optional nested-name-specifier.  */
10700   cp_parser_nested_name_specifier_opt (parser,
10701                                        /*typename_keyword_p=*/false,
10702                                        /*check_dependency_p=*/true,
10703                                        /*type_p=*/false,
10704                                        /*is_declaration=*/true);
10705   /* Get the namespace being used.  */
10706   namespace_decl = cp_parser_namespace_name (parser);
10707   /* And any specified attributes.  */
10708   attribs = cp_parser_attributes_opt (parser);
10709   /* Update the symbol table.  */
10710   parse_using_directive (namespace_decl, attribs);
10711   /* Look for the final `;'.  */
10712   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10713 }
10714
10715 /* Parse an asm-definition.
10716
10717    asm-definition:
10718      asm ( string-literal ) ;
10719
10720    GNU Extension:
10721
10722    asm-definition:
10723      asm volatile [opt] ( string-literal ) ;
10724      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
10725      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10726                           : asm-operand-list [opt] ) ;
10727      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10728                           : asm-operand-list [opt]
10729                           : asm-operand-list [opt] ) ;  */
10730
10731 static void
10732 cp_parser_asm_definition (cp_parser* parser)
10733 {
10734   tree string;
10735   tree outputs = NULL_TREE;
10736   tree inputs = NULL_TREE;
10737   tree clobbers = NULL_TREE;
10738   tree asm_stmt;
10739   bool volatile_p = false;
10740   bool extended_p = false;
10741
10742   /* Look for the `asm' keyword.  */
10743   cp_parser_require_keyword (parser, RID_ASM, "`asm'");
10744   /* See if the next token is `volatile'.  */
10745   if (cp_parser_allow_gnu_extensions_p (parser)
10746       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
10747     {
10748       /* Remember that we saw the `volatile' keyword.  */
10749       volatile_p = true;
10750       /* Consume the token.  */
10751       cp_lexer_consume_token (parser->lexer);
10752     }
10753   /* Look for the opening `('.  */
10754   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
10755     return;
10756   /* Look for the string.  */
10757   string = cp_parser_string_literal (parser, false, false);
10758   if (string == error_mark_node)
10759     {
10760       cp_parser_skip_to_closing_parenthesis (parser, true, false,
10761                                              /*consume_paren=*/true);
10762       return;
10763     }
10764
10765   /* If we're allowing GNU extensions, check for the extended assembly
10766      syntax.  Unfortunately, the `:' tokens need not be separated by
10767      a space in C, and so, for compatibility, we tolerate that here
10768      too.  Doing that means that we have to treat the `::' operator as
10769      two `:' tokens.  */
10770   if (cp_parser_allow_gnu_extensions_p (parser)
10771       && at_function_scope_p ()
10772       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
10773           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
10774     {
10775       bool inputs_p = false;
10776       bool clobbers_p = false;
10777
10778       /* The extended syntax was used.  */
10779       extended_p = true;
10780
10781       /* Look for outputs.  */
10782       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10783         {
10784           /* Consume the `:'.  */
10785           cp_lexer_consume_token (parser->lexer);
10786           /* Parse the output-operands.  */
10787           if (cp_lexer_next_token_is_not (parser->lexer,
10788                                           CPP_COLON)
10789               && cp_lexer_next_token_is_not (parser->lexer,
10790                                              CPP_SCOPE)
10791               && cp_lexer_next_token_is_not (parser->lexer,
10792                                              CPP_CLOSE_PAREN))
10793             outputs = cp_parser_asm_operand_list (parser);
10794         }
10795       /* If the next token is `::', there are no outputs, and the
10796          next token is the beginning of the inputs.  */
10797       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10798         /* The inputs are coming next.  */
10799         inputs_p = true;
10800
10801       /* Look for inputs.  */
10802       if (inputs_p
10803           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10804         {
10805           /* Consume the `:' or `::'.  */
10806           cp_lexer_consume_token (parser->lexer);
10807           /* Parse the output-operands.  */
10808           if (cp_lexer_next_token_is_not (parser->lexer,
10809                                           CPP_COLON)
10810               && cp_lexer_next_token_is_not (parser->lexer,
10811                                              CPP_CLOSE_PAREN))
10812             inputs = cp_parser_asm_operand_list (parser);
10813         }
10814       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10815         /* The clobbers are coming next.  */
10816         clobbers_p = true;
10817
10818       /* Look for clobbers.  */
10819       if (clobbers_p
10820           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10821         {
10822           /* Consume the `:' or `::'.  */
10823           cp_lexer_consume_token (parser->lexer);
10824           /* Parse the clobbers.  */
10825           if (cp_lexer_next_token_is_not (parser->lexer,
10826                                           CPP_CLOSE_PAREN))
10827             clobbers = cp_parser_asm_clobber_list (parser);
10828         }
10829     }
10830   /* Look for the closing `)'.  */
10831   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
10832     cp_parser_skip_to_closing_parenthesis (parser, true, false,
10833                                            /*consume_paren=*/true);
10834   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10835
10836   /* Create the ASM_EXPR.  */
10837   if (at_function_scope_p ())
10838     {
10839       asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
10840                                   inputs, clobbers);
10841       /* If the extended syntax was not used, mark the ASM_EXPR.  */
10842       if (!extended_p)
10843         {
10844           tree temp = asm_stmt;
10845           if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
10846             temp = TREE_OPERAND (temp, 0);
10847
10848           ASM_INPUT_P (temp) = 1;
10849         }
10850     }
10851   else
10852     cgraph_add_asm_node (string);
10853 }
10854
10855 /* Declarators [gram.dcl.decl] */
10856
10857 /* Parse an init-declarator.
10858
10859    init-declarator:
10860      declarator initializer [opt]
10861
10862    GNU Extension:
10863
10864    init-declarator:
10865      declarator asm-specification [opt] attributes [opt] initializer [opt]
10866
10867    function-definition:
10868      decl-specifier-seq [opt] declarator ctor-initializer [opt]
10869        function-body
10870      decl-specifier-seq [opt] declarator function-try-block
10871
10872    GNU Extension:
10873
10874    function-definition:
10875      __extension__ function-definition
10876
10877    The DECL_SPECIFIERS apply to this declarator.  Returns a
10878    representation of the entity declared.  If MEMBER_P is TRUE, then
10879    this declarator appears in a class scope.  The new DECL created by
10880    this declarator is returned.
10881
10882    The CHECKS are access checks that should be performed once we know
10883    what entity is being declared (and, therefore, what classes have
10884    befriended it).
10885
10886    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
10887    for a function-definition here as well.  If the declarator is a
10888    declarator for a function-definition, *FUNCTION_DEFINITION_P will
10889    be TRUE upon return.  By that point, the function-definition will
10890    have been completely parsed.
10891
10892    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
10893    is FALSE.  */
10894
10895 static tree
10896 cp_parser_init_declarator (cp_parser* parser,
10897                            cp_decl_specifier_seq *decl_specifiers,
10898                            tree checks,
10899                            bool function_definition_allowed_p,
10900                            bool member_p,
10901                            int declares_class_or_enum,
10902                            bool* function_definition_p)
10903 {
10904   cp_token *token;
10905   cp_declarator *declarator;
10906   tree prefix_attributes;
10907   tree attributes;
10908   tree asm_specification;
10909   tree initializer;
10910   tree decl = NULL_TREE;
10911   tree scope;
10912   bool is_initialized;
10913   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
10914      initialized with "= ..", CPP_OPEN_PAREN if initialized with
10915      "(...)".  */
10916   enum cpp_ttype initialization_kind;
10917   bool is_parenthesized_init = false;
10918   bool is_non_constant_init;
10919   int ctor_dtor_or_conv_p;
10920   bool friend_p;
10921   tree pushed_scope = NULL;
10922
10923   /* Gather the attributes that were provided with the
10924      decl-specifiers.  */
10925   prefix_attributes = decl_specifiers->attributes;
10926
10927   /* Assume that this is not the declarator for a function
10928      definition.  */
10929   if (function_definition_p)
10930     *function_definition_p = false;
10931
10932   /* Defer access checks while parsing the declarator; we cannot know
10933      what names are accessible until we know what is being
10934      declared.  */
10935   resume_deferring_access_checks ();
10936
10937   /* Parse the declarator.  */
10938   declarator
10939     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10940                             &ctor_dtor_or_conv_p,
10941                             /*parenthesized_p=*/NULL,
10942                             /*member_p=*/false);
10943   /* Gather up the deferred checks.  */
10944   stop_deferring_access_checks ();
10945
10946   /* If the DECLARATOR was erroneous, there's no need to go
10947      further.  */
10948   if (declarator == cp_error_declarator)
10949     return error_mark_node;
10950
10951   if (declares_class_or_enum & 2)
10952     cp_parser_check_for_definition_in_return_type (declarator,
10953                                                    decl_specifiers->type);
10954
10955   /* Figure out what scope the entity declared by the DECLARATOR is
10956      located in.  `grokdeclarator' sometimes changes the scope, so
10957      we compute it now.  */
10958   scope = get_scope_of_declarator (declarator);
10959
10960   /* If we're allowing GNU extensions, look for an asm-specification
10961      and attributes.  */
10962   if (cp_parser_allow_gnu_extensions_p (parser))
10963     {
10964       /* Look for an asm-specification.  */
10965       asm_specification = cp_parser_asm_specification_opt (parser);
10966       /* And attributes.  */
10967       attributes = cp_parser_attributes_opt (parser);
10968     }
10969   else
10970     {
10971       asm_specification = NULL_TREE;
10972       attributes = NULL_TREE;
10973     }
10974
10975   /* Peek at the next token.  */
10976   token = cp_lexer_peek_token (parser->lexer);
10977   /* Check to see if the token indicates the start of a
10978      function-definition.  */
10979   if (cp_parser_token_starts_function_definition_p (token))
10980     {
10981       if (!function_definition_allowed_p)
10982         {
10983           /* If a function-definition should not appear here, issue an
10984              error message.  */
10985           cp_parser_error (parser,
10986                            "a function-definition is not allowed here");
10987           return error_mark_node;
10988         }
10989       else
10990         {
10991           /* Neither attributes nor an asm-specification are allowed
10992              on a function-definition.  */
10993           if (asm_specification)
10994             error ("an asm-specification is not allowed on a function-definition");
10995           if (attributes)
10996             error ("attributes are not allowed on a function-definition");
10997           /* This is a function-definition.  */
10998           *function_definition_p = true;
10999
11000           /* Parse the function definition.  */
11001           if (member_p)
11002             decl = cp_parser_save_member_function_body (parser,
11003                                                         decl_specifiers,
11004                                                         declarator,
11005                                                         prefix_attributes);
11006           else
11007             decl
11008               = (cp_parser_function_definition_from_specifiers_and_declarator
11009                  (parser, decl_specifiers, prefix_attributes, declarator));
11010
11011           return decl;
11012         }
11013     }
11014
11015   /* [dcl.dcl]
11016
11017      Only in function declarations for constructors, destructors, and
11018      type conversions can the decl-specifier-seq be omitted.
11019
11020      We explicitly postpone this check past the point where we handle
11021      function-definitions because we tolerate function-definitions
11022      that are missing their return types in some modes.  */
11023   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
11024     {
11025       cp_parser_error (parser,
11026                        "expected constructor, destructor, or type conversion");
11027       return error_mark_node;
11028     }
11029
11030   /* An `=' or an `(' indicates an initializer.  */
11031   if (token->type == CPP_EQ
11032       || token->type == CPP_OPEN_PAREN)
11033     {
11034       is_initialized = true;
11035       initialization_kind = token->type;
11036     }
11037   else
11038     {
11039       /* If the init-declarator isn't initialized and isn't followed by a
11040          `,' or `;', it's not a valid init-declarator.  */
11041       if (token->type != CPP_COMMA
11042           && token->type != CPP_SEMICOLON)
11043         {
11044           cp_parser_error (parser, "expected initializer");
11045           return error_mark_node;
11046         }
11047       is_initialized = false;
11048       initialization_kind = CPP_EOF;
11049     }
11050
11051   /* Because start_decl has side-effects, we should only call it if we
11052      know we're going ahead.  By this point, we know that we cannot
11053      possibly be looking at any other construct.  */
11054   cp_parser_commit_to_tentative_parse (parser);
11055
11056   /* If the decl specifiers were bad, issue an error now that we're
11057      sure this was intended to be a declarator.  Then continue
11058      declaring the variable(s), as int, to try to cut down on further
11059      errors.  */
11060   if (decl_specifiers->any_specifiers_p
11061       && decl_specifiers->type == error_mark_node)
11062     {
11063       cp_parser_error (parser, "invalid type in declaration");
11064       decl_specifiers->type = integer_type_node;
11065     }
11066
11067   /* Check to see whether or not this declaration is a friend.  */
11068   friend_p = cp_parser_friend_p (decl_specifiers);
11069
11070   /* Check that the number of template-parameter-lists is OK.  */
11071   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
11072     return error_mark_node;
11073
11074   /* Enter the newly declared entry in the symbol table.  If we're
11075      processing a declaration in a class-specifier, we wait until
11076      after processing the initializer.  */
11077   if (!member_p)
11078     {
11079       if (parser->in_unbraced_linkage_specification_p)
11080         decl_specifiers->storage_class = sc_extern;
11081       decl = start_decl (declarator, decl_specifiers,
11082                          is_initialized, attributes, prefix_attributes,
11083                          &pushed_scope);
11084     }
11085   else if (scope)
11086     /* Enter the SCOPE.  That way unqualified names appearing in the
11087        initializer will be looked up in SCOPE.  */
11088     pushed_scope = push_scope (scope);
11089
11090   /* Perform deferred access control checks, now that we know in which
11091      SCOPE the declared entity resides.  */
11092   if (!member_p && decl)
11093     {
11094       tree saved_current_function_decl = NULL_TREE;
11095
11096       /* If the entity being declared is a function, pretend that we
11097          are in its scope.  If it is a `friend', it may have access to
11098          things that would not otherwise be accessible.  */
11099       if (TREE_CODE (decl) == FUNCTION_DECL)
11100         {
11101           saved_current_function_decl = current_function_decl;
11102           current_function_decl = decl;
11103         }
11104
11105       /* Perform access checks for template parameters.  */
11106       cp_parser_perform_template_parameter_access_checks (checks);
11107
11108       /* Perform the access control checks for the declarator and the
11109          the decl-specifiers.  */
11110       perform_deferred_access_checks ();
11111
11112       /* Restore the saved value.  */
11113       if (TREE_CODE (decl) == FUNCTION_DECL)
11114         current_function_decl = saved_current_function_decl;
11115     }
11116
11117   /* Parse the initializer.  */
11118   initializer = NULL_TREE;
11119   is_parenthesized_init = false;
11120   is_non_constant_init = true;
11121   if (is_initialized)
11122     {
11123       if (declarator->kind == cdk_function
11124           && declarator->declarator->kind == cdk_id
11125           && initialization_kind == CPP_EQ)
11126         initializer = cp_parser_pure_specifier (parser);
11127       else
11128         initializer = cp_parser_initializer (parser,
11129                                              &is_parenthesized_init,
11130                                              &is_non_constant_init);
11131     }
11132
11133   /* The old parser allows attributes to appear after a parenthesized
11134      initializer.  Mark Mitchell proposed removing this functionality
11135      on the GCC mailing lists on 2002-08-13.  This parser accepts the
11136      attributes -- but ignores them.  */
11137   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
11138     if (cp_parser_attributes_opt (parser))
11139       warning (OPT_Wattributes,
11140                "attributes after parenthesized initializer ignored");
11141
11142   /* For an in-class declaration, use `grokfield' to create the
11143      declaration.  */
11144   if (member_p)
11145     {
11146       if (pushed_scope)
11147         {
11148           pop_scope (pushed_scope);
11149           pushed_scope = false;
11150         }
11151       decl = grokfield (declarator, decl_specifiers,
11152                         initializer, !is_non_constant_init,
11153                         /*asmspec=*/NULL_TREE,
11154                         prefix_attributes);
11155       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
11156         cp_parser_save_default_args (parser, decl);
11157     }
11158
11159   /* Finish processing the declaration.  But, skip friend
11160      declarations.  */
11161   if (!friend_p && decl && decl != error_mark_node)
11162     {
11163       cp_finish_decl (decl,
11164                       initializer, !is_non_constant_init,
11165                       asm_specification,
11166                       /* If the initializer is in parentheses, then this is
11167                          a direct-initialization, which means that an
11168                          `explicit' constructor is OK.  Otherwise, an
11169                          `explicit' constructor cannot be used.  */
11170                       ((is_parenthesized_init || !is_initialized)
11171                      ? 0 : LOOKUP_ONLYCONVERTING));
11172     }
11173   if (!friend_p && pushed_scope)
11174     pop_scope (pushed_scope);
11175
11176   return decl;
11177 }
11178
11179 /* Parse a declarator.
11180
11181    declarator:
11182      direct-declarator
11183      ptr-operator declarator
11184
11185    abstract-declarator:
11186      ptr-operator abstract-declarator [opt]
11187      direct-abstract-declarator
11188
11189    GNU Extensions:
11190
11191    declarator:
11192      attributes [opt] direct-declarator
11193      attributes [opt] ptr-operator declarator
11194
11195    abstract-declarator:
11196      attributes [opt] ptr-operator abstract-declarator [opt]
11197      attributes [opt] direct-abstract-declarator
11198
11199    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
11200    detect constructor, destructor or conversion operators. It is set
11201    to -1 if the declarator is a name, and +1 if it is a
11202    function. Otherwise it is set to zero. Usually you just want to
11203    test for >0, but internally the negative value is used.
11204
11205    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
11206    a decl-specifier-seq unless it declares a constructor, destructor,
11207    or conversion.  It might seem that we could check this condition in
11208    semantic analysis, rather than parsing, but that makes it difficult
11209    to handle something like `f()'.  We want to notice that there are
11210    no decl-specifiers, and therefore realize that this is an
11211    expression, not a declaration.)
11212
11213    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
11214    the declarator is a direct-declarator of the form "(...)".
11215
11216    MEMBER_P is true iff this declarator is a member-declarator.  */
11217
11218 static cp_declarator *
11219 cp_parser_declarator (cp_parser* parser,
11220                       cp_parser_declarator_kind dcl_kind,
11221                       int* ctor_dtor_or_conv_p,
11222                       bool* parenthesized_p,
11223                       bool member_p)
11224 {
11225   cp_token *token;
11226   cp_declarator *declarator;
11227   enum tree_code code;
11228   cp_cv_quals cv_quals;
11229   tree class_type;
11230   tree attributes = NULL_TREE;
11231
11232   /* Assume this is not a constructor, destructor, or type-conversion
11233      operator.  */
11234   if (ctor_dtor_or_conv_p)
11235     *ctor_dtor_or_conv_p = 0;
11236
11237   if (cp_parser_allow_gnu_extensions_p (parser))
11238     attributes = cp_parser_attributes_opt (parser);
11239
11240   /* Peek at the next token.  */
11241   token = cp_lexer_peek_token (parser->lexer);
11242
11243   /* Check for the ptr-operator production.  */
11244   cp_parser_parse_tentatively (parser);
11245   /* Parse the ptr-operator.  */
11246   code = cp_parser_ptr_operator (parser,
11247                                  &class_type,
11248                                  &cv_quals);
11249   /* If that worked, then we have a ptr-operator.  */
11250   if (cp_parser_parse_definitely (parser))
11251     {
11252       /* If a ptr-operator was found, then this declarator was not
11253          parenthesized.  */
11254       if (parenthesized_p)
11255         *parenthesized_p = true;
11256       /* The dependent declarator is optional if we are parsing an
11257          abstract-declarator.  */
11258       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11259         cp_parser_parse_tentatively (parser);
11260
11261       /* Parse the dependent declarator.  */
11262       declarator = cp_parser_declarator (parser, dcl_kind,
11263                                          /*ctor_dtor_or_conv_p=*/NULL,
11264                                          /*parenthesized_p=*/NULL,
11265                                          /*member_p=*/false);
11266
11267       /* If we are parsing an abstract-declarator, we must handle the
11268          case where the dependent declarator is absent.  */
11269       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
11270           && !cp_parser_parse_definitely (parser))
11271         declarator = NULL;
11272
11273       /* Build the representation of the ptr-operator.  */
11274       if (class_type)
11275         declarator = make_ptrmem_declarator (cv_quals,
11276                                              class_type,
11277                                              declarator);
11278       else if (code == INDIRECT_REF)
11279         declarator = make_pointer_declarator (cv_quals, declarator);
11280       else
11281         declarator = make_reference_declarator (cv_quals, declarator);
11282     }
11283   /* Everything else is a direct-declarator.  */
11284   else
11285     {
11286       if (parenthesized_p)
11287         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
11288                                                    CPP_OPEN_PAREN);
11289       declarator = cp_parser_direct_declarator (parser, dcl_kind,
11290                                                 ctor_dtor_or_conv_p,
11291                                                 member_p);
11292     }
11293
11294   if (attributes && declarator && declarator != cp_error_declarator)
11295     declarator->attributes = attributes;
11296
11297   return declarator;
11298 }
11299
11300 /* Parse a direct-declarator or direct-abstract-declarator.
11301
11302    direct-declarator:
11303      declarator-id
11304      direct-declarator ( parameter-declaration-clause )
11305        cv-qualifier-seq [opt]
11306        exception-specification [opt]
11307      direct-declarator [ constant-expression [opt] ]
11308      ( declarator )
11309
11310    direct-abstract-declarator:
11311      direct-abstract-declarator [opt]
11312        ( parameter-declaration-clause )
11313        cv-qualifier-seq [opt]
11314        exception-specification [opt]
11315      direct-abstract-declarator [opt] [ constant-expression [opt] ]
11316      ( abstract-declarator )
11317
11318    Returns a representation of the declarator.  DCL_KIND is
11319    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
11320    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
11321    we are parsing a direct-declarator.  It is
11322    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
11323    of ambiguity we prefer an abstract declarator, as per
11324    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
11325    cp_parser_declarator.  */
11326
11327 static cp_declarator *
11328 cp_parser_direct_declarator (cp_parser* parser,
11329                              cp_parser_declarator_kind dcl_kind,
11330                              int* ctor_dtor_or_conv_p,
11331                              bool member_p)
11332 {
11333   cp_token *token;
11334   cp_declarator *declarator = NULL;
11335   tree scope = NULL_TREE;
11336   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11337   bool saved_in_declarator_p = parser->in_declarator_p;
11338   bool first = true;
11339   tree pushed_scope = NULL_TREE;
11340
11341   while (true)
11342     {
11343       /* Peek at the next token.  */
11344       token = cp_lexer_peek_token (parser->lexer);
11345       if (token->type == CPP_OPEN_PAREN)
11346         {
11347           /* This is either a parameter-declaration-clause, or a
11348              parenthesized declarator. When we know we are parsing a
11349              named declarator, it must be a parenthesized declarator
11350              if FIRST is true. For instance, `(int)' is a
11351              parameter-declaration-clause, with an omitted
11352              direct-abstract-declarator. But `((*))', is a
11353              parenthesized abstract declarator. Finally, when T is a
11354              template parameter `(T)' is a
11355              parameter-declaration-clause, and not a parenthesized
11356              named declarator.
11357
11358              We first try and parse a parameter-declaration-clause,
11359              and then try a nested declarator (if FIRST is true).
11360
11361              It is not an error for it not to be a
11362              parameter-declaration-clause, even when FIRST is
11363              false. Consider,
11364
11365                int i (int);
11366                int i (3);
11367
11368              The first is the declaration of a function while the
11369              second is a the definition of a variable, including its
11370              initializer.
11371
11372              Having seen only the parenthesis, we cannot know which of
11373              these two alternatives should be selected.  Even more
11374              complex are examples like:
11375
11376                int i (int (a));
11377                int i (int (3));
11378
11379              The former is a function-declaration; the latter is a
11380              variable initialization.
11381
11382              Thus again, we try a parameter-declaration-clause, and if
11383              that fails, we back out and return.  */
11384
11385           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11386             {
11387               cp_parameter_declarator *params;
11388               unsigned saved_num_template_parameter_lists;
11389
11390               /* In a member-declarator, the only valid interpretation
11391                  of a parenthesis is the start of a
11392                  parameter-declaration-clause.  (It is invalid to
11393                  initialize a static data member with a parenthesized
11394                  initializer; only the "=" form of initialization is
11395                  permitted.)  */
11396               if (!member_p)
11397                 cp_parser_parse_tentatively (parser);
11398
11399               /* Consume the `('.  */
11400               cp_lexer_consume_token (parser->lexer);
11401               if (first)
11402                 {
11403                   /* If this is going to be an abstract declarator, we're
11404                      in a declarator and we can't have default args.  */
11405                   parser->default_arg_ok_p = false;
11406                   parser->in_declarator_p = true;
11407                 }
11408
11409               /* Inside the function parameter list, surrounding
11410                  template-parameter-lists do not apply.  */
11411               saved_num_template_parameter_lists
11412                 = parser->num_template_parameter_lists;
11413               parser->num_template_parameter_lists = 0;
11414
11415               /* Parse the parameter-declaration-clause.  */
11416               params = cp_parser_parameter_declaration_clause (parser);
11417
11418               parser->num_template_parameter_lists
11419                 = saved_num_template_parameter_lists;
11420
11421               /* If all went well, parse the cv-qualifier-seq and the
11422                  exception-specification.  */
11423               if (member_p || cp_parser_parse_definitely (parser))
11424                 {
11425                   cp_cv_quals cv_quals;
11426                   tree exception_specification;
11427
11428                   if (ctor_dtor_or_conv_p)
11429                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
11430                   first = false;
11431                   /* Consume the `)'.  */
11432                   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
11433
11434                   /* Parse the cv-qualifier-seq.  */
11435                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11436                   /* And the exception-specification.  */
11437                   exception_specification
11438                     = cp_parser_exception_specification_opt (parser);
11439
11440                   /* Create the function-declarator.  */
11441                   declarator = make_call_declarator (declarator,
11442                                                      params,
11443                                                      cv_quals,
11444                                                      exception_specification);
11445                   /* Any subsequent parameter lists are to do with
11446                      return type, so are not those of the declared
11447                      function.  */
11448                   parser->default_arg_ok_p = false;
11449
11450                   /* Repeat the main loop.  */
11451                   continue;
11452                 }
11453             }
11454
11455           /* If this is the first, we can try a parenthesized
11456              declarator.  */
11457           if (first)
11458             {
11459               bool saved_in_type_id_in_expr_p;
11460
11461               parser->default_arg_ok_p = saved_default_arg_ok_p;
11462               parser->in_declarator_p = saved_in_declarator_p;
11463
11464               /* Consume the `('.  */
11465               cp_lexer_consume_token (parser->lexer);
11466               /* Parse the nested declarator.  */
11467               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
11468               parser->in_type_id_in_expr_p = true;
11469               declarator
11470                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
11471                                         /*parenthesized_p=*/NULL,
11472                                         member_p);
11473               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
11474               first = false;
11475               /* Expect a `)'.  */
11476               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11477                 declarator = cp_error_declarator;
11478               if (declarator == cp_error_declarator)
11479                 break;
11480
11481               goto handle_declarator;
11482             }
11483           /* Otherwise, we must be done.  */
11484           else
11485             break;
11486         }
11487       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11488                && token->type == CPP_OPEN_SQUARE)
11489         {
11490           /* Parse an array-declarator.  */
11491           tree bounds;
11492
11493           if (ctor_dtor_or_conv_p)
11494             *ctor_dtor_or_conv_p = 0;
11495
11496           first = false;
11497           parser->default_arg_ok_p = false;
11498           parser->in_declarator_p = true;
11499           /* Consume the `['.  */
11500           cp_lexer_consume_token (parser->lexer);
11501           /* Peek at the next token.  */
11502           token = cp_lexer_peek_token (parser->lexer);
11503           /* If the next token is `]', then there is no
11504              constant-expression.  */
11505           if (token->type != CPP_CLOSE_SQUARE)
11506             {
11507               bool non_constant_p;
11508
11509               bounds
11510                 = cp_parser_constant_expression (parser,
11511                                                  /*allow_non_constant=*/true,
11512                                                  &non_constant_p);
11513               if (!non_constant_p)
11514                 bounds = fold_non_dependent_expr (bounds);
11515               /* Normally, the array bound must be an integral constant
11516                  expression.  However, as an extension, we allow VLAs
11517                  in function scopes.  */
11518               else if (!at_function_scope_p ())
11519                 {
11520                   error ("array bound is not an integer constant");
11521                   bounds = error_mark_node;
11522                 }
11523             }
11524           else
11525             bounds = NULL_TREE;
11526           /* Look for the closing `]'.  */
11527           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
11528             {
11529               declarator = cp_error_declarator;
11530               break;
11531             }
11532
11533           declarator = make_array_declarator (declarator, bounds);
11534         }
11535       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
11536         {
11537           tree qualifying_scope;
11538           tree unqualified_name;
11539           special_function_kind sfk;
11540           bool abstract_ok;
11541
11542           /* Parse a declarator-id */
11543           abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
11544           if (abstract_ok)
11545             cp_parser_parse_tentatively (parser);
11546           unqualified_name
11547             = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
11548           qualifying_scope = parser->scope;
11549           if (abstract_ok)
11550             {
11551               if (!cp_parser_parse_definitely (parser))
11552                 unqualified_name = error_mark_node;
11553               else if (unqualified_name
11554                        && (qualifying_scope
11555                            || (TREE_CODE (unqualified_name)
11556                                != IDENTIFIER_NODE)))
11557                 {
11558                   cp_parser_error (parser, "expected unqualified-id");
11559                   unqualified_name = error_mark_node;
11560                 }
11561             }
11562
11563           if (!unqualified_name)
11564             return NULL;
11565           if (unqualified_name == error_mark_node)
11566             {
11567               declarator = cp_error_declarator;
11568               break;
11569             }
11570
11571           if (qualifying_scope && at_namespace_scope_p ()
11572               && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
11573             {
11574               /* In the declaration of a member of a template class
11575                  outside of the class itself, the SCOPE will sometimes
11576                  be a TYPENAME_TYPE.  For example, given:
11577
11578                  template <typename T>
11579                  int S<T>::R::i = 3;
11580
11581                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
11582                  this context, we must resolve S<T>::R to an ordinary
11583                  type, rather than a typename type.
11584
11585                  The reason we normally avoid resolving TYPENAME_TYPEs
11586                  is that a specialization of `S' might render
11587                  `S<T>::R' not a type.  However, if `S' is
11588                  specialized, then this `i' will not be used, so there
11589                  is no harm in resolving the types here.  */
11590               tree type;
11591
11592               /* Resolve the TYPENAME_TYPE.  */
11593               type = resolve_typename_type (qualifying_scope,
11594                                             /*only_current_p=*/false);
11595               /* If that failed, the declarator is invalid.  */
11596               if (type == error_mark_node)
11597                 error ("%<%T::%D%> is not a type",
11598                        TYPE_CONTEXT (qualifying_scope),
11599                        TYPE_IDENTIFIER (qualifying_scope));
11600               qualifying_scope = type;
11601             }
11602
11603           sfk = sfk_none;
11604           if (unqualified_name)
11605             {
11606               tree class_type;
11607
11608               if (qualifying_scope
11609                   && CLASS_TYPE_P (qualifying_scope))
11610                 class_type = qualifying_scope;
11611               else
11612                 class_type = current_class_type;
11613
11614               if (TREE_CODE (unqualified_name) == TYPE_DECL)
11615                 {
11616                   tree name_type = TREE_TYPE (unqualified_name);
11617                   if (class_type && same_type_p (name_type, class_type))
11618                     {
11619                       if (qualifying_scope
11620                           && CLASSTYPE_USE_TEMPLATE (name_type))
11621                         {
11622                           error ("invalid use of constructor as a template");
11623                           inform ("use %<%T::%D%> instead of %<%T::%D%> to "
11624                                   "name the constructor in a qualified name",
11625                                   class_type,
11626                                   DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
11627                                   class_type, name_type);
11628                           declarator = cp_error_declarator;
11629                           break;
11630                         }
11631                       else
11632                         unqualified_name = constructor_name (class_type);
11633                     }
11634                   else
11635                     {
11636                       /* We do not attempt to print the declarator
11637                          here because we do not have enough
11638                          information about its original syntactic
11639                          form.  */
11640                       cp_parser_error (parser, "invalid declarator");
11641                       declarator = cp_error_declarator;
11642                       break;
11643                     }
11644                 }
11645
11646               if (class_type)
11647                 {
11648                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
11649                     sfk = sfk_destructor;
11650                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
11651                     sfk = sfk_conversion;
11652                   else if (/* There's no way to declare a constructor
11653                               for an anonymous type, even if the type
11654                               got a name for linkage purposes.  */
11655                            !TYPE_WAS_ANONYMOUS (class_type)
11656                            && constructor_name_p (unqualified_name,
11657                                                   class_type))
11658                     {
11659                       unqualified_name = constructor_name (class_type);
11660                       sfk = sfk_constructor;
11661                     }
11662
11663                   if (ctor_dtor_or_conv_p && sfk != sfk_none)
11664                     *ctor_dtor_or_conv_p = -1;
11665                 }
11666             }
11667           declarator = make_id_declarator (qualifying_scope,
11668                                            unqualified_name,
11669                                            sfk);
11670           declarator->id_loc = token->location;
11671
11672         handle_declarator:;
11673           scope = get_scope_of_declarator (declarator);
11674           if (scope)
11675             /* Any names that appear after the declarator-id for a
11676                member are looked up in the containing scope.  */
11677             pushed_scope = push_scope (scope);
11678           parser->in_declarator_p = true;
11679           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
11680               || (declarator && declarator->kind == cdk_id))
11681             /* Default args are only allowed on function
11682                declarations.  */
11683             parser->default_arg_ok_p = saved_default_arg_ok_p;
11684           else
11685             parser->default_arg_ok_p = false;
11686
11687           first = false;
11688         }
11689       /* We're done.  */
11690       else
11691         break;
11692     }
11693
11694   /* For an abstract declarator, we might wind up with nothing at this
11695      point.  That's an error; the declarator is not optional.  */
11696   if (!declarator)
11697     cp_parser_error (parser, "expected declarator");
11698
11699   /* If we entered a scope, we must exit it now.  */
11700   if (pushed_scope)
11701     pop_scope (pushed_scope);
11702
11703   parser->default_arg_ok_p = saved_default_arg_ok_p;
11704   parser->in_declarator_p = saved_in_declarator_p;
11705
11706   return declarator;
11707 }
11708
11709 /* Parse a ptr-operator.
11710
11711    ptr-operator:
11712      * cv-qualifier-seq [opt]
11713      &
11714      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
11715
11716    GNU Extension:
11717
11718    ptr-operator:
11719      & cv-qualifier-seq [opt]
11720
11721    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
11722    Returns ADDR_EXPR if a reference was used.  In the case of a
11723    pointer-to-member, *TYPE is filled in with the TYPE containing the
11724    member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
11725    TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
11726    ERROR_MARK if an error occurred.  */
11727
11728 static enum tree_code
11729 cp_parser_ptr_operator (cp_parser* parser,
11730                         tree* type,
11731                         cp_cv_quals *cv_quals)
11732 {
11733   enum tree_code code = ERROR_MARK;
11734   cp_token *token;
11735
11736   /* Assume that it's not a pointer-to-member.  */
11737   *type = NULL_TREE;
11738   /* And that there are no cv-qualifiers.  */
11739   *cv_quals = TYPE_UNQUALIFIED;
11740
11741   /* Peek at the next token.  */
11742   token = cp_lexer_peek_token (parser->lexer);
11743   /* If it's a `*' or `&' we have a pointer or reference.  */
11744   if (token->type == CPP_MULT || token->type == CPP_AND)
11745     {
11746       /* Remember which ptr-operator we were processing.  */
11747       code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
11748
11749       /* Consume the `*' or `&'.  */
11750       cp_lexer_consume_token (parser->lexer);
11751
11752       /* A `*' can be followed by a cv-qualifier-seq, and so can a
11753          `&', if we are allowing GNU extensions.  (The only qualifier
11754          that can legally appear after `&' is `restrict', but that is
11755          enforced during semantic analysis.  */
11756       if (code == INDIRECT_REF
11757           || cp_parser_allow_gnu_extensions_p (parser))
11758         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11759     }
11760   else
11761     {
11762       /* Try the pointer-to-member case.  */
11763       cp_parser_parse_tentatively (parser);
11764       /* Look for the optional `::' operator.  */
11765       cp_parser_global_scope_opt (parser,
11766                                   /*current_scope_valid_p=*/false);
11767       /* Look for the nested-name specifier.  */
11768       cp_parser_nested_name_specifier (parser,
11769                                        /*typename_keyword_p=*/false,
11770                                        /*check_dependency_p=*/true,
11771                                        /*type_p=*/false,
11772                                        /*is_declaration=*/false);
11773       /* If we found it, and the next token is a `*', then we are
11774          indeed looking at a pointer-to-member operator.  */
11775       if (!cp_parser_error_occurred (parser)
11776           && cp_parser_require (parser, CPP_MULT, "`*'"))
11777         {
11778           /* Indicate that the `*' operator was used.  */
11779           code = INDIRECT_REF;
11780
11781           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
11782             error ("%qD is a namespace", parser->scope);
11783           else
11784             {
11785               /* The type of which the member is a member is given by the
11786                  current SCOPE.  */
11787               *type = parser->scope;
11788               /* The next name will not be qualified.  */
11789               parser->scope = NULL_TREE;
11790               parser->qualifying_scope = NULL_TREE;
11791               parser->object_scope = NULL_TREE;
11792               /* Look for the optional cv-qualifier-seq.  */
11793               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11794             }
11795         }
11796       /* If that didn't work we don't have a ptr-operator.  */
11797       if (!cp_parser_parse_definitely (parser))
11798         cp_parser_error (parser, "expected ptr-operator");
11799     }
11800
11801   return code;
11802 }
11803
11804 /* Parse an (optional) cv-qualifier-seq.
11805
11806    cv-qualifier-seq:
11807      cv-qualifier cv-qualifier-seq [opt]
11808
11809    cv-qualifier:
11810      const
11811      volatile
11812
11813    GNU Extension:
11814
11815    cv-qualifier:
11816      __restrict__
11817
11818    Returns a bitmask representing the cv-qualifiers.  */
11819
11820 static cp_cv_quals
11821 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
11822 {
11823   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
11824
11825   while (true)
11826     {
11827       cp_token *token;
11828       cp_cv_quals cv_qualifier;
11829
11830       /* Peek at the next token.  */
11831       token = cp_lexer_peek_token (parser->lexer);
11832       /* See if it's a cv-qualifier.  */
11833       switch (token->keyword)
11834         {
11835         case RID_CONST:
11836           cv_qualifier = TYPE_QUAL_CONST;
11837           break;
11838
11839         case RID_VOLATILE:
11840           cv_qualifier = TYPE_QUAL_VOLATILE;
11841           break;
11842
11843         case RID_RESTRICT:
11844           cv_qualifier = TYPE_QUAL_RESTRICT;
11845           break;
11846
11847         default:
11848           cv_qualifier = TYPE_UNQUALIFIED;
11849           break;
11850         }
11851
11852       if (!cv_qualifier)
11853         break;
11854
11855       if (cv_quals & cv_qualifier)
11856         {
11857           error ("duplicate cv-qualifier");
11858           cp_lexer_purge_token (parser->lexer);
11859         }
11860       else
11861         {
11862           cp_lexer_consume_token (parser->lexer);
11863           cv_quals |= cv_qualifier;
11864         }
11865     }
11866
11867   return cv_quals;
11868 }
11869
11870 /* Parse a declarator-id.
11871
11872    declarator-id:
11873      id-expression
11874      :: [opt] nested-name-specifier [opt] type-name
11875
11876    In the `id-expression' case, the value returned is as for
11877    cp_parser_id_expression if the id-expression was an unqualified-id.
11878    If the id-expression was a qualified-id, then a SCOPE_REF is
11879    returned.  The first operand is the scope (either a NAMESPACE_DECL
11880    or TREE_TYPE), but the second is still just a representation of an
11881    unqualified-id.  */
11882
11883 static tree
11884 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
11885 {
11886   tree id;
11887   /* The expression must be an id-expression.  Assume that qualified
11888      names are the names of types so that:
11889
11890        template <class T>
11891        int S<T>::R::i = 3;
11892
11893      will work; we must treat `S<T>::R' as the name of a type.
11894      Similarly, assume that qualified names are templates, where
11895      required, so that:
11896
11897        template <class T>
11898        int S<T>::R<T>::i = 3;
11899
11900      will work, too.  */
11901   id = cp_parser_id_expression (parser,
11902                                 /*template_keyword_p=*/false,
11903                                 /*check_dependency_p=*/false,
11904                                 /*template_p=*/NULL,
11905                                 /*declarator_p=*/true,
11906                                 optional_p);
11907   if (id && BASELINK_P (id))
11908     id = BASELINK_FUNCTIONS (id);
11909   return id;
11910 }
11911
11912 /* Parse a type-id.
11913
11914    type-id:
11915      type-specifier-seq abstract-declarator [opt]
11916
11917    Returns the TYPE specified.  */
11918
11919 static tree
11920 cp_parser_type_id (cp_parser* parser)
11921 {
11922   cp_decl_specifier_seq type_specifier_seq;
11923   cp_declarator *abstract_declarator;
11924
11925   /* Parse the type-specifier-seq.  */
11926   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
11927                                 &type_specifier_seq);
11928   if (type_specifier_seq.type == error_mark_node)
11929     return error_mark_node;
11930
11931   /* There might or might not be an abstract declarator.  */
11932   cp_parser_parse_tentatively (parser);
11933   /* Look for the declarator.  */
11934   abstract_declarator
11935     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
11936                             /*parenthesized_p=*/NULL,
11937                             /*member_p=*/false);
11938   /* Check to see if there really was a declarator.  */
11939   if (!cp_parser_parse_definitely (parser))
11940     abstract_declarator = NULL;
11941
11942   return groktypename (&type_specifier_seq, abstract_declarator);
11943 }
11944
11945 /* Parse a type-specifier-seq.
11946
11947    type-specifier-seq:
11948      type-specifier type-specifier-seq [opt]
11949
11950    GNU extension:
11951
11952    type-specifier-seq:
11953      attributes type-specifier-seq [opt]
11954
11955    If IS_CONDITION is true, we are at the start of a "condition",
11956    e.g., we've just seen "if (".
11957
11958    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
11959
11960 static void
11961 cp_parser_type_specifier_seq (cp_parser* parser,
11962                               bool is_condition,
11963                               cp_decl_specifier_seq *type_specifier_seq)
11964 {
11965   bool seen_type_specifier = false;
11966   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
11967
11968   /* Clear the TYPE_SPECIFIER_SEQ.  */
11969   clear_decl_specs (type_specifier_seq);
11970
11971   /* Parse the type-specifiers and attributes.  */
11972   while (true)
11973     {
11974       tree type_specifier;
11975       bool is_cv_qualifier;
11976
11977       /* Check for attributes first.  */
11978       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
11979         {
11980           type_specifier_seq->attributes =
11981             chainon (type_specifier_seq->attributes,
11982                      cp_parser_attributes_opt (parser));
11983           continue;
11984         }
11985
11986       /* Look for the type-specifier.  */
11987       type_specifier = cp_parser_type_specifier (parser,
11988                                                  flags,
11989                                                  type_specifier_seq,
11990                                                  /*is_declaration=*/false,
11991                                                  NULL,
11992                                                  &is_cv_qualifier);
11993       if (!type_specifier)
11994         {
11995           /* If the first type-specifier could not be found, this is not a
11996              type-specifier-seq at all.  */
11997           if (!seen_type_specifier)
11998             {
11999               cp_parser_error (parser, "expected type-specifier");
12000               type_specifier_seq->type = error_mark_node;
12001               return;
12002             }
12003           /* If subsequent type-specifiers could not be found, the
12004              type-specifier-seq is complete.  */
12005           break;
12006         }
12007
12008       seen_type_specifier = true;
12009       /* The standard says that a condition can be:
12010
12011             type-specifier-seq declarator = assignment-expression
12012
12013          However, given:
12014
12015            struct S {};
12016            if (int S = ...)
12017
12018          we should treat the "S" as a declarator, not as a
12019          type-specifier.  The standard doesn't say that explicitly for
12020          type-specifier-seq, but it does say that for
12021          decl-specifier-seq in an ordinary declaration.  Perhaps it
12022          would be clearer just to allow a decl-specifier-seq here, and
12023          then add a semantic restriction that if any decl-specifiers
12024          that are not type-specifiers appear, the program is invalid.  */
12025       if (is_condition && !is_cv_qualifier)
12026         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
12027     }
12028
12029   cp_parser_check_decl_spec (type_specifier_seq);
12030 }
12031
12032 /* Parse a parameter-declaration-clause.
12033
12034    parameter-declaration-clause:
12035      parameter-declaration-list [opt] ... [opt]
12036      parameter-declaration-list , ...
12037
12038    Returns a representation for the parameter declarations.  A return
12039    value of NULL indicates a parameter-declaration-clause consisting
12040    only of an ellipsis.  */
12041
12042 static cp_parameter_declarator *
12043 cp_parser_parameter_declaration_clause (cp_parser* parser)
12044 {
12045   cp_parameter_declarator *parameters;
12046   cp_token *token;
12047   bool ellipsis_p;
12048   bool is_error;
12049
12050   /* Peek at the next token.  */
12051   token = cp_lexer_peek_token (parser->lexer);
12052   /* Check for trivial parameter-declaration-clauses.  */
12053   if (token->type == CPP_ELLIPSIS)
12054     {
12055       /* Consume the `...' token.  */
12056       cp_lexer_consume_token (parser->lexer);
12057       return NULL;
12058     }
12059   else if (token->type == CPP_CLOSE_PAREN)
12060     /* There are no parameters.  */
12061     {
12062 #ifndef NO_IMPLICIT_EXTERN_C
12063       if (in_system_header && current_class_type == NULL
12064           && current_lang_name == lang_name_c)
12065         return NULL;
12066       else
12067 #endif
12068         return no_parameters;
12069     }
12070   /* Check for `(void)', too, which is a special case.  */
12071   else if (token->keyword == RID_VOID
12072            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
12073                == CPP_CLOSE_PAREN))
12074     {
12075       /* Consume the `void' token.  */
12076       cp_lexer_consume_token (parser->lexer);
12077       /* There are no parameters.  */
12078       return no_parameters;
12079     }
12080
12081   /* Parse the parameter-declaration-list.  */
12082   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
12083   /* If a parse error occurred while parsing the
12084      parameter-declaration-list, then the entire
12085      parameter-declaration-clause is erroneous.  */
12086   if (is_error)
12087     return NULL;
12088
12089   /* Peek at the next token.  */
12090   token = cp_lexer_peek_token (parser->lexer);
12091   /* If it's a `,', the clause should terminate with an ellipsis.  */
12092   if (token->type == CPP_COMMA)
12093     {
12094       /* Consume the `,'.  */
12095       cp_lexer_consume_token (parser->lexer);
12096       /* Expect an ellipsis.  */
12097       ellipsis_p
12098         = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
12099     }
12100   /* It might also be `...' if the optional trailing `,' was
12101      omitted.  */
12102   else if (token->type == CPP_ELLIPSIS)
12103     {
12104       /* Consume the `...' token.  */
12105       cp_lexer_consume_token (parser->lexer);
12106       /* And remember that we saw it.  */
12107       ellipsis_p = true;
12108     }
12109   else
12110     ellipsis_p = false;
12111
12112   /* Finish the parameter list.  */
12113   if (parameters && ellipsis_p)
12114     parameters->ellipsis_p = true;
12115
12116   return parameters;
12117 }
12118
12119 /* Parse a parameter-declaration-list.
12120
12121    parameter-declaration-list:
12122      parameter-declaration
12123      parameter-declaration-list , parameter-declaration
12124
12125    Returns a representation of the parameter-declaration-list, as for
12126    cp_parser_parameter_declaration_clause.  However, the
12127    `void_list_node' is never appended to the list.  Upon return,
12128    *IS_ERROR will be true iff an error occurred.  */
12129
12130 static cp_parameter_declarator *
12131 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
12132 {
12133   cp_parameter_declarator *parameters = NULL;
12134   cp_parameter_declarator **tail = &parameters;
12135   bool saved_in_unbraced_linkage_specification_p;
12136
12137   /* Assume all will go well.  */
12138   *is_error = false;
12139   /* The special considerations that apply to a function within an
12140      unbraced linkage specifications do not apply to the parameters
12141      to the function.  */
12142   saved_in_unbraced_linkage_specification_p 
12143     = parser->in_unbraced_linkage_specification_p;
12144   parser->in_unbraced_linkage_specification_p = false;
12145
12146   /* Look for more parameters.  */
12147   while (true)
12148     {
12149       cp_parameter_declarator *parameter;
12150       bool parenthesized_p;
12151       /* Parse the parameter.  */
12152       parameter
12153         = cp_parser_parameter_declaration (parser,
12154                                            /*template_parm_p=*/false,
12155                                            &parenthesized_p);
12156
12157       /* If a parse error occurred parsing the parameter declaration,
12158          then the entire parameter-declaration-list is erroneous.  */
12159       if (!parameter)
12160         {
12161           *is_error = true;
12162           parameters = NULL;
12163           break;
12164         }
12165       /* Add the new parameter to the list.  */
12166       *tail = parameter;
12167       tail = &parameter->next;
12168
12169       /* Peek at the next token.  */
12170       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
12171           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
12172           /* These are for Objective-C++ */
12173           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
12174           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
12175         /* The parameter-declaration-list is complete.  */
12176         break;
12177       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12178         {
12179           cp_token *token;
12180
12181           /* Peek at the next token.  */
12182           token = cp_lexer_peek_nth_token (parser->lexer, 2);
12183           /* If it's an ellipsis, then the list is complete.  */
12184           if (token->type == CPP_ELLIPSIS)
12185             break;
12186           /* Otherwise, there must be more parameters.  Consume the
12187              `,'.  */
12188           cp_lexer_consume_token (parser->lexer);
12189           /* When parsing something like:
12190
12191                 int i(float f, double d)
12192
12193              we can tell after seeing the declaration for "f" that we
12194              are not looking at an initialization of a variable "i",
12195              but rather at the declaration of a function "i".
12196
12197              Due to the fact that the parsing of template arguments
12198              (as specified to a template-id) requires backtracking we
12199              cannot use this technique when inside a template argument
12200              list.  */
12201           if (!parser->in_template_argument_list_p
12202               && !parser->in_type_id_in_expr_p
12203               && cp_parser_uncommitted_to_tentative_parse_p (parser)
12204               /* However, a parameter-declaration of the form
12205                  "foat(f)" (which is a valid declaration of a
12206                  parameter "f") can also be interpreted as an
12207                  expression (the conversion of "f" to "float").  */
12208               && !parenthesized_p)
12209             cp_parser_commit_to_tentative_parse (parser);
12210         }
12211       else
12212         {
12213           cp_parser_error (parser, "expected %<,%> or %<...%>");
12214           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
12215             cp_parser_skip_to_closing_parenthesis (parser,
12216                                                    /*recovering=*/true,
12217                                                    /*or_comma=*/false,
12218                                                    /*consume_paren=*/false);
12219           break;
12220         }
12221     }
12222
12223   parser->in_unbraced_linkage_specification_p
12224     = saved_in_unbraced_linkage_specification_p;
12225
12226   return parameters;
12227 }
12228
12229 /* Parse a parameter declaration.
12230
12231    parameter-declaration:
12232      decl-specifier-seq declarator
12233      decl-specifier-seq declarator = assignment-expression
12234      decl-specifier-seq abstract-declarator [opt]
12235      decl-specifier-seq abstract-declarator [opt] = assignment-expression
12236
12237    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
12238    declares a template parameter.  (In that case, a non-nested `>'
12239    token encountered during the parsing of the assignment-expression
12240    is not interpreted as a greater-than operator.)
12241
12242    Returns a representation of the parameter, or NULL if an error
12243    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
12244    true iff the declarator is of the form "(p)".  */
12245
12246 static cp_parameter_declarator *
12247 cp_parser_parameter_declaration (cp_parser *parser,
12248                                  bool template_parm_p,
12249                                  bool *parenthesized_p)
12250 {
12251   int declares_class_or_enum;
12252   bool greater_than_is_operator_p;
12253   cp_decl_specifier_seq decl_specifiers;
12254   cp_declarator *declarator;
12255   tree default_argument;
12256   cp_token *token;
12257   const char *saved_message;
12258
12259   /* In a template parameter, `>' is not an operator.
12260
12261      [temp.param]
12262
12263      When parsing a default template-argument for a non-type
12264      template-parameter, the first non-nested `>' is taken as the end
12265      of the template parameter-list rather than a greater-than
12266      operator.  */
12267   greater_than_is_operator_p = !template_parm_p;
12268
12269   /* Type definitions may not appear in parameter types.  */
12270   saved_message = parser->type_definition_forbidden_message;
12271   parser->type_definition_forbidden_message
12272     = "types may not be defined in parameter types";
12273
12274   /* Parse the declaration-specifiers.  */
12275   cp_parser_decl_specifier_seq (parser,
12276                                 CP_PARSER_FLAGS_NONE,
12277                                 &decl_specifiers,
12278                                 &declares_class_or_enum);
12279   /* If an error occurred, there's no reason to attempt to parse the
12280      rest of the declaration.  */
12281   if (cp_parser_error_occurred (parser))
12282     {
12283       parser->type_definition_forbidden_message = saved_message;
12284       return NULL;
12285     }
12286
12287   /* Peek at the next token.  */
12288   token = cp_lexer_peek_token (parser->lexer);
12289   /* If the next token is a `)', `,', `=', `>', or `...', then there
12290      is no declarator.  */
12291   if (token->type == CPP_CLOSE_PAREN
12292       || token->type == CPP_COMMA
12293       || token->type == CPP_EQ
12294       || token->type == CPP_ELLIPSIS
12295       || token->type == CPP_GREATER)
12296     {
12297       declarator = NULL;
12298       if (parenthesized_p)
12299         *parenthesized_p = false;
12300     }
12301   /* Otherwise, there should be a declarator.  */
12302   else
12303     {
12304       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
12305       parser->default_arg_ok_p = false;
12306
12307       /* After seeing a decl-specifier-seq, if the next token is not a
12308          "(", there is no possibility that the code is a valid
12309          expression.  Therefore, if parsing tentatively, we commit at
12310          this point.  */
12311       if (!parser->in_template_argument_list_p
12312           /* In an expression context, having seen:
12313
12314                (int((char ...
12315
12316              we cannot be sure whether we are looking at a
12317              function-type (taking a "char" as a parameter) or a cast
12318              of some object of type "char" to "int".  */
12319           && !parser->in_type_id_in_expr_p
12320           && cp_parser_uncommitted_to_tentative_parse_p (parser)
12321           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
12322         cp_parser_commit_to_tentative_parse (parser);
12323       /* Parse the declarator.  */
12324       declarator = cp_parser_declarator (parser,
12325                                          CP_PARSER_DECLARATOR_EITHER,
12326                                          /*ctor_dtor_or_conv_p=*/NULL,
12327                                          parenthesized_p,
12328                                          /*member_p=*/false);
12329       parser->default_arg_ok_p = saved_default_arg_ok_p;
12330       /* After the declarator, allow more attributes.  */
12331       decl_specifiers.attributes
12332         = chainon (decl_specifiers.attributes,
12333                    cp_parser_attributes_opt (parser));
12334     }
12335
12336   /* The restriction on defining new types applies only to the type
12337      of the parameter, not to the default argument.  */
12338   parser->type_definition_forbidden_message = saved_message;
12339
12340   /* If the next token is `=', then process a default argument.  */
12341   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12342     {
12343       bool saved_greater_than_is_operator_p;
12344       /* Consume the `='.  */
12345       cp_lexer_consume_token (parser->lexer);
12346
12347       /* If we are defining a class, then the tokens that make up the
12348          default argument must be saved and processed later.  */
12349       if (!template_parm_p && at_class_scope_p ()
12350           && TYPE_BEING_DEFINED (current_class_type))
12351         {
12352           unsigned depth = 0;
12353           cp_token *first_token;
12354           cp_token *token;
12355
12356           /* Add tokens until we have processed the entire default
12357              argument.  We add the range [first_token, token).  */
12358           first_token = cp_lexer_peek_token (parser->lexer);
12359           while (true)
12360             {
12361               bool done = false;
12362
12363               /* Peek at the next token.  */
12364               token = cp_lexer_peek_token (parser->lexer);
12365               /* What we do depends on what token we have.  */
12366               switch (token->type)
12367                 {
12368                   /* In valid code, a default argument must be
12369                      immediately followed by a `,' `)', or `...'.  */
12370                 case CPP_COMMA:
12371                 case CPP_CLOSE_PAREN:
12372                 case CPP_ELLIPSIS:
12373                   /* If we run into a non-nested `;', `}', or `]',
12374                      then the code is invalid -- but the default
12375                      argument is certainly over.  */
12376                 case CPP_SEMICOLON:
12377                 case CPP_CLOSE_BRACE:
12378                 case CPP_CLOSE_SQUARE:
12379                   if (depth == 0)
12380                     done = true;
12381                   /* Update DEPTH, if necessary.  */
12382                   else if (token->type == CPP_CLOSE_PAREN
12383                            || token->type == CPP_CLOSE_BRACE
12384                            || token->type == CPP_CLOSE_SQUARE)
12385                     --depth;
12386                   break;
12387
12388                 case CPP_OPEN_PAREN:
12389                 case CPP_OPEN_SQUARE:
12390                 case CPP_OPEN_BRACE:
12391                   ++depth;
12392                   break;
12393
12394                 case CPP_GREATER:
12395                   /* If we see a non-nested `>', and `>' is not an
12396                      operator, then it marks the end of the default
12397                      argument.  */
12398                   if (!depth && !greater_than_is_operator_p)
12399                     done = true;
12400                   break;
12401
12402                   /* If we run out of tokens, issue an error message.  */
12403                 case CPP_EOF:
12404                 case CPP_PRAGMA_EOL:
12405                   error ("file ends in default argument");
12406                   done = true;
12407                   break;
12408
12409                 case CPP_NAME:
12410                 case CPP_SCOPE:
12411                   /* In these cases, we should look for template-ids.
12412                      For example, if the default argument is
12413                      `X<int, double>()', we need to do name lookup to
12414                      figure out whether or not `X' is a template; if
12415                      so, the `,' does not end the default argument.
12416
12417                      That is not yet done.  */
12418                   break;
12419
12420                 default:
12421                   break;
12422                 }
12423
12424               /* If we've reached the end, stop.  */
12425               if (done)
12426                 break;
12427
12428               /* Add the token to the token block.  */
12429               token = cp_lexer_consume_token (parser->lexer);
12430             }
12431
12432           /* Create a DEFAULT_ARG to represented the unparsed default
12433              argument.  */
12434           default_argument = make_node (DEFAULT_ARG);
12435           DEFARG_TOKENS (default_argument)
12436             = cp_token_cache_new (first_token, token);
12437           DEFARG_INSTANTIATIONS (default_argument) = NULL;
12438         }
12439       /* Outside of a class definition, we can just parse the
12440          assignment-expression.  */
12441       else
12442         {
12443           bool saved_local_variables_forbidden_p;
12444
12445           /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
12446              set correctly.  */
12447           saved_greater_than_is_operator_p
12448             = parser->greater_than_is_operator_p;
12449           parser->greater_than_is_operator_p = greater_than_is_operator_p;
12450           /* Local variable names (and the `this' keyword) may not
12451              appear in a default argument.  */
12452           saved_local_variables_forbidden_p
12453             = parser->local_variables_forbidden_p;
12454           parser->local_variables_forbidden_p = true;
12455           /* The default argument expression may cause implicitly
12456              defined member functions to be synthesized, which will
12457              result in garbage collection.  We must treat this
12458              situation as if we were within the body of function so as
12459              to avoid collecting live data on the stack.  */
12460           ++function_depth;
12461           /* Parse the assignment-expression.  */
12462           if (template_parm_p)
12463             push_deferring_access_checks (dk_no_deferred);
12464           default_argument
12465             = cp_parser_assignment_expression (parser, /*cast_p=*/false);
12466           if (template_parm_p)
12467             pop_deferring_access_checks ();
12468           /* Restore saved state.  */
12469           --function_depth;
12470           parser->greater_than_is_operator_p
12471             = saved_greater_than_is_operator_p;
12472           parser->local_variables_forbidden_p
12473             = saved_local_variables_forbidden_p;
12474         }
12475       if (!parser->default_arg_ok_p)
12476         {
12477           if (!flag_pedantic_errors)
12478             warning (0, "deprecated use of default argument for parameter of non-function");
12479           else
12480             {
12481               error ("default arguments are only permitted for function parameters");
12482               default_argument = NULL_TREE;
12483             }
12484         }
12485     }
12486   else
12487     default_argument = NULL_TREE;
12488
12489   return make_parameter_declarator (&decl_specifiers,
12490                                     declarator,
12491                                     default_argument);
12492 }
12493
12494 /* Parse a function-body.
12495
12496    function-body:
12497      compound_statement  */
12498
12499 static void
12500 cp_parser_function_body (cp_parser *parser)
12501 {
12502   cp_parser_compound_statement (parser, NULL, false);
12503 }
12504
12505 /* Parse a ctor-initializer-opt followed by a function-body.  Return
12506    true if a ctor-initializer was present.  */
12507
12508 static bool
12509 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
12510 {
12511   tree body;
12512   bool ctor_initializer_p;
12513
12514   /* Begin the function body.  */
12515   body = begin_function_body ();
12516   /* Parse the optional ctor-initializer.  */
12517   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
12518   /* Parse the function-body.  */
12519   cp_parser_function_body (parser);
12520   /* Finish the function body.  */
12521   finish_function_body (body);
12522
12523   return ctor_initializer_p;
12524 }
12525
12526 /* Parse an initializer.
12527
12528    initializer:
12529      = initializer-clause
12530      ( expression-list )
12531
12532    Returns an expression representing the initializer.  If no
12533    initializer is present, NULL_TREE is returned.
12534
12535    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
12536    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
12537    set to FALSE if there is no initializer present.  If there is an
12538    initializer, and it is not a constant-expression, *NON_CONSTANT_P
12539    is set to true; otherwise it is set to false.  */
12540
12541 static tree
12542 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
12543                        bool* non_constant_p)
12544 {
12545   cp_token *token;
12546   tree init;
12547
12548   /* Peek at the next token.  */
12549   token = cp_lexer_peek_token (parser->lexer);
12550
12551   /* Let our caller know whether or not this initializer was
12552      parenthesized.  */
12553   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
12554   /* Assume that the initializer is constant.  */
12555   *non_constant_p = false;
12556
12557   if (token->type == CPP_EQ)
12558     {
12559       /* Consume the `='.  */
12560       cp_lexer_consume_token (parser->lexer);
12561       /* Parse the initializer-clause.  */
12562       init = cp_parser_initializer_clause (parser, non_constant_p);
12563     }
12564   else if (token->type == CPP_OPEN_PAREN)
12565     init = cp_parser_parenthesized_expression_list (parser, false,
12566                                                     /*cast_p=*/false,
12567                                                     non_constant_p);
12568   else
12569     {
12570       /* Anything else is an error.  */
12571       cp_parser_error (parser, "expected initializer");
12572       init = error_mark_node;
12573     }
12574
12575   return init;
12576 }
12577
12578 /* Parse an initializer-clause.
12579
12580    initializer-clause:
12581      assignment-expression
12582      { initializer-list , [opt] }
12583      { }
12584
12585    Returns an expression representing the initializer.
12586
12587    If the `assignment-expression' production is used the value
12588    returned is simply a representation for the expression.
12589
12590    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
12591    the elements of the initializer-list (or NULL, if the last
12592    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
12593    NULL_TREE.  There is no way to detect whether or not the optional
12594    trailing `,' was provided.  NON_CONSTANT_P is as for
12595    cp_parser_initializer.  */
12596
12597 static tree
12598 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
12599 {
12600   tree initializer;
12601
12602   /* Assume the expression is constant.  */
12603   *non_constant_p = false;
12604
12605   /* If it is not a `{', then we are looking at an
12606      assignment-expression.  */
12607   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
12608     {
12609       initializer
12610         = cp_parser_constant_expression (parser,
12611                                         /*allow_non_constant_p=*/true,
12612                                         non_constant_p);
12613       if (!*non_constant_p)
12614         initializer = fold_non_dependent_expr (initializer);
12615     }
12616   else
12617     {
12618       /* Consume the `{' token.  */
12619       cp_lexer_consume_token (parser->lexer);
12620       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
12621       initializer = make_node (CONSTRUCTOR);
12622       /* If it's not a `}', then there is a non-trivial initializer.  */
12623       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12624         {
12625           /* Parse the initializer list.  */
12626           CONSTRUCTOR_ELTS (initializer)
12627             = cp_parser_initializer_list (parser, non_constant_p);
12628           /* A trailing `,' token is allowed.  */
12629           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12630             cp_lexer_consume_token (parser->lexer);
12631         }
12632       /* Now, there should be a trailing `}'.  */
12633       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12634     }
12635
12636   return initializer;
12637 }
12638
12639 /* Parse an initializer-list.
12640
12641    initializer-list:
12642      initializer-clause
12643      initializer-list , initializer-clause
12644
12645    GNU Extension:
12646
12647    initializer-list:
12648      identifier : initializer-clause
12649      initializer-list, identifier : initializer-clause
12650
12651    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
12652    for the initializer.  If the INDEX of the elt is non-NULL, it is the
12653    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
12654    as for cp_parser_initializer.  */
12655
12656 static VEC(constructor_elt,gc) *
12657 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
12658 {
12659   VEC(constructor_elt,gc) *v = NULL;
12660
12661   /* Assume all of the expressions are constant.  */
12662   *non_constant_p = false;
12663
12664   /* Parse the rest of the list.  */
12665   while (true)
12666     {
12667       cp_token *token;
12668       tree identifier;
12669       tree initializer;
12670       bool clause_non_constant_p;
12671
12672       /* If the next token is an identifier and the following one is a
12673          colon, we are looking at the GNU designated-initializer
12674          syntax.  */
12675       if (cp_parser_allow_gnu_extensions_p (parser)
12676           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
12677           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
12678         {
12679           /* Consume the identifier.  */
12680           identifier = cp_lexer_consume_token (parser->lexer)->value;
12681           /* Consume the `:'.  */
12682           cp_lexer_consume_token (parser->lexer);
12683         }
12684       else
12685         identifier = NULL_TREE;
12686
12687       /* Parse the initializer.  */
12688       initializer = cp_parser_initializer_clause (parser,
12689                                                   &clause_non_constant_p);
12690       /* If any clause is non-constant, so is the entire initializer.  */
12691       if (clause_non_constant_p)
12692         *non_constant_p = true;
12693
12694       /* Add it to the vector.  */
12695       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
12696
12697       /* If the next token is not a comma, we have reached the end of
12698          the list.  */
12699       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12700         break;
12701
12702       /* Peek at the next token.  */
12703       token = cp_lexer_peek_nth_token (parser->lexer, 2);
12704       /* If the next token is a `}', then we're still done.  An
12705          initializer-clause can have a trailing `,' after the
12706          initializer-list and before the closing `}'.  */
12707       if (token->type == CPP_CLOSE_BRACE)
12708         break;
12709
12710       /* Consume the `,' token.  */
12711       cp_lexer_consume_token (parser->lexer);
12712     }
12713
12714   return v;
12715 }
12716
12717 /* Classes [gram.class] */
12718
12719 /* Parse a class-name.
12720
12721    class-name:
12722      identifier
12723      template-id
12724
12725    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
12726    to indicate that names looked up in dependent types should be
12727    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
12728    keyword has been used to indicate that the name that appears next
12729    is a template.  TAG_TYPE indicates the explicit tag given before
12730    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
12731    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
12732    is the class being defined in a class-head.
12733
12734    Returns the TYPE_DECL representing the class.  */
12735
12736 static tree
12737 cp_parser_class_name (cp_parser *parser,
12738                       bool typename_keyword_p,
12739                       bool template_keyword_p,
12740                       enum tag_types tag_type,
12741                       bool check_dependency_p,
12742                       bool class_head_p,
12743                       bool is_declaration)
12744 {
12745   tree decl;
12746   tree scope;
12747   bool typename_p;
12748   cp_token *token;
12749
12750   /* All class-names start with an identifier.  */
12751   token = cp_lexer_peek_token (parser->lexer);
12752   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
12753     {
12754       cp_parser_error (parser, "expected class-name");
12755       return error_mark_node;
12756     }
12757
12758   /* PARSER->SCOPE can be cleared when parsing the template-arguments
12759      to a template-id, so we save it here.  */
12760   scope = parser->scope;
12761   if (scope == error_mark_node)
12762     return error_mark_node;
12763
12764   /* Any name names a type if we're following the `typename' keyword
12765      in a qualified name where the enclosing scope is type-dependent.  */
12766   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
12767                 && dependent_type_p (scope));
12768   /* Handle the common case (an identifier, but not a template-id)
12769      efficiently.  */
12770   if (token->type == CPP_NAME
12771       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
12772     {
12773       cp_token *identifier_token;
12774       tree identifier;
12775       bool ambiguous_p;
12776
12777       /* Look for the identifier.  */
12778       identifier_token = cp_lexer_peek_token (parser->lexer);
12779       ambiguous_p = identifier_token->ambiguous_p;
12780       identifier = cp_parser_identifier (parser);
12781       /* If the next token isn't an identifier, we are certainly not
12782          looking at a class-name.  */
12783       if (identifier == error_mark_node)
12784         decl = error_mark_node;
12785       /* If we know this is a type-name, there's no need to look it
12786          up.  */
12787       else if (typename_p)
12788         decl = identifier;
12789       else
12790         {
12791           tree ambiguous_decls;
12792           /* If we already know that this lookup is ambiguous, then
12793              we've already issued an error message; there's no reason
12794              to check again.  */
12795           if (ambiguous_p)
12796             {
12797               cp_parser_simulate_error (parser);
12798               return error_mark_node;
12799             }
12800           /* If the next token is a `::', then the name must be a type
12801              name.
12802
12803              [basic.lookup.qual]
12804
12805              During the lookup for a name preceding the :: scope
12806              resolution operator, object, function, and enumerator
12807              names are ignored.  */
12808           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12809             tag_type = typename_type;
12810           /* Look up the name.  */
12811           decl = cp_parser_lookup_name (parser, identifier,
12812                                         tag_type,
12813                                         /*is_template=*/false,
12814                                         /*is_namespace=*/false,
12815                                         check_dependency_p,
12816                                         &ambiguous_decls);
12817           if (ambiguous_decls)
12818             {
12819               error ("reference to %qD is ambiguous", identifier);
12820               print_candidates (ambiguous_decls);
12821               if (cp_parser_parsing_tentatively (parser))
12822                 {
12823                   identifier_token->ambiguous_p = true;
12824                   cp_parser_simulate_error (parser);
12825                 }
12826               return error_mark_node;
12827             }
12828         }
12829     }
12830   else
12831     {
12832       /* Try a template-id.  */
12833       decl = cp_parser_template_id (parser, template_keyword_p,
12834                                     check_dependency_p,
12835                                     is_declaration);
12836       if (decl == error_mark_node)
12837         return error_mark_node;
12838     }
12839
12840   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
12841
12842   /* If this is a typename, create a TYPENAME_TYPE.  */
12843   if (typename_p && decl != error_mark_node)
12844     {
12845       decl = make_typename_type (scope, decl, typename_type,
12846                                  /*complain=*/tf_error);
12847       if (decl != error_mark_node)
12848         decl = TYPE_NAME (decl);
12849     }
12850
12851   /* Check to see that it is really the name of a class.  */
12852   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
12853       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
12854       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12855     /* Situations like this:
12856
12857          template <typename T> struct A {
12858            typename T::template X<int>::I i;
12859          };
12860
12861        are problematic.  Is `T::template X<int>' a class-name?  The
12862        standard does not seem to be definitive, but there is no other
12863        valid interpretation of the following `::'.  Therefore, those
12864        names are considered class-names.  */
12865     {
12866       decl = make_typename_type (scope, decl, tag_type, tf_error);
12867       if (decl != error_mark_node)
12868         decl = TYPE_NAME (decl);
12869     }
12870   else if (TREE_CODE (decl) != TYPE_DECL
12871            || TREE_TYPE (decl) == error_mark_node
12872            || !IS_AGGR_TYPE (TREE_TYPE (decl)))
12873     decl = error_mark_node;
12874
12875   if (decl == error_mark_node)
12876     cp_parser_error (parser, "expected class-name");
12877
12878   return decl;
12879 }
12880
12881 /* Parse a class-specifier.
12882
12883    class-specifier:
12884      class-head { member-specification [opt] }
12885
12886    Returns the TREE_TYPE representing the class.  */
12887
12888 static tree
12889 cp_parser_class_specifier (cp_parser* parser)
12890 {
12891   cp_token *token;
12892   tree type;
12893   tree attributes = NULL_TREE;
12894   int has_trailing_semicolon;
12895   bool nested_name_specifier_p;
12896   unsigned saved_num_template_parameter_lists;
12897   tree old_scope = NULL_TREE;
12898   tree scope = NULL_TREE;
12899
12900   push_deferring_access_checks (dk_no_deferred);
12901
12902   /* Parse the class-head.  */
12903   type = cp_parser_class_head (parser,
12904                                &nested_name_specifier_p,
12905                                &attributes);
12906   /* If the class-head was a semantic disaster, skip the entire body
12907      of the class.  */
12908   if (!type)
12909     {
12910       cp_parser_skip_to_end_of_block_or_statement (parser);
12911       pop_deferring_access_checks ();
12912       return error_mark_node;
12913     }
12914
12915   /* Look for the `{'.  */
12916   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
12917     {
12918       pop_deferring_access_checks ();
12919       return error_mark_node;
12920     }
12921
12922   /* Issue an error message if type-definitions are forbidden here.  */
12923   cp_parser_check_type_definition (parser);
12924   /* Remember that we are defining one more class.  */
12925   ++parser->num_classes_being_defined;
12926   /* Inside the class, surrounding template-parameter-lists do not
12927      apply.  */
12928   saved_num_template_parameter_lists
12929     = parser->num_template_parameter_lists;
12930   parser->num_template_parameter_lists = 0;
12931
12932   /* Start the class.  */
12933   if (nested_name_specifier_p)
12934     {
12935       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
12936       old_scope = push_inner_scope (scope);
12937     }
12938   type = begin_class_definition (type, attributes);
12939
12940   if (type == error_mark_node)
12941     /* If the type is erroneous, skip the entire body of the class.  */
12942     cp_parser_skip_to_closing_brace (parser);
12943   else
12944     /* Parse the member-specification.  */
12945     cp_parser_member_specification_opt (parser);
12946
12947   /* Look for the trailing `}'.  */
12948   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12949   /* We get better error messages by noticing a common problem: a
12950      missing trailing `;'.  */
12951   token = cp_lexer_peek_token (parser->lexer);
12952   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
12953   /* Look for trailing attributes to apply to this class.  */
12954   if (cp_parser_allow_gnu_extensions_p (parser))
12955     attributes = cp_parser_attributes_opt (parser);
12956   if (type != error_mark_node)
12957     type = finish_struct (type, attributes);
12958   if (nested_name_specifier_p)
12959     pop_inner_scope (old_scope, scope);
12960   /* If this class is not itself within the scope of another class,
12961      then we need to parse the bodies of all of the queued function
12962      definitions.  Note that the queued functions defined in a class
12963      are not always processed immediately following the
12964      class-specifier for that class.  Consider:
12965
12966        struct A {
12967          struct B { void f() { sizeof (A); } };
12968        };
12969
12970      If `f' were processed before the processing of `A' were
12971      completed, there would be no way to compute the size of `A'.
12972      Note that the nesting we are interested in here is lexical --
12973      not the semantic nesting given by TYPE_CONTEXT.  In particular,
12974      for:
12975
12976        struct A { struct B; };
12977        struct A::B { void f() { } };
12978
12979      there is no need to delay the parsing of `A::B::f'.  */
12980   if (--parser->num_classes_being_defined == 0)
12981     {
12982       tree queue_entry;
12983       tree fn;
12984       tree class_type = NULL_TREE;
12985       tree pushed_scope = NULL_TREE;
12986
12987       /* In a first pass, parse default arguments to the functions.
12988          Then, in a second pass, parse the bodies of the functions.
12989          This two-phased approach handles cases like:
12990
12991             struct S {
12992               void f() { g(); }
12993               void g(int i = 3);
12994             };
12995
12996          */
12997       for (TREE_PURPOSE (parser->unparsed_functions_queues)
12998              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
12999            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
13000            TREE_PURPOSE (parser->unparsed_functions_queues)
13001              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
13002         {
13003           fn = TREE_VALUE (queue_entry);
13004           /* If there are default arguments that have not yet been processed,
13005              take care of them now.  */
13006           if (class_type != TREE_PURPOSE (queue_entry))
13007             {
13008               if (pushed_scope)
13009                 pop_scope (pushed_scope);
13010               class_type = TREE_PURPOSE (queue_entry);
13011               pushed_scope = push_scope (class_type);
13012             }
13013           /* Make sure that any template parameters are in scope.  */
13014           maybe_begin_member_template_processing (fn);
13015           /* Parse the default argument expressions.  */
13016           cp_parser_late_parsing_default_args (parser, fn);
13017           /* Remove any template parameters from the symbol table.  */
13018           maybe_end_member_template_processing ();
13019         }
13020       if (pushed_scope)
13021         pop_scope (pushed_scope);
13022       /* Now parse the body of the functions.  */
13023       for (TREE_VALUE (parser->unparsed_functions_queues)
13024              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
13025            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
13026            TREE_VALUE (parser->unparsed_functions_queues)
13027              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
13028         {
13029           /* Figure out which function we need to process.  */
13030           fn = TREE_VALUE (queue_entry);
13031           /* Parse the function.  */
13032           cp_parser_late_parsing_for_member (parser, fn);
13033         }
13034     }
13035
13036   /* Put back any saved access checks.  */
13037   pop_deferring_access_checks ();
13038
13039   /* Restore the count of active template-parameter-lists.  */
13040   parser->num_template_parameter_lists
13041     = saved_num_template_parameter_lists;
13042
13043   return type;
13044 }
13045
13046 /* Parse a class-head.
13047
13048    class-head:
13049      class-key identifier [opt] base-clause [opt]
13050      class-key nested-name-specifier identifier base-clause [opt]
13051      class-key nested-name-specifier [opt] template-id
13052        base-clause [opt]
13053
13054    GNU Extensions:
13055      class-key attributes identifier [opt] base-clause [opt]
13056      class-key attributes nested-name-specifier identifier base-clause [opt]
13057      class-key attributes nested-name-specifier [opt] template-id
13058        base-clause [opt]
13059
13060    Returns the TYPE of the indicated class.  Sets
13061    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
13062    involving a nested-name-specifier was used, and FALSE otherwise.
13063
13064    Returns error_mark_node if this is not a class-head.
13065
13066    Returns NULL_TREE if the class-head is syntactically valid, but
13067    semantically invalid in a way that means we should skip the entire
13068    body of the class.  */
13069
13070 static tree
13071 cp_parser_class_head (cp_parser* parser,
13072                       bool* nested_name_specifier_p,
13073                       tree *attributes_p)
13074 {
13075   tree nested_name_specifier;
13076   enum tag_types class_key;
13077   tree id = NULL_TREE;
13078   tree type = NULL_TREE;
13079   tree attributes;
13080   bool template_id_p = false;
13081   bool qualified_p = false;
13082   bool invalid_nested_name_p = false;
13083   bool invalid_explicit_specialization_p = false;
13084   tree pushed_scope = NULL_TREE;
13085   unsigned num_templates;
13086   tree bases;
13087
13088   /* Assume no nested-name-specifier will be present.  */
13089   *nested_name_specifier_p = false;
13090   /* Assume no template parameter lists will be used in defining the
13091      type.  */
13092   num_templates = 0;
13093
13094   /* Look for the class-key.  */
13095   class_key = cp_parser_class_key (parser);
13096   if (class_key == none_type)
13097     return error_mark_node;
13098
13099   /* Parse the attributes.  */
13100   attributes = cp_parser_attributes_opt (parser);
13101
13102   /* If the next token is `::', that is invalid -- but sometimes
13103      people do try to write:
13104
13105        struct ::S {};
13106
13107      Handle this gracefully by accepting the extra qualifier, and then
13108      issuing an error about it later if this really is a
13109      class-head.  If it turns out just to be an elaborated type
13110      specifier, remain silent.  */
13111   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
13112     qualified_p = true;
13113
13114   push_deferring_access_checks (dk_no_check);
13115
13116   /* Determine the name of the class.  Begin by looking for an
13117      optional nested-name-specifier.  */
13118   nested_name_specifier
13119     = cp_parser_nested_name_specifier_opt (parser,
13120                                            /*typename_keyword_p=*/false,
13121                                            /*check_dependency_p=*/false,
13122                                            /*type_p=*/false,
13123                                            /*is_declaration=*/false);
13124   /* If there was a nested-name-specifier, then there *must* be an
13125      identifier.  */
13126   if (nested_name_specifier)
13127     {
13128       /* Although the grammar says `identifier', it really means
13129          `class-name' or `template-name'.  You are only allowed to
13130          define a class that has already been declared with this
13131          syntax.
13132
13133          The proposed resolution for Core Issue 180 says that wherever
13134          you see `class T::X' you should treat `X' as a type-name.
13135
13136          It is OK to define an inaccessible class; for example:
13137
13138            class A { class B; };
13139            class A::B {};
13140
13141          We do not know if we will see a class-name, or a
13142          template-name.  We look for a class-name first, in case the
13143          class-name is a template-id; if we looked for the
13144          template-name first we would stop after the template-name.  */
13145       cp_parser_parse_tentatively (parser);
13146       type = cp_parser_class_name (parser,
13147                                    /*typename_keyword_p=*/false,
13148                                    /*template_keyword_p=*/false,
13149                                    class_type,
13150                                    /*check_dependency_p=*/false,
13151                                    /*class_head_p=*/true,
13152                                    /*is_declaration=*/false);
13153       /* If that didn't work, ignore the nested-name-specifier.  */
13154       if (!cp_parser_parse_definitely (parser))
13155         {
13156           invalid_nested_name_p = true;
13157           id = cp_parser_identifier (parser);
13158           if (id == error_mark_node)
13159             id = NULL_TREE;
13160         }
13161       /* If we could not find a corresponding TYPE, treat this
13162          declaration like an unqualified declaration.  */
13163       if (type == error_mark_node)
13164         nested_name_specifier = NULL_TREE;
13165       /* Otherwise, count the number of templates used in TYPE and its
13166          containing scopes.  */
13167       else
13168         {
13169           tree scope;
13170
13171           for (scope = TREE_TYPE (type);
13172                scope && TREE_CODE (scope) != NAMESPACE_DECL;
13173                scope = (TYPE_P (scope)
13174                         ? TYPE_CONTEXT (scope)
13175                         : DECL_CONTEXT (scope)))
13176             if (TYPE_P (scope)
13177                 && CLASS_TYPE_P (scope)
13178                 && CLASSTYPE_TEMPLATE_INFO (scope)
13179                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
13180                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
13181               ++num_templates;
13182         }
13183     }
13184   /* Otherwise, the identifier is optional.  */
13185   else
13186     {
13187       /* We don't know whether what comes next is a template-id,
13188          an identifier, or nothing at all.  */
13189       cp_parser_parse_tentatively (parser);
13190       /* Check for a template-id.  */
13191       id = cp_parser_template_id (parser,
13192                                   /*template_keyword_p=*/false,
13193                                   /*check_dependency_p=*/true,
13194                                   /*is_declaration=*/true);
13195       /* If that didn't work, it could still be an identifier.  */
13196       if (!cp_parser_parse_definitely (parser))
13197         {
13198           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13199             id = cp_parser_identifier (parser);
13200           else
13201             id = NULL_TREE;
13202         }
13203       else
13204         {
13205           template_id_p = true;
13206           ++num_templates;
13207         }
13208     }
13209
13210   pop_deferring_access_checks ();
13211
13212   if (id)
13213     cp_parser_check_for_invalid_template_id (parser, id);
13214
13215   /* If it's not a `:' or a `{' then we can't really be looking at a
13216      class-head, since a class-head only appears as part of a
13217      class-specifier.  We have to detect this situation before calling
13218      xref_tag, since that has irreversible side-effects.  */
13219   if (!cp_parser_next_token_starts_class_definition_p (parser))
13220     {
13221       cp_parser_error (parser, "expected %<{%> or %<:%>");
13222       return error_mark_node;
13223     }
13224
13225   /* At this point, we're going ahead with the class-specifier, even
13226      if some other problem occurs.  */
13227   cp_parser_commit_to_tentative_parse (parser);
13228   /* Issue the error about the overly-qualified name now.  */
13229   if (qualified_p)
13230     cp_parser_error (parser,
13231                      "global qualification of class name is invalid");
13232   else if (invalid_nested_name_p)
13233     cp_parser_error (parser,
13234                      "qualified name does not name a class");
13235   else if (nested_name_specifier)
13236     {
13237       tree scope;
13238
13239       /* Reject typedef-names in class heads.  */
13240       if (!DECL_IMPLICIT_TYPEDEF_P (type))
13241         {
13242           error ("invalid class name in declaration of %qD", type);
13243           type = NULL_TREE;
13244           goto done;
13245         }
13246
13247       /* Figure out in what scope the declaration is being placed.  */
13248       scope = current_scope ();
13249       /* If that scope does not contain the scope in which the
13250          class was originally declared, the program is invalid.  */
13251       if (scope && !is_ancestor (scope, nested_name_specifier))
13252         {
13253           error ("declaration of %qD in %qD which does not enclose %qD",
13254                  type, scope, nested_name_specifier);
13255           type = NULL_TREE;
13256           goto done;
13257         }
13258       /* [dcl.meaning]
13259
13260          A declarator-id shall not be qualified exception of the
13261          definition of a ... nested class outside of its class
13262          ... [or] a the definition or explicit instantiation of a
13263          class member of a namespace outside of its namespace.  */
13264       if (scope == nested_name_specifier)
13265         {
13266           pedwarn ("extra qualification ignored");
13267           nested_name_specifier = NULL_TREE;
13268           num_templates = 0;
13269         }
13270     }
13271   /* An explicit-specialization must be preceded by "template <>".  If
13272      it is not, try to recover gracefully.  */
13273   if (at_namespace_scope_p ()
13274       && parser->num_template_parameter_lists == 0
13275       && template_id_p)
13276     {
13277       error ("an explicit specialization must be preceded by %<template <>%>");
13278       invalid_explicit_specialization_p = true;
13279       /* Take the same action that would have been taken by
13280          cp_parser_explicit_specialization.  */
13281       ++parser->num_template_parameter_lists;
13282       begin_specialization ();
13283     }
13284   /* There must be no "return" statements between this point and the
13285      end of this function; set "type "to the correct return value and
13286      use "goto done;" to return.  */
13287   /* Make sure that the right number of template parameters were
13288      present.  */
13289   if (!cp_parser_check_template_parameters (parser, num_templates))
13290     {
13291       /* If something went wrong, there is no point in even trying to
13292          process the class-definition.  */
13293       type = NULL_TREE;
13294       goto done;
13295     }
13296
13297   /* Look up the type.  */
13298   if (template_id_p)
13299     {
13300       type = TREE_TYPE (id);
13301       type = maybe_process_partial_specialization (type);
13302       if (nested_name_specifier)
13303         pushed_scope = push_scope (nested_name_specifier);
13304     }
13305   else if (nested_name_specifier)
13306     {
13307       tree class_type;
13308
13309       /* Given:
13310
13311             template <typename T> struct S { struct T };
13312             template <typename T> struct S<T>::T { };
13313
13314          we will get a TYPENAME_TYPE when processing the definition of
13315          `S::T'.  We need to resolve it to the actual type before we
13316          try to define it.  */
13317       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
13318         {
13319           class_type = resolve_typename_type (TREE_TYPE (type),
13320                                               /*only_current_p=*/false);
13321           if (class_type != error_mark_node)
13322             type = TYPE_NAME (class_type);
13323           else
13324             {
13325               cp_parser_error (parser, "could not resolve typename type");
13326               type = error_mark_node;
13327             }
13328         }
13329
13330       maybe_process_partial_specialization (TREE_TYPE (type));
13331       class_type = current_class_type;
13332       /* Enter the scope indicated by the nested-name-specifier.  */
13333       pushed_scope = push_scope (nested_name_specifier);
13334       /* Get the canonical version of this type.  */
13335       type = TYPE_MAIN_DECL (TREE_TYPE (type));
13336       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
13337           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
13338         {
13339           type = push_template_decl (type);
13340           if (type == error_mark_node)
13341             {
13342               type = NULL_TREE;
13343               goto done;
13344             }
13345         }
13346
13347       type = TREE_TYPE (type);
13348       *nested_name_specifier_p = true;
13349     }
13350   else      /* The name is not a nested name.  */
13351     {
13352       /* If the class was unnamed, create a dummy name.  */
13353       if (!id)
13354         id = make_anon_name ();
13355       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
13356                        parser->num_template_parameter_lists);
13357     }
13358
13359   /* Indicate whether this class was declared as a `class' or as a
13360      `struct'.  */
13361   if (TREE_CODE (type) == RECORD_TYPE)
13362     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
13363   cp_parser_check_class_key (class_key, type);
13364
13365   /* If this type was already complete, and we see another definition,
13366      that's an error.  */
13367   if (type != error_mark_node && COMPLETE_TYPE_P (type))
13368     {
13369       error ("redefinition of %q#T", type);
13370       error ("previous definition of %q+#T", type);
13371       type = NULL_TREE;
13372       goto done;
13373     }
13374
13375   /* We will have entered the scope containing the class; the names of
13376      base classes should be looked up in that context.  For example:
13377
13378        struct A { struct B {}; struct C; };
13379        struct A::C : B {};
13380
13381      is valid.  */
13382   bases = NULL_TREE;
13383
13384   /* Get the list of base-classes, if there is one.  */
13385   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13386     bases = cp_parser_base_clause (parser);
13387
13388   /* Process the base classes.  */
13389   xref_basetypes (type, bases);
13390
13391  done:
13392   /* Leave the scope given by the nested-name-specifier.  We will
13393      enter the class scope itself while processing the members.  */
13394   if (pushed_scope)
13395     pop_scope (pushed_scope);
13396
13397   if (invalid_explicit_specialization_p)
13398     {
13399       end_specialization ();
13400       --parser->num_template_parameter_lists;
13401     }
13402   *attributes_p = attributes;
13403   return type;
13404 }
13405
13406 /* Parse a class-key.
13407
13408    class-key:
13409      class
13410      struct
13411      union
13412
13413    Returns the kind of class-key specified, or none_type to indicate
13414    error.  */
13415
13416 static enum tag_types
13417 cp_parser_class_key (cp_parser* parser)
13418 {
13419   cp_token *token;
13420   enum tag_types tag_type;
13421
13422   /* Look for the class-key.  */
13423   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
13424   if (!token)
13425     return none_type;
13426
13427   /* Check to see if the TOKEN is a class-key.  */
13428   tag_type = cp_parser_token_is_class_key (token);
13429   if (!tag_type)
13430     cp_parser_error (parser, "expected class-key");
13431   return tag_type;
13432 }
13433
13434 /* Parse an (optional) member-specification.
13435
13436    member-specification:
13437      member-declaration member-specification [opt]
13438      access-specifier : member-specification [opt]  */
13439
13440 static void
13441 cp_parser_member_specification_opt (cp_parser* parser)
13442 {
13443   while (true)
13444     {
13445       cp_token *token;
13446       enum rid keyword;
13447
13448       /* Peek at the next token.  */
13449       token = cp_lexer_peek_token (parser->lexer);
13450       /* If it's a `}', or EOF then we've seen all the members.  */
13451       if (token->type == CPP_CLOSE_BRACE
13452           || token->type == CPP_EOF
13453           || token->type == CPP_PRAGMA_EOL)
13454         break;
13455
13456       /* See if this token is a keyword.  */
13457       keyword = token->keyword;
13458       switch (keyword)
13459         {
13460         case RID_PUBLIC:
13461         case RID_PROTECTED:
13462         case RID_PRIVATE:
13463           /* Consume the access-specifier.  */
13464           cp_lexer_consume_token (parser->lexer);
13465           /* Remember which access-specifier is active.  */
13466           current_access_specifier = token->value;
13467           /* Look for the `:'.  */
13468           cp_parser_require (parser, CPP_COLON, "`:'");
13469           break;
13470
13471         default:
13472           /* Accept #pragmas at class scope.  */
13473           if (token->type == CPP_PRAGMA)
13474             {
13475               cp_parser_pragma (parser, pragma_external);
13476               break;
13477             }
13478
13479           /* Otherwise, the next construction must be a
13480              member-declaration.  */
13481           cp_parser_member_declaration (parser);
13482         }
13483     }
13484 }
13485
13486 /* Parse a member-declaration.
13487
13488    member-declaration:
13489      decl-specifier-seq [opt] member-declarator-list [opt] ;
13490      function-definition ; [opt]
13491      :: [opt] nested-name-specifier template [opt] unqualified-id ;
13492      using-declaration
13493      template-declaration
13494
13495    member-declarator-list:
13496      member-declarator
13497      member-declarator-list , member-declarator
13498
13499    member-declarator:
13500      declarator pure-specifier [opt]
13501      declarator constant-initializer [opt]
13502      identifier [opt] : constant-expression
13503
13504    GNU Extensions:
13505
13506    member-declaration:
13507      __extension__ member-declaration
13508
13509    member-declarator:
13510      declarator attributes [opt] pure-specifier [opt]
13511      declarator attributes [opt] constant-initializer [opt]
13512      identifier [opt] attributes [opt] : constant-expression  */
13513
13514 static void
13515 cp_parser_member_declaration (cp_parser* parser)
13516 {
13517   cp_decl_specifier_seq decl_specifiers;
13518   tree prefix_attributes;
13519   tree decl;
13520   int declares_class_or_enum;
13521   bool friend_p;
13522   cp_token *token;
13523   int saved_pedantic;
13524
13525   /* Check for the `__extension__' keyword.  */
13526   if (cp_parser_extension_opt (parser, &saved_pedantic))
13527     {
13528       /* Recurse.  */
13529       cp_parser_member_declaration (parser);
13530       /* Restore the old value of the PEDANTIC flag.  */
13531       pedantic = saved_pedantic;
13532
13533       return;
13534     }
13535
13536   /* Check for a template-declaration.  */
13537   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13538     {
13539       /* An explicit specialization here is an error condition, and we
13540          expect the specialization handler to detect and report this.  */
13541       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
13542           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
13543         cp_parser_explicit_specialization (parser);
13544       else
13545         cp_parser_template_declaration (parser, /*member_p=*/true);
13546
13547       return;
13548     }
13549
13550   /* Check for a using-declaration.  */
13551   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
13552     {
13553       /* Parse the using-declaration.  */
13554       cp_parser_using_declaration (parser);
13555
13556       return;
13557     }
13558
13559   /* Check for @defs.  */
13560   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
13561     {
13562       tree ivar, member;
13563       tree ivar_chains = cp_parser_objc_defs_expression (parser);
13564       ivar = ivar_chains;
13565       while (ivar)
13566         {
13567           member = ivar;
13568           ivar = TREE_CHAIN (member);
13569           TREE_CHAIN (member) = NULL_TREE;
13570           finish_member_declaration (member);
13571         }
13572       return;
13573     }
13574
13575   /* Parse the decl-specifier-seq.  */
13576   cp_parser_decl_specifier_seq (parser,
13577                                 CP_PARSER_FLAGS_OPTIONAL,
13578                                 &decl_specifiers,
13579                                 &declares_class_or_enum);
13580   prefix_attributes = decl_specifiers.attributes;
13581   decl_specifiers.attributes = NULL_TREE;
13582   /* Check for an invalid type-name.  */
13583   if (!decl_specifiers.type
13584       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
13585     return;
13586   /* If there is no declarator, then the decl-specifier-seq should
13587      specify a type.  */
13588   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13589     {
13590       /* If there was no decl-specifier-seq, and the next token is a
13591          `;', then we have something like:
13592
13593            struct S { ; };
13594
13595          [class.mem]
13596
13597          Each member-declaration shall declare at least one member
13598          name of the class.  */
13599       if (!decl_specifiers.any_specifiers_p)
13600         {
13601           cp_token *token = cp_lexer_peek_token (parser->lexer);
13602           if (pedantic && !token->in_system_header)
13603             pedwarn ("%Hextra %<;%>", &token->location);
13604         }
13605       else
13606         {
13607           tree type;
13608
13609           /* See if this declaration is a friend.  */
13610           friend_p = cp_parser_friend_p (&decl_specifiers);
13611           /* If there were decl-specifiers, check to see if there was
13612              a class-declaration.  */
13613           type = check_tag_decl (&decl_specifiers);
13614           /* Nested classes have already been added to the class, but
13615              a `friend' needs to be explicitly registered.  */
13616           if (friend_p)
13617             {
13618               /* If the `friend' keyword was present, the friend must
13619                  be introduced with a class-key.  */
13620                if (!declares_class_or_enum)
13621                  error ("a class-key must be used when declaring a friend");
13622                /* In this case:
13623
13624                     template <typename T> struct A {
13625                       friend struct A<T>::B;
13626                     };
13627
13628                   A<T>::B will be represented by a TYPENAME_TYPE, and
13629                   therefore not recognized by check_tag_decl.  */
13630                if (!type
13631                    && decl_specifiers.type
13632                    && TYPE_P (decl_specifiers.type))
13633                  type = decl_specifiers.type;
13634                if (!type || !TYPE_P (type))
13635                  error ("friend declaration does not name a class or "
13636                         "function");
13637                else
13638                  make_friend_class (current_class_type, type,
13639                                     /*complain=*/true);
13640             }
13641           /* If there is no TYPE, an error message will already have
13642              been issued.  */
13643           else if (!type || type == error_mark_node)
13644             ;
13645           /* An anonymous aggregate has to be handled specially; such
13646              a declaration really declares a data member (with a
13647              particular type), as opposed to a nested class.  */
13648           else if (ANON_AGGR_TYPE_P (type))
13649             {
13650               /* Remove constructors and such from TYPE, now that we
13651                  know it is an anonymous aggregate.  */
13652               fixup_anonymous_aggr (type);
13653               /* And make the corresponding data member.  */
13654               decl = build_decl (FIELD_DECL, NULL_TREE, type);
13655               /* Add it to the class.  */
13656               finish_member_declaration (decl);
13657             }
13658           else
13659             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
13660         }
13661     }
13662   else
13663     {
13664       /* See if these declarations will be friends.  */
13665       friend_p = cp_parser_friend_p (&decl_specifiers);
13666
13667       /* Keep going until we hit the `;' at the end of the
13668          declaration.  */
13669       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13670         {
13671           tree attributes = NULL_TREE;
13672           tree first_attribute;
13673
13674           /* Peek at the next token.  */
13675           token = cp_lexer_peek_token (parser->lexer);
13676
13677           /* Check for a bitfield declaration.  */
13678           if (token->type == CPP_COLON
13679               || (token->type == CPP_NAME
13680                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
13681                   == CPP_COLON))
13682             {
13683               tree identifier;
13684               tree width;
13685
13686               /* Get the name of the bitfield.  Note that we cannot just
13687                  check TOKEN here because it may have been invalidated by
13688                  the call to cp_lexer_peek_nth_token above.  */
13689               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
13690                 identifier = cp_parser_identifier (parser);
13691               else
13692                 identifier = NULL_TREE;
13693
13694               /* Consume the `:' token.  */
13695               cp_lexer_consume_token (parser->lexer);
13696               /* Get the width of the bitfield.  */
13697               width
13698                 = cp_parser_constant_expression (parser,
13699                                                  /*allow_non_constant=*/false,
13700                                                  NULL);
13701
13702               /* Look for attributes that apply to the bitfield.  */
13703               attributes = cp_parser_attributes_opt (parser);
13704               /* Remember which attributes are prefix attributes and
13705                  which are not.  */
13706               first_attribute = attributes;
13707               /* Combine the attributes.  */
13708               attributes = chainon (prefix_attributes, attributes);
13709
13710               /* Create the bitfield declaration.  */
13711               decl = grokbitfield (identifier
13712                                    ? make_id_declarator (NULL_TREE,
13713                                                          identifier,
13714                                                          sfk_none)
13715                                    : NULL,
13716                                    &decl_specifiers,
13717                                    width);
13718               /* Apply the attributes.  */
13719               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
13720             }
13721           else
13722             {
13723               cp_declarator *declarator;
13724               tree initializer;
13725               tree asm_specification;
13726               int ctor_dtor_or_conv_p;
13727
13728               /* Parse the declarator.  */
13729               declarator
13730                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13731                                         &ctor_dtor_or_conv_p,
13732                                         /*parenthesized_p=*/NULL,
13733                                         /*member_p=*/true);
13734
13735               /* If something went wrong parsing the declarator, make sure
13736                  that we at least consume some tokens.  */
13737               if (declarator == cp_error_declarator)
13738                 {
13739                   /* Skip to the end of the statement.  */
13740                   cp_parser_skip_to_end_of_statement (parser);
13741                   /* If the next token is not a semicolon, that is
13742                      probably because we just skipped over the body of
13743                      a function.  So, we consume a semicolon if
13744                      present, but do not issue an error message if it
13745                      is not present.  */
13746                   if (cp_lexer_next_token_is (parser->lexer,
13747                                               CPP_SEMICOLON))
13748                     cp_lexer_consume_token (parser->lexer);
13749                   return;
13750                 }
13751
13752               if (declares_class_or_enum & 2)
13753                 cp_parser_check_for_definition_in_return_type
13754                   (declarator, decl_specifiers.type);
13755
13756               /* Look for an asm-specification.  */
13757               asm_specification = cp_parser_asm_specification_opt (parser);
13758               /* Look for attributes that apply to the declaration.  */
13759               attributes = cp_parser_attributes_opt (parser);
13760               /* Remember which attributes are prefix attributes and
13761                  which are not.  */
13762               first_attribute = attributes;
13763               /* Combine the attributes.  */
13764               attributes = chainon (prefix_attributes, attributes);
13765
13766               /* If it's an `=', then we have a constant-initializer or a
13767                  pure-specifier.  It is not correct to parse the
13768                  initializer before registering the member declaration
13769                  since the member declaration should be in scope while
13770                  its initializer is processed.  However, the rest of the
13771                  front end does not yet provide an interface that allows
13772                  us to handle this correctly.  */
13773               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13774                 {
13775                   /* In [class.mem]:
13776
13777                      A pure-specifier shall be used only in the declaration of
13778                      a virtual function.
13779
13780                      A member-declarator can contain a constant-initializer
13781                      only if it declares a static member of integral or
13782                      enumeration type.
13783
13784                      Therefore, if the DECLARATOR is for a function, we look
13785                      for a pure-specifier; otherwise, we look for a
13786                      constant-initializer.  When we call `grokfield', it will
13787                      perform more stringent semantics checks.  */
13788                   if (declarator->kind == cdk_function
13789                       && declarator->declarator->kind == cdk_id)
13790                     initializer = cp_parser_pure_specifier (parser);
13791                   else
13792                     /* Parse the initializer.  */
13793                     initializer = cp_parser_constant_initializer (parser);
13794                 }
13795               /* Otherwise, there is no initializer.  */
13796               else
13797                 initializer = NULL_TREE;
13798
13799               /* See if we are probably looking at a function
13800                  definition.  We are certainly not looking at a
13801                  member-declarator.  Calling `grokfield' has
13802                  side-effects, so we must not do it unless we are sure
13803                  that we are looking at a member-declarator.  */
13804               if (cp_parser_token_starts_function_definition_p
13805                   (cp_lexer_peek_token (parser->lexer)))
13806                 {
13807                   /* The grammar does not allow a pure-specifier to be
13808                      used when a member function is defined.  (It is
13809                      possible that this fact is an oversight in the
13810                      standard, since a pure function may be defined
13811                      outside of the class-specifier.  */
13812                   if (initializer)
13813                     error ("pure-specifier on function-definition");
13814                   decl = cp_parser_save_member_function_body (parser,
13815                                                               &decl_specifiers,
13816                                                               declarator,
13817                                                               attributes);
13818                   /* If the member was not a friend, declare it here.  */
13819                   if (!friend_p)
13820                     finish_member_declaration (decl);
13821                   /* Peek at the next token.  */
13822                   token = cp_lexer_peek_token (parser->lexer);
13823                   /* If the next token is a semicolon, consume it.  */
13824                   if (token->type == CPP_SEMICOLON)
13825                     cp_lexer_consume_token (parser->lexer);
13826                   return;
13827                 }
13828               else
13829                 /* Create the declaration.  */
13830                 decl = grokfield (declarator, &decl_specifiers,
13831                                   initializer, /*init_const_expr_p=*/true,
13832                                   asm_specification,
13833                                   attributes);
13834             }
13835
13836           /* Reset PREFIX_ATTRIBUTES.  */
13837           while (attributes && TREE_CHAIN (attributes) != first_attribute)
13838             attributes = TREE_CHAIN (attributes);
13839           if (attributes)
13840             TREE_CHAIN (attributes) = NULL_TREE;
13841
13842           /* If there is any qualification still in effect, clear it
13843              now; we will be starting fresh with the next declarator.  */
13844           parser->scope = NULL_TREE;
13845           parser->qualifying_scope = NULL_TREE;
13846           parser->object_scope = NULL_TREE;
13847           /* If it's a `,', then there are more declarators.  */
13848           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
13849             cp_lexer_consume_token (parser->lexer);
13850           /* If the next token isn't a `;', then we have a parse error.  */
13851           else if (cp_lexer_next_token_is_not (parser->lexer,
13852                                                CPP_SEMICOLON))
13853             {
13854               cp_parser_error (parser, "expected %<;%>");
13855               /* Skip tokens until we find a `;'.  */
13856               cp_parser_skip_to_end_of_statement (parser);
13857
13858               break;
13859             }
13860
13861           if (decl)
13862             {
13863               /* Add DECL to the list of members.  */
13864               if (!friend_p)
13865                 finish_member_declaration (decl);
13866
13867               if (TREE_CODE (decl) == FUNCTION_DECL)
13868                 cp_parser_save_default_args (parser, decl);
13869             }
13870         }
13871     }
13872
13873   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
13874 }
13875
13876 /* Parse a pure-specifier.
13877
13878    pure-specifier:
13879      = 0
13880
13881    Returns INTEGER_ZERO_NODE if a pure specifier is found.
13882    Otherwise, ERROR_MARK_NODE is returned.  */
13883
13884 static tree
13885 cp_parser_pure_specifier (cp_parser* parser)
13886 {
13887   cp_token *token;
13888
13889   /* Look for the `=' token.  */
13890   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13891     return error_mark_node;
13892   /* Look for the `0' token.  */
13893   token = cp_lexer_consume_token (parser->lexer);
13894   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
13895   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
13896     {
13897       cp_parser_error (parser,
13898                        "invalid pure specifier (only `= 0' is allowed)");
13899       cp_parser_skip_to_end_of_statement (parser);
13900       return error_mark_node;
13901     }
13902   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
13903     {
13904       error ("templates may not be %<virtual%>");
13905       return error_mark_node;
13906     }
13907
13908   return integer_zero_node;
13909 }
13910
13911 /* Parse a constant-initializer.
13912
13913    constant-initializer:
13914      = constant-expression
13915
13916    Returns a representation of the constant-expression.  */
13917
13918 static tree
13919 cp_parser_constant_initializer (cp_parser* parser)
13920 {
13921   /* Look for the `=' token.  */
13922   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13923     return error_mark_node;
13924
13925   /* It is invalid to write:
13926
13927        struct S { static const int i = { 7 }; };
13928
13929      */
13930   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13931     {
13932       cp_parser_error (parser,
13933                        "a brace-enclosed initializer is not allowed here");
13934       /* Consume the opening brace.  */
13935       cp_lexer_consume_token (parser->lexer);
13936       /* Skip the initializer.  */
13937       cp_parser_skip_to_closing_brace (parser);
13938       /* Look for the trailing `}'.  */
13939       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13940
13941       return error_mark_node;
13942     }
13943
13944   return cp_parser_constant_expression (parser,
13945                                         /*allow_non_constant=*/false,
13946                                         NULL);
13947 }
13948
13949 /* Derived classes [gram.class.derived] */
13950
13951 /* Parse a base-clause.
13952
13953    base-clause:
13954      : base-specifier-list
13955
13956    base-specifier-list:
13957      base-specifier
13958      base-specifier-list , base-specifier
13959
13960    Returns a TREE_LIST representing the base-classes, in the order in
13961    which they were declared.  The representation of each node is as
13962    described by cp_parser_base_specifier.
13963
13964    In the case that no bases are specified, this function will return
13965    NULL_TREE, not ERROR_MARK_NODE.  */
13966
13967 static tree
13968 cp_parser_base_clause (cp_parser* parser)
13969 {
13970   tree bases = NULL_TREE;
13971
13972   /* Look for the `:' that begins the list.  */
13973   cp_parser_require (parser, CPP_COLON, "`:'");
13974
13975   /* Scan the base-specifier-list.  */
13976   while (true)
13977     {
13978       cp_token *token;
13979       tree base;
13980
13981       /* Look for the base-specifier.  */
13982       base = cp_parser_base_specifier (parser);
13983       /* Add BASE to the front of the list.  */
13984       if (base != error_mark_node)
13985         {
13986           TREE_CHAIN (base) = bases;
13987           bases = base;
13988         }
13989       /* Peek at the next token.  */
13990       token = cp_lexer_peek_token (parser->lexer);
13991       /* If it's not a comma, then the list is complete.  */
13992       if (token->type != CPP_COMMA)
13993         break;
13994       /* Consume the `,'.  */
13995       cp_lexer_consume_token (parser->lexer);
13996     }
13997
13998   /* PARSER->SCOPE may still be non-NULL at this point, if the last
13999      base class had a qualified name.  However, the next name that
14000      appears is certainly not qualified.  */
14001   parser->scope = NULL_TREE;
14002   parser->qualifying_scope = NULL_TREE;
14003   parser->object_scope = NULL_TREE;
14004
14005   return nreverse (bases);
14006 }
14007
14008 /* Parse a base-specifier.
14009
14010    base-specifier:
14011      :: [opt] nested-name-specifier [opt] class-name
14012      virtual access-specifier [opt] :: [opt] nested-name-specifier
14013        [opt] class-name
14014      access-specifier virtual [opt] :: [opt] nested-name-specifier
14015        [opt] class-name
14016
14017    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
14018    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
14019    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
14020    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
14021
14022 static tree
14023 cp_parser_base_specifier (cp_parser* parser)
14024 {
14025   cp_token *token;
14026   bool done = false;
14027   bool virtual_p = false;
14028   bool duplicate_virtual_error_issued_p = false;
14029   bool duplicate_access_error_issued_p = false;
14030   bool class_scope_p, template_p;
14031   tree access = access_default_node;
14032   tree type;
14033
14034   /* Process the optional `virtual' and `access-specifier'.  */
14035   while (!done)
14036     {
14037       /* Peek at the next token.  */
14038       token = cp_lexer_peek_token (parser->lexer);
14039       /* Process `virtual'.  */
14040       switch (token->keyword)
14041         {
14042         case RID_VIRTUAL:
14043           /* If `virtual' appears more than once, issue an error.  */
14044           if (virtual_p && !duplicate_virtual_error_issued_p)
14045             {
14046               cp_parser_error (parser,
14047                                "%<virtual%> specified more than once in base-specified");
14048               duplicate_virtual_error_issued_p = true;
14049             }
14050
14051           virtual_p = true;
14052
14053           /* Consume the `virtual' token.  */
14054           cp_lexer_consume_token (parser->lexer);
14055
14056           break;
14057
14058         case RID_PUBLIC:
14059         case RID_PROTECTED:
14060         case RID_PRIVATE:
14061           /* If more than one access specifier appears, issue an
14062              error.  */
14063           if (access != access_default_node
14064               && !duplicate_access_error_issued_p)
14065             {
14066               cp_parser_error (parser,
14067                                "more than one access specifier in base-specified");
14068               duplicate_access_error_issued_p = true;
14069             }
14070
14071           access = ridpointers[(int) token->keyword];
14072
14073           /* Consume the access-specifier.  */
14074           cp_lexer_consume_token (parser->lexer);
14075
14076           break;
14077
14078         default:
14079           done = true;
14080           break;
14081         }
14082     }
14083   /* It is not uncommon to see programs mechanically, erroneously, use
14084      the 'typename' keyword to denote (dependent) qualified types
14085      as base classes.  */
14086   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
14087     {
14088       if (!processing_template_decl)
14089         error ("keyword %<typename%> not allowed outside of templates");
14090       else
14091         error ("keyword %<typename%> not allowed in this context "
14092                "(the base class is implicitly a type)");
14093       cp_lexer_consume_token (parser->lexer);
14094     }
14095
14096   /* Look for the optional `::' operator.  */
14097   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
14098   /* Look for the nested-name-specifier.  The simplest way to
14099      implement:
14100
14101        [temp.res]
14102
14103        The keyword `typename' is not permitted in a base-specifier or
14104        mem-initializer; in these contexts a qualified name that
14105        depends on a template-parameter is implicitly assumed to be a
14106        type name.
14107
14108      is to pretend that we have seen the `typename' keyword at this
14109      point.  */
14110   cp_parser_nested_name_specifier_opt (parser,
14111                                        /*typename_keyword_p=*/true,
14112                                        /*check_dependency_p=*/true,
14113                                        typename_type,
14114                                        /*is_declaration=*/true);
14115   /* If the base class is given by a qualified name, assume that names
14116      we see are type names or templates, as appropriate.  */
14117   class_scope_p = (parser->scope && TYPE_P (parser->scope));
14118   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
14119
14120   /* Finally, look for the class-name.  */
14121   type = cp_parser_class_name (parser,
14122                                class_scope_p,
14123                                template_p,
14124                                typename_type,
14125                                /*check_dependency_p=*/true,
14126                                /*class_head_p=*/false,
14127                                /*is_declaration=*/true);
14128
14129   if (type == error_mark_node)
14130     return error_mark_node;
14131
14132   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
14133 }
14134
14135 /* Exception handling [gram.exception] */
14136
14137 /* Parse an (optional) exception-specification.
14138
14139    exception-specification:
14140      throw ( type-id-list [opt] )
14141
14142    Returns a TREE_LIST representing the exception-specification.  The
14143    TREE_VALUE of each node is a type.  */
14144
14145 static tree
14146 cp_parser_exception_specification_opt (cp_parser* parser)
14147 {
14148   cp_token *token;
14149   tree type_id_list;
14150
14151   /* Peek at the next token.  */
14152   token = cp_lexer_peek_token (parser->lexer);
14153   /* If it's not `throw', then there's no exception-specification.  */
14154   if (!cp_parser_is_keyword (token, RID_THROW))
14155     return NULL_TREE;
14156
14157   /* Consume the `throw'.  */
14158   cp_lexer_consume_token (parser->lexer);
14159
14160   /* Look for the `('.  */
14161   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14162
14163   /* Peek at the next token.  */
14164   token = cp_lexer_peek_token (parser->lexer);
14165   /* If it's not a `)', then there is a type-id-list.  */
14166   if (token->type != CPP_CLOSE_PAREN)
14167     {
14168       const char *saved_message;
14169
14170       /* Types may not be defined in an exception-specification.  */
14171       saved_message = parser->type_definition_forbidden_message;
14172       parser->type_definition_forbidden_message
14173         = "types may not be defined in an exception-specification";
14174       /* Parse the type-id-list.  */
14175       type_id_list = cp_parser_type_id_list (parser);
14176       /* Restore the saved message.  */
14177       parser->type_definition_forbidden_message = saved_message;
14178     }
14179   else
14180     type_id_list = empty_except_spec;
14181
14182   /* Look for the `)'.  */
14183   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14184
14185   return type_id_list;
14186 }
14187
14188 /* Parse an (optional) type-id-list.
14189
14190    type-id-list:
14191      type-id
14192      type-id-list , type-id
14193
14194    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
14195    in the order that the types were presented.  */
14196
14197 static tree
14198 cp_parser_type_id_list (cp_parser* parser)
14199 {
14200   tree types = NULL_TREE;
14201
14202   while (true)
14203     {
14204       cp_token *token;
14205       tree type;
14206
14207       /* Get the next type-id.  */
14208       type = cp_parser_type_id (parser);
14209       /* Add it to the list.  */
14210       types = add_exception_specifier (types, type, /*complain=*/1);
14211       /* Peek at the next token.  */
14212       token = cp_lexer_peek_token (parser->lexer);
14213       /* If it is not a `,', we are done.  */
14214       if (token->type != CPP_COMMA)
14215         break;
14216       /* Consume the `,'.  */
14217       cp_lexer_consume_token (parser->lexer);
14218     }
14219
14220   return nreverse (types);
14221 }
14222
14223 /* Parse a try-block.
14224
14225    try-block:
14226      try compound-statement handler-seq  */
14227
14228 static tree
14229 cp_parser_try_block (cp_parser* parser)
14230 {
14231   tree try_block;
14232
14233   cp_parser_require_keyword (parser, RID_TRY, "`try'");
14234   try_block = begin_try_block ();
14235   cp_parser_compound_statement (parser, NULL, true);
14236   finish_try_block (try_block);
14237   cp_parser_handler_seq (parser);
14238   finish_handler_sequence (try_block);
14239
14240   return try_block;
14241 }
14242
14243 /* Parse a function-try-block.
14244
14245    function-try-block:
14246      try ctor-initializer [opt] function-body handler-seq  */
14247
14248 static bool
14249 cp_parser_function_try_block (cp_parser* parser)
14250 {
14251   tree compound_stmt;
14252   tree try_block;
14253   bool ctor_initializer_p;
14254
14255   /* Look for the `try' keyword.  */
14256   if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
14257     return false;
14258   /* Let the rest of the front-end know where we are.  */
14259   try_block = begin_function_try_block (&compound_stmt);
14260   /* Parse the function-body.  */
14261   ctor_initializer_p
14262     = cp_parser_ctor_initializer_opt_and_function_body (parser);
14263   /* We're done with the `try' part.  */
14264   finish_function_try_block (try_block);
14265   /* Parse the handlers.  */
14266   cp_parser_handler_seq (parser);
14267   /* We're done with the handlers.  */
14268   finish_function_handler_sequence (try_block, compound_stmt);
14269
14270   return ctor_initializer_p;
14271 }
14272
14273 /* Parse a handler-seq.
14274
14275    handler-seq:
14276      handler handler-seq [opt]  */
14277
14278 static void
14279 cp_parser_handler_seq (cp_parser* parser)
14280 {
14281   while (true)
14282     {
14283       cp_token *token;
14284
14285       /* Parse the handler.  */
14286       cp_parser_handler (parser);
14287       /* Peek at the next token.  */
14288       token = cp_lexer_peek_token (parser->lexer);
14289       /* If it's not `catch' then there are no more handlers.  */
14290       if (!cp_parser_is_keyword (token, RID_CATCH))
14291         break;
14292     }
14293 }
14294
14295 /* Parse a handler.
14296
14297    handler:
14298      catch ( exception-declaration ) compound-statement  */
14299
14300 static void
14301 cp_parser_handler (cp_parser* parser)
14302 {
14303   tree handler;
14304   tree declaration;
14305
14306   cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
14307   handler = begin_handler ();
14308   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14309   declaration = cp_parser_exception_declaration (parser);
14310   finish_handler_parms (declaration, handler);
14311   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14312   cp_parser_compound_statement (parser, NULL, false);
14313   finish_handler (handler);
14314 }
14315
14316 /* Parse an exception-declaration.
14317
14318    exception-declaration:
14319      type-specifier-seq declarator
14320      type-specifier-seq abstract-declarator
14321      type-specifier-seq
14322      ...
14323
14324    Returns a VAR_DECL for the declaration, or NULL_TREE if the
14325    ellipsis variant is used.  */
14326
14327 static tree
14328 cp_parser_exception_declaration (cp_parser* parser)
14329 {
14330   cp_decl_specifier_seq type_specifiers;
14331   cp_declarator *declarator;
14332   const char *saved_message;
14333
14334   /* If it's an ellipsis, it's easy to handle.  */
14335   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14336     {
14337       /* Consume the `...' token.  */
14338       cp_lexer_consume_token (parser->lexer);
14339       return NULL_TREE;
14340     }
14341
14342   /* Types may not be defined in exception-declarations.  */
14343   saved_message = parser->type_definition_forbidden_message;
14344   parser->type_definition_forbidden_message
14345     = "types may not be defined in exception-declarations";
14346
14347   /* Parse the type-specifier-seq.  */
14348   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
14349                                 &type_specifiers);
14350   /* If it's a `)', then there is no declarator.  */
14351   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
14352     declarator = NULL;
14353   else
14354     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
14355                                        /*ctor_dtor_or_conv_p=*/NULL,
14356                                        /*parenthesized_p=*/NULL,
14357                                        /*member_p=*/false);
14358
14359   /* Restore the saved message.  */
14360   parser->type_definition_forbidden_message = saved_message;
14361
14362   if (!type_specifiers.any_specifiers_p)
14363     return error_mark_node;
14364
14365   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
14366 }
14367
14368 /* Parse a throw-expression.
14369
14370    throw-expression:
14371      throw assignment-expression [opt]
14372
14373    Returns a THROW_EXPR representing the throw-expression.  */
14374
14375 static tree
14376 cp_parser_throw_expression (cp_parser* parser)
14377 {
14378   tree expression;
14379   cp_token* token;
14380
14381   cp_parser_require_keyword (parser, RID_THROW, "`throw'");
14382   token = cp_lexer_peek_token (parser->lexer);
14383   /* Figure out whether or not there is an assignment-expression
14384      following the "throw" keyword.  */
14385   if (token->type == CPP_COMMA
14386       || token->type == CPP_SEMICOLON
14387       || token->type == CPP_CLOSE_PAREN
14388       || token->type == CPP_CLOSE_SQUARE
14389       || token->type == CPP_CLOSE_BRACE
14390       || token->type == CPP_COLON)
14391     expression = NULL_TREE;
14392   else
14393     expression = cp_parser_assignment_expression (parser,
14394                                                   /*cast_p=*/false);
14395
14396   return build_throw (expression);
14397 }
14398
14399 /* GNU Extensions */
14400
14401 /* Parse an (optional) asm-specification.
14402
14403    asm-specification:
14404      asm ( string-literal )
14405
14406    If the asm-specification is present, returns a STRING_CST
14407    corresponding to the string-literal.  Otherwise, returns
14408    NULL_TREE.  */
14409
14410 static tree
14411 cp_parser_asm_specification_opt (cp_parser* parser)
14412 {
14413   cp_token *token;
14414   tree asm_specification;
14415
14416   /* Peek at the next token.  */
14417   token = cp_lexer_peek_token (parser->lexer);
14418   /* If the next token isn't the `asm' keyword, then there's no
14419      asm-specification.  */
14420   if (!cp_parser_is_keyword (token, RID_ASM))
14421     return NULL_TREE;
14422
14423   /* Consume the `asm' token.  */
14424   cp_lexer_consume_token (parser->lexer);
14425   /* Look for the `('.  */
14426   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14427
14428   /* Look for the string-literal.  */
14429   asm_specification = cp_parser_string_literal (parser, false, false);
14430
14431   /* Look for the `)'.  */
14432   cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
14433
14434   return asm_specification;
14435 }
14436
14437 /* Parse an asm-operand-list.
14438
14439    asm-operand-list:
14440      asm-operand
14441      asm-operand-list , asm-operand
14442
14443    asm-operand:
14444      string-literal ( expression )
14445      [ string-literal ] string-literal ( expression )
14446
14447    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
14448    each node is the expression.  The TREE_PURPOSE is itself a
14449    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
14450    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
14451    is a STRING_CST for the string literal before the parenthesis.  */
14452
14453 static tree
14454 cp_parser_asm_operand_list (cp_parser* parser)
14455 {
14456   tree asm_operands = NULL_TREE;
14457
14458   while (true)
14459     {
14460       tree string_literal;
14461       tree expression;
14462       tree name;
14463
14464       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
14465         {
14466           /* Consume the `[' token.  */
14467           cp_lexer_consume_token (parser->lexer);
14468           /* Read the operand name.  */
14469           name = cp_parser_identifier (parser);
14470           if (name != error_mark_node)
14471             name = build_string (IDENTIFIER_LENGTH (name),
14472                                  IDENTIFIER_POINTER (name));
14473           /* Look for the closing `]'.  */
14474           cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
14475         }
14476       else
14477         name = NULL_TREE;
14478       /* Look for the string-literal.  */
14479       string_literal = cp_parser_string_literal (parser, false, false);
14480
14481       /* Look for the `('.  */
14482       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14483       /* Parse the expression.  */
14484       expression = cp_parser_expression (parser, /*cast_p=*/false);
14485       /* Look for the `)'.  */
14486       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14487
14488       /* Add this operand to the list.  */
14489       asm_operands = tree_cons (build_tree_list (name, string_literal),
14490                                 expression,
14491                                 asm_operands);
14492       /* If the next token is not a `,', there are no more
14493          operands.  */
14494       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14495         break;
14496       /* Consume the `,'.  */
14497       cp_lexer_consume_token (parser->lexer);
14498     }
14499
14500   return nreverse (asm_operands);
14501 }
14502
14503 /* Parse an asm-clobber-list.
14504
14505    asm-clobber-list:
14506      string-literal
14507      asm-clobber-list , string-literal
14508
14509    Returns a TREE_LIST, indicating the clobbers in the order that they
14510    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
14511
14512 static tree
14513 cp_parser_asm_clobber_list (cp_parser* parser)
14514 {
14515   tree clobbers = NULL_TREE;
14516
14517   while (true)
14518     {
14519       tree string_literal;
14520
14521       /* Look for the string literal.  */
14522       string_literal = cp_parser_string_literal (parser, false, false);
14523       /* Add it to the list.  */
14524       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
14525       /* If the next token is not a `,', then the list is
14526          complete.  */
14527       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14528         break;
14529       /* Consume the `,' token.  */
14530       cp_lexer_consume_token (parser->lexer);
14531     }
14532
14533   return clobbers;
14534 }
14535
14536 /* Parse an (optional) series of attributes.
14537
14538    attributes:
14539      attributes attribute
14540
14541    attribute:
14542      __attribute__ (( attribute-list [opt] ))
14543
14544    The return value is as for cp_parser_attribute_list.  */
14545
14546 static tree
14547 cp_parser_attributes_opt (cp_parser* parser)
14548 {
14549   tree attributes = NULL_TREE;
14550
14551   while (true)
14552     {
14553       cp_token *token;
14554       tree attribute_list;
14555
14556       /* Peek at the next token.  */
14557       token = cp_lexer_peek_token (parser->lexer);
14558       /* If it's not `__attribute__', then we're done.  */
14559       if (token->keyword != RID_ATTRIBUTE)
14560         break;
14561
14562       /* Consume the `__attribute__' keyword.  */
14563       cp_lexer_consume_token (parser->lexer);
14564       /* Look for the two `(' tokens.  */
14565       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14566       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14567
14568       /* Peek at the next token.  */
14569       token = cp_lexer_peek_token (parser->lexer);
14570       if (token->type != CPP_CLOSE_PAREN)
14571         /* Parse the attribute-list.  */
14572         attribute_list = cp_parser_attribute_list (parser);
14573       else
14574         /* If the next token is a `)', then there is no attribute
14575            list.  */
14576         attribute_list = NULL;
14577
14578       /* Look for the two `)' tokens.  */
14579       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14580       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14581
14582       /* Add these new attributes to the list.  */
14583       attributes = chainon (attributes, attribute_list);
14584     }
14585
14586   return attributes;
14587 }
14588
14589 /* Parse an attribute-list.
14590
14591    attribute-list:
14592      attribute
14593      attribute-list , attribute
14594
14595    attribute:
14596      identifier
14597      identifier ( identifier )
14598      identifier ( identifier , expression-list )
14599      identifier ( expression-list )
14600
14601    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
14602    to an attribute.  The TREE_PURPOSE of each node is the identifier
14603    indicating which attribute is in use.  The TREE_VALUE represents
14604    the arguments, if any.  */
14605
14606 static tree
14607 cp_parser_attribute_list (cp_parser* parser)
14608 {
14609   tree attribute_list = NULL_TREE;
14610   bool save_translate_strings_p = parser->translate_strings_p;
14611
14612   parser->translate_strings_p = false;
14613   while (true)
14614     {
14615       cp_token *token;
14616       tree identifier;
14617       tree attribute;
14618
14619       /* Look for the identifier.  We also allow keywords here; for
14620          example `__attribute__ ((const))' is legal.  */
14621       token = cp_lexer_peek_token (parser->lexer);
14622       if (token->type == CPP_NAME
14623           || token->type == CPP_KEYWORD)
14624         {
14625           tree arguments = NULL_TREE;
14626
14627           /* Consume the token.  */
14628           token = cp_lexer_consume_token (parser->lexer);
14629
14630           /* Save away the identifier that indicates which attribute
14631              this is.  */
14632           identifier = token->value;
14633           attribute = build_tree_list (identifier, NULL_TREE);
14634
14635           /* Peek at the next token.  */
14636           token = cp_lexer_peek_token (parser->lexer);
14637           /* If it's an `(', then parse the attribute arguments.  */
14638           if (token->type == CPP_OPEN_PAREN)
14639             {
14640               arguments = cp_parser_parenthesized_expression_list
14641                           (parser, true, /*cast_p=*/false,
14642                            /*non_constant_p=*/NULL);
14643               /* Save the arguments away.  */
14644               TREE_VALUE (attribute) = arguments;
14645             }
14646
14647           if (arguments != error_mark_node)
14648             {
14649               /* Add this attribute to the list.  */
14650               TREE_CHAIN (attribute) = attribute_list;
14651               attribute_list = attribute;
14652             }
14653
14654           token = cp_lexer_peek_token (parser->lexer);
14655         }
14656       /* Now, look for more attributes.  If the next token isn't a
14657          `,', we're done.  */
14658       if (token->type != CPP_COMMA)
14659         break;
14660
14661       /* Consume the comma and keep going.  */
14662       cp_lexer_consume_token (parser->lexer);
14663     }
14664   parser->translate_strings_p = save_translate_strings_p;
14665
14666   /* We built up the list in reverse order.  */
14667   return nreverse (attribute_list);
14668 }
14669
14670 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
14671    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
14672    current value of the PEDANTIC flag, regardless of whether or not
14673    the `__extension__' keyword is present.  The caller is responsible
14674    for restoring the value of the PEDANTIC flag.  */
14675
14676 static bool
14677 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
14678 {
14679   /* Save the old value of the PEDANTIC flag.  */
14680   *saved_pedantic = pedantic;
14681
14682   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
14683     {
14684       /* Consume the `__extension__' token.  */
14685       cp_lexer_consume_token (parser->lexer);
14686       /* We're not being pedantic while the `__extension__' keyword is
14687          in effect.  */
14688       pedantic = 0;
14689
14690       return true;
14691     }
14692
14693   return false;
14694 }
14695
14696 /* Parse a label declaration.
14697
14698    label-declaration:
14699      __label__ label-declarator-seq ;
14700
14701    label-declarator-seq:
14702      identifier , label-declarator-seq
14703      identifier  */
14704
14705 static void
14706 cp_parser_label_declaration (cp_parser* parser)
14707 {
14708   /* Look for the `__label__' keyword.  */
14709   cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
14710
14711   while (true)
14712     {
14713       tree identifier;
14714
14715       /* Look for an identifier.  */
14716       identifier = cp_parser_identifier (parser);
14717       /* If we failed, stop.  */
14718       if (identifier == error_mark_node)
14719         break;
14720       /* Declare it as a label.  */
14721       finish_label_decl (identifier);
14722       /* If the next token is a `;', stop.  */
14723       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14724         break;
14725       /* Look for the `,' separating the label declarations.  */
14726       cp_parser_require (parser, CPP_COMMA, "`,'");
14727     }
14728
14729   /* Look for the final `;'.  */
14730   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14731 }
14732
14733 /* Support Functions */
14734
14735 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
14736    NAME should have one of the representations used for an
14737    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
14738    is returned.  If PARSER->SCOPE is a dependent type, then a
14739    SCOPE_REF is returned.
14740
14741    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
14742    returned; the name was already resolved when the TEMPLATE_ID_EXPR
14743    was formed.  Abstractly, such entities should not be passed to this
14744    function, because they do not need to be looked up, but it is
14745    simpler to check for this special case here, rather than at the
14746    call-sites.
14747
14748    In cases not explicitly covered above, this function returns a
14749    DECL, OVERLOAD, or baselink representing the result of the lookup.
14750    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
14751    is returned.
14752
14753    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
14754    (e.g., "struct") that was used.  In that case bindings that do not
14755    refer to types are ignored.
14756
14757    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
14758    ignored.
14759
14760    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
14761    are ignored.
14762
14763    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
14764    types.
14765
14766    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
14767    TREE_LIST of candidates if name-lookup results in an ambiguity, and
14768    NULL_TREE otherwise.  */
14769
14770 static tree
14771 cp_parser_lookup_name (cp_parser *parser, tree name,
14772                        enum tag_types tag_type,
14773                        bool is_template,
14774                        bool is_namespace,
14775                        bool check_dependency,
14776                        tree *ambiguous_decls)
14777 {
14778   int flags = 0;
14779   tree decl;
14780   tree object_type = parser->context->object_type;
14781
14782   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
14783     flags |= LOOKUP_COMPLAIN;
14784
14785   /* Assume that the lookup will be unambiguous.  */
14786   if (ambiguous_decls)
14787     *ambiguous_decls = NULL_TREE;
14788
14789   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
14790      no longer valid.  Note that if we are parsing tentatively, and
14791      the parse fails, OBJECT_TYPE will be automatically restored.  */
14792   parser->context->object_type = NULL_TREE;
14793
14794   if (name == error_mark_node)
14795     return error_mark_node;
14796
14797   /* A template-id has already been resolved; there is no lookup to
14798      do.  */
14799   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
14800     return name;
14801   if (BASELINK_P (name))
14802     {
14803       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
14804                   == TEMPLATE_ID_EXPR);
14805       return name;
14806     }
14807
14808   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
14809      it should already have been checked to make sure that the name
14810      used matches the type being destroyed.  */
14811   if (TREE_CODE (name) == BIT_NOT_EXPR)
14812     {
14813       tree type;
14814
14815       /* Figure out to which type this destructor applies.  */
14816       if (parser->scope)
14817         type = parser->scope;
14818       else if (object_type)
14819         type = object_type;
14820       else
14821         type = current_class_type;
14822       /* If that's not a class type, there is no destructor.  */
14823       if (!type || !CLASS_TYPE_P (type))
14824         return error_mark_node;
14825       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
14826         lazily_declare_fn (sfk_destructor, type);
14827       if (!CLASSTYPE_DESTRUCTORS (type))
14828           return error_mark_node;
14829       /* If it was a class type, return the destructor.  */
14830       return CLASSTYPE_DESTRUCTORS (type);
14831     }
14832
14833   /* By this point, the NAME should be an ordinary identifier.  If
14834      the id-expression was a qualified name, the qualifying scope is
14835      stored in PARSER->SCOPE at this point.  */
14836   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
14837
14838   /* Perform the lookup.  */
14839   if (parser->scope)
14840     {
14841       bool dependent_p;
14842
14843       if (parser->scope == error_mark_node)
14844         return error_mark_node;
14845
14846       /* If the SCOPE is dependent, the lookup must be deferred until
14847          the template is instantiated -- unless we are explicitly
14848          looking up names in uninstantiated templates.  Even then, we
14849          cannot look up the name if the scope is not a class type; it
14850          might, for example, be a template type parameter.  */
14851       dependent_p = (TYPE_P (parser->scope)
14852                      && !(parser->in_declarator_p
14853                           && currently_open_class (parser->scope))
14854                      && dependent_type_p (parser->scope));
14855       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
14856            && dependent_p)
14857         {
14858           if (tag_type)
14859             {
14860               tree type;
14861
14862               /* The resolution to Core Issue 180 says that `struct
14863                  A::B' should be considered a type-name, even if `A'
14864                  is dependent.  */
14865               type = make_typename_type (parser->scope, name, tag_type,
14866                                          /*complain=*/tf_error);
14867               decl = TYPE_NAME (type);
14868             }
14869           else if (is_template
14870                    && (cp_parser_next_token_ends_template_argument_p (parser)
14871                        || cp_lexer_next_token_is (parser->lexer,
14872                                                   CPP_CLOSE_PAREN)))
14873             decl = make_unbound_class_template (parser->scope,
14874                                                 name, NULL_TREE,
14875                                                 /*complain=*/tf_error);
14876           else
14877             decl = build_qualified_name (/*type=*/NULL_TREE,
14878                                          parser->scope, name,
14879                                          is_template);
14880         }
14881       else
14882         {
14883           tree pushed_scope = NULL_TREE;
14884
14885           /* If PARSER->SCOPE is a dependent type, then it must be a
14886              class type, and we must not be checking dependencies;
14887              otherwise, we would have processed this lookup above.  So
14888              that PARSER->SCOPE is not considered a dependent base by
14889              lookup_member, we must enter the scope here.  */
14890           if (dependent_p)
14891             pushed_scope = push_scope (parser->scope);
14892           /* If the PARSER->SCOPE is a template specialization, it
14893              may be instantiated during name lookup.  In that case,
14894              errors may be issued.  Even if we rollback the current
14895              tentative parse, those errors are valid.  */
14896           decl = lookup_qualified_name (parser->scope, name,
14897                                         tag_type != none_type,
14898                                         /*complain=*/true);
14899           if (pushed_scope)
14900             pop_scope (pushed_scope);
14901         }
14902       parser->qualifying_scope = parser->scope;
14903       parser->object_scope = NULL_TREE;
14904     }
14905   else if (object_type)
14906     {
14907       tree object_decl = NULL_TREE;
14908       /* Look up the name in the scope of the OBJECT_TYPE, unless the
14909          OBJECT_TYPE is not a class.  */
14910       if (CLASS_TYPE_P (object_type))
14911         /* If the OBJECT_TYPE is a template specialization, it may
14912            be instantiated during name lookup.  In that case, errors
14913            may be issued.  Even if we rollback the current tentative
14914            parse, those errors are valid.  */
14915         object_decl = lookup_member (object_type,
14916                                      name,
14917                                      /*protect=*/0,
14918                                      tag_type != none_type);
14919       /* Look it up in the enclosing context, too.  */
14920       decl = lookup_name_real (name, tag_type != none_type,
14921                                /*nonclass=*/0,
14922                                /*block_p=*/true, is_namespace, flags);
14923       parser->object_scope = object_type;
14924       parser->qualifying_scope = NULL_TREE;
14925       if (object_decl)
14926         decl = object_decl;
14927     }
14928   else
14929     {
14930       decl = lookup_name_real (name, tag_type != none_type,
14931                                /*nonclass=*/0,
14932                                /*block_p=*/true, is_namespace, flags);
14933       parser->qualifying_scope = NULL_TREE;
14934       parser->object_scope = NULL_TREE;
14935     }
14936
14937   /* If the lookup failed, let our caller know.  */
14938   if (!decl || decl == error_mark_node)
14939     return error_mark_node;
14940
14941   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
14942   if (TREE_CODE (decl) == TREE_LIST)
14943     {
14944       if (ambiguous_decls)
14945         *ambiguous_decls = decl;
14946       /* The error message we have to print is too complicated for
14947          cp_parser_error, so we incorporate its actions directly.  */
14948       if (!cp_parser_simulate_error (parser))
14949         {
14950           error ("reference to %qD is ambiguous", name);
14951           print_candidates (decl);
14952         }
14953       return error_mark_node;
14954     }
14955
14956   gcc_assert (DECL_P (decl)
14957               || TREE_CODE (decl) == OVERLOAD
14958               || TREE_CODE (decl) == SCOPE_REF
14959               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
14960               || BASELINK_P (decl));
14961
14962   /* If we have resolved the name of a member declaration, check to
14963      see if the declaration is accessible.  When the name resolves to
14964      set of overloaded functions, accessibility is checked when
14965      overload resolution is done.
14966
14967      During an explicit instantiation, access is not checked at all,
14968      as per [temp.explicit].  */
14969   if (DECL_P (decl))
14970     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
14971
14972   return decl;
14973 }
14974
14975 /* Like cp_parser_lookup_name, but for use in the typical case where
14976    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
14977    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
14978
14979 static tree
14980 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
14981 {
14982   return cp_parser_lookup_name (parser, name,
14983                                 none_type,
14984                                 /*is_template=*/false,
14985                                 /*is_namespace=*/false,
14986                                 /*check_dependency=*/true,
14987                                 /*ambiguous_decls=*/NULL);
14988 }
14989
14990 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
14991    the current context, return the TYPE_DECL.  If TAG_NAME_P is
14992    true, the DECL indicates the class being defined in a class-head,
14993    or declared in an elaborated-type-specifier.
14994
14995    Otherwise, return DECL.  */
14996
14997 static tree
14998 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
14999 {
15000   /* If the TEMPLATE_DECL is being declared as part of a class-head,
15001      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
15002
15003        struct A {
15004          template <typename T> struct B;
15005        };
15006
15007        template <typename T> struct A::B {};
15008
15009      Similarly, in an elaborated-type-specifier:
15010
15011        namespace N { struct X{}; }
15012
15013        struct A {
15014          template <typename T> friend struct N::X;
15015        };
15016
15017      However, if the DECL refers to a class type, and we are in
15018      the scope of the class, then the name lookup automatically
15019      finds the TYPE_DECL created by build_self_reference rather
15020      than a TEMPLATE_DECL.  For example, in:
15021
15022        template <class T> struct S {
15023          S s;
15024        };
15025
15026      there is no need to handle such case.  */
15027
15028   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
15029     return DECL_TEMPLATE_RESULT (decl);
15030
15031   return decl;
15032 }
15033
15034 /* If too many, or too few, template-parameter lists apply to the
15035    declarator, issue an error message.  Returns TRUE if all went well,
15036    and FALSE otherwise.  */
15037
15038 static bool
15039 cp_parser_check_declarator_template_parameters (cp_parser* parser,
15040                                                 cp_declarator *declarator)
15041 {
15042   unsigned num_templates;
15043
15044   /* We haven't seen any classes that involve template parameters yet.  */
15045   num_templates = 0;
15046
15047   switch (declarator->kind)
15048     {
15049     case cdk_id:
15050       if (declarator->u.id.qualifying_scope)
15051         {
15052           tree scope;
15053           tree member;
15054
15055           scope = declarator->u.id.qualifying_scope;
15056           member = declarator->u.id.unqualified_name;
15057
15058           while (scope && CLASS_TYPE_P (scope))
15059             {
15060               /* You're supposed to have one `template <...>'
15061                  for every template class, but you don't need one
15062                  for a full specialization.  For example:
15063
15064                  template <class T> struct S{};
15065                  template <> struct S<int> { void f(); };
15066                  void S<int>::f () {}
15067
15068                  is correct; there shouldn't be a `template <>' for
15069                  the definition of `S<int>::f'.  */
15070               if (CLASSTYPE_TEMPLATE_INFO (scope)
15071                   && (CLASSTYPE_TEMPLATE_INSTANTIATION (scope)
15072                       || uses_template_parms (CLASSTYPE_TI_ARGS (scope)))
15073                   && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
15074                 ++num_templates;
15075
15076               scope = TYPE_CONTEXT (scope);
15077             }
15078         }
15079       else if (TREE_CODE (declarator->u.id.unqualified_name)
15080                == TEMPLATE_ID_EXPR)
15081         /* If the DECLARATOR has the form `X<y>' then it uses one
15082            additional level of template parameters.  */
15083         ++num_templates;
15084
15085       return cp_parser_check_template_parameters (parser,
15086                                                   num_templates);
15087
15088     case cdk_function:
15089     case cdk_array:
15090     case cdk_pointer:
15091     case cdk_reference:
15092     case cdk_ptrmem:
15093       return (cp_parser_check_declarator_template_parameters
15094               (parser, declarator->declarator));
15095
15096     case cdk_error:
15097       return true;
15098
15099     default:
15100       gcc_unreachable ();
15101     }
15102   return false;
15103 }
15104
15105 /* NUM_TEMPLATES were used in the current declaration.  If that is
15106    invalid, return FALSE and issue an error messages.  Otherwise,
15107    return TRUE.  */
15108
15109 static bool
15110 cp_parser_check_template_parameters (cp_parser* parser,
15111                                      unsigned num_templates)
15112 {
15113   /* If there are more template classes than parameter lists, we have
15114      something like:
15115
15116        template <class T> void S<T>::R<T>::f ();  */
15117   if (parser->num_template_parameter_lists < num_templates)
15118     {
15119       error ("too few template-parameter-lists");
15120       return false;
15121     }
15122   /* If there are the same number of template classes and parameter
15123      lists, that's OK.  */
15124   if (parser->num_template_parameter_lists == num_templates)
15125     return true;
15126   /* If there are more, but only one more, then we are referring to a
15127      member template.  That's OK too.  */
15128   if (parser->num_template_parameter_lists == num_templates + 1)
15129       return true;
15130   /* Otherwise, there are too many template parameter lists.  We have
15131      something like:
15132
15133      template <class T> template <class U> void S::f();  */
15134   error ("too many template-parameter-lists");
15135   return false;
15136 }
15137
15138 /* Parse an optional `::' token indicating that the following name is
15139    from the global namespace.  If so, PARSER->SCOPE is set to the
15140    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
15141    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
15142    Returns the new value of PARSER->SCOPE, if the `::' token is
15143    present, and NULL_TREE otherwise.  */
15144
15145 static tree
15146 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
15147 {
15148   cp_token *token;
15149
15150   /* Peek at the next token.  */
15151   token = cp_lexer_peek_token (parser->lexer);
15152   /* If we're looking at a `::' token then we're starting from the
15153      global namespace, not our current location.  */
15154   if (token->type == CPP_SCOPE)
15155     {
15156       /* Consume the `::' token.  */
15157       cp_lexer_consume_token (parser->lexer);
15158       /* Set the SCOPE so that we know where to start the lookup.  */
15159       parser->scope = global_namespace;
15160       parser->qualifying_scope = global_namespace;
15161       parser->object_scope = NULL_TREE;
15162
15163       return parser->scope;
15164     }
15165   else if (!current_scope_valid_p)
15166     {
15167       parser->scope = NULL_TREE;
15168       parser->qualifying_scope = NULL_TREE;
15169       parser->object_scope = NULL_TREE;
15170     }
15171
15172   return NULL_TREE;
15173 }
15174
15175 /* Returns TRUE if the upcoming token sequence is the start of a
15176    constructor declarator.  If FRIEND_P is true, the declarator is
15177    preceded by the `friend' specifier.  */
15178
15179 static bool
15180 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
15181 {
15182   bool constructor_p;
15183   tree type_decl = NULL_TREE;
15184   bool nested_name_p;
15185   cp_token *next_token;
15186
15187   /* The common case is that this is not a constructor declarator, so
15188      try to avoid doing lots of work if at all possible.  It's not
15189      valid declare a constructor at function scope.  */
15190   if (at_function_scope_p ())
15191     return false;
15192   /* And only certain tokens can begin a constructor declarator.  */
15193   next_token = cp_lexer_peek_token (parser->lexer);
15194   if (next_token->type != CPP_NAME
15195       && next_token->type != CPP_SCOPE
15196       && next_token->type != CPP_NESTED_NAME_SPECIFIER
15197       && next_token->type != CPP_TEMPLATE_ID)
15198     return false;
15199
15200   /* Parse tentatively; we are going to roll back all of the tokens
15201      consumed here.  */
15202   cp_parser_parse_tentatively (parser);
15203   /* Assume that we are looking at a constructor declarator.  */
15204   constructor_p = true;
15205
15206   /* Look for the optional `::' operator.  */
15207   cp_parser_global_scope_opt (parser,
15208                               /*current_scope_valid_p=*/false);
15209   /* Look for the nested-name-specifier.  */
15210   nested_name_p
15211     = (cp_parser_nested_name_specifier_opt (parser,
15212                                             /*typename_keyword_p=*/false,
15213                                             /*check_dependency_p=*/false,
15214                                             /*type_p=*/false,
15215                                             /*is_declaration=*/false)
15216        != NULL_TREE);
15217   /* Outside of a class-specifier, there must be a
15218      nested-name-specifier.  */
15219   if (!nested_name_p &&
15220       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
15221        || friend_p))
15222     constructor_p = false;
15223   /* If we still think that this might be a constructor-declarator,
15224      look for a class-name.  */
15225   if (constructor_p)
15226     {
15227       /* If we have:
15228
15229            template <typename T> struct S { S(); };
15230            template <typename T> S<T>::S ();
15231
15232          we must recognize that the nested `S' names a class.
15233          Similarly, for:
15234
15235            template <typename T> S<T>::S<T> ();
15236
15237          we must recognize that the nested `S' names a template.  */
15238       type_decl = cp_parser_class_name (parser,
15239                                         /*typename_keyword_p=*/false,
15240                                         /*template_keyword_p=*/false,
15241                                         none_type,
15242                                         /*check_dependency_p=*/false,
15243                                         /*class_head_p=*/false,
15244                                         /*is_declaration=*/false);
15245       /* If there was no class-name, then this is not a constructor.  */
15246       constructor_p = !cp_parser_error_occurred (parser);
15247     }
15248
15249   /* If we're still considering a constructor, we have to see a `(',
15250      to begin the parameter-declaration-clause, followed by either a
15251      `)', an `...', or a decl-specifier.  We need to check for a
15252      type-specifier to avoid being fooled into thinking that:
15253
15254        S::S (f) (int);
15255
15256      is a constructor.  (It is actually a function named `f' that
15257      takes one parameter (of type `int') and returns a value of type
15258      `S::S'.  */
15259   if (constructor_p
15260       && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
15261     {
15262       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
15263           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
15264           /* A parameter declaration begins with a decl-specifier,
15265              which is either the "attribute" keyword, a storage class
15266              specifier, or (usually) a type-specifier.  */
15267           && !cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE)
15268           && !cp_parser_storage_class_specifier_opt (parser))
15269         {
15270           tree type;
15271           tree pushed_scope = NULL_TREE;
15272           unsigned saved_num_template_parameter_lists;
15273
15274           /* Names appearing in the type-specifier should be looked up
15275              in the scope of the class.  */
15276           if (current_class_type)
15277             type = NULL_TREE;
15278           else
15279             {
15280               type = TREE_TYPE (type_decl);
15281               if (TREE_CODE (type) == TYPENAME_TYPE)
15282                 {
15283                   type = resolve_typename_type (type,
15284                                                 /*only_current_p=*/false);
15285                   if (type == error_mark_node)
15286                     {
15287                       cp_parser_abort_tentative_parse (parser);
15288                       return false;
15289                     }
15290                 }
15291               pushed_scope = push_scope (type);
15292             }
15293
15294           /* Inside the constructor parameter list, surrounding
15295              template-parameter-lists do not apply.  */
15296           saved_num_template_parameter_lists
15297             = parser->num_template_parameter_lists;
15298           parser->num_template_parameter_lists = 0;
15299
15300           /* Look for the type-specifier.  */
15301           cp_parser_type_specifier (parser,
15302                                     CP_PARSER_FLAGS_NONE,
15303                                     /*decl_specs=*/NULL,
15304                                     /*is_declarator=*/true,
15305                                     /*declares_class_or_enum=*/NULL,
15306                                     /*is_cv_qualifier=*/NULL);
15307
15308           parser->num_template_parameter_lists
15309             = saved_num_template_parameter_lists;
15310
15311           /* Leave the scope of the class.  */
15312           if (pushed_scope)
15313             pop_scope (pushed_scope);
15314
15315           constructor_p = !cp_parser_error_occurred (parser);
15316         }
15317     }
15318   else
15319     constructor_p = false;
15320   /* We did not really want to consume any tokens.  */
15321   cp_parser_abort_tentative_parse (parser);
15322
15323   return constructor_p;
15324 }
15325
15326 /* Parse the definition of the function given by the DECL_SPECIFIERS,
15327    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
15328    they must be performed once we are in the scope of the function.
15329
15330    Returns the function defined.  */
15331
15332 static tree
15333 cp_parser_function_definition_from_specifiers_and_declarator
15334   (cp_parser* parser,
15335    cp_decl_specifier_seq *decl_specifiers,
15336    tree attributes,
15337    const cp_declarator *declarator)
15338 {
15339   tree fn;
15340   bool success_p;
15341
15342   /* Begin the function-definition.  */
15343   success_p = start_function (decl_specifiers, declarator, attributes);
15344
15345   /* The things we're about to see are not directly qualified by any
15346      template headers we've seen thus far.  */
15347   reset_specialization ();
15348
15349   /* If there were names looked up in the decl-specifier-seq that we
15350      did not check, check them now.  We must wait until we are in the
15351      scope of the function to perform the checks, since the function
15352      might be a friend.  */
15353   perform_deferred_access_checks ();
15354
15355   if (!success_p)
15356     {
15357       /* Skip the entire function.  */
15358       cp_parser_skip_to_end_of_block_or_statement (parser);
15359       fn = error_mark_node;
15360     }
15361   else
15362     fn = cp_parser_function_definition_after_declarator (parser,
15363                                                          /*inline_p=*/false);
15364
15365   return fn;
15366 }
15367
15368 /* Parse the part of a function-definition that follows the
15369    declarator.  INLINE_P is TRUE iff this function is an inline
15370    function defined with a class-specifier.
15371
15372    Returns the function defined.  */
15373
15374 static tree
15375 cp_parser_function_definition_after_declarator (cp_parser* parser,
15376                                                 bool inline_p)
15377 {
15378   tree fn;
15379   bool ctor_initializer_p = false;
15380   bool saved_in_unbraced_linkage_specification_p;
15381   unsigned saved_num_template_parameter_lists;
15382
15383   /* If the next token is `return', then the code may be trying to
15384      make use of the "named return value" extension that G++ used to
15385      support.  */
15386   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
15387     {
15388       /* Consume the `return' keyword.  */
15389       cp_lexer_consume_token (parser->lexer);
15390       /* Look for the identifier that indicates what value is to be
15391          returned.  */
15392       cp_parser_identifier (parser);
15393       /* Issue an error message.  */
15394       error ("named return values are no longer supported");
15395       /* Skip tokens until we reach the start of the function body.  */
15396       while (true)
15397         {
15398           cp_token *token = cp_lexer_peek_token (parser->lexer);
15399           if (token->type == CPP_OPEN_BRACE
15400               || token->type == CPP_EOF
15401               || token->type == CPP_PRAGMA_EOL)
15402             break;
15403           cp_lexer_consume_token (parser->lexer);
15404         }
15405     }
15406   /* The `extern' in `extern "C" void f () { ... }' does not apply to
15407      anything declared inside `f'.  */
15408   saved_in_unbraced_linkage_specification_p
15409     = parser->in_unbraced_linkage_specification_p;
15410   parser->in_unbraced_linkage_specification_p = false;
15411   /* Inside the function, surrounding template-parameter-lists do not
15412      apply.  */
15413   saved_num_template_parameter_lists
15414     = parser->num_template_parameter_lists;
15415   parser->num_template_parameter_lists = 0;
15416   /* If the next token is `try', then we are looking at a
15417      function-try-block.  */
15418   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
15419     ctor_initializer_p = cp_parser_function_try_block (parser);
15420   /* A function-try-block includes the function-body, so we only do
15421      this next part if we're not processing a function-try-block.  */
15422   else
15423     ctor_initializer_p
15424       = cp_parser_ctor_initializer_opt_and_function_body (parser);
15425
15426   /* Finish the function.  */
15427   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
15428                         (inline_p ? 2 : 0));
15429   /* Generate code for it, if necessary.  */
15430   expand_or_defer_fn (fn);
15431   /* Restore the saved values.  */
15432   parser->in_unbraced_linkage_specification_p
15433     = saved_in_unbraced_linkage_specification_p;
15434   parser->num_template_parameter_lists
15435     = saved_num_template_parameter_lists;
15436
15437   return fn;
15438 }
15439
15440 /* Parse a template-declaration, assuming that the `export' (and
15441    `extern') keywords, if present, has already been scanned.  MEMBER_P
15442    is as for cp_parser_template_declaration.  */
15443
15444 static void
15445 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
15446 {
15447   tree decl = NULL_TREE;
15448   tree checks;
15449   tree parameter_list;
15450   bool friend_p = false;
15451   bool need_lang_pop;
15452
15453   /* Look for the `template' keyword.  */
15454   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
15455     return;
15456
15457   /* And the `<'.  */
15458   if (!cp_parser_require (parser, CPP_LESS, "`<'"))
15459     return;
15460   /* [temp]
15461
15462      A template ... shall not have C linkage.  */
15463   if (current_lang_name == lang_name_c)
15464     {
15465       error ("template with C linkage");
15466       /* Give it C++ linkage to avoid confusing other parts of the
15467          front end.  */
15468       push_lang_context (lang_name_cplusplus);
15469       need_lang_pop = true;
15470     }
15471   else
15472     need_lang_pop = false;
15473
15474   /* We cannot perform access checks on the template parameter
15475      declarations until we know what is being declared, just as we
15476      cannot check the decl-specifier list.  */
15477   push_deferring_access_checks (dk_deferred);
15478
15479   /* If the next token is `>', then we have an invalid
15480      specialization.  Rather than complain about an invalid template
15481      parameter, issue an error message here.  */
15482   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15483     {
15484       cp_parser_error (parser, "invalid explicit specialization");
15485       begin_specialization ();
15486       parameter_list = NULL_TREE;
15487     }
15488   else
15489     /* Parse the template parameters.  */
15490     parameter_list = cp_parser_template_parameter_list (parser);
15491
15492   /* Get the deferred access checks from the parameter list.  These
15493      will be checked once we know what is being declared, as for a
15494      member template the checks must be performed in the scope of the
15495      class containing the member.  */
15496   checks = get_deferred_access_checks ();
15497
15498   /* Look for the `>'.  */
15499   cp_parser_skip_to_end_of_template_parameter_list (parser);
15500   /* We just processed one more parameter list.  */
15501   ++parser->num_template_parameter_lists;
15502   /* If the next token is `template', there are more template
15503      parameters.  */
15504   if (cp_lexer_next_token_is_keyword (parser->lexer,
15505                                       RID_TEMPLATE))
15506     cp_parser_template_declaration_after_export (parser, member_p);
15507   else
15508     {
15509       /* There are no access checks when parsing a template, as we do not
15510          know if a specialization will be a friend.  */
15511       push_deferring_access_checks (dk_no_check);
15512       decl = cp_parser_single_declaration (parser,
15513                                            checks,
15514                                            member_p,
15515                                            &friend_p);
15516       pop_deferring_access_checks ();
15517
15518       /* If this is a member template declaration, let the front
15519          end know.  */
15520       if (member_p && !friend_p && decl)
15521         {
15522           if (TREE_CODE (decl) == TYPE_DECL)
15523             cp_parser_check_access_in_redeclaration (decl);
15524
15525           decl = finish_member_template_decl (decl);
15526         }
15527       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
15528         make_friend_class (current_class_type, TREE_TYPE (decl),
15529                            /*complain=*/true);
15530     }
15531   /* We are done with the current parameter list.  */
15532   --parser->num_template_parameter_lists;
15533
15534   pop_deferring_access_checks ();
15535
15536   /* Finish up.  */
15537   finish_template_decl (parameter_list);
15538
15539   /* Register member declarations.  */
15540   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
15541     finish_member_declaration (decl);
15542   /* For the erroneous case of a template with C linkage, we pushed an
15543      implicit C++ linkage scope; exit that scope now.  */
15544   if (need_lang_pop)
15545     pop_lang_context ();
15546   /* If DECL is a function template, we must return to parse it later.
15547      (Even though there is no definition, there might be default
15548      arguments that need handling.)  */
15549   if (member_p && decl
15550       && (TREE_CODE (decl) == FUNCTION_DECL
15551           || DECL_FUNCTION_TEMPLATE_P (decl)))
15552     TREE_VALUE (parser->unparsed_functions_queues)
15553       = tree_cons (NULL_TREE, decl,
15554                    TREE_VALUE (parser->unparsed_functions_queues));
15555 }
15556
15557 /* Perform the deferred access checks from a template-parameter-list.
15558    CHECKS is a TREE_LIST of access checks, as returned by
15559    get_deferred_access_checks.  */
15560
15561 static void
15562 cp_parser_perform_template_parameter_access_checks (tree checks)
15563 {
15564   ++processing_template_parmlist;
15565   perform_access_checks (checks);
15566   --processing_template_parmlist;
15567 }
15568
15569 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
15570    `function-definition' sequence.  MEMBER_P is true, this declaration
15571    appears in a class scope.
15572
15573    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
15574    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
15575
15576 static tree
15577 cp_parser_single_declaration (cp_parser* parser,
15578                               tree checks,
15579                               bool member_p,
15580                               bool* friend_p)
15581 {
15582   int declares_class_or_enum;
15583   tree decl = NULL_TREE;
15584   cp_decl_specifier_seq decl_specifiers;
15585   bool function_definition_p = false;
15586
15587   /* This function is only used when processing a template
15588      declaration.  */
15589   gcc_assert (innermost_scope_kind () == sk_template_parms
15590               || innermost_scope_kind () == sk_template_spec);
15591
15592   /* Defer access checks until we know what is being declared.  */
15593   push_deferring_access_checks (dk_deferred);
15594
15595   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
15596      alternative.  */
15597   cp_parser_decl_specifier_seq (parser,
15598                                 CP_PARSER_FLAGS_OPTIONAL,
15599                                 &decl_specifiers,
15600                                 &declares_class_or_enum);
15601   if (friend_p)
15602     *friend_p = cp_parser_friend_p (&decl_specifiers);
15603
15604   /* There are no template typedefs.  */
15605   if (decl_specifiers.specs[(int) ds_typedef])
15606     {
15607       error ("template declaration of %qs", "typedef");
15608       decl = error_mark_node;
15609     }
15610
15611   /* Gather up the access checks that occurred the
15612      decl-specifier-seq.  */
15613   stop_deferring_access_checks ();
15614
15615   /* Check for the declaration of a template class.  */
15616   if (declares_class_or_enum)
15617     {
15618       if (cp_parser_declares_only_class_p (parser))
15619         {
15620           decl = shadow_tag (&decl_specifiers);
15621
15622           /* In this case:
15623
15624                struct C {
15625                  friend template <typename T> struct A<T>::B;
15626                };
15627
15628              A<T>::B will be represented by a TYPENAME_TYPE, and
15629              therefore not recognized by shadow_tag.  */
15630           if (friend_p && *friend_p
15631               && !decl
15632               && decl_specifiers.type
15633               && TYPE_P (decl_specifiers.type))
15634             decl = decl_specifiers.type;
15635
15636           if (decl && decl != error_mark_node)
15637             decl = TYPE_NAME (decl);
15638           else
15639             decl = error_mark_node;
15640
15641           /* Perform access checks for template parameters.  */
15642           cp_parser_perform_template_parameter_access_checks (checks);
15643         }
15644     }
15645   /* If it's not a template class, try for a template function.  If
15646      the next token is a `;', then this declaration does not declare
15647      anything.  But, if there were errors in the decl-specifiers, then
15648      the error might well have come from an attempted class-specifier.
15649      In that case, there's no need to warn about a missing declarator.  */
15650   if (!decl
15651       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
15652           || decl_specifiers.type != error_mark_node))
15653     decl = cp_parser_init_declarator (parser,
15654                                       &decl_specifiers,
15655                                       checks,
15656                                       /*function_definition_allowed_p=*/true,
15657                                       member_p,
15658                                       declares_class_or_enum,
15659                                       &function_definition_p);
15660
15661   pop_deferring_access_checks ();
15662
15663   /* Clear any current qualification; whatever comes next is the start
15664      of something new.  */
15665   parser->scope = NULL_TREE;
15666   parser->qualifying_scope = NULL_TREE;
15667   parser->object_scope = NULL_TREE;
15668   /* Look for a trailing `;' after the declaration.  */
15669   if (!function_definition_p
15670       && (decl == error_mark_node
15671           || !cp_parser_require (parser, CPP_SEMICOLON, "`;'")))
15672     cp_parser_skip_to_end_of_block_or_statement (parser);
15673
15674   return decl;
15675 }
15676
15677 /* Parse a cast-expression that is not the operand of a unary "&".  */
15678
15679 static tree
15680 cp_parser_simple_cast_expression (cp_parser *parser)
15681 {
15682   return cp_parser_cast_expression (parser, /*address_p=*/false,
15683                                     /*cast_p=*/false);
15684 }
15685
15686 /* Parse a functional cast to TYPE.  Returns an expression
15687    representing the cast.  */
15688
15689 static tree
15690 cp_parser_functional_cast (cp_parser* parser, tree type)
15691 {
15692   tree expression_list;
15693   tree cast;
15694
15695   expression_list
15696     = cp_parser_parenthesized_expression_list (parser, false,
15697                                                /*cast_p=*/true,
15698                                                /*non_constant_p=*/NULL);
15699
15700   cast = build_functional_cast (type, expression_list);
15701   /* [expr.const]/1: In an integral constant expression "only type
15702      conversions to integral or enumeration type can be used".  */
15703   if (TREE_CODE (type) == TYPE_DECL)
15704     type = TREE_TYPE (type);
15705   if (cast != error_mark_node
15706       && !cast_valid_in_integral_constant_expression_p (type)
15707       && (cp_parser_non_integral_constant_expression
15708           (parser, "a call to a constructor")))
15709     return error_mark_node;
15710   return cast;
15711 }
15712
15713 /* Save the tokens that make up the body of a member function defined
15714    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
15715    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
15716    specifiers applied to the declaration.  Returns the FUNCTION_DECL
15717    for the member function.  */
15718
15719 static tree
15720 cp_parser_save_member_function_body (cp_parser* parser,
15721                                      cp_decl_specifier_seq *decl_specifiers,
15722                                      cp_declarator *declarator,
15723                                      tree attributes)
15724 {
15725   cp_token *first;
15726   cp_token *last;
15727   tree fn;
15728
15729   /* Create the function-declaration.  */
15730   fn = start_method (decl_specifiers, declarator, attributes);
15731   /* If something went badly wrong, bail out now.  */
15732   if (fn == error_mark_node)
15733     {
15734       /* If there's a function-body, skip it.  */
15735       if (cp_parser_token_starts_function_definition_p
15736           (cp_lexer_peek_token (parser->lexer)))
15737         cp_parser_skip_to_end_of_block_or_statement (parser);
15738       return error_mark_node;
15739     }
15740
15741   /* Remember it, if there default args to post process.  */
15742   cp_parser_save_default_args (parser, fn);
15743
15744   /* Save away the tokens that make up the body of the
15745      function.  */
15746   first = parser->lexer->next_token;
15747   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15748   /* Handle function try blocks.  */
15749   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
15750     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15751   last = parser->lexer->next_token;
15752
15753   /* Save away the inline definition; we will process it when the
15754      class is complete.  */
15755   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
15756   DECL_PENDING_INLINE_P (fn) = 1;
15757
15758   /* We need to know that this was defined in the class, so that
15759      friend templates are handled correctly.  */
15760   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
15761
15762   /* We're done with the inline definition.  */
15763   finish_method (fn);
15764
15765   /* Add FN to the queue of functions to be parsed later.  */
15766   TREE_VALUE (parser->unparsed_functions_queues)
15767     = tree_cons (NULL_TREE, fn,
15768                  TREE_VALUE (parser->unparsed_functions_queues));
15769
15770   return fn;
15771 }
15772
15773 /* Parse a template-argument-list, as well as the trailing ">" (but
15774    not the opening ">").  See cp_parser_template_argument_list for the
15775    return value.  */
15776
15777 static tree
15778 cp_parser_enclosed_template_argument_list (cp_parser* parser)
15779 {
15780   tree arguments;
15781   tree saved_scope;
15782   tree saved_qualifying_scope;
15783   tree saved_object_scope;
15784   bool saved_greater_than_is_operator_p;
15785   bool saved_skip_evaluation;
15786
15787   /* [temp.names]
15788
15789      When parsing a template-id, the first non-nested `>' is taken as
15790      the end of the template-argument-list rather than a greater-than
15791      operator.  */
15792   saved_greater_than_is_operator_p
15793     = parser->greater_than_is_operator_p;
15794   parser->greater_than_is_operator_p = false;
15795   /* Parsing the argument list may modify SCOPE, so we save it
15796      here.  */
15797   saved_scope = parser->scope;
15798   saved_qualifying_scope = parser->qualifying_scope;
15799   saved_object_scope = parser->object_scope;
15800   /* We need to evaluate the template arguments, even though this
15801      template-id may be nested within a "sizeof".  */
15802   saved_skip_evaluation = skip_evaluation;
15803   skip_evaluation = false;
15804   /* Parse the template-argument-list itself.  */
15805   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15806     arguments = NULL_TREE;
15807   else
15808     arguments = cp_parser_template_argument_list (parser);
15809   /* Look for the `>' that ends the template-argument-list. If we find
15810      a '>>' instead, it's probably just a typo.  */
15811   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
15812     {
15813       if (!saved_greater_than_is_operator_p)
15814         {
15815           /* If we're in a nested template argument list, the '>>' has
15816             to be a typo for '> >'. We emit the error message, but we
15817             continue parsing and we push a '>' as next token, so that
15818             the argument list will be parsed correctly.  Note that the
15819             global source location is still on the token before the
15820             '>>', so we need to say explicitly where we want it.  */
15821           cp_token *token = cp_lexer_peek_token (parser->lexer);
15822           error ("%H%<>>%> should be %<> >%> "
15823                  "within a nested template argument list",
15824                  &token->location);
15825
15826           /* ??? Proper recovery should terminate two levels of
15827              template argument list here.  */
15828           token->type = CPP_GREATER;
15829         }
15830       else
15831         {
15832           /* If this is not a nested template argument list, the '>>'
15833             is a typo for '>'. Emit an error message and continue.
15834             Same deal about the token location, but here we can get it
15835             right by consuming the '>>' before issuing the diagnostic.  */
15836           cp_lexer_consume_token (parser->lexer);
15837           error ("spurious %<>>%>, use %<>%> to terminate "
15838                  "a template argument list");
15839         }
15840     }
15841   else
15842     cp_parser_skip_to_end_of_template_parameter_list (parser);
15843   /* The `>' token might be a greater-than operator again now.  */
15844   parser->greater_than_is_operator_p
15845     = saved_greater_than_is_operator_p;
15846   /* Restore the SAVED_SCOPE.  */
15847   parser->scope = saved_scope;
15848   parser->qualifying_scope = saved_qualifying_scope;
15849   parser->object_scope = saved_object_scope;
15850   skip_evaluation = saved_skip_evaluation;
15851
15852   return arguments;
15853 }
15854
15855 /* MEMBER_FUNCTION is a member function, or a friend.  If default
15856    arguments, or the body of the function have not yet been parsed,
15857    parse them now.  */
15858
15859 static void
15860 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
15861 {
15862   /* If this member is a template, get the underlying
15863      FUNCTION_DECL.  */
15864   if (DECL_FUNCTION_TEMPLATE_P (member_function))
15865     member_function = DECL_TEMPLATE_RESULT (member_function);
15866
15867   /* There should not be any class definitions in progress at this
15868      point; the bodies of members are only parsed outside of all class
15869      definitions.  */
15870   gcc_assert (parser->num_classes_being_defined == 0);
15871   /* While we're parsing the member functions we might encounter more
15872      classes.  We want to handle them right away, but we don't want
15873      them getting mixed up with functions that are currently in the
15874      queue.  */
15875   parser->unparsed_functions_queues
15876     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15877
15878   /* Make sure that any template parameters are in scope.  */
15879   maybe_begin_member_template_processing (member_function);
15880
15881   /* If the body of the function has not yet been parsed, parse it
15882      now.  */
15883   if (DECL_PENDING_INLINE_P (member_function))
15884     {
15885       tree function_scope;
15886       cp_token_cache *tokens;
15887
15888       /* The function is no longer pending; we are processing it.  */
15889       tokens = DECL_PENDING_INLINE_INFO (member_function);
15890       DECL_PENDING_INLINE_INFO (member_function) = NULL;
15891       DECL_PENDING_INLINE_P (member_function) = 0;
15892
15893       /* If this is a local class, enter the scope of the containing
15894          function.  */
15895       function_scope = current_function_decl;
15896       if (function_scope)
15897         push_function_context_to (function_scope);
15898
15899
15900       /* Push the body of the function onto the lexer stack.  */
15901       cp_parser_push_lexer_for_tokens (parser, tokens);
15902
15903       /* Let the front end know that we going to be defining this
15904          function.  */
15905       start_preparsed_function (member_function, NULL_TREE,
15906                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
15907
15908       /* Don't do access checking if it is a templated function.  */
15909       if (processing_template_decl)
15910         push_deferring_access_checks (dk_no_check);
15911
15912       /* Now, parse the body of the function.  */
15913       cp_parser_function_definition_after_declarator (parser,
15914                                                       /*inline_p=*/true);
15915
15916       if (processing_template_decl)
15917         pop_deferring_access_checks ();
15918
15919       /* Leave the scope of the containing function.  */
15920       if (function_scope)
15921         pop_function_context_from (function_scope);
15922       cp_parser_pop_lexer (parser);
15923     }
15924
15925   /* Remove any template parameters from the symbol table.  */
15926   maybe_end_member_template_processing ();
15927
15928   /* Restore the queue.  */
15929   parser->unparsed_functions_queues
15930     = TREE_CHAIN (parser->unparsed_functions_queues);
15931 }
15932
15933 /* If DECL contains any default args, remember it on the unparsed
15934    functions queue.  */
15935
15936 static void
15937 cp_parser_save_default_args (cp_parser* parser, tree decl)
15938 {
15939   tree probe;
15940
15941   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
15942        probe;
15943        probe = TREE_CHAIN (probe))
15944     if (TREE_PURPOSE (probe))
15945       {
15946         TREE_PURPOSE (parser->unparsed_functions_queues)
15947           = tree_cons (current_class_type, decl,
15948                        TREE_PURPOSE (parser->unparsed_functions_queues));
15949         break;
15950       }
15951 }
15952
15953 /* FN is a FUNCTION_DECL which may contains a parameter with an
15954    unparsed DEFAULT_ARG.  Parse the default args now.  This function
15955    assumes that the current scope is the scope in which the default
15956    argument should be processed.  */
15957
15958 static void
15959 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
15960 {
15961   bool saved_local_variables_forbidden_p;
15962   tree parm;
15963
15964   /* While we're parsing the default args, we might (due to the
15965      statement expression extension) encounter more classes.  We want
15966      to handle them right away, but we don't want them getting mixed
15967      up with default args that are currently in the queue.  */
15968   parser->unparsed_functions_queues
15969     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15970
15971   /* Local variable names (and the `this' keyword) may not appear
15972      in a default argument.  */
15973   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
15974   parser->local_variables_forbidden_p = true;
15975
15976   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
15977        parm;
15978        parm = TREE_CHAIN (parm))
15979     {
15980       cp_token_cache *tokens;
15981       tree default_arg = TREE_PURPOSE (parm);
15982       tree parsed_arg;
15983       VEC(tree,gc) *insts;
15984       tree copy;
15985       unsigned ix;
15986
15987       if (!default_arg)
15988         continue;
15989
15990       if (TREE_CODE (default_arg) != DEFAULT_ARG)
15991         /* This can happen for a friend declaration for a function
15992            already declared with default arguments.  */
15993         continue;
15994
15995        /* Push the saved tokens for the default argument onto the parser's
15996           lexer stack.  */
15997       tokens = DEFARG_TOKENS (default_arg);
15998       cp_parser_push_lexer_for_tokens (parser, tokens);
15999
16000       /* Parse the assignment-expression.  */
16001       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false);
16002
16003       if (!processing_template_decl)
16004         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
16005
16006       TREE_PURPOSE (parm) = parsed_arg;
16007
16008       /* Update any instantiations we've already created.  */
16009       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
16010            VEC_iterate (tree, insts, ix, copy); ix++)
16011         TREE_PURPOSE (copy) = parsed_arg;
16012
16013       /* If the token stream has not been completely used up, then
16014          there was extra junk after the end of the default
16015          argument.  */
16016       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
16017         cp_parser_error (parser, "expected %<,%>");
16018
16019       /* Revert to the main lexer.  */
16020       cp_parser_pop_lexer (parser);
16021     }
16022
16023   /* Make sure no default arg is missing.  */
16024   check_default_args (fn);
16025
16026   /* Restore the state of local_variables_forbidden_p.  */
16027   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
16028
16029   /* Restore the queue.  */
16030   parser->unparsed_functions_queues
16031     = TREE_CHAIN (parser->unparsed_functions_queues);
16032 }
16033
16034 /* Parse the operand of `sizeof' (or a similar operator).  Returns
16035    either a TYPE or an expression, depending on the form of the
16036    input.  The KEYWORD indicates which kind of expression we have
16037    encountered.  */
16038
16039 static tree
16040 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
16041 {
16042   static const char *format;
16043   tree expr = NULL_TREE;
16044   const char *saved_message;
16045   bool saved_integral_constant_expression_p;
16046   bool saved_non_integral_constant_expression_p;
16047
16048   /* Initialize FORMAT the first time we get here.  */
16049   if (!format)
16050     format = "types may not be defined in '%s' expressions";
16051
16052   /* Types cannot be defined in a `sizeof' expression.  Save away the
16053      old message.  */
16054   saved_message = parser->type_definition_forbidden_message;
16055   /* And create the new one.  */
16056   parser->type_definition_forbidden_message
16057     = XNEWVEC (const char, strlen (format)
16058                + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
16059                + 1 /* `\0' */);
16060   sprintf ((char *) parser->type_definition_forbidden_message,
16061            format, IDENTIFIER_POINTER (ridpointers[keyword]));
16062
16063   /* The restrictions on constant-expressions do not apply inside
16064      sizeof expressions.  */
16065   saved_integral_constant_expression_p
16066     = parser->integral_constant_expression_p;
16067   saved_non_integral_constant_expression_p
16068     = parser->non_integral_constant_expression_p;
16069   parser->integral_constant_expression_p = false;
16070
16071   /* Do not actually evaluate the expression.  */
16072   ++skip_evaluation;
16073   /* If it's a `(', then we might be looking at the type-id
16074      construction.  */
16075   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
16076     {
16077       tree type;
16078       bool saved_in_type_id_in_expr_p;
16079
16080       /* We can't be sure yet whether we're looking at a type-id or an
16081          expression.  */
16082       cp_parser_parse_tentatively (parser);
16083       /* Consume the `('.  */
16084       cp_lexer_consume_token (parser->lexer);
16085       /* Parse the type-id.  */
16086       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
16087       parser->in_type_id_in_expr_p = true;
16088       type = cp_parser_type_id (parser);
16089       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
16090       /* Now, look for the trailing `)'.  */
16091       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16092       /* If all went well, then we're done.  */
16093       if (cp_parser_parse_definitely (parser))
16094         {
16095           cp_decl_specifier_seq decl_specs;
16096
16097           /* Build a trivial decl-specifier-seq.  */
16098           clear_decl_specs (&decl_specs);
16099           decl_specs.type = type;
16100
16101           /* Call grokdeclarator to figure out what type this is.  */
16102           expr = grokdeclarator (NULL,
16103                                  &decl_specs,
16104                                  TYPENAME,
16105                                  /*initialized=*/0,
16106                                  /*attrlist=*/NULL);
16107         }
16108     }
16109
16110   /* If the type-id production did not work out, then we must be
16111      looking at the unary-expression production.  */
16112   if (!expr)
16113     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
16114                                        /*cast_p=*/false);
16115   /* Go back to evaluating expressions.  */
16116   --skip_evaluation;
16117
16118   /* Free the message we created.  */
16119   free ((char *) parser->type_definition_forbidden_message);
16120   /* And restore the old one.  */
16121   parser->type_definition_forbidden_message = saved_message;
16122   parser->integral_constant_expression_p
16123     = saved_integral_constant_expression_p;
16124   parser->non_integral_constant_expression_p
16125     = saved_non_integral_constant_expression_p;
16126
16127   return expr;
16128 }
16129
16130 /* If the current declaration has no declarator, return true.  */
16131
16132 static bool
16133 cp_parser_declares_only_class_p (cp_parser *parser)
16134 {
16135   /* If the next token is a `;' or a `,' then there is no
16136      declarator.  */
16137   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16138           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
16139 }
16140
16141 /* Update the DECL_SPECS to reflect the storage class indicated by
16142    KEYWORD.  */
16143
16144 static void
16145 cp_parser_set_storage_class (cp_parser *parser,
16146                              cp_decl_specifier_seq *decl_specs,
16147                              enum rid keyword)
16148 {
16149   cp_storage_class storage_class;
16150
16151   if (parser->in_unbraced_linkage_specification_p)
16152     {
16153       error ("invalid use of %qD in linkage specification",
16154              ridpointers[keyword]);
16155       return;
16156     }
16157   else if (decl_specs->storage_class != sc_none)
16158     {
16159       decl_specs->multiple_storage_classes_p = true;
16160       return;
16161     }
16162
16163   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
16164       && decl_specs->specs[(int) ds_thread])
16165     {
16166       error ("%<__thread%> before %qD", ridpointers[keyword]);
16167       decl_specs->specs[(int) ds_thread] = 0;
16168     }
16169
16170   switch (keyword)
16171     {
16172     case RID_AUTO:
16173       storage_class = sc_auto;
16174       break;
16175     case RID_REGISTER:
16176       storage_class = sc_register;
16177       break;
16178     case RID_STATIC:
16179       storage_class = sc_static;
16180       break;
16181     case RID_EXTERN:
16182       storage_class = sc_extern;
16183       break;
16184     case RID_MUTABLE:
16185       storage_class = sc_mutable;
16186       break;
16187     default:
16188       gcc_unreachable ();
16189     }
16190   decl_specs->storage_class = storage_class;
16191 }
16192
16193 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
16194    is true, the type is a user-defined type; otherwise it is a
16195    built-in type specified by a keyword.  */
16196
16197 static void
16198 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
16199                               tree type_spec,
16200                               bool user_defined_p)
16201 {
16202   decl_specs->any_specifiers_p = true;
16203
16204   /* If the user tries to redeclare bool or wchar_t (with, for
16205      example, in "typedef int wchar_t;") we remember that this is what
16206      happened.  In system headers, we ignore these declarations so
16207      that G++ can work with system headers that are not C++-safe.  */
16208   if (decl_specs->specs[(int) ds_typedef]
16209       && !user_defined_p
16210       && (type_spec == boolean_type_node
16211           || type_spec == wchar_type_node)
16212       && (decl_specs->type
16213           || decl_specs->specs[(int) ds_long]
16214           || decl_specs->specs[(int) ds_short]
16215           || decl_specs->specs[(int) ds_unsigned]
16216           || decl_specs->specs[(int) ds_signed]))
16217     {
16218       decl_specs->redefined_builtin_type = type_spec;
16219       if (!decl_specs->type)
16220         {
16221           decl_specs->type = type_spec;
16222           decl_specs->user_defined_type_p = false;
16223         }
16224     }
16225   else if (decl_specs->type)
16226     decl_specs->multiple_types_p = true;
16227   else
16228     {
16229       decl_specs->type = type_spec;
16230       decl_specs->user_defined_type_p = user_defined_p;
16231       decl_specs->redefined_builtin_type = NULL_TREE;
16232     }
16233 }
16234
16235 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
16236    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
16237
16238 static bool
16239 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
16240 {
16241   return decl_specifiers->specs[(int) ds_friend] != 0;
16242 }
16243
16244 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
16245    issue an error message indicating that TOKEN_DESC was expected.
16246
16247    Returns the token consumed, if the token had the appropriate type.
16248    Otherwise, returns NULL.  */
16249
16250 static cp_token *
16251 cp_parser_require (cp_parser* parser,
16252                    enum cpp_ttype type,
16253                    const char* token_desc)
16254 {
16255   if (cp_lexer_next_token_is (parser->lexer, type))
16256     return cp_lexer_consume_token (parser->lexer);
16257   else
16258     {
16259       /* Output the MESSAGE -- unless we're parsing tentatively.  */
16260       if (!cp_parser_simulate_error (parser))
16261         {
16262           char *message = concat ("expected ", token_desc, NULL);
16263           cp_parser_error (parser, message);
16264           free (message);
16265         }
16266       return NULL;
16267     }
16268 }
16269
16270 /* An error message is produced if the next token is not '>'.
16271    All further tokens are skipped until the desired token is
16272    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
16273
16274 static void
16275 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
16276 {
16277   /* Current level of '< ... >'.  */
16278   unsigned level = 0;
16279   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
16280   unsigned nesting_depth = 0;
16281
16282   /* Are we ready, yet?  If not, issue error message.  */
16283   if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
16284     return;
16285
16286   /* Skip tokens until the desired token is found.  */
16287   while (true)
16288     {
16289       /* Peek at the next token.  */
16290       switch (cp_lexer_peek_token (parser->lexer)->type)
16291         {
16292         case CPP_LESS:
16293           if (!nesting_depth)
16294             ++level;
16295           break;
16296
16297         case CPP_GREATER:
16298           if (!nesting_depth && level-- == 0)
16299             {
16300               /* We've reached the token we want, consume it and stop.  */
16301               cp_lexer_consume_token (parser->lexer);
16302               return;
16303             }
16304           break;
16305
16306         case CPP_OPEN_PAREN:
16307         case CPP_OPEN_SQUARE:
16308           ++nesting_depth;
16309           break;
16310
16311         case CPP_CLOSE_PAREN:
16312         case CPP_CLOSE_SQUARE:
16313           if (nesting_depth-- == 0)
16314             return;
16315           break;
16316
16317         case CPP_EOF:
16318         case CPP_PRAGMA_EOL:
16319         case CPP_SEMICOLON:
16320         case CPP_OPEN_BRACE:
16321         case CPP_CLOSE_BRACE:
16322           /* The '>' was probably forgotten, don't look further.  */
16323           return;
16324
16325         default:
16326           break;
16327         }
16328
16329       /* Consume this token.  */
16330       cp_lexer_consume_token (parser->lexer);
16331     }
16332 }
16333
16334 /* If the next token is the indicated keyword, consume it.  Otherwise,
16335    issue an error message indicating that TOKEN_DESC was expected.
16336
16337    Returns the token consumed, if the token had the appropriate type.
16338    Otherwise, returns NULL.  */
16339
16340 static cp_token *
16341 cp_parser_require_keyword (cp_parser* parser,
16342                            enum rid keyword,
16343                            const char* token_desc)
16344 {
16345   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
16346
16347   if (token && token->keyword != keyword)
16348     {
16349       dyn_string_t error_msg;
16350
16351       /* Format the error message.  */
16352       error_msg = dyn_string_new (0);
16353       dyn_string_append_cstr (error_msg, "expected ");
16354       dyn_string_append_cstr (error_msg, token_desc);
16355       cp_parser_error (parser, error_msg->s);
16356       dyn_string_delete (error_msg);
16357       return NULL;
16358     }
16359
16360   return token;
16361 }
16362
16363 /* Returns TRUE iff TOKEN is a token that can begin the body of a
16364    function-definition.  */
16365
16366 static bool
16367 cp_parser_token_starts_function_definition_p (cp_token* token)
16368 {
16369   return (/* An ordinary function-body begins with an `{'.  */
16370           token->type == CPP_OPEN_BRACE
16371           /* A ctor-initializer begins with a `:'.  */
16372           || token->type == CPP_COLON
16373           /* A function-try-block begins with `try'.  */
16374           || token->keyword == RID_TRY
16375           /* The named return value extension begins with `return'.  */
16376           || token->keyword == RID_RETURN);
16377 }
16378
16379 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
16380    definition.  */
16381
16382 static bool
16383 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
16384 {
16385   cp_token *token;
16386
16387   token = cp_lexer_peek_token (parser->lexer);
16388   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
16389 }
16390
16391 /* Returns TRUE iff the next token is the "," or ">" ending a
16392    template-argument.  */
16393
16394 static bool
16395 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
16396 {
16397   cp_token *token;
16398
16399   token = cp_lexer_peek_token (parser->lexer);
16400   return (token->type == CPP_COMMA || token->type == CPP_GREATER);
16401 }
16402
16403 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
16404    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
16405
16406 static bool
16407 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
16408                                                      size_t n)
16409 {
16410   cp_token *token;
16411
16412   token = cp_lexer_peek_nth_token (parser->lexer, n);
16413   if (token->type == CPP_LESS)
16414     return true;
16415   /* Check for the sequence `<::' in the original code. It would be lexed as
16416      `[:', where `[' is a digraph, and there is no whitespace before
16417      `:'.  */
16418   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
16419     {
16420       cp_token *token2;
16421       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
16422       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
16423         return true;
16424     }
16425   return false;
16426 }
16427
16428 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
16429    or none_type otherwise.  */
16430
16431 static enum tag_types
16432 cp_parser_token_is_class_key (cp_token* token)
16433 {
16434   switch (token->keyword)
16435     {
16436     case RID_CLASS:
16437       return class_type;
16438     case RID_STRUCT:
16439       return record_type;
16440     case RID_UNION:
16441       return union_type;
16442
16443     default:
16444       return none_type;
16445     }
16446 }
16447
16448 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
16449
16450 static void
16451 cp_parser_check_class_key (enum tag_types class_key, tree type)
16452 {
16453   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
16454     pedwarn ("%qs tag used in naming %q#T",
16455             class_key == union_type ? "union"
16456              : class_key == record_type ? "struct" : "class",
16457              type);
16458 }
16459
16460 /* Issue an error message if DECL is redeclared with different
16461    access than its original declaration [class.access.spec/3].
16462    This applies to nested classes and nested class templates.
16463    [class.mem/1].  */
16464
16465 static void
16466 cp_parser_check_access_in_redeclaration (tree decl)
16467 {
16468   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
16469     return;
16470
16471   if ((TREE_PRIVATE (decl)
16472        != (current_access_specifier == access_private_node))
16473       || (TREE_PROTECTED (decl)
16474           != (current_access_specifier == access_protected_node)))
16475     error ("%qD redeclared with different access", decl);
16476 }
16477
16478 /* Look for the `template' keyword, as a syntactic disambiguator.
16479    Return TRUE iff it is present, in which case it will be
16480    consumed.  */
16481
16482 static bool
16483 cp_parser_optional_template_keyword (cp_parser *parser)
16484 {
16485   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
16486     {
16487       /* The `template' keyword can only be used within templates;
16488          outside templates the parser can always figure out what is a
16489          template and what is not.  */
16490       if (!processing_template_decl)
16491         {
16492           error ("%<template%> (as a disambiguator) is only allowed "
16493                  "within templates");
16494           /* If this part of the token stream is rescanned, the same
16495              error message would be generated.  So, we purge the token
16496              from the stream.  */
16497           cp_lexer_purge_token (parser->lexer);
16498           return false;
16499         }
16500       else
16501         {
16502           /* Consume the `template' keyword.  */
16503           cp_lexer_consume_token (parser->lexer);
16504           return true;
16505         }
16506     }
16507
16508   return false;
16509 }
16510
16511 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
16512    set PARSER->SCOPE, and perform other related actions.  */
16513
16514 static void
16515 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
16516 {
16517   tree value;
16518   tree check;
16519
16520   /* Get the stored value.  */
16521   value = cp_lexer_consume_token (parser->lexer)->value;
16522   /* Perform any access checks that were deferred.  */
16523   for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
16524     perform_or_defer_access_check (TREE_PURPOSE (check), TREE_VALUE (check));
16525   /* Set the scope from the stored value.  */
16526   parser->scope = TREE_VALUE (value);
16527   parser->qualifying_scope = TREE_TYPE (value);
16528   parser->object_scope = NULL_TREE;
16529 }
16530
16531 /* Consume tokens up through a non-nested END token.  */
16532
16533 static void
16534 cp_parser_cache_group (cp_parser *parser,
16535                        enum cpp_ttype end,
16536                        unsigned depth)
16537 {
16538   while (true)
16539     {
16540       cp_token *token;
16541
16542       /* Abort a parenthesized expression if we encounter a brace.  */
16543       if ((end == CPP_CLOSE_PAREN || depth == 0)
16544           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16545         return;
16546       /* If we've reached the end of the file, stop.  */
16547       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF)
16548           || (end != CPP_PRAGMA_EOL
16549               && cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL)))
16550         return;
16551       /* Consume the next token.  */
16552       token = cp_lexer_consume_token (parser->lexer);
16553       /* See if it starts a new group.  */
16554       if (token->type == CPP_OPEN_BRACE)
16555         {
16556           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
16557           if (depth == 0)
16558             return;
16559         }
16560       else if (token->type == CPP_OPEN_PAREN)
16561         cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
16562       else if (token->type == CPP_PRAGMA)
16563         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
16564       else if (token->type == end)
16565         return;
16566     }
16567 }
16568
16569 /* Begin parsing tentatively.  We always save tokens while parsing
16570    tentatively so that if the tentative parsing fails we can restore the
16571    tokens.  */
16572
16573 static void
16574 cp_parser_parse_tentatively (cp_parser* parser)
16575 {
16576   /* Enter a new parsing context.  */
16577   parser->context = cp_parser_context_new (parser->context);
16578   /* Begin saving tokens.  */
16579   cp_lexer_save_tokens (parser->lexer);
16580   /* In order to avoid repetitive access control error messages,
16581      access checks are queued up until we are no longer parsing
16582      tentatively.  */
16583   push_deferring_access_checks (dk_deferred);
16584 }
16585
16586 /* Commit to the currently active tentative parse.  */
16587
16588 static void
16589 cp_parser_commit_to_tentative_parse (cp_parser* parser)
16590 {
16591   cp_parser_context *context;
16592   cp_lexer *lexer;
16593
16594   /* Mark all of the levels as committed.  */
16595   lexer = parser->lexer;
16596   for (context = parser->context; context->next; context = context->next)
16597     {
16598       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
16599         break;
16600       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
16601       while (!cp_lexer_saving_tokens (lexer))
16602         lexer = lexer->next;
16603       cp_lexer_commit_tokens (lexer);
16604     }
16605 }
16606
16607 /* Abort the currently active tentative parse.  All consumed tokens
16608    will be rolled back, and no diagnostics will be issued.  */
16609
16610 static void
16611 cp_parser_abort_tentative_parse (cp_parser* parser)
16612 {
16613   cp_parser_simulate_error (parser);
16614   /* Now, pretend that we want to see if the construct was
16615      successfully parsed.  */
16616   cp_parser_parse_definitely (parser);
16617 }
16618
16619 /* Stop parsing tentatively.  If a parse error has occurred, restore the
16620    token stream.  Otherwise, commit to the tokens we have consumed.
16621    Returns true if no error occurred; false otherwise.  */
16622
16623 static bool
16624 cp_parser_parse_definitely (cp_parser* parser)
16625 {
16626   bool error_occurred;
16627   cp_parser_context *context;
16628
16629   /* Remember whether or not an error occurred, since we are about to
16630      destroy that information.  */
16631   error_occurred = cp_parser_error_occurred (parser);
16632   /* Remove the topmost context from the stack.  */
16633   context = parser->context;
16634   parser->context = context->next;
16635   /* If no parse errors occurred, commit to the tentative parse.  */
16636   if (!error_occurred)
16637     {
16638       /* Commit to the tokens read tentatively, unless that was
16639          already done.  */
16640       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
16641         cp_lexer_commit_tokens (parser->lexer);
16642
16643       pop_to_parent_deferring_access_checks ();
16644     }
16645   /* Otherwise, if errors occurred, roll back our state so that things
16646      are just as they were before we began the tentative parse.  */
16647   else
16648     {
16649       cp_lexer_rollback_tokens (parser->lexer);
16650       pop_deferring_access_checks ();
16651     }
16652   /* Add the context to the front of the free list.  */
16653   context->next = cp_parser_context_free_list;
16654   cp_parser_context_free_list = context;
16655
16656   return !error_occurred;
16657 }
16658
16659 /* Returns true if we are parsing tentatively and are not committed to
16660    this tentative parse.  */
16661
16662 static bool
16663 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
16664 {
16665   return (cp_parser_parsing_tentatively (parser)
16666           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
16667 }
16668
16669 /* Returns nonzero iff an error has occurred during the most recent
16670    tentative parse.  */
16671
16672 static bool
16673 cp_parser_error_occurred (cp_parser* parser)
16674 {
16675   return (cp_parser_parsing_tentatively (parser)
16676           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
16677 }
16678
16679 /* Returns nonzero if GNU extensions are allowed.  */
16680
16681 static bool
16682 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
16683 {
16684   return parser->allow_gnu_extensions_p;
16685 }
16686 \f
16687 /* Objective-C++ Productions */
16688
16689
16690 /* Parse an Objective-C expression, which feeds into a primary-expression
16691    above.
16692
16693    objc-expression:
16694      objc-message-expression
16695      objc-string-literal
16696      objc-encode-expression
16697      objc-protocol-expression
16698      objc-selector-expression
16699
16700   Returns a tree representation of the expression.  */
16701
16702 static tree
16703 cp_parser_objc_expression (cp_parser* parser)
16704 {
16705   /* Try to figure out what kind of declaration is present.  */
16706   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
16707
16708   switch (kwd->type)
16709     {
16710     case CPP_OPEN_SQUARE:
16711       return cp_parser_objc_message_expression (parser);
16712
16713     case CPP_OBJC_STRING:
16714       kwd = cp_lexer_consume_token (parser->lexer);
16715       return objc_build_string_object (kwd->value);
16716
16717     case CPP_KEYWORD:
16718       switch (kwd->keyword)
16719         {
16720         case RID_AT_ENCODE:
16721           return cp_parser_objc_encode_expression (parser);
16722
16723         case RID_AT_PROTOCOL:
16724           return cp_parser_objc_protocol_expression (parser);
16725
16726         case RID_AT_SELECTOR:
16727           return cp_parser_objc_selector_expression (parser);
16728
16729         default:
16730           break;
16731         }
16732     default:
16733       error ("misplaced %<@%D%> Objective-C++ construct", kwd->value);
16734       cp_parser_skip_to_end_of_block_or_statement (parser);
16735     }
16736
16737   return error_mark_node;
16738 }
16739
16740 /* Parse an Objective-C message expression.
16741
16742    objc-message-expression:
16743      [ objc-message-receiver objc-message-args ]
16744
16745    Returns a representation of an Objective-C message.  */
16746
16747 static tree
16748 cp_parser_objc_message_expression (cp_parser* parser)
16749 {
16750   tree receiver, messageargs;
16751
16752   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
16753   receiver = cp_parser_objc_message_receiver (parser);
16754   messageargs = cp_parser_objc_message_args (parser);
16755   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
16756
16757   return objc_build_message_expr (build_tree_list (receiver, messageargs));
16758 }
16759
16760 /* Parse an objc-message-receiver.
16761
16762    objc-message-receiver:
16763      expression
16764      simple-type-specifier
16765
16766   Returns a representation of the type or expression.  */
16767
16768 static tree
16769 cp_parser_objc_message_receiver (cp_parser* parser)
16770 {
16771   tree rcv;
16772
16773   /* An Objective-C message receiver may be either (1) a type
16774      or (2) an expression.  */
16775   cp_parser_parse_tentatively (parser);
16776   rcv = cp_parser_expression (parser, false);
16777
16778   if (cp_parser_parse_definitely (parser))
16779     return rcv;
16780
16781   rcv = cp_parser_simple_type_specifier (parser,
16782                                          /*decl_specs=*/NULL,
16783                                          CP_PARSER_FLAGS_NONE);
16784
16785   return objc_get_class_reference (rcv);
16786 }
16787
16788 /* Parse the arguments and selectors comprising an Objective-C message.
16789
16790    objc-message-args:
16791      objc-selector
16792      objc-selector-args
16793      objc-selector-args , objc-comma-args
16794
16795    objc-selector-args:
16796      objc-selector [opt] : assignment-expression
16797      objc-selector-args objc-selector [opt] : assignment-expression
16798
16799    objc-comma-args:
16800      assignment-expression
16801      objc-comma-args , assignment-expression
16802
16803    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
16804    selector arguments and TREE_VALUE containing a list of comma
16805    arguments.  */
16806
16807 static tree
16808 cp_parser_objc_message_args (cp_parser* parser)
16809 {
16810   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
16811   bool maybe_unary_selector_p = true;
16812   cp_token *token = cp_lexer_peek_token (parser->lexer);
16813
16814   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
16815     {
16816       tree selector = NULL_TREE, arg;
16817
16818       if (token->type != CPP_COLON)
16819         selector = cp_parser_objc_selector (parser);
16820
16821       /* Detect if we have a unary selector.  */
16822       if (maybe_unary_selector_p
16823           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
16824         return build_tree_list (selector, NULL_TREE);
16825
16826       maybe_unary_selector_p = false;
16827       cp_parser_require (parser, CPP_COLON, "`:'");
16828       arg = cp_parser_assignment_expression (parser, false);
16829
16830       sel_args
16831         = chainon (sel_args,
16832                    build_tree_list (selector, arg));
16833
16834       token = cp_lexer_peek_token (parser->lexer);
16835     }
16836
16837   /* Handle non-selector arguments, if any. */
16838   while (token->type == CPP_COMMA)
16839     {
16840       tree arg;
16841
16842       cp_lexer_consume_token (parser->lexer);
16843       arg = cp_parser_assignment_expression (parser, false);
16844
16845       addl_args
16846         = chainon (addl_args,
16847                    build_tree_list (NULL_TREE, arg));
16848
16849       token = cp_lexer_peek_token (parser->lexer);
16850     }
16851
16852   return build_tree_list (sel_args, addl_args);
16853 }
16854
16855 /* Parse an Objective-C encode expression.
16856
16857    objc-encode-expression:
16858      @encode objc-typename
16859
16860    Returns an encoded representation of the type argument.  */
16861
16862 static tree
16863 cp_parser_objc_encode_expression (cp_parser* parser)
16864 {
16865   tree type;
16866
16867   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
16868   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
16869   type = complete_type (cp_parser_type_id (parser));
16870   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
16871
16872   if (!type)
16873     {
16874       error ("%<@encode%> must specify a type as an argument");
16875       return error_mark_node;
16876     }
16877
16878   return objc_build_encode_expr (type);
16879 }
16880
16881 /* Parse an Objective-C @defs expression.  */
16882
16883 static tree
16884 cp_parser_objc_defs_expression (cp_parser *parser)
16885 {
16886   tree name;
16887
16888   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
16889   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
16890   name = cp_parser_identifier (parser);
16891   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
16892
16893   return objc_get_class_ivars (name);
16894 }
16895
16896 /* Parse an Objective-C protocol expression.
16897
16898   objc-protocol-expression:
16899     @protocol ( identifier )
16900
16901   Returns a representation of the protocol expression.  */
16902
16903 static tree
16904 cp_parser_objc_protocol_expression (cp_parser* parser)
16905 {
16906   tree proto;
16907
16908   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
16909   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
16910   proto = cp_parser_identifier (parser);
16911   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
16912
16913   return objc_build_protocol_expr (proto);
16914 }
16915
16916 /* Parse an Objective-C selector expression.
16917
16918    objc-selector-expression:
16919      @selector ( objc-method-signature )
16920
16921    objc-method-signature:
16922      objc-selector
16923      objc-selector-seq
16924
16925    objc-selector-seq:
16926      objc-selector :
16927      objc-selector-seq objc-selector :
16928
16929   Returns a representation of the method selector.  */
16930
16931 static tree
16932 cp_parser_objc_selector_expression (cp_parser* parser)
16933 {
16934   tree sel_seq = NULL_TREE;
16935   bool maybe_unary_selector_p = true;
16936   cp_token *token;
16937
16938   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
16939   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
16940   token = cp_lexer_peek_token (parser->lexer);
16941
16942   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
16943          || token->type == CPP_SCOPE)
16944     {
16945       tree selector = NULL_TREE;
16946
16947       if (token->type != CPP_COLON
16948           || token->type == CPP_SCOPE)
16949         selector = cp_parser_objc_selector (parser);
16950
16951       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
16952           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
16953         {
16954           /* Detect if we have a unary selector.  */
16955           if (maybe_unary_selector_p)
16956             {
16957               sel_seq = selector;
16958               goto finish_selector;
16959             }
16960           else
16961             {
16962               cp_parser_error (parser, "expected %<:%>");
16963             }
16964         }
16965       maybe_unary_selector_p = false;
16966       token = cp_lexer_consume_token (parser->lexer);
16967
16968       if (token->type == CPP_SCOPE)
16969         {
16970           sel_seq
16971             = chainon (sel_seq,
16972                        build_tree_list (selector, NULL_TREE));
16973           sel_seq
16974             = chainon (sel_seq,
16975                        build_tree_list (NULL_TREE, NULL_TREE));
16976         }
16977       else
16978         sel_seq
16979           = chainon (sel_seq,
16980                      build_tree_list (selector, NULL_TREE));
16981
16982       token = cp_lexer_peek_token (parser->lexer);
16983     }
16984
16985  finish_selector:
16986   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
16987
16988   return objc_build_selector_expr (sel_seq);
16989 }
16990
16991 /* Parse a list of identifiers.
16992
16993    objc-identifier-list:
16994      identifier
16995      objc-identifier-list , identifier
16996
16997    Returns a TREE_LIST of identifier nodes.  */
16998
16999 static tree
17000 cp_parser_objc_identifier_list (cp_parser* parser)
17001 {
17002   tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
17003   cp_token *sep = cp_lexer_peek_token (parser->lexer);
17004
17005   while (sep->type == CPP_COMMA)
17006     {
17007       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17008       list = chainon (list,
17009                       build_tree_list (NULL_TREE,
17010                                        cp_parser_identifier (parser)));
17011       sep = cp_lexer_peek_token (parser->lexer);
17012     }
17013
17014   return list;
17015 }
17016
17017 /* Parse an Objective-C alias declaration.
17018
17019    objc-alias-declaration:
17020      @compatibility_alias identifier identifier ;
17021
17022    This function registers the alias mapping with the Objective-C front-end.
17023    It returns nothing.  */
17024
17025 static void
17026 cp_parser_objc_alias_declaration (cp_parser* parser)
17027 {
17028   tree alias, orig;
17029
17030   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
17031   alias = cp_parser_identifier (parser);
17032   orig = cp_parser_identifier (parser);
17033   objc_declare_alias (alias, orig);
17034   cp_parser_consume_semicolon_at_end_of_statement (parser);
17035 }
17036
17037 /* Parse an Objective-C class forward-declaration.
17038
17039    objc-class-declaration:
17040      @class objc-identifier-list ;
17041
17042    The function registers the forward declarations with the Objective-C
17043    front-end.  It returns nothing.  */
17044
17045 static void
17046 cp_parser_objc_class_declaration (cp_parser* parser)
17047 {
17048   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
17049   objc_declare_class (cp_parser_objc_identifier_list (parser));
17050   cp_parser_consume_semicolon_at_end_of_statement (parser);
17051 }
17052
17053 /* Parse a list of Objective-C protocol references.
17054
17055    objc-protocol-refs-opt:
17056      objc-protocol-refs [opt]
17057
17058    objc-protocol-refs:
17059      < objc-identifier-list >
17060
17061    Returns a TREE_LIST of identifiers, if any.  */
17062
17063 static tree
17064 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
17065 {
17066   tree protorefs = NULL_TREE;
17067
17068   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
17069     {
17070       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
17071       protorefs = cp_parser_objc_identifier_list (parser);
17072       cp_parser_require (parser, CPP_GREATER, "`>'");
17073     }
17074
17075   return protorefs;
17076 }
17077
17078 /* Parse a Objective-C visibility specification.  */
17079
17080 static void
17081 cp_parser_objc_visibility_spec (cp_parser* parser)
17082 {
17083   cp_token *vis = cp_lexer_peek_token (parser->lexer);
17084
17085   switch (vis->keyword)
17086     {
17087     case RID_AT_PRIVATE:
17088       objc_set_visibility (2);
17089       break;
17090     case RID_AT_PROTECTED:
17091       objc_set_visibility (0);
17092       break;
17093     case RID_AT_PUBLIC:
17094       objc_set_visibility (1);
17095       break;
17096     default:
17097       return;
17098     }
17099
17100   /* Eat '@private'/'@protected'/'@public'.  */
17101   cp_lexer_consume_token (parser->lexer);
17102 }
17103
17104 /* Parse an Objective-C method type.  */
17105
17106 static void
17107 cp_parser_objc_method_type (cp_parser* parser)
17108 {
17109   objc_set_method_type
17110    (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
17111     ? PLUS_EXPR
17112     : MINUS_EXPR);
17113 }
17114
17115 /* Parse an Objective-C protocol qualifier.  */
17116
17117 static tree
17118 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
17119 {
17120   tree quals = NULL_TREE, node;
17121   cp_token *token = cp_lexer_peek_token (parser->lexer);
17122
17123   node = token->value;
17124
17125   while (node && TREE_CODE (node) == IDENTIFIER_NODE
17126          && (node == ridpointers [(int) RID_IN]
17127              || node == ridpointers [(int) RID_OUT]
17128              || node == ridpointers [(int) RID_INOUT]
17129              || node == ridpointers [(int) RID_BYCOPY]
17130              || node == ridpointers [(int) RID_BYREF]
17131              || node == ridpointers [(int) RID_ONEWAY]))
17132     {
17133       quals = tree_cons (NULL_TREE, node, quals);
17134       cp_lexer_consume_token (parser->lexer);
17135       token = cp_lexer_peek_token (parser->lexer);
17136       node = token->value;
17137     }
17138
17139   return quals;
17140 }
17141
17142 /* Parse an Objective-C typename.  */
17143
17144 static tree
17145 cp_parser_objc_typename (cp_parser* parser)
17146 {
17147   tree typename = NULL_TREE;
17148
17149   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
17150     {
17151       tree proto_quals, cp_type = NULL_TREE;
17152
17153       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17154       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
17155
17156       /* An ObjC type name may consist of just protocol qualifiers, in which
17157          case the type shall default to 'id'.  */
17158       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
17159         cp_type = cp_parser_type_id (parser);
17160
17161       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17162       typename = build_tree_list (proto_quals, cp_type);
17163     }
17164
17165   return typename;
17166 }
17167
17168 /* Check to see if TYPE refers to an Objective-C selector name.  */
17169
17170 static bool
17171 cp_parser_objc_selector_p (enum cpp_ttype type)
17172 {
17173   return (type == CPP_NAME || type == CPP_KEYWORD
17174           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
17175           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
17176           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
17177           || type == CPP_XOR || type == CPP_XOR_EQ);
17178 }
17179
17180 /* Parse an Objective-C selector.  */
17181
17182 static tree
17183 cp_parser_objc_selector (cp_parser* parser)
17184 {
17185   cp_token *token = cp_lexer_consume_token (parser->lexer);
17186
17187   if (!cp_parser_objc_selector_p (token->type))
17188     {
17189       error ("invalid Objective-C++ selector name");
17190       return error_mark_node;
17191     }
17192
17193   /* C++ operator names are allowed to appear in ObjC selectors.  */
17194   switch (token->type)
17195     {
17196     case CPP_AND_AND: return get_identifier ("and");
17197     case CPP_AND_EQ: return get_identifier ("and_eq");
17198     case CPP_AND: return get_identifier ("bitand");
17199     case CPP_OR: return get_identifier ("bitor");
17200     case CPP_COMPL: return get_identifier ("compl");
17201     case CPP_NOT: return get_identifier ("not");
17202     case CPP_NOT_EQ: return get_identifier ("not_eq");
17203     case CPP_OR_OR: return get_identifier ("or");
17204     case CPP_OR_EQ: return get_identifier ("or_eq");
17205     case CPP_XOR: return get_identifier ("xor");
17206     case CPP_XOR_EQ: return get_identifier ("xor_eq");
17207     default: return token->value;
17208     }
17209 }
17210
17211 /* Parse an Objective-C params list.  */
17212
17213 static tree
17214 cp_parser_objc_method_keyword_params (cp_parser* parser)
17215 {
17216   tree params = NULL_TREE;
17217   bool maybe_unary_selector_p = true;
17218   cp_token *token = cp_lexer_peek_token (parser->lexer);
17219
17220   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17221     {
17222       tree selector = NULL_TREE, typename, identifier;
17223
17224       if (token->type != CPP_COLON)
17225         selector = cp_parser_objc_selector (parser);
17226
17227       /* Detect if we have a unary selector.  */
17228       if (maybe_unary_selector_p
17229           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17230         return selector;
17231
17232       maybe_unary_selector_p = false;
17233       cp_parser_require (parser, CPP_COLON, "`:'");
17234       typename = cp_parser_objc_typename (parser);
17235       identifier = cp_parser_identifier (parser);
17236
17237       params
17238         = chainon (params,
17239                    objc_build_keyword_decl (selector,
17240                                             typename,
17241                                             identifier));
17242
17243       token = cp_lexer_peek_token (parser->lexer);
17244     }
17245
17246   return params;
17247 }
17248
17249 /* Parse the non-keyword Objective-C params.  */
17250
17251 static tree
17252 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
17253 {
17254   tree params = make_node (TREE_LIST);
17255   cp_token *token = cp_lexer_peek_token (parser->lexer);
17256   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
17257
17258   while (token->type == CPP_COMMA)
17259     {
17260       cp_parameter_declarator *parmdecl;
17261       tree parm;
17262
17263       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17264       token = cp_lexer_peek_token (parser->lexer);
17265
17266       if (token->type == CPP_ELLIPSIS)
17267         {
17268           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
17269           *ellipsisp = true;
17270           break;
17271         }
17272
17273       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17274       parm = grokdeclarator (parmdecl->declarator,
17275                              &parmdecl->decl_specifiers,
17276                              PARM, /*initialized=*/0,
17277                              /*attrlist=*/NULL);
17278
17279       chainon (params, build_tree_list (NULL_TREE, parm));
17280       token = cp_lexer_peek_token (parser->lexer);
17281     }
17282
17283   return params;
17284 }
17285
17286 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
17287
17288 static void
17289 cp_parser_objc_interstitial_code (cp_parser* parser)
17290 {
17291   cp_token *token = cp_lexer_peek_token (parser->lexer);
17292
17293   /* If the next token is `extern' and the following token is a string
17294      literal, then we have a linkage specification.  */
17295   if (token->keyword == RID_EXTERN
17296       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
17297     cp_parser_linkage_specification (parser);
17298   /* Handle #pragma, if any.  */
17299   else if (token->type == CPP_PRAGMA)
17300     cp_parser_pragma (parser, pragma_external);
17301   /* Allow stray semicolons.  */
17302   else if (token->type == CPP_SEMICOLON)
17303     cp_lexer_consume_token (parser->lexer);
17304   /* Finally, try to parse a block-declaration, or a function-definition.  */
17305   else
17306     cp_parser_block_declaration (parser, /*statement_p=*/false);
17307 }
17308
17309 /* Parse a method signature.  */
17310
17311 static tree
17312 cp_parser_objc_method_signature (cp_parser* parser)
17313 {
17314   tree rettype, kwdparms, optparms;
17315   bool ellipsis = false;
17316
17317   cp_parser_objc_method_type (parser);
17318   rettype = cp_parser_objc_typename (parser);
17319   kwdparms = cp_parser_objc_method_keyword_params (parser);
17320   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
17321
17322   return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
17323 }
17324
17325 /* Pars an Objective-C method prototype list.  */
17326
17327 static void
17328 cp_parser_objc_method_prototype_list (cp_parser* parser)
17329 {
17330   cp_token *token = cp_lexer_peek_token (parser->lexer);
17331
17332   while (token->keyword != RID_AT_END)
17333     {
17334       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17335         {
17336           objc_add_method_declaration
17337            (cp_parser_objc_method_signature (parser));
17338           cp_parser_consume_semicolon_at_end_of_statement (parser);
17339         }
17340       else
17341         /* Allow for interspersed non-ObjC++ code.  */
17342         cp_parser_objc_interstitial_code (parser);
17343
17344       token = cp_lexer_peek_token (parser->lexer);
17345     }
17346
17347   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17348   objc_finish_interface ();
17349 }
17350
17351 /* Parse an Objective-C method definition list.  */
17352
17353 static void
17354 cp_parser_objc_method_definition_list (cp_parser* parser)
17355 {
17356   cp_token *token = cp_lexer_peek_token (parser->lexer);
17357
17358   while (token->keyword != RID_AT_END)
17359     {
17360       tree meth;
17361
17362       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17363         {
17364           push_deferring_access_checks (dk_deferred);
17365           objc_start_method_definition
17366            (cp_parser_objc_method_signature (parser));
17367
17368           /* For historical reasons, we accept an optional semicolon.  */
17369           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17370             cp_lexer_consume_token (parser->lexer);
17371
17372           perform_deferred_access_checks ();
17373           stop_deferring_access_checks ();
17374           meth = cp_parser_function_definition_after_declarator (parser,
17375                                                                  false);
17376           pop_deferring_access_checks ();
17377           objc_finish_method_definition (meth);
17378         }
17379       else
17380         /* Allow for interspersed non-ObjC++ code.  */
17381         cp_parser_objc_interstitial_code (parser);
17382
17383       token = cp_lexer_peek_token (parser->lexer);
17384     }
17385
17386   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17387   objc_finish_implementation ();
17388 }
17389
17390 /* Parse Objective-C ivars.  */
17391
17392 static void
17393 cp_parser_objc_class_ivars (cp_parser* parser)
17394 {
17395   cp_token *token = cp_lexer_peek_token (parser->lexer);
17396
17397   if (token->type != CPP_OPEN_BRACE)
17398     return;     /* No ivars specified.  */
17399
17400   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
17401   token = cp_lexer_peek_token (parser->lexer);
17402
17403   while (token->type != CPP_CLOSE_BRACE)
17404     {
17405       cp_decl_specifier_seq declspecs;
17406       int decl_class_or_enum_p;
17407       tree prefix_attributes;
17408
17409       cp_parser_objc_visibility_spec (parser);
17410
17411       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
17412         break;
17413
17414       cp_parser_decl_specifier_seq (parser,
17415                                     CP_PARSER_FLAGS_OPTIONAL,
17416                                     &declspecs,
17417                                     &decl_class_or_enum_p);
17418       prefix_attributes = declspecs.attributes;
17419       declspecs.attributes = NULL_TREE;
17420
17421       /* Keep going until we hit the `;' at the end of the
17422          declaration.  */
17423       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
17424         {
17425           tree width = NULL_TREE, attributes, first_attribute, decl;
17426           cp_declarator *declarator = NULL;
17427           int ctor_dtor_or_conv_p;
17428
17429           /* Check for a (possibly unnamed) bitfield declaration.  */
17430           token = cp_lexer_peek_token (parser->lexer);
17431           if (token->type == CPP_COLON)
17432             goto eat_colon;
17433
17434           if (token->type == CPP_NAME
17435               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
17436                   == CPP_COLON))
17437             {
17438               /* Get the name of the bitfield.  */
17439               declarator = make_id_declarator (NULL_TREE,
17440                                                cp_parser_identifier (parser),
17441                                                sfk_none);
17442
17443              eat_colon:
17444               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17445               /* Get the width of the bitfield.  */
17446               width
17447                 = cp_parser_constant_expression (parser,
17448                                                  /*allow_non_constant=*/false,
17449                                                  NULL);
17450             }
17451           else
17452             {
17453               /* Parse the declarator.  */
17454               declarator
17455                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
17456                                         &ctor_dtor_or_conv_p,
17457                                         /*parenthesized_p=*/NULL,
17458                                         /*member_p=*/false);
17459             }
17460
17461           /* Look for attributes that apply to the ivar.  */
17462           attributes = cp_parser_attributes_opt (parser);
17463           /* Remember which attributes are prefix attributes and
17464              which are not.  */
17465           first_attribute = attributes;
17466           /* Combine the attributes.  */
17467           attributes = chainon (prefix_attributes, attributes);
17468
17469           if (width)
17470             {
17471               /* Create the bitfield declaration.  */
17472               decl = grokbitfield (declarator, &declspecs, width);
17473               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
17474             }
17475           else
17476             decl = grokfield (declarator, &declspecs,
17477                               NULL_TREE, /*init_const_expr_p=*/false,
17478                               NULL_TREE, attributes);
17479
17480           /* Add the instance variable.  */
17481           objc_add_instance_variable (decl);
17482
17483           /* Reset PREFIX_ATTRIBUTES.  */
17484           while (attributes && TREE_CHAIN (attributes) != first_attribute)
17485             attributes = TREE_CHAIN (attributes);
17486           if (attributes)
17487             TREE_CHAIN (attributes) = NULL_TREE;
17488
17489           token = cp_lexer_peek_token (parser->lexer);
17490
17491           if (token->type == CPP_COMMA)
17492             {
17493               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17494               continue;
17495             }
17496           break;
17497         }
17498
17499       cp_parser_consume_semicolon_at_end_of_statement (parser);
17500       token = cp_lexer_peek_token (parser->lexer);
17501     }
17502
17503   cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
17504   /* For historical reasons, we accept an optional semicolon.  */
17505   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17506     cp_lexer_consume_token (parser->lexer);
17507 }
17508
17509 /* Parse an Objective-C protocol declaration.  */
17510
17511 static void
17512 cp_parser_objc_protocol_declaration (cp_parser* parser)
17513 {
17514   tree proto, protorefs;
17515   cp_token *tok;
17516
17517   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17518   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
17519     {
17520       error ("identifier expected after %<@protocol%>");
17521       goto finish;
17522     }
17523
17524   /* See if we have a forward declaration or a definition.  */
17525   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
17526
17527   /* Try a forward declaration first.  */
17528   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
17529     {
17530       objc_declare_protocols (cp_parser_objc_identifier_list (parser));
17531      finish:
17532       cp_parser_consume_semicolon_at_end_of_statement (parser);
17533     }
17534
17535   /* Ok, we got a full-fledged definition (or at least should).  */
17536   else
17537     {
17538       proto = cp_parser_identifier (parser);
17539       protorefs = cp_parser_objc_protocol_refs_opt (parser);
17540       objc_start_protocol (proto, protorefs);
17541       cp_parser_objc_method_prototype_list (parser);
17542     }
17543 }
17544
17545 /* Parse an Objective-C superclass or category.  */
17546
17547 static void
17548 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
17549                                                           tree *categ)
17550 {
17551   cp_token *next = cp_lexer_peek_token (parser->lexer);
17552
17553   *super = *categ = NULL_TREE;
17554   if (next->type == CPP_COLON)
17555     {
17556       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17557       *super = cp_parser_identifier (parser);
17558     }
17559   else if (next->type == CPP_OPEN_PAREN)
17560     {
17561       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17562       *categ = cp_parser_identifier (parser);
17563       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17564     }
17565 }
17566
17567 /* Parse an Objective-C class interface.  */
17568
17569 static void
17570 cp_parser_objc_class_interface (cp_parser* parser)
17571 {
17572   tree name, super, categ, protos;
17573
17574   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
17575   name = cp_parser_identifier (parser);
17576   cp_parser_objc_superclass_or_category (parser, &super, &categ);
17577   protos = cp_parser_objc_protocol_refs_opt (parser);
17578
17579   /* We have either a class or a category on our hands.  */
17580   if (categ)
17581     objc_start_category_interface (name, categ, protos);
17582   else
17583     {
17584       objc_start_class_interface (name, super, protos);
17585       /* Handle instance variable declarations, if any.  */
17586       cp_parser_objc_class_ivars (parser);
17587       objc_continue_interface ();
17588     }
17589
17590   cp_parser_objc_method_prototype_list (parser);
17591 }
17592
17593 /* Parse an Objective-C class implementation.  */
17594
17595 static void
17596 cp_parser_objc_class_implementation (cp_parser* parser)
17597 {
17598   tree name, super, categ;
17599
17600   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
17601   name = cp_parser_identifier (parser);
17602   cp_parser_objc_superclass_or_category (parser, &super, &categ);
17603
17604   /* We have either a class or a category on our hands.  */
17605   if (categ)
17606     objc_start_category_implementation (name, categ);
17607   else
17608     {
17609       objc_start_class_implementation (name, super);
17610       /* Handle instance variable declarations, if any.  */
17611       cp_parser_objc_class_ivars (parser);
17612       objc_continue_implementation ();
17613     }
17614
17615   cp_parser_objc_method_definition_list (parser);
17616 }
17617
17618 /* Consume the @end token and finish off the implementation.  */
17619
17620 static void
17621 cp_parser_objc_end_implementation (cp_parser* parser)
17622 {
17623   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17624   objc_finish_implementation ();
17625 }
17626
17627 /* Parse an Objective-C declaration.  */
17628
17629 static void
17630 cp_parser_objc_declaration (cp_parser* parser)
17631 {
17632   /* Try to figure out what kind of declaration is present.  */
17633   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17634
17635   switch (kwd->keyword)
17636     {
17637     case RID_AT_ALIAS:
17638       cp_parser_objc_alias_declaration (parser);
17639       break;
17640     case RID_AT_CLASS:
17641       cp_parser_objc_class_declaration (parser);
17642       break;
17643     case RID_AT_PROTOCOL:
17644       cp_parser_objc_protocol_declaration (parser);
17645       break;
17646     case RID_AT_INTERFACE:
17647       cp_parser_objc_class_interface (parser);
17648       break;
17649     case RID_AT_IMPLEMENTATION:
17650       cp_parser_objc_class_implementation (parser);
17651       break;
17652     case RID_AT_END:
17653       cp_parser_objc_end_implementation (parser);
17654       break;
17655     default:
17656       error ("misplaced %<@%D%> Objective-C++ construct", kwd->value);
17657       cp_parser_skip_to_end_of_block_or_statement (parser);
17658     }
17659 }
17660
17661 /* Parse an Objective-C try-catch-finally statement.
17662
17663    objc-try-catch-finally-stmt:
17664      @try compound-statement objc-catch-clause-seq [opt]
17665        objc-finally-clause [opt]
17666
17667    objc-catch-clause-seq:
17668      objc-catch-clause objc-catch-clause-seq [opt]
17669
17670    objc-catch-clause:
17671      @catch ( exception-declaration ) compound-statement
17672
17673    objc-finally-clause
17674      @finally compound-statement
17675
17676    Returns NULL_TREE.  */
17677
17678 static tree
17679 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
17680   location_t location;
17681   tree stmt;
17682
17683   cp_parser_require_keyword (parser, RID_AT_TRY, "`@try'");
17684   location = cp_lexer_peek_token (parser->lexer)->location;
17685   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
17686      node, lest it get absorbed into the surrounding block.  */
17687   stmt = push_stmt_list ();
17688   cp_parser_compound_statement (parser, NULL, false);
17689   objc_begin_try_stmt (location, pop_stmt_list (stmt));
17690
17691   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
17692     {
17693       cp_parameter_declarator *parmdecl;
17694       tree parm;
17695
17696       cp_lexer_consume_token (parser->lexer);
17697       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17698       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17699       parm = grokdeclarator (parmdecl->declarator,
17700                              &parmdecl->decl_specifiers,
17701                              PARM, /*initialized=*/0,
17702                              /*attrlist=*/NULL);
17703       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17704       objc_begin_catch_clause (parm);
17705       cp_parser_compound_statement (parser, NULL, false);
17706       objc_finish_catch_clause ();
17707     }
17708
17709   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
17710     {
17711       cp_lexer_consume_token (parser->lexer);
17712       location = cp_lexer_peek_token (parser->lexer)->location;
17713       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
17714          node, lest it get absorbed into the surrounding block.  */
17715       stmt = push_stmt_list ();
17716       cp_parser_compound_statement (parser, NULL, false);
17717       objc_build_finally_clause (location, pop_stmt_list (stmt));
17718     }
17719
17720   return objc_finish_try_stmt ();
17721 }
17722
17723 /* Parse an Objective-C synchronized statement.
17724
17725    objc-synchronized-stmt:
17726      @synchronized ( expression ) compound-statement
17727
17728    Returns NULL_TREE.  */
17729
17730 static tree
17731 cp_parser_objc_synchronized_statement (cp_parser *parser) {
17732   location_t location;
17733   tree lock, stmt;
17734
17735   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "`@synchronized'");
17736
17737   location = cp_lexer_peek_token (parser->lexer)->location;
17738   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17739   lock = cp_parser_expression (parser, false);
17740   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17741
17742   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
17743      node, lest it get absorbed into the surrounding block.  */
17744   stmt = push_stmt_list ();
17745   cp_parser_compound_statement (parser, NULL, false);
17746
17747   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
17748 }
17749
17750 /* Parse an Objective-C throw statement.
17751
17752    objc-throw-stmt:
17753      @throw assignment-expression [opt] ;
17754
17755    Returns a constructed '@throw' statement.  */
17756
17757 static tree
17758 cp_parser_objc_throw_statement (cp_parser *parser) {
17759   tree expr = NULL_TREE;
17760
17761   cp_parser_require_keyword (parser, RID_AT_THROW, "`@throw'");
17762
17763   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
17764     expr = cp_parser_assignment_expression (parser, false);
17765
17766   cp_parser_consume_semicolon_at_end_of_statement (parser);
17767
17768   return objc_build_throw_stmt (expr);
17769 }
17770
17771 /* Parse an Objective-C statement.  */
17772
17773 static tree
17774 cp_parser_objc_statement (cp_parser * parser) {
17775   /* Try to figure out what kind of declaration is present.  */
17776   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17777
17778   switch (kwd->keyword)
17779     {
17780     case RID_AT_TRY:
17781       return cp_parser_objc_try_catch_finally_statement (parser);
17782     case RID_AT_SYNCHRONIZED:
17783       return cp_parser_objc_synchronized_statement (parser);
17784     case RID_AT_THROW:
17785       return cp_parser_objc_throw_statement (parser);
17786     default:
17787       error ("misplaced %<@%D%> Objective-C++ construct", kwd->value);
17788       cp_parser_skip_to_end_of_block_or_statement (parser);
17789     }
17790
17791   return error_mark_node;
17792 }
17793 \f
17794 /* OpenMP 2.5 parsing routines.  */
17795
17796 /* All OpenMP clauses.  OpenMP 2.5.  */
17797 typedef enum pragma_omp_clause {
17798   PRAGMA_OMP_CLAUSE_NONE = 0,
17799
17800   PRAGMA_OMP_CLAUSE_COPYIN,
17801   PRAGMA_OMP_CLAUSE_COPYPRIVATE,
17802   PRAGMA_OMP_CLAUSE_DEFAULT,
17803   PRAGMA_OMP_CLAUSE_FIRSTPRIVATE,
17804   PRAGMA_OMP_CLAUSE_IF,
17805   PRAGMA_OMP_CLAUSE_LASTPRIVATE,
17806   PRAGMA_OMP_CLAUSE_NOWAIT,
17807   PRAGMA_OMP_CLAUSE_NUM_THREADS,
17808   PRAGMA_OMP_CLAUSE_ORDERED,
17809   PRAGMA_OMP_CLAUSE_PRIVATE,
17810   PRAGMA_OMP_CLAUSE_REDUCTION,
17811   PRAGMA_OMP_CLAUSE_SCHEDULE,
17812   PRAGMA_OMP_CLAUSE_SHARED
17813 } pragma_omp_clause;
17814
17815 /* Returns name of the next clause.
17816    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
17817    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
17818    returned and the token is consumed.  */
17819
17820 static pragma_omp_clause
17821 cp_parser_omp_clause_name (cp_parser *parser)
17822 {
17823   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
17824
17825   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
17826     result = PRAGMA_OMP_CLAUSE_IF;
17827   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
17828     result = PRAGMA_OMP_CLAUSE_DEFAULT;
17829   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
17830     result = PRAGMA_OMP_CLAUSE_PRIVATE;
17831   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
17832     {
17833       tree id = cp_lexer_peek_token (parser->lexer)->value;
17834       const char *p = IDENTIFIER_POINTER (id);
17835
17836       switch (p[0])
17837         {
17838         case 'c':
17839           if (!strcmp ("copyin", p))
17840             result = PRAGMA_OMP_CLAUSE_COPYIN;
17841           else if (!strcmp ("copyprivate", p))
17842             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
17843           break;
17844         case 'f':
17845           if (!strcmp ("firstprivate", p))
17846             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
17847           break;
17848         case 'l':
17849           if (!strcmp ("lastprivate", p))
17850             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
17851           break;
17852         case 'n':
17853           if (!strcmp ("nowait", p))
17854             result = PRAGMA_OMP_CLAUSE_NOWAIT;
17855           else if (!strcmp ("num_threads", p))
17856             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
17857           break;
17858         case 'o':
17859           if (!strcmp ("ordered", p))
17860             result = PRAGMA_OMP_CLAUSE_ORDERED;
17861           break;
17862         case 'r':
17863           if (!strcmp ("reduction", p))
17864             result = PRAGMA_OMP_CLAUSE_REDUCTION;
17865           break;
17866         case 's':
17867           if (!strcmp ("schedule", p))
17868             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
17869           else if (!strcmp ("shared", p))
17870             result = PRAGMA_OMP_CLAUSE_SHARED;
17871           break;
17872         }
17873     }
17874
17875   if (result != PRAGMA_OMP_CLAUSE_NONE)
17876     cp_lexer_consume_token (parser->lexer);
17877
17878   return result;
17879 }
17880
17881 /* Validate that a clause of the given type does not already exist.  */
17882
17883 static void
17884 check_no_duplicate_clause (tree clauses, enum tree_code code, const char *name)
17885 {
17886   tree c;
17887
17888   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
17889     if (OMP_CLAUSE_CODE (c) == code)
17890       {
17891         error ("too many %qs clauses", name);
17892         break;
17893       }
17894 }
17895
17896 /* OpenMP 2.5:
17897    variable-list:
17898      identifier
17899      variable-list , identifier
17900
17901    In addition, we match a closing parenthesis.  An opening parenthesis
17902    will have been consumed by the caller.
17903
17904    If KIND is nonzero, create the appropriate node and install the decl
17905    in OMP_CLAUSE_DECL and add the node to the head of the list.
17906
17907    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
17908    return the list created.  */
17909
17910 static tree
17911 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
17912                                 tree list)
17913 {
17914   while (1)
17915     {
17916       tree name, decl;
17917
17918       name = cp_parser_id_expression (parser, /*template_p=*/false,
17919                                       /*check_dependency_p=*/true,
17920                                       /*template_p=*/NULL,
17921                                       /*declarator_p=*/false,
17922                                       /*optional_p=*/false);
17923       if (name == error_mark_node)
17924         goto skip_comma;
17925
17926       decl = cp_parser_lookup_name_simple (parser, name);
17927       if (decl == error_mark_node)
17928         cp_parser_name_lookup_error (parser, name, decl, NULL);
17929       else if (kind != 0)
17930         {
17931           tree u = build_omp_clause (kind);
17932           OMP_CLAUSE_DECL (u) = decl;
17933           OMP_CLAUSE_CHAIN (u) = list;
17934           list = u;
17935         }
17936       else
17937         list = tree_cons (decl, NULL_TREE, list);
17938
17939     get_comma:
17940       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
17941         break;
17942       cp_lexer_consume_token (parser->lexer);
17943     }
17944
17945   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
17946     {
17947       int ending;
17948
17949       /* Try to resync to an unnested comma.  Copied from
17950          cp_parser_parenthesized_expression_list.  */
17951     skip_comma:
17952       ending = cp_parser_skip_to_closing_parenthesis (parser,
17953                                                       /*recovering=*/true,
17954                                                       /*or_comma=*/true,
17955                                                       /*consume_paren=*/true);
17956       if (ending < 0)
17957         goto get_comma;
17958     }
17959
17960   return list;
17961 }
17962
17963 /* Similarly, but expect leading and trailing parenthesis.  This is a very
17964    common case for omp clauses.  */
17965
17966 static tree
17967 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
17968 {
17969   if (cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
17970     return cp_parser_omp_var_list_no_open (parser, kind, list);
17971   return list;
17972 }
17973
17974 /* OpenMP 2.5:
17975    default ( shared | none ) */
17976
17977 static tree
17978 cp_parser_omp_clause_default (cp_parser *parser, tree list)
17979 {
17980   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
17981   tree c;
17982
17983   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
17984     return list;
17985   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
17986     {
17987       tree id = cp_lexer_peek_token (parser->lexer)->value;
17988       const char *p = IDENTIFIER_POINTER (id);
17989
17990       switch (p[0])
17991         {
17992         case 'n':
17993           if (strcmp ("none", p) != 0)
17994             goto invalid_kind;
17995           kind = OMP_CLAUSE_DEFAULT_NONE;
17996           break;
17997
17998         case 's':
17999           if (strcmp ("shared", p) != 0)
18000             goto invalid_kind;
18001           kind = OMP_CLAUSE_DEFAULT_SHARED;
18002           break;
18003
18004         default:
18005           goto invalid_kind;
18006         }
18007
18008       cp_lexer_consume_token (parser->lexer);
18009     }
18010   else
18011     {
18012     invalid_kind:
18013       cp_parser_error (parser, "expected %<none%> or %<shared%>");
18014     }
18015
18016   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18017     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18018                                            /*or_comma=*/false,
18019                                            /*consume_paren=*/true);
18020
18021   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
18022     return list;
18023
18024   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default");
18025   c = build_omp_clause (OMP_CLAUSE_DEFAULT);
18026   OMP_CLAUSE_CHAIN (c) = list;
18027   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
18028
18029   return c;
18030 }
18031
18032 /* OpenMP 2.5:
18033    if ( expression ) */
18034
18035 static tree
18036 cp_parser_omp_clause_if (cp_parser *parser, tree list)
18037 {
18038   tree t, c;
18039
18040   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18041     return list;
18042
18043   t = cp_parser_condition (parser);
18044
18045   if (t == error_mark_node
18046       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18047     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18048                                            /*or_comma=*/false,
18049                                            /*consume_paren=*/true);
18050
18051   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if");
18052
18053   c = build_omp_clause (OMP_CLAUSE_IF);
18054   OMP_CLAUSE_IF_EXPR (c) = t;
18055   OMP_CLAUSE_CHAIN (c) = list;
18056
18057   return c;
18058 }
18059
18060 /* OpenMP 2.5:
18061    nowait */
18062
18063 static tree
18064 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18065 {
18066   tree c;
18067
18068   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait");
18069
18070   c = build_omp_clause (OMP_CLAUSE_NOWAIT);
18071   OMP_CLAUSE_CHAIN (c) = list;
18072   return c;
18073 }
18074
18075 /* OpenMP 2.5:
18076    num_threads ( expression ) */
18077
18078 static tree
18079 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list)
18080 {
18081   tree t, c;
18082
18083   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18084     return list;
18085
18086   t = cp_parser_expression (parser, false);
18087
18088   if (t == error_mark_node
18089       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18090     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18091                                            /*or_comma=*/false,
18092                                            /*consume_paren=*/true);
18093
18094   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS, "num_threads");
18095
18096   c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
18097   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
18098   OMP_CLAUSE_CHAIN (c) = list;
18099
18100   return c;
18101 }
18102
18103 /* OpenMP 2.5:
18104    ordered */
18105
18106 static tree
18107 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18108 {
18109   tree c;
18110
18111   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED, "ordered");
18112
18113   c = build_omp_clause (OMP_CLAUSE_ORDERED);
18114   OMP_CLAUSE_CHAIN (c) = list;
18115   return c;
18116 }
18117
18118 /* OpenMP 2.5:
18119    reduction ( reduction-operator : variable-list )
18120
18121    reduction-operator:
18122      One of: + * - & ^ | && || */
18123
18124 static tree
18125 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
18126 {
18127   enum tree_code code;
18128   tree nlist, c;
18129
18130   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18131     return list;
18132
18133   switch (cp_lexer_peek_token (parser->lexer)->type)
18134     {
18135     case CPP_PLUS:
18136       code = PLUS_EXPR;
18137       break;
18138     case CPP_MULT:
18139       code = MULT_EXPR;
18140       break;
18141     case CPP_MINUS:
18142       code = MINUS_EXPR;
18143       break;
18144     case CPP_AND:
18145       code = BIT_AND_EXPR;
18146       break;
18147     case CPP_XOR:
18148       code = BIT_XOR_EXPR;
18149       break;
18150     case CPP_OR:
18151       code = BIT_IOR_EXPR;
18152       break;
18153     case CPP_AND_AND:
18154       code = TRUTH_ANDIF_EXPR;
18155       break;
18156     case CPP_OR_OR:
18157       code = TRUTH_ORIF_EXPR;
18158       break;
18159     default:
18160       cp_parser_error (parser, "`+', `*', `-', `&', `^', `|', `&&', or `||'");
18161     resync_fail:
18162       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18163                                              /*or_comma=*/false,
18164                                              /*consume_paren=*/true);
18165       return list;
18166     }
18167   cp_lexer_consume_token (parser->lexer);
18168
18169   if (!cp_parser_require (parser, CPP_COLON, "`:'"))
18170     goto resync_fail;
18171
18172   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
18173   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
18174     OMP_CLAUSE_REDUCTION_CODE (c) = code;
18175
18176   return nlist;
18177 }
18178
18179 /* OpenMP 2.5:
18180    schedule ( schedule-kind )
18181    schedule ( schedule-kind , expression )
18182
18183    schedule-kind:
18184      static | dynamic | guided | runtime  */
18185
18186 static tree
18187 cp_parser_omp_clause_schedule (cp_parser *parser, tree list)
18188 {
18189   tree c, t;
18190
18191   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
18192     return list;
18193
18194   c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
18195
18196   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18197     {
18198       tree id = cp_lexer_peek_token (parser->lexer)->value;
18199       const char *p = IDENTIFIER_POINTER (id);
18200
18201       switch (p[0])
18202         {
18203         case 'd':
18204           if (strcmp ("dynamic", p) != 0)
18205             goto invalid_kind;
18206           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
18207           break;
18208
18209         case 'g':
18210           if (strcmp ("guided", p) != 0)
18211             goto invalid_kind;
18212           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
18213           break;
18214
18215         case 'r':
18216           if (strcmp ("runtime", p) != 0)
18217             goto invalid_kind;
18218           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
18219           break;
18220
18221         default:
18222           goto invalid_kind;
18223         }
18224     }
18225   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
18226     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
18227   else
18228     goto invalid_kind;
18229   cp_lexer_consume_token (parser->lexer);
18230
18231   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
18232     {
18233       cp_lexer_consume_token (parser->lexer);
18234
18235       t = cp_parser_assignment_expression (parser, false);
18236
18237       if (t == error_mark_node)
18238         goto resync_fail;
18239       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
18240         error ("schedule %<runtime%> does not take "
18241                "a %<chunk_size%> parameter");
18242       else
18243         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
18244
18245       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18246         goto resync_fail;
18247     }
18248   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`,' or `)'"))
18249     goto resync_fail;
18250
18251   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule");
18252   OMP_CLAUSE_CHAIN (c) = list;
18253   return c;
18254
18255  invalid_kind:
18256   cp_parser_error (parser, "invalid schedule kind");
18257  resync_fail:
18258   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18259                                          /*or_comma=*/false,
18260                                          /*consume_paren=*/true);
18261   return list;
18262 }
18263
18264 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
18265    is a bitmask in MASK.  Return the list of clauses found; the result
18266    of clause default goes in *pdefault.  */
18267
18268 static tree
18269 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
18270                            const char *where, cp_token *pragma_tok)
18271 {
18272   tree clauses = NULL;
18273
18274   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
18275     {
18276       pragma_omp_clause c_kind = cp_parser_omp_clause_name (parser);
18277       const char *c_name;
18278       tree prev = clauses;
18279
18280       switch (c_kind)
18281         {
18282         case PRAGMA_OMP_CLAUSE_COPYIN:
18283           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
18284           c_name = "copyin";
18285           break;
18286         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
18287           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
18288                                             clauses);
18289           c_name = "copyprivate";
18290           break;
18291         case PRAGMA_OMP_CLAUSE_DEFAULT:
18292           clauses = cp_parser_omp_clause_default (parser, clauses);
18293           c_name = "default";
18294           break;
18295         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
18296           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
18297                                             clauses);
18298           c_name = "firstprivate";
18299           break;
18300         case PRAGMA_OMP_CLAUSE_IF:
18301           clauses = cp_parser_omp_clause_if (parser, clauses);
18302           c_name = "if";
18303           break;
18304         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
18305           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
18306                                             clauses);
18307           c_name = "lastprivate";
18308           break;
18309         case PRAGMA_OMP_CLAUSE_NOWAIT:
18310           clauses = cp_parser_omp_clause_nowait (parser, clauses);
18311           c_name = "nowait";
18312           break;
18313         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
18314           clauses = cp_parser_omp_clause_num_threads (parser, clauses);
18315           c_name = "num_threads";
18316           break;
18317         case PRAGMA_OMP_CLAUSE_ORDERED:
18318           clauses = cp_parser_omp_clause_ordered (parser, clauses);
18319           c_name = "ordered";
18320           break;
18321         case PRAGMA_OMP_CLAUSE_PRIVATE:
18322           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
18323                                             clauses);
18324           c_name = "private";
18325           break;
18326         case PRAGMA_OMP_CLAUSE_REDUCTION:
18327           clauses = cp_parser_omp_clause_reduction (parser, clauses);
18328           c_name = "reduction";
18329           break;
18330         case PRAGMA_OMP_CLAUSE_SCHEDULE:
18331           clauses = cp_parser_omp_clause_schedule (parser, clauses);
18332           c_name = "schedule";
18333           break;
18334         case PRAGMA_OMP_CLAUSE_SHARED:
18335           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
18336                                             clauses);
18337           c_name = "shared";
18338           break;
18339         default:
18340           cp_parser_error (parser, "expected %<#pragma omp%> clause");
18341           goto saw_error;
18342         }
18343
18344       if (((mask >> c_kind) & 1) == 0)
18345         {
18346           /* Remove the invalid clause(s) from the list to avoid
18347              confusing the rest of the compiler.  */
18348           clauses = prev;
18349           error ("%qs is not valid for %qs", c_name, where);
18350         }
18351     }
18352  saw_error:
18353   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
18354   return finish_omp_clauses (clauses);
18355 }
18356
18357 /* OpenMP 2.5:
18358    structured-block:
18359      statement
18360
18361    In practice, we're also interested in adding the statement to an
18362    outer node.  So it is convenient if we work around the fact that
18363    cp_parser_statement calls add_stmt.  */
18364
18365 static unsigned
18366 cp_parser_begin_omp_structured_block (cp_parser *parser)
18367 {
18368   unsigned save = parser->in_statement;
18369
18370   /* Only move the values to IN_OMP_BLOCK if they weren't false.
18371      This preserves the "not within loop or switch" style error messages
18372      for nonsense cases like
18373         void foo() {
18374         #pragma omp single
18375           break;
18376         }
18377   */
18378   if (parser->in_statement)
18379     parser->in_statement = IN_OMP_BLOCK;
18380
18381   return save;
18382 }
18383
18384 static void
18385 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
18386 {
18387   parser->in_statement = save;
18388 }
18389
18390 static tree
18391 cp_parser_omp_structured_block (cp_parser *parser)
18392 {
18393   tree stmt = begin_omp_structured_block ();
18394   unsigned int save = cp_parser_begin_omp_structured_block (parser);
18395
18396   cp_parser_statement (parser, NULL_TREE, false);
18397
18398   cp_parser_end_omp_structured_block (parser, save);
18399   return finish_omp_structured_block (stmt);
18400 }
18401
18402 /* OpenMP 2.5:
18403    # pragma omp atomic new-line
18404      expression-stmt
18405
18406    expression-stmt:
18407      x binop= expr | x++ | ++x | x-- | --x
18408    binop:
18409      +, *, -, /, &, ^, |, <<, >>
18410
18411   where x is an lvalue expression with scalar type.  */
18412
18413 static void
18414 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
18415 {
18416   tree lhs, rhs;
18417   enum tree_code code;
18418
18419   cp_parser_require_pragma_eol (parser, pragma_tok);
18420
18421   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
18422                                     /*cast_p=*/false);
18423   switch (TREE_CODE (lhs))
18424     {
18425     case ERROR_MARK:
18426       goto saw_error;
18427
18428     case PREINCREMENT_EXPR:
18429     case POSTINCREMENT_EXPR:
18430       lhs = TREE_OPERAND (lhs, 0);
18431       code = PLUS_EXPR;
18432       rhs = integer_one_node;
18433       break;
18434
18435     case PREDECREMENT_EXPR:
18436     case POSTDECREMENT_EXPR:
18437       lhs = TREE_OPERAND (lhs, 0);
18438       code = MINUS_EXPR;
18439       rhs = integer_one_node;
18440       break;
18441
18442     default:
18443       switch (cp_lexer_peek_token (parser->lexer)->type)
18444         {
18445         case CPP_MULT_EQ:
18446           code = MULT_EXPR;
18447           break;
18448         case CPP_DIV_EQ:
18449           code = TRUNC_DIV_EXPR;
18450           break;
18451         case CPP_PLUS_EQ:
18452           code = PLUS_EXPR;
18453           break;
18454         case CPP_MINUS_EQ:
18455           code = MINUS_EXPR;
18456           break;
18457         case CPP_LSHIFT_EQ:
18458           code = LSHIFT_EXPR;
18459           break;
18460         case CPP_RSHIFT_EQ:
18461           code = RSHIFT_EXPR;
18462           break;
18463         case CPP_AND_EQ:
18464           code = BIT_AND_EXPR;
18465           break;
18466         case CPP_OR_EQ:
18467           code = BIT_IOR_EXPR;
18468           break;
18469         case CPP_XOR_EQ:
18470           code = BIT_XOR_EXPR;
18471           break;
18472         default:
18473           cp_parser_error (parser,
18474                            "invalid operator for %<#pragma omp atomic%>");
18475           goto saw_error;
18476         }
18477       cp_lexer_consume_token (parser->lexer);
18478
18479       rhs = cp_parser_expression (parser, false);
18480       if (rhs == error_mark_node)
18481         goto saw_error;
18482       break;
18483     }
18484   finish_omp_atomic (code, lhs, rhs);
18485   cp_parser_consume_semicolon_at_end_of_statement (parser);
18486   return;
18487
18488  saw_error:
18489   cp_parser_skip_to_end_of_block_or_statement (parser);
18490 }
18491
18492
18493 /* OpenMP 2.5:
18494    # pragma omp barrier new-line  */
18495
18496 static void
18497 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
18498 {
18499   cp_parser_require_pragma_eol (parser, pragma_tok);
18500   finish_omp_barrier ();
18501 }
18502
18503 /* OpenMP 2.5:
18504    # pragma omp critical [(name)] new-line
18505      structured-block  */
18506
18507 static tree
18508 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
18509 {
18510   tree stmt, name = NULL;
18511
18512   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18513     {
18514       cp_lexer_consume_token (parser->lexer);
18515
18516       name = cp_parser_identifier (parser);
18517
18518       if (name == error_mark_node
18519           || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18520         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18521                                                /*or_comma=*/false,
18522                                                /*consume_paren=*/true);
18523       if (name == error_mark_node)
18524         name = NULL;
18525     }
18526   cp_parser_require_pragma_eol (parser, pragma_tok);
18527
18528   stmt = cp_parser_omp_structured_block (parser);
18529   return c_finish_omp_critical (stmt, name);
18530 }
18531
18532 /* OpenMP 2.5:
18533    # pragma omp flush flush-vars[opt] new-line
18534
18535    flush-vars:
18536      ( variable-list ) */
18537
18538 static void
18539 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
18540 {
18541   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18542     (void) cp_parser_omp_var_list (parser, 0, NULL);
18543   cp_parser_require_pragma_eol (parser, pragma_tok);
18544
18545   finish_omp_flush ();
18546 }
18547
18548 /* Parse the restricted form of the for statment allowed by OpenMP.  */
18549
18550 static tree
18551 cp_parser_omp_for_loop (cp_parser *parser)
18552 {
18553   tree init, cond, incr, body, decl, pre_body;
18554   location_t loc;
18555
18556   if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
18557     {
18558       cp_parser_error (parser, "for statement expected");
18559       return NULL;
18560     }
18561   loc = cp_lexer_consume_token (parser->lexer)->location;
18562   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18563     return NULL;
18564
18565   init = decl = NULL;
18566   pre_body = push_stmt_list ();
18567   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18568     {
18569       cp_decl_specifier_seq type_specifiers;
18570
18571       /* First, try to parse as an initialized declaration.  See
18572          cp_parser_condition, from whence the bulk of this is copied.  */
18573
18574       cp_parser_parse_tentatively (parser);
18575       cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
18576                                     &type_specifiers);
18577       if (!cp_parser_error_occurred (parser))
18578         {
18579           tree asm_specification, attributes;
18580           cp_declarator *declarator;
18581
18582           declarator = cp_parser_declarator (parser,
18583                                              CP_PARSER_DECLARATOR_NAMED,
18584                                              /*ctor_dtor_or_conv_p=*/NULL,
18585                                              /*parenthesized_p=*/NULL,
18586                                              /*member_p=*/false);
18587           attributes = cp_parser_attributes_opt (parser);
18588           asm_specification = cp_parser_asm_specification_opt (parser);
18589
18590           cp_parser_require (parser, CPP_EQ, "`='");
18591           if (cp_parser_parse_definitely (parser))
18592             {
18593               tree pushed_scope;
18594
18595               decl = start_decl (declarator, &type_specifiers,
18596                                  /*initialized_p=*/false, attributes,
18597                                  /*prefix_attributes=*/NULL_TREE,
18598                                  &pushed_scope);
18599
18600               init = cp_parser_assignment_expression (parser, false);
18601
18602               cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
18603                               asm_specification, LOOKUP_ONLYCONVERTING);
18604
18605               if (pushed_scope)
18606                 pop_scope (pushed_scope);
18607             }
18608         }
18609       else
18610         cp_parser_abort_tentative_parse (parser);
18611
18612       /* If parsing as an initialized declaration failed, try again as
18613          a simple expression.  */
18614       if (decl == NULL)
18615         init = cp_parser_expression (parser, false);
18616     }
18617   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18618   pre_body = pop_stmt_list (pre_body);
18619
18620   cond = NULL;
18621   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18622     cond = cp_parser_condition (parser);
18623   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18624
18625   incr = NULL;
18626   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
18627     incr = cp_parser_expression (parser, false);
18628
18629   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18630     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18631                                            /*or_comma=*/false,
18632                                            /*consume_paren=*/true);
18633
18634   /* Note that we saved the original contents of this flag when we entered
18635      the structured block, and so we don't need to re-save it here.  */
18636   parser->in_statement = IN_OMP_FOR;
18637
18638   /* Note that the grammar doesn't call for a structured block here,
18639      though the loop as a whole is a structured block.  */
18640   body = push_stmt_list ();
18641   cp_parser_statement (parser, NULL_TREE, false);
18642   body = pop_stmt_list (body);
18643
18644   return finish_omp_for (loc, decl, init, cond, incr, body, pre_body);
18645 }
18646
18647 /* OpenMP 2.5:
18648    #pragma omp for for-clause[optseq] new-line
18649      for-loop  */
18650
18651 #define OMP_FOR_CLAUSE_MASK                             \
18652         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18653         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18654         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
18655         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
18656         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
18657         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
18658         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18659
18660 static tree
18661 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
18662 {
18663   tree clauses, sb, ret;
18664   unsigned int save;
18665
18666   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
18667                                        "#pragma omp for", pragma_tok);
18668
18669   sb = begin_omp_structured_block ();
18670   save = cp_parser_begin_omp_structured_block (parser);
18671
18672   ret = cp_parser_omp_for_loop (parser);
18673   if (ret)
18674     OMP_FOR_CLAUSES (ret) = clauses;
18675
18676   cp_parser_end_omp_structured_block (parser, save);
18677   add_stmt (finish_omp_structured_block (sb));
18678
18679   return ret;
18680 }
18681
18682 /* OpenMP 2.5:
18683    # pragma omp master new-line
18684      structured-block  */
18685
18686 static tree
18687 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
18688 {
18689   cp_parser_require_pragma_eol (parser, pragma_tok);
18690   return c_finish_omp_master (cp_parser_omp_structured_block (parser));
18691 }
18692
18693 /* OpenMP 2.5:
18694    # pragma omp ordered new-line
18695      structured-block  */
18696
18697 static tree
18698 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
18699 {
18700   cp_parser_require_pragma_eol (parser, pragma_tok);
18701   return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
18702 }
18703
18704 /* OpenMP 2.5:
18705
18706    section-scope:
18707      { section-sequence }
18708
18709    section-sequence:
18710      section-directive[opt] structured-block
18711      section-sequence section-directive structured-block  */
18712
18713 static tree
18714 cp_parser_omp_sections_scope (cp_parser *parser)
18715 {
18716   tree stmt, substmt;
18717   bool error_suppress = false;
18718   cp_token *tok;
18719
18720   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
18721     return NULL_TREE;
18722
18723   stmt = push_stmt_list ();
18724
18725   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
18726     {
18727       unsigned save;
18728
18729       substmt = begin_omp_structured_block ();
18730       save = cp_parser_begin_omp_structured_block (parser);
18731
18732       while (1)
18733         {
18734           cp_parser_statement (parser, NULL_TREE, false);
18735
18736           tok = cp_lexer_peek_token (parser->lexer);
18737           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
18738             break;
18739           if (tok->type == CPP_CLOSE_BRACE)
18740             break;
18741           if (tok->type == CPP_EOF)
18742             break;
18743         }
18744
18745       cp_parser_end_omp_structured_block (parser, save);
18746       substmt = finish_omp_structured_block (substmt);
18747       substmt = build1 (OMP_SECTION, void_type_node, substmt);
18748       add_stmt (substmt);
18749     }
18750
18751   while (1)
18752     {
18753       tok = cp_lexer_peek_token (parser->lexer);
18754       if (tok->type == CPP_CLOSE_BRACE)
18755         break;
18756       if (tok->type == CPP_EOF)
18757         break;
18758
18759       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
18760         {
18761           cp_lexer_consume_token (parser->lexer);
18762           cp_parser_require_pragma_eol (parser, tok);
18763           error_suppress = false;
18764         }
18765       else if (!error_suppress)
18766         {
18767           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
18768           error_suppress = true;
18769         }
18770
18771       substmt = cp_parser_omp_structured_block (parser);
18772       substmt = build1 (OMP_SECTION, void_type_node, substmt);
18773       add_stmt (substmt);
18774     }
18775   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
18776
18777   substmt = pop_stmt_list (stmt);
18778
18779   stmt = make_node (OMP_SECTIONS);
18780   TREE_TYPE (stmt) = void_type_node;
18781   OMP_SECTIONS_BODY (stmt) = substmt;
18782
18783   add_stmt (stmt);
18784   return stmt;
18785 }
18786
18787 /* OpenMP 2.5:
18788    # pragma omp sections sections-clause[optseq] newline
18789      sections-scope  */
18790
18791 #define OMP_SECTIONS_CLAUSE_MASK                        \
18792         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18793         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18794         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
18795         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
18796         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18797
18798 static tree
18799 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
18800 {
18801   tree clauses, ret;
18802
18803   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
18804                                        "#pragma omp sections", pragma_tok);
18805
18806   ret = cp_parser_omp_sections_scope (parser);
18807   if (ret)
18808     OMP_SECTIONS_CLAUSES (ret) = clauses;
18809
18810   return ret;
18811 }
18812
18813 /* OpenMP 2.5:
18814    # pragma parallel parallel-clause new-line
18815    # pragma parallel for parallel-for-clause new-line
18816    # pragma parallel sections parallel-sections-clause new-line  */
18817
18818 #define OMP_PARALLEL_CLAUSE_MASK                        \
18819         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
18820         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18821         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18822         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
18823         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
18824         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
18825         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
18826         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
18827
18828 static tree
18829 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
18830 {
18831   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
18832   const char *p_name = "#pragma omp parallel";
18833   tree stmt, clauses, par_clause, ws_clause, block;
18834   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
18835   unsigned int save;
18836
18837   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
18838     {
18839       cp_lexer_consume_token (parser->lexer);
18840       p_kind = PRAGMA_OMP_PARALLEL_FOR;
18841       p_name = "#pragma omp parallel for";
18842       mask |= OMP_FOR_CLAUSE_MASK;
18843       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
18844     }
18845   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18846     {
18847       tree id = cp_lexer_peek_token (parser->lexer)->value;
18848       const char *p = IDENTIFIER_POINTER (id);
18849       if (strcmp (p, "sections") == 0)
18850         {
18851           cp_lexer_consume_token (parser->lexer);
18852           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
18853           p_name = "#pragma omp parallel sections";
18854           mask |= OMP_SECTIONS_CLAUSE_MASK;
18855           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
18856         }
18857     }
18858
18859   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
18860   block = begin_omp_parallel ();
18861   save = cp_parser_begin_omp_structured_block (parser);
18862
18863   switch (p_kind)
18864     {
18865     case PRAGMA_OMP_PARALLEL:
18866       cp_parser_already_scoped_statement (parser);
18867       par_clause = clauses;
18868       break;
18869
18870     case PRAGMA_OMP_PARALLEL_FOR:
18871       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
18872       stmt = cp_parser_omp_for_loop (parser);
18873       if (stmt)
18874         OMP_FOR_CLAUSES (stmt) = ws_clause;
18875       break;
18876
18877     case PRAGMA_OMP_PARALLEL_SECTIONS:
18878       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
18879       stmt = cp_parser_omp_sections_scope (parser);
18880       if (stmt)
18881         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
18882       break;
18883
18884     default:
18885       gcc_unreachable ();
18886     }
18887
18888   cp_parser_end_omp_structured_block (parser, save);
18889   stmt = finish_omp_parallel (par_clause, block);
18890   if (p_kind != PRAGMA_OMP_PARALLEL)
18891     OMP_PARALLEL_COMBINED (stmt) = 1;
18892   return stmt;
18893 }
18894
18895 /* OpenMP 2.5:
18896    # pragma omp single single-clause[optseq] new-line
18897      structured-block  */
18898
18899 #define OMP_SINGLE_CLAUSE_MASK                          \
18900         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18901         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18902         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
18903         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18904
18905 static tree
18906 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
18907 {
18908   tree stmt = make_node (OMP_SINGLE);
18909   TREE_TYPE (stmt) = void_type_node;
18910
18911   OMP_SINGLE_CLAUSES (stmt)
18912     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
18913                                  "#pragma omp single", pragma_tok);
18914   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
18915
18916   return add_stmt (stmt);
18917 }
18918
18919 /* OpenMP 2.5:
18920    # pragma omp threadprivate (variable-list) */
18921
18922 static void
18923 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
18924 {
18925   tree vars;
18926
18927   vars = cp_parser_omp_var_list (parser, 0, NULL);
18928   cp_parser_require_pragma_eol (parser, pragma_tok);
18929
18930   if (!targetm.have_tls)
18931     sorry ("threadprivate variables not supported in this target");
18932
18933   finish_omp_threadprivate (vars);
18934 }
18935
18936 /* Main entry point to OpenMP statement pragmas.  */
18937
18938 static void
18939 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
18940 {
18941   tree stmt;
18942
18943   switch (pragma_tok->pragma_kind)
18944     {
18945     case PRAGMA_OMP_ATOMIC:
18946       cp_parser_omp_atomic (parser, pragma_tok);
18947       return;
18948     case PRAGMA_OMP_CRITICAL:
18949       stmt = cp_parser_omp_critical (parser, pragma_tok);
18950       break;
18951     case PRAGMA_OMP_FOR:
18952       stmt = cp_parser_omp_for (parser, pragma_tok);
18953       break;
18954     case PRAGMA_OMP_MASTER:
18955       stmt = cp_parser_omp_master (parser, pragma_tok);
18956       break;
18957     case PRAGMA_OMP_ORDERED:
18958       stmt = cp_parser_omp_ordered (parser, pragma_tok);
18959       break;
18960     case PRAGMA_OMP_PARALLEL:
18961       stmt = cp_parser_omp_parallel (parser, pragma_tok);
18962       break;
18963     case PRAGMA_OMP_SECTIONS:
18964       stmt = cp_parser_omp_sections (parser, pragma_tok);
18965       break;
18966     case PRAGMA_OMP_SINGLE:
18967       stmt = cp_parser_omp_single (parser, pragma_tok);
18968       break;
18969     default:
18970       gcc_unreachable ();
18971     }
18972
18973   if (stmt)
18974     SET_EXPR_LOCATION (stmt, pragma_tok->location);
18975 }
18976 \f
18977 /* The parser.  */
18978
18979 static GTY (()) cp_parser *the_parser;
18980
18981 \f
18982 /* Special handling for the first token or line in the file.  The first
18983    thing in the file might be #pragma GCC pch_preprocess, which loads a
18984    PCH file, which is a GC collection point.  So we need to handle this
18985    first pragma without benefit of an existing lexer structure.
18986
18987    Always returns one token to the caller in *FIRST_TOKEN.  This is
18988    either the true first token of the file, or the first token after
18989    the initial pragma.  */
18990
18991 static void
18992 cp_parser_initial_pragma (cp_token *first_token)
18993 {
18994   tree name = NULL;
18995
18996   cp_lexer_get_preprocessor_token (NULL, first_token);
18997   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
18998     return;
18999
19000   cp_lexer_get_preprocessor_token (NULL, first_token);
19001   if (first_token->type == CPP_STRING)
19002     {
19003       name = first_token->value;
19004
19005       cp_lexer_get_preprocessor_token (NULL, first_token);
19006       if (first_token->type != CPP_PRAGMA_EOL)
19007         error ("junk at end of %<#pragma GCC pch_preprocess%>");
19008     }
19009   else
19010     error ("expected string literal");
19011
19012   /* Skip to the end of the pragma.  */
19013   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
19014     cp_lexer_get_preprocessor_token (NULL, first_token);
19015
19016   /* Now actually load the PCH file.  */
19017   if (name)
19018     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
19019
19020   /* Read one more token to return to our caller.  We have to do this
19021      after reading the PCH file in, since its pointers have to be
19022      live.  */
19023   cp_lexer_get_preprocessor_token (NULL, first_token);
19024 }
19025
19026 /* Normal parsing of a pragma token.  Here we can (and must) use the
19027    regular lexer.  */
19028
19029 static bool
19030 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
19031 {
19032   cp_token *pragma_tok;
19033   unsigned int id;
19034
19035   pragma_tok = cp_lexer_consume_token (parser->lexer);
19036   gcc_assert (pragma_tok->type == CPP_PRAGMA);
19037   parser->lexer->in_pragma = true;
19038
19039   id = pragma_tok->pragma_kind;
19040   switch (id)
19041     {
19042     case PRAGMA_GCC_PCH_PREPROCESS:
19043       error ("%<#pragma GCC pch_preprocess%> must be first");
19044       break;
19045
19046     case PRAGMA_OMP_BARRIER:
19047       switch (context)
19048         {
19049         case pragma_compound:
19050           cp_parser_omp_barrier (parser, pragma_tok);
19051           return false;
19052         case pragma_stmt:
19053           error ("%<#pragma omp barrier%> may only be "
19054                  "used in compound statements");
19055           break;
19056         default:
19057           goto bad_stmt;
19058         }
19059       break;
19060
19061     case PRAGMA_OMP_FLUSH:
19062       switch (context)
19063         {
19064         case pragma_compound:
19065           cp_parser_omp_flush (parser, pragma_tok);
19066           return false;
19067         case pragma_stmt:
19068           error ("%<#pragma omp flush%> may only be "
19069                  "used in compound statements");
19070           break;
19071         default:
19072           goto bad_stmt;
19073         }
19074       break;
19075
19076     case PRAGMA_OMP_THREADPRIVATE:
19077       cp_parser_omp_threadprivate (parser, pragma_tok);
19078       return false;
19079
19080     case PRAGMA_OMP_ATOMIC:
19081     case PRAGMA_OMP_CRITICAL:
19082     case PRAGMA_OMP_FOR:
19083     case PRAGMA_OMP_MASTER:
19084     case PRAGMA_OMP_ORDERED:
19085     case PRAGMA_OMP_PARALLEL:
19086     case PRAGMA_OMP_SECTIONS:
19087     case PRAGMA_OMP_SINGLE:
19088       if (context == pragma_external)
19089         goto bad_stmt;
19090       cp_parser_omp_construct (parser, pragma_tok);
19091       return true;
19092
19093     case PRAGMA_OMP_SECTION:
19094       error ("%<#pragma omp section%> may only be used in "
19095              "%<#pragma omp sections%> construct");
19096       break;
19097
19098     default:
19099       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
19100       c_invoke_pragma_handler (id);
19101       break;
19102
19103     bad_stmt:
19104       cp_parser_error (parser, "expected declaration specifiers");
19105       break;
19106     }
19107
19108   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
19109   return false;
19110 }
19111
19112 /* The interface the pragma parsers have to the lexer.  */
19113
19114 enum cpp_ttype
19115 pragma_lex (tree *value)
19116 {
19117   cp_token *tok;
19118   enum cpp_ttype ret;
19119
19120   tok = cp_lexer_peek_token (the_parser->lexer);
19121
19122   ret = tok->type;
19123   *value = tok->value;
19124
19125   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
19126     ret = CPP_EOF;
19127   else if (ret == CPP_STRING)
19128     *value = cp_parser_string_literal (the_parser, false, false);
19129   else
19130     {
19131       cp_lexer_consume_token (the_parser->lexer);
19132       if (ret == CPP_KEYWORD)
19133         ret = CPP_NAME;
19134     }
19135
19136   return ret;
19137 }
19138
19139 \f
19140 /* External interface.  */
19141
19142 /* Parse one entire translation unit.  */
19143
19144 void
19145 c_parse_file (void)
19146 {
19147   bool error_occurred;
19148   static bool already_called = false;
19149
19150   if (already_called)
19151     {
19152       sorry ("inter-module optimizations not implemented for C++");
19153       return;
19154     }
19155   already_called = true;
19156
19157   the_parser = cp_parser_new ();
19158   push_deferring_access_checks (flag_access_control
19159                                 ? dk_no_deferred : dk_no_check);
19160   error_occurred = cp_parser_translation_unit (the_parser);
19161   the_parser = NULL;
19162 }
19163
19164 /* This variable must be provided by every front end.  */
19165
19166 int yydebug;
19167
19168 #include "gt-cp-parser.h"