OSDN Git Service

* parser.c (cp_parser_simple_type_specifier): Fix typo.
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
3    Written by Mark Mitchell <mark@codesourcery.com>.
4
5    This file is part of GCC.
6
7    GCC is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2, or (at your option)
10    any later version.
11
12    GCC is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GCC; see the file COPYING.  If not, write to the Free
19    Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20    02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "dyn-string.h"
27 #include "varray.h"
28 #include "cpplib.h"
29 #include "tree.h"
30 #include "cp-tree.h"
31 #include "c-pragma.h"
32 #include "decl.h"
33 #include "flags.h"
34 #include "diagnostic.h"
35 #include "toplev.h"
36 #include "output.h"
37 #include "target.h"
38
39 \f
40 /* The lexer.  */
41
42 /* Overview
43    --------
44
45    A cp_lexer represents a stream of cp_tokens.  It allows arbitrary
46    look-ahead.
47
48    Methodology
49    -----------
50
51    We use a circular buffer to store incoming tokens.
52
53    Some artifacts of the C++ language (such as the
54    expression/declaration ambiguity) require arbitrary look-ahead.
55    The strategy we adopt for dealing with these problems is to attempt
56    to parse one construct (e.g., the declaration) and fall back to the
57    other (e.g., the expression) if that attempt does not succeed.
58    Therefore, we must sometimes store an arbitrary number of tokens.
59
60    The parser routinely peeks at the next token, and then consumes it
61    later.  That also requires a buffer in which to store the tokens.
62
63    In order to easily permit adding tokens to the end of the buffer,
64    while removing them from the beginning of the buffer, we use a
65    circular buffer.  */
66
67 /* A C++ token.  */
68
69 typedef struct cp_token GTY (())
70 {
71   /* The kind of token.  */
72   ENUM_BITFIELD (cpp_ttype) type : 8;
73   /* If this token is a keyword, this value indicates which keyword.
74      Otherwise, this value is RID_MAX.  */
75   ENUM_BITFIELD (rid) keyword : 8;
76   /* Token flags.  */
77   unsigned char flags;
78   /* The value associated with this token, if any.  */
79   tree value;
80   /* The location at which this token was found.  */
81   location_t location;
82 } cp_token;
83
84 /* The number of tokens in a single token block.
85    Computed so that cp_token_block fits in a 512B allocation unit.  */
86
87 #define CP_TOKEN_BLOCK_NUM_TOKENS ((512 - 3*sizeof (char*))/sizeof (cp_token))
88
89 /* A group of tokens.  These groups are chained together to store
90    large numbers of tokens.  (For example, a token block is created
91    when the body of an inline member function is first encountered;
92    the tokens are processed later after the class definition is
93    complete.)
94
95    This somewhat ungainly data structure (as opposed to, say, a
96    variable-length array), is used due to constraints imposed by the
97    current garbage-collection methodology.  If it is made more
98    flexible, we could perhaps simplify the data structures involved.  */
99
100 typedef struct cp_token_block GTY (())
101 {
102   /* The tokens.  */
103   cp_token tokens[CP_TOKEN_BLOCK_NUM_TOKENS];
104   /* The number of tokens in this block.  */
105   size_t num_tokens;
106   /* The next token block in the chain.  */
107   struct cp_token_block *next;
108   /* The previous block in the chain.  */
109   struct cp_token_block *prev;
110 } cp_token_block;
111
112 typedef struct cp_token_cache GTY (())
113 {
114   /* The first block in the cache.  NULL if there are no tokens in the
115      cache.  */
116   cp_token_block *first;
117   /* The last block in the cache.  NULL If there are no tokens in the
118      cache.  */
119   cp_token_block *last;
120 } cp_token_cache;
121
122 /* Prototypes.  */
123
124 static cp_token_cache *cp_token_cache_new
125   (void);
126 static void cp_token_cache_push_token
127   (cp_token_cache *, cp_token *);
128
129 /* Create a new cp_token_cache.  */
130
131 static cp_token_cache *
132 cp_token_cache_new (void)
133 {
134   return ggc_alloc_cleared (sizeof (cp_token_cache));
135 }
136
137 /* Add *TOKEN to *CACHE.  */
138
139 static void
140 cp_token_cache_push_token (cp_token_cache *cache,
141                            cp_token *token)
142 {
143   cp_token_block *b = cache->last;
144
145   /* See if we need to allocate a new token block.  */
146   if (!b || b->num_tokens == CP_TOKEN_BLOCK_NUM_TOKENS)
147     {
148       b = ggc_alloc_cleared (sizeof (cp_token_block));
149       b->prev = cache->last;
150       if (cache->last)
151         {
152           cache->last->next = b;
153           cache->last = b;
154         }
155       else
156         cache->first = cache->last = b;
157     }
158   /* Add this token to the current token block.  */
159   b->tokens[b->num_tokens++] = *token;
160 }
161
162 /* The cp_lexer structure represents the C++ lexer.  It is responsible
163    for managing the token stream from the preprocessor and supplying
164    it to the parser.  */
165
166 typedef struct cp_lexer GTY (())
167 {
168   /* The memory allocated for the buffer.  Never NULL.  */
169   cp_token * GTY ((length ("(%h.buffer_end - %h.buffer)"))) buffer;
170   /* A pointer just past the end of the memory allocated for the buffer.  */
171   cp_token * GTY ((skip)) buffer_end;
172   /* The first valid token in the buffer, or NULL if none.  */
173   cp_token * GTY ((skip)) first_token;
174   /* The next available token.  If NEXT_TOKEN is NULL, then there are
175      no more available tokens.  */
176   cp_token * GTY ((skip)) next_token;
177   /* A pointer just past the last available token.  If FIRST_TOKEN is
178      NULL, however, there are no available tokens, and then this
179      location is simply the place in which the next token read will be
180      placed.  If LAST_TOKEN == FIRST_TOKEN, then the buffer is full.
181      When the LAST_TOKEN == BUFFER, then the last token is at the
182      highest memory address in the BUFFER.  */
183   cp_token * GTY ((skip)) last_token;
184
185   /* A stack indicating positions at which cp_lexer_save_tokens was
186      called.  The top entry is the most recent position at which we
187      began saving tokens.  The entries are differences in token
188      position between FIRST_TOKEN and the first saved token.
189
190      If the stack is non-empty, we are saving tokens.  When a token is
191      consumed, the NEXT_TOKEN pointer will move, but the FIRST_TOKEN
192      pointer will not.  The token stream will be preserved so that it
193      can be reexamined later.
194
195      If the stack is empty, then we are not saving tokens.  Whenever a
196      token is consumed, the FIRST_TOKEN pointer will be moved, and the
197      consumed token will be gone forever.  */
198   varray_type saved_tokens;
199
200   /* The STRING_CST tokens encountered while processing the current
201      string literal.  */
202   varray_type string_tokens;
203
204   /* True if we should obtain more tokens from the preprocessor; false
205      if we are processing a saved token cache.  */
206   bool main_lexer_p;
207
208   /* True if we should output debugging information.  */
209   bool debugging_p;
210
211   /* The next lexer in a linked list of lexers.  */
212   struct cp_lexer *next;
213 } cp_lexer;
214
215 /* Prototypes.  */
216
217 static cp_lexer *cp_lexer_new_main
218   (void);
219 static cp_lexer *cp_lexer_new_from_tokens
220   (struct cp_token_cache *);
221 static int cp_lexer_saving_tokens
222   (const cp_lexer *);
223 static cp_token *cp_lexer_next_token
224   (cp_lexer *, cp_token *);
225 static cp_token *cp_lexer_prev_token
226   (cp_lexer *, cp_token *);
227 static ptrdiff_t cp_lexer_token_difference
228   (cp_lexer *, cp_token *, cp_token *);
229 static cp_token *cp_lexer_read_token
230   (cp_lexer *);
231 static void cp_lexer_maybe_grow_buffer
232   (cp_lexer *);
233 static void cp_lexer_get_preprocessor_token
234   (cp_lexer *, cp_token *);
235 static cp_token *cp_lexer_peek_token
236   (cp_lexer *);
237 static cp_token *cp_lexer_peek_nth_token
238   (cp_lexer *, size_t);
239 static inline bool cp_lexer_next_token_is
240   (cp_lexer *, enum cpp_ttype);
241 static bool cp_lexer_next_token_is_not
242   (cp_lexer *, enum cpp_ttype);
243 static bool cp_lexer_next_token_is_keyword
244   (cp_lexer *, enum rid);
245 static cp_token *cp_lexer_consume_token
246   (cp_lexer *);
247 static void cp_lexer_purge_token
248   (cp_lexer *);
249 static void cp_lexer_purge_tokens_after
250   (cp_lexer *, cp_token *);
251 static void cp_lexer_save_tokens
252   (cp_lexer *);
253 static void cp_lexer_commit_tokens
254   (cp_lexer *);
255 static void cp_lexer_rollback_tokens
256   (cp_lexer *);
257 static inline void cp_lexer_set_source_position_from_token
258   (cp_lexer *, const cp_token *);
259 static void cp_lexer_print_token
260   (FILE *, cp_token *);
261 static inline bool cp_lexer_debugging_p
262   (cp_lexer *);
263 static void cp_lexer_start_debugging
264   (cp_lexer *) ATTRIBUTE_UNUSED;
265 static void cp_lexer_stop_debugging
266   (cp_lexer *) ATTRIBUTE_UNUSED;
267
268 /* Manifest constants.  */
269
270 #define CP_TOKEN_BUFFER_SIZE 5
271 #define CP_SAVED_TOKENS_SIZE 5
272
273 /* A token type for keywords, as opposed to ordinary identifiers.  */
274 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
275
276 /* A token type for template-ids.  If a template-id is processed while
277    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
278    the value of the CPP_TEMPLATE_ID is whatever was returned by
279    cp_parser_template_id.  */
280 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
281
282 /* A token type for nested-name-specifiers.  If a
283    nested-name-specifier is processed while parsing tentatively, it is
284    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
285    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
286    cp_parser_nested_name_specifier_opt.  */
287 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
288
289 /* A token type for tokens that are not tokens at all; these are used
290    to mark the end of a token block.  */
291 #define CPP_NONE (CPP_NESTED_NAME_SPECIFIER + 1)
292
293 /* Variables.  */
294
295 /* The stream to which debugging output should be written.  */
296 static FILE *cp_lexer_debug_stream;
297
298 /* Create a new main C++ lexer, the lexer that gets tokens from the
299    preprocessor.  */
300
301 static cp_lexer *
302 cp_lexer_new_main (void)
303 {
304   cp_lexer *lexer;
305   cp_token first_token;
306
307   /* It's possible that lexing the first token will load a PCH file,
308      which is a GC collection point.  So we have to grab the first
309      token before allocating any memory.  */
310   cp_lexer_get_preprocessor_token (NULL, &first_token);
311   c_common_no_more_pch ();
312
313   /* Allocate the memory.  */
314   lexer = ggc_alloc_cleared (sizeof (cp_lexer));
315
316   /* Create the circular buffer.  */
317   lexer->buffer = ggc_calloc (CP_TOKEN_BUFFER_SIZE, sizeof (cp_token));
318   lexer->buffer_end = lexer->buffer + CP_TOKEN_BUFFER_SIZE;
319
320   /* There is one token in the buffer.  */
321   lexer->last_token = lexer->buffer + 1;
322   lexer->first_token = lexer->buffer;
323   lexer->next_token = lexer->buffer;
324   memcpy (lexer->buffer, &first_token, sizeof (cp_token));
325
326   /* This lexer obtains more tokens by calling c_lex.  */
327   lexer->main_lexer_p = true;
328
329   /* Create the SAVED_TOKENS stack.  */
330   VARRAY_INT_INIT (lexer->saved_tokens, CP_SAVED_TOKENS_SIZE, "saved_tokens");
331
332   /* Create the STRINGS array.  */
333   VARRAY_TREE_INIT (lexer->string_tokens, 32, "strings");
334
335   /* Assume we are not debugging.  */
336   lexer->debugging_p = false;
337
338   return lexer;
339 }
340
341 /* Create a new lexer whose token stream is primed with the TOKENS.
342    When these tokens are exhausted, no new tokens will be read.  */
343
344 static cp_lexer *
345 cp_lexer_new_from_tokens (cp_token_cache *tokens)
346 {
347   cp_lexer *lexer;
348   cp_token *token;
349   cp_token_block *block;
350   ptrdiff_t num_tokens;
351
352   /* Allocate the memory.  */
353   lexer = ggc_alloc_cleared (sizeof (cp_lexer));
354
355   /* Create a new buffer, appropriately sized.  */
356   num_tokens = 0;
357   for (block = tokens->first; block != NULL; block = block->next)
358     num_tokens += block->num_tokens;
359   lexer->buffer = ggc_alloc (num_tokens * sizeof (cp_token));
360   lexer->buffer_end = lexer->buffer + num_tokens;
361
362   /* Install the tokens.  */
363   token = lexer->buffer;
364   for (block = tokens->first; block != NULL; block = block->next)
365     {
366       memcpy (token, block->tokens, block->num_tokens * sizeof (cp_token));
367       token += block->num_tokens;
368     }
369
370   /* The FIRST_TOKEN is the beginning of the buffer.  */
371   lexer->first_token = lexer->buffer;
372   /* The next available token is also at the beginning of the buffer.  */
373   lexer->next_token = lexer->buffer;
374   /* The buffer is full.  */
375   lexer->last_token = lexer->first_token;
376
377   /* This lexer doesn't obtain more tokens.  */
378   lexer->main_lexer_p = false;
379
380   /* Create the SAVED_TOKENS stack.  */
381   VARRAY_INT_INIT (lexer->saved_tokens, CP_SAVED_TOKENS_SIZE, "saved_tokens");
382
383   /* Create the STRINGS array.  */
384   VARRAY_TREE_INIT (lexer->string_tokens, 32, "strings");
385
386   /* Assume we are not debugging.  */
387   lexer->debugging_p = false;
388
389   return lexer;
390 }
391
392 /* Returns nonzero if debugging information should be output.  */
393
394 static inline bool
395 cp_lexer_debugging_p (cp_lexer *lexer)
396 {
397   return lexer->debugging_p;
398 }
399
400 /* Set the current source position from the information stored in
401    TOKEN.  */
402
403 static inline void
404 cp_lexer_set_source_position_from_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
405                                          const cp_token *token)
406 {
407   /* Ideally, the source position information would not be a global
408      variable, but it is.  */
409
410   /* Update the line number.  */
411   if (token->type != CPP_EOF)
412     input_location = token->location;
413 }
414
415 /* TOKEN points into the circular token buffer.  Return a pointer to
416    the next token in the buffer.  */
417
418 static inline cp_token *
419 cp_lexer_next_token (cp_lexer* lexer, cp_token* token)
420 {
421   token++;
422   if (token == lexer->buffer_end)
423     token = lexer->buffer;
424   return token;
425 }
426
427 /* TOKEN points into the circular token buffer.  Return a pointer to
428    the previous token in the buffer.  */
429
430 static inline cp_token *
431 cp_lexer_prev_token (cp_lexer* lexer, cp_token* token)
432 {
433   if (token == lexer->buffer)
434     token = lexer->buffer_end;
435   return token - 1;
436 }
437
438 /* nonzero if we are presently saving tokens.  */
439
440 static int
441 cp_lexer_saving_tokens (const cp_lexer* lexer)
442 {
443   return VARRAY_ACTIVE_SIZE (lexer->saved_tokens) != 0;
444 }
445
446 /* Return a pointer to the token that is N tokens beyond TOKEN in the
447    buffer.  */
448
449 static cp_token *
450 cp_lexer_advance_token (cp_lexer *lexer, cp_token *token, ptrdiff_t n)
451 {
452   token += n;
453   if (token >= lexer->buffer_end)
454     token = lexer->buffer + (token - lexer->buffer_end);
455   return token;
456 }
457
458 /* Returns the number of times that START would have to be incremented
459    to reach FINISH.  If START and FINISH are the same, returns zero.  */
460
461 static ptrdiff_t
462 cp_lexer_token_difference (cp_lexer* lexer, cp_token* start, cp_token* finish)
463 {
464   if (finish >= start)
465     return finish - start;
466   else
467     return ((lexer->buffer_end - lexer->buffer)
468             - (start - finish));
469 }
470
471 /* Obtain another token from the C preprocessor and add it to the
472    token buffer.  Returns the newly read token.  */
473
474 static cp_token *
475 cp_lexer_read_token (cp_lexer* lexer)
476 {
477   cp_token *token;
478
479   /* Make sure there is room in the buffer.  */
480   cp_lexer_maybe_grow_buffer (lexer);
481
482   /* If there weren't any tokens, then this one will be the first.  */
483   if (!lexer->first_token)
484     lexer->first_token = lexer->last_token;
485   /* Similarly, if there were no available tokens, there is one now.  */
486   if (!lexer->next_token)
487     lexer->next_token = lexer->last_token;
488
489   /* Figure out where we're going to store the new token.  */
490   token = lexer->last_token;
491
492   /* Get a new token from the preprocessor.  */
493   cp_lexer_get_preprocessor_token (lexer, token);
494
495   /* Increment LAST_TOKEN.  */
496   lexer->last_token = cp_lexer_next_token (lexer, token);
497
498   /* Strings should have type `const char []'.  Right now, we will
499      have an ARRAY_TYPE that is constant rather than an array of
500      constant elements.
501      FIXME: Make fix_string_type get this right in the first place.  */
502   if ((token->type == CPP_STRING || token->type == CPP_WSTRING)
503       && flag_const_strings)
504     {
505       if (c_lex_string_translate)
506         {
507           tree value = token->value;
508           tree type;
509
510           /* We might as well go ahead and release the chained
511              translated string such that we can reuse its memory.  */
512           if (TREE_CHAIN (value))
513             value = TREE_CHAIN (token->value);
514
515           /* Get the current type.  It will be an ARRAY_TYPE.  */
516           type = TREE_TYPE (value);
517           /* Use build_cplus_array_type to rebuild the array, thereby
518              getting the right type.  */
519           type = build_cplus_array_type (TREE_TYPE (type),
520                                          TYPE_DOMAIN (type));
521           /* Reset the type of the token.  */
522           TREE_TYPE (value) = type;
523         }
524     }
525
526   return token;
527 }
528
529 /* If the circular buffer is full, make it bigger.  */
530
531 static void
532 cp_lexer_maybe_grow_buffer (cp_lexer* lexer)
533 {
534   /* If the buffer is full, enlarge it.  */
535   if (lexer->last_token == lexer->first_token)
536     {
537       cp_token *new_buffer;
538       cp_token *old_buffer;
539       cp_token *new_first_token;
540       ptrdiff_t buffer_length;
541       size_t num_tokens_to_copy;
542
543       /* Remember the current buffer pointer.  It will become invalid,
544          but we will need to do pointer arithmetic involving this
545          value.  */
546       old_buffer = lexer->buffer;
547       /* Compute the current buffer size.  */
548       buffer_length = lexer->buffer_end - lexer->buffer;
549       /* Allocate a buffer twice as big.  */
550       new_buffer = ggc_realloc (lexer->buffer,
551                                 2 * buffer_length * sizeof (cp_token));
552
553       /* Because the buffer is circular, logically consecutive tokens
554          are not necessarily placed consecutively in memory.
555          Therefore, we must keep move the tokens that were before
556          FIRST_TOKEN to the second half of the newly allocated
557          buffer.  */
558       num_tokens_to_copy = (lexer->first_token - old_buffer);
559       memcpy (new_buffer + buffer_length,
560               new_buffer,
561               num_tokens_to_copy * sizeof (cp_token));
562       /* Clear the rest of the buffer.  We never look at this storage,
563          but the garbage collector may.  */
564       memset (new_buffer + buffer_length + num_tokens_to_copy, 0,
565               (buffer_length - num_tokens_to_copy) * sizeof (cp_token));
566
567       /* Now recompute all of the buffer pointers.  */
568       new_first_token
569         = new_buffer + (lexer->first_token - old_buffer);
570       if (lexer->next_token != NULL)
571         {
572           ptrdiff_t next_token_delta;
573
574           if (lexer->next_token > lexer->first_token)
575             next_token_delta = lexer->next_token - lexer->first_token;
576           else
577             next_token_delta =
578               buffer_length - (lexer->first_token - lexer->next_token);
579           lexer->next_token = new_first_token + next_token_delta;
580         }
581       lexer->last_token = new_first_token + buffer_length;
582       lexer->buffer = new_buffer;
583       lexer->buffer_end = new_buffer + buffer_length * 2;
584       lexer->first_token = new_first_token;
585     }
586 }
587
588 /* Store the next token from the preprocessor in *TOKEN.  */
589
590 static void
591 cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
592                                  cp_token *token)
593 {
594   bool done;
595
596   /* If this not the main lexer, return a terminating CPP_EOF token.  */
597   if (lexer != NULL && !lexer->main_lexer_p)
598     {
599       token->type = CPP_EOF;
600       token->location = UNKNOWN_LOCATION;
601       token->value = NULL_TREE;
602       token->keyword = RID_MAX;
603
604       return;
605     }
606
607   done = false;
608   /* Keep going until we get a token we like.  */
609   while (!done)
610     {
611       /* Get a new token from the preprocessor.  */
612       token->type = c_lex_with_flags (&token->value, &token->flags);
613       /* Issue messages about tokens we cannot process.  */
614       switch (token->type)
615         {
616         case CPP_ATSIGN:
617         case CPP_HASH:
618         case CPP_PASTE:
619           error ("invalid token");
620           break;
621
622         default:
623           /* This is a good token, so we exit the loop.  */
624           done = true;
625           break;
626         }
627     }
628   /* Now we've got our token.  */
629   token->location = input_location;
630
631   /* Check to see if this token is a keyword.  */
632   if (token->type == CPP_NAME
633       && C_IS_RESERVED_WORD (token->value))
634     {
635       /* Mark this token as a keyword.  */
636       token->type = CPP_KEYWORD;
637       /* Record which keyword.  */
638       token->keyword = C_RID_CODE (token->value);
639       /* Update the value.  Some keywords are mapped to particular
640          entities, rather than simply having the value of the
641          corresponding IDENTIFIER_NODE.  For example, `__const' is
642          mapped to `const'.  */
643       token->value = ridpointers[token->keyword];
644     }
645   else
646     token->keyword = RID_MAX;
647 }
648
649 /* Return a pointer to the next token in the token stream, but do not
650    consume it.  */
651
652 static cp_token *
653 cp_lexer_peek_token (cp_lexer* lexer)
654 {
655   cp_token *token;
656
657   /* If there are no tokens, read one now.  */
658   if (!lexer->next_token)
659     cp_lexer_read_token (lexer);
660
661   /* Provide debugging output.  */
662   if (cp_lexer_debugging_p (lexer))
663     {
664       fprintf (cp_lexer_debug_stream, "cp_lexer: peeking at token: ");
665       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
666       fprintf (cp_lexer_debug_stream, "\n");
667     }
668
669   token = lexer->next_token;
670   cp_lexer_set_source_position_from_token (lexer, token);
671   return token;
672 }
673
674 /* Return true if the next token has the indicated TYPE.  */
675
676 static bool
677 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
678 {
679   cp_token *token;
680
681   /* Peek at the next token.  */
682   token = cp_lexer_peek_token (lexer);
683   /* Check to see if it has the indicated TYPE.  */
684   return token->type == type;
685 }
686
687 /* Return true if the next token does not have the indicated TYPE.  */
688
689 static bool
690 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
691 {
692   return !cp_lexer_next_token_is (lexer, type);
693 }
694
695 /* Return true if the next token is the indicated KEYWORD.  */
696
697 static bool
698 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
699 {
700   cp_token *token;
701
702   /* Peek at the next token.  */
703   token = cp_lexer_peek_token (lexer);
704   /* Check to see if it is the indicated keyword.  */
705   return token->keyword == keyword;
706 }
707
708 /* Return a pointer to the Nth token in the token stream.  If N is 1,
709    then this is precisely equivalent to cp_lexer_peek_token.  */
710
711 static cp_token *
712 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
713 {
714   cp_token *token;
715
716   /* N is 1-based, not zero-based.  */
717   my_friendly_assert (n > 0, 20000224);
718
719   /* Skip ahead from NEXT_TOKEN, reading more tokens as necessary.  */
720   token = lexer->next_token;
721   /* If there are no tokens in the buffer, get one now.  */
722   if (!token)
723     {
724       cp_lexer_read_token (lexer);
725       token = lexer->next_token;
726     }
727
728   /* Now, read tokens until we have enough.  */
729   while (--n > 0)
730     {
731       /* Advance to the next token.  */
732       token = cp_lexer_next_token (lexer, token);
733       /* If that's all the tokens we have, read a new one.  */
734       if (token == lexer->last_token)
735         token = cp_lexer_read_token (lexer);
736     }
737
738   return token;
739 }
740
741 /* Consume the next token.  The pointer returned is valid only until
742    another token is read.  Callers should preserve copy the token
743    explicitly if they will need its value for a longer period of
744    time.  */
745
746 static cp_token *
747 cp_lexer_consume_token (cp_lexer* lexer)
748 {
749   cp_token *token;
750
751   /* If there are no tokens, read one now.  */
752   if (!lexer->next_token)
753     cp_lexer_read_token (lexer);
754
755   /* Remember the token we'll be returning.  */
756   token = lexer->next_token;
757
758   /* Increment NEXT_TOKEN.  */
759   lexer->next_token = cp_lexer_next_token (lexer,
760                                            lexer->next_token);
761   /* Check to see if we're all out of tokens.  */
762   if (lexer->next_token == lexer->last_token)
763     lexer->next_token = NULL;
764
765   /* If we're not saving tokens, then move FIRST_TOKEN too.  */
766   if (!cp_lexer_saving_tokens (lexer))
767     {
768       /* If there are no tokens available, set FIRST_TOKEN to NULL.  */
769       if (!lexer->next_token)
770         lexer->first_token = NULL;
771       else
772         lexer->first_token = lexer->next_token;
773     }
774
775   /* Provide debugging output.  */
776   if (cp_lexer_debugging_p (lexer))
777     {
778       fprintf (cp_lexer_debug_stream, "cp_lexer: consuming token: ");
779       cp_lexer_print_token (cp_lexer_debug_stream, token);
780       fprintf (cp_lexer_debug_stream, "\n");
781     }
782
783   return token;
784 }
785
786 /* Permanently remove the next token from the token stream.  There
787    must be a valid next token already; this token never reads
788    additional tokens from the preprocessor.  */
789
790 static void
791 cp_lexer_purge_token (cp_lexer *lexer)
792 {
793   cp_token *token;
794   cp_token *next_token;
795
796   token = lexer->next_token;
797   while (true)
798     {
799       next_token = cp_lexer_next_token (lexer, token);
800       if (next_token == lexer->last_token)
801         break;
802       *token = *next_token;
803       token = next_token;
804     }
805
806   lexer->last_token = token;
807   /* The token purged may have been the only token remaining; if so,
808      clear NEXT_TOKEN.  */
809   if (lexer->next_token == token)
810     lexer->next_token = NULL;
811 }
812
813 /* Permanently remove all tokens after TOKEN, up to, but not
814    including, the token that will be returned next by
815    cp_lexer_peek_token.  */
816
817 static void
818 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *token)
819 {
820   cp_token *peek;
821   cp_token *t1;
822   cp_token *t2;
823
824   if (lexer->next_token)
825     {
826       /* Copy the tokens that have not yet been read to the location
827          immediately following TOKEN.  */
828       t1 = cp_lexer_next_token (lexer, token);
829       t2 = peek = cp_lexer_peek_token (lexer);
830       /* Move tokens into the vacant area between TOKEN and PEEK.  */
831       while (t2 != lexer->last_token)
832         {
833           *t1 = *t2;
834           t1 = cp_lexer_next_token (lexer, t1);
835           t2 = cp_lexer_next_token (lexer, t2);
836         }
837       /* Now, the next available token is right after TOKEN.  */
838       lexer->next_token = cp_lexer_next_token (lexer, token);
839       /* And the last token is wherever we ended up.  */
840       lexer->last_token = t1;
841     }
842   else
843     {
844       /* There are no tokens in the buffer, so there is nothing to
845          copy.  The last token in the buffer is TOKEN itself.  */
846       lexer->last_token = cp_lexer_next_token (lexer, token);
847     }
848 }
849
850 /* Begin saving tokens.  All tokens consumed after this point will be
851    preserved.  */
852
853 static void
854 cp_lexer_save_tokens (cp_lexer* lexer)
855 {
856   /* Provide debugging output.  */
857   if (cp_lexer_debugging_p (lexer))
858     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
859
860   /* Make sure that LEXER->NEXT_TOKEN is non-NULL so that we can
861      restore the tokens if required.  */
862   if (!lexer->next_token)
863     cp_lexer_read_token (lexer);
864
865   VARRAY_PUSH_INT (lexer->saved_tokens,
866                    cp_lexer_token_difference (lexer,
867                                               lexer->first_token,
868                                               lexer->next_token));
869 }
870
871 /* Commit to the portion of the token stream most recently saved.  */
872
873 static void
874 cp_lexer_commit_tokens (cp_lexer* lexer)
875 {
876   /* Provide debugging output.  */
877   if (cp_lexer_debugging_p (lexer))
878     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
879
880   VARRAY_POP (lexer->saved_tokens);
881 }
882
883 /* Return all tokens saved since the last call to cp_lexer_save_tokens
884    to the token stream.  Stop saving tokens.  */
885
886 static void
887 cp_lexer_rollback_tokens (cp_lexer* lexer)
888 {
889   size_t delta;
890
891   /* Provide debugging output.  */
892   if (cp_lexer_debugging_p (lexer))
893     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
894
895   /* Find the token that was the NEXT_TOKEN when we started saving
896      tokens.  */
897   delta = VARRAY_TOP_INT(lexer->saved_tokens);
898   /* Make it the next token again now.  */
899   lexer->next_token = cp_lexer_advance_token (lexer,
900                                               lexer->first_token,
901                                               delta);
902   /* It might be the case that there were no tokens when we started
903      saving tokens, but that there are some tokens now.  */
904   if (!lexer->next_token && lexer->first_token)
905     lexer->next_token = lexer->first_token;
906
907   /* Stop saving tokens.  */
908   VARRAY_POP (lexer->saved_tokens);
909 }
910
911 /* Print a representation of the TOKEN on the STREAM.  */
912
913 static void
914 cp_lexer_print_token (FILE * stream, cp_token* token)
915 {
916   const char *token_type = NULL;
917
918   /* Figure out what kind of token this is.  */
919   switch (token->type)
920     {
921     case CPP_EQ:
922       token_type = "EQ";
923       break;
924
925     case CPP_COMMA:
926       token_type = "COMMA";
927       break;
928
929     case CPP_OPEN_PAREN:
930       token_type = "OPEN_PAREN";
931       break;
932
933     case CPP_CLOSE_PAREN:
934       token_type = "CLOSE_PAREN";
935       break;
936
937     case CPP_OPEN_BRACE:
938       token_type = "OPEN_BRACE";
939       break;
940
941     case CPP_CLOSE_BRACE:
942       token_type = "CLOSE_BRACE";
943       break;
944
945     case CPP_SEMICOLON:
946       token_type = "SEMICOLON";
947       break;
948
949     case CPP_NAME:
950       token_type = "NAME";
951       break;
952
953     case CPP_EOF:
954       token_type = "EOF";
955       break;
956
957     case CPP_KEYWORD:
958       token_type = "keyword";
959       break;
960
961       /* This is not a token that we know how to handle yet.  */
962     default:
963       break;
964     }
965
966   /* If we have a name for the token, print it out.  Otherwise, we
967      simply give the numeric code.  */
968   if (token_type)
969     fprintf (stream, "%s", token_type);
970   else
971     fprintf (stream, "%d", token->type);
972   /* And, for an identifier, print the identifier name.  */
973   if (token->type == CPP_NAME
974       /* Some keywords have a value that is not an IDENTIFIER_NODE.
975          For example, `struct' is mapped to an INTEGER_CST.  */
976       || (token->type == CPP_KEYWORD
977           && TREE_CODE (token->value) == IDENTIFIER_NODE))
978     fprintf (stream, " %s", IDENTIFIER_POINTER (token->value));
979 }
980
981 /* Start emitting debugging information.  */
982
983 static void
984 cp_lexer_start_debugging (cp_lexer* lexer)
985 {
986   ++lexer->debugging_p;
987 }
988
989 /* Stop emitting debugging information.  */
990
991 static void
992 cp_lexer_stop_debugging (cp_lexer* lexer)
993 {
994   --lexer->debugging_p;
995 }
996
997 \f
998 /* Decl-specifiers.  */
999
1000 static void clear_decl_specs
1001   (cp_decl_specifier_seq *);
1002
1003 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
1004
1005 static void
1006 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
1007 {
1008   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
1009 }
1010
1011 /* Declarators.  */
1012
1013 /* Nothing other than the parser should be creating declarators;
1014    declarators are a semi-syntactic representation of C++ entities.
1015    Other parts of the front end that need to create entities (like
1016    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
1017
1018 static cp_declarator *make_id_declarator
1019   (tree);
1020 static cp_declarator *make_call_declarator
1021   (cp_declarator *, cp_parameter_declarator *, cp_cv_quals, tree);
1022 static cp_declarator *make_array_declarator
1023   (cp_declarator *, tree);
1024 static cp_declarator *make_pointer_declarator
1025   (cp_cv_quals, cp_declarator *);
1026 static cp_declarator *make_reference_declarator
1027   (cp_cv_quals, cp_declarator *);
1028 static cp_parameter_declarator *make_parameter_declarator
1029   (cp_decl_specifier_seq *, cp_declarator *, tree);
1030 static cp_declarator *make_ptrmem_declarator
1031   (cp_cv_quals, tree, cp_declarator *);
1032
1033 cp_declarator *cp_error_declarator;
1034
1035 /* The obstack on which declarators and related data structures are
1036    allocated.  */
1037 static struct obstack declarator_obstack;
1038
1039 /* Alloc BYTES from the declarator memory pool.  */
1040
1041 static inline void *
1042 alloc_declarator (size_t bytes)
1043 {
1044   return obstack_alloc (&declarator_obstack, bytes);
1045 }
1046
1047 /* Allocate a declarator of the indicated KIND.  Clear fields that are
1048    common to all declarators.  */
1049
1050 static cp_declarator *
1051 make_declarator (cp_declarator_kind kind)
1052 {
1053   cp_declarator *declarator;
1054
1055   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
1056   declarator->kind = kind;
1057   declarator->attributes = NULL_TREE;
1058   declarator->declarator = NULL;
1059
1060   return declarator;
1061 }
1062
1063 /* Make a declarator for a generalized identifier.  */
1064
1065 cp_declarator *
1066 make_id_declarator (tree id)
1067 {
1068   cp_declarator *declarator;
1069
1070   declarator = make_declarator (cdk_id);
1071   declarator->u.id.name = id;
1072   declarator->u.id.sfk = sfk_none;
1073
1074   return declarator;
1075 }
1076
1077 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
1078    of modifiers such as const or volatile to apply to the pointer
1079    type, represented as identifiers.  */
1080
1081 cp_declarator *
1082 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
1083 {
1084   cp_declarator *declarator;
1085
1086   declarator = make_declarator (cdk_pointer);
1087   declarator->declarator = target;
1088   declarator->u.pointer.qualifiers = cv_qualifiers;
1089   declarator->u.pointer.class_type = NULL_TREE;
1090
1091   return declarator;
1092 }
1093
1094 /* Like make_pointer_declarator -- but for references.  */
1095
1096 cp_declarator *
1097 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
1098 {
1099   cp_declarator *declarator;
1100
1101   declarator = make_declarator (cdk_reference);
1102   declarator->declarator = target;
1103   declarator->u.pointer.qualifiers = cv_qualifiers;
1104   declarator->u.pointer.class_type = NULL_TREE;
1105
1106   return declarator;
1107 }
1108
1109 /* Like make_pointer_declarator -- but for a pointer to a non-static
1110    member of CLASS_TYPE.  */
1111
1112 cp_declarator *
1113 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
1114                         cp_declarator *pointee)
1115 {
1116   cp_declarator *declarator;
1117
1118   declarator = make_declarator (cdk_ptrmem);
1119   declarator->declarator = pointee;
1120   declarator->u.pointer.qualifiers = cv_qualifiers;
1121   declarator->u.pointer.class_type = class_type;
1122
1123   return declarator;
1124 }
1125
1126 /* Make a declarator for the function given by TARGET, with the
1127    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1128    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1129    indicates what exceptions can be thrown.  */
1130
1131 cp_declarator *
1132 make_call_declarator (cp_declarator *target,
1133                       cp_parameter_declarator *parms,
1134                       cp_cv_quals cv_qualifiers,
1135                       tree exception_specification)
1136 {
1137   cp_declarator *declarator;
1138
1139   declarator = make_declarator (cdk_function);
1140   declarator->declarator = target;
1141   declarator->u.function.parameters = parms;
1142   declarator->u.function.qualifiers = cv_qualifiers;
1143   declarator->u.function.exception_specification = exception_specification;
1144
1145   return declarator;
1146 }
1147
1148 /* Make a declarator for an array of BOUNDS elements, each of which is
1149    defined by ELEMENT.  */
1150
1151 cp_declarator *
1152 make_array_declarator (cp_declarator *element, tree bounds)
1153 {
1154   cp_declarator *declarator;
1155
1156   declarator = make_declarator (cdk_array);
1157   declarator->declarator = element;
1158   declarator->u.array.bounds = bounds;
1159
1160   return declarator;
1161 }
1162
1163 cp_parameter_declarator *no_parameters;
1164
1165 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1166    DECLARATOR and DEFAULT_ARGUMENT.  */
1167
1168 cp_parameter_declarator *
1169 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1170                            cp_declarator *declarator,
1171                            tree default_argument)
1172 {
1173   cp_parameter_declarator *parameter;
1174
1175   parameter = ((cp_parameter_declarator *)
1176                alloc_declarator (sizeof (cp_parameter_declarator)));
1177   parameter->next = NULL;
1178   if (decl_specifiers)
1179     parameter->decl_specifiers = *decl_specifiers;
1180   else
1181     clear_decl_specs (&parameter->decl_specifiers);
1182   parameter->declarator = declarator;
1183   parameter->default_argument = default_argument;
1184   parameter->ellipsis_p = false;
1185
1186   return parameter;
1187 }
1188
1189 /* The parser.  */
1190
1191 /* Overview
1192    --------
1193
1194    A cp_parser parses the token stream as specified by the C++
1195    grammar.  Its job is purely parsing, not semantic analysis.  For
1196    example, the parser breaks the token stream into declarators,
1197    expressions, statements, and other similar syntactic constructs.
1198    It does not check that the types of the expressions on either side
1199    of an assignment-statement are compatible, or that a function is
1200    not declared with a parameter of type `void'.
1201
1202    The parser invokes routines elsewhere in the compiler to perform
1203    semantic analysis and to build up the abstract syntax tree for the
1204    code processed.
1205
1206    The parser (and the template instantiation code, which is, in a
1207    way, a close relative of parsing) are the only parts of the
1208    compiler that should be calling push_scope and pop_scope, or
1209    related functions.  The parser (and template instantiation code)
1210    keeps track of what scope is presently active; everything else
1211    should simply honor that.  (The code that generates static
1212    initializers may also need to set the scope, in order to check
1213    access control correctly when emitting the initializers.)
1214
1215    Methodology
1216    -----------
1217
1218    The parser is of the standard recursive-descent variety.  Upcoming
1219    tokens in the token stream are examined in order to determine which
1220    production to use when parsing a non-terminal.  Some C++ constructs
1221    require arbitrary look ahead to disambiguate.  For example, it is
1222    impossible, in the general case, to tell whether a statement is an
1223    expression or declaration without scanning the entire statement.
1224    Therefore, the parser is capable of "parsing tentatively."  When the
1225    parser is not sure what construct comes next, it enters this mode.
1226    Then, while we attempt to parse the construct, the parser queues up
1227    error messages, rather than issuing them immediately, and saves the
1228    tokens it consumes.  If the construct is parsed successfully, the
1229    parser "commits", i.e., it issues any queued error messages and
1230    the tokens that were being preserved are permanently discarded.
1231    If, however, the construct is not parsed successfully, the parser
1232    rolls back its state completely so that it can resume parsing using
1233    a different alternative.
1234
1235    Future Improvements
1236    -------------------
1237
1238    The performance of the parser could probably be improved
1239    substantially.  Some possible improvements include:
1240
1241      - The expression parser recurses through the various levels of
1242        precedence as specified in the grammar, rather than using an
1243        operator-precedence technique.  Therefore, parsing a simple
1244        identifier requires multiple recursive calls.
1245
1246      - We could often eliminate the need to parse tentatively by
1247        looking ahead a little bit.  In some places, this approach
1248        might not entirely eliminate the need to parse tentatively, but
1249        it might still speed up the average case.  */
1250
1251 /* Flags that are passed to some parsing functions.  These values can
1252    be bitwise-ored together.  */
1253
1254 typedef enum cp_parser_flags
1255 {
1256   /* No flags.  */
1257   CP_PARSER_FLAGS_NONE = 0x0,
1258   /* The construct is optional.  If it is not present, then no error
1259      should be issued.  */
1260   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1261   /* When parsing a type-specifier, do not allow user-defined types.  */
1262   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1263 } cp_parser_flags;
1264
1265 /* The different kinds of declarators we want to parse.  */
1266
1267 typedef enum cp_parser_declarator_kind
1268 {
1269   /* We want an abstract declarator.  */
1270   CP_PARSER_DECLARATOR_ABSTRACT,
1271   /* We want a named declarator.  */
1272   CP_PARSER_DECLARATOR_NAMED,
1273   /* We don't mind, but the name must be an unqualified-id.  */
1274   CP_PARSER_DECLARATOR_EITHER
1275 } cp_parser_declarator_kind;
1276
1277 /* A mapping from a token type to a corresponding tree node type.  */
1278
1279 typedef struct cp_parser_token_tree_map_node
1280 {
1281   /* The token type.  */
1282   ENUM_BITFIELD (cpp_ttype) token_type : 8;
1283   /* The corresponding tree code.  */
1284   ENUM_BITFIELD (tree_code) tree_type : 8;
1285 } cp_parser_token_tree_map_node;
1286
1287 /* A complete map consists of several ordinary entries, followed by a
1288    terminator.  The terminating entry has a token_type of CPP_EOF.  */
1289
1290 typedef cp_parser_token_tree_map_node cp_parser_token_tree_map[];
1291
1292 /* The status of a tentative parse.  */
1293
1294 typedef enum cp_parser_status_kind
1295 {
1296   /* No errors have occurred.  */
1297   CP_PARSER_STATUS_KIND_NO_ERROR,
1298   /* An error has occurred.  */
1299   CP_PARSER_STATUS_KIND_ERROR,
1300   /* We are committed to this tentative parse, whether or not an error
1301      has occurred.  */
1302   CP_PARSER_STATUS_KIND_COMMITTED
1303 } cp_parser_status_kind;
1304
1305 /* Context that is saved and restored when parsing tentatively.  */
1306
1307 typedef struct cp_parser_context GTY (())
1308 {
1309   /* If this is a tentative parsing context, the status of the
1310      tentative parse.  */
1311   enum cp_parser_status_kind status;
1312   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1313      that are looked up in this context must be looked up both in the
1314      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1315      the context of the containing expression.  */
1316   tree object_type;
1317   /* The next parsing context in the stack.  */
1318   struct cp_parser_context *next;
1319 } cp_parser_context;
1320
1321 /* Prototypes.  */
1322
1323 /* Constructors and destructors.  */
1324
1325 static cp_parser_context *cp_parser_context_new
1326   (cp_parser_context *);
1327
1328 /* Class variables.  */
1329
1330 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1331
1332 /* Constructors and destructors.  */
1333
1334 /* Construct a new context.  The context below this one on the stack
1335    is given by NEXT.  */
1336
1337 static cp_parser_context *
1338 cp_parser_context_new (cp_parser_context* next)
1339 {
1340   cp_parser_context *context;
1341
1342   /* Allocate the storage.  */
1343   if (cp_parser_context_free_list != NULL)
1344     {
1345       /* Pull the first entry from the free list.  */
1346       context = cp_parser_context_free_list;
1347       cp_parser_context_free_list = context->next;
1348       memset (context, 0, sizeof (*context));
1349     }
1350   else
1351     context = ggc_alloc_cleared (sizeof (cp_parser_context));
1352   /* No errors have occurred yet in this context.  */
1353   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1354   /* If this is not the bottomost context, copy information that we
1355      need from the previous context.  */
1356   if (next)
1357     {
1358       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1359          expression, then we are parsing one in this context, too.  */
1360       context->object_type = next->object_type;
1361       /* Thread the stack.  */
1362       context->next = next;
1363     }
1364
1365   return context;
1366 }
1367
1368 /* The cp_parser structure represents the C++ parser.  */
1369
1370 typedef struct cp_parser GTY(())
1371 {
1372   /* The lexer from which we are obtaining tokens.  */
1373   cp_lexer *lexer;
1374
1375   /* The scope in which names should be looked up.  If NULL_TREE, then
1376      we look up names in the scope that is currently open in the
1377      source program.  If non-NULL, this is either a TYPE or
1378      NAMESPACE_DECL for the scope in which we should look.
1379
1380      This value is not cleared automatically after a name is looked
1381      up, so we must be careful to clear it before starting a new look
1382      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1383      will look up `Z' in the scope of `X', rather than the current
1384      scope.)  Unfortunately, it is difficult to tell when name lookup
1385      is complete, because we sometimes peek at a token, look it up,
1386      and then decide not to consume it.  */
1387   tree scope;
1388
1389   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1390      last lookup took place.  OBJECT_SCOPE is used if an expression
1391      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1392      respectively.  QUALIFYING_SCOPE is used for an expression of the
1393      form "X::Y"; it refers to X.  */
1394   tree object_scope;
1395   tree qualifying_scope;
1396
1397   /* A stack of parsing contexts.  All but the bottom entry on the
1398      stack will be tentative contexts.
1399
1400      We parse tentatively in order to determine which construct is in
1401      use in some situations.  For example, in order to determine
1402      whether a statement is an expression-statement or a
1403      declaration-statement we parse it tentatively as a
1404      declaration-statement.  If that fails, we then reparse the same
1405      token stream as an expression-statement.  */
1406   cp_parser_context *context;
1407
1408   /* True if we are parsing GNU C++.  If this flag is not set, then
1409      GNU extensions are not recognized.  */
1410   bool allow_gnu_extensions_p;
1411
1412   /* TRUE if the `>' token should be interpreted as the greater-than
1413      operator.  FALSE if it is the end of a template-id or
1414      template-parameter-list.  */
1415   bool greater_than_is_operator_p;
1416
1417   /* TRUE if default arguments are allowed within a parameter list
1418      that starts at this point. FALSE if only a gnu extension makes
1419      them permissible.  */
1420   bool default_arg_ok_p;
1421
1422   /* TRUE if we are parsing an integral constant-expression.  See
1423      [expr.const] for a precise definition.  */
1424   bool integral_constant_expression_p;
1425
1426   /* TRUE if we are parsing an integral constant-expression -- but a
1427      non-constant expression should be permitted as well.  This flag
1428      is used when parsing an array bound so that GNU variable-length
1429      arrays are tolerated.  */
1430   bool allow_non_integral_constant_expression_p;
1431
1432   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1433      been seen that makes the expression non-constant.  */
1434   bool non_integral_constant_expression_p;
1435
1436   /* TRUE if local variable names and `this' are forbidden in the
1437      current context.  */
1438   bool local_variables_forbidden_p;
1439
1440   /* TRUE if the declaration we are parsing is part of a
1441      linkage-specification of the form `extern string-literal
1442      declaration'.  */
1443   bool in_unbraced_linkage_specification_p;
1444
1445   /* TRUE if we are presently parsing a declarator, after the
1446      direct-declarator.  */
1447   bool in_declarator_p;
1448
1449   /* TRUE if we are presently parsing a template-argument-list.  */
1450   bool in_template_argument_list_p;
1451
1452   /* TRUE if we are presently parsing the body of an
1453      iteration-statement.  */
1454   bool in_iteration_statement_p;
1455
1456   /* TRUE if we are presently parsing the body of a switch
1457      statement.  */
1458   bool in_switch_statement_p;
1459
1460   /* TRUE if we are parsing a type-id in an expression context.  In
1461      such a situation, both "type (expr)" and "type (type)" are valid
1462      alternatives.  */
1463   bool in_type_id_in_expr_p;
1464
1465   /* If non-NULL, then we are parsing a construct where new type
1466      definitions are not permitted.  The string stored here will be
1467      issued as an error message if a type is defined.  */
1468   const char *type_definition_forbidden_message;
1469
1470   /* A list of lists. The outer list is a stack, used for member
1471      functions of local classes. At each level there are two sub-list,
1472      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1473      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1474      TREE_VALUE's. The functions are chained in reverse declaration
1475      order.
1476
1477      The TREE_PURPOSE sublist contains those functions with default
1478      arguments that need post processing, and the TREE_VALUE sublist
1479      contains those functions with definitions that need post
1480      processing.
1481
1482      These lists can only be processed once the outermost class being
1483      defined is complete.  */
1484   tree unparsed_functions_queues;
1485
1486   /* The number of classes whose definitions are currently in
1487      progress.  */
1488   unsigned num_classes_being_defined;
1489
1490   /* The number of template parameter lists that apply directly to the
1491      current declaration.  */
1492   unsigned num_template_parameter_lists;
1493 } cp_parser;
1494
1495 /* The type of a function that parses some kind of expression.  */
1496 typedef tree (*cp_parser_expression_fn) (cp_parser *);
1497
1498 /* Prototypes.  */
1499
1500 /* Constructors and destructors.  */
1501
1502 static cp_parser *cp_parser_new
1503   (void);
1504
1505 /* Routines to parse various constructs.
1506
1507    Those that return `tree' will return the error_mark_node (rather
1508    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1509    Sometimes, they will return an ordinary node if error-recovery was
1510    attempted, even though a parse error occurred.  So, to check
1511    whether or not a parse error occurred, you should always use
1512    cp_parser_error_occurred.  If the construct is optional (indicated
1513    either by an `_opt' in the name of the function that does the
1514    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1515    the construct is not present.  */
1516
1517 /* Lexical conventions [gram.lex]  */
1518
1519 static tree cp_parser_identifier
1520   (cp_parser *);
1521
1522 /* Basic concepts [gram.basic]  */
1523
1524 static bool cp_parser_translation_unit
1525   (cp_parser *);
1526
1527 /* Expressions [gram.expr]  */
1528
1529 static tree cp_parser_primary_expression
1530   (cp_parser *, cp_id_kind *, tree *);
1531 static tree cp_parser_id_expression
1532   (cp_parser *, bool, bool, bool *, bool);
1533 static tree cp_parser_unqualified_id
1534   (cp_parser *, bool, bool, bool);
1535 static tree cp_parser_nested_name_specifier_opt
1536   (cp_parser *, bool, bool, bool, bool);
1537 static tree cp_parser_nested_name_specifier
1538   (cp_parser *, bool, bool, bool, bool);
1539 static tree cp_parser_class_or_namespace_name
1540   (cp_parser *, bool, bool, bool, bool, bool);
1541 static tree cp_parser_postfix_expression
1542   (cp_parser *, bool);
1543 static tree cp_parser_postfix_open_square_expression
1544   (cp_parser *, tree, bool);
1545 static tree cp_parser_postfix_dot_deref_expression
1546   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1547 static tree cp_parser_parenthesized_expression_list
1548   (cp_parser *, bool, bool *);
1549 static void cp_parser_pseudo_destructor_name
1550   (cp_parser *, tree *, tree *);
1551 static tree cp_parser_unary_expression
1552   (cp_parser *, bool);
1553 static enum tree_code cp_parser_unary_operator
1554   (cp_token *);
1555 static tree cp_parser_new_expression
1556   (cp_parser *);
1557 static tree cp_parser_new_placement
1558   (cp_parser *);
1559 static tree cp_parser_new_type_id
1560   (cp_parser *, tree *);
1561 static cp_declarator *cp_parser_new_declarator_opt
1562   (cp_parser *);
1563 static cp_declarator *cp_parser_direct_new_declarator
1564   (cp_parser *);
1565 static tree cp_parser_new_initializer
1566   (cp_parser *);
1567 static tree cp_parser_delete_expression
1568   (cp_parser *);
1569 static tree cp_parser_cast_expression
1570   (cp_parser *, bool);
1571 static tree cp_parser_pm_expression
1572   (cp_parser *);
1573 static tree cp_parser_multiplicative_expression
1574   (cp_parser *);
1575 static tree cp_parser_additive_expression
1576   (cp_parser *);
1577 static tree cp_parser_shift_expression
1578   (cp_parser *);
1579 static tree cp_parser_relational_expression
1580   (cp_parser *);
1581 static tree cp_parser_equality_expression
1582   (cp_parser *);
1583 static tree cp_parser_and_expression
1584   (cp_parser *);
1585 static tree cp_parser_exclusive_or_expression
1586   (cp_parser *);
1587 static tree cp_parser_inclusive_or_expression
1588   (cp_parser *);
1589 static tree cp_parser_logical_and_expression
1590   (cp_parser *);
1591 static tree cp_parser_logical_or_expression
1592   (cp_parser *);
1593 static tree cp_parser_question_colon_clause
1594   (cp_parser *, tree);
1595 static tree cp_parser_assignment_expression
1596   (cp_parser *);
1597 static enum tree_code cp_parser_assignment_operator_opt
1598   (cp_parser *);
1599 static tree cp_parser_expression
1600   (cp_parser *);
1601 static tree cp_parser_constant_expression
1602   (cp_parser *, bool, bool *);
1603 static tree cp_parser_builtin_offsetof
1604   (cp_parser *);
1605
1606 /* Statements [gram.stmt.stmt]  */
1607
1608 static void cp_parser_statement
1609   (cp_parser *, tree);
1610 static tree cp_parser_labeled_statement
1611   (cp_parser *, tree);
1612 static tree cp_parser_expression_statement
1613   (cp_parser *, tree);
1614 static tree cp_parser_compound_statement
1615   (cp_parser *, tree, bool);
1616 static void cp_parser_statement_seq_opt
1617   (cp_parser *, tree);
1618 static tree cp_parser_selection_statement
1619   (cp_parser *);
1620 static tree cp_parser_condition
1621   (cp_parser *);
1622 static tree cp_parser_iteration_statement
1623   (cp_parser *);
1624 static void cp_parser_for_init_statement
1625   (cp_parser *);
1626 static tree cp_parser_jump_statement
1627   (cp_parser *);
1628 static void cp_parser_declaration_statement
1629   (cp_parser *);
1630
1631 static tree cp_parser_implicitly_scoped_statement
1632   (cp_parser *);
1633 static void cp_parser_already_scoped_statement
1634   (cp_parser *);
1635
1636 /* Declarations [gram.dcl.dcl] */
1637
1638 static void cp_parser_declaration_seq_opt
1639   (cp_parser *);
1640 static void cp_parser_declaration
1641   (cp_parser *);
1642 static void cp_parser_block_declaration
1643   (cp_parser *, bool);
1644 static void cp_parser_simple_declaration
1645   (cp_parser *, bool);
1646 static void cp_parser_decl_specifier_seq
1647   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1648 static tree cp_parser_storage_class_specifier_opt
1649   (cp_parser *);
1650 static tree cp_parser_function_specifier_opt
1651   (cp_parser *, cp_decl_specifier_seq *);
1652 static tree cp_parser_type_specifier
1653   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1654    int *, bool *);
1655 static tree cp_parser_simple_type_specifier
1656   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1657 static tree cp_parser_type_name
1658   (cp_parser *);
1659 static tree cp_parser_elaborated_type_specifier
1660   (cp_parser *, bool, bool);
1661 static tree cp_parser_enum_specifier
1662   (cp_parser *);
1663 static void cp_parser_enumerator_list
1664   (cp_parser *, tree);
1665 static void cp_parser_enumerator_definition
1666   (cp_parser *, tree);
1667 static tree cp_parser_namespace_name
1668   (cp_parser *);
1669 static void cp_parser_namespace_definition
1670   (cp_parser *);
1671 static void cp_parser_namespace_body
1672   (cp_parser *);
1673 static tree cp_parser_qualified_namespace_specifier
1674   (cp_parser *);
1675 static void cp_parser_namespace_alias_definition
1676   (cp_parser *);
1677 static void cp_parser_using_declaration
1678   (cp_parser *);
1679 static void cp_parser_using_directive
1680   (cp_parser *);
1681 static void cp_parser_asm_definition
1682   (cp_parser *);
1683 static void cp_parser_linkage_specification
1684   (cp_parser *);
1685
1686 /* Declarators [gram.dcl.decl] */
1687
1688 static tree cp_parser_init_declarator
1689   (cp_parser *, cp_decl_specifier_seq *, bool, bool, int, bool *);
1690 static cp_declarator *cp_parser_declarator
1691   (cp_parser *, cp_parser_declarator_kind, int *, bool *);
1692 static cp_declarator *cp_parser_direct_declarator
1693   (cp_parser *, cp_parser_declarator_kind, int *);
1694 static enum tree_code cp_parser_ptr_operator
1695   (cp_parser *, tree *, cp_cv_quals *);
1696 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1697   (cp_parser *);
1698 static tree cp_parser_declarator_id
1699   (cp_parser *);
1700 static tree cp_parser_type_id
1701   (cp_parser *);
1702 static void cp_parser_type_specifier_seq
1703   (cp_parser *, cp_decl_specifier_seq *);
1704 static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1705   (cp_parser *);
1706 static cp_parameter_declarator *cp_parser_parameter_declaration_list
1707   (cp_parser *, bool *);
1708 static cp_parameter_declarator *cp_parser_parameter_declaration
1709   (cp_parser *, bool, bool *);
1710 static void cp_parser_function_body
1711   (cp_parser *);
1712 static tree cp_parser_initializer
1713   (cp_parser *, bool *, bool *);
1714 static tree cp_parser_initializer_clause
1715   (cp_parser *, bool *);
1716 static tree cp_parser_initializer_list
1717   (cp_parser *, bool *);
1718
1719 static bool cp_parser_ctor_initializer_opt_and_function_body
1720   (cp_parser *);
1721
1722 /* Classes [gram.class] */
1723
1724 static tree cp_parser_class_name
1725   (cp_parser *, bool, bool, bool, bool, bool, bool);
1726 static tree cp_parser_class_specifier
1727   (cp_parser *);
1728 static tree cp_parser_class_head
1729   (cp_parser *, bool *, tree *);
1730 static enum tag_types cp_parser_class_key
1731   (cp_parser *);
1732 static void cp_parser_member_specification_opt
1733   (cp_parser *);
1734 static void cp_parser_member_declaration
1735   (cp_parser *);
1736 static tree cp_parser_pure_specifier
1737   (cp_parser *);
1738 static tree cp_parser_constant_initializer
1739   (cp_parser *);
1740
1741 /* Derived classes [gram.class.derived] */
1742
1743 static tree cp_parser_base_clause
1744   (cp_parser *);
1745 static tree cp_parser_base_specifier
1746   (cp_parser *);
1747
1748 /* Special member functions [gram.special] */
1749
1750 static tree cp_parser_conversion_function_id
1751   (cp_parser *);
1752 static tree cp_parser_conversion_type_id
1753   (cp_parser *);
1754 static cp_declarator *cp_parser_conversion_declarator_opt
1755   (cp_parser *);
1756 static bool cp_parser_ctor_initializer_opt
1757   (cp_parser *);
1758 static void cp_parser_mem_initializer_list
1759   (cp_parser *);
1760 static tree cp_parser_mem_initializer
1761   (cp_parser *);
1762 static tree cp_parser_mem_initializer_id
1763   (cp_parser *);
1764
1765 /* Overloading [gram.over] */
1766
1767 static tree cp_parser_operator_function_id
1768   (cp_parser *);
1769 static tree cp_parser_operator
1770   (cp_parser *);
1771
1772 /* Templates [gram.temp] */
1773
1774 static void cp_parser_template_declaration
1775   (cp_parser *, bool);
1776 static tree cp_parser_template_parameter_list
1777   (cp_parser *);
1778 static tree cp_parser_template_parameter
1779   (cp_parser *, bool *);
1780 static tree cp_parser_type_parameter
1781   (cp_parser *);
1782 static tree cp_parser_template_id
1783   (cp_parser *, bool, bool, bool);
1784 static tree cp_parser_template_name
1785   (cp_parser *, bool, bool, bool, bool *);
1786 static tree cp_parser_template_argument_list
1787   (cp_parser *);
1788 static tree cp_parser_template_argument
1789   (cp_parser *);
1790 static void cp_parser_explicit_instantiation
1791   (cp_parser *);
1792 static void cp_parser_explicit_specialization
1793   (cp_parser *);
1794
1795 /* Exception handling [gram.exception] */
1796
1797 static tree cp_parser_try_block
1798   (cp_parser *);
1799 static bool cp_parser_function_try_block
1800   (cp_parser *);
1801 static void cp_parser_handler_seq
1802   (cp_parser *);
1803 static void cp_parser_handler
1804   (cp_parser *);
1805 static tree cp_parser_exception_declaration
1806   (cp_parser *);
1807 static tree cp_parser_throw_expression
1808   (cp_parser *);
1809 static tree cp_parser_exception_specification_opt
1810   (cp_parser *);
1811 static tree cp_parser_type_id_list
1812   (cp_parser *);
1813
1814 /* GNU Extensions */
1815
1816 static tree cp_parser_asm_specification_opt
1817   (cp_parser *);
1818 static tree cp_parser_asm_operand_list
1819   (cp_parser *);
1820 static tree cp_parser_asm_clobber_list
1821   (cp_parser *);
1822 static tree cp_parser_attributes_opt
1823   (cp_parser *);
1824 static tree cp_parser_attribute_list
1825   (cp_parser *);
1826 static bool cp_parser_extension_opt
1827   (cp_parser *, int *);
1828 static void cp_parser_label_declaration
1829   (cp_parser *);
1830
1831 /* Utility Routines */
1832
1833 static tree cp_parser_lookup_name
1834   (cp_parser *, tree, bool, bool, bool, bool);
1835 static tree cp_parser_lookup_name_simple
1836   (cp_parser *, tree);
1837 static tree cp_parser_maybe_treat_template_as_class
1838   (tree, bool);
1839 static bool cp_parser_check_declarator_template_parameters
1840   (cp_parser *, cp_declarator *);
1841 static bool cp_parser_check_template_parameters
1842   (cp_parser *, unsigned);
1843 static tree cp_parser_simple_cast_expression
1844   (cp_parser *);
1845 static tree cp_parser_binary_expression
1846   (cp_parser *, const cp_parser_token_tree_map, cp_parser_expression_fn);
1847 static tree cp_parser_global_scope_opt
1848   (cp_parser *, bool);
1849 static bool cp_parser_constructor_declarator_p
1850   (cp_parser *, bool);
1851 static tree cp_parser_function_definition_from_specifiers_and_declarator
1852   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1853 static tree cp_parser_function_definition_after_declarator
1854   (cp_parser *, bool);
1855 static void cp_parser_template_declaration_after_export
1856   (cp_parser *, bool);
1857 static tree cp_parser_single_declaration
1858   (cp_parser *, bool, bool *);
1859 static tree cp_parser_functional_cast
1860   (cp_parser *, tree);
1861 static tree cp_parser_save_member_function_body
1862   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1863 static tree cp_parser_enclosed_template_argument_list
1864   (cp_parser *);
1865 static void cp_parser_save_default_args
1866   (cp_parser *, tree);
1867 static void cp_parser_late_parsing_for_member
1868   (cp_parser *, tree);
1869 static void cp_parser_late_parsing_default_args
1870   (cp_parser *, tree);
1871 static tree cp_parser_sizeof_operand
1872   (cp_parser *, enum rid);
1873 static bool cp_parser_declares_only_class_p
1874   (cp_parser *);
1875 static void cp_parser_set_storage_class
1876   (cp_decl_specifier_seq *, cp_storage_class);
1877 static void cp_parser_set_decl_spec_type
1878   (cp_decl_specifier_seq *, tree, bool);
1879 static bool cp_parser_friend_p
1880   (const cp_decl_specifier_seq *);
1881 static cp_token *cp_parser_require
1882   (cp_parser *, enum cpp_ttype, const char *);
1883 static cp_token *cp_parser_require_keyword
1884   (cp_parser *, enum rid, const char *);
1885 static bool cp_parser_token_starts_function_definition_p
1886   (cp_token *);
1887 static bool cp_parser_next_token_starts_class_definition_p
1888   (cp_parser *);
1889 static bool cp_parser_next_token_ends_template_argument_p
1890   (cp_parser *);
1891 static bool cp_parser_nth_token_starts_template_argument_list_p
1892   (cp_parser *, size_t);
1893 static enum tag_types cp_parser_token_is_class_key
1894   (cp_token *);
1895 static void cp_parser_check_class_key
1896   (enum tag_types, tree type);
1897 static void cp_parser_check_access_in_redeclaration
1898   (tree type);
1899 static bool cp_parser_optional_template_keyword
1900   (cp_parser *);
1901 static void cp_parser_pre_parsed_nested_name_specifier
1902   (cp_parser *);
1903 static void cp_parser_cache_group
1904   (cp_parser *, cp_token_cache *, enum cpp_ttype, unsigned);
1905 static void cp_parser_parse_tentatively
1906   (cp_parser *);
1907 static void cp_parser_commit_to_tentative_parse
1908   (cp_parser *);
1909 static void cp_parser_abort_tentative_parse
1910   (cp_parser *);
1911 static bool cp_parser_parse_definitely
1912   (cp_parser *);
1913 static inline bool cp_parser_parsing_tentatively
1914   (cp_parser *);
1915 static bool cp_parser_committed_to_tentative_parse
1916   (cp_parser *);
1917 static void cp_parser_error
1918   (cp_parser *, const char *);
1919 static void cp_parser_name_lookup_error
1920   (cp_parser *, tree, tree, const char *);
1921 static bool cp_parser_simulate_error
1922   (cp_parser *);
1923 static void cp_parser_check_type_definition
1924   (cp_parser *);
1925 static void cp_parser_check_for_definition_in_return_type
1926   (cp_declarator *, int);
1927 static void cp_parser_check_for_invalid_template_id
1928   (cp_parser *, tree);
1929 static bool cp_parser_non_integral_constant_expression
1930   (cp_parser *, const char *);
1931 static void cp_parser_diagnose_invalid_type_name
1932   (cp_parser *, tree, tree);
1933 static bool cp_parser_parse_and_diagnose_invalid_type_name
1934   (cp_parser *);
1935 static int cp_parser_skip_to_closing_parenthesis
1936   (cp_parser *, bool, bool, bool);
1937 static void cp_parser_skip_to_end_of_statement
1938   (cp_parser *);
1939 static void cp_parser_consume_semicolon_at_end_of_statement
1940   (cp_parser *);
1941 static void cp_parser_skip_to_end_of_block_or_statement
1942   (cp_parser *);
1943 static void cp_parser_skip_to_closing_brace
1944   (cp_parser *);
1945 static void cp_parser_skip_until_found
1946   (cp_parser *, enum cpp_ttype, const char *);
1947 static bool cp_parser_error_occurred
1948   (cp_parser *);
1949 static bool cp_parser_allow_gnu_extensions_p
1950   (cp_parser *);
1951 static bool cp_parser_is_string_literal
1952   (cp_token *);
1953 static bool cp_parser_is_keyword
1954   (cp_token *, enum rid);
1955 static tree cp_parser_make_typename_type
1956   (cp_parser *, tree, tree);
1957
1958 /* Returns nonzero if we are parsing tentatively.  */
1959
1960 static inline bool
1961 cp_parser_parsing_tentatively (cp_parser* parser)
1962 {
1963   return parser->context->next != NULL;
1964 }
1965
1966 /* Returns nonzero if TOKEN is a string literal.  */
1967
1968 static bool
1969 cp_parser_is_string_literal (cp_token* token)
1970 {
1971   return (token->type == CPP_STRING || token->type == CPP_WSTRING);
1972 }
1973
1974 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
1975
1976 static bool
1977 cp_parser_is_keyword (cp_token* token, enum rid keyword)
1978 {
1979   return token->keyword == keyword;
1980 }
1981
1982 /* Issue the indicated error MESSAGE.  */
1983
1984 static void
1985 cp_parser_error (cp_parser* parser, const char* message)
1986 {
1987   /* Output the MESSAGE -- unless we're parsing tentatively.  */
1988   if (!cp_parser_simulate_error (parser))
1989     {
1990       cp_token *token;
1991       token = cp_lexer_peek_token (parser->lexer);
1992       c_parse_error (message,
1993                      /* Because c_parser_error does not understand
1994                         CPP_KEYWORD, keywords are treated like
1995                         identifiers.  */
1996                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
1997                      token->value);
1998     }
1999 }
2000
2001 /* Issue an error about name-lookup failing.  NAME is the
2002    IDENTIFIER_NODE DECL is the result of
2003    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2004    the thing that we hoped to find.  */
2005
2006 static void
2007 cp_parser_name_lookup_error (cp_parser* parser,
2008                              tree name,
2009                              tree decl,
2010                              const char* desired)
2011 {
2012   /* If name lookup completely failed, tell the user that NAME was not
2013      declared.  */
2014   if (decl == error_mark_node)
2015     {
2016       if (parser->scope && parser->scope != global_namespace)
2017         error ("`%D::%D' has not been declared",
2018                parser->scope, name);
2019       else if (parser->scope == global_namespace)
2020         error ("`::%D' has not been declared", name);
2021       else
2022         error ("`%D' has not been declared", name);
2023     }
2024   else if (parser->scope && parser->scope != global_namespace)
2025     error ("`%D::%D' %s", parser->scope, name, desired);
2026   else if (parser->scope == global_namespace)
2027     error ("`::%D' %s", name, desired);
2028   else
2029     error ("`%D' %s", name, desired);
2030 }
2031
2032 /* If we are parsing tentatively, remember that an error has occurred
2033    during this tentative parse.  Returns true if the error was
2034    simulated; false if a message should be issued by the caller.  */
2035
2036 static bool
2037 cp_parser_simulate_error (cp_parser* parser)
2038 {
2039   if (cp_parser_parsing_tentatively (parser)
2040       && !cp_parser_committed_to_tentative_parse (parser))
2041     {
2042       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2043       return true;
2044     }
2045   return false;
2046 }
2047
2048 /* This function is called when a type is defined.  If type
2049    definitions are forbidden at this point, an error message is
2050    issued.  */
2051
2052 static void
2053 cp_parser_check_type_definition (cp_parser* parser)
2054 {
2055   /* If types are forbidden here, issue a message.  */
2056   if (parser->type_definition_forbidden_message)
2057     /* Use `%s' to print the string in case there are any escape
2058        characters in the message.  */
2059     error ("%s", parser->type_definition_forbidden_message);
2060 }
2061
2062 /* This function is called when a declaration is parsed.  If
2063    DECLARATOR is a function declarator and DECLARES_CLASS_OR_ENUM
2064    indicates that a type was defined in the decl-specifiers for DECL,
2065    then an error is issued.  */
2066
2067 static void
2068 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2069                                                int declares_class_or_enum)
2070 {
2071   /* [dcl.fct] forbids type definitions in return types.
2072      Unfortunately, it's not easy to know whether or not we are
2073      processing a return type until after the fact.  */
2074   while (declarator
2075          && (declarator->kind == cdk_pointer
2076              || declarator->kind == cdk_reference
2077              || declarator->kind == cdk_ptrmem))
2078     declarator = declarator->declarator;
2079   if (declarator
2080       && declarator->kind == cdk_function
2081       && declares_class_or_enum & 2)
2082     error ("new types may not be defined in a return type");
2083 }
2084
2085 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2086    "<" in any valid C++ program.  If the next token is indeed "<",
2087    issue a message warning the user about what appears to be an
2088    invalid attempt to form a template-id.  */
2089
2090 static void
2091 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2092                                          tree type)
2093 {
2094   ptrdiff_t start;
2095   cp_token *token;
2096
2097   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2098     {
2099       if (TYPE_P (type))
2100         error ("`%T' is not a template", type);
2101       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2102         error ("`%E' is not a template", type);
2103       else
2104         error ("invalid template-id");
2105       /* Remember the location of the invalid "<".  */
2106       if (cp_parser_parsing_tentatively (parser)
2107           && !cp_parser_committed_to_tentative_parse (parser))
2108         {
2109           token = cp_lexer_peek_token (parser->lexer);
2110           token = cp_lexer_prev_token (parser->lexer, token);
2111           start = cp_lexer_token_difference (parser->lexer,
2112                                              parser->lexer->first_token,
2113                                              token);
2114         }
2115       else
2116         start = -1;
2117       /* Consume the "<".  */
2118       cp_lexer_consume_token (parser->lexer);
2119       /* Parse the template arguments.  */
2120       cp_parser_enclosed_template_argument_list (parser);
2121       /* Permanently remove the invalid template arguments so that
2122          this error message is not issued again.  */
2123       if (start >= 0)
2124         {
2125           token = cp_lexer_advance_token (parser->lexer,
2126                                           parser->lexer->first_token,
2127                                           start);
2128           cp_lexer_purge_tokens_after (parser->lexer, token);
2129         }
2130     }
2131 }
2132
2133 /* If parsing an integral constant-expression, issue an error message
2134    about the fact that THING appeared and return true.  Otherwise,
2135    return false, marking the current expression as non-constant.  */
2136
2137 static bool
2138 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2139                                             const char *thing)
2140 {
2141   if (parser->integral_constant_expression_p)
2142     {
2143       if (!parser->allow_non_integral_constant_expression_p)
2144         {
2145           error ("%s cannot appear in a constant-expression", thing);
2146           return true;
2147         }
2148       parser->non_integral_constant_expression_p = true;
2149     }
2150   return false;
2151 }
2152
2153 /* Emit a diagnostic for an invalid type name. Consider also if it is
2154    qualified or not and the result of a lookup, to provide a better
2155    message.  */
2156
2157 static void
2158 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
2159 {
2160   tree decl, old_scope;
2161   /* Try to lookup the identifier.  */
2162   old_scope = parser->scope;
2163   parser->scope = scope;
2164   decl = cp_parser_lookup_name_simple (parser, id);
2165   parser->scope = old_scope;
2166   /* If the lookup found a template-name, it means that the user forgot
2167   to specify an argument list. Emit an useful error message.  */
2168   if (TREE_CODE (decl) == TEMPLATE_DECL)
2169     error ("invalid use of template-name `%E' without an argument list",
2170       decl);
2171   else if (!parser->scope)
2172     {
2173       /* Issue an error message.  */
2174       error ("`%E' does not name a type", id);
2175       /* If we're in a template class, it's possible that the user was
2176          referring to a type from a base class.  For example:
2177
2178            template <typename T> struct A { typedef T X; };
2179            template <typename T> struct B : public A<T> { X x; };
2180
2181          The user should have said "typename A<T>::X".  */
2182       if (processing_template_decl && current_class_type)
2183         {
2184           tree b;
2185
2186           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2187                b;
2188                b = TREE_CHAIN (b))
2189             {
2190               tree base_type = BINFO_TYPE (b);
2191               if (CLASS_TYPE_P (base_type)
2192                   && dependent_type_p (base_type))
2193                 {
2194                   tree field;
2195                   /* Go from a particular instantiation of the
2196                      template (which will have an empty TYPE_FIELDs),
2197                      to the main version.  */
2198                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2199                   for (field = TYPE_FIELDS (base_type);
2200                        field;
2201                        field = TREE_CHAIN (field))
2202                     if (TREE_CODE (field) == TYPE_DECL
2203                         && DECL_NAME (field) == id)
2204                       {
2205                         inform ("(perhaps `typename %T::%E' was intended)",
2206                                 BINFO_TYPE (b), id);
2207                         break;
2208                       }
2209                   if (field)
2210                     break;
2211                 }
2212             }
2213         }
2214     }
2215   /* Here we diagnose qualified-ids where the scope is actually correct,
2216      but the identifier does not resolve to a valid type name.  */
2217   else
2218     {
2219       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2220         error ("`%E' in namespace `%E' does not name a type",
2221                id, parser->scope);
2222       else if (TYPE_P (parser->scope))
2223         error ("`%E' in class `%T' does not name a type",
2224                id, parser->scope);
2225       else
2226         abort();
2227     }
2228 }
2229
2230 /* Check for a common situation where a type-name should be present,
2231    but is not, and issue a sensible error message.  Returns true if an
2232    invalid type-name was detected.
2233
2234    The situation handled by this function are variable declarations of the
2235    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2236    Usually, `ID' should name a type, but if we got here it means that it
2237    does not. We try to emit the best possible error message depending on
2238    how exactly the id-expression looks like.
2239 */
2240
2241 static bool
2242 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2243 {
2244   tree id;
2245
2246   cp_parser_parse_tentatively (parser);
2247   id = cp_parser_id_expression (parser,
2248                                 /*template_keyword_p=*/false,
2249                                 /*check_dependency_p=*/true,
2250                                 /*template_p=*/NULL,
2251                                 /*declarator_p=*/true);
2252   /* After the id-expression, there should be a plain identifier,
2253      otherwise this is not a simple variable declaration. Also, if
2254      the scope is dependent, we cannot do much.  */
2255   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2256       || (parser->scope && TYPE_P (parser->scope)
2257           && dependent_type_p (parser->scope)))
2258     {
2259       cp_parser_abort_tentative_parse (parser);
2260       return false;
2261     }
2262   if (!cp_parser_parse_definitely (parser))
2263     return false;
2264
2265   /* If we got here, this cannot be a valid variable declaration, thus
2266      the cp_parser_id_expression must have resolved to a plain identifier
2267      node (not a TYPE_DECL or TEMPLATE_ID_EXPR).  */
2268   my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 20030203);
2269   /* Emit a diagnostic for the invalid type.  */
2270   cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2271   /* Skip to the end of the declaration; there's no point in
2272      trying to process it.  */
2273   cp_parser_skip_to_end_of_block_or_statement (parser);
2274   return true;
2275 }
2276
2277 /* Consume tokens up to, and including, the next non-nested closing `)'.
2278    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2279    are doing error recovery. Returns -1 if OR_COMMA is true and we
2280    found an unnested comma.  */
2281
2282 static int
2283 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2284                                        bool recovering,
2285                                        bool or_comma,
2286                                        bool consume_paren)
2287 {
2288   unsigned paren_depth = 0;
2289   unsigned brace_depth = 0;
2290   int saved_c_lex_string_translate = c_lex_string_translate;
2291   int result;
2292
2293   if (recovering && !or_comma && cp_parser_parsing_tentatively (parser)
2294       && !cp_parser_committed_to_tentative_parse (parser))
2295     return 0;
2296
2297   if (! recovering)
2298     /* If we're looking ahead, keep both translated and untranslated
2299        strings.  */
2300     c_lex_string_translate = -1;
2301
2302   while (true)
2303     {
2304       cp_token *token;
2305
2306       /* If we've run out of tokens, then there is no closing `)'.  */
2307       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2308         {
2309           result = 0;
2310           break;
2311         }
2312
2313       token = cp_lexer_peek_token (parser->lexer);
2314
2315       /* This matches the processing in skip_to_end_of_statement.  */
2316       if (token->type == CPP_SEMICOLON && !brace_depth)
2317         {
2318           result = 0;
2319           break;
2320         }
2321       if (token->type == CPP_OPEN_BRACE)
2322         ++brace_depth;
2323       if (token->type == CPP_CLOSE_BRACE)
2324         {
2325           if (!brace_depth--)
2326             {
2327               result = 0;
2328               break;
2329             }
2330         }
2331       if (recovering && or_comma && token->type == CPP_COMMA
2332           && !brace_depth && !paren_depth)
2333         {
2334           result = -1;
2335           break;
2336         }
2337
2338       if (!brace_depth)
2339         {
2340           /* If it is an `(', we have entered another level of nesting.  */
2341           if (token->type == CPP_OPEN_PAREN)
2342             ++paren_depth;
2343           /* If it is a `)', then we might be done.  */
2344           else if (token->type == CPP_CLOSE_PAREN && !paren_depth--)
2345             {
2346               if (consume_paren)
2347                 cp_lexer_consume_token (parser->lexer);
2348               {
2349                 result = 1;
2350                 break;
2351               }
2352             }
2353         }
2354
2355       /* Consume the token.  */
2356       cp_lexer_consume_token (parser->lexer);
2357     }
2358
2359   c_lex_string_translate = saved_c_lex_string_translate;
2360   return result;
2361 }
2362
2363 /* Consume tokens until we reach the end of the current statement.
2364    Normally, that will be just before consuming a `;'.  However, if a
2365    non-nested `}' comes first, then we stop before consuming that.  */
2366
2367 static void
2368 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2369 {
2370   unsigned nesting_depth = 0;
2371
2372   while (true)
2373     {
2374       cp_token *token;
2375
2376       /* Peek at the next token.  */
2377       token = cp_lexer_peek_token (parser->lexer);
2378       /* If we've run out of tokens, stop.  */
2379       if (token->type == CPP_EOF)
2380         break;
2381       /* If the next token is a `;', we have reached the end of the
2382          statement.  */
2383       if (token->type == CPP_SEMICOLON && !nesting_depth)
2384         break;
2385       /* If the next token is a non-nested `}', then we have reached
2386          the end of the current block.  */
2387       if (token->type == CPP_CLOSE_BRACE)
2388         {
2389           /* If this is a non-nested `}', stop before consuming it.
2390              That way, when confronted with something like:
2391
2392                { 3 + }
2393
2394              we stop before consuming the closing `}', even though we
2395              have not yet reached a `;'.  */
2396           if (nesting_depth == 0)
2397             break;
2398           /* If it is the closing `}' for a block that we have
2399              scanned, stop -- but only after consuming the token.
2400              That way given:
2401
2402                 void f g () { ... }
2403                 typedef int I;
2404
2405              we will stop after the body of the erroneously declared
2406              function, but before consuming the following `typedef'
2407              declaration.  */
2408           if (--nesting_depth == 0)
2409             {
2410               cp_lexer_consume_token (parser->lexer);
2411               break;
2412             }
2413         }
2414       /* If it the next token is a `{', then we are entering a new
2415          block.  Consume the entire block.  */
2416       else if (token->type == CPP_OPEN_BRACE)
2417         ++nesting_depth;
2418       /* Consume the token.  */
2419       cp_lexer_consume_token (parser->lexer);
2420     }
2421 }
2422
2423 /* This function is called at the end of a statement or declaration.
2424    If the next token is a semicolon, it is consumed; otherwise, error
2425    recovery is attempted.  */
2426
2427 static void
2428 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2429 {
2430   /* Look for the trailing `;'.  */
2431   if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2432     {
2433       /* If there is additional (erroneous) input, skip to the end of
2434          the statement.  */
2435       cp_parser_skip_to_end_of_statement (parser);
2436       /* If the next token is now a `;', consume it.  */
2437       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2438         cp_lexer_consume_token (parser->lexer);
2439     }
2440 }
2441
2442 /* Skip tokens until we have consumed an entire block, or until we
2443    have consumed a non-nested `;'.  */
2444
2445 static void
2446 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2447 {
2448   unsigned nesting_depth = 0;
2449
2450   while (true)
2451     {
2452       cp_token *token;
2453
2454       /* Peek at the next token.  */
2455       token = cp_lexer_peek_token (parser->lexer);
2456       /* If we've run out of tokens, stop.  */
2457       if (token->type == CPP_EOF)
2458         break;
2459       /* If the next token is a `;', we have reached the end of the
2460          statement.  */
2461       if (token->type == CPP_SEMICOLON && !nesting_depth)
2462         {
2463           /* Consume the `;'.  */
2464           cp_lexer_consume_token (parser->lexer);
2465           break;
2466         }
2467       /* Consume the token.  */
2468       token = cp_lexer_consume_token (parser->lexer);
2469       /* If the next token is a non-nested `}', then we have reached
2470          the end of the current block.  */
2471       if (token->type == CPP_CLOSE_BRACE
2472           && (nesting_depth == 0 || --nesting_depth == 0))
2473         break;
2474       /* If it the next token is a `{', then we are entering a new
2475          block.  Consume the entire block.  */
2476       if (token->type == CPP_OPEN_BRACE)
2477         ++nesting_depth;
2478     }
2479 }
2480
2481 /* Skip tokens until a non-nested closing curly brace is the next
2482    token.  */
2483
2484 static void
2485 cp_parser_skip_to_closing_brace (cp_parser *parser)
2486 {
2487   unsigned nesting_depth = 0;
2488
2489   while (true)
2490     {
2491       cp_token *token;
2492
2493       /* Peek at the next token.  */
2494       token = cp_lexer_peek_token (parser->lexer);
2495       /* If we've run out of tokens, stop.  */
2496       if (token->type == CPP_EOF)
2497         break;
2498       /* If the next token is a non-nested `}', then we have reached
2499          the end of the current block.  */
2500       if (token->type == CPP_CLOSE_BRACE && nesting_depth-- == 0)
2501         break;
2502       /* If it the next token is a `{', then we are entering a new
2503          block.  Consume the entire block.  */
2504       else if (token->type == CPP_OPEN_BRACE)
2505         ++nesting_depth;
2506       /* Consume the token.  */
2507       cp_lexer_consume_token (parser->lexer);
2508     }
2509 }
2510
2511 /* This is a simple wrapper around make_typename_type. When the id is
2512    an unresolved identifier node, we can provide a superior diagnostic
2513    using cp_parser_diagnose_invalid_type_name.  */
2514
2515 static tree
2516 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2517 {
2518   tree result;
2519   if (TREE_CODE (id) == IDENTIFIER_NODE)
2520     {
2521       result = make_typename_type (scope, id, /*complain=*/0);
2522       if (result == error_mark_node)
2523         cp_parser_diagnose_invalid_type_name (parser, scope, id);
2524       return result;
2525     }
2526   return make_typename_type (scope, id, tf_error);
2527 }
2528
2529
2530 /* Create a new C++ parser.  */
2531
2532 static cp_parser *
2533 cp_parser_new (void)
2534 {
2535   cp_parser *parser;
2536   cp_lexer *lexer;
2537
2538   /* cp_lexer_new_main is called before calling ggc_alloc because
2539      cp_lexer_new_main might load a PCH file.  */
2540   lexer = cp_lexer_new_main ();
2541
2542   parser = ggc_alloc_cleared (sizeof (cp_parser));
2543   parser->lexer = lexer;
2544   parser->context = cp_parser_context_new (NULL);
2545
2546   /* For now, we always accept GNU extensions.  */
2547   parser->allow_gnu_extensions_p = 1;
2548
2549   /* The `>' token is a greater-than operator, not the end of a
2550      template-id.  */
2551   parser->greater_than_is_operator_p = true;
2552
2553   parser->default_arg_ok_p = true;
2554
2555   /* We are not parsing a constant-expression.  */
2556   parser->integral_constant_expression_p = false;
2557   parser->allow_non_integral_constant_expression_p = false;
2558   parser->non_integral_constant_expression_p = false;
2559
2560   /* Local variable names are not forbidden.  */
2561   parser->local_variables_forbidden_p = false;
2562
2563   /* We are not processing an `extern "C"' declaration.  */
2564   parser->in_unbraced_linkage_specification_p = false;
2565
2566   /* We are not processing a declarator.  */
2567   parser->in_declarator_p = false;
2568
2569   /* We are not processing a template-argument-list.  */
2570   parser->in_template_argument_list_p = false;
2571
2572   /* We are not in an iteration statement.  */
2573   parser->in_iteration_statement_p = false;
2574
2575   /* We are not in a switch statement.  */
2576   parser->in_switch_statement_p = false;
2577
2578   /* We are not parsing a type-id inside an expression.  */
2579   parser->in_type_id_in_expr_p = false;
2580
2581   /* The unparsed function queue is empty.  */
2582   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2583
2584   /* There are no classes being defined.  */
2585   parser->num_classes_being_defined = 0;
2586
2587   /* No template parameters apply.  */
2588   parser->num_template_parameter_lists = 0;
2589
2590   return parser;
2591 }
2592
2593 /* Lexical conventions [gram.lex]  */
2594
2595 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2596    identifier.  */
2597
2598 static tree
2599 cp_parser_identifier (cp_parser* parser)
2600 {
2601   cp_token *token;
2602
2603   /* Look for the identifier.  */
2604   token = cp_parser_require (parser, CPP_NAME, "identifier");
2605   /* Return the value.  */
2606   return token ? token->value : error_mark_node;
2607 }
2608
2609 /* Basic concepts [gram.basic]  */
2610
2611 /* Parse a translation-unit.
2612
2613    translation-unit:
2614      declaration-seq [opt]
2615
2616    Returns TRUE if all went well.  */
2617
2618 static bool
2619 cp_parser_translation_unit (cp_parser* parser)
2620 {
2621   /* The address of the first non-permanent object on the declarator
2622      obstack.  */
2623   static void *declarator_obstack_base;
2624
2625   bool success;
2626
2627   /* Create the declarator obstack, if necessary.  */
2628   if (!cp_error_declarator)
2629     {
2630       gcc_obstack_init (&declarator_obstack);
2631       /* Create the error declarator.  */
2632       cp_error_declarator = make_declarator (cdk_error);
2633       /* Create the empty parameter list.  */
2634       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
2635       /* Remember where the base of the declarator obstack lies.  */
2636       declarator_obstack_base = obstack_next_free (&declarator_obstack);
2637     }
2638
2639   while (true)
2640     {
2641       cp_parser_declaration_seq_opt (parser);
2642
2643       /* If there are no tokens left then all went well.  */
2644       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2645         {
2646           /* Consume the EOF token.  */
2647           cp_parser_require (parser, CPP_EOF, "end-of-file");
2648
2649           /* Finish up.  */
2650           finish_translation_unit ();
2651
2652           success = true;
2653           break;
2654         }
2655       else
2656         {
2657           cp_parser_error (parser, "expected declaration");
2658           success = false;
2659           break;
2660         }
2661     }
2662
2663   /* Make sure the declarator obstack was fully cleaned up.  */
2664   my_friendly_assert (obstack_next_free (&declarator_obstack) ==
2665                       declarator_obstack_base,
2666                       20040621);
2667
2668   /* All went well.  */
2669   return success;
2670 }
2671
2672 /* Expressions [gram.expr] */
2673
2674 /* Parse a primary-expression.
2675
2676    primary-expression:
2677      literal
2678      this
2679      ( expression )
2680      id-expression
2681
2682    GNU Extensions:
2683
2684    primary-expression:
2685      ( compound-statement )
2686      __builtin_va_arg ( assignment-expression , type-id )
2687
2688    literal:
2689      __null
2690
2691    Returns a representation of the expression.
2692
2693    *IDK indicates what kind of id-expression (if any) was present.
2694
2695    *QUALIFYING_CLASS is set to a non-NULL value if the id-expression can be
2696    used as the operand of a pointer-to-member.  In that case,
2697    *QUALIFYING_CLASS gives the class that is used as the qualifying
2698    class in the pointer-to-member.  */
2699
2700 static tree
2701 cp_parser_primary_expression (cp_parser *parser,
2702                               cp_id_kind *idk,
2703                               tree *qualifying_class)
2704 {
2705   cp_token *token;
2706
2707   /* Assume the primary expression is not an id-expression.  */
2708   *idk = CP_ID_KIND_NONE;
2709   /* And that it cannot be used as pointer-to-member.  */
2710   *qualifying_class = NULL_TREE;
2711
2712   /* Peek at the next token.  */
2713   token = cp_lexer_peek_token (parser->lexer);
2714   switch (token->type)
2715     {
2716       /* literal:
2717            integer-literal
2718            character-literal
2719            floating-literal
2720            string-literal
2721            boolean-literal  */
2722     case CPP_CHAR:
2723     case CPP_WCHAR:
2724     case CPP_NUMBER:
2725       token = cp_lexer_consume_token (parser->lexer);
2726       return token->value;
2727
2728     case CPP_STRING:
2729     case CPP_WSTRING:
2730       token = cp_lexer_consume_token (parser->lexer);
2731       if (TREE_CHAIN (token->value))
2732         return TREE_CHAIN (token->value);
2733       else
2734         return token->value;
2735
2736     case CPP_OPEN_PAREN:
2737       {
2738         tree expr;
2739         bool saved_greater_than_is_operator_p;
2740
2741         /* Consume the `('.  */
2742         cp_lexer_consume_token (parser->lexer);
2743         /* Within a parenthesized expression, a `>' token is always
2744            the greater-than operator.  */
2745         saved_greater_than_is_operator_p
2746           = parser->greater_than_is_operator_p;
2747         parser->greater_than_is_operator_p = true;
2748         /* If we see `( { ' then we are looking at the beginning of
2749            a GNU statement-expression.  */
2750         if (cp_parser_allow_gnu_extensions_p (parser)
2751             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
2752           {
2753             /* Statement-expressions are not allowed by the standard.  */
2754             if (pedantic)
2755               pedwarn ("ISO C++ forbids braced-groups within expressions");
2756
2757             /* And they're not allowed outside of a function-body; you
2758                cannot, for example, write:
2759
2760                  int i = ({ int j = 3; j + 1; });
2761
2762                at class or namespace scope.  */
2763             if (!at_function_scope_p ())
2764               error ("statement-expressions are allowed only inside functions");
2765             /* Start the statement-expression.  */
2766             expr = begin_stmt_expr ();
2767             /* Parse the compound-statement.  */
2768             cp_parser_compound_statement (parser, expr, false);
2769             /* Finish up.  */
2770             expr = finish_stmt_expr (expr, false);
2771           }
2772         else
2773           {
2774             /* Parse the parenthesized expression.  */
2775             expr = cp_parser_expression (parser);
2776             /* Let the front end know that this expression was
2777                enclosed in parentheses. This matters in case, for
2778                example, the expression is of the form `A::B', since
2779                `&A::B' might be a pointer-to-member, but `&(A::B)' is
2780                not.  */
2781             finish_parenthesized_expr (expr);
2782           }
2783         /* The `>' token might be the end of a template-id or
2784            template-parameter-list now.  */
2785         parser->greater_than_is_operator_p
2786           = saved_greater_than_is_operator_p;
2787         /* Consume the `)'.  */
2788         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
2789           cp_parser_skip_to_end_of_statement (parser);
2790
2791         return expr;
2792       }
2793
2794     case CPP_KEYWORD:
2795       switch (token->keyword)
2796         {
2797           /* These two are the boolean literals.  */
2798         case RID_TRUE:
2799           cp_lexer_consume_token (parser->lexer);
2800           return boolean_true_node;
2801         case RID_FALSE:
2802           cp_lexer_consume_token (parser->lexer);
2803           return boolean_false_node;
2804
2805           /* The `__null' literal.  */
2806         case RID_NULL:
2807           cp_lexer_consume_token (parser->lexer);
2808           return null_node;
2809
2810           /* Recognize the `this' keyword.  */
2811         case RID_THIS:
2812           cp_lexer_consume_token (parser->lexer);
2813           if (parser->local_variables_forbidden_p)
2814             {
2815               error ("`this' may not be used in this context");
2816               return error_mark_node;
2817             }
2818           /* Pointers cannot appear in constant-expressions.  */
2819           if (cp_parser_non_integral_constant_expression (parser,
2820                                                           "`this'"))
2821             return error_mark_node;
2822           return finish_this_expr ();
2823
2824           /* The `operator' keyword can be the beginning of an
2825              id-expression.  */
2826         case RID_OPERATOR:
2827           goto id_expression;
2828
2829         case RID_FUNCTION_NAME:
2830         case RID_PRETTY_FUNCTION_NAME:
2831         case RID_C99_FUNCTION_NAME:
2832           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
2833              __func__ are the names of variables -- but they are
2834              treated specially.  Therefore, they are handled here,
2835              rather than relying on the generic id-expression logic
2836              below.  Grammatically, these names are id-expressions.
2837
2838              Consume the token.  */
2839           token = cp_lexer_consume_token (parser->lexer);
2840           /* Look up the name.  */
2841           return finish_fname (token->value);
2842
2843         case RID_VA_ARG:
2844           {
2845             tree expression;
2846             tree type;
2847
2848             /* The `__builtin_va_arg' construct is used to handle
2849                `va_arg'.  Consume the `__builtin_va_arg' token.  */
2850             cp_lexer_consume_token (parser->lexer);
2851             /* Look for the opening `('.  */
2852             cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
2853             /* Now, parse the assignment-expression.  */
2854             expression = cp_parser_assignment_expression (parser);
2855             /* Look for the `,'.  */
2856             cp_parser_require (parser, CPP_COMMA, "`,'");
2857             /* Parse the type-id.  */
2858             type = cp_parser_type_id (parser);
2859             /* Look for the closing `)'.  */
2860             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
2861             /* Using `va_arg' in a constant-expression is not
2862                allowed.  */
2863             if (cp_parser_non_integral_constant_expression (parser,
2864                                                             "`va_arg'"))
2865               return error_mark_node;
2866             return build_x_va_arg (expression, type);
2867           }
2868
2869         case RID_OFFSETOF:
2870           return cp_parser_builtin_offsetof (parser);
2871
2872         default:
2873           cp_parser_error (parser, "expected primary-expression");
2874           return error_mark_node;
2875         }
2876
2877       /* An id-expression can start with either an identifier, a
2878          `::' as the beginning of a qualified-id, or the "operator"
2879          keyword.  */
2880     case CPP_NAME:
2881     case CPP_SCOPE:
2882     case CPP_TEMPLATE_ID:
2883     case CPP_NESTED_NAME_SPECIFIER:
2884       {
2885         tree id_expression;
2886         tree decl;
2887         const char *error_msg;
2888
2889       id_expression:
2890         /* Parse the id-expression.  */
2891         id_expression
2892           = cp_parser_id_expression (parser,
2893                                      /*template_keyword_p=*/false,
2894                                      /*check_dependency_p=*/true,
2895                                      /*template_p=*/NULL,
2896                                      /*declarator_p=*/false);
2897         if (id_expression == error_mark_node)
2898           return error_mark_node;
2899         /* If we have a template-id, then no further lookup is
2900            required.  If the template-id was for a template-class, we
2901            will sometimes have a TYPE_DECL at this point.  */
2902         else if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
2903             || TREE_CODE (id_expression) == TYPE_DECL)
2904           decl = id_expression;
2905         /* Look up the name.  */
2906         else
2907           {
2908             decl = cp_parser_lookup_name_simple (parser, id_expression);
2909             /* If name lookup gives us a SCOPE_REF, then the
2910                qualifying scope was dependent.  Just propagate the
2911                name.  */
2912             if (TREE_CODE (decl) == SCOPE_REF)
2913               {
2914                 if (TYPE_P (TREE_OPERAND (decl, 0)))
2915                   *qualifying_class = TREE_OPERAND (decl, 0);
2916                 return decl;
2917               }
2918             /* Check to see if DECL is a local variable in a context
2919                where that is forbidden.  */
2920             if (parser->local_variables_forbidden_p
2921                 && local_variable_p (decl))
2922               {
2923                 /* It might be that we only found DECL because we are
2924                    trying to be generous with pre-ISO scoping rules.
2925                    For example, consider:
2926
2927                      int i;
2928                      void g() {
2929                        for (int i = 0; i < 10; ++i) {}
2930                        extern void f(int j = i);
2931                      }
2932
2933                    Here, name look up will originally find the out
2934                    of scope `i'.  We need to issue a warning message,
2935                    but then use the global `i'.  */
2936                 decl = check_for_out_of_scope_variable (decl);
2937                 if (local_variable_p (decl))
2938                   {
2939                     error ("local variable `%D' may not appear in this context",
2940                            decl);
2941                     return error_mark_node;
2942                   }
2943               }
2944           }
2945
2946         decl = finish_id_expression (id_expression, decl, parser->scope,
2947                                      idk, qualifying_class,
2948                                      parser->integral_constant_expression_p,
2949                                      parser->allow_non_integral_constant_expression_p,
2950                                      &parser->non_integral_constant_expression_p,
2951                                      &error_msg);
2952         if (error_msg)
2953           cp_parser_error (parser, error_msg);
2954         return decl;
2955       }
2956
2957       /* Anything else is an error.  */
2958     default:
2959       cp_parser_error (parser, "expected primary-expression");
2960       return error_mark_node;
2961     }
2962 }
2963
2964 /* Parse an id-expression.
2965
2966    id-expression:
2967      unqualified-id
2968      qualified-id
2969
2970    qualified-id:
2971      :: [opt] nested-name-specifier template [opt] unqualified-id
2972      :: identifier
2973      :: operator-function-id
2974      :: template-id
2975
2976    Return a representation of the unqualified portion of the
2977    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
2978    a `::' or nested-name-specifier.
2979
2980    Often, if the id-expression was a qualified-id, the caller will
2981    want to make a SCOPE_REF to represent the qualified-id.  This
2982    function does not do this in order to avoid wastefully creating
2983    SCOPE_REFs when they are not required.
2984
2985    If TEMPLATE_KEYWORD_P is true, then we have just seen the
2986    `template' keyword.
2987
2988    If CHECK_DEPENDENCY_P is false, then names are looked up inside
2989    uninstantiated templates.
2990
2991    If *TEMPLATE_P is non-NULL, it is set to true iff the
2992    `template' keyword is used to explicitly indicate that the entity
2993    named is a template.
2994
2995    If DECLARATOR_P is true, the id-expression is appearing as part of
2996    a declarator, rather than as part of an expression.  */
2997
2998 static tree
2999 cp_parser_id_expression (cp_parser *parser,
3000                          bool template_keyword_p,
3001                          bool check_dependency_p,
3002                          bool *template_p,
3003                          bool declarator_p)
3004 {
3005   bool global_scope_p;
3006   bool nested_name_specifier_p;
3007
3008   /* Assume the `template' keyword was not used.  */
3009   if (template_p)
3010     *template_p = false;
3011
3012   /* Look for the optional `::' operator.  */
3013   global_scope_p
3014     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3015        != NULL_TREE);
3016   /* Look for the optional nested-name-specifier.  */
3017   nested_name_specifier_p
3018     = (cp_parser_nested_name_specifier_opt (parser,
3019                                             /*typename_keyword_p=*/false,
3020                                             check_dependency_p,
3021                                             /*type_p=*/false,
3022                                             /*is_declarator=*/false)
3023        != NULL_TREE);
3024   /* If there is a nested-name-specifier, then we are looking at
3025      the first qualified-id production.  */
3026   if (nested_name_specifier_p)
3027     {
3028       tree saved_scope;
3029       tree saved_object_scope;
3030       tree saved_qualifying_scope;
3031       tree unqualified_id;
3032       bool is_template;
3033
3034       /* See if the next token is the `template' keyword.  */
3035       if (!template_p)
3036         template_p = &is_template;
3037       *template_p = cp_parser_optional_template_keyword (parser);
3038       /* Name lookup we do during the processing of the
3039          unqualified-id might obliterate SCOPE.  */
3040       saved_scope = parser->scope;
3041       saved_object_scope = parser->object_scope;
3042       saved_qualifying_scope = parser->qualifying_scope;
3043       /* Process the final unqualified-id.  */
3044       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3045                                                  check_dependency_p,
3046                                                  declarator_p);
3047       /* Restore the SAVED_SCOPE for our caller.  */
3048       parser->scope = saved_scope;
3049       parser->object_scope = saved_object_scope;
3050       parser->qualifying_scope = saved_qualifying_scope;
3051
3052       return unqualified_id;
3053     }
3054   /* Otherwise, if we are in global scope, then we are looking at one
3055      of the other qualified-id productions.  */
3056   else if (global_scope_p)
3057     {
3058       cp_token *token;
3059       tree id;
3060
3061       /* Peek at the next token.  */
3062       token = cp_lexer_peek_token (parser->lexer);
3063
3064       /* If it's an identifier, and the next token is not a "<", then
3065          we can avoid the template-id case.  This is an optimization
3066          for this common case.  */
3067       if (token->type == CPP_NAME
3068           && !cp_parser_nth_token_starts_template_argument_list_p
3069                (parser, 2))
3070         return cp_parser_identifier (parser);
3071
3072       cp_parser_parse_tentatively (parser);
3073       /* Try a template-id.  */
3074       id = cp_parser_template_id (parser,
3075                                   /*template_keyword_p=*/false,
3076                                   /*check_dependency_p=*/true,
3077                                   declarator_p);
3078       /* If that worked, we're done.  */
3079       if (cp_parser_parse_definitely (parser))
3080         return id;
3081
3082       /* Peek at the next token.  (Changes in the token buffer may
3083          have invalidated the pointer obtained above.)  */
3084       token = cp_lexer_peek_token (parser->lexer);
3085
3086       switch (token->type)
3087         {
3088         case CPP_NAME:
3089           return cp_parser_identifier (parser);
3090
3091         case CPP_KEYWORD:
3092           if (token->keyword == RID_OPERATOR)
3093             return cp_parser_operator_function_id (parser);
3094           /* Fall through.  */
3095
3096         default:
3097           cp_parser_error (parser, "expected id-expression");
3098           return error_mark_node;
3099         }
3100     }
3101   else
3102     return cp_parser_unqualified_id (parser, template_keyword_p,
3103                                      /*check_dependency_p=*/true,
3104                                      declarator_p);
3105 }
3106
3107 /* Parse an unqualified-id.
3108
3109    unqualified-id:
3110      identifier
3111      operator-function-id
3112      conversion-function-id
3113      ~ class-name
3114      template-id
3115
3116    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3117    keyword, in a construct like `A::template ...'.
3118
3119    Returns a representation of unqualified-id.  For the `identifier'
3120    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3121    production a BIT_NOT_EXPR is returned; the operand of the
3122    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3123    other productions, see the documentation accompanying the
3124    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3125    names are looked up in uninstantiated templates.  If DECLARATOR_P
3126    is true, the unqualified-id is appearing as part of a declarator,
3127    rather than as part of an expression.  */
3128
3129 static tree
3130 cp_parser_unqualified_id (cp_parser* parser,
3131                           bool template_keyword_p,
3132                           bool check_dependency_p,
3133                           bool declarator_p)
3134 {
3135   cp_token *token;
3136
3137   /* Peek at the next token.  */
3138   token = cp_lexer_peek_token (parser->lexer);
3139
3140   switch (token->type)
3141     {
3142     case CPP_NAME:
3143       {
3144         tree id;
3145
3146         /* We don't know yet whether or not this will be a
3147            template-id.  */
3148         cp_parser_parse_tentatively (parser);
3149         /* Try a template-id.  */
3150         id = cp_parser_template_id (parser, template_keyword_p,
3151                                     check_dependency_p,
3152                                     declarator_p);
3153         /* If it worked, we're done.  */
3154         if (cp_parser_parse_definitely (parser))
3155           return id;
3156         /* Otherwise, it's an ordinary identifier.  */
3157         return cp_parser_identifier (parser);
3158       }
3159
3160     case CPP_TEMPLATE_ID:
3161       return cp_parser_template_id (parser, template_keyword_p,
3162                                     check_dependency_p,
3163                                     declarator_p);
3164
3165     case CPP_COMPL:
3166       {
3167         tree type_decl;
3168         tree qualifying_scope;
3169         tree object_scope;
3170         tree scope;
3171
3172         /* Consume the `~' token.  */
3173         cp_lexer_consume_token (parser->lexer);
3174         /* Parse the class-name.  The standard, as written, seems to
3175            say that:
3176
3177              template <typename T> struct S { ~S (); };
3178              template <typename T> S<T>::~S() {}
3179
3180            is invalid, since `~' must be followed by a class-name, but
3181            `S<T>' is dependent, and so not known to be a class.
3182            That's not right; we need to look in uninstantiated
3183            templates.  A further complication arises from:
3184
3185              template <typename T> void f(T t) {
3186                t.T::~T();
3187              }
3188
3189            Here, it is not possible to look up `T' in the scope of `T'
3190            itself.  We must look in both the current scope, and the
3191            scope of the containing complete expression.
3192
3193            Yet another issue is:
3194
3195              struct S {
3196                int S;
3197                ~S();
3198              };
3199
3200              S::~S() {}
3201
3202            The standard does not seem to say that the `S' in `~S'
3203            should refer to the type `S' and not the data member
3204            `S::S'.  */
3205
3206         /* DR 244 says that we look up the name after the "~" in the
3207            same scope as we looked up the qualifying name.  That idea
3208            isn't fully worked out; it's more complicated than that.  */
3209         scope = parser->scope;
3210         object_scope = parser->object_scope;
3211         qualifying_scope = parser->qualifying_scope;
3212
3213         /* If the name is of the form "X::~X" it's OK.  */
3214         if (scope && TYPE_P (scope)
3215             && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3216             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3217                 == CPP_OPEN_PAREN)
3218             && (cp_lexer_peek_token (parser->lexer)->value
3219                 == TYPE_IDENTIFIER (scope)))
3220           {
3221             cp_lexer_consume_token (parser->lexer);
3222             return build_nt (BIT_NOT_EXPR, scope);
3223           }
3224
3225         /* If there was an explicit qualification (S::~T), first look
3226            in the scope given by the qualification (i.e., S).  */
3227         if (scope)
3228           {
3229             cp_parser_parse_tentatively (parser);
3230             type_decl = cp_parser_class_name (parser,
3231                                               /*typename_keyword_p=*/false,
3232                                               /*template_keyword_p=*/false,
3233                                               /*type_p=*/false,
3234                                               /*check_dependency=*/false,
3235                                               /*class_head_p=*/false,
3236                                               declarator_p);
3237             if (cp_parser_parse_definitely (parser))
3238               return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3239           }
3240         /* In "N::S::~S", look in "N" as well.  */
3241         if (scope && qualifying_scope)
3242           {
3243             cp_parser_parse_tentatively (parser);
3244             parser->scope = qualifying_scope;
3245             parser->object_scope = NULL_TREE;
3246             parser->qualifying_scope = NULL_TREE;
3247             type_decl
3248               = cp_parser_class_name (parser,
3249                                       /*typename_keyword_p=*/false,
3250                                       /*template_keyword_p=*/false,
3251                                       /*type_p=*/false,
3252                                       /*check_dependency=*/false,
3253                                       /*class_head_p=*/false,
3254                                       declarator_p);
3255             if (cp_parser_parse_definitely (parser))
3256               return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3257           }
3258         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3259         else if (object_scope)
3260           {
3261             cp_parser_parse_tentatively (parser);
3262             parser->scope = object_scope;
3263             parser->object_scope = NULL_TREE;
3264             parser->qualifying_scope = NULL_TREE;
3265             type_decl
3266               = cp_parser_class_name (parser,
3267                                       /*typename_keyword_p=*/false,
3268                                       /*template_keyword_p=*/false,
3269                                       /*type_p=*/false,
3270                                       /*check_dependency=*/false,
3271                                       /*class_head_p=*/false,
3272                                       declarator_p);
3273             if (cp_parser_parse_definitely (parser))
3274               return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3275           }
3276         /* Look in the surrounding context.  */
3277         parser->scope = NULL_TREE;
3278         parser->object_scope = NULL_TREE;
3279         parser->qualifying_scope = NULL_TREE;
3280         type_decl
3281           = cp_parser_class_name (parser,
3282                                   /*typename_keyword_p=*/false,
3283                                   /*template_keyword_p=*/false,
3284                                   /*type_p=*/false,
3285                                   /*check_dependency=*/false,
3286                                   /*class_head_p=*/false,
3287                                   declarator_p);
3288         /* If an error occurred, assume that the name of the
3289            destructor is the same as the name of the qualifying
3290            class.  That allows us to keep parsing after running
3291            into ill-formed destructor names.  */
3292         if (type_decl == error_mark_node && scope && TYPE_P (scope))
3293           return build_nt (BIT_NOT_EXPR, scope);
3294         else if (type_decl == error_mark_node)
3295           return error_mark_node;
3296
3297         /* [class.dtor]
3298
3299            A typedef-name that names a class shall not be used as the
3300            identifier in the declarator for a destructor declaration.  */
3301         if (declarator_p
3302             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3303             && !DECL_SELF_REFERENCE_P (type_decl))
3304           error ("typedef-name `%D' used as destructor declarator",
3305                  type_decl);
3306
3307         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3308       }
3309
3310     case CPP_KEYWORD:
3311       if (token->keyword == RID_OPERATOR)
3312         {
3313           tree id;
3314
3315           /* This could be a template-id, so we try that first.  */
3316           cp_parser_parse_tentatively (parser);
3317           /* Try a template-id.  */
3318           id = cp_parser_template_id (parser, template_keyword_p,
3319                                       /*check_dependency_p=*/true,
3320                                       declarator_p);
3321           /* If that worked, we're done.  */
3322           if (cp_parser_parse_definitely (parser))
3323             return id;
3324           /* We still don't know whether we're looking at an
3325              operator-function-id or a conversion-function-id.  */
3326           cp_parser_parse_tentatively (parser);
3327           /* Try an operator-function-id.  */
3328           id = cp_parser_operator_function_id (parser);
3329           /* If that didn't work, try a conversion-function-id.  */
3330           if (!cp_parser_parse_definitely (parser))
3331             id = cp_parser_conversion_function_id (parser);
3332
3333           return id;
3334         }
3335       /* Fall through.  */
3336
3337     default:
3338       cp_parser_error (parser, "expected unqualified-id");
3339       return error_mark_node;
3340     }
3341 }
3342
3343 /* Parse an (optional) nested-name-specifier.
3344
3345    nested-name-specifier:
3346      class-or-namespace-name :: nested-name-specifier [opt]
3347      class-or-namespace-name :: template nested-name-specifier [opt]
3348
3349    PARSER->SCOPE should be set appropriately before this function is
3350    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3351    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3352    in name lookups.
3353
3354    Sets PARSER->SCOPE to the class (TYPE) or namespace
3355    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3356    it unchanged if there is no nested-name-specifier.  Returns the new
3357    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3358
3359    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3360    part of a declaration and/or decl-specifier.  */
3361
3362 static tree
3363 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3364                                      bool typename_keyword_p,
3365                                      bool check_dependency_p,
3366                                      bool type_p,
3367                                      bool is_declaration)
3368 {
3369   bool success = false;
3370   tree access_check = NULL_TREE;
3371   ptrdiff_t start;
3372   cp_token* token;
3373
3374   /* If the next token corresponds to a nested name specifier, there
3375      is no need to reparse it.  However, if CHECK_DEPENDENCY_P is
3376      false, it may have been true before, in which case something
3377      like `A<X>::B<Y>::C' may have resulted in a nested-name-specifier
3378      of `A<X>::', where it should now be `A<X>::B<Y>::'.  So, when
3379      CHECK_DEPENDENCY_P is false, we have to fall through into the
3380      main loop.  */
3381   if (check_dependency_p
3382       && cp_lexer_next_token_is (parser->lexer, CPP_NESTED_NAME_SPECIFIER))
3383     {
3384       cp_parser_pre_parsed_nested_name_specifier (parser);
3385       return parser->scope;
3386     }
3387
3388   /* Remember where the nested-name-specifier starts.  */
3389   if (cp_parser_parsing_tentatively (parser)
3390       && !cp_parser_committed_to_tentative_parse (parser))
3391     {
3392       token = cp_lexer_peek_token (parser->lexer);
3393       start = cp_lexer_token_difference (parser->lexer,
3394                                          parser->lexer->first_token,
3395                                          token);
3396     }
3397   else
3398     start = -1;
3399
3400   push_deferring_access_checks (dk_deferred);
3401
3402   while (true)
3403     {
3404       tree new_scope;
3405       tree old_scope;
3406       tree saved_qualifying_scope;
3407       bool template_keyword_p;
3408
3409       /* Spot cases that cannot be the beginning of a
3410          nested-name-specifier.  */
3411       token = cp_lexer_peek_token (parser->lexer);
3412
3413       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3414          the already parsed nested-name-specifier.  */
3415       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3416         {
3417           /* Grab the nested-name-specifier and continue the loop.  */
3418           cp_parser_pre_parsed_nested_name_specifier (parser);
3419           success = true;
3420           continue;
3421         }
3422
3423       /* Spot cases that cannot be the beginning of a
3424          nested-name-specifier.  On the second and subsequent times
3425          through the loop, we look for the `template' keyword.  */
3426       if (success && token->keyword == RID_TEMPLATE)
3427         ;
3428       /* A template-id can start a nested-name-specifier.  */
3429       else if (token->type == CPP_TEMPLATE_ID)
3430         ;
3431       else
3432         {
3433           /* If the next token is not an identifier, then it is
3434              definitely not a class-or-namespace-name.  */
3435           if (token->type != CPP_NAME)
3436             break;
3437           /* If the following token is neither a `<' (to begin a
3438              template-id), nor a `::', then we are not looking at a
3439              nested-name-specifier.  */
3440           token = cp_lexer_peek_nth_token (parser->lexer, 2);
3441           if (token->type != CPP_SCOPE
3442               && !cp_parser_nth_token_starts_template_argument_list_p
3443                   (parser, 2))
3444             break;
3445         }
3446
3447       /* The nested-name-specifier is optional, so we parse
3448          tentatively.  */
3449       cp_parser_parse_tentatively (parser);
3450
3451       /* Look for the optional `template' keyword, if this isn't the
3452          first time through the loop.  */
3453       if (success)
3454         template_keyword_p = cp_parser_optional_template_keyword (parser);
3455       else
3456         template_keyword_p = false;
3457
3458       /* Save the old scope since the name lookup we are about to do
3459          might destroy it.  */
3460       old_scope = parser->scope;
3461       saved_qualifying_scope = parser->qualifying_scope;
3462       /* Parse the qualifying entity.  */
3463       new_scope
3464         = cp_parser_class_or_namespace_name (parser,
3465                                              typename_keyword_p,
3466                                              template_keyword_p,
3467                                              check_dependency_p,
3468                                              type_p,
3469                                              is_declaration);
3470       /* Look for the `::' token.  */
3471       cp_parser_require (parser, CPP_SCOPE, "`::'");
3472
3473       /* If we found what we wanted, we keep going; otherwise, we're
3474          done.  */
3475       if (!cp_parser_parse_definitely (parser))
3476         {
3477           bool error_p = false;
3478
3479           /* Restore the OLD_SCOPE since it was valid before the
3480              failed attempt at finding the last
3481              class-or-namespace-name.  */
3482           parser->scope = old_scope;
3483           parser->qualifying_scope = saved_qualifying_scope;
3484           /* If the next token is an identifier, and the one after
3485              that is a `::', then any valid interpretation would have
3486              found a class-or-namespace-name.  */
3487           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3488                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3489                      == CPP_SCOPE)
3490                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3491                      != CPP_COMPL))
3492             {
3493               token = cp_lexer_consume_token (parser->lexer);
3494               if (!error_p)
3495                 {
3496                   tree decl;
3497
3498                   decl = cp_parser_lookup_name_simple (parser, token->value);
3499                   if (TREE_CODE (decl) == TEMPLATE_DECL)
3500                     error ("`%D' used without template parameters",
3501                            decl);
3502                   else
3503                     cp_parser_name_lookup_error
3504                       (parser, token->value, decl,
3505                        "is not a class or namespace");
3506                   parser->scope = NULL_TREE;
3507                   error_p = true;
3508                   /* Treat this as a successful nested-name-specifier
3509                      due to:
3510
3511                      [basic.lookup.qual]
3512
3513                      If the name found is not a class-name (clause
3514                      _class_) or namespace-name (_namespace.def_), the
3515                      program is ill-formed.  */
3516                   success = true;
3517                 }
3518               cp_lexer_consume_token (parser->lexer);
3519             }
3520           break;
3521         }
3522
3523       /* We've found one valid nested-name-specifier.  */
3524       success = true;
3525       /* Make sure we look in the right scope the next time through
3526          the loop.  */
3527       parser->scope = (TREE_CODE (new_scope) == TYPE_DECL
3528                        ? TREE_TYPE (new_scope)
3529                        : new_scope);
3530       /* If it is a class scope, try to complete it; we are about to
3531          be looking up names inside the class.  */
3532       if (TYPE_P (parser->scope)
3533           /* Since checking types for dependency can be expensive,
3534              avoid doing it if the type is already complete.  */
3535           && !COMPLETE_TYPE_P (parser->scope)
3536           /* Do not try to complete dependent types.  */
3537           && !dependent_type_p (parser->scope))
3538         complete_type (parser->scope);
3539     }
3540
3541   /* Retrieve any deferred checks.  Do not pop this access checks yet
3542      so the memory will not be reclaimed during token replacing below.  */
3543   access_check = get_deferred_access_checks ();
3544
3545   /* If parsing tentatively, replace the sequence of tokens that makes
3546      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
3547      token.  That way, should we re-parse the token stream, we will
3548      not have to repeat the effort required to do the parse, nor will
3549      we issue duplicate error messages.  */
3550   if (success && start >= 0)
3551     {
3552       /* Find the token that corresponds to the start of the
3553          template-id.  */
3554       token = cp_lexer_advance_token (parser->lexer,
3555                                       parser->lexer->first_token,
3556                                       start);
3557
3558       /* Reset the contents of the START token.  */
3559       token->type = CPP_NESTED_NAME_SPECIFIER;
3560       token->value = build_tree_list (access_check, parser->scope);
3561       TREE_TYPE (token->value) = parser->qualifying_scope;
3562       token->keyword = RID_MAX;
3563       /* Purge all subsequent tokens.  */
3564       cp_lexer_purge_tokens_after (parser->lexer, token);
3565     }
3566
3567   pop_deferring_access_checks ();
3568   return success ? parser->scope : NULL_TREE;
3569 }
3570
3571 /* Parse a nested-name-specifier.  See
3572    cp_parser_nested_name_specifier_opt for details.  This function
3573    behaves identically, except that it will an issue an error if no
3574    nested-name-specifier is present, and it will return
3575    ERROR_MARK_NODE, rather than NULL_TREE, if no nested-name-specifier
3576    is present.  */
3577
3578 static tree
3579 cp_parser_nested_name_specifier (cp_parser *parser,
3580                                  bool typename_keyword_p,
3581                                  bool check_dependency_p,
3582                                  bool type_p,
3583                                  bool is_declaration)
3584 {
3585   tree scope;
3586
3587   /* Look for the nested-name-specifier.  */
3588   scope = cp_parser_nested_name_specifier_opt (parser,
3589                                                typename_keyword_p,
3590                                                check_dependency_p,
3591                                                type_p,
3592                                                is_declaration);
3593   /* If it was not present, issue an error message.  */
3594   if (!scope)
3595     {
3596       cp_parser_error (parser, "expected nested-name-specifier");
3597       parser->scope = NULL_TREE;
3598       return error_mark_node;
3599     }
3600
3601   return scope;
3602 }
3603
3604 /* Parse a class-or-namespace-name.
3605
3606    class-or-namespace-name:
3607      class-name
3608      namespace-name
3609
3610    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
3611    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
3612    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
3613    TYPE_P is TRUE iff the next name should be taken as a class-name,
3614    even the same name is declared to be another entity in the same
3615    scope.
3616
3617    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
3618    specified by the class-or-namespace-name.  If neither is found the
3619    ERROR_MARK_NODE is returned.  */
3620
3621 static tree
3622 cp_parser_class_or_namespace_name (cp_parser *parser,
3623                                    bool typename_keyword_p,
3624                                    bool template_keyword_p,
3625                                    bool check_dependency_p,
3626                                    bool type_p,
3627                                    bool is_declaration)
3628 {
3629   tree saved_scope;
3630   tree saved_qualifying_scope;
3631   tree saved_object_scope;
3632   tree scope;
3633   bool only_class_p;
3634
3635   /* Before we try to parse the class-name, we must save away the
3636      current PARSER->SCOPE since cp_parser_class_name will destroy
3637      it.  */
3638   saved_scope = parser->scope;
3639   saved_qualifying_scope = parser->qualifying_scope;
3640   saved_object_scope = parser->object_scope;
3641   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
3642      there is no need to look for a namespace-name.  */
3643   only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
3644   if (!only_class_p)
3645     cp_parser_parse_tentatively (parser);
3646   scope = cp_parser_class_name (parser,
3647                                 typename_keyword_p,
3648                                 template_keyword_p,
3649                                 type_p,
3650                                 check_dependency_p,
3651                                 /*class_head_p=*/false,
3652                                 is_declaration);
3653   /* If that didn't work, try for a namespace-name.  */
3654   if (!only_class_p && !cp_parser_parse_definitely (parser))
3655     {
3656       /* Restore the saved scope.  */
3657       parser->scope = saved_scope;
3658       parser->qualifying_scope = saved_qualifying_scope;
3659       parser->object_scope = saved_object_scope;
3660       /* If we are not looking at an identifier followed by the scope
3661          resolution operator, then this is not part of a
3662          nested-name-specifier.  (Note that this function is only used
3663          to parse the components of a nested-name-specifier.)  */
3664       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
3665           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
3666         return error_mark_node;
3667       scope = cp_parser_namespace_name (parser);
3668     }
3669
3670   return scope;
3671 }
3672
3673 /* Parse a postfix-expression.
3674
3675    postfix-expression:
3676      primary-expression
3677      postfix-expression [ expression ]
3678      postfix-expression ( expression-list [opt] )
3679      simple-type-specifier ( expression-list [opt] )
3680      typename :: [opt] nested-name-specifier identifier
3681        ( expression-list [opt] )
3682      typename :: [opt] nested-name-specifier template [opt] template-id
3683        ( expression-list [opt] )
3684      postfix-expression . template [opt] id-expression
3685      postfix-expression -> template [opt] id-expression
3686      postfix-expression . pseudo-destructor-name
3687      postfix-expression -> pseudo-destructor-name
3688      postfix-expression ++
3689      postfix-expression --
3690      dynamic_cast < type-id > ( expression )
3691      static_cast < type-id > ( expression )
3692      reinterpret_cast < type-id > ( expression )
3693      const_cast < type-id > ( expression )
3694      typeid ( expression )
3695      typeid ( type-id )
3696
3697    GNU Extension:
3698
3699    postfix-expression:
3700      ( type-id ) { initializer-list , [opt] }
3701
3702    This extension is a GNU version of the C99 compound-literal
3703    construct.  (The C99 grammar uses `type-name' instead of `type-id',
3704    but they are essentially the same concept.)
3705
3706    If ADDRESS_P is true, the postfix expression is the operand of the
3707    `&' operator.
3708
3709    Returns a representation of the expression.  */
3710
3711 static tree
3712 cp_parser_postfix_expression (cp_parser *parser, bool address_p)
3713 {
3714   cp_token *token;
3715   enum rid keyword;
3716   cp_id_kind idk = CP_ID_KIND_NONE;
3717   tree postfix_expression = NULL_TREE;
3718   /* Non-NULL only if the current postfix-expression can be used to
3719      form a pointer-to-member.  In that case, QUALIFYING_CLASS is the
3720      class used to qualify the member.  */
3721   tree qualifying_class = NULL_TREE;
3722
3723   /* Peek at the next token.  */
3724   token = cp_lexer_peek_token (parser->lexer);
3725   /* Some of the productions are determined by keywords.  */
3726   keyword = token->keyword;
3727   switch (keyword)
3728     {
3729     case RID_DYNCAST:
3730     case RID_STATCAST:
3731     case RID_REINTCAST:
3732     case RID_CONSTCAST:
3733       {
3734         tree type;
3735         tree expression;
3736         const char *saved_message;
3737
3738         /* All of these can be handled in the same way from the point
3739            of view of parsing.  Begin by consuming the token
3740            identifying the cast.  */
3741         cp_lexer_consume_token (parser->lexer);
3742
3743         /* New types cannot be defined in the cast.  */
3744         saved_message = parser->type_definition_forbidden_message;
3745         parser->type_definition_forbidden_message
3746           = "types may not be defined in casts";
3747
3748         /* Look for the opening `<'.  */
3749         cp_parser_require (parser, CPP_LESS, "`<'");
3750         /* Parse the type to which we are casting.  */
3751         type = cp_parser_type_id (parser);
3752         /* Look for the closing `>'.  */
3753         cp_parser_require (parser, CPP_GREATER, "`>'");
3754         /* Restore the old message.  */
3755         parser->type_definition_forbidden_message = saved_message;
3756
3757         /* And the expression which is being cast.  */
3758         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3759         expression = cp_parser_expression (parser);
3760         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3761
3762         /* Only type conversions to integral or enumeration types
3763            can be used in constant-expressions.  */
3764         if (parser->integral_constant_expression_p
3765             && !dependent_type_p (type)
3766             && !INTEGRAL_OR_ENUMERATION_TYPE_P (type)
3767             && (cp_parser_non_integral_constant_expression
3768                 (parser,
3769                  "a cast to a type other than an integral or "
3770                  "enumeration type")))
3771           return error_mark_node;
3772
3773         switch (keyword)
3774           {
3775           case RID_DYNCAST:
3776             postfix_expression
3777               = build_dynamic_cast (type, expression);
3778             break;
3779           case RID_STATCAST:
3780             postfix_expression
3781               = build_static_cast (type, expression);
3782             break;
3783           case RID_REINTCAST:
3784             postfix_expression
3785               = build_reinterpret_cast (type, expression);
3786             break;
3787           case RID_CONSTCAST:
3788             postfix_expression
3789               = build_const_cast (type, expression);
3790             break;
3791           default:
3792             abort ();
3793           }
3794       }
3795       break;
3796
3797     case RID_TYPEID:
3798       {
3799         tree type;
3800         const char *saved_message;
3801         bool saved_in_type_id_in_expr_p;
3802
3803         /* Consume the `typeid' token.  */
3804         cp_lexer_consume_token (parser->lexer);
3805         /* Look for the `(' token.  */
3806         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3807         /* Types cannot be defined in a `typeid' expression.  */
3808         saved_message = parser->type_definition_forbidden_message;
3809         parser->type_definition_forbidden_message
3810           = "types may not be defined in a `typeid\' expression";
3811         /* We can't be sure yet whether we're looking at a type-id or an
3812            expression.  */
3813         cp_parser_parse_tentatively (parser);
3814         /* Try a type-id first.  */
3815         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
3816         parser->in_type_id_in_expr_p = true;
3817         type = cp_parser_type_id (parser);
3818         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
3819         /* Look for the `)' token.  Otherwise, we can't be sure that
3820            we're not looking at an expression: consider `typeid (int
3821            (3))', for example.  */
3822         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3823         /* If all went well, simply lookup the type-id.  */
3824         if (cp_parser_parse_definitely (parser))
3825           postfix_expression = get_typeid (type);
3826         /* Otherwise, fall back to the expression variant.  */
3827         else
3828           {
3829             tree expression;
3830
3831             /* Look for an expression.  */
3832             expression = cp_parser_expression (parser);
3833             /* Compute its typeid.  */
3834             postfix_expression = build_typeid (expression);
3835             /* Look for the `)' token.  */
3836             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3837           }
3838         /* `typeid' may not appear in an integral constant expression.  */
3839         if (cp_parser_non_integral_constant_expression(parser,
3840                                                        "`typeid' operator"))
3841           return error_mark_node;
3842         /* Restore the saved message.  */
3843         parser->type_definition_forbidden_message = saved_message;
3844       }
3845       break;
3846
3847     case RID_TYPENAME:
3848       {
3849         bool template_p = false;
3850         tree id;
3851         tree type;
3852
3853         /* Consume the `typename' token.  */
3854         cp_lexer_consume_token (parser->lexer);
3855         /* Look for the optional `::' operator.  */
3856         cp_parser_global_scope_opt (parser,
3857                                     /*current_scope_valid_p=*/false);
3858         /* Look for the nested-name-specifier.  */
3859         cp_parser_nested_name_specifier (parser,
3860                                          /*typename_keyword_p=*/true,
3861                                          /*check_dependency_p=*/true,
3862                                          /*type_p=*/true,
3863                                          /*is_declaration=*/true);
3864         /* Look for the optional `template' keyword.  */
3865         template_p = cp_parser_optional_template_keyword (parser);
3866         /* We don't know whether we're looking at a template-id or an
3867            identifier.  */
3868         cp_parser_parse_tentatively (parser);
3869         /* Try a template-id.  */
3870         id = cp_parser_template_id (parser, template_p,
3871                                     /*check_dependency_p=*/true,
3872                                     /*is_declaration=*/true);
3873         /* If that didn't work, try an identifier.  */
3874         if (!cp_parser_parse_definitely (parser))
3875           id = cp_parser_identifier (parser);
3876         /* If we look up a template-id in a non-dependent qualifying
3877            scope, there's no need to create a dependent type.  */
3878         if (TREE_CODE (id) == TYPE_DECL
3879             && !dependent_type_p (parser->scope))
3880           type = TREE_TYPE (id);
3881         /* Create a TYPENAME_TYPE to represent the type to which the
3882            functional cast is being performed.  */
3883         else
3884           type = make_typename_type (parser->scope, id,
3885                                      /*complain=*/1);
3886
3887         postfix_expression = cp_parser_functional_cast (parser, type);
3888       }
3889       break;
3890
3891     default:
3892       {
3893         tree type;
3894
3895         /* If the next thing is a simple-type-specifier, we may be
3896            looking at a functional cast.  We could also be looking at
3897            an id-expression.  So, we try the functional cast, and if
3898            that doesn't work we fall back to the primary-expression.  */
3899         cp_parser_parse_tentatively (parser);
3900         /* Look for the simple-type-specifier.  */
3901         type = cp_parser_simple_type_specifier (parser,
3902                                                 /*decl_specs=*/NULL,
3903                                                 CP_PARSER_FLAGS_NONE);
3904         /* Parse the cast itself.  */
3905         if (!cp_parser_error_occurred (parser))
3906           postfix_expression
3907             = cp_parser_functional_cast (parser, type);
3908         /* If that worked, we're done.  */
3909         if (cp_parser_parse_definitely (parser))
3910           break;
3911
3912         /* If the functional-cast didn't work out, try a
3913            compound-literal.  */
3914         if (cp_parser_allow_gnu_extensions_p (parser)
3915             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
3916           {
3917             tree initializer_list = NULL_TREE;
3918             bool saved_in_type_id_in_expr_p;
3919
3920             cp_parser_parse_tentatively (parser);
3921             /* Consume the `('.  */
3922             cp_lexer_consume_token (parser->lexer);
3923             /* Parse the type.  */
3924             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
3925             parser->in_type_id_in_expr_p = true;
3926             type = cp_parser_type_id (parser);
3927             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
3928             /* Look for the `)'.  */
3929             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3930             /* Look for the `{'.  */
3931             cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
3932             /* If things aren't going well, there's no need to
3933                keep going.  */
3934             if (!cp_parser_error_occurred (parser))
3935               {
3936                 bool non_constant_p;
3937                 /* Parse the initializer-list.  */
3938                 initializer_list
3939                   = cp_parser_initializer_list (parser, &non_constant_p);
3940                 /* Allow a trailing `,'.  */
3941                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
3942                   cp_lexer_consume_token (parser->lexer);
3943                 /* Look for the final `}'.  */
3944                 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
3945               }
3946             /* If that worked, we're definitely looking at a
3947                compound-literal expression.  */
3948             if (cp_parser_parse_definitely (parser))
3949               {
3950                 /* Warn the user that a compound literal is not
3951                    allowed in standard C++.  */
3952                 if (pedantic)
3953                   pedwarn ("ISO C++ forbids compound-literals");
3954                 /* Form the representation of the compound-literal.  */
3955                 postfix_expression
3956                   = finish_compound_literal (type, initializer_list);
3957                 break;
3958               }
3959           }
3960
3961         /* It must be a primary-expression.  */
3962         postfix_expression = cp_parser_primary_expression (parser,
3963                                                            &idk,
3964                                                            &qualifying_class);
3965       }
3966       break;
3967     }
3968
3969   /* If we were avoiding committing to the processing of a
3970      qualified-id until we knew whether or not we had a
3971      pointer-to-member, we now know.  */
3972   if (qualifying_class)
3973     {
3974       bool done;
3975
3976       /* Peek at the next token.  */
3977       token = cp_lexer_peek_token (parser->lexer);
3978       done = (token->type != CPP_OPEN_SQUARE
3979               && token->type != CPP_OPEN_PAREN
3980               && token->type != CPP_DOT
3981               && token->type != CPP_DEREF
3982               && token->type != CPP_PLUS_PLUS
3983               && token->type != CPP_MINUS_MINUS);
3984
3985       postfix_expression = finish_qualified_id_expr (qualifying_class,
3986                                                      postfix_expression,
3987                                                      done,
3988                                                      address_p);
3989       if (done)
3990         return postfix_expression;
3991     }
3992
3993   /* Keep looping until the postfix-expression is complete.  */
3994   while (true)
3995     {
3996       if (idk == CP_ID_KIND_UNQUALIFIED
3997           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
3998           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
3999         /* It is not a Koenig lookup function call.  */
4000         postfix_expression
4001           = unqualified_name_lookup_error (postfix_expression);
4002
4003       /* Peek at the next token.  */
4004       token = cp_lexer_peek_token (parser->lexer);
4005
4006       switch (token->type)
4007         {
4008         case CPP_OPEN_SQUARE:
4009           postfix_expression
4010             = cp_parser_postfix_open_square_expression (parser,
4011                                                         postfix_expression,
4012                                                         false);
4013           idk = CP_ID_KIND_NONE;
4014           break;
4015
4016         case CPP_OPEN_PAREN:
4017           /* postfix-expression ( expression-list [opt] ) */
4018           {
4019             bool koenig_p;
4020             tree args = (cp_parser_parenthesized_expression_list
4021                          (parser, false, /*non_constant_p=*/NULL));
4022
4023             if (args == error_mark_node)
4024               {
4025                 postfix_expression = error_mark_node;
4026                 break;
4027               }
4028
4029             /* Function calls are not permitted in
4030                constant-expressions.  */
4031             if (cp_parser_non_integral_constant_expression (parser,
4032                                                             "a function call"))
4033               {
4034                 postfix_expression = error_mark_node;
4035                 break;
4036               }
4037
4038             koenig_p = false;
4039             if (idk == CP_ID_KIND_UNQUALIFIED)
4040               {
4041                 /* We do not perform argument-dependent lookup if
4042                    normal lookup finds a non-function, in accordance
4043                    with the expected resolution of DR 218.  */
4044                 if (args
4045                     && (is_overloaded_fn (postfix_expression)
4046                         || TREE_CODE (postfix_expression) == IDENTIFIER_NODE))
4047                   {
4048                     koenig_p = true;
4049                     postfix_expression
4050                       = perform_koenig_lookup (postfix_expression, args);
4051                   }
4052                 else if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4053                   postfix_expression
4054                     = unqualified_fn_lookup_error (postfix_expression);
4055               }
4056
4057             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4058               {
4059                 tree instance = TREE_OPERAND (postfix_expression, 0);
4060                 tree fn = TREE_OPERAND (postfix_expression, 1);
4061
4062                 if (processing_template_decl
4063                     && (type_dependent_expression_p (instance)
4064                         || (!BASELINK_P (fn)
4065                             && TREE_CODE (fn) != FIELD_DECL)
4066                         || type_dependent_expression_p (fn)
4067                         || any_type_dependent_arguments_p (args)))
4068                   {
4069                     postfix_expression
4070                       = build_min_nt (CALL_EXPR, postfix_expression,
4071                                       args, NULL_TREE);
4072                     break;
4073                   }
4074
4075                 if (BASELINK_P (fn))
4076                   postfix_expression
4077                     = (build_new_method_call
4078                        (instance, fn, args, NULL_TREE,
4079                         (idk == CP_ID_KIND_QUALIFIED
4080                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL)));
4081                 else
4082                   postfix_expression
4083                     = finish_call_expr (postfix_expression, args,
4084                                         /*disallow_virtual=*/false,
4085                                         /*koenig_p=*/false);
4086               }
4087             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4088                      || TREE_CODE (postfix_expression) == MEMBER_REF
4089                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4090               postfix_expression = (build_offset_ref_call_from_tree
4091                                     (postfix_expression, args));
4092             else if (idk == CP_ID_KIND_QUALIFIED)
4093               /* A call to a static class member, or a namespace-scope
4094                  function.  */
4095               postfix_expression
4096                 = finish_call_expr (postfix_expression, args,
4097                                     /*disallow_virtual=*/true,
4098                                     koenig_p);
4099             else
4100               /* All other function calls.  */
4101               postfix_expression
4102                 = finish_call_expr (postfix_expression, args,
4103                                     /*disallow_virtual=*/false,
4104                                     koenig_p);
4105
4106             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4107             idk = CP_ID_KIND_NONE;
4108           }
4109           break;
4110
4111         case CPP_DOT:
4112         case CPP_DEREF:
4113           /* postfix-expression . template [opt] id-expression
4114              postfix-expression . pseudo-destructor-name
4115              postfix-expression -> template [opt] id-expression
4116              postfix-expression -> pseudo-destructor-name */
4117
4118           /* Consume the `.' or `->' operator.  */
4119           cp_lexer_consume_token (parser->lexer);
4120
4121           postfix_expression
4122             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4123                                                       postfix_expression,
4124                                                       false, &idk);
4125           break;
4126
4127         case CPP_PLUS_PLUS:
4128           /* postfix-expression ++  */
4129           /* Consume the `++' token.  */
4130           cp_lexer_consume_token (parser->lexer);
4131           /* Generate a representation for the complete expression.  */
4132           postfix_expression
4133             = finish_increment_expr (postfix_expression,
4134                                      POSTINCREMENT_EXPR);
4135           /* Increments may not appear in constant-expressions.  */
4136           if (cp_parser_non_integral_constant_expression (parser,
4137                                                           "an increment"))
4138             postfix_expression = error_mark_node;
4139           idk = CP_ID_KIND_NONE;
4140           break;
4141
4142         case CPP_MINUS_MINUS:
4143           /* postfix-expression -- */
4144           /* Consume the `--' token.  */
4145           cp_lexer_consume_token (parser->lexer);
4146           /* Generate a representation for the complete expression.  */
4147           postfix_expression
4148             = finish_increment_expr (postfix_expression,
4149                                      POSTDECREMENT_EXPR);
4150           /* Decrements may not appear in constant-expressions.  */
4151           if (cp_parser_non_integral_constant_expression (parser,
4152                                                           "a decrement"))
4153             postfix_expression = error_mark_node;
4154           idk = CP_ID_KIND_NONE;
4155           break;
4156
4157         default:
4158           return postfix_expression;
4159         }
4160     }
4161
4162   /* We should never get here.  */
4163   abort ();
4164   return error_mark_node;
4165 }
4166
4167 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4168    by cp_parser_builtin_offsetof.  We're looking for
4169
4170      postfix-expression [ expression ]
4171
4172    FOR_OFFSETOF is set if we're being called in that context, which
4173    changes how we deal with integer constant expressions.  */
4174
4175 static tree
4176 cp_parser_postfix_open_square_expression (cp_parser *parser,
4177                                           tree postfix_expression,
4178                                           bool for_offsetof)
4179 {
4180   tree index;
4181
4182   /* Consume the `[' token.  */
4183   cp_lexer_consume_token (parser->lexer);
4184
4185   /* Parse the index expression.  */
4186   /* ??? For offsetof, there is a question of what to allow here.  If
4187      offsetof is not being used in an integral constant expression context,
4188      then we *could* get the right answer by computing the value at runtime.
4189      If we are in an integral constant expression context, then we might
4190      could accept any constant expression; hard to say without analysis.
4191      Rather than open the barn door too wide right away, allow only integer
4192      constant expresions here.  */
4193   if (for_offsetof)
4194     index = cp_parser_constant_expression (parser, false, NULL);
4195   else
4196     index = cp_parser_expression (parser);
4197
4198   /* Look for the closing `]'.  */
4199   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4200
4201   /* Build the ARRAY_REF.  */
4202   postfix_expression = grok_array_decl (postfix_expression, index);
4203
4204   /* When not doing offsetof, array references are not permitted in
4205      constant-expressions.  */
4206   if (!for_offsetof
4207       && (cp_parser_non_integral_constant_expression
4208           (parser, "an array reference")))
4209     postfix_expression = error_mark_node;
4210
4211   return postfix_expression;
4212 }
4213
4214 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4215    by cp_parser_builtin_offsetof.  We're looking for
4216
4217      postfix-expression . template [opt] id-expression
4218      postfix-expression . pseudo-destructor-name
4219      postfix-expression -> template [opt] id-expression
4220      postfix-expression -> pseudo-destructor-name
4221
4222    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4223    limits what of the above we'll actually accept, but nevermind.
4224    TOKEN_TYPE is the "." or "->" token, which will already have been
4225    removed from the stream.  */
4226
4227 static tree
4228 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4229                                         enum cpp_ttype token_type,
4230                                         tree postfix_expression,
4231                                         bool for_offsetof, cp_id_kind *idk)
4232 {
4233   tree name;
4234   bool dependent_p;
4235   bool template_p;
4236   tree scope = NULL_TREE;
4237
4238   /* If this is a `->' operator, dereference the pointer.  */
4239   if (token_type == CPP_DEREF)
4240     postfix_expression = build_x_arrow (postfix_expression);
4241   /* Check to see whether or not the expression is type-dependent.  */
4242   dependent_p = type_dependent_expression_p (postfix_expression);
4243   /* The identifier following the `->' or `.' is not qualified.  */
4244   parser->scope = NULL_TREE;
4245   parser->qualifying_scope = NULL_TREE;
4246   parser->object_scope = NULL_TREE;
4247   *idk = CP_ID_KIND_NONE;
4248   /* Enter the scope corresponding to the type of the object
4249      given by the POSTFIX_EXPRESSION.  */
4250   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4251     {
4252       scope = TREE_TYPE (postfix_expression);
4253       /* According to the standard, no expression should ever have
4254          reference type.  Unfortunately, we do not currently match
4255          the standard in this respect in that our internal representation
4256          of an expression may have reference type even when the standard
4257          says it does not.  Therefore, we have to manually obtain the
4258          underlying type here.  */
4259       scope = non_reference (scope);
4260       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4261       scope = complete_type_or_else (scope, NULL_TREE);
4262       /* Let the name lookup machinery know that we are processing a
4263          class member access expression.  */
4264       parser->context->object_type = scope;
4265       /* If something went wrong, we want to be able to discern that case,
4266          as opposed to the case where there was no SCOPE due to the type
4267          of expression being dependent.  */
4268       if (!scope)
4269         scope = error_mark_node;
4270       /* If the SCOPE was erroneous, make the various semantic analysis
4271          functions exit quickly -- and without issuing additional error
4272          messages.  */
4273       if (scope == error_mark_node)
4274         postfix_expression = error_mark_node;
4275     }
4276
4277   /* If the SCOPE is not a scalar type, we are looking at an
4278      ordinary class member access expression, rather than a
4279      pseudo-destructor-name.  */
4280   if (!scope || !SCALAR_TYPE_P (scope))
4281     {
4282       template_p = cp_parser_optional_template_keyword (parser);
4283       /* Parse the id-expression.  */
4284       name = cp_parser_id_expression (parser, template_p,
4285                                       /*check_dependency_p=*/true,
4286                                       /*template_p=*/NULL,
4287                                       /*declarator_p=*/false);
4288       /* In general, build a SCOPE_REF if the member name is qualified.
4289          However, if the name was not dependent and has already been
4290          resolved; there is no need to build the SCOPE_REF.  For example;
4291
4292              struct X { void f(); };
4293              template <typename T> void f(T* t) { t->X::f(); }
4294
4295          Even though "t" is dependent, "X::f" is not and has been resolved
4296          to a BASELINK; there is no need to include scope information.  */
4297
4298       /* But we do need to remember that there was an explicit scope for
4299          virtual function calls.  */
4300       if (parser->scope)
4301         *idk = CP_ID_KIND_QUALIFIED;
4302
4303       if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4304         {
4305           name = build_nt (SCOPE_REF, parser->scope, name);
4306           parser->scope = NULL_TREE;
4307           parser->qualifying_scope = NULL_TREE;
4308           parser->object_scope = NULL_TREE;
4309         }
4310       if (scope && name && BASELINK_P (name))
4311         adjust_result_of_qualified_name_lookup
4312           (name, BINFO_TYPE (BASELINK_BINFO (name)), scope);
4313       postfix_expression
4314         = finish_class_member_access_expr (postfix_expression, name);
4315     }
4316   /* Otherwise, try the pseudo-destructor-name production.  */
4317   else
4318     {
4319       tree s = NULL_TREE;
4320       tree type;
4321
4322       /* Parse the pseudo-destructor-name.  */
4323       cp_parser_pseudo_destructor_name (parser, &s, &type);
4324       /* Form the call.  */
4325       postfix_expression
4326         = finish_pseudo_destructor_expr (postfix_expression,
4327                                          s, TREE_TYPE (type));
4328     }
4329
4330   /* We no longer need to look up names in the scope of the object on
4331      the left-hand side of the `.' or `->' operator.  */
4332   parser->context->object_type = NULL_TREE;
4333
4334   /* Outside of offsetof, these operators may not appear in
4335      constant-expressions.  */
4336   if (!for_offsetof
4337       && (cp_parser_non_integral_constant_expression
4338           (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4339     postfix_expression = error_mark_node;
4340
4341   return postfix_expression;
4342 }
4343
4344 /* Parse a parenthesized expression-list.
4345
4346    expression-list:
4347      assignment-expression
4348      expression-list, assignment-expression
4349
4350    attribute-list:
4351      expression-list
4352      identifier
4353      identifier, expression-list
4354
4355    Returns a TREE_LIST.  The TREE_VALUE of each node is a
4356    representation of an assignment-expression.  Note that a TREE_LIST
4357    is returned even if there is only a single expression in the list.
4358    error_mark_node is returned if the ( and or ) are
4359    missing. NULL_TREE is returned on no expressions. The parentheses
4360    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4361    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4362    indicates whether or not all of the expressions in the list were
4363    constant.  */
4364
4365 static tree
4366 cp_parser_parenthesized_expression_list (cp_parser* parser,
4367                                          bool is_attribute_list,
4368                                          bool *non_constant_p)
4369 {
4370   tree expression_list = NULL_TREE;
4371   tree identifier = NULL_TREE;
4372
4373   /* Assume all the expressions will be constant.  */
4374   if (non_constant_p)
4375     *non_constant_p = false;
4376
4377   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4378     return error_mark_node;
4379
4380   /* Consume expressions until there are no more.  */
4381   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4382     while (true)
4383       {
4384         tree expr;
4385
4386         /* At the beginning of attribute lists, check to see if the
4387            next token is an identifier.  */
4388         if (is_attribute_list
4389             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4390           {
4391             cp_token *token;
4392
4393             /* Consume the identifier.  */
4394             token = cp_lexer_consume_token (parser->lexer);
4395             /* Save the identifier.  */
4396             identifier = token->value;
4397           }
4398         else
4399           {
4400             /* Parse the next assignment-expression.  */
4401             if (non_constant_p)
4402               {
4403                 bool expr_non_constant_p;
4404                 expr = (cp_parser_constant_expression
4405                         (parser, /*allow_non_constant_p=*/true,
4406                          &expr_non_constant_p));
4407                 if (expr_non_constant_p)
4408                   *non_constant_p = true;
4409               }
4410             else
4411               expr = cp_parser_assignment_expression (parser);
4412
4413              /* Add it to the list.  We add error_mark_node
4414                 expressions to the list, so that we can still tell if
4415                 the correct form for a parenthesized expression-list
4416                 is found. That gives better errors.  */
4417             expression_list = tree_cons (NULL_TREE, expr, expression_list);
4418
4419             if (expr == error_mark_node)
4420               goto skip_comma;
4421           }
4422
4423         /* After the first item, attribute lists look the same as
4424            expression lists.  */
4425         is_attribute_list = false;
4426
4427       get_comma:;
4428         /* If the next token isn't a `,', then we are done.  */
4429         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4430           break;
4431
4432         /* Otherwise, consume the `,' and keep going.  */
4433         cp_lexer_consume_token (parser->lexer);
4434       }
4435
4436   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
4437     {
4438       int ending;
4439
4440     skip_comma:;
4441       /* We try and resync to an unnested comma, as that will give the
4442          user better diagnostics.  */
4443       ending = cp_parser_skip_to_closing_parenthesis (parser,
4444                                                       /*recovering=*/true,
4445                                                       /*or_comma=*/true,
4446                                                       /*consume_paren=*/true);
4447       if (ending < 0)
4448         goto get_comma;
4449       if (!ending)
4450         return error_mark_node;
4451     }
4452
4453   /* We built up the list in reverse order so we must reverse it now.  */
4454   expression_list = nreverse (expression_list);
4455   if (identifier)
4456     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
4457
4458   return expression_list;
4459 }
4460
4461 /* Parse a pseudo-destructor-name.
4462
4463    pseudo-destructor-name:
4464      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
4465      :: [opt] nested-name-specifier template template-id :: ~ type-name
4466      :: [opt] nested-name-specifier [opt] ~ type-name
4467
4468    If either of the first two productions is used, sets *SCOPE to the
4469    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
4470    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
4471    or ERROR_MARK_NODE if the parse fails.  */
4472
4473 static void
4474 cp_parser_pseudo_destructor_name (cp_parser* parser,
4475                                   tree* scope,
4476                                   tree* type)
4477 {
4478   bool nested_name_specifier_p;
4479
4480   /* Look for the optional `::' operator.  */
4481   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
4482   /* Look for the optional nested-name-specifier.  */
4483   nested_name_specifier_p
4484     = (cp_parser_nested_name_specifier_opt (parser,
4485                                             /*typename_keyword_p=*/false,
4486                                             /*check_dependency_p=*/true,
4487                                             /*type_p=*/false,
4488                                             /*is_declaration=*/true)
4489        != NULL_TREE);
4490   /* Now, if we saw a nested-name-specifier, we might be doing the
4491      second production.  */
4492   if (nested_name_specifier_p
4493       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
4494     {
4495       /* Consume the `template' keyword.  */
4496       cp_lexer_consume_token (parser->lexer);
4497       /* Parse the template-id.  */
4498       cp_parser_template_id (parser,
4499                              /*template_keyword_p=*/true,
4500                              /*check_dependency_p=*/false,
4501                              /*is_declaration=*/true);
4502       /* Look for the `::' token.  */
4503       cp_parser_require (parser, CPP_SCOPE, "`::'");
4504     }
4505   /* If the next token is not a `~', then there might be some
4506      additional qualification.  */
4507   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
4508     {
4509       /* Look for the type-name.  */
4510       *scope = TREE_TYPE (cp_parser_type_name (parser));
4511
4512       /* If we didn't get an aggregate type, or we don't have ::~,
4513          then something has gone wrong.  Since the only caller of this
4514          function is looking for something after `.' or `->' after a
4515          scalar type, most likely the program is trying to get a
4516          member of a non-aggregate type.  */
4517       if (*scope == error_mark_node
4518           || cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
4519           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
4520         {
4521           cp_parser_error (parser, "request for member of non-aggregate type");
4522           *type = error_mark_node;
4523           return;
4524         }
4525
4526       /* Look for the `::' token.  */
4527       cp_parser_require (parser, CPP_SCOPE, "`::'");
4528     }
4529   else
4530     *scope = NULL_TREE;
4531
4532   /* Look for the `~'.  */
4533   cp_parser_require (parser, CPP_COMPL, "`~'");
4534   /* Look for the type-name again.  We are not responsible for
4535      checking that it matches the first type-name.  */
4536   *type = cp_parser_type_name (parser);
4537 }
4538
4539 /* Parse a unary-expression.
4540
4541    unary-expression:
4542      postfix-expression
4543      ++ cast-expression
4544      -- cast-expression
4545      unary-operator cast-expression
4546      sizeof unary-expression
4547      sizeof ( type-id )
4548      new-expression
4549      delete-expression
4550
4551    GNU Extensions:
4552
4553    unary-expression:
4554      __extension__ cast-expression
4555      __alignof__ unary-expression
4556      __alignof__ ( type-id )
4557      __real__ cast-expression
4558      __imag__ cast-expression
4559      && identifier
4560
4561    ADDRESS_P is true iff the unary-expression is appearing as the
4562    operand of the `&' operator.
4563
4564    Returns a representation of the expression.  */
4565
4566 static tree
4567 cp_parser_unary_expression (cp_parser *parser, bool address_p)
4568 {
4569   cp_token *token;
4570   enum tree_code unary_operator;
4571
4572   /* Peek at the next token.  */
4573   token = cp_lexer_peek_token (parser->lexer);
4574   /* Some keywords give away the kind of expression.  */
4575   if (token->type == CPP_KEYWORD)
4576     {
4577       enum rid keyword = token->keyword;
4578
4579       switch (keyword)
4580         {
4581         case RID_ALIGNOF:
4582         case RID_SIZEOF:
4583           {
4584             tree operand;
4585             enum tree_code op;
4586
4587             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
4588             /* Consume the token.  */
4589             cp_lexer_consume_token (parser->lexer);
4590             /* Parse the operand.  */
4591             operand = cp_parser_sizeof_operand (parser, keyword);
4592
4593             if (TYPE_P (operand))
4594               return cxx_sizeof_or_alignof_type (operand, op, true);
4595             else
4596               return cxx_sizeof_or_alignof_expr (operand, op);
4597           }
4598
4599         case RID_NEW:
4600           return cp_parser_new_expression (parser);
4601
4602         case RID_DELETE:
4603           return cp_parser_delete_expression (parser);
4604
4605         case RID_EXTENSION:
4606           {
4607             /* The saved value of the PEDANTIC flag.  */
4608             int saved_pedantic;
4609             tree expr;
4610
4611             /* Save away the PEDANTIC flag.  */
4612             cp_parser_extension_opt (parser, &saved_pedantic);
4613             /* Parse the cast-expression.  */
4614             expr = cp_parser_simple_cast_expression (parser);
4615             /* Restore the PEDANTIC flag.  */
4616             pedantic = saved_pedantic;
4617
4618             return expr;
4619           }
4620
4621         case RID_REALPART:
4622         case RID_IMAGPART:
4623           {
4624             tree expression;
4625
4626             /* Consume the `__real__' or `__imag__' token.  */
4627             cp_lexer_consume_token (parser->lexer);
4628             /* Parse the cast-expression.  */
4629             expression = cp_parser_simple_cast_expression (parser);
4630             /* Create the complete representation.  */
4631             return build_x_unary_op ((keyword == RID_REALPART
4632                                       ? REALPART_EXPR : IMAGPART_EXPR),
4633                                      expression);
4634           }
4635           break;
4636
4637         default:
4638           break;
4639         }
4640     }
4641
4642   /* Look for the `:: new' and `:: delete', which also signal the
4643      beginning of a new-expression, or delete-expression,
4644      respectively.  If the next token is `::', then it might be one of
4645      these.  */
4646   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
4647     {
4648       enum rid keyword;
4649
4650       /* See if the token after the `::' is one of the keywords in
4651          which we're interested.  */
4652       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
4653       /* If it's `new', we have a new-expression.  */
4654       if (keyword == RID_NEW)
4655         return cp_parser_new_expression (parser);
4656       /* Similarly, for `delete'.  */
4657       else if (keyword == RID_DELETE)
4658         return cp_parser_delete_expression (parser);
4659     }
4660
4661   /* Look for a unary operator.  */
4662   unary_operator = cp_parser_unary_operator (token);
4663   /* The `++' and `--' operators can be handled similarly, even though
4664      they are not technically unary-operators in the grammar.  */
4665   if (unary_operator == ERROR_MARK)
4666     {
4667       if (token->type == CPP_PLUS_PLUS)
4668         unary_operator = PREINCREMENT_EXPR;
4669       else if (token->type == CPP_MINUS_MINUS)
4670         unary_operator = PREDECREMENT_EXPR;
4671       /* Handle the GNU address-of-label extension.  */
4672       else if (cp_parser_allow_gnu_extensions_p (parser)
4673                && token->type == CPP_AND_AND)
4674         {
4675           tree identifier;
4676
4677           /* Consume the '&&' token.  */
4678           cp_lexer_consume_token (parser->lexer);
4679           /* Look for the identifier.  */
4680           identifier = cp_parser_identifier (parser);
4681           /* Create an expression representing the address.  */
4682           return finish_label_address_expr (identifier);
4683         }
4684     }
4685   if (unary_operator != ERROR_MARK)
4686     {
4687       tree cast_expression;
4688       tree expression = error_mark_node;
4689       const char *non_constant_p = NULL;
4690
4691       /* Consume the operator token.  */
4692       token = cp_lexer_consume_token (parser->lexer);
4693       /* Parse the cast-expression.  */
4694       cast_expression
4695         = cp_parser_cast_expression (parser, unary_operator == ADDR_EXPR);
4696       /* Now, build an appropriate representation.  */
4697       switch (unary_operator)
4698         {
4699         case INDIRECT_REF:
4700           non_constant_p = "`*'";
4701           expression = build_x_indirect_ref (cast_expression, "unary *");
4702           break;
4703
4704         case ADDR_EXPR:
4705           non_constant_p = "`&'";
4706           /* Fall through.  */
4707         case BIT_NOT_EXPR:
4708           expression = build_x_unary_op (unary_operator, cast_expression);
4709           break;
4710
4711         case PREINCREMENT_EXPR:
4712         case PREDECREMENT_EXPR:
4713           non_constant_p = (unary_operator == PREINCREMENT_EXPR
4714                             ? "`++'" : "`--'");
4715           /* Fall through.  */
4716         case CONVERT_EXPR:
4717         case NEGATE_EXPR:
4718         case TRUTH_NOT_EXPR:
4719           expression = finish_unary_op_expr (unary_operator, cast_expression);
4720           break;
4721
4722         default:
4723           abort ();
4724         }
4725
4726       if (non_constant_p
4727           && cp_parser_non_integral_constant_expression (parser,
4728                                                          non_constant_p))
4729         expression = error_mark_node;
4730
4731       return expression;
4732     }
4733
4734   return cp_parser_postfix_expression (parser, address_p);
4735 }
4736
4737 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
4738    unary-operator, the corresponding tree code is returned.  */
4739
4740 static enum tree_code
4741 cp_parser_unary_operator (cp_token* token)
4742 {
4743   switch (token->type)
4744     {
4745     case CPP_MULT:
4746       return INDIRECT_REF;
4747
4748     case CPP_AND:
4749       return ADDR_EXPR;
4750
4751     case CPP_PLUS:
4752       return CONVERT_EXPR;
4753
4754     case CPP_MINUS:
4755       return NEGATE_EXPR;
4756
4757     case CPP_NOT:
4758       return TRUTH_NOT_EXPR;
4759
4760     case CPP_COMPL:
4761       return BIT_NOT_EXPR;
4762
4763     default:
4764       return ERROR_MARK;
4765     }
4766 }
4767
4768 /* Parse a new-expression.
4769
4770    new-expression:
4771      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
4772      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
4773
4774    Returns a representation of the expression.  */
4775
4776 static tree
4777 cp_parser_new_expression (cp_parser* parser)
4778 {
4779   bool global_scope_p;
4780   tree placement;
4781   tree type;
4782   tree initializer;
4783   tree nelts;
4784
4785   /* Look for the optional `::' operator.  */
4786   global_scope_p
4787     = (cp_parser_global_scope_opt (parser,
4788                                    /*current_scope_valid_p=*/false)
4789        != NULL_TREE);
4790   /* Look for the `new' operator.  */
4791   cp_parser_require_keyword (parser, RID_NEW, "`new'");
4792   /* There's no easy way to tell a new-placement from the
4793      `( type-id )' construct.  */
4794   cp_parser_parse_tentatively (parser);
4795   /* Look for a new-placement.  */
4796   placement = cp_parser_new_placement (parser);
4797   /* If that didn't work out, there's no new-placement.  */
4798   if (!cp_parser_parse_definitely (parser))
4799     placement = NULL_TREE;
4800
4801   /* If the next token is a `(', then we have a parenthesized
4802      type-id.  */
4803   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4804     {
4805       /* Consume the `('.  */
4806       cp_lexer_consume_token (parser->lexer);
4807       /* Parse the type-id.  */
4808       type = cp_parser_type_id (parser);
4809       /* Look for the closing `)'.  */
4810       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4811       /* There should not be a direct-new-declarator in this production,
4812          but GCC used to allowed this, so we check and emit a sensible error
4813          message for this case.  */
4814       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
4815         {
4816           error ("array bound forbidden after parenthesized type-id");
4817           inform ("try removing the parentheses around the type-id");
4818           cp_parser_direct_new_declarator (parser);
4819         }
4820       nelts = integer_one_node;
4821     }
4822   /* Otherwise, there must be a new-type-id.  */
4823   else
4824     type = cp_parser_new_type_id (parser, &nelts);
4825
4826   /* If the next token is a `(', then we have a new-initializer.  */
4827   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4828     initializer = cp_parser_new_initializer (parser);
4829   else
4830     initializer = NULL_TREE;
4831
4832   /* A new-expression may not appear in an integral constant
4833      expression.  */
4834   if (cp_parser_non_integral_constant_expression (parser, "`new'"))
4835     return error_mark_node;
4836
4837   /* Create a representation of the new-expression.  */
4838   return build_new (placement, type, nelts, initializer, global_scope_p);
4839 }
4840
4841 /* Parse a new-placement.
4842
4843    new-placement:
4844      ( expression-list )
4845
4846    Returns the same representation as for an expression-list.  */
4847
4848 static tree
4849 cp_parser_new_placement (cp_parser* parser)
4850 {
4851   tree expression_list;
4852
4853   /* Parse the expression-list.  */
4854   expression_list = (cp_parser_parenthesized_expression_list
4855                      (parser, false, /*non_constant_p=*/NULL));
4856
4857   return expression_list;
4858 }
4859
4860 /* Parse a new-type-id.
4861
4862    new-type-id:
4863      type-specifier-seq new-declarator [opt]
4864
4865    Returns the TYPE allocated.  If the new-type-id indicates an array
4866    type, *NELTS is set to the number of elements in the last array
4867    bound; the TYPE will not include the last array bound.  */
4868
4869 static tree
4870 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
4871 {
4872   cp_decl_specifier_seq type_specifier_seq;
4873   cp_declarator *new_declarator;
4874   cp_declarator *declarator;
4875   cp_declarator *outer_declarator;
4876   const char *saved_message;
4877   tree type;
4878
4879   /* The type-specifier sequence must not contain type definitions.
4880      (It cannot contain declarations of new types either, but if they
4881      are not definitions we will catch that because they are not
4882      complete.)  */
4883   saved_message = parser->type_definition_forbidden_message;
4884   parser->type_definition_forbidden_message
4885     = "types may not be defined in a new-type-id";
4886   /* Parse the type-specifier-seq.  */
4887   cp_parser_type_specifier_seq (parser, &type_specifier_seq);
4888   /* Restore the old message.  */
4889   parser->type_definition_forbidden_message = saved_message;
4890   /* Parse the new-declarator.  */
4891   new_declarator = cp_parser_new_declarator_opt (parser);
4892
4893   /* Determine the number of elements in the last array dimension, if
4894      any.  */
4895   *nelts = NULL_TREE;
4896   /* Skip down to the last array dimension.  */
4897   declarator = new_declarator;
4898   outer_declarator = NULL;
4899   while (declarator && (declarator->kind == cdk_pointer
4900                         || declarator->kind == cdk_ptrmem))
4901     {
4902       outer_declarator = declarator;
4903       declarator = declarator->declarator;
4904     }
4905   while (declarator
4906          && declarator->kind == cdk_array
4907          && declarator->declarator
4908          && declarator->declarator->kind == cdk_array)
4909     {
4910       outer_declarator = declarator;
4911       declarator = declarator->declarator;
4912     }
4913
4914   if (declarator && declarator->kind == cdk_array)
4915     {
4916       *nelts = declarator->u.array.bounds;
4917       if (*nelts == error_mark_node)
4918         *nelts = integer_one_node;
4919       else if (!processing_template_decl)
4920         {
4921           if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, *nelts,
4922                                            false))
4923             pedwarn ("size in array new must have integral type");
4924           *nelts = save_expr (cp_convert (sizetype, *nelts));
4925           if (*nelts == integer_zero_node)
4926             warning ("zero size array reserves no space");
4927         }
4928       if (outer_declarator)
4929         outer_declarator->declarator = declarator->declarator;
4930       else
4931         new_declarator = NULL;
4932     }
4933
4934   type = groktypename (&type_specifier_seq, new_declarator);
4935   if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
4936     {
4937       *nelts = array_type_nelts_top (type);
4938       type = TREE_TYPE (type);
4939     }
4940   return type;
4941 }
4942
4943 /* Parse an (optional) new-declarator.
4944
4945    new-declarator:
4946      ptr-operator new-declarator [opt]
4947      direct-new-declarator
4948
4949    Returns the declarator.  */
4950
4951 static cp_declarator *
4952 cp_parser_new_declarator_opt (cp_parser* parser)
4953 {
4954   enum tree_code code;
4955   tree type;
4956   cp_cv_quals cv_quals;
4957
4958   /* We don't know if there's a ptr-operator next, or not.  */
4959   cp_parser_parse_tentatively (parser);
4960   /* Look for a ptr-operator.  */
4961   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
4962   /* If that worked, look for more new-declarators.  */
4963   if (cp_parser_parse_definitely (parser))
4964     {
4965       cp_declarator *declarator;
4966
4967       /* Parse another optional declarator.  */
4968       declarator = cp_parser_new_declarator_opt (parser);
4969
4970       /* Create the representation of the declarator.  */
4971       if (type)
4972         declarator = make_ptrmem_declarator (cv_quals, type, declarator);
4973       else if (code == INDIRECT_REF)
4974         declarator = make_pointer_declarator (cv_quals, declarator);
4975       else
4976         declarator = make_reference_declarator (cv_quals, declarator);
4977
4978       return declarator;
4979     }
4980
4981   /* If the next token is a `[', there is a direct-new-declarator.  */
4982   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
4983     return cp_parser_direct_new_declarator (parser);
4984
4985   return NULL;
4986 }
4987
4988 /* Parse a direct-new-declarator.
4989
4990    direct-new-declarator:
4991      [ expression ]
4992      direct-new-declarator [constant-expression]
4993
4994    */
4995
4996 static cp_declarator *
4997 cp_parser_direct_new_declarator (cp_parser* parser)
4998 {
4999   cp_declarator *declarator = NULL;
5000
5001   while (true)
5002     {
5003       tree expression;
5004
5005       /* Look for the opening `['.  */
5006       cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
5007       /* The first expression is not required to be constant.  */
5008       if (!declarator)
5009         {
5010           expression = cp_parser_expression (parser);
5011           /* The standard requires that the expression have integral
5012              type.  DR 74 adds enumeration types.  We believe that the
5013              real intent is that these expressions be handled like the
5014              expression in a `switch' condition, which also allows
5015              classes with a single conversion to integral or
5016              enumeration type.  */
5017           if (!processing_template_decl)
5018             {
5019               expression
5020                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5021                                               expression,
5022                                               /*complain=*/true);
5023               if (!expression)
5024                 {
5025                   error ("expression in new-declarator must have integral or enumeration type");
5026                   expression = error_mark_node;
5027                 }
5028             }
5029         }
5030       /* But all the other expressions must be.  */
5031       else
5032         expression
5033           = cp_parser_constant_expression (parser,
5034                                            /*allow_non_constant=*/false,
5035                                            NULL);
5036       /* Look for the closing `]'.  */
5037       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5038
5039       /* Add this bound to the declarator.  */
5040       declarator = make_array_declarator (declarator, expression);
5041
5042       /* If the next token is not a `[', then there are no more
5043          bounds.  */
5044       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5045         break;
5046     }
5047
5048   return declarator;
5049 }
5050
5051 /* Parse a new-initializer.
5052
5053    new-initializer:
5054      ( expression-list [opt] )
5055
5056    Returns a representation of the expression-list.  If there is no
5057    expression-list, VOID_ZERO_NODE is returned.  */
5058
5059 static tree
5060 cp_parser_new_initializer (cp_parser* parser)
5061 {
5062   tree expression_list;
5063
5064   expression_list = (cp_parser_parenthesized_expression_list
5065                      (parser, false, /*non_constant_p=*/NULL));
5066   if (!expression_list)
5067     expression_list = void_zero_node;
5068
5069   return expression_list;
5070 }
5071
5072 /* Parse a delete-expression.
5073
5074    delete-expression:
5075      :: [opt] delete cast-expression
5076      :: [opt] delete [ ] cast-expression
5077
5078    Returns a representation of the expression.  */
5079
5080 static tree
5081 cp_parser_delete_expression (cp_parser* parser)
5082 {
5083   bool global_scope_p;
5084   bool array_p;
5085   tree expression;
5086
5087   /* Look for the optional `::' operator.  */
5088   global_scope_p
5089     = (cp_parser_global_scope_opt (parser,
5090                                    /*current_scope_valid_p=*/false)
5091        != NULL_TREE);
5092   /* Look for the `delete' keyword.  */
5093   cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
5094   /* See if the array syntax is in use.  */
5095   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5096     {
5097       /* Consume the `[' token.  */
5098       cp_lexer_consume_token (parser->lexer);
5099       /* Look for the `]' token.  */
5100       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5101       /* Remember that this is the `[]' construct.  */
5102       array_p = true;
5103     }
5104   else
5105     array_p = false;
5106
5107   /* Parse the cast-expression.  */
5108   expression = cp_parser_simple_cast_expression (parser);
5109
5110   /* A delete-expression may not appear in an integral constant
5111      expression.  */
5112   if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
5113     return error_mark_node;
5114
5115   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5116 }
5117
5118 /* Parse a cast-expression.
5119
5120    cast-expression:
5121      unary-expression
5122      ( type-id ) cast-expression
5123
5124    Returns a representation of the expression.  */
5125
5126 static tree
5127 cp_parser_cast_expression (cp_parser *parser, bool address_p)
5128 {
5129   /* If it's a `(', then we might be looking at a cast.  */
5130   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5131     {
5132       tree type = NULL_TREE;
5133       tree expr = NULL_TREE;
5134       bool compound_literal_p;
5135       const char *saved_message;
5136
5137       /* There's no way to know yet whether or not this is a cast.
5138          For example, `(int (3))' is a unary-expression, while `(int)
5139          3' is a cast.  So, we resort to parsing tentatively.  */
5140       cp_parser_parse_tentatively (parser);
5141       /* Types may not be defined in a cast.  */
5142       saved_message = parser->type_definition_forbidden_message;
5143       parser->type_definition_forbidden_message
5144         = "types may not be defined in casts";
5145       /* Consume the `('.  */
5146       cp_lexer_consume_token (parser->lexer);
5147       /* A very tricky bit is that `(struct S) { 3 }' is a
5148          compound-literal (which we permit in C++ as an extension).
5149          But, that construct is not a cast-expression -- it is a
5150          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5151          is legal; if the compound-literal were a cast-expression,
5152          you'd need an extra set of parentheses.)  But, if we parse
5153          the type-id, and it happens to be a class-specifier, then we
5154          will commit to the parse at that point, because we cannot
5155          undo the action that is done when creating a new class.  So,
5156          then we cannot back up and do a postfix-expression.
5157
5158          Therefore, we scan ahead to the closing `)', and check to see
5159          if the token after the `)' is a `{'.  If so, we are not
5160          looking at a cast-expression.
5161
5162          Save tokens so that we can put them back.  */
5163       cp_lexer_save_tokens (parser->lexer);
5164       /* Skip tokens until the next token is a closing parenthesis.
5165          If we find the closing `)', and the next token is a `{', then
5166          we are looking at a compound-literal.  */
5167       compound_literal_p
5168         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5169                                                   /*consume_paren=*/true)
5170            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5171       /* Roll back the tokens we skipped.  */
5172       cp_lexer_rollback_tokens (parser->lexer);
5173       /* If we were looking at a compound-literal, simulate an error
5174          so that the call to cp_parser_parse_definitely below will
5175          fail.  */
5176       if (compound_literal_p)
5177         cp_parser_simulate_error (parser);
5178       else
5179         {
5180           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5181           parser->in_type_id_in_expr_p = true;
5182           /* Look for the type-id.  */
5183           type = cp_parser_type_id (parser);
5184           /* Look for the closing `)'.  */
5185           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5186           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5187         }
5188
5189       /* Restore the saved message.  */
5190       parser->type_definition_forbidden_message = saved_message;
5191
5192       /* If ok so far, parse the dependent expression. We cannot be
5193          sure it is a cast. Consider `(T ())'.  It is a parenthesized
5194          ctor of T, but looks like a cast to function returning T
5195          without a dependent expression.  */
5196       if (!cp_parser_error_occurred (parser))
5197         expr = cp_parser_simple_cast_expression (parser);
5198
5199       if (cp_parser_parse_definitely (parser))
5200         {
5201           /* Warn about old-style casts, if so requested.  */
5202           if (warn_old_style_cast
5203               && !in_system_header
5204               && !VOID_TYPE_P (type)
5205               && current_lang_name != lang_name_c)
5206             warning ("use of old-style cast");
5207
5208           /* Only type conversions to integral or enumeration types
5209              can be used in constant-expressions.  */
5210           if (parser->integral_constant_expression_p
5211               && !dependent_type_p (type)
5212               && !INTEGRAL_OR_ENUMERATION_TYPE_P (type)
5213               && (cp_parser_non_integral_constant_expression
5214                   (parser,
5215                    "a cast to a type other than an integral or "
5216                    "enumeration type")))
5217             return error_mark_node;
5218
5219           /* Perform the cast.  */
5220           expr = build_c_cast (type, expr);
5221           return expr;
5222         }
5223     }
5224
5225   /* If we get here, then it's not a cast, so it must be a
5226      unary-expression.  */
5227   return cp_parser_unary_expression (parser, address_p);
5228 }
5229
5230 /* Parse a pm-expression.
5231
5232    pm-expression:
5233      cast-expression
5234      pm-expression .* cast-expression
5235      pm-expression ->* cast-expression
5236
5237      Returns a representation of the expression.  */
5238
5239 static tree
5240 cp_parser_pm_expression (cp_parser* parser)
5241 {
5242   static const cp_parser_token_tree_map map = {
5243     { CPP_DEREF_STAR, MEMBER_REF },
5244     { CPP_DOT_STAR, DOTSTAR_EXPR },
5245     { CPP_EOF, ERROR_MARK }
5246   };
5247
5248   return cp_parser_binary_expression (parser, map,
5249                                       cp_parser_simple_cast_expression);
5250 }
5251
5252 /* Parse a multiplicative-expression.
5253
5254    multiplicative-expression:
5255      pm-expression
5256      multiplicative-expression * pm-expression
5257      multiplicative-expression / pm-expression
5258      multiplicative-expression % pm-expression
5259
5260    Returns a representation of the expression.  */
5261
5262 static tree
5263 cp_parser_multiplicative_expression (cp_parser* parser)
5264 {
5265   static const cp_parser_token_tree_map map = {
5266     { CPP_MULT, MULT_EXPR },
5267     { CPP_DIV, TRUNC_DIV_EXPR },
5268     { CPP_MOD, TRUNC_MOD_EXPR },
5269     { CPP_EOF, ERROR_MARK }
5270   };
5271
5272   return cp_parser_binary_expression (parser,
5273                                       map,
5274                                       cp_parser_pm_expression);
5275 }
5276
5277 /* Parse an additive-expression.
5278
5279    additive-expression:
5280      multiplicative-expression
5281      additive-expression + multiplicative-expression
5282      additive-expression - multiplicative-expression
5283
5284    Returns a representation of the expression.  */
5285
5286 static tree
5287 cp_parser_additive_expression (cp_parser* parser)
5288 {
5289   static const cp_parser_token_tree_map map = {
5290     { CPP_PLUS, PLUS_EXPR },
5291     { CPP_MINUS, MINUS_EXPR },
5292     { CPP_EOF, ERROR_MARK }
5293   };
5294
5295   return cp_parser_binary_expression (parser,
5296                                       map,
5297                                       cp_parser_multiplicative_expression);
5298 }
5299
5300 /* Parse a shift-expression.
5301
5302    shift-expression:
5303      additive-expression
5304      shift-expression << additive-expression
5305      shift-expression >> additive-expression
5306
5307    Returns a representation of the expression.  */
5308
5309 static tree
5310 cp_parser_shift_expression (cp_parser* parser)
5311 {
5312   static const cp_parser_token_tree_map map = {
5313     { CPP_LSHIFT, LSHIFT_EXPR },
5314     { CPP_RSHIFT, RSHIFT_EXPR },
5315     { CPP_EOF, ERROR_MARK }
5316   };
5317
5318   return cp_parser_binary_expression (parser,
5319                                       map,
5320                                       cp_parser_additive_expression);
5321 }
5322
5323 /* Parse a relational-expression.
5324
5325    relational-expression:
5326      shift-expression
5327      relational-expression < shift-expression
5328      relational-expression > shift-expression
5329      relational-expression <= shift-expression
5330      relational-expression >= shift-expression
5331
5332    GNU Extension:
5333
5334    relational-expression:
5335      relational-expression <? shift-expression
5336      relational-expression >? shift-expression
5337
5338    Returns a representation of the expression.  */
5339
5340 static tree
5341 cp_parser_relational_expression (cp_parser* parser)
5342 {
5343   static const cp_parser_token_tree_map map = {
5344     { CPP_LESS, LT_EXPR },
5345     { CPP_GREATER, GT_EXPR },
5346     { CPP_LESS_EQ, LE_EXPR },
5347     { CPP_GREATER_EQ, GE_EXPR },
5348     { CPP_MIN, MIN_EXPR },
5349     { CPP_MAX, MAX_EXPR },
5350     { CPP_EOF, ERROR_MARK }
5351   };
5352
5353   return cp_parser_binary_expression (parser,
5354                                       map,
5355                                       cp_parser_shift_expression);
5356 }
5357
5358 /* Parse an equality-expression.
5359
5360    equality-expression:
5361      relational-expression
5362      equality-expression == relational-expression
5363      equality-expression != relational-expression
5364
5365    Returns a representation of the expression.  */
5366
5367 static tree
5368 cp_parser_equality_expression (cp_parser* parser)
5369 {
5370   static const cp_parser_token_tree_map map = {
5371     { CPP_EQ_EQ, EQ_EXPR },
5372     { CPP_NOT_EQ, NE_EXPR },
5373     { CPP_EOF, ERROR_MARK }
5374   };
5375
5376   return cp_parser_binary_expression (parser,
5377                                       map,
5378                                       cp_parser_relational_expression);
5379 }
5380
5381 /* Parse an and-expression.
5382
5383    and-expression:
5384      equality-expression
5385      and-expression & equality-expression
5386
5387    Returns a representation of the expression.  */
5388
5389 static tree
5390 cp_parser_and_expression (cp_parser* parser)
5391 {
5392   static const cp_parser_token_tree_map map = {
5393     { CPP_AND, BIT_AND_EXPR },
5394     { CPP_EOF, ERROR_MARK }
5395   };
5396
5397   return cp_parser_binary_expression (parser,
5398                                       map,
5399                                       cp_parser_equality_expression);
5400 }
5401
5402 /* Parse an exclusive-or-expression.
5403
5404    exclusive-or-expression:
5405      and-expression
5406      exclusive-or-expression ^ and-expression
5407
5408    Returns a representation of the expression.  */
5409
5410 static tree
5411 cp_parser_exclusive_or_expression (cp_parser* parser)
5412 {
5413   static const cp_parser_token_tree_map map = {
5414     { CPP_XOR, BIT_XOR_EXPR },
5415     { CPP_EOF, ERROR_MARK }
5416   };
5417
5418   return cp_parser_binary_expression (parser,
5419                                       map,
5420                                       cp_parser_and_expression);
5421 }
5422
5423
5424 /* Parse an inclusive-or-expression.
5425
5426    inclusive-or-expression:
5427      exclusive-or-expression
5428      inclusive-or-expression | exclusive-or-expression
5429
5430    Returns a representation of the expression.  */
5431
5432 static tree
5433 cp_parser_inclusive_or_expression (cp_parser* parser)
5434 {
5435   static const cp_parser_token_tree_map map = {
5436     { CPP_OR, BIT_IOR_EXPR },
5437     { CPP_EOF, ERROR_MARK }
5438   };
5439
5440   return cp_parser_binary_expression (parser,
5441                                       map,
5442                                       cp_parser_exclusive_or_expression);
5443 }
5444
5445 /* Parse a logical-and-expression.
5446
5447    logical-and-expression:
5448      inclusive-or-expression
5449      logical-and-expression && inclusive-or-expression
5450
5451    Returns a representation of the expression.  */
5452
5453 static tree
5454 cp_parser_logical_and_expression (cp_parser* parser)
5455 {
5456   static const cp_parser_token_tree_map map = {
5457     { CPP_AND_AND, TRUTH_ANDIF_EXPR },
5458     { CPP_EOF, ERROR_MARK }
5459   };
5460
5461   return cp_parser_binary_expression (parser,
5462                                       map,
5463                                       cp_parser_inclusive_or_expression);
5464 }
5465
5466 /* Parse a logical-or-expression.
5467
5468    logical-or-expression:
5469      logical-and-expression
5470      logical-or-expression || logical-and-expression
5471
5472    Returns a representation of the expression.  */
5473
5474 static tree
5475 cp_parser_logical_or_expression (cp_parser* parser)
5476 {
5477   static const cp_parser_token_tree_map map = {
5478     { CPP_OR_OR, TRUTH_ORIF_EXPR },
5479     { CPP_EOF, ERROR_MARK }
5480   };
5481
5482   return cp_parser_binary_expression (parser,
5483                                       map,
5484                                       cp_parser_logical_and_expression);
5485 }
5486
5487 /* Parse the `? expression : assignment-expression' part of a
5488    conditional-expression.  The LOGICAL_OR_EXPR is the
5489    logical-or-expression that started the conditional-expression.
5490    Returns a representation of the entire conditional-expression.
5491
5492    This routine is used by cp_parser_assignment_expression.
5493
5494      ? expression : assignment-expression
5495
5496    GNU Extensions:
5497
5498      ? : assignment-expression */
5499
5500 static tree
5501 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
5502 {
5503   tree expr;
5504   tree assignment_expr;
5505
5506   /* Consume the `?' token.  */
5507   cp_lexer_consume_token (parser->lexer);
5508   if (cp_parser_allow_gnu_extensions_p (parser)
5509       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
5510     /* Implicit true clause.  */
5511     expr = NULL_TREE;
5512   else
5513     /* Parse the expression.  */
5514     expr = cp_parser_expression (parser);
5515
5516   /* The next token should be a `:'.  */
5517   cp_parser_require (parser, CPP_COLON, "`:'");
5518   /* Parse the assignment-expression.  */
5519   assignment_expr = cp_parser_assignment_expression (parser);
5520
5521   /* Build the conditional-expression.  */
5522   return build_x_conditional_expr (logical_or_expr,
5523                                    expr,
5524                                    assignment_expr);
5525 }
5526
5527 /* Parse an assignment-expression.
5528
5529    assignment-expression:
5530      conditional-expression
5531      logical-or-expression assignment-operator assignment_expression
5532      throw-expression
5533
5534    Returns a representation for the expression.  */
5535
5536 static tree
5537 cp_parser_assignment_expression (cp_parser* parser)
5538 {
5539   tree expr;
5540
5541   /* If the next token is the `throw' keyword, then we're looking at
5542      a throw-expression.  */
5543   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
5544     expr = cp_parser_throw_expression (parser);
5545   /* Otherwise, it must be that we are looking at a
5546      logical-or-expression.  */
5547   else
5548     {
5549       /* Parse the logical-or-expression.  */
5550       expr = cp_parser_logical_or_expression (parser);
5551       /* If the next token is a `?' then we're actually looking at a
5552          conditional-expression.  */
5553       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
5554         return cp_parser_question_colon_clause (parser, expr);
5555       else
5556         {
5557           enum tree_code assignment_operator;
5558
5559           /* If it's an assignment-operator, we're using the second
5560              production.  */
5561           assignment_operator
5562             = cp_parser_assignment_operator_opt (parser);
5563           if (assignment_operator != ERROR_MARK)
5564             {
5565               tree rhs;
5566
5567               /* Parse the right-hand side of the assignment.  */
5568               rhs = cp_parser_assignment_expression (parser);
5569               /* An assignment may not appear in a
5570                  constant-expression.  */
5571               if (cp_parser_non_integral_constant_expression (parser,
5572                                                               "an assignment"))
5573                 return error_mark_node;
5574               /* Build the assignment expression.  */
5575               expr = build_x_modify_expr (expr,
5576                                           assignment_operator,
5577                                           rhs);
5578             }
5579         }
5580     }
5581
5582   return expr;
5583 }
5584
5585 /* Parse an (optional) assignment-operator.
5586
5587    assignment-operator: one of
5588      = *= /= %= += -= >>= <<= &= ^= |=
5589
5590    GNU Extension:
5591
5592    assignment-operator: one of
5593      <?= >?=
5594
5595    If the next token is an assignment operator, the corresponding tree
5596    code is returned, and the token is consumed.  For example, for
5597    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
5598    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
5599    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
5600    operator, ERROR_MARK is returned.  */
5601
5602 static enum tree_code
5603 cp_parser_assignment_operator_opt (cp_parser* parser)
5604 {
5605   enum tree_code op;
5606   cp_token *token;
5607
5608   /* Peek at the next toen.  */
5609   token = cp_lexer_peek_token (parser->lexer);
5610
5611   switch (token->type)
5612     {
5613     case CPP_EQ:
5614       op = NOP_EXPR;
5615       break;
5616
5617     case CPP_MULT_EQ:
5618       op = MULT_EXPR;
5619       break;
5620
5621     case CPP_DIV_EQ:
5622       op = TRUNC_DIV_EXPR;
5623       break;
5624
5625     case CPP_MOD_EQ:
5626       op = TRUNC_MOD_EXPR;
5627       break;
5628
5629     case CPP_PLUS_EQ:
5630       op = PLUS_EXPR;
5631       break;
5632
5633     case CPP_MINUS_EQ:
5634       op = MINUS_EXPR;
5635       break;
5636
5637     case CPP_RSHIFT_EQ:
5638       op = RSHIFT_EXPR;
5639       break;
5640
5641     case CPP_LSHIFT_EQ:
5642       op = LSHIFT_EXPR;
5643       break;
5644
5645     case CPP_AND_EQ:
5646       op = BIT_AND_EXPR;
5647       break;
5648
5649     case CPP_XOR_EQ:
5650       op = BIT_XOR_EXPR;
5651       break;
5652
5653     case CPP_OR_EQ:
5654       op = BIT_IOR_EXPR;
5655       break;
5656
5657     case CPP_MIN_EQ:
5658       op = MIN_EXPR;
5659       break;
5660
5661     case CPP_MAX_EQ:
5662       op = MAX_EXPR;
5663       break;
5664
5665     default:
5666       /* Nothing else is an assignment operator.  */
5667       op = ERROR_MARK;
5668     }
5669
5670   /* If it was an assignment operator, consume it.  */
5671   if (op != ERROR_MARK)
5672     cp_lexer_consume_token (parser->lexer);
5673
5674   return op;
5675 }
5676
5677 /* Parse an expression.
5678
5679    expression:
5680      assignment-expression
5681      expression , assignment-expression
5682
5683    Returns a representation of the expression.  */
5684
5685 static tree
5686 cp_parser_expression (cp_parser* parser)
5687 {
5688   tree expression = NULL_TREE;
5689
5690   while (true)
5691     {
5692       tree assignment_expression;
5693
5694       /* Parse the next assignment-expression.  */
5695       assignment_expression
5696         = cp_parser_assignment_expression (parser);
5697       /* If this is the first assignment-expression, we can just
5698          save it away.  */
5699       if (!expression)
5700         expression = assignment_expression;
5701       else
5702         expression = build_x_compound_expr (expression,
5703                                             assignment_expression);
5704       /* If the next token is not a comma, then we are done with the
5705          expression.  */
5706       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5707         break;
5708       /* Consume the `,'.  */
5709       cp_lexer_consume_token (parser->lexer);
5710       /* A comma operator cannot appear in a constant-expression.  */
5711       if (cp_parser_non_integral_constant_expression (parser,
5712                                                       "a comma operator"))
5713         expression = error_mark_node;
5714     }
5715
5716   return expression;
5717 }
5718
5719 /* Parse a constant-expression.
5720
5721    constant-expression:
5722      conditional-expression
5723
5724   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
5725   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
5726   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
5727   is false, NON_CONSTANT_P should be NULL.  */
5728
5729 static tree
5730 cp_parser_constant_expression (cp_parser* parser,
5731                                bool allow_non_constant_p,
5732                                bool *non_constant_p)
5733 {
5734   bool saved_integral_constant_expression_p;
5735   bool saved_allow_non_integral_constant_expression_p;
5736   bool saved_non_integral_constant_expression_p;
5737   tree expression;
5738
5739   /* It might seem that we could simply parse the
5740      conditional-expression, and then check to see if it were
5741      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
5742      one that the compiler can figure out is constant, possibly after
5743      doing some simplifications or optimizations.  The standard has a
5744      precise definition of constant-expression, and we must honor
5745      that, even though it is somewhat more restrictive.
5746
5747      For example:
5748
5749        int i[(2, 3)];
5750
5751      is not a legal declaration, because `(2, 3)' is not a
5752      constant-expression.  The `,' operator is forbidden in a
5753      constant-expression.  However, GCC's constant-folding machinery
5754      will fold this operation to an INTEGER_CST for `3'.  */
5755
5756   /* Save the old settings.  */
5757   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
5758   saved_allow_non_integral_constant_expression_p
5759     = parser->allow_non_integral_constant_expression_p;
5760   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
5761   /* We are now parsing a constant-expression.  */
5762   parser->integral_constant_expression_p = true;
5763   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
5764   parser->non_integral_constant_expression_p = false;
5765   /* Although the grammar says "conditional-expression", we parse an
5766      "assignment-expression", which also permits "throw-expression"
5767      and the use of assignment operators.  In the case that
5768      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
5769      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
5770      actually essential that we look for an assignment-expression.
5771      For example, cp_parser_initializer_clauses uses this function to
5772      determine whether a particular assignment-expression is in fact
5773      constant.  */
5774   expression = cp_parser_assignment_expression (parser);
5775   /* Restore the old settings.  */
5776   parser->integral_constant_expression_p = saved_integral_constant_expression_p;
5777   parser->allow_non_integral_constant_expression_p
5778     = saved_allow_non_integral_constant_expression_p;
5779   if (allow_non_constant_p)
5780     *non_constant_p = parser->non_integral_constant_expression_p;
5781   parser->non_integral_constant_expression_p = saved_non_integral_constant_expression_p;
5782
5783   return expression;
5784 }
5785
5786 /* Parse __builtin_offsetof.
5787
5788    offsetof-expression:
5789      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
5790
5791    offsetof-member-designator:
5792      id-expression
5793      | offsetof-member-designator "." id-expression
5794      | offsetof-member-designator "[" expression "]"
5795 */
5796
5797 static tree
5798 cp_parser_builtin_offsetof (cp_parser *parser)
5799 {
5800   int save_ice_p, save_non_ice_p;
5801   tree type, expr;
5802   cp_id_kind dummy;
5803
5804   /* We're about to accept non-integral-constant things, but will
5805      definitely yield an integral constant expression.  Save and
5806      restore these values around our local parsing.  */
5807   save_ice_p = parser->integral_constant_expression_p;
5808   save_non_ice_p = parser->non_integral_constant_expression_p;
5809
5810   /* Consume the "__builtin_offsetof" token.  */
5811   cp_lexer_consume_token (parser->lexer);
5812   /* Consume the opening `('.  */
5813   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
5814   /* Parse the type-id.  */
5815   type = cp_parser_type_id (parser);
5816   /* Look for the `,'.  */
5817   cp_parser_require (parser, CPP_COMMA, "`,'");
5818
5819   /* Build the (type *)null that begins the traditional offsetof macro.  */
5820   expr = build_static_cast (build_pointer_type (type), null_pointer_node);
5821
5822   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
5823   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
5824                                                  true, &dummy);
5825   while (true)
5826     {
5827       cp_token *token = cp_lexer_peek_token (parser->lexer);
5828       switch (token->type)
5829         {
5830         case CPP_OPEN_SQUARE:
5831           /* offsetof-member-designator "[" expression "]" */
5832           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
5833           break;
5834
5835         case CPP_DOT:
5836           /* offsetof-member-designator "." identifier */
5837           cp_lexer_consume_token (parser->lexer);
5838           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
5839                                                          true, &dummy);
5840           break;
5841
5842         case CPP_CLOSE_PAREN:
5843           /* Consume the ")" token.  */
5844           cp_lexer_consume_token (parser->lexer);
5845           goto success;
5846
5847         default:
5848           /* Error.  We know the following require will fail, but
5849              that gives the proper error message.  */
5850           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5851           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
5852           expr = error_mark_node;
5853           goto failure;
5854         }
5855     }
5856
5857  success:
5858   /* We've finished the parsing, now finish with the semantics.  At present
5859      we're just mirroring the traditional macro implementation.  Better
5860      would be to do the lowering of the ADDR_EXPR to flat pointer arithmetic
5861      here rather than in build_x_unary_op.  */
5862   expr = build_reinterpret_cast (build_reference_type (char_type_node), expr);
5863   expr = build_x_unary_op (ADDR_EXPR, expr);
5864   expr = build_reinterpret_cast (size_type_node, expr);
5865
5866  failure:
5867   parser->integral_constant_expression_p = save_ice_p;
5868   parser->non_integral_constant_expression_p = save_non_ice_p;
5869
5870   return expr;
5871 }
5872
5873 /* Statements [gram.stmt.stmt]  */
5874
5875 /* Parse a statement.
5876
5877    statement:
5878      labeled-statement
5879      expression-statement
5880      compound-statement
5881      selection-statement
5882      iteration-statement
5883      jump-statement
5884      declaration-statement
5885      try-block  */
5886
5887 static void
5888 cp_parser_statement (cp_parser* parser, tree in_statement_expr)
5889 {
5890   tree statement;
5891   cp_token *token;
5892   location_t statement_location;
5893
5894   /* There is no statement yet.  */
5895   statement = NULL_TREE;
5896   /* Peek at the next token.  */
5897   token = cp_lexer_peek_token (parser->lexer);
5898   /* Remember the location of the first token in the statement.  */
5899   statement_location = token->location;
5900   /* If this is a keyword, then that will often determine what kind of
5901      statement we have.  */
5902   if (token->type == CPP_KEYWORD)
5903     {
5904       enum rid keyword = token->keyword;
5905
5906       switch (keyword)
5907         {
5908         case RID_CASE:
5909         case RID_DEFAULT:
5910           statement = cp_parser_labeled_statement (parser,
5911                                                    in_statement_expr);
5912           break;
5913
5914         case RID_IF:
5915         case RID_SWITCH:
5916           statement = cp_parser_selection_statement (parser);
5917           break;
5918
5919         case RID_WHILE:
5920         case RID_DO:
5921         case RID_FOR:
5922           statement = cp_parser_iteration_statement (parser);
5923           break;
5924
5925         case RID_BREAK:
5926         case RID_CONTINUE:
5927         case RID_RETURN:
5928         case RID_GOTO:
5929           statement = cp_parser_jump_statement (parser);
5930           break;
5931
5932         case RID_TRY:
5933           statement = cp_parser_try_block (parser);
5934           break;
5935
5936         default:
5937           /* It might be a keyword like `int' that can start a
5938              declaration-statement.  */
5939           break;
5940         }
5941     }
5942   else if (token->type == CPP_NAME)
5943     {
5944       /* If the next token is a `:', then we are looking at a
5945          labeled-statement.  */
5946       token = cp_lexer_peek_nth_token (parser->lexer, 2);
5947       if (token->type == CPP_COLON)
5948         statement = cp_parser_labeled_statement (parser, in_statement_expr);
5949     }
5950   /* Anything that starts with a `{' must be a compound-statement.  */
5951   else if (token->type == CPP_OPEN_BRACE)
5952     statement = cp_parser_compound_statement (parser, NULL, false);
5953
5954   /* Everything else must be a declaration-statement or an
5955      expression-statement.  Try for the declaration-statement
5956      first, unless we are looking at a `;', in which case we know that
5957      we have an expression-statement.  */
5958   if (!statement)
5959     {
5960       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
5961         {
5962           cp_parser_parse_tentatively (parser);
5963           /* Try to parse the declaration-statement.  */
5964           cp_parser_declaration_statement (parser);
5965           /* If that worked, we're done.  */
5966           if (cp_parser_parse_definitely (parser))
5967             return;
5968         }
5969       /* Look for an expression-statement instead.  */
5970       statement = cp_parser_expression_statement (parser, in_statement_expr);
5971     }
5972
5973   /* Set the line number for the statement.  */
5974   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
5975     SET_EXPR_LOCATION (statement, statement_location);
5976 }
5977
5978 /* Parse a labeled-statement.
5979
5980    labeled-statement:
5981      identifier : statement
5982      case constant-expression : statement
5983      default : statement
5984
5985    GNU Extension:
5986
5987    labeled-statement:
5988      case constant-expression ... constant-expression : statement
5989
5990    Returns the new CASE_LABEL_EXPR, for a `case' or `default' label.
5991    For an ordinary label, returns a LABEL_EXPR.  */
5992
5993 static tree
5994 cp_parser_labeled_statement (cp_parser* parser, tree in_statement_expr)
5995 {
5996   cp_token *token;
5997   tree statement = error_mark_node;
5998
5999   /* The next token should be an identifier.  */
6000   token = cp_lexer_peek_token (parser->lexer);
6001   if (token->type != CPP_NAME
6002       && token->type != CPP_KEYWORD)
6003     {
6004       cp_parser_error (parser, "expected labeled-statement");
6005       return error_mark_node;
6006     }
6007
6008   switch (token->keyword)
6009     {
6010     case RID_CASE:
6011       {
6012         tree expr, expr_hi;
6013         cp_token *ellipsis;
6014
6015         /* Consume the `case' token.  */
6016         cp_lexer_consume_token (parser->lexer);
6017         /* Parse the constant-expression.  */
6018         expr = cp_parser_constant_expression (parser,
6019                                               /*allow_non_constant_p=*/false,
6020                                               NULL);
6021
6022         ellipsis = cp_lexer_peek_token (parser->lexer);
6023         if (ellipsis->type == CPP_ELLIPSIS)
6024           {
6025             /* Consume the `...' token.  */
6026             cp_lexer_consume_token (parser->lexer);
6027             expr_hi =
6028               cp_parser_constant_expression (parser,
6029                                              /*allow_non_constant_p=*/false,
6030                                              NULL);
6031             /* We don't need to emit warnings here, as the common code
6032                will do this for us.  */
6033           }
6034         else
6035           expr_hi = NULL_TREE;
6036
6037         if (!parser->in_switch_statement_p)
6038           error ("case label `%E' not within a switch statement", expr);
6039         else
6040           statement = finish_case_label (expr, expr_hi);
6041       }
6042       break;
6043
6044     case RID_DEFAULT:
6045       /* Consume the `default' token.  */
6046       cp_lexer_consume_token (parser->lexer);
6047       if (!parser->in_switch_statement_p)
6048         error ("case label not within a switch statement");
6049       else
6050         statement = finish_case_label (NULL_TREE, NULL_TREE);
6051       break;
6052
6053     default:
6054       /* Anything else must be an ordinary label.  */
6055       statement = finish_label_stmt (cp_parser_identifier (parser));
6056       break;
6057     }
6058
6059   /* Require the `:' token.  */
6060   cp_parser_require (parser, CPP_COLON, "`:'");
6061   /* Parse the labeled statement.  */
6062   cp_parser_statement (parser, in_statement_expr);
6063
6064   /* Return the label, in the case of a `case' or `default' label.  */
6065   return statement;
6066 }
6067
6068 /* Parse an expression-statement.
6069
6070    expression-statement:
6071      expression [opt] ;
6072
6073    Returns the new EXPR_STMT -- or NULL_TREE if the expression
6074    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6075    indicates whether this expression-statement is part of an
6076    expression statement.  */
6077
6078 static tree
6079 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6080 {
6081   tree statement = NULL_TREE;
6082
6083   /* If the next token is a ';', then there is no expression
6084      statement.  */
6085   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6086     statement = cp_parser_expression (parser);
6087
6088   /* Consume the final `;'.  */
6089   cp_parser_consume_semicolon_at_end_of_statement (parser);
6090
6091   if (in_statement_expr
6092       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6093     {
6094       /* This is the final expression statement of a statement
6095          expression.  */
6096       statement = finish_stmt_expr_expr (statement, in_statement_expr);
6097     }
6098   else if (statement)
6099     statement = finish_expr_stmt (statement);
6100   else
6101     finish_stmt ();
6102
6103   return statement;
6104 }
6105
6106 /* Parse a compound-statement.
6107
6108    compound-statement:
6109      { statement-seq [opt] }
6110
6111    Returns a tree representing the statement.  */
6112
6113 static tree
6114 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6115                               bool in_try)
6116 {
6117   tree compound_stmt;
6118
6119   /* Consume the `{'.  */
6120   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6121     return error_mark_node;
6122   /* Begin the compound-statement.  */
6123   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6124   /* Parse an (optional) statement-seq.  */
6125   cp_parser_statement_seq_opt (parser, in_statement_expr);
6126   /* Finish the compound-statement.  */
6127   finish_compound_stmt (compound_stmt);
6128   /* Consume the `}'.  */
6129   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6130
6131   return compound_stmt;
6132 }
6133
6134 /* Parse an (optional) statement-seq.
6135
6136    statement-seq:
6137      statement
6138      statement-seq [opt] statement  */
6139
6140 static void
6141 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6142 {
6143   /* Scan statements until there aren't any more.  */
6144   while (true)
6145     {
6146       /* If we're looking at a `}', then we've run out of statements.  */
6147       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE)
6148           || cp_lexer_next_token_is (parser->lexer, CPP_EOF))
6149         break;
6150
6151       /* Parse the statement.  */
6152       cp_parser_statement (parser, in_statement_expr);
6153     }
6154 }
6155
6156 /* Parse a selection-statement.
6157
6158    selection-statement:
6159      if ( condition ) statement
6160      if ( condition ) statement else statement
6161      switch ( condition ) statement
6162
6163    Returns the new IF_STMT or SWITCH_STMT.  */
6164
6165 static tree
6166 cp_parser_selection_statement (cp_parser* parser)
6167 {
6168   cp_token *token;
6169   enum rid keyword;
6170
6171   /* Peek at the next token.  */
6172   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6173
6174   /* See what kind of keyword it is.  */
6175   keyword = token->keyword;
6176   switch (keyword)
6177     {
6178     case RID_IF:
6179     case RID_SWITCH:
6180       {
6181         tree statement;
6182         tree condition;
6183
6184         /* Look for the `('.  */
6185         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6186           {
6187             cp_parser_skip_to_end_of_statement (parser);
6188             return error_mark_node;
6189           }
6190
6191         /* Begin the selection-statement.  */
6192         if (keyword == RID_IF)
6193           statement = begin_if_stmt ();
6194         else
6195           statement = begin_switch_stmt ();
6196
6197         /* Parse the condition.  */
6198         condition = cp_parser_condition (parser);
6199         /* Look for the `)'.  */
6200         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6201           cp_parser_skip_to_closing_parenthesis (parser, true, false,
6202                                                  /*consume_paren=*/true);
6203
6204         if (keyword == RID_IF)
6205           {
6206             /* Add the condition.  */
6207             finish_if_stmt_cond (condition, statement);
6208
6209             /* Parse the then-clause.  */
6210             cp_parser_implicitly_scoped_statement (parser);
6211             finish_then_clause (statement);
6212
6213             /* If the next token is `else', parse the else-clause.  */
6214             if (cp_lexer_next_token_is_keyword (parser->lexer,
6215                                                 RID_ELSE))
6216               {
6217                 /* Consume the `else' keyword.  */
6218                 cp_lexer_consume_token (parser->lexer);
6219                 begin_else_clause (statement);
6220                 /* Parse the else-clause.  */
6221                 cp_parser_implicitly_scoped_statement (parser);
6222                 finish_else_clause (statement);
6223               }
6224
6225             /* Now we're all done with the if-statement.  */
6226             finish_if_stmt (statement);
6227           }
6228         else
6229           {
6230             bool in_switch_statement_p;
6231
6232             /* Add the condition.  */
6233             finish_switch_cond (condition, statement);
6234
6235             /* Parse the body of the switch-statement.  */
6236             in_switch_statement_p = parser->in_switch_statement_p;
6237             parser->in_switch_statement_p = true;
6238             cp_parser_implicitly_scoped_statement (parser);
6239             parser->in_switch_statement_p = in_switch_statement_p;
6240
6241             /* Now we're all done with the switch-statement.  */
6242             finish_switch_stmt (statement);
6243           }
6244
6245         return statement;
6246       }
6247       break;
6248
6249     default:
6250       cp_parser_error (parser, "expected selection-statement");
6251       return error_mark_node;
6252     }
6253 }
6254
6255 /* Parse a condition.
6256
6257    condition:
6258      expression
6259      type-specifier-seq declarator = assignment-expression
6260
6261    GNU Extension:
6262
6263    condition:
6264      type-specifier-seq declarator asm-specification [opt]
6265        attributes [opt] = assignment-expression
6266
6267    Returns the expression that should be tested.  */
6268
6269 static tree
6270 cp_parser_condition (cp_parser* parser)
6271 {
6272   cp_decl_specifier_seq type_specifiers;
6273   const char *saved_message;
6274
6275   /* Try the declaration first.  */
6276   cp_parser_parse_tentatively (parser);
6277   /* New types are not allowed in the type-specifier-seq for a
6278      condition.  */
6279   saved_message = parser->type_definition_forbidden_message;
6280   parser->type_definition_forbidden_message
6281     = "types may not be defined in conditions";
6282   /* Parse the type-specifier-seq.  */
6283   cp_parser_type_specifier_seq (parser, &type_specifiers);
6284   /* Restore the saved message.  */
6285   parser->type_definition_forbidden_message = saved_message;
6286   /* If all is well, we might be looking at a declaration.  */
6287   if (!cp_parser_error_occurred (parser))
6288     {
6289       tree decl;
6290       tree asm_specification;
6291       tree attributes;
6292       cp_declarator *declarator;
6293       tree initializer = NULL_TREE;
6294
6295       /* Parse the declarator.  */
6296       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6297                                          /*ctor_dtor_or_conv_p=*/NULL,
6298                                          /*parenthesized_p=*/NULL);
6299       /* Parse the attributes.  */
6300       attributes = cp_parser_attributes_opt (parser);
6301       /* Parse the asm-specification.  */
6302       asm_specification = cp_parser_asm_specification_opt (parser);
6303       /* If the next token is not an `=', then we might still be
6304          looking at an expression.  For example:
6305
6306            if (A(a).x)
6307
6308          looks like a decl-specifier-seq and a declarator -- but then
6309          there is no `=', so this is an expression.  */
6310       cp_parser_require (parser, CPP_EQ, "`='");
6311       /* If we did see an `=', then we are looking at a declaration
6312          for sure.  */
6313       if (cp_parser_parse_definitely (parser))
6314         {
6315           /* Create the declaration.  */
6316           decl = start_decl (declarator, &type_specifiers,
6317                              /*initialized_p=*/true,
6318                              attributes, /*prefix_attributes=*/NULL_TREE);
6319           /* Parse the assignment-expression.  */
6320           initializer = cp_parser_assignment_expression (parser);
6321
6322           /* Process the initializer.  */
6323           cp_finish_decl (decl,
6324                           initializer,
6325                           asm_specification,
6326                           LOOKUP_ONLYCONVERTING);
6327
6328           return convert_from_reference (decl);
6329         }
6330     }
6331   /* If we didn't even get past the declarator successfully, we are
6332      definitely not looking at a declaration.  */
6333   else
6334     cp_parser_abort_tentative_parse (parser);
6335
6336   /* Otherwise, we are looking at an expression.  */
6337   return cp_parser_expression (parser);
6338 }
6339
6340 /* Parse an iteration-statement.
6341
6342    iteration-statement:
6343      while ( condition ) statement
6344      do statement while ( expression ) ;
6345      for ( for-init-statement condition [opt] ; expression [opt] )
6346        statement
6347
6348    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6349
6350 static tree
6351 cp_parser_iteration_statement (cp_parser* parser)
6352 {
6353   cp_token *token;
6354   enum rid keyword;
6355   tree statement;
6356   bool in_iteration_statement_p;
6357
6358
6359   /* Peek at the next token.  */
6360   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6361   if (!token)
6362     return error_mark_node;
6363
6364   /* Remember whether or not we are already within an iteration
6365      statement.  */
6366   in_iteration_statement_p = parser->in_iteration_statement_p;
6367
6368   /* See what kind of keyword it is.  */
6369   keyword = token->keyword;
6370   switch (keyword)
6371     {
6372     case RID_WHILE:
6373       {
6374         tree condition;
6375
6376         /* Begin the while-statement.  */
6377         statement = begin_while_stmt ();
6378         /* Look for the `('.  */
6379         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6380         /* Parse the condition.  */
6381         condition = cp_parser_condition (parser);
6382         finish_while_stmt_cond (condition, statement);
6383         /* Look for the `)'.  */
6384         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6385         /* Parse the dependent statement.  */
6386         parser->in_iteration_statement_p = true;
6387         cp_parser_already_scoped_statement (parser);
6388         parser->in_iteration_statement_p = in_iteration_statement_p;
6389         /* We're done with the while-statement.  */
6390         finish_while_stmt (statement);
6391       }
6392       break;
6393
6394     case RID_DO:
6395       {
6396         tree expression;
6397
6398         /* Begin the do-statement.  */
6399         statement = begin_do_stmt ();
6400         /* Parse the body of the do-statement.  */
6401         parser->in_iteration_statement_p = true;
6402         cp_parser_implicitly_scoped_statement (parser);
6403         parser->in_iteration_statement_p = in_iteration_statement_p;
6404         finish_do_body (statement);
6405         /* Look for the `while' keyword.  */
6406         cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6407         /* Look for the `('.  */
6408         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6409         /* Parse the expression.  */
6410         expression = cp_parser_expression (parser);
6411         /* We're done with the do-statement.  */
6412         finish_do_stmt (expression, statement);
6413         /* Look for the `)'.  */
6414         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6415         /* Look for the `;'.  */
6416         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6417       }
6418       break;
6419
6420     case RID_FOR:
6421       {
6422         tree condition = NULL_TREE;
6423         tree expression = NULL_TREE;
6424
6425         /* Begin the for-statement.  */
6426         statement = begin_for_stmt ();
6427         /* Look for the `('.  */
6428         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6429         /* Parse the initialization.  */
6430         cp_parser_for_init_statement (parser);
6431         finish_for_init_stmt (statement);
6432
6433         /* If there's a condition, process it.  */
6434         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6435           condition = cp_parser_condition (parser);
6436         finish_for_cond (condition, statement);
6437         /* Look for the `;'.  */
6438         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6439
6440         /* If there's an expression, process it.  */
6441         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6442           expression = cp_parser_expression (parser);
6443         finish_for_expr (expression, statement);
6444         /* Look for the `)'.  */
6445         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6446
6447         /* Parse the body of the for-statement.  */
6448         parser->in_iteration_statement_p = true;
6449         cp_parser_already_scoped_statement (parser);
6450         parser->in_iteration_statement_p = in_iteration_statement_p;
6451
6452         /* We're done with the for-statement.  */
6453         finish_for_stmt (statement);
6454       }
6455       break;
6456
6457     default:
6458       cp_parser_error (parser, "expected iteration-statement");
6459       statement = error_mark_node;
6460       break;
6461     }
6462
6463   return statement;
6464 }
6465
6466 /* Parse a for-init-statement.
6467
6468    for-init-statement:
6469      expression-statement
6470      simple-declaration  */
6471
6472 static void
6473 cp_parser_for_init_statement (cp_parser* parser)
6474 {
6475   /* If the next token is a `;', then we have an empty
6476      expression-statement.  Grammatically, this is also a
6477      simple-declaration, but an invalid one, because it does not
6478      declare anything.  Therefore, if we did not handle this case
6479      specially, we would issue an error message about an invalid
6480      declaration.  */
6481   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6482     {
6483       /* We're going to speculatively look for a declaration, falling back
6484          to an expression, if necessary.  */
6485       cp_parser_parse_tentatively (parser);
6486       /* Parse the declaration.  */
6487       cp_parser_simple_declaration (parser,
6488                                     /*function_definition_allowed_p=*/false);
6489       /* If the tentative parse failed, then we shall need to look for an
6490          expression-statement.  */
6491       if (cp_parser_parse_definitely (parser))
6492         return;
6493     }
6494
6495   cp_parser_expression_statement (parser, false);
6496 }
6497
6498 /* Parse a jump-statement.
6499
6500    jump-statement:
6501      break ;
6502      continue ;
6503      return expression [opt] ;
6504      goto identifier ;
6505
6506    GNU extension:
6507
6508    jump-statement:
6509      goto * expression ;
6510
6511    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
6512
6513 static tree
6514 cp_parser_jump_statement (cp_parser* parser)
6515 {
6516   tree statement = error_mark_node;
6517   cp_token *token;
6518   enum rid keyword;
6519
6520   /* Peek at the next token.  */
6521   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6522   if (!token)
6523     return error_mark_node;
6524
6525   /* See what kind of keyword it is.  */
6526   keyword = token->keyword;
6527   switch (keyword)
6528     {
6529     case RID_BREAK:
6530       if (!parser->in_switch_statement_p
6531           && !parser->in_iteration_statement_p)
6532         {
6533           error ("break statement not within loop or switch");
6534           statement = error_mark_node;
6535         }
6536       else
6537         statement = finish_break_stmt ();
6538       cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6539       break;
6540
6541     case RID_CONTINUE:
6542       if (!parser->in_iteration_statement_p)
6543         {
6544           error ("continue statement not within a loop");
6545           statement = error_mark_node;
6546         }
6547       else
6548         statement = finish_continue_stmt ();
6549       cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6550       break;
6551
6552     case RID_RETURN:
6553       {
6554         tree expr;
6555
6556         /* If the next token is a `;', then there is no
6557            expression.  */
6558         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6559           expr = cp_parser_expression (parser);
6560         else
6561           expr = NULL_TREE;
6562         /* Build the return-statement.  */
6563         statement = finish_return_stmt (expr);
6564         /* Look for the final `;'.  */
6565         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6566       }
6567       break;
6568
6569     case RID_GOTO:
6570       /* Create the goto-statement.  */
6571       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
6572         {
6573           /* Issue a warning about this use of a GNU extension.  */
6574           if (pedantic)
6575             pedwarn ("ISO C++ forbids computed gotos");
6576           /* Consume the '*' token.  */
6577           cp_lexer_consume_token (parser->lexer);
6578           /* Parse the dependent expression.  */
6579           finish_goto_stmt (cp_parser_expression (parser));
6580         }
6581       else
6582         finish_goto_stmt (cp_parser_identifier (parser));
6583       /* Look for the final `;'.  */
6584       cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6585       break;
6586
6587     default:
6588       cp_parser_error (parser, "expected jump-statement");
6589       break;
6590     }
6591
6592   return statement;
6593 }
6594
6595 /* Parse a declaration-statement.
6596
6597    declaration-statement:
6598      block-declaration  */
6599
6600 static void
6601 cp_parser_declaration_statement (cp_parser* parser)
6602 {
6603   void *p;
6604
6605   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
6606   p = obstack_alloc (&declarator_obstack, 0);
6607
6608  /* Parse the block-declaration.  */
6609   cp_parser_block_declaration (parser, /*statement_p=*/true);
6610
6611   /* Free any declarators allocated.  */
6612   obstack_free (&declarator_obstack, p);
6613
6614   /* Finish off the statement.  */
6615   finish_stmt ();
6616 }
6617
6618 /* Some dependent statements (like `if (cond) statement'), are
6619    implicitly in their own scope.  In other words, if the statement is
6620    a single statement (as opposed to a compound-statement), it is
6621    none-the-less treated as if it were enclosed in braces.  Any
6622    declarations appearing in the dependent statement are out of scope
6623    after control passes that point.  This function parses a statement,
6624    but ensures that is in its own scope, even if it is not a
6625    compound-statement.
6626
6627    Returns the new statement.  */
6628
6629 static tree
6630 cp_parser_implicitly_scoped_statement (cp_parser* parser)
6631 {
6632   tree statement;
6633
6634   /* If the token is not a `{', then we must take special action.  */
6635   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6636     {
6637       /* Create a compound-statement.  */
6638       statement = begin_compound_stmt (0);
6639       /* Parse the dependent-statement.  */
6640       cp_parser_statement (parser, false);
6641       /* Finish the dummy compound-statement.  */
6642       finish_compound_stmt (statement);
6643     }
6644   /* Otherwise, we simply parse the statement directly.  */
6645   else
6646     statement = cp_parser_compound_statement (parser, NULL, false);
6647
6648   /* Return the statement.  */
6649   return statement;
6650 }
6651
6652 /* For some dependent statements (like `while (cond) statement'), we
6653    have already created a scope.  Therefore, even if the dependent
6654    statement is a compound-statement, we do not want to create another
6655    scope.  */
6656
6657 static void
6658 cp_parser_already_scoped_statement (cp_parser* parser)
6659 {
6660   /* If the token is a `{', then we must take special action.  */
6661   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6662     cp_parser_statement (parser, false);
6663   else
6664     {
6665       /* Avoid calling cp_parser_compound_statement, so that we
6666          don't create a new scope.  Do everything else by hand.  */
6667       cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
6668       cp_parser_statement_seq_opt (parser, false);
6669       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6670     }
6671 }
6672
6673 /* Declarations [gram.dcl.dcl] */
6674
6675 /* Parse an optional declaration-sequence.
6676
6677    declaration-seq:
6678      declaration
6679      declaration-seq declaration  */
6680
6681 static void
6682 cp_parser_declaration_seq_opt (cp_parser* parser)
6683 {
6684   while (true)
6685     {
6686       cp_token *token;
6687
6688       token = cp_lexer_peek_token (parser->lexer);
6689
6690       if (token->type == CPP_CLOSE_BRACE
6691           || token->type == CPP_EOF)
6692         break;
6693
6694       if (token->type == CPP_SEMICOLON)
6695         {
6696           /* A declaration consisting of a single semicolon is
6697              invalid.  Allow it unless we're being pedantic.  */
6698           if (pedantic && !in_system_header)
6699             pedwarn ("extra `;'");
6700           cp_lexer_consume_token (parser->lexer);
6701           continue;
6702         }
6703
6704       /* The C lexer modifies PENDING_LANG_CHANGE when it wants the
6705          parser to enter or exit implicit `extern "C"' blocks.  */
6706       while (pending_lang_change > 0)
6707         {
6708           push_lang_context (lang_name_c);
6709           --pending_lang_change;
6710         }
6711       while (pending_lang_change < 0)
6712         {
6713           pop_lang_context ();
6714           ++pending_lang_change;
6715         }
6716
6717       /* Parse the declaration itself.  */
6718       cp_parser_declaration (parser);
6719     }
6720 }
6721
6722 /* Parse a declaration.
6723
6724    declaration:
6725      block-declaration
6726      function-definition
6727      template-declaration
6728      explicit-instantiation
6729      explicit-specialization
6730      linkage-specification
6731      namespace-definition
6732
6733    GNU extension:
6734
6735    declaration:
6736       __extension__ declaration */
6737
6738 static void
6739 cp_parser_declaration (cp_parser* parser)
6740 {
6741   cp_token token1;
6742   cp_token token2;
6743   int saved_pedantic;
6744   void *p;
6745
6746   /* Set this here since we can be called after
6747      pushing the linkage specification.  */
6748   c_lex_string_translate = 1;
6749
6750   /* Check for the `__extension__' keyword.  */
6751   if (cp_parser_extension_opt (parser, &saved_pedantic))
6752     {
6753       /* Parse the qualified declaration.  */
6754       cp_parser_declaration (parser);
6755       /* Restore the PEDANTIC flag.  */
6756       pedantic = saved_pedantic;
6757
6758       return;
6759     }
6760
6761   /* Try to figure out what kind of declaration is present.  */
6762   token1 = *cp_lexer_peek_token (parser->lexer);
6763
6764   /* Don't translate the CPP_STRING in extern "C".  */
6765   if (token1.keyword == RID_EXTERN)
6766     c_lex_string_translate = 0;
6767
6768   if (token1.type != CPP_EOF)
6769     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
6770
6771   c_lex_string_translate = 1;
6772
6773   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
6774   p = obstack_alloc (&declarator_obstack, 0);
6775
6776   /* If the next token is `extern' and the following token is a string
6777      literal, then we have a linkage specification.  */
6778   if (token1.keyword == RID_EXTERN
6779       && cp_parser_is_string_literal (&token2))
6780     cp_parser_linkage_specification (parser);
6781   /* If the next token is `template', then we have either a template
6782      declaration, an explicit instantiation, or an explicit
6783      specialization.  */
6784   else if (token1.keyword == RID_TEMPLATE)
6785     {
6786       /* `template <>' indicates a template specialization.  */
6787       if (token2.type == CPP_LESS
6788           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
6789         cp_parser_explicit_specialization (parser);
6790       /* `template <' indicates a template declaration.  */
6791       else if (token2.type == CPP_LESS)
6792         cp_parser_template_declaration (parser, /*member_p=*/false);
6793       /* Anything else must be an explicit instantiation.  */
6794       else
6795         cp_parser_explicit_instantiation (parser);
6796     }
6797   /* If the next token is `export', then we have a template
6798      declaration.  */
6799   else if (token1.keyword == RID_EXPORT)
6800     cp_parser_template_declaration (parser, /*member_p=*/false);
6801   /* If the next token is `extern', 'static' or 'inline' and the one
6802      after that is `template', we have a GNU extended explicit
6803      instantiation directive.  */
6804   else if (cp_parser_allow_gnu_extensions_p (parser)
6805            && (token1.keyword == RID_EXTERN
6806                || token1.keyword == RID_STATIC
6807                || token1.keyword == RID_INLINE)
6808            && token2.keyword == RID_TEMPLATE)
6809     cp_parser_explicit_instantiation (parser);
6810   /* If the next token is `namespace', check for a named or unnamed
6811      namespace definition.  */
6812   else if (token1.keyword == RID_NAMESPACE
6813            && (/* A named namespace definition.  */
6814                (token2.type == CPP_NAME
6815                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
6816                     == CPP_OPEN_BRACE))
6817                /* An unnamed namespace definition.  */
6818                || token2.type == CPP_OPEN_BRACE))
6819     cp_parser_namespace_definition (parser);
6820   /* We must have either a block declaration or a function
6821      definition.  */
6822   else
6823     /* Try to parse a block-declaration, or a function-definition.  */
6824     cp_parser_block_declaration (parser, /*statement_p=*/false);
6825
6826   /* Free any declarators allocated.  */
6827   obstack_free (&declarator_obstack, p);
6828 }
6829
6830 /* Parse a block-declaration.
6831
6832    block-declaration:
6833      simple-declaration
6834      asm-definition
6835      namespace-alias-definition
6836      using-declaration
6837      using-directive
6838
6839    GNU Extension:
6840
6841    block-declaration:
6842      __extension__ block-declaration
6843      label-declaration
6844
6845    If STATEMENT_P is TRUE, then this block-declaration is occurring as
6846    part of a declaration-statement.  */
6847
6848 static void
6849 cp_parser_block_declaration (cp_parser *parser,
6850                              bool      statement_p)
6851 {
6852   cp_token *token1;
6853   int saved_pedantic;
6854
6855   /* Check for the `__extension__' keyword.  */
6856   if (cp_parser_extension_opt (parser, &saved_pedantic))
6857     {
6858       /* Parse the qualified declaration.  */
6859       cp_parser_block_declaration (parser, statement_p);
6860       /* Restore the PEDANTIC flag.  */
6861       pedantic = saved_pedantic;
6862
6863       return;
6864     }
6865
6866   /* Peek at the next token to figure out which kind of declaration is
6867      present.  */
6868   token1 = cp_lexer_peek_token (parser->lexer);
6869
6870   /* If the next keyword is `asm', we have an asm-definition.  */
6871   if (token1->keyword == RID_ASM)
6872     {
6873       if (statement_p)
6874         cp_parser_commit_to_tentative_parse (parser);
6875       cp_parser_asm_definition (parser);
6876     }
6877   /* If the next keyword is `namespace', we have a
6878      namespace-alias-definition.  */
6879   else if (token1->keyword == RID_NAMESPACE)
6880     cp_parser_namespace_alias_definition (parser);
6881   /* If the next keyword is `using', we have either a
6882      using-declaration or a using-directive.  */
6883   else if (token1->keyword == RID_USING)
6884     {
6885       cp_token *token2;
6886
6887       if (statement_p)
6888         cp_parser_commit_to_tentative_parse (parser);
6889       /* If the token after `using' is `namespace', then we have a
6890          using-directive.  */
6891       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
6892       if (token2->keyword == RID_NAMESPACE)
6893         cp_parser_using_directive (parser);
6894       /* Otherwise, it's a using-declaration.  */
6895       else
6896         cp_parser_using_declaration (parser);
6897     }
6898   /* If the next keyword is `__label__' we have a label declaration.  */
6899   else if (token1->keyword == RID_LABEL)
6900     {
6901       if (statement_p)
6902         cp_parser_commit_to_tentative_parse (parser);
6903       cp_parser_label_declaration (parser);
6904     }
6905   /* Anything else must be a simple-declaration.  */
6906   else
6907     cp_parser_simple_declaration (parser, !statement_p);
6908 }
6909
6910 /* Parse a simple-declaration.
6911
6912    simple-declaration:
6913      decl-specifier-seq [opt] init-declarator-list [opt] ;
6914
6915    init-declarator-list:
6916      init-declarator
6917      init-declarator-list , init-declarator
6918
6919    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
6920    function-definition as a simple-declaration.  */
6921
6922 static void
6923 cp_parser_simple_declaration (cp_parser* parser,
6924                               bool function_definition_allowed_p)
6925 {
6926   cp_decl_specifier_seq decl_specifiers;
6927   int declares_class_or_enum;
6928   bool saw_declarator;
6929
6930   /* Defer access checks until we know what is being declared; the
6931      checks for names appearing in the decl-specifier-seq should be
6932      done as if we were in the scope of the thing being declared.  */
6933   push_deferring_access_checks (dk_deferred);
6934
6935   /* Parse the decl-specifier-seq.  We have to keep track of whether
6936      or not the decl-specifier-seq declares a named class or
6937      enumeration type, since that is the only case in which the
6938      init-declarator-list is allowed to be empty.
6939
6940      [dcl.dcl]
6941
6942      In a simple-declaration, the optional init-declarator-list can be
6943      omitted only when declaring a class or enumeration, that is when
6944      the decl-specifier-seq contains either a class-specifier, an
6945      elaborated-type-specifier, or an enum-specifier.  */
6946   cp_parser_decl_specifier_seq (parser,
6947                                 CP_PARSER_FLAGS_OPTIONAL,
6948                                 &decl_specifiers,
6949                                 &declares_class_or_enum);
6950   /* We no longer need to defer access checks.  */
6951   stop_deferring_access_checks ();
6952
6953   /* In a block scope, a valid declaration must always have a
6954      decl-specifier-seq.  By not trying to parse declarators, we can
6955      resolve the declaration/expression ambiguity more quickly.  */
6956   if (!function_definition_allowed_p
6957       && !decl_specifiers.any_specifiers_p)
6958     {
6959       cp_parser_error (parser, "expected declaration");
6960       goto done;
6961     }
6962
6963   /* If the next two tokens are both identifiers, the code is
6964      erroneous. The usual cause of this situation is code like:
6965
6966        T t;
6967
6968      where "T" should name a type -- but does not.  */
6969   if (cp_parser_parse_and_diagnose_invalid_type_name (parser))
6970     {
6971       /* If parsing tentatively, we should commit; we really are
6972          looking at a declaration.  */
6973       cp_parser_commit_to_tentative_parse (parser);
6974       /* Give up.  */
6975       goto done;
6976     }
6977
6978   /* Keep going until we hit the `;' at the end of the simple
6979      declaration.  */
6980   saw_declarator = false;
6981   while (cp_lexer_next_token_is_not (parser->lexer,
6982                                      CPP_SEMICOLON))
6983     {
6984       cp_token *token;
6985       bool function_definition_p;
6986       tree decl;
6987
6988       saw_declarator = true;
6989       /* Parse the init-declarator.  */
6990       decl = cp_parser_init_declarator (parser, &decl_specifiers,
6991                                         function_definition_allowed_p,
6992                                         /*member_p=*/false,
6993                                         declares_class_or_enum,
6994                                         &function_definition_p);
6995       /* If an error occurred while parsing tentatively, exit quickly.
6996          (That usually happens when in the body of a function; each
6997          statement is treated as a declaration-statement until proven
6998          otherwise.)  */
6999       if (cp_parser_error_occurred (parser))
7000         goto done;
7001       /* Handle function definitions specially.  */
7002       if (function_definition_p)
7003         {
7004           /* If the next token is a `,', then we are probably
7005              processing something like:
7006
7007                void f() {}, *p;
7008
7009              which is erroneous.  */
7010           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7011             error ("mixing declarations and function-definitions is forbidden");
7012           /* Otherwise, we're done with the list of declarators.  */
7013           else
7014             {
7015               pop_deferring_access_checks ();
7016               return;
7017             }
7018         }
7019       /* The next token should be either a `,' or a `;'.  */
7020       token = cp_lexer_peek_token (parser->lexer);
7021       /* If it's a `,', there are more declarators to come.  */
7022       if (token->type == CPP_COMMA)
7023         cp_lexer_consume_token (parser->lexer);
7024       /* If it's a `;', we are done.  */
7025       else if (token->type == CPP_SEMICOLON)
7026         break;
7027       /* Anything else is an error.  */
7028       else
7029         {
7030           cp_parser_error (parser, "expected `,' or `;'");
7031           /* Skip tokens until we reach the end of the statement.  */
7032           cp_parser_skip_to_end_of_statement (parser);
7033           /* If the next token is now a `;', consume it.  */
7034           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7035             cp_lexer_consume_token (parser->lexer);
7036           goto done;
7037         }
7038       /* After the first time around, a function-definition is not
7039          allowed -- even if it was OK at first.  For example:
7040
7041            int i, f() {}
7042
7043          is not valid.  */
7044       function_definition_allowed_p = false;
7045     }
7046
7047   /* Issue an error message if no declarators are present, and the
7048      decl-specifier-seq does not itself declare a class or
7049      enumeration.  */
7050   if (!saw_declarator)
7051     {
7052       if (cp_parser_declares_only_class_p (parser))
7053         shadow_tag (&decl_specifiers);
7054       /* Perform any deferred access checks.  */
7055       perform_deferred_access_checks ();
7056     }
7057
7058   /* Consume the `;'.  */
7059   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7060
7061  done:
7062   pop_deferring_access_checks ();
7063 }
7064
7065 /* Parse a decl-specifier-seq.
7066
7067    decl-specifier-seq:
7068      decl-specifier-seq [opt] decl-specifier
7069
7070    decl-specifier:
7071      storage-class-specifier
7072      type-specifier
7073      function-specifier
7074      friend
7075      typedef
7076
7077    GNU Extension:
7078
7079    decl-specifier:
7080      attributes
7081
7082    Set *DECL_SPECS to a representation of the decl-specifier-seq.
7083
7084    If FRIEND_IS_NOT_CLASS_P is non-NULL, and the `friend' specifier
7085    appears, and the entity that will be a friend is not going to be a
7086    class, then *FRIEND_IS_NOT_CLASS_P will be set to TRUE.  Note that
7087    even if *FRIEND_IS_NOT_CLASS_P is FALSE, the entity to which
7088    friendship is granted might not be a class.
7089
7090    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7091    flags:
7092
7093      1: one of the decl-specifiers is an elaborated-type-specifier
7094         (i.e., a type declaration)
7095      2: one of the decl-specifiers is an enum-specifier or a
7096         class-specifier (i.e., a type definition)
7097
7098    */
7099
7100 static void
7101 cp_parser_decl_specifier_seq (cp_parser* parser,
7102                               cp_parser_flags flags,
7103                               cp_decl_specifier_seq *decl_specs,
7104                               int* declares_class_or_enum)
7105 {
7106   bool constructor_possible_p = !parser->in_declarator_p;
7107
7108   /* Clear DECL_SPECS.  */
7109   clear_decl_specs (decl_specs);
7110
7111   /* Assume no class or enumeration type is declared.  */
7112   *declares_class_or_enum = 0;
7113
7114   /* Keep reading specifiers until there are no more to read.  */
7115   while (true)
7116     {
7117       bool constructor_p;
7118       bool found_decl_spec;
7119       cp_token *token;
7120
7121       /* Peek at the next token.  */
7122       token = cp_lexer_peek_token (parser->lexer);
7123       /* Handle attributes.  */
7124       if (token->keyword == RID_ATTRIBUTE)
7125         {
7126           /* Parse the attributes.  */
7127           decl_specs->attributes
7128             = chainon (decl_specs->attributes,
7129                        cp_parser_attributes_opt (parser));
7130           continue;
7131         }
7132       /* Assume we will find a decl-specifier keyword.  */
7133       found_decl_spec = true;
7134       /* If the next token is an appropriate keyword, we can simply
7135          add it to the list.  */
7136       switch (token->keyword)
7137         {
7138           /* decl-specifier:
7139                friend  */
7140         case RID_FRIEND:
7141           if (decl_specs->specs[(int) ds_friend]++)
7142             error ("duplicate `friend'");
7143           /* Consume the token.  */
7144           cp_lexer_consume_token (parser->lexer);
7145           break;
7146
7147           /* function-specifier:
7148                inline
7149                virtual
7150                explicit  */
7151         case RID_INLINE:
7152         case RID_VIRTUAL:
7153         case RID_EXPLICIT:
7154           cp_parser_function_specifier_opt (parser, decl_specs);
7155           break;
7156
7157           /* decl-specifier:
7158                typedef  */
7159         case RID_TYPEDEF:
7160           ++decl_specs->specs[(int) ds_typedef];
7161           /* Consume the token.  */
7162           cp_lexer_consume_token (parser->lexer);
7163           /* A constructor declarator cannot appear in a typedef.  */
7164           constructor_possible_p = false;
7165           /* The "typedef" keyword can only occur in a declaration; we
7166              may as well commit at this point.  */
7167           cp_parser_commit_to_tentative_parse (parser);
7168           break;
7169
7170           /* storage-class-specifier:
7171                auto
7172                register
7173                static
7174                extern
7175                mutable
7176
7177              GNU Extension:
7178                thread  */
7179         case RID_AUTO:
7180           /* Consume the token.  */
7181           cp_lexer_consume_token (parser->lexer);
7182           cp_parser_set_storage_class (decl_specs, sc_auto);
7183           break;
7184         case RID_REGISTER:
7185           /* Consume the token.  */
7186           cp_lexer_consume_token (parser->lexer);
7187           cp_parser_set_storage_class (decl_specs, sc_register);
7188           break;
7189         case RID_STATIC:
7190           /* Consume the token.  */
7191           cp_lexer_consume_token (parser->lexer);
7192           if (decl_specs->specs[(int) ds_thread])
7193             {
7194               error ("`__thread' before `static'");
7195               decl_specs->specs[(int) ds_thread] = 0;
7196             }
7197           cp_parser_set_storage_class (decl_specs, sc_static);
7198           break;
7199         case RID_EXTERN:
7200           /* Consume the token.  */
7201           cp_lexer_consume_token (parser->lexer);
7202           if (decl_specs->specs[(int) ds_thread])
7203             {
7204               error ("`__thread' before `extern'");
7205               decl_specs->specs[(int) ds_thread] = 0;
7206             }
7207           cp_parser_set_storage_class (decl_specs, sc_extern);
7208           break;
7209         case RID_MUTABLE:
7210           /* Consume the token.  */
7211           cp_lexer_consume_token (parser->lexer);
7212           cp_parser_set_storage_class (decl_specs, sc_mutable);
7213           break;
7214         case RID_THREAD:
7215           /* Consume the token.  */
7216           cp_lexer_consume_token (parser->lexer);
7217           ++decl_specs->specs[(int) ds_thread];
7218           break;
7219
7220         default:
7221           /* We did not yet find a decl-specifier yet.  */
7222           found_decl_spec = false;
7223           break;
7224         }
7225
7226       /* Constructors are a special case.  The `S' in `S()' is not a
7227          decl-specifier; it is the beginning of the declarator.  */
7228       constructor_p
7229         = (!found_decl_spec
7230            && constructor_possible_p
7231            && (cp_parser_constructor_declarator_p
7232                (parser, decl_specs->specs[(int) ds_friend] != 0)));
7233
7234       /* If we don't have a DECL_SPEC yet, then we must be looking at
7235          a type-specifier.  */
7236       if (!found_decl_spec && !constructor_p)
7237         {
7238           int decl_spec_declares_class_or_enum;
7239           bool is_cv_qualifier;
7240           tree type_spec;
7241
7242           type_spec
7243             = cp_parser_type_specifier (parser, flags,
7244                                         decl_specs,
7245                                         /*is_declaration=*/true,
7246                                         &decl_spec_declares_class_or_enum,
7247                                         &is_cv_qualifier);
7248
7249           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
7250
7251           /* If this type-specifier referenced a user-defined type
7252              (a typedef, class-name, etc.), then we can't allow any
7253              more such type-specifiers henceforth.
7254
7255              [dcl.spec]
7256
7257              The longest sequence of decl-specifiers that could
7258              possibly be a type name is taken as the
7259              decl-specifier-seq of a declaration.  The sequence shall
7260              be self-consistent as described below.
7261
7262              [dcl.type]
7263
7264              As a general rule, at most one type-specifier is allowed
7265              in the complete decl-specifier-seq of a declaration.  The
7266              only exceptions are the following:
7267
7268              -- const or volatile can be combined with any other
7269                 type-specifier.
7270
7271              -- signed or unsigned can be combined with char, long,
7272                 short, or int.
7273
7274              -- ..
7275
7276              Example:
7277
7278                typedef char* Pc;
7279                void g (const int Pc);
7280
7281              Here, Pc is *not* part of the decl-specifier seq; it's
7282              the declarator.  Therefore, once we see a type-specifier
7283              (other than a cv-qualifier), we forbid any additional
7284              user-defined types.  We *do* still allow things like `int
7285              int' to be considered a decl-specifier-seq, and issue the
7286              error message later.  */
7287           if (type_spec && !is_cv_qualifier)
7288             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
7289           /* A constructor declarator cannot follow a type-specifier.  */
7290           if (type_spec)
7291             {
7292               constructor_possible_p = false;
7293               found_decl_spec = true;
7294             }
7295         }
7296
7297       /* If we still do not have a DECL_SPEC, then there are no more
7298          decl-specifiers.  */
7299       if (!found_decl_spec)
7300         break;
7301
7302       decl_specs->any_specifiers_p = true;
7303       /* After we see one decl-specifier, further decl-specifiers are
7304          always optional.  */
7305       flags |= CP_PARSER_FLAGS_OPTIONAL;
7306     }
7307
7308   /* Don't allow a friend specifier with a class definition.  */
7309   if (decl_specs->specs[(int) ds_friend] != 0
7310       && (*declares_class_or_enum & 2))
7311     error ("class definition may not be declared a friend");
7312 }
7313
7314 /* Parse an (optional) storage-class-specifier.
7315
7316    storage-class-specifier:
7317      auto
7318      register
7319      static
7320      extern
7321      mutable
7322
7323    GNU Extension:
7324
7325    storage-class-specifier:
7326      thread
7327
7328    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7329
7330 static tree
7331 cp_parser_storage_class_specifier_opt (cp_parser* parser)
7332 {
7333   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7334     {
7335     case RID_AUTO:
7336     case RID_REGISTER:
7337     case RID_STATIC:
7338     case RID_EXTERN:
7339     case RID_MUTABLE:
7340     case RID_THREAD:
7341       /* Consume the token.  */
7342       return cp_lexer_consume_token (parser->lexer)->value;
7343
7344     default:
7345       return NULL_TREE;
7346     }
7347 }
7348
7349 /* Parse an (optional) function-specifier.
7350
7351    function-specifier:
7352      inline
7353      virtual
7354      explicit
7355
7356    Returns an IDENTIFIER_NODE corresponding to the keyword used.
7357    Updates DECL_SPECS, if it is non-NULL.  */
7358
7359 static tree
7360 cp_parser_function_specifier_opt (cp_parser* parser,
7361                                   cp_decl_specifier_seq *decl_specs)
7362 {
7363   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7364     {
7365     case RID_INLINE:
7366       if (decl_specs)
7367         ++decl_specs->specs[(int) ds_inline];
7368       break;
7369
7370     case RID_VIRTUAL:
7371       if (decl_specs)
7372         ++decl_specs->specs[(int) ds_virtual];
7373       break;
7374
7375     case RID_EXPLICIT:
7376       if (decl_specs)
7377         ++decl_specs->specs[(int) ds_explicit];
7378       break;
7379
7380     default:
7381       return NULL_TREE;
7382     }
7383
7384   /* Consume the token.  */
7385   return cp_lexer_consume_token (parser->lexer)->value;
7386 }
7387
7388 /* Parse a linkage-specification.
7389
7390    linkage-specification:
7391      extern string-literal { declaration-seq [opt] }
7392      extern string-literal declaration  */
7393
7394 static void
7395 cp_parser_linkage_specification (cp_parser* parser)
7396 {
7397   cp_token *token;
7398   tree linkage;
7399
7400   /* Look for the `extern' keyword.  */
7401   cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7402
7403   /* Peek at the next token.  */
7404   token = cp_lexer_peek_token (parser->lexer);
7405   /* If it's not a string-literal, then there's a problem.  */
7406   if (!cp_parser_is_string_literal (token))
7407     {
7408       cp_parser_error (parser, "expected language-name");
7409       return;
7410     }
7411   /* Consume the token.  */
7412   cp_lexer_consume_token (parser->lexer);
7413
7414   /* Transform the literal into an identifier.  If the literal is a
7415      wide-character string, or contains embedded NULs, then we can't
7416      handle it as the user wants.  */
7417   if (token->type == CPP_WSTRING
7418       || (strlen (TREE_STRING_POINTER (token->value))
7419           != (size_t) (TREE_STRING_LENGTH (token->value) - 1)))
7420     {
7421       cp_parser_error (parser, "invalid linkage-specification");
7422       /* Assume C++ linkage.  */
7423       linkage = get_identifier ("c++");
7424     }
7425   /* If the string is chained to another string, take the latter,
7426      that's the untranslated string.  */
7427   else if (TREE_CHAIN (token->value))
7428     linkage = get_identifier (TREE_STRING_POINTER (TREE_CHAIN (token->value)));
7429   /* If it's a simple string constant, things are easier.  */
7430   else
7431     linkage = get_identifier (TREE_STRING_POINTER (token->value));
7432
7433   /* We're now using the new linkage.  */
7434   push_lang_context (linkage);
7435
7436   /* If the next token is a `{', then we're using the first
7437      production.  */
7438   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7439     {
7440       /* Consume the `{' token.  */
7441       cp_lexer_consume_token (parser->lexer);
7442       /* Parse the declarations.  */
7443       cp_parser_declaration_seq_opt (parser);
7444       /* Look for the closing `}'.  */
7445       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7446     }
7447   /* Otherwise, there's just one declaration.  */
7448   else
7449     {
7450       bool saved_in_unbraced_linkage_specification_p;
7451
7452       saved_in_unbraced_linkage_specification_p
7453         = parser->in_unbraced_linkage_specification_p;
7454       parser->in_unbraced_linkage_specification_p = true;
7455       have_extern_spec = true;
7456       cp_parser_declaration (parser);
7457       have_extern_spec = false;
7458       parser->in_unbraced_linkage_specification_p
7459         = saved_in_unbraced_linkage_specification_p;
7460     }
7461
7462   /* We're done with the linkage-specification.  */
7463   pop_lang_context ();
7464 }
7465
7466 /* Special member functions [gram.special] */
7467
7468 /* Parse a conversion-function-id.
7469
7470    conversion-function-id:
7471      operator conversion-type-id
7472
7473    Returns an IDENTIFIER_NODE representing the operator.  */
7474
7475 static tree
7476 cp_parser_conversion_function_id (cp_parser* parser)
7477 {
7478   tree type;
7479   tree saved_scope;
7480   tree saved_qualifying_scope;
7481   tree saved_object_scope;
7482   bool pop_p = false;
7483
7484   /* Look for the `operator' token.  */
7485   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7486     return error_mark_node;
7487   /* When we parse the conversion-type-id, the current scope will be
7488      reset.  However, we need that information in able to look up the
7489      conversion function later, so we save it here.  */
7490   saved_scope = parser->scope;
7491   saved_qualifying_scope = parser->qualifying_scope;
7492   saved_object_scope = parser->object_scope;
7493   /* We must enter the scope of the class so that the names of
7494      entities declared within the class are available in the
7495      conversion-type-id.  For example, consider:
7496
7497        struct S {
7498          typedef int I;
7499          operator I();
7500        };
7501
7502        S::operator I() { ... }
7503
7504      In order to see that `I' is a type-name in the definition, we
7505      must be in the scope of `S'.  */
7506   if (saved_scope)
7507     pop_p = push_scope (saved_scope);
7508   /* Parse the conversion-type-id.  */
7509   type = cp_parser_conversion_type_id (parser);
7510   /* Leave the scope of the class, if any.  */
7511   if (pop_p)
7512     pop_scope (saved_scope);
7513   /* Restore the saved scope.  */
7514   parser->scope = saved_scope;
7515   parser->qualifying_scope = saved_qualifying_scope;
7516   parser->object_scope = saved_object_scope;
7517   /* If the TYPE is invalid, indicate failure.  */
7518   if (type == error_mark_node)
7519     return error_mark_node;
7520   return mangle_conv_op_name_for_type (type);
7521 }
7522
7523 /* Parse a conversion-type-id:
7524
7525    conversion-type-id:
7526      type-specifier-seq conversion-declarator [opt]
7527
7528    Returns the TYPE specified.  */
7529
7530 static tree
7531 cp_parser_conversion_type_id (cp_parser* parser)
7532 {
7533   tree attributes;
7534   cp_decl_specifier_seq type_specifiers;
7535   cp_declarator *declarator;
7536
7537   /* Parse the attributes.  */
7538   attributes = cp_parser_attributes_opt (parser);
7539   /* Parse the type-specifiers.  */
7540   cp_parser_type_specifier_seq (parser, &type_specifiers);
7541   /* If that didn't work, stop.  */
7542   if (type_specifiers.type == error_mark_node)
7543     return error_mark_node;
7544   /* Parse the conversion-declarator.  */
7545   declarator = cp_parser_conversion_declarator_opt (parser);
7546
7547   return grokdeclarator (declarator, &type_specifiers, TYPENAME,
7548                          /*initialized=*/0, &attributes);
7549 }
7550
7551 /* Parse an (optional) conversion-declarator.
7552
7553    conversion-declarator:
7554      ptr-operator conversion-declarator [opt]
7555
7556    */
7557
7558 static cp_declarator *
7559 cp_parser_conversion_declarator_opt (cp_parser* parser)
7560 {
7561   enum tree_code code;
7562   tree class_type;
7563   cp_cv_quals cv_quals;
7564
7565   /* We don't know if there's a ptr-operator next, or not.  */
7566   cp_parser_parse_tentatively (parser);
7567   /* Try the ptr-operator.  */
7568   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
7569   /* If it worked, look for more conversion-declarators.  */
7570   if (cp_parser_parse_definitely (parser))
7571     {
7572       cp_declarator *declarator;
7573
7574       /* Parse another optional declarator.  */
7575       declarator = cp_parser_conversion_declarator_opt (parser);
7576
7577       /* Create the representation of the declarator.  */
7578       if (class_type)
7579         declarator = make_ptrmem_declarator (cv_quals, class_type,
7580                                              declarator);
7581       else if (code == INDIRECT_REF)
7582         declarator = make_pointer_declarator (cv_quals, declarator);
7583       else
7584         declarator = make_reference_declarator (cv_quals, declarator);
7585
7586       return declarator;
7587    }
7588
7589   return NULL;
7590 }
7591
7592 /* Parse an (optional) ctor-initializer.
7593
7594    ctor-initializer:
7595      : mem-initializer-list
7596
7597    Returns TRUE iff the ctor-initializer was actually present.  */
7598
7599 static bool
7600 cp_parser_ctor_initializer_opt (cp_parser* parser)
7601 {
7602   /* If the next token is not a `:', then there is no
7603      ctor-initializer.  */
7604   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
7605     {
7606       /* Do default initialization of any bases and members.  */
7607       if (DECL_CONSTRUCTOR_P (current_function_decl))
7608         finish_mem_initializers (NULL_TREE);
7609
7610       return false;
7611     }
7612
7613   /* Consume the `:' token.  */
7614   cp_lexer_consume_token (parser->lexer);
7615   /* And the mem-initializer-list.  */
7616   cp_parser_mem_initializer_list (parser);
7617
7618   return true;
7619 }
7620
7621 /* Parse a mem-initializer-list.
7622
7623    mem-initializer-list:
7624      mem-initializer
7625      mem-initializer , mem-initializer-list  */
7626
7627 static void
7628 cp_parser_mem_initializer_list (cp_parser* parser)
7629 {
7630   tree mem_initializer_list = NULL_TREE;
7631
7632   /* Let the semantic analysis code know that we are starting the
7633      mem-initializer-list.  */
7634   if (!DECL_CONSTRUCTOR_P (current_function_decl))
7635     error ("only constructors take base initializers");
7636
7637   /* Loop through the list.  */
7638   while (true)
7639     {
7640       tree mem_initializer;
7641
7642       /* Parse the mem-initializer.  */
7643       mem_initializer = cp_parser_mem_initializer (parser);
7644       /* Add it to the list, unless it was erroneous.  */
7645       if (mem_initializer)
7646         {
7647           TREE_CHAIN (mem_initializer) = mem_initializer_list;
7648           mem_initializer_list = mem_initializer;
7649         }
7650       /* If the next token is not a `,', we're done.  */
7651       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7652         break;
7653       /* Consume the `,' token.  */
7654       cp_lexer_consume_token (parser->lexer);
7655     }
7656
7657   /* Perform semantic analysis.  */
7658   if (DECL_CONSTRUCTOR_P (current_function_decl))
7659     finish_mem_initializers (mem_initializer_list);
7660 }
7661
7662 /* Parse a mem-initializer.
7663
7664    mem-initializer:
7665      mem-initializer-id ( expression-list [opt] )
7666
7667    GNU extension:
7668
7669    mem-initializer:
7670      ( expression-list [opt] )
7671
7672    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
7673    class) or FIELD_DECL (for a non-static data member) to initialize;
7674    the TREE_VALUE is the expression-list.  */
7675
7676 static tree
7677 cp_parser_mem_initializer (cp_parser* parser)
7678 {
7679   tree mem_initializer_id;
7680   tree expression_list;
7681   tree member;
7682
7683   /* Find out what is being initialized.  */
7684   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7685     {
7686       pedwarn ("anachronistic old-style base class initializer");
7687       mem_initializer_id = NULL_TREE;
7688     }
7689   else
7690     mem_initializer_id = cp_parser_mem_initializer_id (parser);
7691   member = expand_member_init (mem_initializer_id);
7692   if (member && !DECL_P (member))
7693     in_base_initializer = 1;
7694
7695   expression_list
7696     = cp_parser_parenthesized_expression_list (parser, false,
7697                                                /*non_constant_p=*/NULL);
7698   if (!expression_list)
7699     expression_list = void_type_node;
7700
7701   in_base_initializer = 0;
7702
7703   return member ? build_tree_list (member, expression_list) : NULL_TREE;
7704 }
7705
7706 /* Parse a mem-initializer-id.
7707
7708    mem-initializer-id:
7709      :: [opt] nested-name-specifier [opt] class-name
7710      identifier
7711
7712    Returns a TYPE indicating the class to be initializer for the first
7713    production.  Returns an IDENTIFIER_NODE indicating the data member
7714    to be initialized for the second production.  */
7715
7716 static tree
7717 cp_parser_mem_initializer_id (cp_parser* parser)
7718 {
7719   bool global_scope_p;
7720   bool nested_name_specifier_p;
7721   bool template_p = false;
7722   tree id;
7723
7724   /* `typename' is not allowed in this context ([temp.res]).  */
7725   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
7726     {
7727       error ("keyword `typename' not allowed in this context (a qualified "
7728              "member initializer is implicitly a type)");
7729       cp_lexer_consume_token (parser->lexer);
7730     }
7731   /* Look for the optional `::' operator.  */
7732   global_scope_p
7733     = (cp_parser_global_scope_opt (parser,
7734                                    /*current_scope_valid_p=*/false)
7735        != NULL_TREE);
7736   /* Look for the optional nested-name-specifier.  The simplest way to
7737      implement:
7738
7739        [temp.res]
7740
7741        The keyword `typename' is not permitted in a base-specifier or
7742        mem-initializer; in these contexts a qualified name that
7743        depends on a template-parameter is implicitly assumed to be a
7744        type name.
7745
7746      is to assume that we have seen the `typename' keyword at this
7747      point.  */
7748   nested_name_specifier_p
7749     = (cp_parser_nested_name_specifier_opt (parser,
7750                                             /*typename_keyword_p=*/true,
7751                                             /*check_dependency_p=*/true,
7752                                             /*type_p=*/true,
7753                                             /*is_declaration=*/true)
7754        != NULL_TREE);
7755   if (nested_name_specifier_p)
7756     template_p = cp_parser_optional_template_keyword (parser);
7757   /* If there is a `::' operator or a nested-name-specifier, then we
7758      are definitely looking for a class-name.  */
7759   if (global_scope_p || nested_name_specifier_p)
7760     return cp_parser_class_name (parser,
7761                                  /*typename_keyword_p=*/true,
7762                                  /*template_keyword_p=*/template_p,
7763                                  /*type_p=*/false,
7764                                  /*check_dependency_p=*/true,
7765                                  /*class_head_p=*/false,
7766                                  /*is_declaration=*/true);
7767   /* Otherwise, we could also be looking for an ordinary identifier.  */
7768   cp_parser_parse_tentatively (parser);
7769   /* Try a class-name.  */
7770   id = cp_parser_class_name (parser,
7771                              /*typename_keyword_p=*/true,
7772                              /*template_keyword_p=*/false,
7773                              /*type_p=*/false,
7774                              /*check_dependency_p=*/true,
7775                              /*class_head_p=*/false,
7776                              /*is_declaration=*/true);
7777   /* If we found one, we're done.  */
7778   if (cp_parser_parse_definitely (parser))
7779     return id;
7780   /* Otherwise, look for an ordinary identifier.  */
7781   return cp_parser_identifier (parser);
7782 }
7783
7784 /* Overloading [gram.over] */
7785
7786 /* Parse an operator-function-id.
7787
7788    operator-function-id:
7789      operator operator
7790
7791    Returns an IDENTIFIER_NODE for the operator which is a
7792    human-readable spelling of the identifier, e.g., `operator +'.  */
7793
7794 static tree
7795 cp_parser_operator_function_id (cp_parser* parser)
7796 {
7797   /* Look for the `operator' keyword.  */
7798   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7799     return error_mark_node;
7800   /* And then the name of the operator itself.  */
7801   return cp_parser_operator (parser);
7802 }
7803
7804 /* Parse an operator.
7805
7806    operator:
7807      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
7808      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
7809      || ++ -- , ->* -> () []
7810
7811    GNU Extensions:
7812
7813    operator:
7814      <? >? <?= >?=
7815
7816    Returns an IDENTIFIER_NODE for the operator which is a
7817    human-readable spelling of the identifier, e.g., `operator +'.  */
7818
7819 static tree
7820 cp_parser_operator (cp_parser* parser)
7821 {
7822   tree id = NULL_TREE;
7823   cp_token *token;
7824
7825   /* Peek at the next token.  */
7826   token = cp_lexer_peek_token (parser->lexer);
7827   /* Figure out which operator we have.  */
7828   switch (token->type)
7829     {
7830     case CPP_KEYWORD:
7831       {
7832         enum tree_code op;
7833
7834         /* The keyword should be either `new' or `delete'.  */
7835         if (token->keyword == RID_NEW)
7836           op = NEW_EXPR;
7837         else if (token->keyword == RID_DELETE)
7838           op = DELETE_EXPR;
7839         else
7840           break;
7841
7842         /* Consume the `new' or `delete' token.  */
7843         cp_lexer_consume_token (parser->lexer);
7844
7845         /* Peek at the next token.  */
7846         token = cp_lexer_peek_token (parser->lexer);
7847         /* If it's a `[' token then this is the array variant of the
7848            operator.  */
7849         if (token->type == CPP_OPEN_SQUARE)
7850           {
7851             /* Consume the `[' token.  */
7852             cp_lexer_consume_token (parser->lexer);
7853             /* Look for the `]' token.  */
7854             cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
7855             id = ansi_opname (op == NEW_EXPR
7856                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
7857           }
7858         /* Otherwise, we have the non-array variant.  */
7859         else
7860           id = ansi_opname (op);
7861
7862         return id;
7863       }
7864
7865     case CPP_PLUS:
7866       id = ansi_opname (PLUS_EXPR);
7867       break;
7868
7869     case CPP_MINUS:
7870       id = ansi_opname (MINUS_EXPR);
7871       break;
7872
7873     case CPP_MULT:
7874       id = ansi_opname (MULT_EXPR);
7875       break;
7876
7877     case CPP_DIV:
7878       id = ansi_opname (TRUNC_DIV_EXPR);
7879       break;
7880
7881     case CPP_MOD:
7882       id = ansi_opname (TRUNC_MOD_EXPR);
7883       break;
7884
7885     case CPP_XOR:
7886       id = ansi_opname (BIT_XOR_EXPR);
7887       break;
7888
7889     case CPP_AND:
7890       id = ansi_opname (BIT_AND_EXPR);
7891       break;
7892
7893     case CPP_OR:
7894       id = ansi_opname (BIT_IOR_EXPR);
7895       break;
7896
7897     case CPP_COMPL:
7898       id = ansi_opname (BIT_NOT_EXPR);
7899       break;
7900
7901     case CPP_NOT:
7902       id = ansi_opname (TRUTH_NOT_EXPR);
7903       break;
7904
7905     case CPP_EQ:
7906       id = ansi_assopname (NOP_EXPR);
7907       break;
7908
7909     case CPP_LESS:
7910       id = ansi_opname (LT_EXPR);
7911       break;
7912
7913     case CPP_GREATER:
7914       id = ansi_opname (GT_EXPR);
7915       break;
7916
7917     case CPP_PLUS_EQ:
7918       id = ansi_assopname (PLUS_EXPR);
7919       break;
7920
7921     case CPP_MINUS_EQ:
7922       id = ansi_assopname (MINUS_EXPR);
7923       break;
7924
7925     case CPP_MULT_EQ:
7926       id = ansi_assopname (MULT_EXPR);
7927       break;
7928
7929     case CPP_DIV_EQ:
7930       id = ansi_assopname (TRUNC_DIV_EXPR);
7931       break;
7932
7933     case CPP_MOD_EQ:
7934       id = ansi_assopname (TRUNC_MOD_EXPR);
7935       break;
7936
7937     case CPP_XOR_EQ:
7938       id = ansi_assopname (BIT_XOR_EXPR);
7939       break;
7940
7941     case CPP_AND_EQ:
7942       id = ansi_assopname (BIT_AND_EXPR);
7943       break;
7944
7945     case CPP_OR_EQ:
7946       id = ansi_assopname (BIT_IOR_EXPR);
7947       break;
7948
7949     case CPP_LSHIFT:
7950       id = ansi_opname (LSHIFT_EXPR);
7951       break;
7952
7953     case CPP_RSHIFT:
7954       id = ansi_opname (RSHIFT_EXPR);
7955       break;
7956
7957     case CPP_LSHIFT_EQ:
7958       id = ansi_assopname (LSHIFT_EXPR);
7959       break;
7960
7961     case CPP_RSHIFT_EQ:
7962       id = ansi_assopname (RSHIFT_EXPR);
7963       break;
7964
7965     case CPP_EQ_EQ:
7966       id = ansi_opname (EQ_EXPR);
7967       break;
7968
7969     case CPP_NOT_EQ:
7970       id = ansi_opname (NE_EXPR);
7971       break;
7972
7973     case CPP_LESS_EQ:
7974       id = ansi_opname (LE_EXPR);
7975       break;
7976
7977     case CPP_GREATER_EQ:
7978       id = ansi_opname (GE_EXPR);
7979       break;
7980
7981     case CPP_AND_AND:
7982       id = ansi_opname (TRUTH_ANDIF_EXPR);
7983       break;
7984
7985     case CPP_OR_OR:
7986       id = ansi_opname (TRUTH_ORIF_EXPR);
7987       break;
7988
7989     case CPP_PLUS_PLUS:
7990       id = ansi_opname (POSTINCREMENT_EXPR);
7991       break;
7992
7993     case CPP_MINUS_MINUS:
7994       id = ansi_opname (PREDECREMENT_EXPR);
7995       break;
7996
7997     case CPP_COMMA:
7998       id = ansi_opname (COMPOUND_EXPR);
7999       break;
8000
8001     case CPP_DEREF_STAR:
8002       id = ansi_opname (MEMBER_REF);
8003       break;
8004
8005     case CPP_DEREF:
8006       id = ansi_opname (COMPONENT_REF);
8007       break;
8008
8009     case CPP_OPEN_PAREN:
8010       /* Consume the `('.  */
8011       cp_lexer_consume_token (parser->lexer);
8012       /* Look for the matching `)'.  */
8013       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8014       return ansi_opname (CALL_EXPR);
8015
8016     case CPP_OPEN_SQUARE:
8017       /* Consume the `['.  */
8018       cp_lexer_consume_token (parser->lexer);
8019       /* Look for the matching `]'.  */
8020       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8021       return ansi_opname (ARRAY_REF);
8022
8023       /* Extensions.  */
8024     case CPP_MIN:
8025       id = ansi_opname (MIN_EXPR);
8026       break;
8027
8028     case CPP_MAX:
8029       id = ansi_opname (MAX_EXPR);
8030       break;
8031
8032     case CPP_MIN_EQ:
8033       id = ansi_assopname (MIN_EXPR);
8034       break;
8035
8036     case CPP_MAX_EQ:
8037       id = ansi_assopname (MAX_EXPR);
8038       break;
8039
8040     default:
8041       /* Anything else is an error.  */
8042       break;
8043     }
8044
8045   /* If we have selected an identifier, we need to consume the
8046      operator token.  */
8047   if (id)
8048     cp_lexer_consume_token (parser->lexer);
8049   /* Otherwise, no valid operator name was present.  */
8050   else
8051     {
8052       cp_parser_error (parser, "expected operator");
8053       id = error_mark_node;
8054     }
8055
8056   return id;
8057 }
8058
8059 /* Parse a template-declaration.
8060
8061    template-declaration:
8062      export [opt] template < template-parameter-list > declaration
8063
8064    If MEMBER_P is TRUE, this template-declaration occurs within a
8065    class-specifier.
8066
8067    The grammar rule given by the standard isn't correct.  What
8068    is really meant is:
8069
8070    template-declaration:
8071      export [opt] template-parameter-list-seq
8072        decl-specifier-seq [opt] init-declarator [opt] ;
8073      export [opt] template-parameter-list-seq
8074        function-definition
8075
8076    template-parameter-list-seq:
8077      template-parameter-list-seq [opt]
8078      template < template-parameter-list >  */
8079
8080 static void
8081 cp_parser_template_declaration (cp_parser* parser, bool member_p)
8082 {
8083   /* Check for `export'.  */
8084   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8085     {
8086       /* Consume the `export' token.  */
8087       cp_lexer_consume_token (parser->lexer);
8088       /* Warn that we do not support `export'.  */
8089       warning ("keyword `export' not implemented, and will be ignored");
8090     }
8091
8092   cp_parser_template_declaration_after_export (parser, member_p);
8093 }
8094
8095 /* Parse a template-parameter-list.
8096
8097    template-parameter-list:
8098      template-parameter
8099      template-parameter-list , template-parameter
8100
8101    Returns a TREE_LIST.  Each node represents a template parameter.
8102    The nodes are connected via their TREE_CHAINs.  */
8103
8104 static tree
8105 cp_parser_template_parameter_list (cp_parser* parser)
8106 {
8107   tree parameter_list = NULL_TREE;
8108
8109   while (true)
8110     {
8111       tree parameter;
8112       cp_token *token;
8113       bool is_non_type;
8114
8115       /* Parse the template-parameter.  */
8116       parameter = cp_parser_template_parameter (parser, &is_non_type);
8117       /* Add it to the list.  */
8118       parameter_list = process_template_parm (parameter_list,
8119                                               parameter,
8120                                               is_non_type);
8121       /* Peek at the next token.  */
8122       token = cp_lexer_peek_token (parser->lexer);
8123       /* If it's not a `,', we're done.  */
8124       if (token->type != CPP_COMMA)
8125         break;
8126       /* Otherwise, consume the `,' token.  */
8127       cp_lexer_consume_token (parser->lexer);
8128     }
8129
8130   return parameter_list;
8131 }
8132
8133 /* Parse a template-parameter.
8134
8135    template-parameter:
8136      type-parameter
8137      parameter-declaration
8138
8139    Returns a TREE_LIST.  The TREE_VALUE represents the parameter.  The
8140    TREE_PURPOSE is the default value, if any.  *IS_NON_TYPE is set to
8141    true iff this parameter is a non-type parameter.  */
8142
8143 static tree
8144 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
8145 {
8146   cp_token *token;
8147   cp_parameter_declarator *parameter_declarator;
8148
8149   /* Assume it is a type parameter or a template parameter.  */
8150   *is_non_type = false;
8151   /* Peek at the next token.  */
8152   token = cp_lexer_peek_token (parser->lexer);
8153   /* If it is `class' or `template', we have a type-parameter.  */
8154   if (token->keyword == RID_TEMPLATE)
8155     return cp_parser_type_parameter (parser);
8156   /* If it is `class' or `typename' we do not know yet whether it is a
8157      type parameter or a non-type parameter.  Consider:
8158
8159        template <typename T, typename T::X X> ...
8160
8161      or:
8162
8163        template <class C, class D*> ...
8164
8165      Here, the first parameter is a type parameter, and the second is
8166      a non-type parameter.  We can tell by looking at the token after
8167      the identifier -- if it is a `,', `=', or `>' then we have a type
8168      parameter.  */
8169   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
8170     {
8171       /* Peek at the token after `class' or `typename'.  */
8172       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8173       /* If it's an identifier, skip it.  */
8174       if (token->type == CPP_NAME)
8175         token = cp_lexer_peek_nth_token (parser->lexer, 3);
8176       /* Now, see if the token looks like the end of a template
8177          parameter.  */
8178       if (token->type == CPP_COMMA
8179           || token->type == CPP_EQ
8180           || token->type == CPP_GREATER)
8181         return cp_parser_type_parameter (parser);
8182     }
8183
8184   /* Otherwise, it is a non-type parameter.
8185
8186      [temp.param]
8187
8188      When parsing a default template-argument for a non-type
8189      template-parameter, the first non-nested `>' is taken as the end
8190      of the template parameter-list rather than a greater-than
8191      operator.  */
8192   *is_non_type = true;
8193   parameter_declarator
8194      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
8195                                         /*parenthesized_p=*/NULL);
8196   return (build_tree_list
8197           (parameter_declarator->default_argument,
8198            grokdeclarator (parameter_declarator->declarator,
8199                            &parameter_declarator->decl_specifiers,
8200                            PARM, /*initialized=*/0,
8201                            /*attrlist=*/NULL)));
8202 }
8203
8204 /* Parse a type-parameter.
8205
8206    type-parameter:
8207      class identifier [opt]
8208      class identifier [opt] = type-id
8209      typename identifier [opt]
8210      typename identifier [opt] = type-id
8211      template < template-parameter-list > class identifier [opt]
8212      template < template-parameter-list > class identifier [opt]
8213        = id-expression
8214
8215    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
8216    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
8217    the declaration of the parameter.  */
8218
8219 static tree
8220 cp_parser_type_parameter (cp_parser* parser)
8221 {
8222   cp_token *token;
8223   tree parameter;
8224
8225   /* Look for a keyword to tell us what kind of parameter this is.  */
8226   token = cp_parser_require (parser, CPP_KEYWORD,
8227                              "`class', `typename', or `template'");
8228   if (!token)
8229     return error_mark_node;
8230
8231   switch (token->keyword)
8232     {
8233     case RID_CLASS:
8234     case RID_TYPENAME:
8235       {
8236         tree identifier;
8237         tree default_argument;
8238
8239         /* If the next token is an identifier, then it names the
8240            parameter.  */
8241         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8242           identifier = cp_parser_identifier (parser);
8243         else
8244           identifier = NULL_TREE;
8245
8246         /* Create the parameter.  */
8247         parameter = finish_template_type_parm (class_type_node, identifier);
8248
8249         /* If the next token is an `=', we have a default argument.  */
8250         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8251           {
8252             /* Consume the `=' token.  */
8253             cp_lexer_consume_token (parser->lexer);
8254             /* Parse the default-argument.  */
8255             default_argument = cp_parser_type_id (parser);
8256           }
8257         else
8258           default_argument = NULL_TREE;
8259
8260         /* Create the combined representation of the parameter and the
8261            default argument.  */
8262         parameter = build_tree_list (default_argument, parameter);
8263       }
8264       break;
8265
8266     case RID_TEMPLATE:
8267       {
8268         tree parameter_list;
8269         tree identifier;
8270         tree default_argument;
8271
8272         /* Look for the `<'.  */
8273         cp_parser_require (parser, CPP_LESS, "`<'");
8274         /* Parse the template-parameter-list.  */
8275         begin_template_parm_list ();
8276         parameter_list
8277           = cp_parser_template_parameter_list (parser);
8278         parameter_list = end_template_parm_list (parameter_list);
8279         /* Look for the `>'.  */
8280         cp_parser_require (parser, CPP_GREATER, "`>'");
8281         /* Look for the `class' keyword.  */
8282         cp_parser_require_keyword (parser, RID_CLASS, "`class'");
8283         /* If the next token is an `=', then there is a
8284            default-argument.  If the next token is a `>', we are at
8285            the end of the parameter-list.  If the next token is a `,',
8286            then we are at the end of this parameter.  */
8287         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8288             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
8289             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8290           identifier = cp_parser_identifier (parser);
8291         else
8292           identifier = NULL_TREE;
8293         /* Create the template parameter.  */
8294         parameter = finish_template_template_parm (class_type_node,
8295                                                    identifier);
8296
8297         /* If the next token is an `=', then there is a
8298            default-argument.  */
8299         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8300           {
8301             bool is_template;
8302
8303             /* Consume the `='.  */
8304             cp_lexer_consume_token (parser->lexer);
8305             /* Parse the id-expression.  */
8306             default_argument
8307               = cp_parser_id_expression (parser,
8308                                          /*template_keyword_p=*/false,
8309                                          /*check_dependency_p=*/true,
8310                                          /*template_p=*/&is_template,
8311                                          /*declarator_p=*/false);
8312             if (TREE_CODE (default_argument) == TYPE_DECL)
8313               /* If the id-expression was a template-id that refers to
8314                  a template-class, we already have the declaration here,
8315                  so no further lookup is needed.  */
8316                  ;
8317             else
8318               /* Look up the name.  */
8319               default_argument
8320                 = cp_parser_lookup_name (parser, default_argument,
8321                                         /*is_type=*/false,
8322                                         /*is_template=*/is_template,
8323                                         /*is_namespace=*/false,
8324                                         /*check_dependency=*/true);
8325             /* See if the default argument is valid.  */
8326             default_argument
8327               = check_template_template_default_arg (default_argument);
8328           }
8329         else
8330           default_argument = NULL_TREE;
8331
8332         /* Create the combined representation of the parameter and the
8333            default argument.  */
8334         parameter =  build_tree_list (default_argument, parameter);
8335       }
8336       break;
8337
8338     default:
8339       /* Anything else is an error.  */
8340       cp_parser_error (parser,
8341                        "expected `class', `typename', or `template'");
8342       parameter = error_mark_node;
8343     }
8344
8345   return parameter;
8346 }
8347
8348 /* Parse a template-id.
8349
8350    template-id:
8351      template-name < template-argument-list [opt] >
8352
8353    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8354    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8355    returned.  Otherwise, if the template-name names a function, or set
8356    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8357    names a class, returns a TYPE_DECL for the specialization.
8358
8359    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8360    uninstantiated templates.  */
8361
8362 static tree
8363 cp_parser_template_id (cp_parser *parser,
8364                        bool template_keyword_p,
8365                        bool check_dependency_p,
8366                        bool is_declaration)
8367 {
8368   tree template;
8369   tree arguments;
8370   tree template_id;
8371   ptrdiff_t start_of_id;
8372   tree access_check = NULL_TREE;
8373   cp_token *next_token, *next_token_2;
8374   bool is_identifier;
8375
8376   /* If the next token corresponds to a template-id, there is no need
8377      to reparse it.  */
8378   next_token = cp_lexer_peek_token (parser->lexer);
8379   if (next_token->type == CPP_TEMPLATE_ID)
8380     {
8381       tree value;
8382       tree check;
8383
8384       /* Get the stored value.  */
8385       value = cp_lexer_consume_token (parser->lexer)->value;
8386       /* Perform any access checks that were deferred.  */
8387       for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
8388         perform_or_defer_access_check (TREE_PURPOSE (check),
8389                                        TREE_VALUE (check));
8390       /* Return the stored value.  */
8391       return TREE_VALUE (value);
8392     }
8393
8394   /* Avoid performing name lookup if there is no possibility of
8395      finding a template-id.  */
8396   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8397       || (next_token->type == CPP_NAME
8398           && !cp_parser_nth_token_starts_template_argument_list_p
8399                (parser, 2)))
8400     {
8401       cp_parser_error (parser, "expected template-id");
8402       return error_mark_node;
8403     }
8404
8405   /* Remember where the template-id starts.  */
8406   if (cp_parser_parsing_tentatively (parser)
8407       && !cp_parser_committed_to_tentative_parse (parser))
8408     {
8409       next_token = cp_lexer_peek_token (parser->lexer);
8410       start_of_id = cp_lexer_token_difference (parser->lexer,
8411                                                parser->lexer->first_token,
8412                                                next_token);
8413     }
8414   else
8415     start_of_id = -1;
8416
8417   push_deferring_access_checks (dk_deferred);
8418
8419   /* Parse the template-name.  */
8420   is_identifier = false;
8421   template = cp_parser_template_name (parser, template_keyword_p,
8422                                       check_dependency_p,
8423                                       is_declaration,
8424                                       &is_identifier);
8425   if (template == error_mark_node || is_identifier)
8426     {
8427       pop_deferring_access_checks ();
8428       return template;
8429     }
8430
8431   /* If we find the sequence `[:' after a template-name, it's probably
8432      a digraph-typo for `< ::'. Substitute the tokens and check if we can
8433      parse correctly the argument list.  */
8434   next_token = cp_lexer_peek_nth_token (parser->lexer, 1);
8435   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8436   if (next_token->type == CPP_OPEN_SQUARE
8437       && next_token->flags & DIGRAPH
8438       && next_token_2->type == CPP_COLON
8439       && !(next_token_2->flags & PREV_WHITE))
8440     {
8441       cp_parser_parse_tentatively (parser);
8442       /* Change `:' into `::'.  */
8443       next_token_2->type = CPP_SCOPE;
8444       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8445          CPP_LESS.  */
8446       cp_lexer_consume_token (parser->lexer);
8447       /* Parse the arguments.  */
8448       arguments = cp_parser_enclosed_template_argument_list (parser);
8449       if (!cp_parser_parse_definitely (parser))
8450         {
8451           /* If we couldn't parse an argument list, then we revert our changes
8452              and return simply an error. Maybe this is not a template-id
8453              after all.  */
8454           next_token_2->type = CPP_COLON;
8455           cp_parser_error (parser, "expected `<'");
8456           pop_deferring_access_checks ();
8457           return error_mark_node;
8458         }
8459       /* Otherwise, emit an error about the invalid digraph, but continue
8460          parsing because we got our argument list.  */
8461       pedwarn ("`<::' cannot begin a template-argument list");
8462       inform ("`<:' is an alternate spelling for `['. Insert whitespace "
8463               "between `<' and `::'");
8464       if (!flag_permissive)
8465         {
8466           static bool hint;
8467           if (!hint)
8468             {
8469               inform ("(if you use `-fpermissive' G++ will accept your code)");
8470               hint = true;
8471             }
8472         }
8473     }
8474   else
8475     {
8476       /* Look for the `<' that starts the template-argument-list.  */
8477       if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8478         {
8479           pop_deferring_access_checks ();
8480           return error_mark_node;
8481         }
8482       /* Parse the arguments.  */
8483       arguments = cp_parser_enclosed_template_argument_list (parser);
8484     }
8485
8486   /* Build a representation of the specialization.  */
8487   if (TREE_CODE (template) == IDENTIFIER_NODE)
8488     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8489   else if (DECL_CLASS_TEMPLATE_P (template)
8490            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8491     template_id
8492       = finish_template_type (template, arguments,
8493                               cp_lexer_next_token_is (parser->lexer,
8494                                                       CPP_SCOPE));
8495   else
8496     {
8497       /* If it's not a class-template or a template-template, it should be
8498          a function-template.  */
8499       my_friendly_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8500                            || TREE_CODE (template) == OVERLOAD
8501                            || BASELINK_P (template)),
8502                           20010716);
8503
8504       template_id = lookup_template_function (template, arguments);
8505     }
8506
8507   /* Retrieve any deferred checks.  Do not pop this access checks yet
8508      so the memory will not be reclaimed during token replacing below.  */
8509   access_check = get_deferred_access_checks ();
8510
8511   /* If parsing tentatively, replace the sequence of tokens that makes
8512      up the template-id with a CPP_TEMPLATE_ID token.  That way,
8513      should we re-parse the token stream, we will not have to repeat
8514      the effort required to do the parse, nor will we issue duplicate
8515      error messages about problems during instantiation of the
8516      template.  */
8517   if (start_of_id >= 0)
8518     {
8519       cp_token *token;
8520
8521       /* Find the token that corresponds to the start of the
8522          template-id.  */
8523       token = cp_lexer_advance_token (parser->lexer,
8524                                       parser->lexer->first_token,
8525                                       start_of_id);
8526
8527       /* Reset the contents of the START_OF_ID token.  */
8528       token->type = CPP_TEMPLATE_ID;
8529       token->value = build_tree_list (access_check, template_id);
8530       token->keyword = RID_MAX;
8531       /* Purge all subsequent tokens.  */
8532       cp_lexer_purge_tokens_after (parser->lexer, token);
8533     }
8534
8535   pop_deferring_access_checks ();
8536   return template_id;
8537 }
8538
8539 /* Parse a template-name.
8540
8541    template-name:
8542      identifier
8543
8544    The standard should actually say:
8545
8546    template-name:
8547      identifier
8548      operator-function-id
8549
8550    A defect report has been filed about this issue.
8551
8552    A conversion-function-id cannot be a template name because they cannot
8553    be part of a template-id. In fact, looking at this code:
8554
8555    a.operator K<int>()
8556
8557    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
8558    It is impossible to call a templated conversion-function-id with an
8559    explicit argument list, since the only allowed template parameter is
8560    the type to which it is converting.
8561
8562    If TEMPLATE_KEYWORD_P is true, then we have just seen the
8563    `template' keyword, in a construction like:
8564
8565      T::template f<3>()
8566
8567    In that case `f' is taken to be a template-name, even though there
8568    is no way of knowing for sure.
8569
8570    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
8571    name refers to a set of overloaded functions, at least one of which
8572    is a template, or an IDENTIFIER_NODE with the name of the template,
8573    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
8574    names are looked up inside uninstantiated templates.  */
8575
8576 static tree
8577 cp_parser_template_name (cp_parser* parser,
8578                          bool template_keyword_p,
8579                          bool check_dependency_p,
8580                          bool is_declaration,
8581                          bool *is_identifier)
8582 {
8583   tree identifier;
8584   tree decl;
8585   tree fns;
8586
8587   /* If the next token is `operator', then we have either an
8588      operator-function-id or a conversion-function-id.  */
8589   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
8590     {
8591       /* We don't know whether we're looking at an
8592          operator-function-id or a conversion-function-id.  */
8593       cp_parser_parse_tentatively (parser);
8594       /* Try an operator-function-id.  */
8595       identifier = cp_parser_operator_function_id (parser);
8596       /* If that didn't work, try a conversion-function-id.  */
8597       if (!cp_parser_parse_definitely (parser))
8598         {
8599           cp_parser_error (parser, "expected template-name");
8600           return error_mark_node;
8601         }
8602     }
8603   /* Look for the identifier.  */
8604   else
8605     identifier = cp_parser_identifier (parser);
8606
8607   /* If we didn't find an identifier, we don't have a template-id.  */
8608   if (identifier == error_mark_node)
8609     return error_mark_node;
8610
8611   /* If the name immediately followed the `template' keyword, then it
8612      is a template-name.  However, if the next token is not `<', then
8613      we do not treat it as a template-name, since it is not being used
8614      as part of a template-id.  This enables us to handle constructs
8615      like:
8616
8617        template <typename T> struct S { S(); };
8618        template <typename T> S<T>::S();
8619
8620      correctly.  We would treat `S' as a template -- if it were `S<T>'
8621      -- but we do not if there is no `<'.  */
8622
8623   if (processing_template_decl
8624       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
8625     {
8626       /* In a declaration, in a dependent context, we pretend that the
8627          "template" keyword was present in order to improve error
8628          recovery.  For example, given:
8629
8630            template <typename T> void f(T::X<int>);
8631
8632          we want to treat "X<int>" as a template-id.  */
8633       if (is_declaration
8634           && !template_keyword_p
8635           && parser->scope && TYPE_P (parser->scope)
8636           && dependent_type_p (parser->scope)
8637           /* Do not do this for dtors (or ctors), since they never
8638              need the template keyword before their name.  */
8639           && !constructor_name_p (identifier, parser->scope))
8640         {
8641           ptrdiff_t start;
8642           cp_token* token;
8643           /* Explain what went wrong.  */
8644           error ("non-template `%D' used as template", identifier);
8645           inform ("use `%T::template %D' to indicate that it is a template",
8646                   parser->scope, identifier);
8647           /* If parsing tentatively, find the location of the "<"
8648              token.  */
8649           if (cp_parser_parsing_tentatively (parser)
8650               && !cp_parser_committed_to_tentative_parse (parser))
8651             {
8652               cp_parser_simulate_error (parser);
8653               token = cp_lexer_peek_token (parser->lexer);
8654               token = cp_lexer_prev_token (parser->lexer, token);
8655               start = cp_lexer_token_difference (parser->lexer,
8656                                                  parser->lexer->first_token,
8657                                                  token);
8658             }
8659           else
8660             start = -1;
8661           /* Parse the template arguments so that we can issue error
8662              messages about them.  */
8663           cp_lexer_consume_token (parser->lexer);
8664           cp_parser_enclosed_template_argument_list (parser);
8665           /* Skip tokens until we find a good place from which to
8666              continue parsing.  */
8667           cp_parser_skip_to_closing_parenthesis (parser,
8668                                                  /*recovering=*/true,
8669                                                  /*or_comma=*/true,
8670                                                  /*consume_paren=*/false);
8671           /* If parsing tentatively, permanently remove the
8672              template argument list.  That will prevent duplicate
8673              error messages from being issued about the missing
8674              "template" keyword.  */
8675           if (start >= 0)
8676             {
8677               token = cp_lexer_advance_token (parser->lexer,
8678                                               parser->lexer->first_token,
8679                                               start);
8680               cp_lexer_purge_tokens_after (parser->lexer, token);
8681             }
8682           if (is_identifier)
8683             *is_identifier = true;
8684           return identifier;
8685         }
8686
8687       /* If the "template" keyword is present, then there is generally
8688          no point in doing name-lookup, so we just return IDENTIFIER.
8689          But, if the qualifying scope is non-dependent then we can
8690          (and must) do name-lookup normally.  */
8691       if (template_keyword_p
8692           && (!parser->scope
8693               || (TYPE_P (parser->scope)
8694                   && dependent_type_p (parser->scope))))
8695         return identifier;
8696     }
8697
8698   /* Look up the name.  */
8699   decl = cp_parser_lookup_name (parser, identifier,
8700                                 /*is_type=*/false,
8701                                 /*is_template=*/false,
8702                                 /*is_namespace=*/false,
8703                                 check_dependency_p);
8704   decl = maybe_get_template_decl_from_type_decl (decl);
8705
8706   /* If DECL is a template, then the name was a template-name.  */
8707   if (TREE_CODE (decl) == TEMPLATE_DECL)
8708     ;
8709   else
8710     {
8711       /* The standard does not explicitly indicate whether a name that
8712          names a set of overloaded declarations, some of which are
8713          templates, is a template-name.  However, such a name should
8714          be a template-name; otherwise, there is no way to form a
8715          template-id for the overloaded templates.  */
8716       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
8717       if (TREE_CODE (fns) == OVERLOAD)
8718         {
8719           tree fn;
8720
8721           for (fn = fns; fn; fn = OVL_NEXT (fn))
8722             if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
8723               break;
8724         }
8725       else
8726         {
8727           /* Otherwise, the name does not name a template.  */
8728           cp_parser_error (parser, "expected template-name");
8729           return error_mark_node;
8730         }
8731     }
8732
8733   /* If DECL is dependent, and refers to a function, then just return
8734      its name; we will look it up again during template instantiation.  */
8735   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
8736     {
8737       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
8738       if (TYPE_P (scope) && dependent_type_p (scope))
8739         return identifier;
8740     }
8741
8742   return decl;
8743 }
8744
8745 /* Parse a template-argument-list.
8746
8747    template-argument-list:
8748      template-argument
8749      template-argument-list , template-argument
8750
8751    Returns a TREE_VEC containing the arguments.  */
8752
8753 static tree
8754 cp_parser_template_argument_list (cp_parser* parser)
8755 {
8756   tree fixed_args[10];
8757   unsigned n_args = 0;
8758   unsigned alloced = 10;
8759   tree *arg_ary = fixed_args;
8760   tree vec;
8761   bool saved_in_template_argument_list_p;
8762
8763   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
8764   parser->in_template_argument_list_p = true;
8765   do
8766     {
8767       tree argument;
8768
8769       if (n_args)
8770         /* Consume the comma.  */
8771         cp_lexer_consume_token (parser->lexer);
8772
8773       /* Parse the template-argument.  */
8774       argument = cp_parser_template_argument (parser);
8775       if (n_args == alloced)
8776         {
8777           alloced *= 2;
8778
8779           if (arg_ary == fixed_args)
8780             {
8781               arg_ary = xmalloc (sizeof (tree) * alloced);
8782               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
8783             }
8784           else
8785             arg_ary = xrealloc (arg_ary, sizeof (tree) * alloced);
8786         }
8787       arg_ary[n_args++] = argument;
8788     }
8789   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
8790
8791   vec = make_tree_vec (n_args);
8792
8793   while (n_args--)
8794     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
8795
8796   if (arg_ary != fixed_args)
8797     free (arg_ary);
8798   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
8799   return vec;
8800 }
8801
8802 /* Parse a template-argument.
8803
8804    template-argument:
8805      assignment-expression
8806      type-id
8807      id-expression
8808
8809    The representation is that of an assignment-expression, type-id, or
8810    id-expression -- except that the qualified id-expression is
8811    evaluated, so that the value returned is either a DECL or an
8812    OVERLOAD.
8813
8814    Although the standard says "assignment-expression", it forbids
8815    throw-expressions or assignments in the template argument.
8816    Therefore, we use "conditional-expression" instead.  */
8817
8818 static tree
8819 cp_parser_template_argument (cp_parser* parser)
8820 {
8821   tree argument;
8822   bool template_p;
8823   bool address_p;
8824   bool maybe_type_id = false;
8825   cp_token *token;
8826   cp_id_kind idk;
8827   tree qualifying_class;
8828
8829   /* There's really no way to know what we're looking at, so we just
8830      try each alternative in order.
8831
8832        [temp.arg]
8833
8834        In a template-argument, an ambiguity between a type-id and an
8835        expression is resolved to a type-id, regardless of the form of
8836        the corresponding template-parameter.
8837
8838      Therefore, we try a type-id first.  */
8839   cp_parser_parse_tentatively (parser);
8840   argument = cp_parser_type_id (parser);
8841   /* If there was no error parsing the type-id but the next token is a '>>',
8842      we probably found a typo for '> >'. But there are type-id which are
8843      also valid expressions. For instance:
8844
8845      struct X { int operator >> (int); };
8846      template <int V> struct Foo {};
8847      Foo<X () >> 5> r;
8848
8849      Here 'X()' is a valid type-id of a function type, but the user just
8850      wanted to write the expression "X() >> 5". Thus, we remember that we
8851      found a valid type-id, but we still try to parse the argument as an
8852      expression to see what happens.  */
8853   if (!cp_parser_error_occurred (parser)
8854       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
8855     {
8856       maybe_type_id = true;
8857       cp_parser_abort_tentative_parse (parser);
8858     }
8859   else
8860     {
8861       /* If the next token isn't a `,' or a `>', then this argument wasn't
8862       really finished. This means that the argument is not a valid
8863       type-id.  */
8864       if (!cp_parser_next_token_ends_template_argument_p (parser))
8865         cp_parser_error (parser, "expected template-argument");
8866       /* If that worked, we're done.  */
8867       if (cp_parser_parse_definitely (parser))
8868         return argument;
8869     }
8870   /* We're still not sure what the argument will be.  */
8871   cp_parser_parse_tentatively (parser);
8872   /* Try a template.  */
8873   argument = cp_parser_id_expression (parser,
8874                                       /*template_keyword_p=*/false,
8875                                       /*check_dependency_p=*/true,
8876                                       &template_p,
8877                                       /*declarator_p=*/false);
8878   /* If the next token isn't a `,' or a `>', then this argument wasn't
8879      really finished.  */
8880   if (!cp_parser_next_token_ends_template_argument_p (parser))
8881     cp_parser_error (parser, "expected template-argument");
8882   if (!cp_parser_error_occurred (parser))
8883     {
8884       /* Figure out what is being referred to.  If the id-expression
8885          was for a class template specialization, then we will have a
8886          TYPE_DECL at this point.  There is no need to do name lookup
8887          at this point in that case.  */
8888       if (TREE_CODE (argument) != TYPE_DECL)
8889         argument = cp_parser_lookup_name (parser, argument,
8890                                           /*is_type=*/false,
8891                                           /*is_template=*/template_p,
8892                                           /*is_namespace=*/false,
8893                                           /*check_dependency=*/true);
8894       if (TREE_CODE (argument) != TEMPLATE_DECL
8895           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
8896         cp_parser_error (parser, "expected template-name");
8897     }
8898   if (cp_parser_parse_definitely (parser))
8899     return argument;
8900   /* It must be a non-type argument.  There permitted cases are given
8901      in [temp.arg.nontype]:
8902
8903      -- an integral constant-expression of integral or enumeration
8904         type; or
8905
8906      -- the name of a non-type template-parameter; or
8907
8908      -- the name of an object or function with external linkage...
8909
8910      -- the address of an object or function with external linkage...
8911
8912      -- a pointer to member...  */
8913   /* Look for a non-type template parameter.  */
8914   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8915     {
8916       cp_parser_parse_tentatively (parser);
8917       argument = cp_parser_primary_expression (parser,
8918                                                &idk,
8919                                                &qualifying_class);
8920       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
8921           || !cp_parser_next_token_ends_template_argument_p (parser))
8922         cp_parser_simulate_error (parser);
8923       if (cp_parser_parse_definitely (parser))
8924         return argument;
8925     }
8926   /* If the next token is "&", the argument must be the address of an
8927      object or function with external linkage.  */
8928   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
8929   if (address_p)
8930     cp_lexer_consume_token (parser->lexer);
8931   /* See if we might have an id-expression.  */
8932   token = cp_lexer_peek_token (parser->lexer);
8933   if (token->type == CPP_NAME
8934       || token->keyword == RID_OPERATOR
8935       || token->type == CPP_SCOPE
8936       || token->type == CPP_TEMPLATE_ID
8937       || token->type == CPP_NESTED_NAME_SPECIFIER)
8938     {
8939       cp_parser_parse_tentatively (parser);
8940       argument = cp_parser_primary_expression (parser,
8941                                                &idk,
8942                                                &qualifying_class);
8943       if (cp_parser_error_occurred (parser)
8944           || !cp_parser_next_token_ends_template_argument_p (parser))
8945         cp_parser_abort_tentative_parse (parser);
8946       else
8947         {
8948           if (qualifying_class)
8949             argument = finish_qualified_id_expr (qualifying_class,
8950                                                  argument,
8951                                                  /*done=*/true,
8952                                                  address_p);
8953           if (TREE_CODE (argument) == VAR_DECL)
8954             {
8955               /* A variable without external linkage might still be a
8956                  valid constant-expression, so no error is issued here
8957                  if the external-linkage check fails.  */
8958               if (!DECL_EXTERNAL_LINKAGE_P (argument))
8959                 cp_parser_simulate_error (parser);
8960             }
8961           else if (is_overloaded_fn (argument))
8962             /* All overloaded functions are allowed; if the external
8963                linkage test does not pass, an error will be issued
8964                later.  */
8965             ;
8966           else if (address_p
8967                    && (TREE_CODE (argument) == OFFSET_REF
8968                        || TREE_CODE (argument) == SCOPE_REF))
8969             /* A pointer-to-member.  */
8970             ;
8971           else
8972             cp_parser_simulate_error (parser);
8973
8974           if (cp_parser_parse_definitely (parser))
8975             {
8976               if (address_p)
8977                 argument = build_x_unary_op (ADDR_EXPR, argument);
8978               return argument;
8979             }
8980         }
8981     }
8982   /* If the argument started with "&", there are no other valid
8983      alternatives at this point.  */
8984   if (address_p)
8985     {
8986       cp_parser_error (parser, "invalid non-type template argument");
8987       return error_mark_node;
8988     }
8989   /* If the argument wasn't successfully parsed as a type-id followed
8990      by '>>', the argument can only be a constant expression now.
8991      Otherwise, we try parsing the constant-expression tentatively,
8992      because the argument could really be a type-id.  */
8993   if (maybe_type_id)
8994     cp_parser_parse_tentatively (parser);
8995   argument = cp_parser_constant_expression (parser,
8996                                             /*allow_non_constant_p=*/false,
8997                                             /*non_constant_p=*/NULL);
8998   argument = fold_non_dependent_expr (argument);
8999   if (!maybe_type_id)
9000     return argument;
9001   if (!cp_parser_next_token_ends_template_argument_p (parser))
9002     cp_parser_error (parser, "expected template-argument");
9003   if (cp_parser_parse_definitely (parser))
9004     return argument;
9005   /* We did our best to parse the argument as a non type-id, but that
9006      was the only alternative that matched (albeit with a '>' after
9007      it). We can assume it's just a typo from the user, and a
9008      diagnostic will then be issued.  */
9009   return cp_parser_type_id (parser);
9010 }
9011
9012 /* Parse an explicit-instantiation.
9013
9014    explicit-instantiation:
9015      template declaration
9016
9017    Although the standard says `declaration', what it really means is:
9018
9019    explicit-instantiation:
9020      template decl-specifier-seq [opt] declarator [opt] ;
9021
9022    Things like `template int S<int>::i = 5, int S<double>::j;' are not
9023    supposed to be allowed.  A defect report has been filed about this
9024    issue.
9025
9026    GNU Extension:
9027
9028    explicit-instantiation:
9029      storage-class-specifier template
9030        decl-specifier-seq [opt] declarator [opt] ;
9031      function-specifier template
9032        decl-specifier-seq [opt] declarator [opt] ;  */
9033
9034 static void
9035 cp_parser_explicit_instantiation (cp_parser* parser)
9036 {
9037   int declares_class_or_enum;
9038   cp_decl_specifier_seq decl_specifiers;
9039   tree extension_specifier = NULL_TREE;
9040
9041   /* Look for an (optional) storage-class-specifier or
9042      function-specifier.  */
9043   if (cp_parser_allow_gnu_extensions_p (parser))
9044     {
9045       extension_specifier
9046         = cp_parser_storage_class_specifier_opt (parser);
9047       if (!extension_specifier)
9048         extension_specifier
9049           = cp_parser_function_specifier_opt (parser,
9050                                               /*decl_specs=*/NULL);
9051     }
9052
9053   /* Look for the `template' keyword.  */
9054   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9055   /* Let the front end know that we are processing an explicit
9056      instantiation.  */
9057   begin_explicit_instantiation ();
9058   /* [temp.explicit] says that we are supposed to ignore access
9059      control while processing explicit instantiation directives.  */
9060   push_deferring_access_checks (dk_no_check);
9061   /* Parse a decl-specifier-seq.  */
9062   cp_parser_decl_specifier_seq (parser,
9063                                 CP_PARSER_FLAGS_OPTIONAL,
9064                                 &decl_specifiers,
9065                                 &declares_class_or_enum);
9066   /* If there was exactly one decl-specifier, and it declared a class,
9067      and there's no declarator, then we have an explicit type
9068      instantiation.  */
9069   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
9070     {
9071       tree type;
9072
9073       type = check_tag_decl (&decl_specifiers);
9074       /* Turn access control back on for names used during
9075          template instantiation.  */
9076       pop_deferring_access_checks ();
9077       if (type)
9078         do_type_instantiation (type, extension_specifier, /*complain=*/1);
9079     }
9080   else
9081     {
9082       cp_declarator *declarator;
9083       tree decl;
9084
9085       /* Parse the declarator.  */
9086       declarator
9087         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9088                                 /*ctor_dtor_or_conv_p=*/NULL,
9089                                 /*parenthesized_p=*/NULL);
9090       cp_parser_check_for_definition_in_return_type (declarator,
9091                                                      declares_class_or_enum);
9092       if (declarator != cp_error_declarator)
9093         {
9094           decl = grokdeclarator (declarator, &decl_specifiers,
9095                                  NORMAL, 0, NULL);
9096           /* Turn access control back on for names used during
9097              template instantiation.  */
9098           pop_deferring_access_checks ();
9099           /* Do the explicit instantiation.  */
9100           do_decl_instantiation (decl, extension_specifier);
9101         }
9102       else
9103         {
9104           pop_deferring_access_checks ();
9105           /* Skip the body of the explicit instantiation.  */
9106           cp_parser_skip_to_end_of_statement (parser);
9107         }
9108     }
9109   /* We're done with the instantiation.  */
9110   end_explicit_instantiation ();
9111
9112   cp_parser_consume_semicolon_at_end_of_statement (parser);
9113 }
9114
9115 /* Parse an explicit-specialization.
9116
9117    explicit-specialization:
9118      template < > declaration
9119
9120    Although the standard says `declaration', what it really means is:
9121
9122    explicit-specialization:
9123      template <> decl-specifier [opt] init-declarator [opt] ;
9124      template <> function-definition
9125      template <> explicit-specialization
9126      template <> template-declaration  */
9127
9128 static void
9129 cp_parser_explicit_specialization (cp_parser* parser)
9130 {
9131   /* Look for the `template' keyword.  */
9132   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9133   /* Look for the `<'.  */
9134   cp_parser_require (parser, CPP_LESS, "`<'");
9135   /* Look for the `>'.  */
9136   cp_parser_require (parser, CPP_GREATER, "`>'");
9137   /* We have processed another parameter list.  */
9138   ++parser->num_template_parameter_lists;
9139   /* Let the front end know that we are beginning a specialization.  */
9140   begin_specialization ();
9141
9142   /* If the next keyword is `template', we need to figure out whether
9143      or not we're looking a template-declaration.  */
9144   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
9145     {
9146       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
9147           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
9148         cp_parser_template_declaration_after_export (parser,
9149                                                      /*member_p=*/false);
9150       else
9151         cp_parser_explicit_specialization (parser);
9152     }
9153   else
9154     /* Parse the dependent declaration.  */
9155     cp_parser_single_declaration (parser,
9156                                   /*member_p=*/false,
9157                                   /*friend_p=*/NULL);
9158
9159   /* We're done with the specialization.  */
9160   end_specialization ();
9161   /* We're done with this parameter list.  */
9162   --parser->num_template_parameter_lists;
9163 }
9164
9165 /* Parse a type-specifier.
9166
9167    type-specifier:
9168      simple-type-specifier
9169      class-specifier
9170      enum-specifier
9171      elaborated-type-specifier
9172      cv-qualifier
9173
9174    GNU Extension:
9175
9176    type-specifier:
9177      __complex__
9178
9179    Returns a representation of the type-specifier.  For a
9180    class-specifier, enum-specifier, or elaborated-type-specifier, a
9181    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
9182
9183    If IS_FRIEND is TRUE then this type-specifier is being declared a
9184    `friend'.  If IS_DECLARATION is TRUE, then this type-specifier is
9185    appearing in a decl-specifier-seq.
9186
9187    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
9188    class-specifier, enum-specifier, or elaborated-type-specifier, then
9189    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
9190    if a type is declared; 2 if it is defined.  Otherwise, it is set to
9191    zero.
9192
9193    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
9194    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
9195    is set to FALSE.  */
9196
9197 static tree
9198 cp_parser_type_specifier (cp_parser* parser,
9199                           cp_parser_flags flags,
9200                           cp_decl_specifier_seq *decl_specs,
9201                           bool is_declaration,
9202                           int* declares_class_or_enum,
9203                           bool* is_cv_qualifier)
9204 {
9205   tree type_spec = NULL_TREE;
9206   cp_token *token;
9207   enum rid keyword;
9208   cp_decl_spec ds = ds_last;
9209
9210   /* Assume this type-specifier does not declare a new type.  */
9211   if (declares_class_or_enum)
9212     *declares_class_or_enum = 0;
9213   /* And that it does not specify a cv-qualifier.  */
9214   if (is_cv_qualifier)
9215     *is_cv_qualifier = false;
9216   /* Peek at the next token.  */
9217   token = cp_lexer_peek_token (parser->lexer);
9218
9219   /* If we're looking at a keyword, we can use that to guide the
9220      production we choose.  */
9221   keyword = token->keyword;
9222   switch (keyword)
9223     {
9224       /* Any of these indicate either a class-specifier, or an
9225          elaborated-type-specifier.  */
9226     case RID_CLASS:
9227     case RID_STRUCT:
9228     case RID_UNION:
9229     case RID_ENUM:
9230       /* Parse tentatively so that we can back up if we don't find a
9231          class-specifier or enum-specifier.  */
9232       cp_parser_parse_tentatively (parser);
9233       /* Look for the class-specifier or enum-specifier.  */
9234       if (keyword == RID_ENUM)
9235         type_spec = cp_parser_enum_specifier (parser);
9236       else
9237         type_spec = cp_parser_class_specifier (parser);
9238
9239       /* If that worked, we're done.  */
9240       if (cp_parser_parse_definitely (parser))
9241         {
9242           if (declares_class_or_enum)
9243             *declares_class_or_enum = 2;
9244           if (decl_specs)
9245             cp_parser_set_decl_spec_type (decl_specs,
9246                                           type_spec,
9247                                           /*user_defined_p=*/true);
9248           return type_spec;
9249         }
9250
9251       /* Fall through.  */
9252
9253     case RID_TYPENAME:
9254       /* Look for an elaborated-type-specifier.  */
9255       type_spec
9256         = (cp_parser_elaborated_type_specifier
9257            (parser,
9258             decl_specs && decl_specs->specs[(int) ds_friend],
9259             is_declaration));
9260       /* We're declaring a class or enum -- unless we're using
9261          `typename'.  */
9262       if (declares_class_or_enum && keyword != RID_TYPENAME)
9263         *declares_class_or_enum = 1;
9264       if (decl_specs)
9265         cp_parser_set_decl_spec_type (decl_specs,
9266                                       type_spec,
9267                                       /*user_defined_p=*/true);
9268       return type_spec;
9269
9270     case RID_CONST:
9271       ds = ds_const;
9272       if (is_cv_qualifier)
9273         *is_cv_qualifier = true;
9274       break;
9275
9276     case RID_VOLATILE:
9277       ds = ds_volatile;
9278       if (is_cv_qualifier)
9279         *is_cv_qualifier = true;
9280       break;
9281
9282     case RID_RESTRICT:
9283       ds = ds_restrict;
9284       if (is_cv_qualifier)
9285         *is_cv_qualifier = true;
9286       break;
9287
9288     case RID_COMPLEX:
9289       /* The `__complex__' keyword is a GNU extension.  */
9290       ds = ds_complex;
9291       break;
9292
9293     default:
9294       break;
9295     }
9296
9297   /* Handle simple keywords.  */
9298   if (ds != ds_last)
9299     {
9300       if (decl_specs)
9301         {
9302           ++decl_specs->specs[(int)ds];
9303           decl_specs->any_specifiers_p = true;
9304         }
9305       return cp_lexer_consume_token (parser->lexer)->value;
9306     }
9307
9308   /* If we do not already have a type-specifier, assume we are looking
9309      at a simple-type-specifier.  */
9310   type_spec = cp_parser_simple_type_specifier (parser,
9311                                                decl_specs,
9312                                                flags);
9313
9314   /* If we didn't find a type-specifier, and a type-specifier was not
9315      optional in this context, issue an error message.  */
9316   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9317     {
9318       cp_parser_error (parser, "expected type specifier");
9319       return error_mark_node;
9320     }
9321
9322   return type_spec;
9323 }
9324
9325 /* Parse a simple-type-specifier.
9326
9327    simple-type-specifier:
9328      :: [opt] nested-name-specifier [opt] type-name
9329      :: [opt] nested-name-specifier template template-id
9330      char
9331      wchar_t
9332      bool
9333      short
9334      int
9335      long
9336      signed
9337      unsigned
9338      float
9339      double
9340      void
9341
9342    GNU Extension:
9343
9344    simple-type-specifier:
9345      __typeof__ unary-expression
9346      __typeof__ ( type-id )
9347
9348    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
9349    appropriately updated.  */
9350
9351 static tree
9352 cp_parser_simple_type_specifier (cp_parser* parser,
9353                                  cp_decl_specifier_seq *decl_specs,
9354                                  cp_parser_flags flags)
9355 {
9356   tree type = NULL_TREE;
9357   cp_token *token;
9358
9359   /* Peek at the next token.  */
9360   token = cp_lexer_peek_token (parser->lexer);
9361
9362   /* If we're looking at a keyword, things are easy.  */
9363   switch (token->keyword)
9364     {
9365     case RID_CHAR:
9366       if (decl_specs)
9367         decl_specs->explicit_char_p = true;
9368       type = char_type_node;
9369       break;
9370     case RID_WCHAR:
9371       type = wchar_type_node;
9372       break;
9373     case RID_BOOL:
9374       type = boolean_type_node;
9375       break;
9376     case RID_SHORT:
9377       if (decl_specs)
9378         ++decl_specs->specs[(int) ds_short];
9379       type = short_integer_type_node;
9380       break;
9381     case RID_INT:
9382       if (decl_specs)
9383         decl_specs->explicit_int_p = true;
9384       type = integer_type_node;
9385       break;
9386     case RID_LONG:
9387       if (decl_specs)
9388         ++decl_specs->specs[(int) ds_long];
9389       type = long_integer_type_node;
9390       break;
9391     case RID_SIGNED:
9392       if (decl_specs)
9393         ++decl_specs->specs[(int) ds_signed];
9394       type = integer_type_node;
9395       break;
9396     case RID_UNSIGNED:
9397       if (decl_specs)
9398         ++decl_specs->specs[(int) ds_unsigned];
9399       type = unsigned_type_node;
9400       break;
9401     case RID_FLOAT:
9402       type = float_type_node;
9403       break;
9404     case RID_DOUBLE:
9405       type = double_type_node;
9406       break;
9407     case RID_VOID:
9408       type = void_type_node;
9409       break;
9410
9411     case RID_TYPEOF:
9412       /* Consume the `typeof' token.  */
9413       cp_lexer_consume_token (parser->lexer);
9414       /* Parse the operand to `typeof'.  */
9415       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9416       /* If it is not already a TYPE, take its type.  */
9417       if (!TYPE_P (type))
9418         type = finish_typeof (type);
9419
9420       if (decl_specs)
9421         cp_parser_set_decl_spec_type (decl_specs, type,
9422                                       /*user_defined_p=*/true);
9423
9424       return type;
9425
9426     default:
9427       break;
9428     }
9429
9430   /* If the type-specifier was for a built-in type, we're done.  */
9431   if (type)
9432     {
9433       tree id;
9434
9435       /* Record the type.  */
9436       if (decl_specs
9437           && (token->keyword != RID_SIGNED
9438               && token->keyword != RID_UNSIGNED
9439               && token->keyword != RID_SHORT
9440               && token->keyword != RID_LONG))
9441         cp_parser_set_decl_spec_type (decl_specs,
9442                                       type,
9443                                       /*user_defined=*/false);
9444       if (decl_specs)
9445         decl_specs->any_specifiers_p = true;
9446
9447       /* Consume the token.  */
9448       id = cp_lexer_consume_token (parser->lexer)->value;
9449
9450       /* There is no valid C++ program where a non-template type is
9451          followed by a "<".  That usually indicates that the user thought
9452          that the type was a template.  */
9453       cp_parser_check_for_invalid_template_id (parser, type);
9454
9455       return TYPE_NAME (type);
9456     }
9457
9458   /* The type-specifier must be a user-defined type.  */
9459   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
9460     {
9461       bool qualified_p;
9462       bool global_p;
9463
9464       /* Don't gobble tokens or issue error messages if this is an
9465          optional type-specifier.  */
9466       if (flags & CP_PARSER_FLAGS_OPTIONAL)
9467         cp_parser_parse_tentatively (parser);
9468
9469       /* Look for the optional `::' operator.  */
9470       global_p
9471         = (cp_parser_global_scope_opt (parser,
9472                                        /*current_scope_valid_p=*/false)
9473            != NULL_TREE);
9474       /* Look for the nested-name specifier.  */
9475       qualified_p
9476         = (cp_parser_nested_name_specifier_opt (parser,
9477                                                 /*typename_keyword_p=*/false,
9478                                                 /*check_dependency_p=*/true,
9479                                                 /*type_p=*/false,
9480                                                 /*is_declaration=*/false)
9481            != NULL_TREE);
9482       /* If we have seen a nested-name-specifier, and the next token
9483          is `template', then we are using the template-id production.  */
9484       if (parser->scope
9485           && cp_parser_optional_template_keyword (parser))
9486         {
9487           /* Look for the template-id.  */
9488           type = cp_parser_template_id (parser,
9489                                         /*template_keyword_p=*/true,
9490                                         /*check_dependency_p=*/true,
9491                                         /*is_declaration=*/false);
9492           /* If the template-id did not name a type, we are out of
9493              luck.  */
9494           if (TREE_CODE (type) != TYPE_DECL)
9495             {
9496               cp_parser_error (parser, "expected template-id for type");
9497               type = NULL_TREE;
9498             }
9499         }
9500       /* Otherwise, look for a type-name.  */
9501       else
9502         type = cp_parser_type_name (parser);
9503       /* Keep track of all name-lookups performed in class scopes.  */
9504       if (type
9505           && !global_p
9506           && !qualified_p
9507           && TREE_CODE (type) == TYPE_DECL
9508           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
9509         maybe_note_name_used_in_class (DECL_NAME (type), type);
9510       /* If it didn't work out, we don't have a TYPE.  */
9511       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
9512           && !cp_parser_parse_definitely (parser))
9513         type = NULL_TREE;
9514       if (type && decl_specs)
9515         cp_parser_set_decl_spec_type (decl_specs, type,
9516                                       /*user_defined=*/true);
9517     }
9518
9519   /* If we didn't get a type-name, issue an error message.  */
9520   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9521     {
9522       cp_parser_error (parser, "expected type-name");
9523       return error_mark_node;
9524     }
9525
9526   /* There is no valid C++ program where a non-template type is
9527      followed by a "<".  That usually indicates that the user thought
9528      that the type was a template.  */
9529   if (type && type != error_mark_node)
9530     cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
9531
9532   return type;
9533 }
9534
9535 /* Parse a type-name.
9536
9537    type-name:
9538      class-name
9539      enum-name
9540      typedef-name
9541
9542    enum-name:
9543      identifier
9544
9545    typedef-name:
9546      identifier
9547
9548    Returns a TYPE_DECL for the the type.  */
9549
9550 static tree
9551 cp_parser_type_name (cp_parser* parser)
9552 {
9553   tree type_decl;
9554   tree identifier;
9555
9556   /* We can't know yet whether it is a class-name or not.  */
9557   cp_parser_parse_tentatively (parser);
9558   /* Try a class-name.  */
9559   type_decl = cp_parser_class_name (parser,
9560                                     /*typename_keyword_p=*/false,
9561                                     /*template_keyword_p=*/false,
9562                                     /*type_p=*/false,
9563                                     /*check_dependency_p=*/true,
9564                                     /*class_head_p=*/false,
9565                                     /*is_declaration=*/false);
9566   /* If it's not a class-name, keep looking.  */
9567   if (!cp_parser_parse_definitely (parser))
9568     {
9569       /* It must be a typedef-name or an enum-name.  */
9570       identifier = cp_parser_identifier (parser);
9571       if (identifier == error_mark_node)
9572         return error_mark_node;
9573
9574       /* Look up the type-name.  */
9575       type_decl = cp_parser_lookup_name_simple (parser, identifier);
9576       /* Issue an error if we did not find a type-name.  */
9577       if (TREE_CODE (type_decl) != TYPE_DECL)
9578         {
9579           if (!cp_parser_simulate_error (parser))
9580             cp_parser_name_lookup_error (parser, identifier, type_decl,
9581                                          "is not a type");
9582           type_decl = error_mark_node;
9583         }
9584       /* Remember that the name was used in the definition of the
9585          current class so that we can check later to see if the
9586          meaning would have been different after the class was
9587          entirely defined.  */
9588       else if (type_decl != error_mark_node
9589                && !parser->scope)
9590         maybe_note_name_used_in_class (identifier, type_decl);
9591     }
9592
9593   return type_decl;
9594 }
9595
9596
9597 /* Parse an elaborated-type-specifier.  Note that the grammar given
9598    here incorporates the resolution to DR68.
9599
9600    elaborated-type-specifier:
9601      class-key :: [opt] nested-name-specifier [opt] identifier
9602      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
9603      enum :: [opt] nested-name-specifier [opt] identifier
9604      typename :: [opt] nested-name-specifier identifier
9605      typename :: [opt] nested-name-specifier template [opt]
9606        template-id
9607
9608    GNU extension:
9609
9610    elaborated-type-specifier:
9611      class-key attributes :: [opt] nested-name-specifier [opt] identifier
9612      class-key attributes :: [opt] nested-name-specifier [opt]
9613                template [opt] template-id
9614      enum attributes :: [opt] nested-name-specifier [opt] identifier
9615
9616    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
9617    declared `friend'.  If IS_DECLARATION is TRUE, then this
9618    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
9619    something is being declared.
9620
9621    Returns the TYPE specified.  */
9622
9623 static tree
9624 cp_parser_elaborated_type_specifier (cp_parser* parser,
9625                                      bool is_friend,
9626                                      bool is_declaration)
9627 {
9628   enum tag_types tag_type;
9629   tree identifier;
9630   tree type = NULL_TREE;
9631   tree attributes = NULL_TREE;
9632
9633   /* See if we're looking at the `enum' keyword.  */
9634   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
9635     {
9636       /* Consume the `enum' token.  */
9637       cp_lexer_consume_token (parser->lexer);
9638       /* Remember that it's an enumeration type.  */
9639       tag_type = enum_type;
9640       /* Parse the attributes.  */
9641       attributes = cp_parser_attributes_opt (parser);
9642     }
9643   /* Or, it might be `typename'.  */
9644   else if (cp_lexer_next_token_is_keyword (parser->lexer,
9645                                            RID_TYPENAME))
9646     {
9647       /* Consume the `typename' token.  */
9648       cp_lexer_consume_token (parser->lexer);
9649       /* Remember that it's a `typename' type.  */
9650       tag_type = typename_type;
9651       /* The `typename' keyword is only allowed in templates.  */
9652       if (!processing_template_decl)
9653         pedwarn ("using `typename' outside of template");
9654     }
9655   /* Otherwise it must be a class-key.  */
9656   else
9657     {
9658       tag_type = cp_parser_class_key (parser);
9659       if (tag_type == none_type)
9660         return error_mark_node;
9661       /* Parse the attributes.  */
9662       attributes = cp_parser_attributes_opt (parser);
9663     }
9664
9665   /* Look for the `::' operator.  */
9666   cp_parser_global_scope_opt (parser,
9667                               /*current_scope_valid_p=*/false);
9668   /* Look for the nested-name-specifier.  */
9669   if (tag_type == typename_type)
9670     {
9671       if (cp_parser_nested_name_specifier (parser,
9672                                            /*typename_keyword_p=*/true,
9673                                            /*check_dependency_p=*/true,
9674                                            /*type_p=*/true,
9675                                            is_declaration)
9676           == error_mark_node)
9677         return error_mark_node;
9678     }
9679   else
9680     /* Even though `typename' is not present, the proposed resolution
9681        to Core Issue 180 says that in `class A<T>::B', `B' should be
9682        considered a type-name, even if `A<T>' is dependent.  */
9683     cp_parser_nested_name_specifier_opt (parser,
9684                                          /*typename_keyword_p=*/true,
9685                                          /*check_dependency_p=*/true,
9686                                          /*type_p=*/true,
9687                                          is_declaration);
9688   /* For everything but enumeration types, consider a template-id.  */
9689   if (tag_type != enum_type)
9690     {
9691       bool template_p = false;
9692       tree decl;
9693
9694       /* Allow the `template' keyword.  */
9695       template_p = cp_parser_optional_template_keyword (parser);
9696       /* If we didn't see `template', we don't know if there's a
9697          template-id or not.  */
9698       if (!template_p)
9699         cp_parser_parse_tentatively (parser);
9700       /* Parse the template-id.  */
9701       decl = cp_parser_template_id (parser, template_p,
9702                                     /*check_dependency_p=*/true,
9703                                     is_declaration);
9704       /* If we didn't find a template-id, look for an ordinary
9705          identifier.  */
9706       if (!template_p && !cp_parser_parse_definitely (parser))
9707         ;
9708       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
9709          in effect, then we must assume that, upon instantiation, the
9710          template will correspond to a class.  */
9711       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
9712                && tag_type == typename_type)
9713         type = make_typename_type (parser->scope, decl,
9714                                    /*complain=*/1);
9715       else
9716         type = TREE_TYPE (decl);
9717     }
9718
9719   /* For an enumeration type, consider only a plain identifier.  */
9720   if (!type)
9721     {
9722       identifier = cp_parser_identifier (parser);
9723
9724       if (identifier == error_mark_node)
9725         {
9726           parser->scope = NULL_TREE;
9727           return error_mark_node;
9728         }
9729
9730       /* For a `typename', we needn't call xref_tag.  */
9731       if (tag_type == typename_type)
9732         return cp_parser_make_typename_type (parser, parser->scope,
9733                                              identifier);
9734       /* Look up a qualified name in the usual way.  */
9735       if (parser->scope)
9736         {
9737           tree decl;
9738
9739           /* In an elaborated-type-specifier, names are assumed to name
9740              types, so we set IS_TYPE to TRUE when calling
9741              cp_parser_lookup_name.  */
9742           decl = cp_parser_lookup_name (parser, identifier,
9743                                         /*is_type=*/true,
9744                                         /*is_template=*/false,
9745                                         /*is_namespace=*/false,
9746                                         /*check_dependency=*/true);
9747
9748           /* If we are parsing friend declaration, DECL may be a
9749              TEMPLATE_DECL tree node here.  However, we need to check
9750              whether this TEMPLATE_DECL results in valid code.  Consider
9751              the following example:
9752
9753                namespace N {
9754                  template <class T> class C {};
9755                }
9756                class X {
9757                  template <class T> friend class N::C; // #1, valid code
9758                };
9759                template <class T> class Y {
9760                  friend class N::C;                    // #2, invalid code
9761                };
9762
9763              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
9764              name lookup of `N::C'.  We see that friend declaration must
9765              be template for the code to be valid.  Note that
9766              processing_template_decl does not work here since it is
9767              always 1 for the above two cases.  */
9768
9769           decl = (cp_parser_maybe_treat_template_as_class
9770                   (decl, /*tag_name_p=*/is_friend
9771                          && parser->num_template_parameter_lists));
9772
9773           if (TREE_CODE (decl) != TYPE_DECL)
9774             {
9775               error ("expected type-name");
9776               return error_mark_node;
9777             }
9778
9779           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
9780             check_elaborated_type_specifier
9781               (tag_type, decl,
9782                (parser->num_template_parameter_lists
9783                 || DECL_SELF_REFERENCE_P (decl)));
9784
9785           type = TREE_TYPE (decl);
9786         }
9787       else
9788         {
9789           /* An elaborated-type-specifier sometimes introduces a new type and
9790              sometimes names an existing type.  Normally, the rule is that it
9791              introduces a new type only if there is not an existing type of
9792              the same name already in scope.  For example, given:
9793
9794                struct S {};
9795                void f() { struct S s; }
9796
9797              the `struct S' in the body of `f' is the same `struct S' as in
9798              the global scope; the existing definition is used.  However, if
9799              there were no global declaration, this would introduce a new
9800              local class named `S'.
9801
9802              An exception to this rule applies to the following code:
9803
9804                namespace N { struct S; }
9805
9806              Here, the elaborated-type-specifier names a new type
9807              unconditionally; even if there is already an `S' in the
9808              containing scope this declaration names a new type.
9809              This exception only applies if the elaborated-type-specifier
9810              forms the complete declaration:
9811
9812                [class.name]
9813
9814                A declaration consisting solely of `class-key identifier ;' is
9815                either a redeclaration of the name in the current scope or a
9816                forward declaration of the identifier as a class name.  It
9817                introduces the name into the current scope.
9818
9819              We are in this situation precisely when the next token is a `;'.
9820
9821              An exception to the exception is that a `friend' declaration does
9822              *not* name a new type; i.e., given:
9823
9824                struct S { friend struct T; };
9825
9826              `T' is not a new type in the scope of `S'.
9827
9828              Also, `new struct S' or `sizeof (struct S)' never results in the
9829              definition of a new type; a new type can only be declared in a
9830              declaration context.  */
9831
9832           /* Warn about attributes. They are ignored.  */
9833           if (attributes)
9834             warning ("type attributes are honored only at type definition");
9835
9836           type = xref_tag (tag_type, identifier,
9837                            (is_friend
9838                             || !is_declaration
9839                             || cp_lexer_next_token_is_not (parser->lexer,
9840                                                            CPP_SEMICOLON)),
9841                            parser->num_template_parameter_lists);
9842         }
9843     }
9844   if (tag_type != enum_type)
9845     cp_parser_check_class_key (tag_type, type);
9846
9847   /* A "<" cannot follow an elaborated type specifier.  If that
9848      happens, the user was probably trying to form a template-id.  */
9849   cp_parser_check_for_invalid_template_id (parser, type);
9850
9851   return type;
9852 }
9853
9854 /* Parse an enum-specifier.
9855
9856    enum-specifier:
9857      enum identifier [opt] { enumerator-list [opt] }
9858
9859    Returns an ENUM_TYPE representing the enumeration.  */
9860
9861 static tree
9862 cp_parser_enum_specifier (cp_parser* parser)
9863 {
9864   cp_token *token;
9865   tree identifier = NULL_TREE;
9866   tree type;
9867
9868   /* Look for the `enum' keyword.  */
9869   if (!cp_parser_require_keyword (parser, RID_ENUM, "`enum'"))
9870     return error_mark_node;
9871   /* Peek at the next token.  */
9872   token = cp_lexer_peek_token (parser->lexer);
9873
9874   /* See if it is an identifier.  */
9875   if (token->type == CPP_NAME)
9876     identifier = cp_parser_identifier (parser);
9877
9878   /* Look for the `{'.  */
9879   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
9880     return error_mark_node;
9881
9882   /* At this point, we're going ahead with the enum-specifier, even
9883      if some other problem occurs.  */
9884   cp_parser_commit_to_tentative_parse (parser);
9885
9886   /* Issue an error message if type-definitions are forbidden here.  */
9887   cp_parser_check_type_definition (parser);
9888
9889   /* Create the new type.  */
9890   type = start_enum (identifier ? identifier : make_anon_name ());
9891
9892   /* Peek at the next token.  */
9893   token = cp_lexer_peek_token (parser->lexer);
9894   /* If it's not a `}', then there are some enumerators.  */
9895   if (token->type != CPP_CLOSE_BRACE)
9896     cp_parser_enumerator_list (parser, type);
9897   /* Look for the `}'.  */
9898   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
9899
9900   /* Finish up the enumeration.  */
9901   finish_enum (type);
9902
9903   return type;
9904 }
9905
9906 /* Parse an enumerator-list.  The enumerators all have the indicated
9907    TYPE.
9908
9909    enumerator-list:
9910      enumerator-definition
9911      enumerator-list , enumerator-definition  */
9912
9913 static void
9914 cp_parser_enumerator_list (cp_parser* parser, tree type)
9915 {
9916   while (true)
9917     {
9918       cp_token *token;
9919
9920       /* Parse an enumerator-definition.  */
9921       cp_parser_enumerator_definition (parser, type);
9922       /* Peek at the next token.  */
9923       token = cp_lexer_peek_token (parser->lexer);
9924       /* If it's not a `,', then we've reached the end of the
9925          list.  */
9926       if (token->type != CPP_COMMA)
9927         break;
9928       /* Otherwise, consume the `,' and keep going.  */
9929       cp_lexer_consume_token (parser->lexer);
9930       /* If the next token is a `}', there is a trailing comma.  */
9931       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
9932         {
9933           if (pedantic && !in_system_header)
9934             pedwarn ("comma at end of enumerator list");
9935           break;
9936         }
9937     }
9938 }
9939
9940 /* Parse an enumerator-definition.  The enumerator has the indicated
9941    TYPE.
9942
9943    enumerator-definition:
9944      enumerator
9945      enumerator = constant-expression
9946
9947    enumerator:
9948      identifier  */
9949
9950 static void
9951 cp_parser_enumerator_definition (cp_parser* parser, tree type)
9952 {
9953   cp_token *token;
9954   tree identifier;
9955   tree value;
9956
9957   /* Look for the identifier.  */
9958   identifier = cp_parser_identifier (parser);
9959   if (identifier == error_mark_node)
9960     return;
9961
9962   /* Peek at the next token.  */
9963   token = cp_lexer_peek_token (parser->lexer);
9964   /* If it's an `=', then there's an explicit value.  */
9965   if (token->type == CPP_EQ)
9966     {
9967       /* Consume the `=' token.  */
9968       cp_lexer_consume_token (parser->lexer);
9969       /* Parse the value.  */
9970       value = cp_parser_constant_expression (parser,
9971                                              /*allow_non_constant_p=*/false,
9972                                              NULL);
9973     }
9974   else
9975     value = NULL_TREE;
9976
9977   /* Create the enumerator.  */
9978   build_enumerator (identifier, value, type);
9979 }
9980
9981 /* Parse a namespace-name.
9982
9983    namespace-name:
9984      original-namespace-name
9985      namespace-alias
9986
9987    Returns the NAMESPACE_DECL for the namespace.  */
9988
9989 static tree
9990 cp_parser_namespace_name (cp_parser* parser)
9991 {
9992   tree identifier;
9993   tree namespace_decl;
9994
9995   /* Get the name of the namespace.  */
9996   identifier = cp_parser_identifier (parser);
9997   if (identifier == error_mark_node)
9998     return error_mark_node;
9999
10000   /* Look up the identifier in the currently active scope.  Look only
10001      for namespaces, due to:
10002
10003        [basic.lookup.udir]
10004
10005        When looking up a namespace-name in a using-directive or alias
10006        definition, only namespace names are considered.
10007
10008      And:
10009
10010        [basic.lookup.qual]
10011
10012        During the lookup of a name preceding the :: scope resolution
10013        operator, object, function, and enumerator names are ignored.
10014
10015      (Note that cp_parser_class_or_namespace_name only calls this
10016      function if the token after the name is the scope resolution
10017      operator.)  */
10018   namespace_decl = cp_parser_lookup_name (parser, identifier,
10019                                           /*is_type=*/false,
10020                                           /*is_template=*/false,
10021                                           /*is_namespace=*/true,
10022                                           /*check_dependency=*/true);
10023   /* If it's not a namespace, issue an error.  */
10024   if (namespace_decl == error_mark_node
10025       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
10026     {
10027       cp_parser_error (parser, "expected namespace-name");
10028       namespace_decl = error_mark_node;
10029     }
10030
10031   return namespace_decl;
10032 }
10033
10034 /* Parse a namespace-definition.
10035
10036    namespace-definition:
10037      named-namespace-definition
10038      unnamed-namespace-definition
10039
10040    named-namespace-definition:
10041      original-namespace-definition
10042      extension-namespace-definition
10043
10044    original-namespace-definition:
10045      namespace identifier { namespace-body }
10046
10047    extension-namespace-definition:
10048      namespace original-namespace-name { namespace-body }
10049
10050    unnamed-namespace-definition:
10051      namespace { namespace-body } */
10052
10053 static void
10054 cp_parser_namespace_definition (cp_parser* parser)
10055 {
10056   tree identifier;
10057
10058   /* Look for the `namespace' keyword.  */
10059   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10060
10061   /* Get the name of the namespace.  We do not attempt to distinguish
10062      between an original-namespace-definition and an
10063      extension-namespace-definition at this point.  The semantic
10064      analysis routines are responsible for that.  */
10065   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10066     identifier = cp_parser_identifier (parser);
10067   else
10068     identifier = NULL_TREE;
10069
10070   /* Look for the `{' to start the namespace.  */
10071   cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
10072   /* Start the namespace.  */
10073   push_namespace (identifier);
10074   /* Parse the body of the namespace.  */
10075   cp_parser_namespace_body (parser);
10076   /* Finish the namespace.  */
10077   pop_namespace ();
10078   /* Look for the final `}'.  */
10079   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10080 }
10081
10082 /* Parse a namespace-body.
10083
10084    namespace-body:
10085      declaration-seq [opt]  */
10086
10087 static void
10088 cp_parser_namespace_body (cp_parser* parser)
10089 {
10090   cp_parser_declaration_seq_opt (parser);
10091 }
10092
10093 /* Parse a namespace-alias-definition.
10094
10095    namespace-alias-definition:
10096      namespace identifier = qualified-namespace-specifier ;  */
10097
10098 static void
10099 cp_parser_namespace_alias_definition (cp_parser* parser)
10100 {
10101   tree identifier;
10102   tree namespace_specifier;
10103
10104   /* Look for the `namespace' keyword.  */
10105   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10106   /* Look for the identifier.  */
10107   identifier = cp_parser_identifier (parser);
10108   if (identifier == error_mark_node)
10109     return;
10110   /* Look for the `=' token.  */
10111   cp_parser_require (parser, CPP_EQ, "`='");
10112   /* Look for the qualified-namespace-specifier.  */
10113   namespace_specifier
10114     = cp_parser_qualified_namespace_specifier (parser);
10115   /* Look for the `;' token.  */
10116   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10117
10118   /* Register the alias in the symbol table.  */
10119   do_namespace_alias (identifier, namespace_specifier);
10120 }
10121
10122 /* Parse a qualified-namespace-specifier.
10123
10124    qualified-namespace-specifier:
10125      :: [opt] nested-name-specifier [opt] namespace-name
10126
10127    Returns a NAMESPACE_DECL corresponding to the specified
10128    namespace.  */
10129
10130 static tree
10131 cp_parser_qualified_namespace_specifier (cp_parser* parser)
10132 {
10133   /* Look for the optional `::'.  */
10134   cp_parser_global_scope_opt (parser,
10135                               /*current_scope_valid_p=*/false);
10136
10137   /* Look for the optional nested-name-specifier.  */
10138   cp_parser_nested_name_specifier_opt (parser,
10139                                        /*typename_keyword_p=*/false,
10140                                        /*check_dependency_p=*/true,
10141                                        /*type_p=*/false,
10142                                        /*is_declaration=*/true);
10143
10144   return cp_parser_namespace_name (parser);
10145 }
10146
10147 /* Parse a using-declaration.
10148
10149    using-declaration:
10150      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
10151      using :: unqualified-id ;  */
10152
10153 static void
10154 cp_parser_using_declaration (cp_parser* parser)
10155 {
10156   cp_token *token;
10157   bool typename_p = false;
10158   bool global_scope_p;
10159   tree decl;
10160   tree identifier;
10161   tree scope;
10162   tree qscope;
10163
10164   /* Look for the `using' keyword.  */
10165   cp_parser_require_keyword (parser, RID_USING, "`using'");
10166
10167   /* Peek at the next token.  */
10168   token = cp_lexer_peek_token (parser->lexer);
10169   /* See if it's `typename'.  */
10170   if (token->keyword == RID_TYPENAME)
10171     {
10172       /* Remember that we've seen it.  */
10173       typename_p = true;
10174       /* Consume the `typename' token.  */
10175       cp_lexer_consume_token (parser->lexer);
10176     }
10177
10178   /* Look for the optional global scope qualification.  */
10179   global_scope_p
10180     = (cp_parser_global_scope_opt (parser,
10181                                    /*current_scope_valid_p=*/false)
10182        != NULL_TREE);
10183
10184   /* If we saw `typename', or didn't see `::', then there must be a
10185      nested-name-specifier present.  */
10186   if (typename_p || !global_scope_p)
10187     qscope = cp_parser_nested_name_specifier (parser, typename_p,
10188                                               /*check_dependency_p=*/true,
10189                                               /*type_p=*/false,
10190                                               /*is_declaration=*/true);
10191   /* Otherwise, we could be in either of the two productions.  In that
10192      case, treat the nested-name-specifier as optional.  */
10193   else
10194     qscope = cp_parser_nested_name_specifier_opt (parser,
10195                                                   /*typename_keyword_p=*/false,
10196                                                   /*check_dependency_p=*/true,
10197                                                   /*type_p=*/false,
10198                                                   /*is_declaration=*/true);
10199   if (!qscope)
10200     qscope = global_namespace;
10201
10202   /* Parse the unqualified-id.  */
10203   identifier = cp_parser_unqualified_id (parser,
10204                                          /*template_keyword_p=*/false,
10205                                          /*check_dependency_p=*/true,
10206                                          /*declarator_p=*/true);
10207
10208   /* The function we call to handle a using-declaration is different
10209      depending on what scope we are in.  */
10210   if (identifier == error_mark_node)
10211     ;
10212   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
10213            && TREE_CODE (identifier) != BIT_NOT_EXPR)
10214     /* [namespace.udecl]
10215
10216        A using declaration shall not name a template-id.  */
10217     error ("a template-id may not appear in a using-declaration");
10218   else
10219     {
10220       scope = current_scope ();
10221       if (scope && TYPE_P (scope))
10222         {
10223           /* Create the USING_DECL.  */
10224           decl = do_class_using_decl (build_nt (SCOPE_REF,
10225                                                 parser->scope,
10226                                                 identifier));
10227           /* Add it to the list of members in this class.  */
10228           finish_member_declaration (decl);
10229         }
10230       else
10231         {
10232           decl = cp_parser_lookup_name_simple (parser, identifier);
10233           if (decl == error_mark_node)
10234             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
10235           else if (scope)
10236             do_local_using_decl (decl, qscope, identifier);
10237           else
10238             do_toplevel_using_decl (decl, qscope, identifier);
10239         }
10240     }
10241
10242   /* Look for the final `;'.  */
10243   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10244 }
10245
10246 /* Parse a using-directive.
10247
10248    using-directive:
10249      using namespace :: [opt] nested-name-specifier [opt]
10250        namespace-name ;  */
10251
10252 static void
10253 cp_parser_using_directive (cp_parser* parser)
10254 {
10255   tree namespace_decl;
10256   tree attribs;
10257
10258   /* Look for the `using' keyword.  */
10259   cp_parser_require_keyword (parser, RID_USING, "`using'");
10260   /* And the `namespace' keyword.  */
10261   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10262   /* Look for the optional `::' operator.  */
10263   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
10264   /* And the optional nested-name-specifier.  */
10265   cp_parser_nested_name_specifier_opt (parser,
10266                                        /*typename_keyword_p=*/false,
10267                                        /*check_dependency_p=*/true,
10268                                        /*type_p=*/false,
10269                                        /*is_declaration=*/true);
10270   /* Get the namespace being used.  */
10271   namespace_decl = cp_parser_namespace_name (parser);
10272   /* And any specified attributes.  */
10273   attribs = cp_parser_attributes_opt (parser);
10274   /* Update the symbol table.  */
10275   parse_using_directive (namespace_decl, attribs);
10276   /* Look for the final `;'.  */
10277   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10278 }
10279
10280 /* Parse an asm-definition.
10281
10282    asm-definition:
10283      asm ( string-literal ) ;
10284
10285    GNU Extension:
10286
10287    asm-definition:
10288      asm volatile [opt] ( string-literal ) ;
10289      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
10290      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10291                           : asm-operand-list [opt] ) ;
10292      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10293                           : asm-operand-list [opt]
10294                           : asm-operand-list [opt] ) ;  */
10295
10296 static void
10297 cp_parser_asm_definition (cp_parser* parser)
10298 {
10299   cp_token *token;
10300   tree string;
10301   tree outputs = NULL_TREE;
10302   tree inputs = NULL_TREE;
10303   tree clobbers = NULL_TREE;
10304   tree asm_stmt;
10305   bool volatile_p = false;
10306   bool extended_p = false;
10307
10308   /* Look for the `asm' keyword.  */
10309   cp_parser_require_keyword (parser, RID_ASM, "`asm'");
10310   /* See if the next token is `volatile'.  */
10311   if (cp_parser_allow_gnu_extensions_p (parser)
10312       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
10313     {
10314       /* Remember that we saw the `volatile' keyword.  */
10315       volatile_p = true;
10316       /* Consume the token.  */
10317       cp_lexer_consume_token (parser->lexer);
10318     }
10319   /* Look for the opening `('.  */
10320   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
10321   /* Look for the string.  */
10322   c_lex_string_translate = 0;
10323   token = cp_parser_require (parser, CPP_STRING, "asm body");
10324   if (!token)
10325     goto finish;
10326   string = token->value;
10327   /* If we're allowing GNU extensions, check for the extended assembly
10328      syntax.  Unfortunately, the `:' tokens need not be separated by
10329      a space in C, and so, for compatibility, we tolerate that here
10330      too.  Doing that means that we have to treat the `::' operator as
10331      two `:' tokens.  */
10332   if (cp_parser_allow_gnu_extensions_p (parser)
10333       && at_function_scope_p ()
10334       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
10335           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
10336     {
10337       bool inputs_p = false;
10338       bool clobbers_p = false;
10339
10340       /* The extended syntax was used.  */
10341       extended_p = true;
10342
10343       /* Look for outputs.  */
10344       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10345         {
10346           /* Consume the `:'.  */
10347           cp_lexer_consume_token (parser->lexer);
10348           /* Parse the output-operands.  */
10349           if (cp_lexer_next_token_is_not (parser->lexer,
10350                                           CPP_COLON)
10351               && cp_lexer_next_token_is_not (parser->lexer,
10352                                              CPP_SCOPE)
10353               && cp_lexer_next_token_is_not (parser->lexer,
10354                                              CPP_CLOSE_PAREN))
10355             outputs = cp_parser_asm_operand_list (parser);
10356         }
10357       /* If the next token is `::', there are no outputs, and the
10358          next token is the beginning of the inputs.  */
10359       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10360         {
10361           /* Consume the `::' token.  */
10362           cp_lexer_consume_token (parser->lexer);
10363           /* The inputs are coming next.  */
10364           inputs_p = true;
10365         }
10366
10367       /* Look for inputs.  */
10368       if (inputs_p
10369           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10370         {
10371           if (!inputs_p)
10372             /* Consume the `:'.  */
10373             cp_lexer_consume_token (parser->lexer);
10374           /* Parse the output-operands.  */
10375           if (cp_lexer_next_token_is_not (parser->lexer,
10376                                           CPP_COLON)
10377               && cp_lexer_next_token_is_not (parser->lexer,
10378                                              CPP_SCOPE)
10379               && cp_lexer_next_token_is_not (parser->lexer,
10380                                              CPP_CLOSE_PAREN))
10381             inputs = cp_parser_asm_operand_list (parser);
10382         }
10383       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10384         /* The clobbers are coming next.  */
10385         clobbers_p = true;
10386
10387       /* Look for clobbers.  */
10388       if (clobbers_p
10389           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10390         {
10391           if (!clobbers_p)
10392             /* Consume the `:'.  */
10393             cp_lexer_consume_token (parser->lexer);
10394           /* Parse the clobbers.  */
10395           if (cp_lexer_next_token_is_not (parser->lexer,
10396                                           CPP_CLOSE_PAREN))
10397             clobbers = cp_parser_asm_clobber_list (parser);
10398         }
10399     }
10400   /* Look for the closing `)'.  */
10401   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
10402     cp_parser_skip_to_closing_parenthesis (parser, true, false,
10403                                            /*consume_paren=*/true);
10404   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10405
10406   /* Create the ASM_EXPR.  */
10407   if (at_function_scope_p ())
10408     {
10409       asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
10410                                   inputs, clobbers);
10411       /* If the extended syntax was not used, mark the ASM_EXPR.  */
10412       if (!extended_p)
10413         ASM_INPUT_P (asm_stmt) = 1;
10414     }
10415   else
10416     assemble_asm (string);
10417
10418  finish:
10419   c_lex_string_translate = 1;
10420 }
10421
10422 /* Declarators [gram.dcl.decl] */
10423
10424 /* Parse an init-declarator.
10425
10426    init-declarator:
10427      declarator initializer [opt]
10428
10429    GNU Extension:
10430
10431    init-declarator:
10432      declarator asm-specification [opt] attributes [opt] initializer [opt]
10433
10434    function-definition:
10435      decl-specifier-seq [opt] declarator ctor-initializer [opt]
10436        function-body
10437      decl-specifier-seq [opt] declarator function-try-block
10438
10439    GNU Extension:
10440
10441    function-definition:
10442      __extension__ function-definition
10443
10444    The DECL_SPECIFIERS and PREFIX_ATTRIBUTES apply to this declarator.
10445    Returns a representation of the entity declared.  If MEMBER_P is TRUE,
10446    then this declarator appears in a class scope.  The new DECL created
10447    by this declarator is returned.
10448
10449    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
10450    for a function-definition here as well.  If the declarator is a
10451    declarator for a function-definition, *FUNCTION_DEFINITION_P will
10452    be TRUE upon return.  By that point, the function-definition will
10453    have been completely parsed.
10454
10455    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
10456    is FALSE.  */
10457
10458 static tree
10459 cp_parser_init_declarator (cp_parser* parser,
10460                            cp_decl_specifier_seq *decl_specifiers,
10461                            bool function_definition_allowed_p,
10462                            bool member_p,
10463                            int declares_class_or_enum,
10464                            bool* function_definition_p)
10465 {
10466   cp_token *token;
10467   cp_declarator *declarator;
10468   tree prefix_attributes;
10469   tree attributes;
10470   tree asm_specification;
10471   tree initializer;
10472   tree decl = NULL_TREE;
10473   tree scope;
10474   bool is_initialized;
10475   bool is_parenthesized_init;
10476   bool is_non_constant_init;
10477   int ctor_dtor_or_conv_p;
10478   bool friend_p;
10479   bool pop_p = false;
10480
10481   /* Gather the attributes that were provided with the
10482      decl-specifiers.  */
10483   prefix_attributes = decl_specifiers->attributes;
10484
10485   /* Assume that this is not the declarator for a function
10486      definition.  */
10487   if (function_definition_p)
10488     *function_definition_p = false;
10489
10490   /* Defer access checks while parsing the declarator; we cannot know
10491      what names are accessible until we know what is being
10492      declared.  */
10493   resume_deferring_access_checks ();
10494
10495   /* Parse the declarator.  */
10496   declarator
10497     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10498                             &ctor_dtor_or_conv_p,
10499                             /*parenthesized_p=*/NULL);
10500   /* Gather up the deferred checks.  */
10501   stop_deferring_access_checks ();
10502
10503   /* If the DECLARATOR was erroneous, there's no need to go
10504      further.  */
10505   if (declarator == cp_error_declarator)
10506     return error_mark_node;
10507
10508   cp_parser_check_for_definition_in_return_type (declarator,
10509                                                  declares_class_or_enum);
10510
10511   /* Figure out what scope the entity declared by the DECLARATOR is
10512      located in.  `grokdeclarator' sometimes changes the scope, so
10513      we compute it now.  */
10514   scope = get_scope_of_declarator (declarator);
10515
10516   /* If we're allowing GNU extensions, look for an asm-specification
10517      and attributes.  */
10518   if (cp_parser_allow_gnu_extensions_p (parser))
10519     {
10520       /* Look for an asm-specification.  */
10521       asm_specification = cp_parser_asm_specification_opt (parser);
10522       /* And attributes.  */
10523       attributes = cp_parser_attributes_opt (parser);
10524     }
10525   else
10526     {
10527       asm_specification = NULL_TREE;
10528       attributes = NULL_TREE;
10529     }
10530
10531   /* Peek at the next token.  */
10532   token = cp_lexer_peek_token (parser->lexer);
10533   /* Check to see if the token indicates the start of a
10534      function-definition.  */
10535   if (cp_parser_token_starts_function_definition_p (token))
10536     {
10537       if (!function_definition_allowed_p)
10538         {
10539           /* If a function-definition should not appear here, issue an
10540              error message.  */
10541           cp_parser_error (parser,
10542                            "a function-definition is not allowed here");
10543           return error_mark_node;
10544         }
10545       else
10546         {
10547           /* Neither attributes nor an asm-specification are allowed
10548              on a function-definition.  */
10549           if (asm_specification)
10550             error ("an asm-specification is not allowed on a function-definition");
10551           if (attributes)
10552             error ("attributes are not allowed on a function-definition");
10553           /* This is a function-definition.  */
10554           *function_definition_p = true;
10555
10556           /* Parse the function definition.  */
10557           if (member_p)
10558             decl = cp_parser_save_member_function_body (parser,
10559                                                         decl_specifiers,
10560                                                         declarator,
10561                                                         prefix_attributes);
10562           else
10563             decl
10564               = (cp_parser_function_definition_from_specifiers_and_declarator
10565                  (parser, decl_specifiers, prefix_attributes, declarator));
10566
10567           return decl;
10568         }
10569     }
10570
10571   /* [dcl.dcl]
10572
10573      Only in function declarations for constructors, destructors, and
10574      type conversions can the decl-specifier-seq be omitted.
10575
10576      We explicitly postpone this check past the point where we handle
10577      function-definitions because we tolerate function-definitions
10578      that are missing their return types in some modes.  */
10579   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
10580     {
10581       cp_parser_error (parser,
10582                        "expected constructor, destructor, or type conversion");
10583       return error_mark_node;
10584     }
10585
10586   /* An `=' or an `(' indicates an initializer.  */
10587   is_initialized = (token->type == CPP_EQ
10588                      || token->type == CPP_OPEN_PAREN);
10589   /* If the init-declarator isn't initialized and isn't followed by a
10590      `,' or `;', it's not a valid init-declarator.  */
10591   if (!is_initialized
10592       && token->type != CPP_COMMA
10593       && token->type != CPP_SEMICOLON)
10594     {
10595       cp_parser_error (parser, "expected init-declarator");
10596       return error_mark_node;
10597     }
10598
10599   /* Because start_decl has side-effects, we should only call it if we
10600      know we're going ahead.  By this point, we know that we cannot
10601      possibly be looking at any other construct.  */
10602   cp_parser_commit_to_tentative_parse (parser);
10603
10604   /* If the decl specifiers were bad, issue an error now that we're
10605      sure this was intended to be a declarator.  Then continue
10606      declaring the variable(s), as int, to try to cut down on further
10607      errors.  */
10608   if (decl_specifiers->any_specifiers_p
10609       && decl_specifiers->type == error_mark_node)
10610     {
10611       cp_parser_error (parser, "invalid type in declaration");
10612       decl_specifiers->type = integer_type_node;
10613     }
10614
10615   /* Check to see whether or not this declaration is a friend.  */
10616   friend_p = cp_parser_friend_p (decl_specifiers);
10617
10618   /* Check that the number of template-parameter-lists is OK.  */
10619   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
10620     return error_mark_node;
10621
10622   /* Enter the newly declared entry in the symbol table.  If we're
10623      processing a declaration in a class-specifier, we wait until
10624      after processing the initializer.  */
10625   if (!member_p)
10626     {
10627       if (parser->in_unbraced_linkage_specification_p)
10628         {
10629           decl_specifiers->storage_class = sc_extern;
10630           have_extern_spec = false;
10631         }
10632       decl = start_decl (declarator, decl_specifiers,
10633                          is_initialized, attributes, prefix_attributes);
10634     }
10635
10636   /* Enter the SCOPE.  That way unqualified names appearing in the
10637      initializer will be looked up in SCOPE.  */
10638   if (scope)
10639     pop_p = push_scope (scope);
10640
10641   /* Perform deferred access control checks, now that we know in which
10642      SCOPE the declared entity resides.  */
10643   if (!member_p && decl)
10644     {
10645       tree saved_current_function_decl = NULL_TREE;
10646
10647       /* If the entity being declared is a function, pretend that we
10648          are in its scope.  If it is a `friend', it may have access to
10649          things that would not otherwise be accessible.  */
10650       if (TREE_CODE (decl) == FUNCTION_DECL)
10651         {
10652           saved_current_function_decl = current_function_decl;
10653           current_function_decl = decl;
10654         }
10655
10656       /* Perform the access control checks for the declarator and the
10657          the decl-specifiers.  */
10658       perform_deferred_access_checks ();
10659
10660       /* Restore the saved value.  */
10661       if (TREE_CODE (decl) == FUNCTION_DECL)
10662         current_function_decl = saved_current_function_decl;
10663     }
10664
10665   /* Parse the initializer.  */
10666   if (is_initialized)
10667     initializer = cp_parser_initializer (parser,
10668                                          &is_parenthesized_init,
10669                                          &is_non_constant_init);
10670   else
10671     {
10672       initializer = NULL_TREE;
10673       is_parenthesized_init = false;
10674       is_non_constant_init = true;
10675     }
10676
10677   /* The old parser allows attributes to appear after a parenthesized
10678      initializer.  Mark Mitchell proposed removing this functionality
10679      on the GCC mailing lists on 2002-08-13.  This parser accepts the
10680      attributes -- but ignores them.  */
10681   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
10682     if (cp_parser_attributes_opt (parser))
10683       warning ("attributes after parenthesized initializer ignored");
10684
10685   /* Leave the SCOPE, now that we have processed the initializer.  It
10686      is important to do this before calling cp_finish_decl because it
10687      makes decisions about whether to create DECL_EXPRs or not based
10688      on the current scope.  */
10689   if (pop_p)
10690     pop_scope (scope);
10691
10692   /* For an in-class declaration, use `grokfield' to create the
10693      declaration.  */
10694   if (member_p)
10695     {
10696       decl = grokfield (declarator, decl_specifiers,
10697                         initializer, /*asmspec=*/NULL_TREE,
10698                         /*attributes=*/NULL_TREE);
10699       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
10700         cp_parser_save_default_args (parser, decl);
10701     }
10702
10703   /* Finish processing the declaration.  But, skip friend
10704      declarations.  */
10705   if (!friend_p && decl)
10706     cp_finish_decl (decl,
10707                     initializer,
10708                     asm_specification,
10709                     /* If the initializer is in parentheses, then this is
10710                        a direct-initialization, which means that an
10711                        `explicit' constructor is OK.  Otherwise, an
10712                        `explicit' constructor cannot be used.  */
10713                     ((is_parenthesized_init || !is_initialized)
10714                      ? 0 : LOOKUP_ONLYCONVERTING));
10715
10716   /* Remember whether or not variables were initialized by
10717      constant-expressions.  */
10718   if (decl && TREE_CODE (decl) == VAR_DECL
10719       && is_initialized && !is_non_constant_init)
10720     DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
10721
10722   return decl;
10723 }
10724
10725 /* Parse a declarator.
10726
10727    declarator:
10728      direct-declarator
10729      ptr-operator declarator
10730
10731    abstract-declarator:
10732      ptr-operator abstract-declarator [opt]
10733      direct-abstract-declarator
10734
10735    GNU Extensions:
10736
10737    declarator:
10738      attributes [opt] direct-declarator
10739      attributes [opt] ptr-operator declarator
10740
10741    abstract-declarator:
10742      attributes [opt] ptr-operator abstract-declarator [opt]
10743      attributes [opt] direct-abstract-declarator
10744
10745    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
10746    detect constructor, destructor or conversion operators. It is set
10747    to -1 if the declarator is a name, and +1 if it is a
10748    function. Otherwise it is set to zero. Usually you just want to
10749    test for >0, but internally the negative value is used.
10750
10751    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
10752    a decl-specifier-seq unless it declares a constructor, destructor,
10753    or conversion.  It might seem that we could check this condition in
10754    semantic analysis, rather than parsing, but that makes it difficult
10755    to handle something like `f()'.  We want to notice that there are
10756    no decl-specifiers, and therefore realize that this is an
10757    expression, not a declaration.)
10758
10759    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
10760    the declarator is a direct-declarator of the form "(...)".  */
10761
10762 static cp_declarator *
10763 cp_parser_declarator (cp_parser* parser,
10764                       cp_parser_declarator_kind dcl_kind,
10765                       int* ctor_dtor_or_conv_p,
10766                       bool* parenthesized_p)
10767 {
10768   cp_token *token;
10769   cp_declarator *declarator;
10770   enum tree_code code;
10771   cp_cv_quals cv_quals;
10772   tree class_type;
10773   tree attributes = NULL_TREE;
10774
10775   /* Assume this is not a constructor, destructor, or type-conversion
10776      operator.  */
10777   if (ctor_dtor_or_conv_p)
10778     *ctor_dtor_or_conv_p = 0;
10779
10780   if (cp_parser_allow_gnu_extensions_p (parser))
10781     attributes = cp_parser_attributes_opt (parser);
10782
10783   /* Peek at the next token.  */
10784   token = cp_lexer_peek_token (parser->lexer);
10785
10786   /* Check for the ptr-operator production.  */
10787   cp_parser_parse_tentatively (parser);
10788   /* Parse the ptr-operator.  */
10789   code = cp_parser_ptr_operator (parser,
10790                                  &class_type,
10791                                  &cv_quals);
10792   /* If that worked, then we have a ptr-operator.  */
10793   if (cp_parser_parse_definitely (parser))
10794     {
10795       /* If a ptr-operator was found, then this declarator was not
10796          parenthesized.  */
10797       if (parenthesized_p)
10798         *parenthesized_p = true;
10799       /* The dependent declarator is optional if we are parsing an
10800          abstract-declarator.  */
10801       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
10802         cp_parser_parse_tentatively (parser);
10803
10804       /* Parse the dependent declarator.  */
10805       declarator = cp_parser_declarator (parser, dcl_kind,
10806                                          /*ctor_dtor_or_conv_p=*/NULL,
10807                                          /*parenthesized_p=*/NULL);
10808
10809       /* If we are parsing an abstract-declarator, we must handle the
10810          case where the dependent declarator is absent.  */
10811       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
10812           && !cp_parser_parse_definitely (parser))
10813         declarator = NULL;
10814
10815       /* Build the representation of the ptr-operator.  */
10816       if (class_type)
10817         declarator = make_ptrmem_declarator (cv_quals,
10818                                              class_type,
10819                                              declarator);
10820       else if (code == INDIRECT_REF)
10821         declarator = make_pointer_declarator (cv_quals, declarator);
10822       else
10823         declarator = make_reference_declarator (cv_quals, declarator);
10824     }
10825   /* Everything else is a direct-declarator.  */
10826   else
10827     {
10828       if (parenthesized_p)
10829         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
10830                                                    CPP_OPEN_PAREN);
10831       declarator = cp_parser_direct_declarator (parser, dcl_kind,
10832                                                 ctor_dtor_or_conv_p);
10833     }
10834
10835   if (attributes && declarator != cp_error_declarator)
10836     declarator->attributes = attributes;
10837
10838   return declarator;
10839 }
10840
10841 /* Parse a direct-declarator or direct-abstract-declarator.
10842
10843    direct-declarator:
10844      declarator-id
10845      direct-declarator ( parameter-declaration-clause )
10846        cv-qualifier-seq [opt]
10847        exception-specification [opt]
10848      direct-declarator [ constant-expression [opt] ]
10849      ( declarator )
10850
10851    direct-abstract-declarator:
10852      direct-abstract-declarator [opt]
10853        ( parameter-declaration-clause )
10854        cv-qualifier-seq [opt]
10855        exception-specification [opt]
10856      direct-abstract-declarator [opt] [ constant-expression [opt] ]
10857      ( abstract-declarator )
10858
10859    Returns a representation of the declarator.  DCL_KIND is
10860    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
10861    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
10862    we are parsing a direct-declarator.  It is
10863    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
10864    of ambiguity we prefer an abstract declarator, as per
10865    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P is as for
10866    cp_parser_declarator.  */
10867
10868 static cp_declarator *
10869 cp_parser_direct_declarator (cp_parser* parser,
10870                              cp_parser_declarator_kind dcl_kind,
10871                              int* ctor_dtor_or_conv_p)
10872 {
10873   cp_token *token;
10874   cp_declarator *declarator = NULL;
10875   tree scope = NULL_TREE;
10876   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
10877   bool saved_in_declarator_p = parser->in_declarator_p;
10878   bool first = true;
10879   bool pop_p = false;
10880
10881   while (true)
10882     {
10883       /* Peek at the next token.  */
10884       token = cp_lexer_peek_token (parser->lexer);
10885       if (token->type == CPP_OPEN_PAREN)
10886         {
10887           /* This is either a parameter-declaration-clause, or a
10888              parenthesized declarator. When we know we are parsing a
10889              named declarator, it must be a parenthesized declarator
10890              if FIRST is true. For instance, `(int)' is a
10891              parameter-declaration-clause, with an omitted
10892              direct-abstract-declarator. But `((*))', is a
10893              parenthesized abstract declarator. Finally, when T is a
10894              template parameter `(T)' is a
10895              parameter-declaration-clause, and not a parenthesized
10896              named declarator.
10897
10898              We first try and parse a parameter-declaration-clause,
10899              and then try a nested declarator (if FIRST is true).
10900
10901              It is not an error for it not to be a
10902              parameter-declaration-clause, even when FIRST is
10903              false. Consider,
10904
10905                int i (int);
10906                int i (3);
10907
10908              The first is the declaration of a function while the
10909              second is a the definition of a variable, including its
10910              initializer.
10911
10912              Having seen only the parenthesis, we cannot know which of
10913              these two alternatives should be selected.  Even more
10914              complex are examples like:
10915
10916                int i (int (a));
10917                int i (int (3));
10918
10919              The former is a function-declaration; the latter is a
10920              variable initialization.
10921
10922              Thus again, we try a parameter-declaration-clause, and if
10923              that fails, we back out and return.  */
10924
10925           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
10926             {
10927               cp_parameter_declarator *params;
10928               unsigned saved_num_template_parameter_lists;
10929
10930               cp_parser_parse_tentatively (parser);
10931
10932               /* Consume the `('.  */
10933               cp_lexer_consume_token (parser->lexer);
10934               if (first)
10935                 {
10936                   /* If this is going to be an abstract declarator, we're
10937                      in a declarator and we can't have default args.  */
10938                   parser->default_arg_ok_p = false;
10939                   parser->in_declarator_p = true;
10940                 }
10941
10942               /* Inside the function parameter list, surrounding
10943                  template-parameter-lists do not apply.  */
10944               saved_num_template_parameter_lists
10945                 = parser->num_template_parameter_lists;
10946               parser->num_template_parameter_lists = 0;
10947
10948               /* Parse the parameter-declaration-clause.  */
10949               params = cp_parser_parameter_declaration_clause (parser);
10950
10951               parser->num_template_parameter_lists
10952                 = saved_num_template_parameter_lists;
10953
10954               /* If all went well, parse the cv-qualifier-seq and the
10955                  exception-specification.  */
10956               if (cp_parser_parse_definitely (parser))
10957                 {
10958                   cp_cv_quals cv_quals;
10959                   tree exception_specification;
10960
10961                   if (ctor_dtor_or_conv_p)
10962                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
10963                   first = false;
10964                   /* Consume the `)'.  */
10965                   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
10966
10967                   /* Parse the cv-qualifier-seq.  */
10968                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
10969                   /* And the exception-specification.  */
10970                   exception_specification
10971                     = cp_parser_exception_specification_opt (parser);
10972
10973                   /* Create the function-declarator.  */
10974                   declarator = make_call_declarator (declarator,
10975                                                      params,
10976                                                      cv_quals,
10977                                                      exception_specification);
10978                   /* Any subsequent parameter lists are to do with
10979                      return type, so are not those of the declared
10980                      function.  */
10981                   parser->default_arg_ok_p = false;
10982
10983                   /* Repeat the main loop.  */
10984                   continue;
10985                 }
10986             }
10987
10988           /* If this is the first, we can try a parenthesized
10989              declarator.  */
10990           if (first)
10991             {
10992               bool saved_in_type_id_in_expr_p;
10993
10994               parser->default_arg_ok_p = saved_default_arg_ok_p;
10995               parser->in_declarator_p = saved_in_declarator_p;
10996
10997               /* Consume the `('.  */
10998               cp_lexer_consume_token (parser->lexer);
10999               /* Parse the nested declarator.  */
11000               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
11001               parser->in_type_id_in_expr_p = true;
11002               declarator
11003                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
11004                                         /*parenthesized_p=*/NULL);
11005               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
11006               first = false;
11007               /* Expect a `)'.  */
11008               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11009                 declarator = cp_error_declarator;
11010               if (declarator == cp_error_declarator)
11011                 break;
11012
11013               goto handle_declarator;
11014             }
11015           /* Otherwise, we must be done.  */
11016           else
11017             break;
11018         }
11019       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11020                && token->type == CPP_OPEN_SQUARE)
11021         {
11022           /* Parse an array-declarator.  */
11023           tree bounds;
11024
11025           if (ctor_dtor_or_conv_p)
11026             *ctor_dtor_or_conv_p = 0;
11027
11028           first = false;
11029           parser->default_arg_ok_p = false;
11030           parser->in_declarator_p = true;
11031           /* Consume the `['.  */
11032           cp_lexer_consume_token (parser->lexer);
11033           /* Peek at the next token.  */
11034           token = cp_lexer_peek_token (parser->lexer);
11035           /* If the next token is `]', then there is no
11036              constant-expression.  */
11037           if (token->type != CPP_CLOSE_SQUARE)
11038             {
11039               bool non_constant_p;
11040
11041               bounds
11042                 = cp_parser_constant_expression (parser,
11043                                                  /*allow_non_constant=*/true,
11044                                                  &non_constant_p);
11045               if (!non_constant_p)
11046                 bounds = fold_non_dependent_expr (bounds);
11047             }
11048           else
11049             bounds = NULL_TREE;
11050           /* Look for the closing `]'.  */
11051           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
11052             {
11053               declarator = cp_error_declarator;
11054               break;
11055             }
11056
11057           declarator = make_array_declarator (declarator, bounds);
11058         }
11059       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
11060         {
11061           tree id;
11062
11063           /* Parse a declarator-id */
11064           if (dcl_kind == CP_PARSER_DECLARATOR_EITHER)
11065             cp_parser_parse_tentatively (parser);
11066           id = cp_parser_declarator_id (parser);
11067           if (dcl_kind == CP_PARSER_DECLARATOR_EITHER)
11068             {
11069               if (!cp_parser_parse_definitely (parser))
11070                 id = error_mark_node;
11071               else if (TREE_CODE (id) != IDENTIFIER_NODE)
11072                 {
11073                   cp_parser_error (parser, "expected unqualified-id");
11074                   id = error_mark_node;
11075                 }
11076             }
11077
11078           if (id == error_mark_node)
11079             {
11080               declarator = cp_error_declarator;
11081               break;
11082             }
11083
11084           if (TREE_CODE (id) == SCOPE_REF && !current_scope ())
11085             {
11086               tree scope = TREE_OPERAND (id, 0);
11087
11088               /* In the declaration of a member of a template class
11089                  outside of the class itself, the SCOPE will sometimes
11090                  be a TYPENAME_TYPE.  For example, given:
11091
11092                  template <typename T>
11093                  int S<T>::R::i = 3;
11094
11095                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
11096                  this context, we must resolve S<T>::R to an ordinary
11097                  type, rather than a typename type.
11098
11099                  The reason we normally avoid resolving TYPENAME_TYPEs
11100                  is that a specialization of `S' might render
11101                  `S<T>::R' not a type.  However, if `S' is
11102                  specialized, then this `i' will not be used, so there
11103                  is no harm in resolving the types here.  */
11104               if (TREE_CODE (scope) == TYPENAME_TYPE)
11105                 {
11106                   tree type;
11107
11108                   /* Resolve the TYPENAME_TYPE.  */
11109                   type = resolve_typename_type (scope,
11110                                                  /*only_current_p=*/false);
11111                   /* If that failed, the declarator is invalid.  */
11112                   if (type == error_mark_node)
11113                     error ("`%T::%D' is not a type",
11114                            TYPE_CONTEXT (scope),
11115                            TYPE_IDENTIFIER (scope));
11116                   /* Build a new DECLARATOR.  */
11117                   id = build_nt (SCOPE_REF, type, TREE_OPERAND (id, 1));
11118                 }
11119             }
11120
11121           declarator = make_id_declarator (id);
11122           if (id)
11123             {
11124               tree class_type;
11125               tree unqualified_name;
11126
11127               if (TREE_CODE (id) == SCOPE_REF
11128                   && CLASS_TYPE_P (TREE_OPERAND (id, 0)))
11129                 {
11130                   class_type = TREE_OPERAND (id, 0);
11131                   unqualified_name = TREE_OPERAND (id, 1);
11132                 }
11133               else
11134                 {
11135                   class_type = current_class_type;
11136                   unqualified_name = id;
11137                 }
11138
11139               if (class_type)
11140                 {
11141                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
11142                     declarator->u.id.sfk = sfk_destructor;
11143                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
11144                     declarator->u.id.sfk = sfk_conversion;
11145                   else if (constructor_name_p (unqualified_name,
11146                                                class_type)
11147                            || (TREE_CODE (unqualified_name) == TYPE_DECL
11148                                && same_type_p (TREE_TYPE (unqualified_name),
11149                                                class_type)))
11150                     declarator->u.id.sfk = sfk_constructor;
11151
11152                   if (ctor_dtor_or_conv_p && declarator->u.id.sfk != sfk_none)
11153                     *ctor_dtor_or_conv_p = -1;
11154                   if (TREE_CODE (id) == SCOPE_REF
11155                       && TREE_CODE (unqualified_name) == TYPE_DECL
11156                       && CLASSTYPE_USE_TEMPLATE (TREE_TYPE (unqualified_name)))
11157                     {
11158                       error ("invalid use of constructor as a template");
11159                       inform ("use `%T::%D' instead of `%T::%T' to name the "
11160                               "constructor in a qualified name", class_type,
11161                               DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
11162                               class_type, class_type);
11163                     }
11164                 }
11165             }
11166
11167         handle_declarator:;
11168           scope = get_scope_of_declarator (declarator);
11169           if (scope)
11170             /* Any names that appear after the declarator-id for a
11171                member are looked up in the containing scope.  */
11172             pop_p = push_scope (scope);
11173           parser->in_declarator_p = true;
11174           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
11175               || (declarator && declarator->kind == cdk_id))
11176             /* Default args are only allowed on function
11177                declarations.  */
11178             parser->default_arg_ok_p = saved_default_arg_ok_p;
11179           else
11180             parser->default_arg_ok_p = false;
11181
11182           first = false;
11183         }
11184       /* We're done.  */
11185       else
11186         break;
11187     }
11188
11189   /* For an abstract declarator, we might wind up with nothing at this
11190      point.  That's an error; the declarator is not optional.  */
11191   if (!declarator)
11192     cp_parser_error (parser, "expected declarator");
11193
11194   /* If we entered a scope, we must exit it now.  */
11195   if (pop_p)
11196     pop_scope (scope);
11197
11198   parser->default_arg_ok_p = saved_default_arg_ok_p;
11199   parser->in_declarator_p = saved_in_declarator_p;
11200
11201   return declarator;
11202 }
11203
11204 /* Parse a ptr-operator.
11205
11206    ptr-operator:
11207      * cv-qualifier-seq [opt]
11208      &
11209      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
11210
11211    GNU Extension:
11212
11213    ptr-operator:
11214      & cv-qualifier-seq [opt]
11215
11216    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
11217    Returns ADDR_EXPR if a reference was used.  In the case of a
11218    pointer-to-member, *TYPE is filled in with the TYPE containing the
11219    member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
11220    TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
11221    ERROR_MARK if an error occurred.  */
11222
11223 static enum tree_code
11224 cp_parser_ptr_operator (cp_parser* parser,
11225                         tree* type,
11226                         cp_cv_quals *cv_quals)
11227 {
11228   enum tree_code code = ERROR_MARK;
11229   cp_token *token;
11230
11231   /* Assume that it's not a pointer-to-member.  */
11232   *type = NULL_TREE;
11233   /* And that there are no cv-qualifiers.  */
11234   *cv_quals = TYPE_UNQUALIFIED;
11235
11236   /* Peek at the next token.  */
11237   token = cp_lexer_peek_token (parser->lexer);
11238   /* If it's a `*' or `&' we have a pointer or reference.  */
11239   if (token->type == CPP_MULT || token->type == CPP_AND)
11240     {
11241       /* Remember which ptr-operator we were processing.  */
11242       code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
11243
11244       /* Consume the `*' or `&'.  */
11245       cp_lexer_consume_token (parser->lexer);
11246
11247       /* A `*' can be followed by a cv-qualifier-seq, and so can a
11248          `&', if we are allowing GNU extensions.  (The only qualifier
11249          that can legally appear after `&' is `restrict', but that is
11250          enforced during semantic analysis.  */
11251       if (code == INDIRECT_REF
11252           || cp_parser_allow_gnu_extensions_p (parser))
11253         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11254     }
11255   else
11256     {
11257       /* Try the pointer-to-member case.  */
11258       cp_parser_parse_tentatively (parser);
11259       /* Look for the optional `::' operator.  */
11260       cp_parser_global_scope_opt (parser,
11261                                   /*current_scope_valid_p=*/false);
11262       /* Look for the nested-name specifier.  */
11263       cp_parser_nested_name_specifier (parser,
11264                                        /*typename_keyword_p=*/false,
11265                                        /*check_dependency_p=*/true,
11266                                        /*type_p=*/false,
11267                                        /*is_declaration=*/false);
11268       /* If we found it, and the next token is a `*', then we are
11269          indeed looking at a pointer-to-member operator.  */
11270       if (!cp_parser_error_occurred (parser)
11271           && cp_parser_require (parser, CPP_MULT, "`*'"))
11272         {
11273           /* The type of which the member is a member is given by the
11274              current SCOPE.  */
11275           *type = parser->scope;
11276           /* The next name will not be qualified.  */
11277           parser->scope = NULL_TREE;
11278           parser->qualifying_scope = NULL_TREE;
11279           parser->object_scope = NULL_TREE;
11280           /* Indicate that the `*' operator was used.  */
11281           code = INDIRECT_REF;
11282           /* Look for the optional cv-qualifier-seq.  */
11283           *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11284         }
11285       /* If that didn't work we don't have a ptr-operator.  */
11286       if (!cp_parser_parse_definitely (parser))
11287         cp_parser_error (parser, "expected ptr-operator");
11288     }
11289
11290   return code;
11291 }
11292
11293 /* Parse an (optional) cv-qualifier-seq.
11294
11295    cv-qualifier-seq:
11296      cv-qualifier cv-qualifier-seq [opt]
11297
11298    cv-qualifier:
11299      const
11300      volatile
11301
11302    GNU Extension:
11303
11304    cv-qualifier:
11305      __restrict__
11306
11307    Returns a bitmask representing the cv-qualifiers.  */
11308
11309 static cp_cv_quals
11310 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
11311 {
11312   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
11313
11314   while (true)
11315     {
11316       cp_token *token;
11317       cp_cv_quals cv_qualifier;
11318
11319       /* Peek at the next token.  */
11320       token = cp_lexer_peek_token (parser->lexer);
11321       /* See if it's a cv-qualifier.  */
11322       switch (token->keyword)
11323         {
11324         case RID_CONST:
11325           cv_qualifier = TYPE_QUAL_CONST;
11326           break;
11327
11328         case RID_VOLATILE:
11329           cv_qualifier = TYPE_QUAL_VOLATILE;
11330           break;
11331
11332         case RID_RESTRICT:
11333           cv_qualifier = TYPE_QUAL_RESTRICT;
11334           break;
11335
11336         default:
11337           cv_qualifier = TYPE_UNQUALIFIED;
11338           break;
11339         }
11340
11341       if (!cv_qualifier)
11342         break;
11343
11344       if (cv_quals & cv_qualifier)
11345         {
11346           error ("duplicate cv-qualifier");
11347           cp_lexer_purge_token (parser->lexer);
11348         }
11349       else
11350         {
11351           cp_lexer_consume_token (parser->lexer);
11352           cv_quals |= cv_qualifier;
11353         }
11354     }
11355
11356   return cv_quals;
11357 }
11358
11359 /* Parse a declarator-id.
11360
11361    declarator-id:
11362      id-expression
11363      :: [opt] nested-name-specifier [opt] type-name
11364
11365    In the `id-expression' case, the value returned is as for
11366    cp_parser_id_expression if the id-expression was an unqualified-id.
11367    If the id-expression was a qualified-id, then a SCOPE_REF is
11368    returned.  The first operand is the scope (either a NAMESPACE_DECL
11369    or TREE_TYPE), but the second is still just a representation of an
11370    unqualified-id.  */
11371
11372 static tree
11373 cp_parser_declarator_id (cp_parser* parser)
11374 {
11375   tree id_expression;
11376
11377   /* The expression must be an id-expression.  Assume that qualified
11378      names are the names of types so that:
11379
11380        template <class T>
11381        int S<T>::R::i = 3;
11382
11383      will work; we must treat `S<T>::R' as the name of a type.
11384      Similarly, assume that qualified names are templates, where
11385      required, so that:
11386
11387        template <class T>
11388        int S<T>::R<T>::i = 3;
11389
11390      will work, too.  */
11391   id_expression = cp_parser_id_expression (parser,
11392                                            /*template_keyword_p=*/false,
11393                                            /*check_dependency_p=*/false,
11394                                            /*template_p=*/NULL,
11395                                            /*declarator_p=*/true);
11396   /* If the name was qualified, create a SCOPE_REF to represent
11397      that.  */
11398   if (parser->scope)
11399     {
11400       id_expression = build_nt (SCOPE_REF, parser->scope, id_expression);
11401       parser->scope = NULL_TREE;
11402     }
11403
11404   return id_expression;
11405 }
11406
11407 /* Parse a type-id.
11408
11409    type-id:
11410      type-specifier-seq abstract-declarator [opt]
11411
11412    Returns the TYPE specified.  */
11413
11414 static tree
11415 cp_parser_type_id (cp_parser* parser)
11416 {
11417   cp_decl_specifier_seq type_specifier_seq;
11418   cp_declarator *abstract_declarator;
11419
11420   /* Parse the type-specifier-seq.  */
11421   cp_parser_type_specifier_seq (parser, &type_specifier_seq);
11422   if (type_specifier_seq.type == error_mark_node)
11423     return error_mark_node;
11424
11425   /* There might or might not be an abstract declarator.  */
11426   cp_parser_parse_tentatively (parser);
11427   /* Look for the declarator.  */
11428   abstract_declarator
11429     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
11430                             /*parenthesized_p=*/NULL);
11431   /* Check to see if there really was a declarator.  */
11432   if (!cp_parser_parse_definitely (parser))
11433     abstract_declarator = NULL;
11434
11435   return groktypename (&type_specifier_seq, abstract_declarator);
11436 }
11437
11438 /* Parse a type-specifier-seq.
11439
11440    type-specifier-seq:
11441      type-specifier type-specifier-seq [opt]
11442
11443    GNU extension:
11444
11445    type-specifier-seq:
11446      attributes type-specifier-seq [opt]
11447
11448    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
11449
11450 static void
11451 cp_parser_type_specifier_seq (cp_parser* parser,
11452                               cp_decl_specifier_seq *type_specifier_seq)
11453 {
11454   bool seen_type_specifier = false;
11455
11456   /* Clear the TYPE_SPECIFIER_SEQ.  */
11457   clear_decl_specs (type_specifier_seq);
11458
11459   /* Parse the type-specifiers and attributes.  */
11460   while (true)
11461     {
11462       tree type_specifier;
11463
11464       /* Check for attributes first.  */
11465       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
11466         {
11467           type_specifier_seq->attributes =
11468             chainon (type_specifier_seq->attributes,
11469                      cp_parser_attributes_opt (parser));
11470           continue;
11471         }
11472
11473       /* Look for the type-specifier.  */
11474       type_specifier = cp_parser_type_specifier (parser,
11475                                                  CP_PARSER_FLAGS_OPTIONAL,
11476                                                  type_specifier_seq,
11477                                                  /*is_declaration=*/false,
11478                                                  NULL,
11479                                                  NULL);
11480       /* If the first type-specifier could not be found, this is not a
11481          type-specifier-seq at all.  */
11482       if (!seen_type_specifier && !type_specifier)
11483         {
11484           cp_parser_error (parser, "expected type-specifier");
11485           type_specifier_seq->type = error_mark_node;
11486           return;
11487         }
11488       /* If subsequent type-specifiers could not be found, the
11489          type-specifier-seq is complete.  */
11490       else if (seen_type_specifier && !type_specifier)
11491         break;
11492
11493       seen_type_specifier = true;
11494     }
11495
11496   return;
11497 }
11498
11499 /* Parse a parameter-declaration-clause.
11500
11501    parameter-declaration-clause:
11502      parameter-declaration-list [opt] ... [opt]
11503      parameter-declaration-list , ...
11504
11505    Returns a representation for the parameter declarations.  A return
11506    value of NULL indicates a parameter-declaration-clause consisting
11507    only of an ellipsis.  */
11508
11509 static cp_parameter_declarator *
11510 cp_parser_parameter_declaration_clause (cp_parser* parser)
11511 {
11512   cp_parameter_declarator *parameters;
11513   cp_token *token;
11514   bool ellipsis_p;
11515   bool is_error;
11516
11517   /* Peek at the next token.  */
11518   token = cp_lexer_peek_token (parser->lexer);
11519   /* Check for trivial parameter-declaration-clauses.  */
11520   if (token->type == CPP_ELLIPSIS)
11521     {
11522       /* Consume the `...' token.  */
11523       cp_lexer_consume_token (parser->lexer);
11524       return NULL;
11525     }
11526   else if (token->type == CPP_CLOSE_PAREN)
11527     /* There are no parameters.  */
11528     {
11529 #ifndef NO_IMPLICIT_EXTERN_C
11530       if (in_system_header && current_class_type == NULL
11531           && current_lang_name == lang_name_c)
11532         return NULL;
11533       else
11534 #endif
11535         return no_parameters;
11536     }
11537   /* Check for `(void)', too, which is a special case.  */
11538   else if (token->keyword == RID_VOID
11539            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
11540                == CPP_CLOSE_PAREN))
11541     {
11542       /* Consume the `void' token.  */
11543       cp_lexer_consume_token (parser->lexer);
11544       /* There are no parameters.  */
11545       return no_parameters;
11546     }
11547
11548   /* Parse the parameter-declaration-list.  */
11549   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
11550   /* If a parse error occurred while parsing the
11551      parameter-declaration-list, then the entire
11552      parameter-declaration-clause is erroneous.  */
11553   if (is_error)
11554     return NULL;
11555
11556   /* Peek at the next token.  */
11557   token = cp_lexer_peek_token (parser->lexer);
11558   /* If it's a `,', the clause should terminate with an ellipsis.  */
11559   if (token->type == CPP_COMMA)
11560     {
11561       /* Consume the `,'.  */
11562       cp_lexer_consume_token (parser->lexer);
11563       /* Expect an ellipsis.  */
11564       ellipsis_p
11565         = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
11566     }
11567   /* It might also be `...' if the optional trailing `,' was
11568      omitted.  */
11569   else if (token->type == CPP_ELLIPSIS)
11570     {
11571       /* Consume the `...' token.  */
11572       cp_lexer_consume_token (parser->lexer);
11573       /* And remember that we saw it.  */
11574       ellipsis_p = true;
11575     }
11576   else
11577     ellipsis_p = false;
11578
11579   /* Finish the parameter list.  */
11580   if (parameters && ellipsis_p)
11581     parameters->ellipsis_p = true;
11582
11583   return parameters;
11584 }
11585
11586 /* Parse a parameter-declaration-list.
11587
11588    parameter-declaration-list:
11589      parameter-declaration
11590      parameter-declaration-list , parameter-declaration
11591
11592    Returns a representation of the parameter-declaration-list, as for
11593    cp_parser_parameter_declaration_clause.  However, the
11594    `void_list_node' is never appended to the list.  Upon return,
11595    *IS_ERROR will be true iff an error occurred.  */
11596
11597 static cp_parameter_declarator *
11598 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
11599 {
11600   cp_parameter_declarator *parameters = NULL;
11601   cp_parameter_declarator **tail = &parameters;
11602
11603   /* Assume all will go well.  */
11604   *is_error = false;
11605
11606   /* Look for more parameters.  */
11607   while (true)
11608     {
11609       cp_parameter_declarator *parameter;
11610       bool parenthesized_p;
11611       /* Parse the parameter.  */
11612       parameter
11613         = cp_parser_parameter_declaration (parser,
11614                                            /*template_parm_p=*/false,
11615                                            &parenthesized_p);
11616
11617       /* If a parse error occurred parsing the parameter declaration,
11618          then the entire parameter-declaration-list is erroneous.  */
11619       if (!parameter)
11620         {
11621           *is_error = true;
11622           parameters = NULL;
11623           break;
11624         }
11625       /* Add the new parameter to the list.  */
11626       *tail = parameter;
11627       tail = &parameter->next;
11628
11629       /* Peek at the next token.  */
11630       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
11631           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11632         /* The parameter-declaration-list is complete.  */
11633         break;
11634       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
11635         {
11636           cp_token *token;
11637
11638           /* Peek at the next token.  */
11639           token = cp_lexer_peek_nth_token (parser->lexer, 2);
11640           /* If it's an ellipsis, then the list is complete.  */
11641           if (token->type == CPP_ELLIPSIS)
11642             break;
11643           /* Otherwise, there must be more parameters.  Consume the
11644              `,'.  */
11645           cp_lexer_consume_token (parser->lexer);
11646           /* When parsing something like:
11647
11648                 int i(float f, double d)
11649
11650              we can tell after seeing the declaration for "f" that we
11651              are not looking at an initialization of a variable "i",
11652              but rather at the declaration of a function "i".
11653
11654              Due to the fact that the parsing of template arguments
11655              (as specified to a template-id) requires backtracking we
11656              cannot use this technique when inside a template argument
11657              list.  */
11658           if (!parser->in_template_argument_list_p
11659               && !parser->in_type_id_in_expr_p
11660               && cp_parser_parsing_tentatively (parser)
11661               && !cp_parser_committed_to_tentative_parse (parser)
11662               /* However, a parameter-declaration of the form
11663                  "foat(f)" (which is a valid declaration of a
11664                  parameter "f") can also be interpreted as an
11665                  expression (the conversion of "f" to "float").  */
11666               && !parenthesized_p)
11667             cp_parser_commit_to_tentative_parse (parser);
11668         }
11669       else
11670         {
11671           cp_parser_error (parser, "expected `,' or `...'");
11672           if (!cp_parser_parsing_tentatively (parser)
11673               || cp_parser_committed_to_tentative_parse (parser))
11674             cp_parser_skip_to_closing_parenthesis (parser,
11675                                                    /*recovering=*/true,
11676                                                    /*or_comma=*/false,
11677                                                    /*consume_paren=*/false);
11678           break;
11679         }
11680     }
11681
11682   return parameters;
11683 }
11684
11685 /* Parse a parameter declaration.
11686
11687    parameter-declaration:
11688      decl-specifier-seq declarator
11689      decl-specifier-seq declarator = assignment-expression
11690      decl-specifier-seq abstract-declarator [opt]
11691      decl-specifier-seq abstract-declarator [opt] = assignment-expression
11692
11693    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
11694    declares a template parameter.  (In that case, a non-nested `>'
11695    token encountered during the parsing of the assignment-expression
11696    is not interpreted as a greater-than operator.)
11697
11698    Returns a representation of the parameter, or NULL if an error
11699    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
11700    true iff the declarator is of the form "(p)".  */
11701
11702 static cp_parameter_declarator *
11703 cp_parser_parameter_declaration (cp_parser *parser,
11704                                  bool template_parm_p,
11705                                  bool *parenthesized_p)
11706 {
11707   int declares_class_or_enum;
11708   bool greater_than_is_operator_p;
11709   cp_decl_specifier_seq decl_specifiers;
11710   cp_declarator *declarator;
11711   tree default_argument;
11712   cp_token *token;
11713   const char *saved_message;
11714
11715   /* In a template parameter, `>' is not an operator.
11716
11717      [temp.param]
11718
11719      When parsing a default template-argument for a non-type
11720      template-parameter, the first non-nested `>' is taken as the end
11721      of the template parameter-list rather than a greater-than
11722      operator.  */
11723   greater_than_is_operator_p = !template_parm_p;
11724
11725   /* Type definitions may not appear in parameter types.  */
11726   saved_message = parser->type_definition_forbidden_message;
11727   parser->type_definition_forbidden_message
11728     = "types may not be defined in parameter types";
11729
11730   /* Parse the declaration-specifiers.  */
11731   cp_parser_decl_specifier_seq (parser,
11732                                 CP_PARSER_FLAGS_NONE,
11733                                 &decl_specifiers,
11734                                 &declares_class_or_enum);
11735   /* If an error occurred, there's no reason to attempt to parse the
11736      rest of the declaration.  */
11737   if (cp_parser_error_occurred (parser))
11738     {
11739       parser->type_definition_forbidden_message = saved_message;
11740       return NULL;
11741     }
11742
11743   /* Peek at the next token.  */
11744   token = cp_lexer_peek_token (parser->lexer);
11745   /* If the next token is a `)', `,', `=', `>', or `...', then there
11746      is no declarator.  */
11747   if (token->type == CPP_CLOSE_PAREN
11748       || token->type == CPP_COMMA
11749       || token->type == CPP_EQ
11750       || token->type == CPP_ELLIPSIS
11751       || token->type == CPP_GREATER)
11752     {
11753       declarator = NULL;
11754       if (parenthesized_p)
11755         *parenthesized_p = false;
11756     }
11757   /* Otherwise, there should be a declarator.  */
11758   else
11759     {
11760       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11761       parser->default_arg_ok_p = false;
11762
11763       /* After seeing a decl-specifier-seq, if the next token is not a
11764          "(", there is no possibility that the code is a valid
11765          expression.  Therefore, if parsing tentatively, we commit at
11766          this point.  */
11767       if (!parser->in_template_argument_list_p
11768           /* In an expression context, having seen:
11769
11770                (int((char ...
11771
11772              we cannot be sure whether we are looking at a
11773              function-type (taking a "char" as a parameter) or a cast
11774              of some object of type "char" to "int".  */
11775           && !parser->in_type_id_in_expr_p
11776           && cp_parser_parsing_tentatively (parser)
11777           && !cp_parser_committed_to_tentative_parse (parser)
11778           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
11779         cp_parser_commit_to_tentative_parse (parser);
11780       /* Parse the declarator.  */
11781       declarator = cp_parser_declarator (parser,
11782                                          CP_PARSER_DECLARATOR_EITHER,
11783                                          /*ctor_dtor_or_conv_p=*/NULL,
11784                                          parenthesized_p);
11785       parser->default_arg_ok_p = saved_default_arg_ok_p;
11786       /* After the declarator, allow more attributes.  */
11787       decl_specifiers.attributes
11788         = chainon (decl_specifiers.attributes,
11789                    cp_parser_attributes_opt (parser));
11790     }
11791
11792   /* The restriction on defining new types applies only to the type
11793      of the parameter, not to the default argument.  */
11794   parser->type_definition_forbidden_message = saved_message;
11795
11796   /* If the next token is `=', then process a default argument.  */
11797   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11798     {
11799       bool saved_greater_than_is_operator_p;
11800       /* Consume the `='.  */
11801       cp_lexer_consume_token (parser->lexer);
11802
11803       /* If we are defining a class, then the tokens that make up the
11804          default argument must be saved and processed later.  */
11805       if (!template_parm_p && at_class_scope_p ()
11806           && TYPE_BEING_DEFINED (current_class_type))
11807         {
11808           unsigned depth = 0;
11809
11810           /* Create a DEFAULT_ARG to represented the unparsed default
11811              argument.  */
11812           default_argument = make_node (DEFAULT_ARG);
11813           DEFARG_TOKENS (default_argument) = cp_token_cache_new ();
11814
11815           /* Add tokens until we have processed the entire default
11816              argument.  */
11817           while (true)
11818             {
11819               bool done = false;
11820               cp_token *token;
11821
11822               /* Peek at the next token.  */
11823               token = cp_lexer_peek_token (parser->lexer);
11824               /* What we do depends on what token we have.  */
11825               switch (token->type)
11826                 {
11827                   /* In valid code, a default argument must be
11828                      immediately followed by a `,' `)', or `...'.  */
11829                 case CPP_COMMA:
11830                 case CPP_CLOSE_PAREN:
11831                 case CPP_ELLIPSIS:
11832                   /* If we run into a non-nested `;', `}', or `]',
11833                      then the code is invalid -- but the default
11834                      argument is certainly over.  */
11835                 case CPP_SEMICOLON:
11836                 case CPP_CLOSE_BRACE:
11837                 case CPP_CLOSE_SQUARE:
11838                   if (depth == 0)
11839                     done = true;
11840                   /* Update DEPTH, if necessary.  */
11841                   else if (token->type == CPP_CLOSE_PAREN
11842                            || token->type == CPP_CLOSE_BRACE
11843                            || token->type == CPP_CLOSE_SQUARE)
11844                     --depth;
11845                   break;
11846
11847                 case CPP_OPEN_PAREN:
11848                 case CPP_OPEN_SQUARE:
11849                 case CPP_OPEN_BRACE:
11850                   ++depth;
11851                   break;
11852
11853                 case CPP_GREATER:
11854                   /* If we see a non-nested `>', and `>' is not an
11855                      operator, then it marks the end of the default
11856                      argument.  */
11857                   if (!depth && !greater_than_is_operator_p)
11858                     done = true;
11859                   break;
11860
11861                   /* If we run out of tokens, issue an error message.  */
11862                 case CPP_EOF:
11863                   error ("file ends in default argument");
11864                   done = true;
11865                   break;
11866
11867                 case CPP_NAME:
11868                 case CPP_SCOPE:
11869                   /* In these cases, we should look for template-ids.
11870                      For example, if the default argument is
11871                      `X<int, double>()', we need to do name lookup to
11872                      figure out whether or not `X' is a template; if
11873                      so, the `,' does not end the default argument.
11874
11875                      That is not yet done.  */
11876                   break;
11877
11878                 default:
11879                   break;
11880                 }
11881
11882               /* If we've reached the end, stop.  */
11883               if (done)
11884                 break;
11885
11886               /* Add the token to the token block.  */
11887               token = cp_lexer_consume_token (parser->lexer);
11888               cp_token_cache_push_token (DEFARG_TOKENS (default_argument),
11889                                          token);
11890             }
11891         }
11892       /* Outside of a class definition, we can just parse the
11893          assignment-expression.  */
11894       else
11895         {
11896           bool saved_local_variables_forbidden_p;
11897
11898           /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
11899              set correctly.  */
11900           saved_greater_than_is_operator_p
11901             = parser->greater_than_is_operator_p;
11902           parser->greater_than_is_operator_p = greater_than_is_operator_p;
11903           /* Local variable names (and the `this' keyword) may not
11904              appear in a default argument.  */
11905           saved_local_variables_forbidden_p
11906             = parser->local_variables_forbidden_p;
11907           parser->local_variables_forbidden_p = true;
11908           /* Parse the assignment-expression.  */
11909           default_argument = cp_parser_assignment_expression (parser);
11910           /* Restore saved state.  */
11911           parser->greater_than_is_operator_p
11912             = saved_greater_than_is_operator_p;
11913           parser->local_variables_forbidden_p
11914             = saved_local_variables_forbidden_p;
11915         }
11916       if (!parser->default_arg_ok_p)
11917         {
11918           if (!flag_pedantic_errors)
11919             warning ("deprecated use of default argument for parameter of non-function");
11920           else
11921             {
11922               error ("default arguments are only permitted for function parameters");
11923               default_argument = NULL_TREE;
11924             }
11925         }
11926     }
11927   else
11928     default_argument = NULL_TREE;
11929
11930   return make_parameter_declarator (&decl_specifiers,
11931                                     declarator,
11932                                     default_argument);
11933 }
11934
11935 /* Parse a function-body.
11936
11937    function-body:
11938      compound_statement  */
11939
11940 static void
11941 cp_parser_function_body (cp_parser *parser)
11942 {
11943   cp_parser_compound_statement (parser, NULL, false);
11944 }
11945
11946 /* Parse a ctor-initializer-opt followed by a function-body.  Return
11947    true if a ctor-initializer was present.  */
11948
11949 static bool
11950 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
11951 {
11952   tree body;
11953   bool ctor_initializer_p;
11954
11955   /* Begin the function body.  */
11956   body = begin_function_body ();
11957   /* Parse the optional ctor-initializer.  */
11958   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
11959   /* Parse the function-body.  */
11960   cp_parser_function_body (parser);
11961   /* Finish the function body.  */
11962   finish_function_body (body);
11963
11964   return ctor_initializer_p;
11965 }
11966
11967 /* Parse an initializer.
11968
11969    initializer:
11970      = initializer-clause
11971      ( expression-list )
11972
11973    Returns a expression representing the initializer.  If no
11974    initializer is present, NULL_TREE is returned.
11975
11976    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
11977    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
11978    set to FALSE if there is no initializer present.  If there is an
11979    initializer, and it is not a constant-expression, *NON_CONSTANT_P
11980    is set to true; otherwise it is set to false.  */
11981
11982 static tree
11983 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
11984                        bool* non_constant_p)
11985 {
11986   cp_token *token;
11987   tree init;
11988
11989   /* Peek at the next token.  */
11990   token = cp_lexer_peek_token (parser->lexer);
11991
11992   /* Let our caller know whether or not this initializer was
11993      parenthesized.  */
11994   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
11995   /* Assume that the initializer is constant.  */
11996   *non_constant_p = false;
11997
11998   if (token->type == CPP_EQ)
11999     {
12000       /* Consume the `='.  */
12001       cp_lexer_consume_token (parser->lexer);
12002       /* Parse the initializer-clause.  */
12003       init = cp_parser_initializer_clause (parser, non_constant_p);
12004     }
12005   else if (token->type == CPP_OPEN_PAREN)
12006     init = cp_parser_parenthesized_expression_list (parser, false,
12007                                                     non_constant_p);
12008   else
12009     {
12010       /* Anything else is an error.  */
12011       cp_parser_error (parser, "expected initializer");
12012       init = error_mark_node;
12013     }
12014
12015   return init;
12016 }
12017
12018 /* Parse an initializer-clause.
12019
12020    initializer-clause:
12021      assignment-expression
12022      { initializer-list , [opt] }
12023      { }
12024
12025    Returns an expression representing the initializer.
12026
12027    If the `assignment-expression' production is used the value
12028    returned is simply a representation for the expression.
12029
12030    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
12031    the elements of the initializer-list (or NULL_TREE, if the last
12032    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
12033    NULL_TREE.  There is no way to detect whether or not the optional
12034    trailing `,' was provided.  NON_CONSTANT_P is as for
12035    cp_parser_initializer.  */
12036
12037 static tree
12038 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
12039 {
12040   tree initializer;
12041
12042   /* If it is not a `{', then we are looking at an
12043      assignment-expression.  */
12044   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
12045     {
12046       initializer
12047         = cp_parser_constant_expression (parser,
12048                                         /*allow_non_constant_p=*/true,
12049                                         non_constant_p);
12050       if (!*non_constant_p)
12051         initializer = fold_non_dependent_expr (initializer);
12052     }
12053   else
12054     {
12055       /* Consume the `{' token.  */
12056       cp_lexer_consume_token (parser->lexer);
12057       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
12058       initializer = make_node (CONSTRUCTOR);
12059       /* If it's not a `}', then there is a non-trivial initializer.  */
12060       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12061         {
12062           /* Parse the initializer list.  */
12063           CONSTRUCTOR_ELTS (initializer)
12064             = cp_parser_initializer_list (parser, non_constant_p);
12065           /* A trailing `,' token is allowed.  */
12066           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12067             cp_lexer_consume_token (parser->lexer);
12068         }
12069       /* Now, there should be a trailing `}'.  */
12070       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12071     }
12072
12073   return initializer;
12074 }
12075
12076 /* Parse an initializer-list.
12077
12078    initializer-list:
12079      initializer-clause
12080      initializer-list , initializer-clause
12081
12082    GNU Extension:
12083
12084    initializer-list:
12085      identifier : initializer-clause
12086      initializer-list, identifier : initializer-clause
12087
12088    Returns a TREE_LIST.  The TREE_VALUE of each node is an expression
12089    for the initializer.  If the TREE_PURPOSE is non-NULL, it is the
12090    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
12091    as for cp_parser_initializer.  */
12092
12093 static tree
12094 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
12095 {
12096   tree initializers = NULL_TREE;
12097
12098   /* Assume all of the expressions are constant.  */
12099   *non_constant_p = false;
12100
12101   /* Parse the rest of the list.  */
12102   while (true)
12103     {
12104       cp_token *token;
12105       tree identifier;
12106       tree initializer;
12107       bool clause_non_constant_p;
12108
12109       /* If the next token is an identifier and the following one is a
12110          colon, we are looking at the GNU designated-initializer
12111          syntax.  */
12112       if (cp_parser_allow_gnu_extensions_p (parser)
12113           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
12114           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
12115         {
12116           /* Consume the identifier.  */
12117           identifier = cp_lexer_consume_token (parser->lexer)->value;
12118           /* Consume the `:'.  */
12119           cp_lexer_consume_token (parser->lexer);
12120         }
12121       else
12122         identifier = NULL_TREE;
12123
12124       /* Parse the initializer.  */
12125       initializer = cp_parser_initializer_clause (parser,
12126                                                   &clause_non_constant_p);
12127       /* If any clause is non-constant, so is the entire initializer.  */
12128       if (clause_non_constant_p)
12129         *non_constant_p = true;
12130       /* Add it to the list.  */
12131       initializers = tree_cons (identifier, initializer, initializers);
12132
12133       /* If the next token is not a comma, we have reached the end of
12134          the list.  */
12135       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12136         break;
12137
12138       /* Peek at the next token.  */
12139       token = cp_lexer_peek_nth_token (parser->lexer, 2);
12140       /* If the next token is a `}', then we're still done.  An
12141          initializer-clause can have a trailing `,' after the
12142          initializer-list and before the closing `}'.  */
12143       if (token->type == CPP_CLOSE_BRACE)
12144         break;
12145
12146       /* Consume the `,' token.  */
12147       cp_lexer_consume_token (parser->lexer);
12148     }
12149
12150   /* The initializers were built up in reverse order, so we need to
12151      reverse them now.  */
12152   return nreverse (initializers);
12153 }
12154
12155 /* Classes [gram.class] */
12156
12157 /* Parse a class-name.
12158
12159    class-name:
12160      identifier
12161      template-id
12162
12163    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
12164    to indicate that names looked up in dependent types should be
12165    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
12166    keyword has been used to indicate that the name that appears next
12167    is a template.  TYPE_P is true iff the next name should be treated
12168    as class-name, even if it is declared to be some other kind of name
12169    as well.  If CHECK_DEPENDENCY_P is FALSE, names are looked up in
12170    dependent scopes.  If CLASS_HEAD_P is TRUE, this class is the class
12171    being defined in a class-head.
12172
12173    Returns the TYPE_DECL representing the class.  */
12174
12175 static tree
12176 cp_parser_class_name (cp_parser *parser,
12177                       bool typename_keyword_p,
12178                       bool template_keyword_p,
12179                       bool type_p,
12180                       bool check_dependency_p,
12181                       bool class_head_p,
12182                       bool is_declaration)
12183 {
12184   tree decl;
12185   tree scope;
12186   bool typename_p;
12187   cp_token *token;
12188
12189   /* All class-names start with an identifier.  */
12190   token = cp_lexer_peek_token (parser->lexer);
12191   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
12192     {
12193       cp_parser_error (parser, "expected class-name");
12194       return error_mark_node;
12195     }
12196
12197   /* PARSER->SCOPE can be cleared when parsing the template-arguments
12198      to a template-id, so we save it here.  */
12199   scope = parser->scope;
12200   if (scope == error_mark_node)
12201     return error_mark_node;
12202
12203   /* Any name names a type if we're following the `typename' keyword
12204      in a qualified name where the enclosing scope is type-dependent.  */
12205   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
12206                 && dependent_type_p (scope));
12207   /* Handle the common case (an identifier, but not a template-id)
12208      efficiently.  */
12209   if (token->type == CPP_NAME
12210       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
12211     {
12212       tree identifier;
12213
12214       /* Look for the identifier.  */
12215       identifier = cp_parser_identifier (parser);
12216       /* If the next token isn't an identifier, we are certainly not
12217          looking at a class-name.  */
12218       if (identifier == error_mark_node)
12219         decl = error_mark_node;
12220       /* If we know this is a type-name, there's no need to look it
12221          up.  */
12222       else if (typename_p)
12223         decl = identifier;
12224       else
12225         {
12226           /* If the next token is a `::', then the name must be a type
12227              name.
12228
12229              [basic.lookup.qual]
12230
12231              During the lookup for a name preceding the :: scope
12232              resolution operator, object, function, and enumerator
12233              names are ignored.  */
12234           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12235             type_p = true;
12236           /* Look up the name.  */
12237           decl = cp_parser_lookup_name (parser, identifier,
12238                                         type_p,
12239                                         /*is_template=*/false,
12240                                         /*is_namespace=*/false,
12241                                         check_dependency_p);
12242         }
12243     }
12244   else
12245     {
12246       /* Try a template-id.  */
12247       decl = cp_parser_template_id (parser, template_keyword_p,
12248                                     check_dependency_p,
12249                                     is_declaration);
12250       if (decl == error_mark_node)
12251         return error_mark_node;
12252     }
12253
12254   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
12255
12256   /* If this is a typename, create a TYPENAME_TYPE.  */
12257   if (typename_p && decl != error_mark_node)
12258     {
12259       decl = make_typename_type (scope, decl, /*complain=*/1);
12260       if (decl != error_mark_node)
12261         decl = TYPE_NAME (decl);
12262     }
12263
12264   /* Check to see that it is really the name of a class.  */
12265   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
12266       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
12267       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12268     /* Situations like this:
12269
12270          template <typename T> struct A {
12271            typename T::template X<int>::I i;
12272          };
12273
12274        are problematic.  Is `T::template X<int>' a class-name?  The
12275        standard does not seem to be definitive, but there is no other
12276        valid interpretation of the following `::'.  Therefore, those
12277        names are considered class-names.  */
12278     decl = TYPE_NAME (make_typename_type (scope, decl, tf_error));
12279   else if (decl == error_mark_node
12280            || TREE_CODE (decl) != TYPE_DECL
12281            || !IS_AGGR_TYPE (TREE_TYPE (decl)))
12282     {
12283       cp_parser_error (parser, "expected class-name");
12284       return error_mark_node;
12285     }
12286
12287   return decl;
12288 }
12289
12290 /* Parse a class-specifier.
12291
12292    class-specifier:
12293      class-head { member-specification [opt] }
12294
12295    Returns the TREE_TYPE representing the class.  */
12296
12297 static tree
12298 cp_parser_class_specifier (cp_parser* parser)
12299 {
12300   cp_token *token;
12301   tree type;
12302   tree attributes = NULL_TREE;
12303   int has_trailing_semicolon;
12304   bool nested_name_specifier_p;
12305   unsigned saved_num_template_parameter_lists;
12306   bool pop_p = false;
12307
12308   push_deferring_access_checks (dk_no_deferred);
12309
12310   /* Parse the class-head.  */
12311   type = cp_parser_class_head (parser,
12312                                &nested_name_specifier_p,
12313                                &attributes);
12314   /* If the class-head was a semantic disaster, skip the entire body
12315      of the class.  */
12316   if (!type)
12317     {
12318       cp_parser_skip_to_end_of_block_or_statement (parser);
12319       pop_deferring_access_checks ();
12320       return error_mark_node;
12321     }
12322
12323   /* Look for the `{'.  */
12324   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
12325     {
12326       pop_deferring_access_checks ();
12327       return error_mark_node;
12328     }
12329
12330   /* Issue an error message if type-definitions are forbidden here.  */
12331   cp_parser_check_type_definition (parser);
12332   /* Remember that we are defining one more class.  */
12333   ++parser->num_classes_being_defined;
12334   /* Inside the class, surrounding template-parameter-lists do not
12335      apply.  */
12336   saved_num_template_parameter_lists
12337     = parser->num_template_parameter_lists;
12338   parser->num_template_parameter_lists = 0;
12339
12340   /* Start the class.  */
12341   if (nested_name_specifier_p)
12342     pop_p = push_scope (CP_DECL_CONTEXT (TYPE_MAIN_DECL (type)));
12343   type = begin_class_definition (type);
12344
12345   if (type == error_mark_node)
12346     /* If the type is erroneous, skip the entire body of the class.  */
12347     cp_parser_skip_to_closing_brace (parser);
12348   else
12349     /* Parse the member-specification.  */
12350     cp_parser_member_specification_opt (parser);
12351
12352   /* Look for the trailing `}'.  */
12353   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12354   /* We get better error messages by noticing a common problem: a
12355      missing trailing `;'.  */
12356   token = cp_lexer_peek_token (parser->lexer);
12357   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
12358   /* Look for trailing attributes to apply to this class.  */
12359   if (cp_parser_allow_gnu_extensions_p (parser))
12360     {
12361       tree sub_attr = cp_parser_attributes_opt (parser);
12362       attributes = chainon (attributes, sub_attr);
12363     }
12364   if (type != error_mark_node)
12365     type = finish_struct (type, attributes);
12366   if (pop_p)
12367     pop_scope (CP_DECL_CONTEXT (TYPE_MAIN_DECL (type)));
12368   /* If this class is not itself within the scope of another class,
12369      then we need to parse the bodies of all of the queued function
12370      definitions.  Note that the queued functions defined in a class
12371      are not always processed immediately following the
12372      class-specifier for that class.  Consider:
12373
12374        struct A {
12375          struct B { void f() { sizeof (A); } };
12376        };
12377
12378      If `f' were processed before the processing of `A' were
12379      completed, there would be no way to compute the size of `A'.
12380      Note that the nesting we are interested in here is lexical --
12381      not the semantic nesting given by TYPE_CONTEXT.  In particular,
12382      for:
12383
12384        struct A { struct B; };
12385        struct A::B { void f() { } };
12386
12387      there is no need to delay the parsing of `A::B::f'.  */
12388   if (--parser->num_classes_being_defined == 0)
12389     {
12390       tree queue_entry;
12391       tree fn;
12392       tree class_type;
12393       bool pop_p;
12394
12395       /* In a first pass, parse default arguments to the functions.
12396          Then, in a second pass, parse the bodies of the functions.
12397          This two-phased approach handles cases like:
12398
12399             struct S {
12400               void f() { g(); }
12401               void g(int i = 3);
12402             };
12403
12404          */
12405       class_type = NULL_TREE;
12406       pop_p = false;
12407       for (TREE_PURPOSE (parser->unparsed_functions_queues)
12408              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
12409            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
12410            TREE_PURPOSE (parser->unparsed_functions_queues)
12411              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
12412         {
12413           fn = TREE_VALUE (queue_entry);
12414           /* If there are default arguments that have not yet been processed,
12415              take care of them now.  */
12416           if (class_type != TREE_PURPOSE (queue_entry))
12417             {
12418               if (pop_p)
12419                 pop_scope (class_type);
12420               class_type = TREE_PURPOSE (queue_entry);
12421               pop_p = push_scope (class_type);
12422             }
12423           /* Make sure that any template parameters are in scope.  */
12424           maybe_begin_member_template_processing (fn);
12425           /* Parse the default argument expressions.  */
12426           cp_parser_late_parsing_default_args (parser, fn);
12427           /* Remove any template parameters from the symbol table.  */
12428           maybe_end_member_template_processing ();
12429         }
12430       if (pop_p)
12431         pop_scope (class_type);
12432       /* Now parse the body of the functions.  */
12433       for (TREE_VALUE (parser->unparsed_functions_queues)
12434              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
12435            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
12436            TREE_VALUE (parser->unparsed_functions_queues)
12437              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
12438         {
12439           /* Figure out which function we need to process.  */
12440           fn = TREE_VALUE (queue_entry);
12441
12442           /* A hack to prevent garbage collection.  */
12443           function_depth++;
12444
12445           /* Parse the function.  */
12446           cp_parser_late_parsing_for_member (parser, fn);
12447           function_depth--;
12448         }
12449     }
12450
12451   /* Put back any saved access checks.  */
12452   pop_deferring_access_checks ();
12453
12454   /* Restore the count of active template-parameter-lists.  */
12455   parser->num_template_parameter_lists
12456     = saved_num_template_parameter_lists;
12457
12458   return type;
12459 }
12460
12461 /* Parse a class-head.
12462
12463    class-head:
12464      class-key identifier [opt] base-clause [opt]
12465      class-key nested-name-specifier identifier base-clause [opt]
12466      class-key nested-name-specifier [opt] template-id
12467        base-clause [opt]
12468
12469    GNU Extensions:
12470      class-key attributes identifier [opt] base-clause [opt]
12471      class-key attributes nested-name-specifier identifier base-clause [opt]
12472      class-key attributes nested-name-specifier [opt] template-id
12473        base-clause [opt]
12474
12475    Returns the TYPE of the indicated class.  Sets
12476    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
12477    involving a nested-name-specifier was used, and FALSE otherwise.
12478
12479    Returns NULL_TREE if the class-head is syntactically valid, but
12480    semantically invalid in a way that means we should skip the entire
12481    body of the class.  */
12482
12483 static tree
12484 cp_parser_class_head (cp_parser* parser,
12485                       bool* nested_name_specifier_p,
12486                       tree *attributes_p)
12487 {
12488   tree nested_name_specifier;
12489   enum tag_types class_key;
12490   tree id = NULL_TREE;
12491   tree type = NULL_TREE;
12492   tree attributes;
12493   bool template_id_p = false;
12494   bool qualified_p = false;
12495   bool invalid_nested_name_p = false;
12496   bool invalid_explicit_specialization_p = false;
12497   bool pop_p = false;
12498   unsigned num_templates;
12499   tree bases;
12500
12501   /* Assume no nested-name-specifier will be present.  */
12502   *nested_name_specifier_p = false;
12503   /* Assume no template parameter lists will be used in defining the
12504      type.  */
12505   num_templates = 0;
12506
12507   /* Look for the class-key.  */
12508   class_key = cp_parser_class_key (parser);
12509   if (class_key == none_type)
12510     return error_mark_node;
12511
12512   /* Parse the attributes.  */
12513   attributes = cp_parser_attributes_opt (parser);
12514
12515   /* If the next token is `::', that is invalid -- but sometimes
12516      people do try to write:
12517
12518        struct ::S {};
12519
12520      Handle this gracefully by accepting the extra qualifier, and then
12521      issuing an error about it later if this really is a
12522      class-head.  If it turns out just to be an elaborated type
12523      specifier, remain silent.  */
12524   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
12525     qualified_p = true;
12526
12527   push_deferring_access_checks (dk_no_check);
12528
12529   /* Determine the name of the class.  Begin by looking for an
12530      optional nested-name-specifier.  */
12531   nested_name_specifier
12532     = cp_parser_nested_name_specifier_opt (parser,
12533                                            /*typename_keyword_p=*/false,
12534                                            /*check_dependency_p=*/false,
12535                                            /*type_p=*/false,
12536                                            /*is_declaration=*/false);
12537   /* If there was a nested-name-specifier, then there *must* be an
12538      identifier.  */
12539   if (nested_name_specifier)
12540     {
12541       /* Although the grammar says `identifier', it really means
12542          `class-name' or `template-name'.  You are only allowed to
12543          define a class that has already been declared with this
12544          syntax.
12545
12546          The proposed resolution for Core Issue 180 says that whever
12547          you see `class T::X' you should treat `X' as a type-name.
12548
12549          It is OK to define an inaccessible class; for example:
12550
12551            class A { class B; };
12552            class A::B {};
12553
12554          We do not know if we will see a class-name, or a
12555          template-name.  We look for a class-name first, in case the
12556          class-name is a template-id; if we looked for the
12557          template-name first we would stop after the template-name.  */
12558       cp_parser_parse_tentatively (parser);
12559       type = cp_parser_class_name (parser,
12560                                    /*typename_keyword_p=*/false,
12561                                    /*template_keyword_p=*/false,
12562                                    /*type_p=*/true,
12563                                    /*check_dependency_p=*/false,
12564                                    /*class_head_p=*/true,
12565                                    /*is_declaration=*/false);
12566       /* If that didn't work, ignore the nested-name-specifier.  */
12567       if (!cp_parser_parse_definitely (parser))
12568         {
12569           invalid_nested_name_p = true;
12570           id = cp_parser_identifier (parser);
12571           if (id == error_mark_node)
12572             id = NULL_TREE;
12573         }
12574       /* If we could not find a corresponding TYPE, treat this
12575          declaration like an unqualified declaration.  */
12576       if (type == error_mark_node)
12577         nested_name_specifier = NULL_TREE;
12578       /* Otherwise, count the number of templates used in TYPE and its
12579          containing scopes.  */
12580       else
12581         {
12582           tree scope;
12583
12584           for (scope = TREE_TYPE (type);
12585                scope && TREE_CODE (scope) != NAMESPACE_DECL;
12586                scope = (TYPE_P (scope)
12587                         ? TYPE_CONTEXT (scope)
12588                         : DECL_CONTEXT (scope)))
12589             if (TYPE_P (scope)
12590                 && CLASS_TYPE_P (scope)
12591                 && CLASSTYPE_TEMPLATE_INFO (scope)
12592                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
12593                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
12594               ++num_templates;
12595         }
12596     }
12597   /* Otherwise, the identifier is optional.  */
12598   else
12599     {
12600       /* We don't know whether what comes next is a template-id,
12601          an identifier, or nothing at all.  */
12602       cp_parser_parse_tentatively (parser);
12603       /* Check for a template-id.  */
12604       id = cp_parser_template_id (parser,
12605                                   /*template_keyword_p=*/false,
12606                                   /*check_dependency_p=*/true,
12607                                   /*is_declaration=*/true);
12608       /* If that didn't work, it could still be an identifier.  */
12609       if (!cp_parser_parse_definitely (parser))
12610         {
12611           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12612             id = cp_parser_identifier (parser);
12613           else
12614             id = NULL_TREE;
12615         }
12616       else
12617         {
12618           template_id_p = true;
12619           ++num_templates;
12620         }
12621     }
12622
12623   pop_deferring_access_checks ();
12624
12625   if (id)
12626     cp_parser_check_for_invalid_template_id (parser, id);
12627
12628   /* If it's not a `:' or a `{' then we can't really be looking at a
12629      class-head, since a class-head only appears as part of a
12630      class-specifier.  We have to detect this situation before calling
12631      xref_tag, since that has irreversible side-effects.  */
12632   if (!cp_parser_next_token_starts_class_definition_p (parser))
12633     {
12634       cp_parser_error (parser, "expected `{' or `:'");
12635       return error_mark_node;
12636     }
12637
12638   /* At this point, we're going ahead with the class-specifier, even
12639      if some other problem occurs.  */
12640   cp_parser_commit_to_tentative_parse (parser);
12641   /* Issue the error about the overly-qualified name now.  */
12642   if (qualified_p)
12643     cp_parser_error (parser,
12644                      "global qualification of class name is invalid");
12645   else if (invalid_nested_name_p)
12646     cp_parser_error (parser,
12647                      "qualified name does not name a class");
12648   else if (nested_name_specifier)
12649     {
12650       tree scope;
12651       /* Figure out in what scope the declaration is being placed.  */
12652       scope = current_scope ();
12653       if (!scope)
12654         scope = current_namespace;
12655       /* If that scope does not contain the scope in which the
12656          class was originally declared, the program is invalid.  */
12657       if (scope && !is_ancestor (scope, nested_name_specifier))
12658         {
12659           error ("declaration of `%D' in `%D' which does not "
12660                  "enclose `%D'", type, scope, nested_name_specifier);
12661           type = NULL_TREE;
12662           goto done;
12663         }
12664       /* [dcl.meaning]
12665
12666          A declarator-id shall not be qualified exception of the
12667          definition of a ... nested class outside of its class
12668          ... [or] a the definition or explicit instantiation of a
12669          class member of a namespace outside of its namespace.  */
12670       if (scope == nested_name_specifier)
12671         {
12672           pedwarn ("extra qualification ignored");
12673           nested_name_specifier = NULL_TREE;
12674           num_templates = 0;
12675         }
12676     }
12677   /* An explicit-specialization must be preceded by "template <>".  If
12678      it is not, try to recover gracefully.  */
12679   if (at_namespace_scope_p ()
12680       && parser->num_template_parameter_lists == 0
12681       && template_id_p)
12682     {
12683       error ("an explicit specialization must be preceded by 'template <>'");
12684       invalid_explicit_specialization_p = true;
12685       /* Take the same action that would have been taken by
12686          cp_parser_explicit_specialization.  */
12687       ++parser->num_template_parameter_lists;
12688       begin_specialization ();
12689     }
12690   /* There must be no "return" statements between this point and the
12691      end of this function; set "type "to the correct return value and
12692      use "goto done;" to return.  */
12693   /* Make sure that the right number of template parameters were
12694      present.  */
12695   if (!cp_parser_check_template_parameters (parser, num_templates))
12696     {
12697       /* If something went wrong, there is no point in even trying to
12698          process the class-definition.  */
12699       type = NULL_TREE;
12700       goto done;
12701     }
12702
12703   /* Look up the type.  */
12704   if (template_id_p)
12705     {
12706       type = TREE_TYPE (id);
12707       maybe_process_partial_specialization (type);
12708     }
12709   else if (!nested_name_specifier)
12710     {
12711       /* If the class was unnamed, create a dummy name.  */
12712       if (!id)
12713         id = make_anon_name ();
12714       type = xref_tag (class_key, id, /*globalize=*/false,
12715                        parser->num_template_parameter_lists);
12716     }
12717   else
12718     {
12719       tree class_type;
12720       bool pop_p = false;
12721
12722       /* Given:
12723
12724             template <typename T> struct S { struct T };
12725             template <typename T> struct S<T>::T { };
12726
12727          we will get a TYPENAME_TYPE when processing the definition of
12728          `S::T'.  We need to resolve it to the actual type before we
12729          try to define it.  */
12730       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
12731         {
12732           class_type = resolve_typename_type (TREE_TYPE (type),
12733                                               /*only_current_p=*/false);
12734           if (class_type != error_mark_node)
12735             type = TYPE_NAME (class_type);
12736           else
12737             {
12738               cp_parser_error (parser, "could not resolve typename type");
12739               type = error_mark_node;
12740             }
12741         }
12742
12743       maybe_process_partial_specialization (TREE_TYPE (type));
12744       class_type = current_class_type;
12745       /* Enter the scope indicated by the nested-name-specifier.  */
12746       if (nested_name_specifier)
12747         pop_p = push_scope (nested_name_specifier);
12748       /* Get the canonical version of this type.  */
12749       type = TYPE_MAIN_DECL (TREE_TYPE (type));
12750       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
12751           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
12752         type = push_template_decl (type);
12753       type = TREE_TYPE (type);
12754       if (nested_name_specifier)
12755         {
12756           *nested_name_specifier_p = true;
12757           if (pop_p)
12758             pop_scope (nested_name_specifier);
12759         }
12760     }
12761   /* Indicate whether this class was declared as a `class' or as a
12762      `struct'.  */
12763   if (TREE_CODE (type) == RECORD_TYPE)
12764     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
12765   cp_parser_check_class_key (class_key, type);
12766
12767   /* Enter the scope containing the class; the names of base classes
12768      should be looked up in that context.  For example, given:
12769
12770        struct A { struct B {}; struct C; };
12771        struct A::C : B {};
12772
12773      is valid.  */
12774   if (nested_name_specifier)
12775     pop_p = push_scope (nested_name_specifier);
12776
12777   bases = NULL_TREE;
12778
12779   /* Get the list of base-classes, if there is one.  */
12780   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12781     bases = cp_parser_base_clause (parser);
12782
12783   /* Process the base classes.  */
12784   xref_basetypes (type, bases);
12785
12786   /* Leave the scope given by the nested-name-specifier.  We will
12787      enter the class scope itself while processing the members.  */
12788   if (pop_p)
12789     pop_scope (nested_name_specifier);
12790
12791  done:
12792   if (invalid_explicit_specialization_p)
12793     {
12794       end_specialization ();
12795       --parser->num_template_parameter_lists;
12796     }
12797   *attributes_p = attributes;
12798   return type;
12799 }
12800
12801 /* Parse a class-key.
12802
12803    class-key:
12804      class
12805      struct
12806      union
12807
12808    Returns the kind of class-key specified, or none_type to indicate
12809    error.  */
12810
12811 static enum tag_types
12812 cp_parser_class_key (cp_parser* parser)
12813 {
12814   cp_token *token;
12815   enum tag_types tag_type;
12816
12817   /* Look for the class-key.  */
12818   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
12819   if (!token)
12820     return none_type;
12821
12822   /* Check to see if the TOKEN is a class-key.  */
12823   tag_type = cp_parser_token_is_class_key (token);
12824   if (!tag_type)
12825     cp_parser_error (parser, "expected class-key");
12826   return tag_type;
12827 }
12828
12829 /* Parse an (optional) member-specification.
12830
12831    member-specification:
12832      member-declaration member-specification [opt]
12833      access-specifier : member-specification [opt]  */
12834
12835 static void
12836 cp_parser_member_specification_opt (cp_parser* parser)
12837 {
12838   while (true)
12839     {
12840       cp_token *token;
12841       enum rid keyword;
12842
12843       /* Peek at the next token.  */
12844       token = cp_lexer_peek_token (parser->lexer);
12845       /* If it's a `}', or EOF then we've seen all the members.  */
12846       if (token->type == CPP_CLOSE_BRACE || token->type == CPP_EOF)
12847         break;
12848
12849       /* See if this token is a keyword.  */
12850       keyword = token->keyword;
12851       switch (keyword)
12852         {
12853         case RID_PUBLIC:
12854         case RID_PROTECTED:
12855         case RID_PRIVATE:
12856           /* Consume the access-specifier.  */
12857           cp_lexer_consume_token (parser->lexer);
12858           /* Remember which access-specifier is active.  */
12859           current_access_specifier = token->value;
12860           /* Look for the `:'.  */
12861           cp_parser_require (parser, CPP_COLON, "`:'");
12862           break;
12863
12864         default:
12865           /* Otherwise, the next construction must be a
12866              member-declaration.  */
12867           cp_parser_member_declaration (parser);
12868         }
12869     }
12870 }
12871
12872 /* Parse a member-declaration.
12873
12874    member-declaration:
12875      decl-specifier-seq [opt] member-declarator-list [opt] ;
12876      function-definition ; [opt]
12877      :: [opt] nested-name-specifier template [opt] unqualified-id ;
12878      using-declaration
12879      template-declaration
12880
12881    member-declarator-list:
12882      member-declarator
12883      member-declarator-list , member-declarator
12884
12885    member-declarator:
12886      declarator pure-specifier [opt]
12887      declarator constant-initializer [opt]
12888      identifier [opt] : constant-expression
12889
12890    GNU Extensions:
12891
12892    member-declaration:
12893      __extension__ member-declaration
12894
12895    member-declarator:
12896      declarator attributes [opt] pure-specifier [opt]
12897      declarator attributes [opt] constant-initializer [opt]
12898      identifier [opt] attributes [opt] : constant-expression  */
12899
12900 static void
12901 cp_parser_member_declaration (cp_parser* parser)
12902 {
12903   cp_decl_specifier_seq decl_specifiers;
12904   tree prefix_attributes;
12905   tree decl;
12906   int declares_class_or_enum;
12907   bool friend_p;
12908   cp_token *token;
12909   int saved_pedantic;
12910
12911   /* Check for the `__extension__' keyword.  */
12912   if (cp_parser_extension_opt (parser, &saved_pedantic))
12913     {
12914       /* Recurse.  */
12915       cp_parser_member_declaration (parser);
12916       /* Restore the old value of the PEDANTIC flag.  */
12917       pedantic = saved_pedantic;
12918
12919       return;
12920     }
12921
12922   /* Check for a template-declaration.  */
12923   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
12924     {
12925       /* Parse the template-declaration.  */
12926       cp_parser_template_declaration (parser, /*member_p=*/true);
12927
12928       return;
12929     }
12930
12931   /* Check for a using-declaration.  */
12932   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
12933     {
12934       /* Parse the using-declaration.  */
12935       cp_parser_using_declaration (parser);
12936
12937       return;
12938     }
12939
12940   /* Parse the decl-specifier-seq.  */
12941   cp_parser_decl_specifier_seq (parser,
12942                                 CP_PARSER_FLAGS_OPTIONAL,
12943                                 &decl_specifiers,
12944                                 &declares_class_or_enum);
12945   prefix_attributes = decl_specifiers.attributes;
12946   decl_specifiers.attributes = NULL_TREE;
12947   /* Check for an invalid type-name.  */
12948   if (cp_parser_parse_and_diagnose_invalid_type_name (parser))
12949     return;
12950   /* If there is no declarator, then the decl-specifier-seq should
12951      specify a type.  */
12952   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
12953     {
12954       /* If there was no decl-specifier-seq, and the next token is a
12955          `;', then we have something like:
12956
12957            struct S { ; };
12958
12959          [class.mem]
12960
12961          Each member-declaration shall declare at least one member
12962          name of the class.  */
12963       if (!decl_specifiers.any_specifiers_p)
12964         {
12965           if (pedantic)
12966             pedwarn ("extra semicolon");
12967         }
12968       else
12969         {
12970           tree type;
12971
12972           /* See if this declaration is a friend.  */
12973           friend_p = cp_parser_friend_p (&decl_specifiers);
12974           /* If there were decl-specifiers, check to see if there was
12975              a class-declaration.  */
12976           type = check_tag_decl (&decl_specifiers);
12977           /* Nested classes have already been added to the class, but
12978              a `friend' needs to be explicitly registered.  */
12979           if (friend_p)
12980             {
12981               /* If the `friend' keyword was present, the friend must
12982                  be introduced with a class-key.  */
12983                if (!declares_class_or_enum)
12984                  error ("a class-key must be used when declaring a friend");
12985                /* In this case:
12986
12987                     template <typename T> struct A {
12988                       friend struct A<T>::B;
12989                     };
12990
12991                   A<T>::B will be represented by a TYPENAME_TYPE, and
12992                   therefore not recognized by check_tag_decl.  */
12993                if (!type
12994                    && decl_specifiers.type
12995                    && TYPE_P (decl_specifiers.type))
12996                  type = decl_specifiers.type;
12997                if (!type || !TYPE_P (type))
12998                  error ("friend declaration does not name a class or "
12999                         "function");
13000                else
13001                  make_friend_class (current_class_type, type,
13002                                     /*complain=*/true);
13003             }
13004           /* If there is no TYPE, an error message will already have
13005              been issued.  */
13006           else if (!type || type == error_mark_node)
13007             ;
13008           /* An anonymous aggregate has to be handled specially; such
13009              a declaration really declares a data member (with a
13010              particular type), as opposed to a nested class.  */
13011           else if (ANON_AGGR_TYPE_P (type))
13012             {
13013               /* Remove constructors and such from TYPE, now that we
13014                  know it is an anonymous aggregate.  */
13015               fixup_anonymous_aggr (type);
13016               /* And make the corresponding data member.  */
13017               decl = build_decl (FIELD_DECL, NULL_TREE, type);
13018               /* Add it to the class.  */
13019               finish_member_declaration (decl);
13020             }
13021           else
13022             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
13023         }
13024     }
13025   else
13026     {
13027       /* See if these declarations will be friends.  */
13028       friend_p = cp_parser_friend_p (&decl_specifiers);
13029
13030       /* Keep going until we hit the `;' at the end of the
13031          declaration.  */
13032       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13033         {
13034           tree attributes = NULL_TREE;
13035           tree first_attribute;
13036
13037           /* Peek at the next token.  */
13038           token = cp_lexer_peek_token (parser->lexer);
13039
13040           /* Check for a bitfield declaration.  */
13041           if (token->type == CPP_COLON
13042               || (token->type == CPP_NAME
13043                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
13044                   == CPP_COLON))
13045             {
13046               tree identifier;
13047               tree width;
13048
13049               /* Get the name of the bitfield.  Note that we cannot just
13050                  check TOKEN here because it may have been invalidated by
13051                  the call to cp_lexer_peek_nth_token above.  */
13052               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
13053                 identifier = cp_parser_identifier (parser);
13054               else
13055                 identifier = NULL_TREE;
13056
13057               /* Consume the `:' token.  */
13058               cp_lexer_consume_token (parser->lexer);
13059               /* Get the width of the bitfield.  */
13060               width
13061                 = cp_parser_constant_expression (parser,
13062                                                  /*allow_non_constant=*/false,
13063                                                  NULL);
13064
13065               /* Look for attributes that apply to the bitfield.  */
13066               attributes = cp_parser_attributes_opt (parser);
13067               /* Remember which attributes are prefix attributes and
13068                  which are not.  */
13069               first_attribute = attributes;
13070               /* Combine the attributes.  */
13071               attributes = chainon (prefix_attributes, attributes);
13072
13073               /* Create the bitfield declaration.  */
13074               decl = grokbitfield (identifier
13075                                    ? make_id_declarator (identifier)
13076                                    : NULL,
13077                                    &decl_specifiers,
13078                                    width);
13079               /* Apply the attributes.  */
13080               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
13081             }
13082           else
13083             {
13084               cp_declarator *declarator;
13085               tree initializer;
13086               tree asm_specification;
13087               int ctor_dtor_or_conv_p;
13088
13089               /* Parse the declarator.  */
13090               declarator
13091                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13092                                         &ctor_dtor_or_conv_p,
13093                                         /*parenthesized_p=*/NULL);
13094
13095               /* If something went wrong parsing the declarator, make sure
13096                  that we at least consume some tokens.  */
13097               if (declarator == cp_error_declarator)
13098                 {
13099                   /* Skip to the end of the statement.  */
13100                   cp_parser_skip_to_end_of_statement (parser);
13101                   /* If the next token is not a semicolon, that is
13102                      probably because we just skipped over the body of
13103                      a function.  So, we consume a semicolon if
13104                      present, but do not issue an error message if it
13105                      is not present.  */
13106                   if (cp_lexer_next_token_is (parser->lexer,
13107                                               CPP_SEMICOLON))
13108                     cp_lexer_consume_token (parser->lexer);
13109                   return;
13110                 }
13111
13112               cp_parser_check_for_definition_in_return_type
13113                 (declarator, declares_class_or_enum);
13114
13115               /* Look for an asm-specification.  */
13116               asm_specification = cp_parser_asm_specification_opt (parser);
13117               /* Look for attributes that apply to the declaration.  */
13118               attributes = cp_parser_attributes_opt (parser);
13119               /* Remember which attributes are prefix attributes and
13120                  which are not.  */
13121               first_attribute = attributes;
13122               /* Combine the attributes.  */
13123               attributes = chainon (prefix_attributes, attributes);
13124
13125               /* If it's an `=', then we have a constant-initializer or a
13126                  pure-specifier.  It is not correct to parse the
13127                  initializer before registering the member declaration
13128                  since the member declaration should be in scope while
13129                  its initializer is processed.  However, the rest of the
13130                  front end does not yet provide an interface that allows
13131                  us to handle this correctly.  */
13132               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13133                 {
13134                   /* In [class.mem]:
13135
13136                      A pure-specifier shall be used only in the declaration of
13137                      a virtual function.
13138
13139                      A member-declarator can contain a constant-initializer
13140                      only if it declares a static member of integral or
13141                      enumeration type.
13142
13143                      Therefore, if the DECLARATOR is for a function, we look
13144                      for a pure-specifier; otherwise, we look for a
13145                      constant-initializer.  When we call `grokfield', it will
13146                      perform more stringent semantics checks.  */
13147                   if (declarator->kind == cdk_function)
13148                     initializer = cp_parser_pure_specifier (parser);
13149                   else
13150                     /* Parse the initializer.  */
13151                     initializer = cp_parser_constant_initializer (parser);
13152                 }
13153               /* Otherwise, there is no initializer.  */
13154               else
13155                 initializer = NULL_TREE;
13156
13157               /* See if we are probably looking at a function
13158                  definition.  We are certainly not looking at at a
13159                  member-declarator.  Calling `grokfield' has
13160                  side-effects, so we must not do it unless we are sure
13161                  that we are looking at a member-declarator.  */
13162               if (cp_parser_token_starts_function_definition_p
13163                   (cp_lexer_peek_token (parser->lexer)))
13164                 {
13165                   /* The grammar does not allow a pure-specifier to be
13166                      used when a member function is defined.  (It is
13167                      possible that this fact is an oversight in the
13168                      standard, since a pure function may be defined
13169                      outside of the class-specifier.  */
13170                   if (initializer)
13171                     error ("pure-specifier on function-definition");
13172                   decl = cp_parser_save_member_function_body (parser,
13173                                                               &decl_specifiers,
13174                                                               declarator,
13175                                                               attributes);
13176                   /* If the member was not a friend, declare it here.  */
13177                   if (!friend_p)
13178                     finish_member_declaration (decl);
13179                   /* Peek at the next token.  */
13180                   token = cp_lexer_peek_token (parser->lexer);
13181                   /* If the next token is a semicolon, consume it.  */
13182                   if (token->type == CPP_SEMICOLON)
13183                     cp_lexer_consume_token (parser->lexer);
13184                   return;
13185                 }
13186               else
13187                 {
13188                   /* Create the declaration.  */
13189                   decl = grokfield (declarator, &decl_specifiers,
13190                                     initializer, asm_specification,
13191                                     attributes);
13192                   /* Any initialization must have been from a
13193                      constant-expression.  */
13194                   if (decl && TREE_CODE (decl) == VAR_DECL && initializer)
13195                     DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
13196                 }
13197             }
13198
13199           /* Reset PREFIX_ATTRIBUTES.  */
13200           while (attributes && TREE_CHAIN (attributes) != first_attribute)
13201             attributes = TREE_CHAIN (attributes);
13202           if (attributes)
13203             TREE_CHAIN (attributes) = NULL_TREE;
13204
13205           /* If there is any qualification still in effect, clear it
13206              now; we will be starting fresh with the next declarator.  */
13207           parser->scope = NULL_TREE;
13208           parser->qualifying_scope = NULL_TREE;
13209           parser->object_scope = NULL_TREE;
13210           /* If it's a `,', then there are more declarators.  */
13211           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
13212             cp_lexer_consume_token (parser->lexer);
13213           /* If the next token isn't a `;', then we have a parse error.  */
13214           else if (cp_lexer_next_token_is_not (parser->lexer,
13215                                                CPP_SEMICOLON))
13216             {
13217               cp_parser_error (parser, "expected `;'");
13218               /* Skip tokens until we find a `;'.  */
13219               cp_parser_skip_to_end_of_statement (parser);
13220
13221               break;
13222             }
13223
13224           if (decl)
13225             {
13226               /* Add DECL to the list of members.  */
13227               if (!friend_p)
13228                 finish_member_declaration (decl);
13229
13230               if (TREE_CODE (decl) == FUNCTION_DECL)
13231                 cp_parser_save_default_args (parser, decl);
13232             }
13233         }
13234     }
13235
13236   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
13237 }
13238
13239 /* Parse a pure-specifier.
13240
13241    pure-specifier:
13242      = 0
13243
13244    Returns INTEGER_ZERO_NODE if a pure specifier is found.
13245    Otherwise, ERROR_MARK_NODE is returned.  */
13246
13247 static tree
13248 cp_parser_pure_specifier (cp_parser* parser)
13249 {
13250   cp_token *token;
13251
13252   /* Look for the `=' token.  */
13253   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13254     return error_mark_node;
13255   /* Look for the `0' token.  */
13256   token = cp_parser_require (parser, CPP_NUMBER, "`0'");
13257   /* Unfortunately, this will accept `0L' and `0x00' as well.  We need
13258      to get information from the lexer about how the number was
13259      spelled in order to fix this problem.  */
13260   if (!token || !integer_zerop (token->value))
13261     return error_mark_node;
13262
13263   return integer_zero_node;
13264 }
13265
13266 /* Parse a constant-initializer.
13267
13268    constant-initializer:
13269      = constant-expression
13270
13271    Returns a representation of the constant-expression.  */
13272
13273 static tree
13274 cp_parser_constant_initializer (cp_parser* parser)
13275 {
13276   /* Look for the `=' token.  */
13277   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13278     return error_mark_node;
13279
13280   /* It is invalid to write:
13281
13282        struct S { static const int i = { 7 }; };
13283
13284      */
13285   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13286     {
13287       cp_parser_error (parser,
13288                        "a brace-enclosed initializer is not allowed here");
13289       /* Consume the opening brace.  */
13290       cp_lexer_consume_token (parser->lexer);
13291       /* Skip the initializer.  */
13292       cp_parser_skip_to_closing_brace (parser);
13293       /* Look for the trailing `}'.  */
13294       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13295
13296       return error_mark_node;
13297     }
13298
13299   return cp_parser_constant_expression (parser,
13300                                         /*allow_non_constant=*/false,
13301                                         NULL);
13302 }
13303
13304 /* Derived classes [gram.class.derived] */
13305
13306 /* Parse a base-clause.
13307
13308    base-clause:
13309      : base-specifier-list
13310
13311    base-specifier-list:
13312      base-specifier
13313      base-specifier-list , base-specifier
13314
13315    Returns a TREE_LIST representing the base-classes, in the order in
13316    which they were declared.  The representation of each node is as
13317    described by cp_parser_base_specifier.
13318
13319    In the case that no bases are specified, this function will return
13320    NULL_TREE, not ERROR_MARK_NODE.  */
13321
13322 static tree
13323 cp_parser_base_clause (cp_parser* parser)
13324 {
13325   tree bases = NULL_TREE;
13326
13327   /* Look for the `:' that begins the list.  */
13328   cp_parser_require (parser, CPP_COLON, "`:'");
13329
13330   /* Scan the base-specifier-list.  */
13331   while (true)
13332     {
13333       cp_token *token;
13334       tree base;
13335
13336       /* Look for the base-specifier.  */
13337       base = cp_parser_base_specifier (parser);
13338       /* Add BASE to the front of the list.  */
13339       if (base != error_mark_node)
13340         {
13341           TREE_CHAIN (base) = bases;
13342           bases = base;
13343         }
13344       /* Peek at the next token.  */
13345       token = cp_lexer_peek_token (parser->lexer);
13346       /* If it's not a comma, then the list is complete.  */
13347       if (token->type != CPP_COMMA)
13348         break;
13349       /* Consume the `,'.  */
13350       cp_lexer_consume_token (parser->lexer);
13351     }
13352
13353   /* PARSER->SCOPE may still be non-NULL at this point, if the last
13354      base class had a qualified name.  However, the next name that
13355      appears is certainly not qualified.  */
13356   parser->scope = NULL_TREE;
13357   parser->qualifying_scope = NULL_TREE;
13358   parser->object_scope = NULL_TREE;
13359
13360   return nreverse (bases);
13361 }
13362
13363 /* Parse a base-specifier.
13364
13365    base-specifier:
13366      :: [opt] nested-name-specifier [opt] class-name
13367      virtual access-specifier [opt] :: [opt] nested-name-specifier
13368        [opt] class-name
13369      access-specifier virtual [opt] :: [opt] nested-name-specifier
13370        [opt] class-name
13371
13372    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
13373    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
13374    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
13375    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
13376
13377 static tree
13378 cp_parser_base_specifier (cp_parser* parser)
13379 {
13380   cp_token *token;
13381   bool done = false;
13382   bool virtual_p = false;
13383   bool duplicate_virtual_error_issued_p = false;
13384   bool duplicate_access_error_issued_p = false;
13385   bool class_scope_p, template_p;
13386   tree access = access_default_node;
13387   tree type;
13388
13389   /* Process the optional `virtual' and `access-specifier'.  */
13390   while (!done)
13391     {
13392       /* Peek at the next token.  */
13393       token = cp_lexer_peek_token (parser->lexer);
13394       /* Process `virtual'.  */
13395       switch (token->keyword)
13396         {
13397         case RID_VIRTUAL:
13398           /* If `virtual' appears more than once, issue an error.  */
13399           if (virtual_p && !duplicate_virtual_error_issued_p)
13400             {
13401               cp_parser_error (parser,
13402                                "`virtual' specified more than once in base-specified");
13403               duplicate_virtual_error_issued_p = true;
13404             }
13405
13406           virtual_p = true;
13407
13408           /* Consume the `virtual' token.  */
13409           cp_lexer_consume_token (parser->lexer);
13410
13411           break;
13412
13413         case RID_PUBLIC:
13414         case RID_PROTECTED:
13415         case RID_PRIVATE:
13416           /* If more than one access specifier appears, issue an
13417              error.  */
13418           if (access != access_default_node
13419               && !duplicate_access_error_issued_p)
13420             {
13421               cp_parser_error (parser,
13422                                "more than one access specifier in base-specified");
13423               duplicate_access_error_issued_p = true;
13424             }
13425
13426           access = ridpointers[(int) token->keyword];
13427
13428           /* Consume the access-specifier.  */
13429           cp_lexer_consume_token (parser->lexer);
13430
13431           break;
13432
13433         default:
13434           done = true;
13435           break;
13436         }
13437     }
13438   /* It is not uncommon to see programs mechanically, erroneously, use
13439      the 'typename' keyword to denote (dependent) qualified types
13440      as base classes.  */
13441   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
13442     {
13443       if (!processing_template_decl)
13444         error ("keyword `typename' not allowed outside of templates");
13445       else
13446         error ("keyword `typename' not allowed in this context "
13447                "(the base class is implicitly a type)");
13448       cp_lexer_consume_token (parser->lexer);
13449     }
13450
13451   /* Look for the optional `::' operator.  */
13452   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
13453   /* Look for the nested-name-specifier.  The simplest way to
13454      implement:
13455
13456        [temp.res]
13457
13458        The keyword `typename' is not permitted in a base-specifier or
13459        mem-initializer; in these contexts a qualified name that
13460        depends on a template-parameter is implicitly assumed to be a
13461        type name.
13462
13463      is to pretend that we have seen the `typename' keyword at this
13464      point.  */
13465   cp_parser_nested_name_specifier_opt (parser,
13466                                        /*typename_keyword_p=*/true,
13467                                        /*check_dependency_p=*/true,
13468                                        /*type_p=*/true,
13469                                        /*is_declaration=*/true);
13470   /* If the base class is given by a qualified name, assume that names
13471      we see are type names or templates, as appropriate.  */
13472   class_scope_p = (parser->scope && TYPE_P (parser->scope));
13473   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
13474
13475   /* Finally, look for the class-name.  */
13476   type = cp_parser_class_name (parser,
13477                                class_scope_p,
13478                                template_p,
13479                                /*type_p=*/true,
13480                                /*check_dependency_p=*/true,
13481                                /*class_head_p=*/false,
13482                                /*is_declaration=*/true);
13483
13484   if (type == error_mark_node)
13485     return error_mark_node;
13486
13487   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
13488 }
13489
13490 /* Exception handling [gram.exception] */
13491
13492 /* Parse an (optional) exception-specification.
13493
13494    exception-specification:
13495      throw ( type-id-list [opt] )
13496
13497    Returns a TREE_LIST representing the exception-specification.  The
13498    TREE_VALUE of each node is a type.  */
13499
13500 static tree
13501 cp_parser_exception_specification_opt (cp_parser* parser)
13502 {
13503   cp_token *token;
13504   tree type_id_list;
13505
13506   /* Peek at the next token.  */
13507   token = cp_lexer_peek_token (parser->lexer);
13508   /* If it's not `throw', then there's no exception-specification.  */
13509   if (!cp_parser_is_keyword (token, RID_THROW))
13510     return NULL_TREE;
13511
13512   /* Consume the `throw'.  */
13513   cp_lexer_consume_token (parser->lexer);
13514
13515   /* Look for the `('.  */
13516   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13517
13518   /* Peek at the next token.  */
13519   token = cp_lexer_peek_token (parser->lexer);
13520   /* If it's not a `)', then there is a type-id-list.  */
13521   if (token->type != CPP_CLOSE_PAREN)
13522     {
13523       const char *saved_message;
13524
13525       /* Types may not be defined in an exception-specification.  */
13526       saved_message = parser->type_definition_forbidden_message;
13527       parser->type_definition_forbidden_message
13528         = "types may not be defined in an exception-specification";
13529       /* Parse the type-id-list.  */
13530       type_id_list = cp_parser_type_id_list (parser);
13531       /* Restore the saved message.  */
13532       parser->type_definition_forbidden_message = saved_message;
13533     }
13534   else
13535     type_id_list = empty_except_spec;
13536
13537   /* Look for the `)'.  */
13538   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13539
13540   return type_id_list;
13541 }
13542
13543 /* Parse an (optional) type-id-list.
13544
13545    type-id-list:
13546      type-id
13547      type-id-list , type-id
13548
13549    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
13550    in the order that the types were presented.  */
13551
13552 static tree
13553 cp_parser_type_id_list (cp_parser* parser)
13554 {
13555   tree types = NULL_TREE;
13556
13557   while (true)
13558     {
13559       cp_token *token;
13560       tree type;
13561
13562       /* Get the next type-id.  */
13563       type = cp_parser_type_id (parser);
13564       /* Add it to the list.  */
13565       types = add_exception_specifier (types, type, /*complain=*/1);
13566       /* Peek at the next token.  */
13567       token = cp_lexer_peek_token (parser->lexer);
13568       /* If it is not a `,', we are done.  */
13569       if (token->type != CPP_COMMA)
13570         break;
13571       /* Consume the `,'.  */
13572       cp_lexer_consume_token (parser->lexer);
13573     }
13574
13575   return nreverse (types);
13576 }
13577
13578 /* Parse a try-block.
13579
13580    try-block:
13581      try compound-statement handler-seq  */
13582
13583 static tree
13584 cp_parser_try_block (cp_parser* parser)
13585 {
13586   tree try_block;
13587
13588   cp_parser_require_keyword (parser, RID_TRY, "`try'");
13589   try_block = begin_try_block ();
13590   cp_parser_compound_statement (parser, NULL, true);
13591   finish_try_block (try_block);
13592   cp_parser_handler_seq (parser);
13593   finish_handler_sequence (try_block);
13594
13595   return try_block;
13596 }
13597
13598 /* Parse a function-try-block.
13599
13600    function-try-block:
13601      try ctor-initializer [opt] function-body handler-seq  */
13602
13603 static bool
13604 cp_parser_function_try_block (cp_parser* parser)
13605 {
13606   tree try_block;
13607   bool ctor_initializer_p;
13608
13609   /* Look for the `try' keyword.  */
13610   if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
13611     return false;
13612   /* Let the rest of the front-end know where we are.  */
13613   try_block = begin_function_try_block ();
13614   /* Parse the function-body.  */
13615   ctor_initializer_p
13616     = cp_parser_ctor_initializer_opt_and_function_body (parser);
13617   /* We're done with the `try' part.  */
13618   finish_function_try_block (try_block);
13619   /* Parse the handlers.  */
13620   cp_parser_handler_seq (parser);
13621   /* We're done with the handlers.  */
13622   finish_function_handler_sequence (try_block);
13623
13624   return ctor_initializer_p;
13625 }
13626
13627 /* Parse a handler-seq.
13628
13629    handler-seq:
13630      handler handler-seq [opt]  */
13631
13632 static void
13633 cp_parser_handler_seq (cp_parser* parser)
13634 {
13635   while (true)
13636     {
13637       cp_token *token;
13638
13639       /* Parse the handler.  */
13640       cp_parser_handler (parser);
13641       /* Peek at the next token.  */
13642       token = cp_lexer_peek_token (parser->lexer);
13643       /* If it's not `catch' then there are no more handlers.  */
13644       if (!cp_parser_is_keyword (token, RID_CATCH))
13645         break;
13646     }
13647 }
13648
13649 /* Parse a handler.
13650
13651    handler:
13652      catch ( exception-declaration ) compound-statement  */
13653
13654 static void
13655 cp_parser_handler (cp_parser* parser)
13656 {
13657   tree handler;
13658   tree declaration;
13659
13660   cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
13661   handler = begin_handler ();
13662   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13663   declaration = cp_parser_exception_declaration (parser);
13664   finish_handler_parms (declaration, handler);
13665   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13666   cp_parser_compound_statement (parser, NULL, false);
13667   finish_handler (handler);
13668 }
13669
13670 /* Parse an exception-declaration.
13671
13672    exception-declaration:
13673      type-specifier-seq declarator
13674      type-specifier-seq abstract-declarator
13675      type-specifier-seq
13676      ...
13677
13678    Returns a VAR_DECL for the declaration, or NULL_TREE if the
13679    ellipsis variant is used.  */
13680
13681 static tree
13682 cp_parser_exception_declaration (cp_parser* parser)
13683 {
13684   tree decl;
13685   cp_decl_specifier_seq type_specifiers;
13686   cp_declarator *declarator;
13687   const char *saved_message;
13688
13689   /* If it's an ellipsis, it's easy to handle.  */
13690   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
13691     {
13692       /* Consume the `...' token.  */
13693       cp_lexer_consume_token (parser->lexer);
13694       return NULL_TREE;
13695     }
13696
13697   /* Types may not be defined in exception-declarations.  */
13698   saved_message = parser->type_definition_forbidden_message;
13699   parser->type_definition_forbidden_message
13700     = "types may not be defined in exception-declarations";
13701
13702   /* Parse the type-specifier-seq.  */
13703   cp_parser_type_specifier_seq (parser, &type_specifiers);
13704   /* If it's a `)', then there is no declarator.  */
13705   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
13706     declarator = NULL;
13707   else
13708     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
13709                                        /*ctor_dtor_or_conv_p=*/NULL,
13710                                        /*parenthesized_p=*/NULL);
13711
13712   /* Restore the saved message.  */
13713   parser->type_definition_forbidden_message = saved_message;
13714
13715   if (type_specifiers.any_specifiers_p)
13716     {
13717       decl = grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
13718       if (decl == NULL_TREE)
13719         error ("invalid catch parameter");
13720     }
13721   else
13722     decl = NULL_TREE;
13723
13724   return decl;
13725 }
13726
13727 /* Parse a throw-expression.
13728
13729    throw-expression:
13730      throw assignment-expression [opt]
13731
13732    Returns a THROW_EXPR representing the throw-expression.  */
13733
13734 static tree
13735 cp_parser_throw_expression (cp_parser* parser)
13736 {
13737   tree expression;
13738   cp_token* token;
13739
13740   cp_parser_require_keyword (parser, RID_THROW, "`throw'");
13741   token = cp_lexer_peek_token (parser->lexer);
13742   /* Figure out whether or not there is an assignment-expression
13743      following the "throw" keyword.  */
13744   if (token->type == CPP_COMMA
13745       || token->type == CPP_SEMICOLON
13746       || token->type == CPP_CLOSE_PAREN
13747       || token->type == CPP_CLOSE_SQUARE
13748       || token->type == CPP_CLOSE_BRACE
13749       || token->type == CPP_COLON)
13750     expression = NULL_TREE;
13751   else
13752     expression = cp_parser_assignment_expression (parser);
13753
13754   return build_throw (expression);
13755 }
13756
13757 /* GNU Extensions */
13758
13759 /* Parse an (optional) asm-specification.
13760
13761    asm-specification:
13762      asm ( string-literal )
13763
13764    If the asm-specification is present, returns a STRING_CST
13765    corresponding to the string-literal.  Otherwise, returns
13766    NULL_TREE.  */
13767
13768 static tree
13769 cp_parser_asm_specification_opt (cp_parser* parser)
13770 {
13771   cp_token *token;
13772   tree asm_specification;
13773
13774   /* Peek at the next token.  */
13775   token = cp_lexer_peek_token (parser->lexer);
13776   /* If the next token isn't the `asm' keyword, then there's no
13777      asm-specification.  */
13778   if (!cp_parser_is_keyword (token, RID_ASM))
13779     return NULL_TREE;
13780
13781   /* Consume the `asm' token.  */
13782   cp_lexer_consume_token (parser->lexer);
13783   /* Look for the `('.  */
13784   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13785
13786   /* Look for the string-literal.  */
13787   token = cp_parser_require (parser, CPP_STRING, "string-literal");
13788   if (token)
13789     asm_specification = token->value;
13790   else
13791     asm_specification = NULL_TREE;
13792
13793   /* Look for the `)'.  */
13794   cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
13795
13796   return asm_specification;
13797 }
13798
13799 /* Parse an asm-operand-list.
13800
13801    asm-operand-list:
13802      asm-operand
13803      asm-operand-list , asm-operand
13804
13805    asm-operand:
13806      string-literal ( expression )
13807      [ string-literal ] string-literal ( expression )
13808
13809    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
13810    each node is the expression.  The TREE_PURPOSE is itself a
13811    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
13812    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
13813    is a STRING_CST for the string literal before the parenthesis.  */
13814
13815 static tree
13816 cp_parser_asm_operand_list (cp_parser* parser)
13817 {
13818   tree asm_operands = NULL_TREE;
13819
13820   while (true)
13821     {
13822       tree string_literal;
13823       tree expression;
13824       tree name;
13825       cp_token *token;
13826
13827       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
13828         {
13829           /* Consume the `[' token.  */
13830           cp_lexer_consume_token (parser->lexer);
13831           /* Read the operand name.  */
13832           name = cp_parser_identifier (parser);
13833           if (name != error_mark_node)
13834             name = build_string (IDENTIFIER_LENGTH (name),
13835                                  IDENTIFIER_POINTER (name));
13836           /* Look for the closing `]'.  */
13837           cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
13838         }
13839       else
13840         name = NULL_TREE;
13841       /* Look for the string-literal.  */
13842       token = cp_parser_require (parser, CPP_STRING, "string-literal");
13843       string_literal = token ? token->value : error_mark_node;
13844       c_lex_string_translate = 1;
13845       /* Look for the `('.  */
13846       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13847       /* Parse the expression.  */
13848       expression = cp_parser_expression (parser);
13849       /* Look for the `)'.  */
13850       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13851       c_lex_string_translate = 0;
13852       /* Add this operand to the list.  */
13853       asm_operands = tree_cons (build_tree_list (name, string_literal),
13854                                 expression,
13855                                 asm_operands);
13856       /* If the next token is not a `,', there are no more
13857          operands.  */
13858       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13859         break;
13860       /* Consume the `,'.  */
13861       cp_lexer_consume_token (parser->lexer);
13862     }
13863
13864   return nreverse (asm_operands);
13865 }
13866
13867 /* Parse an asm-clobber-list.
13868
13869    asm-clobber-list:
13870      string-literal
13871      asm-clobber-list , string-literal
13872
13873    Returns a TREE_LIST, indicating the clobbers in the order that they
13874    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
13875
13876 static tree
13877 cp_parser_asm_clobber_list (cp_parser* parser)
13878 {
13879   tree clobbers = NULL_TREE;
13880
13881   while (true)
13882     {
13883       cp_token *token;
13884       tree string_literal;
13885
13886       /* Look for the string literal.  */
13887       token = cp_parser_require (parser, CPP_STRING, "string-literal");
13888       string_literal = token ? token->value : error_mark_node;
13889       /* Add it to the list.  */
13890       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
13891       /* If the next token is not a `,', then the list is
13892          complete.  */
13893       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13894         break;
13895       /* Consume the `,' token.  */
13896       cp_lexer_consume_token (parser->lexer);
13897     }
13898
13899   return clobbers;
13900 }
13901
13902 /* Parse an (optional) series of attributes.
13903
13904    attributes:
13905      attributes attribute
13906
13907    attribute:
13908      __attribute__ (( attribute-list [opt] ))
13909
13910    The return value is as for cp_parser_attribute_list.  */
13911
13912 static tree
13913 cp_parser_attributes_opt (cp_parser* parser)
13914 {
13915   tree attributes = NULL_TREE;
13916
13917   while (true)
13918     {
13919       cp_token *token;
13920       tree attribute_list;
13921
13922       /* Peek at the next token.  */
13923       token = cp_lexer_peek_token (parser->lexer);
13924       /* If it's not `__attribute__', then we're done.  */
13925       if (token->keyword != RID_ATTRIBUTE)
13926         break;
13927
13928       /* Consume the `__attribute__' keyword.  */
13929       cp_lexer_consume_token (parser->lexer);
13930       /* Look for the two `(' tokens.  */
13931       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13932       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13933
13934       /* Peek at the next token.  */
13935       token = cp_lexer_peek_token (parser->lexer);
13936       if (token->type != CPP_CLOSE_PAREN)
13937         /* Parse the attribute-list.  */
13938         attribute_list = cp_parser_attribute_list (parser);
13939       else
13940         /* If the next token is a `)', then there is no attribute
13941            list.  */
13942         attribute_list = NULL;
13943
13944       /* Look for the two `)' tokens.  */
13945       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13946       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13947
13948       /* Add these new attributes to the list.  */
13949       attributes = chainon (attributes, attribute_list);
13950     }
13951
13952   return attributes;
13953 }
13954
13955 /* Parse an attribute-list.
13956
13957    attribute-list:
13958      attribute
13959      attribute-list , attribute
13960
13961    attribute:
13962      identifier
13963      identifier ( identifier )
13964      identifier ( identifier , expression-list )
13965      identifier ( expression-list )
13966
13967    Returns a TREE_LIST.  Each node corresponds to an attribute.  THe
13968    TREE_PURPOSE of each node is the identifier indicating which
13969    attribute is in use.  The TREE_VALUE represents the arguments, if
13970    any.  */
13971
13972 static tree
13973 cp_parser_attribute_list (cp_parser* parser)
13974 {
13975   tree attribute_list = NULL_TREE;
13976
13977   c_lex_string_translate = 0;
13978   while (true)
13979     {
13980       cp_token *token;
13981       tree identifier;
13982       tree attribute;
13983
13984       /* Look for the identifier.  We also allow keywords here; for
13985          example `__attribute__ ((const))' is legal.  */
13986       token = cp_lexer_peek_token (parser->lexer);
13987       if (token->type != CPP_NAME
13988           && token->type != CPP_KEYWORD)
13989         return error_mark_node;
13990       /* Consume the token.  */
13991       token = cp_lexer_consume_token (parser->lexer);
13992
13993       /* Save away the identifier that indicates which attribute this is.  */
13994       identifier = token->value;
13995       attribute = build_tree_list (identifier, NULL_TREE);
13996
13997       /* Peek at the next token.  */
13998       token = cp_lexer_peek_token (parser->lexer);
13999       /* If it's an `(', then parse the attribute arguments.  */
14000       if (token->type == CPP_OPEN_PAREN)
14001         {
14002           tree arguments;
14003
14004           arguments = (cp_parser_parenthesized_expression_list
14005                        (parser, true, /*non_constant_p=*/NULL));
14006           /* Save the identifier and arguments away.  */
14007           TREE_VALUE (attribute) = arguments;
14008         }
14009
14010       /* Add this attribute to the list.  */
14011       TREE_CHAIN (attribute) = attribute_list;
14012       attribute_list = attribute;
14013
14014       /* Now, look for more attributes.  */
14015       token = cp_lexer_peek_token (parser->lexer);
14016       /* If the next token isn't a `,', we're done.  */
14017       if (token->type != CPP_COMMA)
14018         break;
14019
14020       /* Consume the comma and keep going.  */
14021       cp_lexer_consume_token (parser->lexer);
14022     }
14023   c_lex_string_translate = 1;
14024
14025   /* We built up the list in reverse order.  */
14026   return nreverse (attribute_list);
14027 }
14028
14029 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
14030    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
14031    current value of the PEDANTIC flag, regardless of whether or not
14032    the `__extension__' keyword is present.  The caller is responsible
14033    for restoring the value of the PEDANTIC flag.  */
14034
14035 static bool
14036 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
14037 {
14038   /* Save the old value of the PEDANTIC flag.  */
14039   *saved_pedantic = pedantic;
14040
14041   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
14042     {
14043       /* Consume the `__extension__' token.  */
14044       cp_lexer_consume_token (parser->lexer);
14045       /* We're not being pedantic while the `__extension__' keyword is
14046          in effect.  */
14047       pedantic = 0;
14048
14049       return true;
14050     }
14051
14052   return false;
14053 }
14054
14055 /* Parse a label declaration.
14056
14057    label-declaration:
14058      __label__ label-declarator-seq ;
14059
14060    label-declarator-seq:
14061      identifier , label-declarator-seq
14062      identifier  */
14063
14064 static void
14065 cp_parser_label_declaration (cp_parser* parser)
14066 {
14067   /* Look for the `__label__' keyword.  */
14068   cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
14069
14070   while (true)
14071     {
14072       tree identifier;
14073
14074       /* Look for an identifier.  */
14075       identifier = cp_parser_identifier (parser);
14076       /* Declare it as a lobel.  */
14077       finish_label_decl (identifier);
14078       /* If the next token is a `;', stop.  */
14079       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14080         break;
14081       /* Look for the `,' separating the label declarations.  */
14082       cp_parser_require (parser, CPP_COMMA, "`,'");
14083     }
14084
14085   /* Look for the final `;'.  */
14086   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14087 }
14088
14089 /* Support Functions */
14090
14091 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
14092    NAME should have one of the representations used for an
14093    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
14094    is returned.  If PARSER->SCOPE is a dependent type, then a
14095    SCOPE_REF is returned.
14096
14097    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
14098    returned; the name was already resolved when the TEMPLATE_ID_EXPR
14099    was formed.  Abstractly, such entities should not be passed to this
14100    function, because they do not need to be looked up, but it is
14101    simpler to check for this special case here, rather than at the
14102    call-sites.
14103
14104    In cases not explicitly covered above, this function returns a
14105    DECL, OVERLOAD, or baselink representing the result of the lookup.
14106    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
14107    is returned.
14108
14109    If IS_TYPE is TRUE, bindings that do not refer to types are
14110    ignored.
14111
14112    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
14113    ignored.
14114
14115    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
14116    are ignored.
14117
14118    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
14119    types.  */
14120
14121 static tree
14122 cp_parser_lookup_name (cp_parser *parser, tree name,
14123                        bool is_type, bool is_template, bool is_namespace,
14124                        bool check_dependency)
14125 {
14126   tree decl;
14127   tree object_type = parser->context->object_type;
14128
14129   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
14130      no longer valid.  Note that if we are parsing tentatively, and
14131      the parse fails, OBJECT_TYPE will be automatically restored.  */
14132   parser->context->object_type = NULL_TREE;
14133
14134   if (name == error_mark_node)
14135     return error_mark_node;
14136
14137   /* A template-id has already been resolved; there is no lookup to
14138      do.  */
14139   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
14140     return name;
14141   if (BASELINK_P (name))
14142     {
14143       my_friendly_assert ((TREE_CODE (BASELINK_FUNCTIONS (name))
14144                            == TEMPLATE_ID_EXPR),
14145                           20020909);
14146       return name;
14147     }
14148
14149   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
14150      it should already have been checked to make sure that the name
14151      used matches the type being destroyed.  */
14152   if (TREE_CODE (name) == BIT_NOT_EXPR)
14153     {
14154       tree type;
14155
14156       /* Figure out to which type this destructor applies.  */
14157       if (parser->scope)
14158         type = parser->scope;
14159       else if (object_type)
14160         type = object_type;
14161       else
14162         type = current_class_type;
14163       /* If that's not a class type, there is no destructor.  */
14164       if (!type || !CLASS_TYPE_P (type))
14165         return error_mark_node;
14166       if (!CLASSTYPE_DESTRUCTORS (type))
14167           return error_mark_node;
14168       /* If it was a class type, return the destructor.  */
14169       return CLASSTYPE_DESTRUCTORS (type);
14170     }
14171
14172   /* By this point, the NAME should be an ordinary identifier.  If
14173      the id-expression was a qualified name, the qualifying scope is
14174      stored in PARSER->SCOPE at this point.  */
14175   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE,
14176                       20000619);
14177
14178   /* Perform the lookup.  */
14179   if (parser->scope)
14180     {
14181       bool dependent_p;
14182
14183       if (parser->scope == error_mark_node)
14184         return error_mark_node;
14185
14186       /* If the SCOPE is dependent, the lookup must be deferred until
14187          the template is instantiated -- unless we are explicitly
14188          looking up names in uninstantiated templates.  Even then, we
14189          cannot look up the name if the scope is not a class type; it
14190          might, for example, be a template type parameter.  */
14191       dependent_p = (TYPE_P (parser->scope)
14192                      && !(parser->in_declarator_p
14193                           && currently_open_class (parser->scope))
14194                      && dependent_type_p (parser->scope));
14195       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
14196            && dependent_p)
14197         {
14198           if (is_type)
14199             /* The resolution to Core Issue 180 says that `struct A::B'
14200                should be considered a type-name, even if `A' is
14201                dependent.  */
14202             decl = TYPE_NAME (make_typename_type (parser->scope,
14203                                                   name,
14204                                                   /*complain=*/1));
14205           else if (is_template)
14206             decl = make_unbound_class_template (parser->scope,
14207                                                 name,
14208                                                 /*complain=*/1);
14209           else
14210             decl = build_nt (SCOPE_REF, parser->scope, name);
14211         }
14212       else
14213         {
14214           bool pop_p = false;
14215
14216           /* If PARSER->SCOPE is a dependent type, then it must be a
14217              class type, and we must not be checking dependencies;
14218              otherwise, we would have processed this lookup above.  So
14219              that PARSER->SCOPE is not considered a dependent base by
14220              lookup_member, we must enter the scope here.  */
14221           if (dependent_p)
14222             pop_p = push_scope (parser->scope);
14223           /* If the PARSER->SCOPE is a a template specialization, it
14224              may be instantiated during name lookup.  In that case,
14225              errors may be issued.  Even if we rollback the current
14226              tentative parse, those errors are valid.  */
14227           decl = lookup_qualified_name (parser->scope, name, is_type,
14228                                         /*complain=*/true);
14229           if (pop_p)
14230             pop_scope (parser->scope);
14231         }
14232       parser->qualifying_scope = parser->scope;
14233       parser->object_scope = NULL_TREE;
14234     }
14235   else if (object_type)
14236     {
14237       tree object_decl = NULL_TREE;
14238       /* Look up the name in the scope of the OBJECT_TYPE, unless the
14239          OBJECT_TYPE is not a class.  */
14240       if (CLASS_TYPE_P (object_type))
14241         /* If the OBJECT_TYPE is a template specialization, it may
14242            be instantiated during name lookup.  In that case, errors
14243            may be issued.  Even if we rollback the current tentative
14244            parse, those errors are valid.  */
14245         object_decl = lookup_member (object_type,
14246                                      name,
14247                                      /*protect=*/0, is_type);
14248       /* Look it up in the enclosing context, too.  */
14249       decl = lookup_name_real (name, is_type, /*nonclass=*/0,
14250                                /*block_p=*/true, is_namespace,
14251                                /*flags=*/0);
14252       parser->object_scope = object_type;
14253       parser->qualifying_scope = NULL_TREE;
14254       if (object_decl)
14255         decl = object_decl;
14256     }
14257   else
14258     {
14259       decl = lookup_name_real (name, is_type, /*nonclass=*/0,
14260                                /*block_p=*/true, is_namespace,
14261                                /*flags=*/0);
14262       parser->qualifying_scope = NULL_TREE;
14263       parser->object_scope = NULL_TREE;
14264     }
14265
14266   /* If the lookup failed, let our caller know.  */
14267   if (!decl
14268       || decl == error_mark_node
14269       || (TREE_CODE (decl) == FUNCTION_DECL
14270           && DECL_ANTICIPATED (decl)))
14271     return error_mark_node;
14272
14273   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
14274   if (TREE_CODE (decl) == TREE_LIST)
14275     {
14276       /* The error message we have to print is too complicated for
14277          cp_parser_error, so we incorporate its actions directly.  */
14278       if (!cp_parser_simulate_error (parser))
14279         {
14280           error ("reference to `%D' is ambiguous", name);
14281           print_candidates (decl);
14282         }
14283       return error_mark_node;
14284     }
14285
14286   my_friendly_assert (DECL_P (decl)
14287                       || TREE_CODE (decl) == OVERLOAD
14288                       || TREE_CODE (decl) == SCOPE_REF
14289                       || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
14290                       || BASELINK_P (decl),
14291                       20000619);
14292
14293   /* If we have resolved the name of a member declaration, check to
14294      see if the declaration is accessible.  When the name resolves to
14295      set of overloaded functions, accessibility is checked when
14296      overload resolution is done.
14297
14298      During an explicit instantiation, access is not checked at all,
14299      as per [temp.explicit].  */
14300   if (DECL_P (decl))
14301     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
14302
14303   return decl;
14304 }
14305
14306 /* Like cp_parser_lookup_name, but for use in the typical case where
14307    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
14308    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
14309
14310 static tree
14311 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
14312 {
14313   return cp_parser_lookup_name (parser, name,
14314                                 /*is_type=*/false,
14315                                 /*is_template=*/false,
14316                                 /*is_namespace=*/false,
14317                                 /*check_dependency=*/true);
14318 }
14319
14320 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
14321    the current context, return the TYPE_DECL.  If TAG_NAME_P is
14322    true, the DECL indicates the class being defined in a class-head,
14323    or declared in an elaborated-type-specifier.
14324
14325    Otherwise, return DECL.  */
14326
14327 static tree
14328 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
14329 {
14330   /* If the TEMPLATE_DECL is being declared as part of a class-head,
14331      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
14332
14333        struct A {
14334          template <typename T> struct B;
14335        };
14336
14337        template <typename T> struct A::B {};
14338
14339      Similarly, in a elaborated-type-specifier:
14340
14341        namespace N { struct X{}; }
14342
14343        struct A {
14344          template <typename T> friend struct N::X;
14345        };
14346
14347      However, if the DECL refers to a class type, and we are in
14348      the scope of the class, then the name lookup automatically
14349      finds the TYPE_DECL created by build_self_reference rather
14350      than a TEMPLATE_DECL.  For example, in:
14351
14352        template <class T> struct S {
14353          S s;
14354        };
14355
14356      there is no need to handle such case.  */
14357
14358   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
14359     return DECL_TEMPLATE_RESULT (decl);
14360
14361   return decl;
14362 }
14363
14364 /* If too many, or too few, template-parameter lists apply to the
14365    declarator, issue an error message.  Returns TRUE if all went well,
14366    and FALSE otherwise.  */
14367
14368 static bool
14369 cp_parser_check_declarator_template_parameters (cp_parser* parser,
14370                                                 cp_declarator *declarator)
14371 {
14372   unsigned num_templates;
14373
14374   /* We haven't seen any classes that involve template parameters yet.  */
14375   num_templates = 0;
14376
14377   switch (declarator->kind)
14378     {
14379     case cdk_id:
14380       if (TREE_CODE (declarator->u.id.name) == SCOPE_REF)
14381         {
14382           tree scope;
14383           tree member;
14384
14385           scope = TREE_OPERAND (declarator->u.id.name, 0);
14386           member = TREE_OPERAND (declarator->u.id.name, 1);
14387
14388           while (scope && CLASS_TYPE_P (scope))
14389             {
14390               /* You're supposed to have one `template <...>'
14391                  for every template class, but you don't need one
14392                  for a full specialization.  For example:
14393
14394                  template <class T> struct S{};
14395                  template <> struct S<int> { void f(); };
14396                  void S<int>::f () {}
14397
14398                  is correct; there shouldn't be a `template <>' for
14399                  the definition of `S<int>::f'.  */
14400               if (CLASSTYPE_TEMPLATE_INFO (scope)
14401                   && (CLASSTYPE_TEMPLATE_INSTANTIATION (scope)
14402                       || uses_template_parms (CLASSTYPE_TI_ARGS (scope)))
14403                   && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
14404                 ++num_templates;
14405
14406               scope = TYPE_CONTEXT (scope);
14407             }
14408         }
14409
14410       /* If the DECLARATOR has the form `X<y>' then it uses one
14411          additional level of template parameters.  */
14412       if (TREE_CODE (declarator->u.id.name) == TEMPLATE_ID_EXPR)
14413         ++num_templates;
14414
14415       return cp_parser_check_template_parameters (parser,
14416                                                   num_templates);
14417
14418     case cdk_function:
14419     case cdk_array:
14420     case cdk_pointer:
14421     case cdk_reference:
14422     case cdk_ptrmem:
14423       return (cp_parser_check_declarator_template_parameters
14424               (parser, declarator->declarator));
14425
14426     case cdk_error:
14427       return true;
14428
14429     default:
14430       abort ();
14431       return false;
14432     }
14433 }
14434
14435 /* NUM_TEMPLATES were used in the current declaration.  If that is
14436    invalid, return FALSE and issue an error messages.  Otherwise,
14437    return TRUE.  */
14438
14439 static bool
14440 cp_parser_check_template_parameters (cp_parser* parser,
14441                                      unsigned num_templates)
14442 {
14443   /* If there are more template classes than parameter lists, we have
14444      something like:
14445
14446        template <class T> void S<T>::R<T>::f ();  */
14447   if (parser->num_template_parameter_lists < num_templates)
14448     {
14449       error ("too few template-parameter-lists");
14450       return false;
14451     }
14452   /* If there are the same number of template classes and parameter
14453      lists, that's OK.  */
14454   if (parser->num_template_parameter_lists == num_templates)
14455     return true;
14456   /* If there are more, but only one more, then we are referring to a
14457      member template.  That's OK too.  */
14458   if (parser->num_template_parameter_lists == num_templates + 1)
14459       return true;
14460   /* Otherwise, there are too many template parameter lists.  We have
14461      something like:
14462
14463      template <class T> template <class U> void S::f();  */
14464   error ("too many template-parameter-lists");
14465   return false;
14466 }
14467
14468 /* Parse a binary-expression of the general form:
14469
14470    binary-expression:
14471      <expr>
14472      binary-expression <token> <expr>
14473
14474    The TOKEN_TREE_MAP maps <token> types to <expr> codes.  FN is used
14475    to parser the <expr>s.  If the first production is used, then the
14476    value returned by FN is returned directly.  Otherwise, a node with
14477    the indicated EXPR_TYPE is returned, with operands corresponding to
14478    the two sub-expressions.  */
14479
14480 static tree
14481 cp_parser_binary_expression (cp_parser* parser,
14482                              const cp_parser_token_tree_map token_tree_map,
14483                              cp_parser_expression_fn fn)
14484 {
14485   tree lhs;
14486
14487   /* Parse the first expression.  */
14488   lhs = (*fn) (parser);
14489   /* Now, look for more expressions.  */
14490   while (true)
14491     {
14492       cp_token *token;
14493       const cp_parser_token_tree_map_node *map_node;
14494       tree rhs;
14495
14496       /* Peek at the next token.  */
14497       token = cp_lexer_peek_token (parser->lexer);
14498       /* If the token is `>', and that's not an operator at the
14499          moment, then we're done.  */
14500       if (token->type == CPP_GREATER
14501           && !parser->greater_than_is_operator_p)
14502         break;
14503       /* If we find one of the tokens we want, build the corresponding
14504          tree representation.  */
14505       for (map_node = token_tree_map;
14506            map_node->token_type != CPP_EOF;
14507            ++map_node)
14508         if (map_node->token_type == token->type)
14509           {
14510             /* Assume that an overloaded operator will not be used.  */
14511             bool overloaded_p = false;
14512
14513             /* Consume the operator token.  */
14514             cp_lexer_consume_token (parser->lexer);
14515             /* Parse the right-hand side of the expression.  */
14516             rhs = (*fn) (parser);
14517             /* Build the binary tree node.  */
14518             lhs = build_x_binary_op (map_node->tree_type, lhs, rhs,
14519                                      &overloaded_p);
14520             /* If the binary operator required the use of an
14521                overloaded operator, then this expression cannot be an
14522                integral constant-expression.  An overloaded operator
14523                can be used even if both operands are otherwise
14524                permissible in an integral constant-expression if at
14525                least one of the operands is of enumeration type.  */
14526             if (overloaded_p
14527                 && (cp_parser_non_integral_constant_expression
14528                     (parser, "calls to overloaded operators")))
14529               lhs = error_mark_node;
14530             break;
14531           }
14532
14533       /* If the token wasn't one of the ones we want, we're done.  */
14534       if (map_node->token_type == CPP_EOF)
14535         break;
14536     }
14537
14538   return lhs;
14539 }
14540
14541 /* Parse an optional `::' token indicating that the following name is
14542    from the global namespace.  If so, PARSER->SCOPE is set to the
14543    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
14544    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
14545    Returns the new value of PARSER->SCOPE, if the `::' token is
14546    present, and NULL_TREE otherwise.  */
14547
14548 static tree
14549 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
14550 {
14551   cp_token *token;
14552
14553   /* Peek at the next token.  */
14554   token = cp_lexer_peek_token (parser->lexer);
14555   /* If we're looking at a `::' token then we're starting from the
14556      global namespace, not our current location.  */
14557   if (token->type == CPP_SCOPE)
14558     {
14559       /* Consume the `::' token.  */
14560       cp_lexer_consume_token (parser->lexer);
14561       /* Set the SCOPE so that we know where to start the lookup.  */
14562       parser->scope = global_namespace;
14563       parser->qualifying_scope = global_namespace;
14564       parser->object_scope = NULL_TREE;
14565
14566       return parser->scope;
14567     }
14568   else if (!current_scope_valid_p)
14569     {
14570       parser->scope = NULL_TREE;
14571       parser->qualifying_scope = NULL_TREE;
14572       parser->object_scope = NULL_TREE;
14573     }
14574
14575   return NULL_TREE;
14576 }
14577
14578 /* Returns TRUE if the upcoming token sequence is the start of a
14579    constructor declarator.  If FRIEND_P is true, the declarator is
14580    preceded by the `friend' specifier.  */
14581
14582 static bool
14583 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
14584 {
14585   bool constructor_p;
14586   tree type_decl = NULL_TREE;
14587   bool nested_name_p;
14588   cp_token *next_token;
14589
14590   /* The common case is that this is not a constructor declarator, so
14591      try to avoid doing lots of work if at all possible.  It's not
14592      valid declare a constructor at function scope.  */
14593   if (at_function_scope_p ())
14594     return false;
14595   /* And only certain tokens can begin a constructor declarator.  */
14596   next_token = cp_lexer_peek_token (parser->lexer);
14597   if (next_token->type != CPP_NAME
14598       && next_token->type != CPP_SCOPE
14599       && next_token->type != CPP_NESTED_NAME_SPECIFIER
14600       && next_token->type != CPP_TEMPLATE_ID)
14601     return false;
14602
14603   /* Parse tentatively; we are going to roll back all of the tokens
14604      consumed here.  */
14605   cp_parser_parse_tentatively (parser);
14606   /* Assume that we are looking at a constructor declarator.  */
14607   constructor_p = true;
14608
14609   /* Look for the optional `::' operator.  */
14610   cp_parser_global_scope_opt (parser,
14611                               /*current_scope_valid_p=*/false);
14612   /* Look for the nested-name-specifier.  */
14613   nested_name_p
14614     = (cp_parser_nested_name_specifier_opt (parser,
14615                                             /*typename_keyword_p=*/false,
14616                                             /*check_dependency_p=*/false,
14617                                             /*type_p=*/false,
14618                                             /*is_declaration=*/false)
14619        != NULL_TREE);
14620   /* Outside of a class-specifier, there must be a
14621      nested-name-specifier.  */
14622   if (!nested_name_p &&
14623       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
14624        || friend_p))
14625     constructor_p = false;
14626   /* If we still think that this might be a constructor-declarator,
14627      look for a class-name.  */
14628   if (constructor_p)
14629     {
14630       /* If we have:
14631
14632            template <typename T> struct S { S(); };
14633            template <typename T> S<T>::S ();
14634
14635          we must recognize that the nested `S' names a class.
14636          Similarly, for:
14637
14638            template <typename T> S<T>::S<T> ();
14639
14640          we must recognize that the nested `S' names a template.  */
14641       type_decl = cp_parser_class_name (parser,
14642                                         /*typename_keyword_p=*/false,
14643                                         /*template_keyword_p=*/false,
14644                                         /*type_p=*/false,
14645                                         /*check_dependency_p=*/false,
14646                                         /*class_head_p=*/false,
14647                                         /*is_declaration=*/false);
14648       /* If there was no class-name, then this is not a constructor.  */
14649       constructor_p = !cp_parser_error_occurred (parser);
14650     }
14651
14652   /* If we're still considering a constructor, we have to see a `(',
14653      to begin the parameter-declaration-clause, followed by either a
14654      `)', an `...', or a decl-specifier.  We need to check for a
14655      type-specifier to avoid being fooled into thinking that:
14656
14657        S::S (f) (int);
14658
14659      is a constructor.  (It is actually a function named `f' that
14660      takes one parameter (of type `int') and returns a value of type
14661      `S::S'.  */
14662   if (constructor_p
14663       && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
14664     {
14665       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
14666           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
14667           /* A parameter declaration begins with a decl-specifier,
14668              which is either the "attribute" keyword, a storage class
14669              specifier, or (usually) a type-specifier.  */
14670           && !cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE)
14671           && !cp_parser_storage_class_specifier_opt (parser))
14672         {
14673           tree type;
14674           bool pop_p = false;
14675           unsigned saved_num_template_parameter_lists;
14676
14677           /* Names appearing in the type-specifier should be looked up
14678              in the scope of the class.  */
14679           if (current_class_type)
14680             type = NULL_TREE;
14681           else
14682             {
14683               type = TREE_TYPE (type_decl);
14684               if (TREE_CODE (type) == TYPENAME_TYPE)
14685                 {
14686                   type = resolve_typename_type (type,
14687                                                 /*only_current_p=*/false);
14688                   if (type == error_mark_node)
14689                     {
14690                       cp_parser_abort_tentative_parse (parser);
14691                       return false;
14692                     }
14693                 }
14694               pop_p = push_scope (type);
14695             }
14696
14697           /* Inside the constructor parameter list, surrounding
14698              template-parameter-lists do not apply.  */
14699           saved_num_template_parameter_lists
14700             = parser->num_template_parameter_lists;
14701           parser->num_template_parameter_lists = 0;
14702
14703           /* Look for the type-specifier.  */
14704           cp_parser_type_specifier (parser,
14705                                     CP_PARSER_FLAGS_NONE,
14706                                     /*decl_specs=*/NULL,
14707                                     /*is_declarator=*/true,
14708                                     /*declares_class_or_enum=*/NULL,
14709                                     /*is_cv_qualifier=*/NULL);
14710
14711           parser->num_template_parameter_lists
14712             = saved_num_template_parameter_lists;
14713
14714           /* Leave the scope of the class.  */
14715           if (pop_p)
14716             pop_scope (type);
14717
14718           constructor_p = !cp_parser_error_occurred (parser);
14719         }
14720     }
14721   else
14722     constructor_p = false;
14723   /* We did not really want to consume any tokens.  */
14724   cp_parser_abort_tentative_parse (parser);
14725
14726   return constructor_p;
14727 }
14728
14729 /* Parse the definition of the function given by the DECL_SPECIFIERS,
14730    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
14731    they must be performed once we are in the scope of the function.
14732
14733    Returns the function defined.  */
14734
14735 static tree
14736 cp_parser_function_definition_from_specifiers_and_declarator
14737   (cp_parser* parser,
14738    cp_decl_specifier_seq *decl_specifiers,
14739    tree attributes,
14740    const cp_declarator *declarator)
14741 {
14742   tree fn;
14743   bool success_p;
14744
14745   /* Begin the function-definition.  */
14746   success_p = start_function (decl_specifiers, declarator, attributes);
14747
14748   /* The things we're about to see are not directly qualified by any
14749      template headers we've seen thus far.  */
14750   reset_specialization ();
14751
14752   /* If there were names looked up in the decl-specifier-seq that we
14753      did not check, check them now.  We must wait until we are in the
14754      scope of the function to perform the checks, since the function
14755      might be a friend.  */
14756   perform_deferred_access_checks ();
14757
14758   if (!success_p)
14759     {
14760       /* Skip the entire function.  */
14761       error ("invalid function declaration");
14762       cp_parser_skip_to_end_of_block_or_statement (parser);
14763       fn = error_mark_node;
14764     }
14765   else
14766     fn = cp_parser_function_definition_after_declarator (parser,
14767                                                          /*inline_p=*/false);
14768
14769   return fn;
14770 }
14771
14772 /* Parse the part of a function-definition that follows the
14773    declarator.  INLINE_P is TRUE iff this function is an inline
14774    function defined with a class-specifier.
14775
14776    Returns the function defined.  */
14777
14778 static tree
14779 cp_parser_function_definition_after_declarator (cp_parser* parser,
14780                                                 bool inline_p)
14781 {
14782   tree fn;
14783   bool ctor_initializer_p = false;
14784   bool saved_in_unbraced_linkage_specification_p;
14785   unsigned saved_num_template_parameter_lists;
14786
14787   /* If the next token is `return', then the code may be trying to
14788      make use of the "named return value" extension that G++ used to
14789      support.  */
14790   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
14791     {
14792       /* Consume the `return' keyword.  */
14793       cp_lexer_consume_token (parser->lexer);
14794       /* Look for the identifier that indicates what value is to be
14795          returned.  */
14796       cp_parser_identifier (parser);
14797       /* Issue an error message.  */
14798       error ("named return values are no longer supported");
14799       /* Skip tokens until we reach the start of the function body.  */
14800       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
14801              && cp_lexer_next_token_is_not (parser->lexer, CPP_EOF))
14802         cp_lexer_consume_token (parser->lexer);
14803     }
14804   /* The `extern' in `extern "C" void f () { ... }' does not apply to
14805      anything declared inside `f'.  */
14806   saved_in_unbraced_linkage_specification_p
14807     = parser->in_unbraced_linkage_specification_p;
14808   parser->in_unbraced_linkage_specification_p = false;
14809   /* Inside the function, surrounding template-parameter-lists do not
14810      apply.  */
14811   saved_num_template_parameter_lists
14812     = parser->num_template_parameter_lists;
14813   parser->num_template_parameter_lists = 0;
14814   /* If the next token is `try', then we are looking at a
14815      function-try-block.  */
14816   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
14817     ctor_initializer_p = cp_parser_function_try_block (parser);
14818   /* A function-try-block includes the function-body, so we only do
14819      this next part if we're not processing a function-try-block.  */
14820   else
14821     ctor_initializer_p
14822       = cp_parser_ctor_initializer_opt_and_function_body (parser);
14823
14824   /* Finish the function.  */
14825   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
14826                         (inline_p ? 2 : 0));
14827   /* Generate code for it, if necessary.  */
14828   expand_or_defer_fn (fn);
14829   /* Restore the saved values.  */
14830   parser->in_unbraced_linkage_specification_p
14831     = saved_in_unbraced_linkage_specification_p;
14832   parser->num_template_parameter_lists
14833     = saved_num_template_parameter_lists;
14834
14835   return fn;
14836 }
14837
14838 /* Parse a template-declaration, assuming that the `export' (and
14839    `extern') keywords, if present, has already been scanned.  MEMBER_P
14840    is as for cp_parser_template_declaration.  */
14841
14842 static void
14843 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
14844 {
14845   tree decl = NULL_TREE;
14846   tree parameter_list;
14847   bool friend_p = false;
14848
14849   /* Look for the `template' keyword.  */
14850   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
14851     return;
14852
14853   /* And the `<'.  */
14854   if (!cp_parser_require (parser, CPP_LESS, "`<'"))
14855     return;
14856
14857   /* If the next token is `>', then we have an invalid
14858      specialization.  Rather than complain about an invalid template
14859      parameter, issue an error message here.  */
14860   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
14861     {
14862       cp_parser_error (parser, "invalid explicit specialization");
14863       begin_specialization ();
14864       parameter_list = NULL_TREE;
14865     }
14866   else
14867     {
14868       /* Parse the template parameters.  */
14869       begin_template_parm_list ();
14870       parameter_list = cp_parser_template_parameter_list (parser);
14871       parameter_list = end_template_parm_list (parameter_list);
14872     }
14873
14874   /* Look for the `>'.  */
14875   cp_parser_skip_until_found (parser, CPP_GREATER, "`>'");
14876   /* We just processed one more parameter list.  */
14877   ++parser->num_template_parameter_lists;
14878   /* If the next token is `template', there are more template
14879      parameters.  */
14880   if (cp_lexer_next_token_is_keyword (parser->lexer,
14881                                       RID_TEMPLATE))
14882     cp_parser_template_declaration_after_export (parser, member_p);
14883   else
14884     {
14885       /* There are no access checks when parsing a template, as we do not
14886          know if a specialization will be a friend.  */
14887       push_deferring_access_checks (dk_no_check);
14888
14889       decl = cp_parser_single_declaration (parser,
14890                                            member_p,
14891                                            &friend_p);
14892
14893       pop_deferring_access_checks ();
14894
14895       /* If this is a member template declaration, let the front
14896          end know.  */
14897       if (member_p && !friend_p && decl)
14898         {
14899           if (TREE_CODE (decl) == TYPE_DECL)
14900             cp_parser_check_access_in_redeclaration (decl);
14901
14902           decl = finish_member_template_decl (decl);
14903         }
14904       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
14905         make_friend_class (current_class_type, TREE_TYPE (decl),
14906                            /*complain=*/true);
14907     }
14908   /* We are done with the current parameter list.  */
14909   --parser->num_template_parameter_lists;
14910
14911   /* Finish up.  */
14912   finish_template_decl (parameter_list);
14913
14914   /* Register member declarations.  */
14915   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
14916     finish_member_declaration (decl);
14917
14918   /* If DECL is a function template, we must return to parse it later.
14919      (Even though there is no definition, there might be default
14920      arguments that need handling.)  */
14921   if (member_p && decl
14922       && (TREE_CODE (decl) == FUNCTION_DECL
14923           || DECL_FUNCTION_TEMPLATE_P (decl)))
14924     TREE_VALUE (parser->unparsed_functions_queues)
14925       = tree_cons (NULL_TREE, decl,
14926                    TREE_VALUE (parser->unparsed_functions_queues));
14927 }
14928
14929 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
14930    `function-definition' sequence.  MEMBER_P is true, this declaration
14931    appears in a class scope.
14932
14933    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
14934    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
14935
14936 static tree
14937 cp_parser_single_declaration (cp_parser* parser,
14938                               bool member_p,
14939                               bool* friend_p)
14940 {
14941   int declares_class_or_enum;
14942   tree decl = NULL_TREE;
14943   cp_decl_specifier_seq decl_specifiers;
14944   bool function_definition_p = false;
14945
14946   /* Defer access checks until we know what is being declared.  */
14947   push_deferring_access_checks (dk_deferred);
14948
14949   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
14950      alternative.  */
14951   cp_parser_decl_specifier_seq (parser,
14952                                 CP_PARSER_FLAGS_OPTIONAL,
14953                                 &decl_specifiers,
14954                                 &declares_class_or_enum);
14955   if (friend_p)
14956     *friend_p = cp_parser_friend_p (&decl_specifiers);
14957   /* Gather up the access checks that occurred the
14958      decl-specifier-seq.  */
14959   stop_deferring_access_checks ();
14960
14961   /* Check for the declaration of a template class.  */
14962   if (declares_class_or_enum)
14963     {
14964       if (cp_parser_declares_only_class_p (parser))
14965         {
14966           decl = shadow_tag (&decl_specifiers);
14967           if (decl && decl != error_mark_node)
14968             decl = TYPE_NAME (decl);
14969           else
14970             decl = error_mark_node;
14971         }
14972     }
14973   else
14974     decl = NULL_TREE;
14975   /* If it's not a template class, try for a template function.  If
14976      the next token is a `;', then this declaration does not declare
14977      anything.  But, if there were errors in the decl-specifiers, then
14978      the error might well have come from an attempted class-specifier.
14979      In that case, there's no need to warn about a missing declarator.  */
14980   if (!decl
14981       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
14982           || decl_specifiers.type != error_mark_node))
14983     decl = cp_parser_init_declarator (parser,
14984                                       &decl_specifiers,
14985                                       /*function_definition_allowed_p=*/true,
14986                                       member_p,
14987                                       declares_class_or_enum,
14988                                       &function_definition_p);
14989
14990   pop_deferring_access_checks ();
14991
14992   /* Clear any current qualification; whatever comes next is the start
14993      of something new.  */
14994   parser->scope = NULL_TREE;
14995   parser->qualifying_scope = NULL_TREE;
14996   parser->object_scope = NULL_TREE;
14997   /* Look for a trailing `;' after the declaration.  */
14998   if (!function_definition_p
14999       && !cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
15000     cp_parser_skip_to_end_of_block_or_statement (parser);
15001
15002   return decl;
15003 }
15004
15005 /* Parse a cast-expression that is not the operand of a unary "&".  */
15006
15007 static tree
15008 cp_parser_simple_cast_expression (cp_parser *parser)
15009 {
15010   return cp_parser_cast_expression (parser, /*address_p=*/false);
15011 }
15012
15013 /* Parse a functional cast to TYPE.  Returns an expression
15014    representing the cast.  */
15015
15016 static tree
15017 cp_parser_functional_cast (cp_parser* parser, tree type)
15018 {
15019   tree expression_list;
15020   tree cast;
15021
15022   expression_list
15023     = cp_parser_parenthesized_expression_list (parser, false,
15024                                                /*non_constant_p=*/NULL);
15025
15026   cast = build_functional_cast (type, expression_list);
15027   /* [expr.const]/1: In an integral constant expression "only type
15028      conversions to integral or enumeration type can be used".  */
15029   if (cast != error_mark_node && !type_dependent_expression_p (type)
15030       && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (type)))
15031     {
15032       if (cp_parser_non_integral_constant_expression
15033           (parser, "a call to a constructor"))
15034         return error_mark_node;
15035     }
15036   return cast;
15037 }
15038
15039 /* Save the tokens that make up the body of a member function defined
15040    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
15041    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
15042    specifiers applied to the declaration.  Returns the FUNCTION_DECL
15043    for the member function.  */
15044
15045 static tree
15046 cp_parser_save_member_function_body (cp_parser* parser,
15047                                      cp_decl_specifier_seq *decl_specifiers,
15048                                      cp_declarator *declarator,
15049                                      tree attributes)
15050 {
15051   cp_token_cache *cache;
15052   tree fn;
15053
15054   /* Create the function-declaration.  */
15055   fn = start_method (decl_specifiers, declarator, attributes);
15056   /* If something went badly wrong, bail out now.  */
15057   if (fn == error_mark_node)
15058     {
15059       /* If there's a function-body, skip it.  */
15060       if (cp_parser_token_starts_function_definition_p
15061           (cp_lexer_peek_token (parser->lexer)))
15062         cp_parser_skip_to_end_of_block_or_statement (parser);
15063       return error_mark_node;
15064     }
15065
15066   /* Remember it, if there default args to post process.  */
15067   cp_parser_save_default_args (parser, fn);
15068
15069   /* Create a token cache.  */
15070   cache = cp_token_cache_new ();
15071   /* Save away the tokens that make up the body of the
15072      function.  */
15073   cp_parser_cache_group (parser, cache, CPP_CLOSE_BRACE, /*depth=*/0);
15074   /* Handle function try blocks.  */
15075   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
15076     cp_parser_cache_group (parser, cache, CPP_CLOSE_BRACE, /*depth=*/0);
15077
15078   /* Save away the inline definition; we will process it when the
15079      class is complete.  */
15080   DECL_PENDING_INLINE_INFO (fn) = cache;
15081   DECL_PENDING_INLINE_P (fn) = 1;
15082
15083   /* We need to know that this was defined in the class, so that
15084      friend templates are handled correctly.  */
15085   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
15086
15087   /* We're done with the inline definition.  */
15088   finish_method (fn);
15089
15090   /* Add FN to the queue of functions to be parsed later.  */
15091   TREE_VALUE (parser->unparsed_functions_queues)
15092     = tree_cons (NULL_TREE, fn,
15093                  TREE_VALUE (parser->unparsed_functions_queues));
15094
15095   return fn;
15096 }
15097
15098 /* Parse a template-argument-list, as well as the trailing ">" (but
15099    not the opening ">").  See cp_parser_template_argument_list for the
15100    return value.  */
15101
15102 static tree
15103 cp_parser_enclosed_template_argument_list (cp_parser* parser)
15104 {
15105   tree arguments;
15106   tree saved_scope;
15107   tree saved_qualifying_scope;
15108   tree saved_object_scope;
15109   bool saved_greater_than_is_operator_p;
15110
15111   /* [temp.names]
15112
15113      When parsing a template-id, the first non-nested `>' is taken as
15114      the end of the template-argument-list rather than a greater-than
15115      operator.  */
15116   saved_greater_than_is_operator_p
15117     = parser->greater_than_is_operator_p;
15118   parser->greater_than_is_operator_p = false;
15119   /* Parsing the argument list may modify SCOPE, so we save it
15120      here.  */
15121   saved_scope = parser->scope;
15122   saved_qualifying_scope = parser->qualifying_scope;
15123   saved_object_scope = parser->object_scope;
15124   /* Parse the template-argument-list itself.  */
15125   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15126     arguments = NULL_TREE;
15127   else
15128     arguments = cp_parser_template_argument_list (parser);
15129   /* Look for the `>' that ends the template-argument-list. If we find
15130      a '>>' instead, it's probably just a typo.  */
15131   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
15132     {
15133       if (!saved_greater_than_is_operator_p)
15134         {
15135           /* If we're in a nested template argument list, the '>>' has to be
15136             a typo for '> >'. We emit the error message, but we continue
15137             parsing and we push a '>' as next token, so that the argument
15138             list will be parsed correctly..  */
15139           cp_token* token;
15140           error ("`>>' should be `> >' within a nested template argument list");
15141           token = cp_lexer_peek_token (parser->lexer);
15142           token->type = CPP_GREATER;
15143         }
15144       else
15145         {
15146           /* If this is not a nested template argument list, the '>>' is
15147             a typo for '>'. Emit an error message and continue.  */
15148           error ("spurious `>>', use `>' to terminate a template argument list");
15149           cp_lexer_consume_token (parser->lexer);
15150         }
15151     }
15152   else if (!cp_parser_require (parser, CPP_GREATER, "`>'"))
15153     error ("missing `>' to terminate the template argument list");
15154   /* The `>' token might be a greater-than operator again now.  */
15155   parser->greater_than_is_operator_p
15156     = saved_greater_than_is_operator_p;
15157   /* Restore the SAVED_SCOPE.  */
15158   parser->scope = saved_scope;
15159   parser->qualifying_scope = saved_qualifying_scope;
15160   parser->object_scope = saved_object_scope;
15161
15162   return arguments;
15163 }
15164
15165 /* MEMBER_FUNCTION is a member function, or a friend.  If default
15166    arguments, or the body of the function have not yet been parsed,
15167    parse them now.  */
15168
15169 static void
15170 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
15171 {
15172   cp_lexer *saved_lexer;
15173
15174   /* If this member is a template, get the underlying
15175      FUNCTION_DECL.  */
15176   if (DECL_FUNCTION_TEMPLATE_P (member_function))
15177     member_function = DECL_TEMPLATE_RESULT (member_function);
15178
15179   /* There should not be any class definitions in progress at this
15180      point; the bodies of members are only parsed outside of all class
15181      definitions.  */
15182   my_friendly_assert (parser->num_classes_being_defined == 0, 20010816);
15183   /* While we're parsing the member functions we might encounter more
15184      classes.  We want to handle them right away, but we don't want
15185      them getting mixed up with functions that are currently in the
15186      queue.  */
15187   parser->unparsed_functions_queues
15188     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15189
15190   /* Make sure that any template parameters are in scope.  */
15191   maybe_begin_member_template_processing (member_function);
15192
15193   /* If the body of the function has not yet been parsed, parse it
15194      now.  */
15195   if (DECL_PENDING_INLINE_P (member_function))
15196     {
15197       tree function_scope;
15198       cp_token_cache *tokens;
15199
15200       /* The function is no longer pending; we are processing it.  */
15201       tokens = DECL_PENDING_INLINE_INFO (member_function);
15202       DECL_PENDING_INLINE_INFO (member_function) = NULL;
15203       DECL_PENDING_INLINE_P (member_function) = 0;
15204       /* If this was an inline function in a local class, enter the scope
15205          of the containing function.  */
15206       function_scope = decl_function_context (member_function);
15207       if (function_scope)
15208         push_function_context_to (function_scope);
15209
15210       /* Save away the current lexer.  */
15211       saved_lexer = parser->lexer;
15212       /* Make a new lexer to feed us the tokens saved for this function.  */
15213       parser->lexer = cp_lexer_new_from_tokens (tokens);
15214       parser->lexer->next = saved_lexer;
15215
15216       /* Set the current source position to be the location of the first
15217          token in the saved inline body.  */
15218       cp_lexer_peek_token (parser->lexer);
15219
15220       /* Let the front end know that we going to be defining this
15221          function.  */
15222       start_preparsed_function (member_function, NULL_TREE,
15223                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
15224
15225       /* Now, parse the body of the function.  */
15226       cp_parser_function_definition_after_declarator (parser,
15227                                                       /*inline_p=*/true);
15228
15229       /* Leave the scope of the containing function.  */
15230       if (function_scope)
15231         pop_function_context_from (function_scope);
15232       /* Restore the lexer.  */
15233       parser->lexer = saved_lexer;
15234     }
15235
15236   /* Remove any template parameters from the symbol table.  */
15237   maybe_end_member_template_processing ();
15238
15239   /* Restore the queue.  */
15240   parser->unparsed_functions_queues
15241     = TREE_CHAIN (parser->unparsed_functions_queues);
15242 }
15243
15244 /* If DECL contains any default args, remember it on the unparsed
15245    functions queue.  */
15246
15247 static void
15248 cp_parser_save_default_args (cp_parser* parser, tree decl)
15249 {
15250   tree probe;
15251
15252   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
15253        probe;
15254        probe = TREE_CHAIN (probe))
15255     if (TREE_PURPOSE (probe))
15256       {
15257         TREE_PURPOSE (parser->unparsed_functions_queues)
15258           = tree_cons (current_class_type, decl,
15259                        TREE_PURPOSE (parser->unparsed_functions_queues));
15260         break;
15261       }
15262   return;
15263 }
15264
15265 /* FN is a FUNCTION_DECL which may contains a parameter with an
15266    unparsed DEFAULT_ARG.  Parse the default args now.  This function
15267    assumes that the current scope is the scope in which the default
15268    argument should be processed.  */
15269
15270 static void
15271 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
15272 {
15273   cp_lexer *saved_lexer;
15274   cp_token_cache *tokens;
15275   bool saved_local_variables_forbidden_p;
15276   tree parameters;
15277
15278   /* While we're parsing the default args, we might (due to the
15279      statement expression extension) encounter more classes.  We want
15280      to handle them right away, but we don't want them getting mixed
15281      up with default args that are currently in the queue.  */
15282   parser->unparsed_functions_queues
15283     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15284
15285   for (parameters = TYPE_ARG_TYPES (TREE_TYPE (fn));
15286        parameters;
15287        parameters = TREE_CHAIN (parameters))
15288     {
15289       if (!TREE_PURPOSE (parameters)
15290           || TREE_CODE (TREE_PURPOSE (parameters)) != DEFAULT_ARG)
15291         continue;
15292
15293        /* Save away the current lexer.  */
15294       saved_lexer = parser->lexer;
15295        /* Create a new one, using the tokens we have saved.  */
15296       tokens =  DEFARG_TOKENS (TREE_PURPOSE (parameters));
15297       parser->lexer = cp_lexer_new_from_tokens (tokens);
15298
15299        /* Set the current source position to be the location of the
15300           first token in the default argument.  */
15301       cp_lexer_peek_token (parser->lexer);
15302
15303        /* Local variable names (and the `this' keyword) may not appear
15304           in a default argument.  */
15305       saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
15306       parser->local_variables_forbidden_p = true;
15307        /* Parse the assignment-expression.  */
15308       TREE_PURPOSE (parameters) = cp_parser_assignment_expression (parser);
15309
15310       /* If the token stream has not been completely used up, then
15311          there was extra junk after the end of the default
15312          argument.  */
15313       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
15314         cp_parser_error (parser, "expected `,'");
15315
15316        /* Restore saved state.  */
15317       parser->lexer = saved_lexer;
15318       parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
15319     }
15320
15321   /* Restore the queue.  */
15322   parser->unparsed_functions_queues
15323     = TREE_CHAIN (parser->unparsed_functions_queues);
15324 }
15325
15326 /* Parse the operand of `sizeof' (or a similar operator).  Returns
15327    either a TYPE or an expression, depending on the form of the
15328    input.  The KEYWORD indicates which kind of expression we have
15329    encountered.  */
15330
15331 static tree
15332 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
15333 {
15334   static const char *format;
15335   tree expr = NULL_TREE;
15336   const char *saved_message;
15337   bool saved_integral_constant_expression_p;
15338
15339   /* Initialize FORMAT the first time we get here.  */
15340   if (!format)
15341     format = "types may not be defined in `%s' expressions";
15342
15343   /* Types cannot be defined in a `sizeof' expression.  Save away the
15344      old message.  */
15345   saved_message = parser->type_definition_forbidden_message;
15346   /* And create the new one.  */
15347   parser->type_definition_forbidden_message
15348     = xmalloc (strlen (format)
15349                + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
15350                + 1 /* `\0' */);
15351   sprintf ((char *) parser->type_definition_forbidden_message,
15352            format, IDENTIFIER_POINTER (ridpointers[keyword]));
15353
15354   /* The restrictions on constant-expressions do not apply inside
15355      sizeof expressions.  */
15356   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
15357   parser->integral_constant_expression_p = false;
15358
15359   /* Do not actually evaluate the expression.  */
15360   ++skip_evaluation;
15361   /* If it's a `(', then we might be looking at the type-id
15362      construction.  */
15363   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
15364     {
15365       tree type;
15366       bool saved_in_type_id_in_expr_p;
15367
15368       /* We can't be sure yet whether we're looking at a type-id or an
15369          expression.  */
15370       cp_parser_parse_tentatively (parser);
15371       /* Consume the `('.  */
15372       cp_lexer_consume_token (parser->lexer);
15373       /* Parse the type-id.  */
15374       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
15375       parser->in_type_id_in_expr_p = true;
15376       type = cp_parser_type_id (parser);
15377       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
15378       /* Now, look for the trailing `)'.  */
15379       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
15380       /* If all went well, then we're done.  */
15381       if (cp_parser_parse_definitely (parser))
15382         {
15383           cp_decl_specifier_seq decl_specs;
15384
15385           /* Build a trivial decl-specifier-seq.  */
15386           clear_decl_specs (&decl_specs);
15387           decl_specs.type = type;
15388
15389           /* Call grokdeclarator to figure out what type this is.  */
15390           expr = grokdeclarator (NULL,
15391                                  &decl_specs,
15392                                  TYPENAME,
15393                                  /*initialized=*/0,
15394                                  /*attrlist=*/NULL);
15395         }
15396     }
15397
15398   /* If the type-id production did not work out, then we must be
15399      looking at the unary-expression production.  */
15400   if (!expr)
15401     expr = cp_parser_unary_expression (parser, /*address_p=*/false);
15402   /* Go back to evaluating expressions.  */
15403   --skip_evaluation;
15404
15405   /* Free the message we created.  */
15406   free ((char *) parser->type_definition_forbidden_message);
15407   /* And restore the old one.  */
15408   parser->type_definition_forbidden_message = saved_message;
15409   parser->integral_constant_expression_p = saved_integral_constant_expression_p;
15410
15411   return expr;
15412 }
15413
15414 /* If the current declaration has no declarator, return true.  */
15415
15416 static bool
15417 cp_parser_declares_only_class_p (cp_parser *parser)
15418 {
15419   /* If the next token is a `;' or a `,' then there is no
15420      declarator.  */
15421   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
15422           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
15423 }
15424
15425 /* Update the DECL_SPECS to reflect the STORAGE_CLASS.  */
15426
15427 static void
15428 cp_parser_set_storage_class (cp_decl_specifier_seq *decl_specs,
15429                              cp_storage_class storage_class)
15430 {
15431   if (decl_specs->storage_class != sc_none)
15432     decl_specs->multiple_storage_classes_p = true;
15433   else
15434     decl_specs->storage_class = storage_class;
15435 }
15436
15437 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
15438    is true, the type is a user-defined type; otherwise it is a
15439    built-in type specified by a keyword.  */
15440
15441 static void
15442 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
15443                               tree type_spec,
15444                               bool user_defined_p)
15445 {
15446   decl_specs->any_specifiers_p = true;
15447
15448   /* If the user tries to redeclare a built-in type (with, for example,
15449      in "typedef int wchar_t;") we remember that this is what
15450      happened.  In system headers, we ignore these declarations so
15451      that G++ can work with system headers that are not C++-safe.  */
15452   if (decl_specs->specs[(int) ds_typedef]
15453       && !user_defined_p
15454       && (decl_specs->type
15455           || decl_specs->specs[(int) ds_long]
15456           || decl_specs->specs[(int) ds_short]
15457           || decl_specs->specs[(int) ds_unsigned]
15458           || decl_specs->specs[(int) ds_signed]))
15459     {
15460       decl_specs->redefined_builtin_type = type_spec;
15461       if (!decl_specs->type)
15462         {
15463           decl_specs->type = type_spec;
15464           decl_specs->user_defined_type_p = false;
15465         }
15466     }
15467   else if (decl_specs->type)
15468     decl_specs->multiple_types_p = true;
15469   else
15470     {
15471       decl_specs->type = type_spec;
15472       decl_specs->user_defined_type_p = user_defined_p;
15473       decl_specs->redefined_builtin_type = NULL_TREE;
15474     }
15475 }
15476
15477 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
15478    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
15479
15480 static bool
15481 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
15482 {
15483   return decl_specifiers->specs[(int) ds_friend] != 0;
15484 }
15485
15486 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
15487    issue an error message indicating that TOKEN_DESC was expected.
15488
15489    Returns the token consumed, if the token had the appropriate type.
15490    Otherwise, returns NULL.  */
15491
15492 static cp_token *
15493 cp_parser_require (cp_parser* parser,
15494                    enum cpp_ttype type,
15495                    const char* token_desc)
15496 {
15497   if (cp_lexer_next_token_is (parser->lexer, type))
15498     return cp_lexer_consume_token (parser->lexer);
15499   else
15500     {
15501       /* Output the MESSAGE -- unless we're parsing tentatively.  */
15502       if (!cp_parser_simulate_error (parser))
15503         {
15504           char *message = concat ("expected ", token_desc, NULL);
15505           cp_parser_error (parser, message);
15506           free (message);
15507         }
15508       return NULL;
15509     }
15510 }
15511
15512 /* Like cp_parser_require, except that tokens will be skipped until
15513    the desired token is found.  An error message is still produced if
15514    the next token is not as expected.  */
15515
15516 static void
15517 cp_parser_skip_until_found (cp_parser* parser,
15518                             enum cpp_ttype type,
15519                             const char* token_desc)
15520 {
15521   cp_token *token;
15522   unsigned nesting_depth = 0;
15523
15524   if (cp_parser_require (parser, type, token_desc))
15525     return;
15526
15527   /* Skip tokens until the desired token is found.  */
15528   while (true)
15529     {
15530       /* Peek at the next token.  */
15531       token = cp_lexer_peek_token (parser->lexer);
15532       /* If we've reached the token we want, consume it and
15533          stop.  */
15534       if (token->type == type && !nesting_depth)
15535         {
15536           cp_lexer_consume_token (parser->lexer);
15537           return;
15538         }
15539       /* If we've run out of tokens, stop.  */
15540       if (token->type == CPP_EOF)
15541         return;
15542       if (token->type == CPP_OPEN_BRACE
15543           || token->type == CPP_OPEN_PAREN
15544           || token->type == CPP_OPEN_SQUARE)
15545         ++nesting_depth;
15546       else if (token->type == CPP_CLOSE_BRACE
15547                || token->type == CPP_CLOSE_PAREN
15548                || token->type == CPP_CLOSE_SQUARE)
15549         {
15550           if (nesting_depth-- == 0)
15551             return;
15552         }
15553       /* Consume this token.  */
15554       cp_lexer_consume_token (parser->lexer);
15555     }
15556 }
15557
15558 /* If the next token is the indicated keyword, consume it.  Otherwise,
15559    issue an error message indicating that TOKEN_DESC was expected.
15560
15561    Returns the token consumed, if the token had the appropriate type.
15562    Otherwise, returns NULL.  */
15563
15564 static cp_token *
15565 cp_parser_require_keyword (cp_parser* parser,
15566                            enum rid keyword,
15567                            const char* token_desc)
15568 {
15569   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
15570
15571   if (token && token->keyword != keyword)
15572     {
15573       dyn_string_t error_msg;
15574
15575       /* Format the error message.  */
15576       error_msg = dyn_string_new (0);
15577       dyn_string_append_cstr (error_msg, "expected ");
15578       dyn_string_append_cstr (error_msg, token_desc);
15579       cp_parser_error (parser, error_msg->s);
15580       dyn_string_delete (error_msg);
15581       return NULL;
15582     }
15583
15584   return token;
15585 }
15586
15587 /* Returns TRUE iff TOKEN is a token that can begin the body of a
15588    function-definition.  */
15589
15590 static bool
15591 cp_parser_token_starts_function_definition_p (cp_token* token)
15592 {
15593   return (/* An ordinary function-body begins with an `{'.  */
15594           token->type == CPP_OPEN_BRACE
15595           /* A ctor-initializer begins with a `:'.  */
15596           || token->type == CPP_COLON
15597           /* A function-try-block begins with `try'.  */
15598           || token->keyword == RID_TRY
15599           /* The named return value extension begins with `return'.  */
15600           || token->keyword == RID_RETURN);
15601 }
15602
15603 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
15604    definition.  */
15605
15606 static bool
15607 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
15608 {
15609   cp_token *token;
15610
15611   token = cp_lexer_peek_token (parser->lexer);
15612   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
15613 }
15614
15615 /* Returns TRUE iff the next token is the "," or ">" ending a
15616    template-argument. ">>" is also accepted (after the full
15617    argument was parsed) because it's probably a typo for "> >",
15618    and there is a specific diagnostic for this.  */
15619
15620 static bool
15621 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
15622 {
15623   cp_token *token;
15624
15625   token = cp_lexer_peek_token (parser->lexer);
15626   return (token->type == CPP_COMMA || token->type == CPP_GREATER
15627           || token->type == CPP_RSHIFT);
15628 }
15629
15630 /* Returns TRUE iff the n-th token is a ">", or the n-th is a "[" and the
15631    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
15632
15633 static bool
15634 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
15635                                                      size_t n)
15636 {
15637   cp_token *token;
15638
15639   token = cp_lexer_peek_nth_token (parser->lexer, n);
15640   if (token->type == CPP_LESS)
15641     return true;
15642   /* Check for the sequence `<::' in the original code. It would be lexed as
15643      `[:', where `[' is a digraph, and there is no whitespace before
15644      `:'.  */
15645   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
15646     {
15647       cp_token *token2;
15648       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
15649       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
15650         return true;
15651     }
15652   return false;
15653 }
15654
15655 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
15656    or none_type otherwise.  */
15657
15658 static enum tag_types
15659 cp_parser_token_is_class_key (cp_token* token)
15660 {
15661   switch (token->keyword)
15662     {
15663     case RID_CLASS:
15664       return class_type;
15665     case RID_STRUCT:
15666       return record_type;
15667     case RID_UNION:
15668       return union_type;
15669
15670     default:
15671       return none_type;
15672     }
15673 }
15674
15675 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
15676
15677 static void
15678 cp_parser_check_class_key (enum tag_types class_key, tree type)
15679 {
15680   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
15681     pedwarn ("`%s' tag used in naming `%#T'",
15682             class_key == union_type ? "union"
15683              : class_key == record_type ? "struct" : "class",
15684              type);
15685 }
15686
15687 /* Issue an error message if DECL is redeclared with different
15688    access than its original declaration [class.access.spec/3].
15689    This applies to nested classes and nested class templates.
15690    [class.mem/1].  */
15691
15692 static void cp_parser_check_access_in_redeclaration (tree decl)
15693 {
15694   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
15695     return;
15696
15697   if ((TREE_PRIVATE (decl)
15698        != (current_access_specifier == access_private_node))
15699       || (TREE_PROTECTED (decl)
15700           != (current_access_specifier == access_protected_node)))
15701     error ("%D redeclared with different access", decl);
15702 }
15703
15704 /* Look for the `template' keyword, as a syntactic disambiguator.
15705    Return TRUE iff it is present, in which case it will be
15706    consumed.  */
15707
15708 static bool
15709 cp_parser_optional_template_keyword (cp_parser *parser)
15710 {
15711   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
15712     {
15713       /* The `template' keyword can only be used within templates;
15714          outside templates the parser can always figure out what is a
15715          template and what is not.  */
15716       if (!processing_template_decl)
15717         {
15718           error ("`template' (as a disambiguator) is only allowed "
15719                  "within templates");
15720           /* If this part of the token stream is rescanned, the same
15721              error message would be generated.  So, we purge the token
15722              from the stream.  */
15723           cp_lexer_purge_token (parser->lexer);
15724           return false;
15725         }
15726       else
15727         {
15728           /* Consume the `template' keyword.  */
15729           cp_lexer_consume_token (parser->lexer);
15730           return true;
15731         }
15732     }
15733
15734   return false;
15735 }
15736
15737 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
15738    set PARSER->SCOPE, and perform other related actions.  */
15739
15740 static void
15741 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
15742 {
15743   tree value;
15744   tree check;
15745
15746   /* Get the stored value.  */
15747   value = cp_lexer_consume_token (parser->lexer)->value;
15748   /* Perform any access checks that were deferred.  */
15749   for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
15750     perform_or_defer_access_check (TREE_PURPOSE (check), TREE_VALUE (check));
15751   /* Set the scope from the stored value.  */
15752   parser->scope = TREE_VALUE (value);
15753   parser->qualifying_scope = TREE_TYPE (value);
15754   parser->object_scope = NULL_TREE;
15755 }
15756
15757 /* Add tokens to CACHE until a non-nested END token appears.  */
15758
15759 static void
15760 cp_parser_cache_group_1 (cp_parser *parser,
15761                          cp_token_cache *cache,
15762                          enum cpp_ttype end,
15763                          unsigned depth)
15764 {
15765   while (true)
15766     {
15767       cp_token *token;
15768
15769       /* Abort a parenthesized expression if we encounter a brace.  */
15770       if ((end == CPP_CLOSE_PAREN || depth == 0)
15771           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15772         return;
15773       /* If we've reached the end of the file, stop.  */
15774       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
15775         return;
15776       /* Consume the next token.  */
15777       token = cp_lexer_consume_token (parser->lexer);
15778       /* Add this token to the tokens we are saving.  */
15779       cp_token_cache_push_token (cache, token);
15780       /* See if it starts a new group.  */
15781       if (token->type == CPP_OPEN_BRACE)
15782         {
15783           cp_parser_cache_group_1 (parser, cache, CPP_CLOSE_BRACE, depth + 1);
15784           if (depth == 0)
15785             return;
15786         }
15787       else if (token->type == CPP_OPEN_PAREN)
15788         cp_parser_cache_group_1 (parser, cache, CPP_CLOSE_PAREN, depth + 1);
15789       else if (token->type == end)
15790         return;
15791     }
15792 }
15793
15794 /* Convenient interface for cp_parser_cache_group_1 that makes sure we
15795    preserve string tokens in both translated and untranslated
15796    forms.  */
15797
15798 static void
15799 cp_parser_cache_group (cp_parser *parser,
15800                          cp_token_cache *cache,
15801                          enum cpp_ttype end,
15802                          unsigned depth)
15803 {
15804   int saved_c_lex_string_translate;
15805
15806   saved_c_lex_string_translate = c_lex_string_translate;
15807   c_lex_string_translate = -1;
15808
15809   cp_parser_cache_group_1 (parser, cache, end, depth);
15810
15811   c_lex_string_translate = saved_c_lex_string_translate;
15812 }
15813
15814
15815 /* Begin parsing tentatively.  We always save tokens while parsing
15816    tentatively so that if the tentative parsing fails we can restore the
15817    tokens.  */
15818
15819 static void
15820 cp_parser_parse_tentatively (cp_parser* parser)
15821 {
15822   /* Enter a new parsing context.  */
15823   parser->context = cp_parser_context_new (parser->context);
15824   /* Begin saving tokens.  */
15825   cp_lexer_save_tokens (parser->lexer);
15826   /* In order to avoid repetitive access control error messages,
15827      access checks are queued up until we are no longer parsing
15828      tentatively.  */
15829   push_deferring_access_checks (dk_deferred);
15830 }
15831
15832 /* Commit to the currently active tentative parse.  */
15833
15834 static void
15835 cp_parser_commit_to_tentative_parse (cp_parser* parser)
15836 {
15837   cp_parser_context *context;
15838   cp_lexer *lexer;
15839
15840   /* Mark all of the levels as committed.  */
15841   lexer = parser->lexer;
15842   for (context = parser->context; context->next; context = context->next)
15843     {
15844       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
15845         break;
15846       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
15847       while (!cp_lexer_saving_tokens (lexer))
15848         lexer = lexer->next;
15849       cp_lexer_commit_tokens (lexer);
15850     }
15851 }
15852
15853 /* Abort the currently active tentative parse.  All consumed tokens
15854    will be rolled back, and no diagnostics will be issued.  */
15855
15856 static void
15857 cp_parser_abort_tentative_parse (cp_parser* parser)
15858 {
15859   cp_parser_simulate_error (parser);
15860   /* Now, pretend that we want to see if the construct was
15861      successfully parsed.  */
15862   cp_parser_parse_definitely (parser);
15863 }
15864
15865 /* Stop parsing tentatively.  If a parse error has occurred, restore the
15866    token stream.  Otherwise, commit to the tokens we have consumed.
15867    Returns true if no error occurred; false otherwise.  */
15868
15869 static bool
15870 cp_parser_parse_definitely (cp_parser* parser)
15871 {
15872   bool error_occurred;
15873   cp_parser_context *context;
15874
15875   /* Remember whether or not an error occurred, since we are about to
15876      destroy that information.  */
15877   error_occurred = cp_parser_error_occurred (parser);
15878   /* Remove the topmost context from the stack.  */
15879   context = parser->context;
15880   parser->context = context->next;
15881   /* If no parse errors occurred, commit to the tentative parse.  */
15882   if (!error_occurred)
15883     {
15884       /* Commit to the tokens read tentatively, unless that was
15885          already done.  */
15886       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
15887         cp_lexer_commit_tokens (parser->lexer);
15888
15889       pop_to_parent_deferring_access_checks ();
15890     }
15891   /* Otherwise, if errors occurred, roll back our state so that things
15892      are just as they were before we began the tentative parse.  */
15893   else
15894     {
15895       cp_lexer_rollback_tokens (parser->lexer);
15896       pop_deferring_access_checks ();
15897     }
15898   /* Add the context to the front of the free list.  */
15899   context->next = cp_parser_context_free_list;
15900   cp_parser_context_free_list = context;
15901
15902   return !error_occurred;
15903 }
15904
15905 /* Returns true if we are parsing tentatively -- but have decided that
15906    we will stick with this tentative parse, even if errors occur.  */
15907
15908 static bool
15909 cp_parser_committed_to_tentative_parse (cp_parser* parser)
15910 {
15911   return (cp_parser_parsing_tentatively (parser)
15912           && parser->context->status == CP_PARSER_STATUS_KIND_COMMITTED);
15913 }
15914
15915 /* Returns nonzero iff an error has occurred during the most recent
15916    tentative parse.  */
15917
15918 static bool
15919 cp_parser_error_occurred (cp_parser* parser)
15920 {
15921   return (cp_parser_parsing_tentatively (parser)
15922           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
15923 }
15924
15925 /* Returns nonzero if GNU extensions are allowed.  */
15926
15927 static bool
15928 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
15929 {
15930   return parser->allow_gnu_extensions_p;
15931 }
15932
15933 \f
15934 /* The parser.  */
15935
15936 static GTY (()) cp_parser *the_parser;
15937
15938 /* External interface.  */
15939
15940 /* Parse one entire translation unit.  */
15941
15942 void
15943 c_parse_file (void)
15944 {
15945   bool error_occurred;
15946   static bool already_called = false;
15947
15948   if (already_called)
15949     {
15950       sorry ("inter-module optimizations not implemented for C++");
15951       return;
15952     }
15953   already_called = true;
15954
15955   the_parser = cp_parser_new ();
15956   push_deferring_access_checks (flag_access_control
15957                                 ? dk_no_deferred : dk_no_check);
15958   error_occurred = cp_parser_translation_unit (the_parser);
15959   the_parser = NULL;
15960 }
15961
15962 /* This variable must be provided by every front end.  */
15963
15964 int yydebug;
15965
15966 #include "gt-cp-parser.h"