OSDN Git Service

cp/
[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_CNEW (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_CNEW (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_CNEW (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_CNEW (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_NEWVEC (cp_token, num_tokens);
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_CNEW (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_CNEW (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   
5863   expr = (build_reinterpret_cast 
5864           (build_reference_type (cp_build_qualified_type 
5865                                  (char_type_node, 
5866                                   TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)), 
5867            expr));
5868   expr = build_x_unary_op (ADDR_EXPR, expr);
5869   expr = build_reinterpret_cast (size_type_node, expr);
5870
5871  failure:
5872   parser->integral_constant_expression_p = save_ice_p;
5873   parser->non_integral_constant_expression_p = save_non_ice_p;
5874
5875   return expr;
5876 }
5877
5878 /* Statements [gram.stmt.stmt]  */
5879
5880 /* Parse a statement.
5881
5882    statement:
5883      labeled-statement
5884      expression-statement
5885      compound-statement
5886      selection-statement
5887      iteration-statement
5888      jump-statement
5889      declaration-statement
5890      try-block  */
5891
5892 static void
5893 cp_parser_statement (cp_parser* parser, tree in_statement_expr)
5894 {
5895   tree statement;
5896   cp_token *token;
5897   location_t statement_location;
5898
5899   /* There is no statement yet.  */
5900   statement = NULL_TREE;
5901   /* Peek at the next token.  */
5902   token = cp_lexer_peek_token (parser->lexer);
5903   /* Remember the location of the first token in the statement.  */
5904   statement_location = token->location;
5905   /* If this is a keyword, then that will often determine what kind of
5906      statement we have.  */
5907   if (token->type == CPP_KEYWORD)
5908     {
5909       enum rid keyword = token->keyword;
5910
5911       switch (keyword)
5912         {
5913         case RID_CASE:
5914         case RID_DEFAULT:
5915           statement = cp_parser_labeled_statement (parser,
5916                                                    in_statement_expr);
5917           break;
5918
5919         case RID_IF:
5920         case RID_SWITCH:
5921           statement = cp_parser_selection_statement (parser);
5922           break;
5923
5924         case RID_WHILE:
5925         case RID_DO:
5926         case RID_FOR:
5927           statement = cp_parser_iteration_statement (parser);
5928           break;
5929
5930         case RID_BREAK:
5931         case RID_CONTINUE:
5932         case RID_RETURN:
5933         case RID_GOTO:
5934           statement = cp_parser_jump_statement (parser);
5935           break;
5936
5937         case RID_TRY:
5938           statement = cp_parser_try_block (parser);
5939           break;
5940
5941         default:
5942           /* It might be a keyword like `int' that can start a
5943              declaration-statement.  */
5944           break;
5945         }
5946     }
5947   else if (token->type == CPP_NAME)
5948     {
5949       /* If the next token is a `:', then we are looking at a
5950          labeled-statement.  */
5951       token = cp_lexer_peek_nth_token (parser->lexer, 2);
5952       if (token->type == CPP_COLON)
5953         statement = cp_parser_labeled_statement (parser, in_statement_expr);
5954     }
5955   /* Anything that starts with a `{' must be a compound-statement.  */
5956   else if (token->type == CPP_OPEN_BRACE)
5957     statement = cp_parser_compound_statement (parser, NULL, false);
5958
5959   /* Everything else must be a declaration-statement or an
5960      expression-statement.  Try for the declaration-statement
5961      first, unless we are looking at a `;', in which case we know that
5962      we have an expression-statement.  */
5963   if (!statement)
5964     {
5965       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
5966         {
5967           cp_parser_parse_tentatively (parser);
5968           /* Try to parse the declaration-statement.  */
5969           cp_parser_declaration_statement (parser);
5970           /* If that worked, we're done.  */
5971           if (cp_parser_parse_definitely (parser))
5972             return;
5973         }
5974       /* Look for an expression-statement instead.  */
5975       statement = cp_parser_expression_statement (parser, in_statement_expr);
5976     }
5977
5978   /* Set the line number for the statement.  */
5979   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
5980     SET_EXPR_LOCATION (statement, statement_location);
5981 }
5982
5983 /* Parse a labeled-statement.
5984
5985    labeled-statement:
5986      identifier : statement
5987      case constant-expression : statement
5988      default : statement
5989
5990    GNU Extension:
5991
5992    labeled-statement:
5993      case constant-expression ... constant-expression : statement
5994
5995    Returns the new CASE_LABEL_EXPR, for a `case' or `default' label.
5996    For an ordinary label, returns a LABEL_EXPR.  */
5997
5998 static tree
5999 cp_parser_labeled_statement (cp_parser* parser, tree in_statement_expr)
6000 {
6001   cp_token *token;
6002   tree statement = error_mark_node;
6003
6004   /* The next token should be an identifier.  */
6005   token = cp_lexer_peek_token (parser->lexer);
6006   if (token->type != CPP_NAME
6007       && token->type != CPP_KEYWORD)
6008     {
6009       cp_parser_error (parser, "expected labeled-statement");
6010       return error_mark_node;
6011     }
6012
6013   switch (token->keyword)
6014     {
6015     case RID_CASE:
6016       {
6017         tree expr, expr_hi;
6018         cp_token *ellipsis;
6019
6020         /* Consume the `case' token.  */
6021         cp_lexer_consume_token (parser->lexer);
6022         /* Parse the constant-expression.  */
6023         expr = cp_parser_constant_expression (parser,
6024                                               /*allow_non_constant_p=*/false,
6025                                               NULL);
6026
6027         ellipsis = cp_lexer_peek_token (parser->lexer);
6028         if (ellipsis->type == CPP_ELLIPSIS)
6029           {
6030             /* Consume the `...' token.  */
6031             cp_lexer_consume_token (parser->lexer);
6032             expr_hi =
6033               cp_parser_constant_expression (parser,
6034                                              /*allow_non_constant_p=*/false,
6035                                              NULL);
6036             /* We don't need to emit warnings here, as the common code
6037                will do this for us.  */
6038           }
6039         else
6040           expr_hi = NULL_TREE;
6041
6042         if (!parser->in_switch_statement_p)
6043           error ("case label `%E' not within a switch statement", expr);
6044         else
6045           statement = finish_case_label (expr, expr_hi);
6046       }
6047       break;
6048
6049     case RID_DEFAULT:
6050       /* Consume the `default' token.  */
6051       cp_lexer_consume_token (parser->lexer);
6052       if (!parser->in_switch_statement_p)
6053         error ("case label not within a switch statement");
6054       else
6055         statement = finish_case_label (NULL_TREE, NULL_TREE);
6056       break;
6057
6058     default:
6059       /* Anything else must be an ordinary label.  */
6060       statement = finish_label_stmt (cp_parser_identifier (parser));
6061       break;
6062     }
6063
6064   /* Require the `:' token.  */
6065   cp_parser_require (parser, CPP_COLON, "`:'");
6066   /* Parse the labeled statement.  */
6067   cp_parser_statement (parser, in_statement_expr);
6068
6069   /* Return the label, in the case of a `case' or `default' label.  */
6070   return statement;
6071 }
6072
6073 /* Parse an expression-statement.
6074
6075    expression-statement:
6076      expression [opt] ;
6077
6078    Returns the new EXPR_STMT -- or NULL_TREE if the expression
6079    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6080    indicates whether this expression-statement is part of an
6081    expression statement.  */
6082
6083 static tree
6084 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6085 {
6086   tree statement = NULL_TREE;
6087
6088   /* If the next token is a ';', then there is no expression
6089      statement.  */
6090   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6091     statement = cp_parser_expression (parser);
6092
6093   /* Consume the final `;'.  */
6094   cp_parser_consume_semicolon_at_end_of_statement (parser);
6095
6096   if (in_statement_expr
6097       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6098     {
6099       /* This is the final expression statement of a statement
6100          expression.  */
6101       statement = finish_stmt_expr_expr (statement, in_statement_expr);
6102     }
6103   else if (statement)
6104     statement = finish_expr_stmt (statement);
6105   else
6106     finish_stmt ();
6107
6108   return statement;
6109 }
6110
6111 /* Parse a compound-statement.
6112
6113    compound-statement:
6114      { statement-seq [opt] }
6115
6116    Returns a tree representing the statement.  */
6117
6118 static tree
6119 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6120                               bool in_try)
6121 {
6122   tree compound_stmt;
6123
6124   /* Consume the `{'.  */
6125   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6126     return error_mark_node;
6127   /* Begin the compound-statement.  */
6128   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6129   /* Parse an (optional) statement-seq.  */
6130   cp_parser_statement_seq_opt (parser, in_statement_expr);
6131   /* Finish the compound-statement.  */
6132   finish_compound_stmt (compound_stmt);
6133   /* Consume the `}'.  */
6134   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6135
6136   return compound_stmt;
6137 }
6138
6139 /* Parse an (optional) statement-seq.
6140
6141    statement-seq:
6142      statement
6143      statement-seq [opt] statement  */
6144
6145 static void
6146 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6147 {
6148   /* Scan statements until there aren't any more.  */
6149   while (true)
6150     {
6151       /* If we're looking at a `}', then we've run out of statements.  */
6152       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE)
6153           || cp_lexer_next_token_is (parser->lexer, CPP_EOF))
6154         break;
6155
6156       /* Parse the statement.  */
6157       cp_parser_statement (parser, in_statement_expr);
6158     }
6159 }
6160
6161 /* Parse a selection-statement.
6162
6163    selection-statement:
6164      if ( condition ) statement
6165      if ( condition ) statement else statement
6166      switch ( condition ) statement
6167
6168    Returns the new IF_STMT or SWITCH_STMT.  */
6169
6170 static tree
6171 cp_parser_selection_statement (cp_parser* parser)
6172 {
6173   cp_token *token;
6174   enum rid keyword;
6175
6176   /* Peek at the next token.  */
6177   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6178
6179   /* See what kind of keyword it is.  */
6180   keyword = token->keyword;
6181   switch (keyword)
6182     {
6183     case RID_IF:
6184     case RID_SWITCH:
6185       {
6186         tree statement;
6187         tree condition;
6188
6189         /* Look for the `('.  */
6190         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6191           {
6192             cp_parser_skip_to_end_of_statement (parser);
6193             return error_mark_node;
6194           }
6195
6196         /* Begin the selection-statement.  */
6197         if (keyword == RID_IF)
6198           statement = begin_if_stmt ();
6199         else
6200           statement = begin_switch_stmt ();
6201
6202         /* Parse the condition.  */
6203         condition = cp_parser_condition (parser);
6204         /* Look for the `)'.  */
6205         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6206           cp_parser_skip_to_closing_parenthesis (parser, true, false,
6207                                                  /*consume_paren=*/true);
6208
6209         if (keyword == RID_IF)
6210           {
6211             /* Add the condition.  */
6212             finish_if_stmt_cond (condition, statement);
6213
6214             /* Parse the then-clause.  */
6215             cp_parser_implicitly_scoped_statement (parser);
6216             finish_then_clause (statement);
6217
6218             /* If the next token is `else', parse the else-clause.  */
6219             if (cp_lexer_next_token_is_keyword (parser->lexer,
6220                                                 RID_ELSE))
6221               {
6222                 /* Consume the `else' keyword.  */
6223                 cp_lexer_consume_token (parser->lexer);
6224                 begin_else_clause (statement);
6225                 /* Parse the else-clause.  */
6226                 cp_parser_implicitly_scoped_statement (parser);
6227                 finish_else_clause (statement);
6228               }
6229
6230             /* Now we're all done with the if-statement.  */
6231             finish_if_stmt (statement);
6232           }
6233         else
6234           {
6235             bool in_switch_statement_p;
6236
6237             /* Add the condition.  */
6238             finish_switch_cond (condition, statement);
6239
6240             /* Parse the body of the switch-statement.  */
6241             in_switch_statement_p = parser->in_switch_statement_p;
6242             parser->in_switch_statement_p = true;
6243             cp_parser_implicitly_scoped_statement (parser);
6244             parser->in_switch_statement_p = in_switch_statement_p;
6245
6246             /* Now we're all done with the switch-statement.  */
6247             finish_switch_stmt (statement);
6248           }
6249
6250         return statement;
6251       }
6252       break;
6253
6254     default:
6255       cp_parser_error (parser, "expected selection-statement");
6256       return error_mark_node;
6257     }
6258 }
6259
6260 /* Parse a condition.
6261
6262    condition:
6263      expression
6264      type-specifier-seq declarator = assignment-expression
6265
6266    GNU Extension:
6267
6268    condition:
6269      type-specifier-seq declarator asm-specification [opt]
6270        attributes [opt] = assignment-expression
6271
6272    Returns the expression that should be tested.  */
6273
6274 static tree
6275 cp_parser_condition (cp_parser* parser)
6276 {
6277   cp_decl_specifier_seq type_specifiers;
6278   const char *saved_message;
6279
6280   /* Try the declaration first.  */
6281   cp_parser_parse_tentatively (parser);
6282   /* New types are not allowed in the type-specifier-seq for a
6283      condition.  */
6284   saved_message = parser->type_definition_forbidden_message;
6285   parser->type_definition_forbidden_message
6286     = "types may not be defined in conditions";
6287   /* Parse the type-specifier-seq.  */
6288   cp_parser_type_specifier_seq (parser, &type_specifiers);
6289   /* Restore the saved message.  */
6290   parser->type_definition_forbidden_message = saved_message;
6291   /* If all is well, we might be looking at a declaration.  */
6292   if (!cp_parser_error_occurred (parser))
6293     {
6294       tree decl;
6295       tree asm_specification;
6296       tree attributes;
6297       cp_declarator *declarator;
6298       tree initializer = NULL_TREE;
6299
6300       /* Parse the declarator.  */
6301       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6302                                          /*ctor_dtor_or_conv_p=*/NULL,
6303                                          /*parenthesized_p=*/NULL);
6304       /* Parse the attributes.  */
6305       attributes = cp_parser_attributes_opt (parser);
6306       /* Parse the asm-specification.  */
6307       asm_specification = cp_parser_asm_specification_opt (parser);
6308       /* If the next token is not an `=', then we might still be
6309          looking at an expression.  For example:
6310
6311            if (A(a).x)
6312
6313          looks like a decl-specifier-seq and a declarator -- but then
6314          there is no `=', so this is an expression.  */
6315       cp_parser_require (parser, CPP_EQ, "`='");
6316       /* If we did see an `=', then we are looking at a declaration
6317          for sure.  */
6318       if (cp_parser_parse_definitely (parser))
6319         {
6320           bool pop_p;
6321
6322           /* Create the declaration.  */
6323           decl = start_decl (declarator, &type_specifiers,
6324                              /*initialized_p=*/true,
6325                              attributes, /*prefix_attributes=*/NULL_TREE,
6326                              &pop_p);
6327           /* Parse the assignment-expression.  */
6328           initializer = cp_parser_assignment_expression (parser);
6329
6330           /* Process the initializer.  */
6331           cp_finish_decl (decl,
6332                           initializer,
6333                           asm_specification,
6334                           LOOKUP_ONLYCONVERTING);
6335           if (pop_p)
6336             pop_scope (DECL_CONTEXT (decl));
6337
6338           return convert_from_reference (decl);
6339         }
6340     }
6341   /* If we didn't even get past the declarator successfully, we are
6342      definitely not looking at a declaration.  */
6343   else
6344     cp_parser_abort_tentative_parse (parser);
6345
6346   /* Otherwise, we are looking at an expression.  */
6347   return cp_parser_expression (parser);
6348 }
6349
6350 /* Parse an iteration-statement.
6351
6352    iteration-statement:
6353      while ( condition ) statement
6354      do statement while ( expression ) ;
6355      for ( for-init-statement condition [opt] ; expression [opt] )
6356        statement
6357
6358    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6359
6360 static tree
6361 cp_parser_iteration_statement (cp_parser* parser)
6362 {
6363   cp_token *token;
6364   enum rid keyword;
6365   tree statement;
6366   bool in_iteration_statement_p;
6367
6368
6369   /* Peek at the next token.  */
6370   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6371   if (!token)
6372     return error_mark_node;
6373
6374   /* Remember whether or not we are already within an iteration
6375      statement.  */
6376   in_iteration_statement_p = parser->in_iteration_statement_p;
6377
6378   /* See what kind of keyword it is.  */
6379   keyword = token->keyword;
6380   switch (keyword)
6381     {
6382     case RID_WHILE:
6383       {
6384         tree condition;
6385
6386         /* Begin the while-statement.  */
6387         statement = begin_while_stmt ();
6388         /* Look for the `('.  */
6389         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6390         /* Parse the condition.  */
6391         condition = cp_parser_condition (parser);
6392         finish_while_stmt_cond (condition, statement);
6393         /* Look for the `)'.  */
6394         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6395         /* Parse the dependent statement.  */
6396         parser->in_iteration_statement_p = true;
6397         cp_parser_already_scoped_statement (parser);
6398         parser->in_iteration_statement_p = in_iteration_statement_p;
6399         /* We're done with the while-statement.  */
6400         finish_while_stmt (statement);
6401       }
6402       break;
6403
6404     case RID_DO:
6405       {
6406         tree expression;
6407
6408         /* Begin the do-statement.  */
6409         statement = begin_do_stmt ();
6410         /* Parse the body of the do-statement.  */
6411         parser->in_iteration_statement_p = true;
6412         cp_parser_implicitly_scoped_statement (parser);
6413         parser->in_iteration_statement_p = in_iteration_statement_p;
6414         finish_do_body (statement);
6415         /* Look for the `while' keyword.  */
6416         cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6417         /* Look for the `('.  */
6418         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6419         /* Parse the expression.  */
6420         expression = cp_parser_expression (parser);
6421         /* We're done with the do-statement.  */
6422         finish_do_stmt (expression, statement);
6423         /* Look for the `)'.  */
6424         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6425         /* Look for the `;'.  */
6426         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6427       }
6428       break;
6429
6430     case RID_FOR:
6431       {
6432         tree condition = NULL_TREE;
6433         tree expression = NULL_TREE;
6434
6435         /* Begin the for-statement.  */
6436         statement = begin_for_stmt ();
6437         /* Look for the `('.  */
6438         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6439         /* Parse the initialization.  */
6440         cp_parser_for_init_statement (parser);
6441         finish_for_init_stmt (statement);
6442
6443         /* If there's a condition, process it.  */
6444         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6445           condition = cp_parser_condition (parser);
6446         finish_for_cond (condition, statement);
6447         /* Look for the `;'.  */
6448         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6449
6450         /* If there's an expression, process it.  */
6451         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6452           expression = cp_parser_expression (parser);
6453         finish_for_expr (expression, statement);
6454         /* Look for the `)'.  */
6455         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6456
6457         /* Parse the body of the for-statement.  */
6458         parser->in_iteration_statement_p = true;
6459         cp_parser_already_scoped_statement (parser);
6460         parser->in_iteration_statement_p = in_iteration_statement_p;
6461
6462         /* We're done with the for-statement.  */
6463         finish_for_stmt (statement);
6464       }
6465       break;
6466
6467     default:
6468       cp_parser_error (parser, "expected iteration-statement");
6469       statement = error_mark_node;
6470       break;
6471     }
6472
6473   return statement;
6474 }
6475
6476 /* Parse a for-init-statement.
6477
6478    for-init-statement:
6479      expression-statement
6480      simple-declaration  */
6481
6482 static void
6483 cp_parser_for_init_statement (cp_parser* parser)
6484 {
6485   /* If the next token is a `;', then we have an empty
6486      expression-statement.  Grammatically, this is also a
6487      simple-declaration, but an invalid one, because it does not
6488      declare anything.  Therefore, if we did not handle this case
6489      specially, we would issue an error message about an invalid
6490      declaration.  */
6491   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6492     {
6493       /* We're going to speculatively look for a declaration, falling back
6494          to an expression, if necessary.  */
6495       cp_parser_parse_tentatively (parser);
6496       /* Parse the declaration.  */
6497       cp_parser_simple_declaration (parser,
6498                                     /*function_definition_allowed_p=*/false);
6499       /* If the tentative parse failed, then we shall need to look for an
6500          expression-statement.  */
6501       if (cp_parser_parse_definitely (parser))
6502         return;
6503     }
6504
6505   cp_parser_expression_statement (parser, false);
6506 }
6507
6508 /* Parse a jump-statement.
6509
6510    jump-statement:
6511      break ;
6512      continue ;
6513      return expression [opt] ;
6514      goto identifier ;
6515
6516    GNU extension:
6517
6518    jump-statement:
6519      goto * expression ;
6520
6521    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
6522
6523 static tree
6524 cp_parser_jump_statement (cp_parser* parser)
6525 {
6526   tree statement = error_mark_node;
6527   cp_token *token;
6528   enum rid keyword;
6529
6530   /* Peek at the next token.  */
6531   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6532   if (!token)
6533     return error_mark_node;
6534
6535   /* See what kind of keyword it is.  */
6536   keyword = token->keyword;
6537   switch (keyword)
6538     {
6539     case RID_BREAK:
6540       if (!parser->in_switch_statement_p
6541           && !parser->in_iteration_statement_p)
6542         {
6543           error ("break statement not within loop or switch");
6544           statement = error_mark_node;
6545         }
6546       else
6547         statement = finish_break_stmt ();
6548       cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6549       break;
6550
6551     case RID_CONTINUE:
6552       if (!parser->in_iteration_statement_p)
6553         {
6554           error ("continue statement not within a loop");
6555           statement = error_mark_node;
6556         }
6557       else
6558         statement = finish_continue_stmt ();
6559       cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6560       break;
6561
6562     case RID_RETURN:
6563       {
6564         tree expr;
6565
6566         /* If the next token is a `;', then there is no
6567            expression.  */
6568         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6569           expr = cp_parser_expression (parser);
6570         else
6571           expr = NULL_TREE;
6572         /* Build the return-statement.  */
6573         statement = finish_return_stmt (expr);
6574         /* Look for the final `;'.  */
6575         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6576       }
6577       break;
6578
6579     case RID_GOTO:
6580       /* Create the goto-statement.  */
6581       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
6582         {
6583           /* Issue a warning about this use of a GNU extension.  */
6584           if (pedantic)
6585             pedwarn ("ISO C++ forbids computed gotos");
6586           /* Consume the '*' token.  */
6587           cp_lexer_consume_token (parser->lexer);
6588           /* Parse the dependent expression.  */
6589           finish_goto_stmt (cp_parser_expression (parser));
6590         }
6591       else
6592         finish_goto_stmt (cp_parser_identifier (parser));
6593       /* Look for the final `;'.  */
6594       cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6595       break;
6596
6597     default:
6598       cp_parser_error (parser, "expected jump-statement");
6599       break;
6600     }
6601
6602   return statement;
6603 }
6604
6605 /* Parse a declaration-statement.
6606
6607    declaration-statement:
6608      block-declaration  */
6609
6610 static void
6611 cp_parser_declaration_statement (cp_parser* parser)
6612 {
6613   void *p;
6614
6615   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
6616   p = obstack_alloc (&declarator_obstack, 0);
6617
6618  /* Parse the block-declaration.  */
6619   cp_parser_block_declaration (parser, /*statement_p=*/true);
6620
6621   /* Free any declarators allocated.  */
6622   obstack_free (&declarator_obstack, p);
6623
6624   /* Finish off the statement.  */
6625   finish_stmt ();
6626 }
6627
6628 /* Some dependent statements (like `if (cond) statement'), are
6629    implicitly in their own scope.  In other words, if the statement is
6630    a single statement (as opposed to a compound-statement), it is
6631    none-the-less treated as if it were enclosed in braces.  Any
6632    declarations appearing in the dependent statement are out of scope
6633    after control passes that point.  This function parses a statement,
6634    but ensures that is in its own scope, even if it is not a
6635    compound-statement.
6636
6637    Returns the new statement.  */
6638
6639 static tree
6640 cp_parser_implicitly_scoped_statement (cp_parser* parser)
6641 {
6642   tree statement;
6643
6644   /* If the token is not a `{', then we must take special action.  */
6645   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6646     {
6647       /* Create a compound-statement.  */
6648       statement = begin_compound_stmt (0);
6649       /* Parse the dependent-statement.  */
6650       cp_parser_statement (parser, false);
6651       /* Finish the dummy compound-statement.  */
6652       finish_compound_stmt (statement);
6653     }
6654   /* Otherwise, we simply parse the statement directly.  */
6655   else
6656     statement = cp_parser_compound_statement (parser, NULL, false);
6657
6658   /* Return the statement.  */
6659   return statement;
6660 }
6661
6662 /* For some dependent statements (like `while (cond) statement'), we
6663    have already created a scope.  Therefore, even if the dependent
6664    statement is a compound-statement, we do not want to create another
6665    scope.  */
6666
6667 static void
6668 cp_parser_already_scoped_statement (cp_parser* parser)
6669 {
6670   /* If the token is a `{', then we must take special action.  */
6671   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6672     cp_parser_statement (parser, false);
6673   else
6674     {
6675       /* Avoid calling cp_parser_compound_statement, so that we
6676          don't create a new scope.  Do everything else by hand.  */
6677       cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
6678       cp_parser_statement_seq_opt (parser, false);
6679       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6680     }
6681 }
6682
6683 /* Declarations [gram.dcl.dcl] */
6684
6685 /* Parse an optional declaration-sequence.
6686
6687    declaration-seq:
6688      declaration
6689      declaration-seq declaration  */
6690
6691 static void
6692 cp_parser_declaration_seq_opt (cp_parser* parser)
6693 {
6694   while (true)
6695     {
6696       cp_token *token;
6697
6698       token = cp_lexer_peek_token (parser->lexer);
6699
6700       if (token->type == CPP_CLOSE_BRACE
6701           || token->type == CPP_EOF)
6702         break;
6703
6704       if (token->type == CPP_SEMICOLON)
6705         {
6706           /* A declaration consisting of a single semicolon is
6707              invalid.  Allow it unless we're being pedantic.  */
6708           if (pedantic && !in_system_header)
6709             pedwarn ("extra `;'");
6710           cp_lexer_consume_token (parser->lexer);
6711           continue;
6712         }
6713
6714       /* The C lexer modifies PENDING_LANG_CHANGE when it wants the
6715          parser to enter or exit implicit `extern "C"' blocks.  */
6716       while (pending_lang_change > 0)
6717         {
6718           push_lang_context (lang_name_c);
6719           --pending_lang_change;
6720         }
6721       while (pending_lang_change < 0)
6722         {
6723           pop_lang_context ();
6724           ++pending_lang_change;
6725         }
6726
6727       /* Parse the declaration itself.  */
6728       cp_parser_declaration (parser);
6729     }
6730 }
6731
6732 /* Parse a declaration.
6733
6734    declaration:
6735      block-declaration
6736      function-definition
6737      template-declaration
6738      explicit-instantiation
6739      explicit-specialization
6740      linkage-specification
6741      namespace-definition
6742
6743    GNU extension:
6744
6745    declaration:
6746       __extension__ declaration */
6747
6748 static void
6749 cp_parser_declaration (cp_parser* parser)
6750 {
6751   cp_token token1;
6752   cp_token token2;
6753   int saved_pedantic;
6754   void *p;
6755
6756   /* Set this here since we can be called after
6757      pushing the linkage specification.  */
6758   c_lex_string_translate = 1;
6759
6760   /* Check for the `__extension__' keyword.  */
6761   if (cp_parser_extension_opt (parser, &saved_pedantic))
6762     {
6763       /* Parse the qualified declaration.  */
6764       cp_parser_declaration (parser);
6765       /* Restore the PEDANTIC flag.  */
6766       pedantic = saved_pedantic;
6767
6768       return;
6769     }
6770
6771   /* Try to figure out what kind of declaration is present.  */
6772   token1 = *cp_lexer_peek_token (parser->lexer);
6773
6774   /* Don't translate the CPP_STRING in extern "C".  */
6775   if (token1.keyword == RID_EXTERN)
6776     c_lex_string_translate = 0;
6777
6778   if (token1.type != CPP_EOF)
6779     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
6780
6781   c_lex_string_translate = 1;
6782
6783   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
6784   p = obstack_alloc (&declarator_obstack, 0);
6785
6786   /* If the next token is `extern' and the following token is a string
6787      literal, then we have a linkage specification.  */
6788   if (token1.keyword == RID_EXTERN
6789       && cp_parser_is_string_literal (&token2))
6790     cp_parser_linkage_specification (parser);
6791   /* If the next token is `template', then we have either a template
6792      declaration, an explicit instantiation, or an explicit
6793      specialization.  */
6794   else if (token1.keyword == RID_TEMPLATE)
6795     {
6796       /* `template <>' indicates a template specialization.  */
6797       if (token2.type == CPP_LESS
6798           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
6799         cp_parser_explicit_specialization (parser);
6800       /* `template <' indicates a template declaration.  */
6801       else if (token2.type == CPP_LESS)
6802         cp_parser_template_declaration (parser, /*member_p=*/false);
6803       /* Anything else must be an explicit instantiation.  */
6804       else
6805         cp_parser_explicit_instantiation (parser);
6806     }
6807   /* If the next token is `export', then we have a template
6808      declaration.  */
6809   else if (token1.keyword == RID_EXPORT)
6810     cp_parser_template_declaration (parser, /*member_p=*/false);
6811   /* If the next token is `extern', 'static' or 'inline' and the one
6812      after that is `template', we have a GNU extended explicit
6813      instantiation directive.  */
6814   else if (cp_parser_allow_gnu_extensions_p (parser)
6815            && (token1.keyword == RID_EXTERN
6816                || token1.keyword == RID_STATIC
6817                || token1.keyword == RID_INLINE)
6818            && token2.keyword == RID_TEMPLATE)
6819     cp_parser_explicit_instantiation (parser);
6820   /* If the next token is `namespace', check for a named or unnamed
6821      namespace definition.  */
6822   else if (token1.keyword == RID_NAMESPACE
6823            && (/* A named namespace definition.  */
6824                (token2.type == CPP_NAME
6825                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
6826                     == CPP_OPEN_BRACE))
6827                /* An unnamed namespace definition.  */
6828                || token2.type == CPP_OPEN_BRACE))
6829     cp_parser_namespace_definition (parser);
6830   /* We must have either a block declaration or a function
6831      definition.  */
6832   else
6833     /* Try to parse a block-declaration, or a function-definition.  */
6834     cp_parser_block_declaration (parser, /*statement_p=*/false);
6835
6836   /* Free any declarators allocated.  */
6837   obstack_free (&declarator_obstack, p);
6838 }
6839
6840 /* Parse a block-declaration.
6841
6842    block-declaration:
6843      simple-declaration
6844      asm-definition
6845      namespace-alias-definition
6846      using-declaration
6847      using-directive
6848
6849    GNU Extension:
6850
6851    block-declaration:
6852      __extension__ block-declaration
6853      label-declaration
6854
6855    If STATEMENT_P is TRUE, then this block-declaration is occurring as
6856    part of a declaration-statement.  */
6857
6858 static void
6859 cp_parser_block_declaration (cp_parser *parser,
6860                              bool      statement_p)
6861 {
6862   cp_token *token1;
6863   int saved_pedantic;
6864
6865   /* Check for the `__extension__' keyword.  */
6866   if (cp_parser_extension_opt (parser, &saved_pedantic))
6867     {
6868       /* Parse the qualified declaration.  */
6869       cp_parser_block_declaration (parser, statement_p);
6870       /* Restore the PEDANTIC flag.  */
6871       pedantic = saved_pedantic;
6872
6873       return;
6874     }
6875
6876   /* Peek at the next token to figure out which kind of declaration is
6877      present.  */
6878   token1 = cp_lexer_peek_token (parser->lexer);
6879
6880   /* If the next keyword is `asm', we have an asm-definition.  */
6881   if (token1->keyword == RID_ASM)
6882     {
6883       if (statement_p)
6884         cp_parser_commit_to_tentative_parse (parser);
6885       cp_parser_asm_definition (parser);
6886     }
6887   /* If the next keyword is `namespace', we have a
6888      namespace-alias-definition.  */
6889   else if (token1->keyword == RID_NAMESPACE)
6890     cp_parser_namespace_alias_definition (parser);
6891   /* If the next keyword is `using', we have either a
6892      using-declaration or a using-directive.  */
6893   else if (token1->keyword == RID_USING)
6894     {
6895       cp_token *token2;
6896
6897       if (statement_p)
6898         cp_parser_commit_to_tentative_parse (parser);
6899       /* If the token after `using' is `namespace', then we have a
6900          using-directive.  */
6901       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
6902       if (token2->keyword == RID_NAMESPACE)
6903         cp_parser_using_directive (parser);
6904       /* Otherwise, it's a using-declaration.  */
6905       else
6906         cp_parser_using_declaration (parser);
6907     }
6908   /* If the next keyword is `__label__' we have a label declaration.  */
6909   else if (token1->keyword == RID_LABEL)
6910     {
6911       if (statement_p)
6912         cp_parser_commit_to_tentative_parse (parser);
6913       cp_parser_label_declaration (parser);
6914     }
6915   /* Anything else must be a simple-declaration.  */
6916   else
6917     cp_parser_simple_declaration (parser, !statement_p);
6918 }
6919
6920 /* Parse a simple-declaration.
6921
6922    simple-declaration:
6923      decl-specifier-seq [opt] init-declarator-list [opt] ;
6924
6925    init-declarator-list:
6926      init-declarator
6927      init-declarator-list , init-declarator
6928
6929    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
6930    function-definition as a simple-declaration.  */
6931
6932 static void
6933 cp_parser_simple_declaration (cp_parser* parser,
6934                               bool function_definition_allowed_p)
6935 {
6936   cp_decl_specifier_seq decl_specifiers;
6937   int declares_class_or_enum;
6938   bool saw_declarator;
6939
6940   /* Defer access checks until we know what is being declared; the
6941      checks for names appearing in the decl-specifier-seq should be
6942      done as if we were in the scope of the thing being declared.  */
6943   push_deferring_access_checks (dk_deferred);
6944
6945   /* Parse the decl-specifier-seq.  We have to keep track of whether
6946      or not the decl-specifier-seq declares a named class or
6947      enumeration type, since that is the only case in which the
6948      init-declarator-list is allowed to be empty.
6949
6950      [dcl.dcl]
6951
6952      In a simple-declaration, the optional init-declarator-list can be
6953      omitted only when declaring a class or enumeration, that is when
6954      the decl-specifier-seq contains either a class-specifier, an
6955      elaborated-type-specifier, or an enum-specifier.  */
6956   cp_parser_decl_specifier_seq (parser,
6957                                 CP_PARSER_FLAGS_OPTIONAL,
6958                                 &decl_specifiers,
6959                                 &declares_class_or_enum);
6960   /* We no longer need to defer access checks.  */
6961   stop_deferring_access_checks ();
6962
6963   /* In a block scope, a valid declaration must always have a
6964      decl-specifier-seq.  By not trying to parse declarators, we can
6965      resolve the declaration/expression ambiguity more quickly.  */
6966   if (!function_definition_allowed_p
6967       && !decl_specifiers.any_specifiers_p)
6968     {
6969       cp_parser_error (parser, "expected declaration");
6970       goto done;
6971     }
6972
6973   /* If the next two tokens are both identifiers, the code is
6974      erroneous. The usual cause of this situation is code like:
6975
6976        T t;
6977
6978      where "T" should name a type -- but does not.  */
6979   if (cp_parser_parse_and_diagnose_invalid_type_name (parser))
6980     {
6981       /* If parsing tentatively, we should commit; we really are
6982          looking at a declaration.  */
6983       cp_parser_commit_to_tentative_parse (parser);
6984       /* Give up.  */
6985       goto done;
6986     }
6987
6988   /* Keep going until we hit the `;' at the end of the simple
6989      declaration.  */
6990   saw_declarator = false;
6991   while (cp_lexer_next_token_is_not (parser->lexer,
6992                                      CPP_SEMICOLON))
6993     {
6994       cp_token *token;
6995       bool function_definition_p;
6996       tree decl;
6997
6998       saw_declarator = true;
6999       /* Parse the init-declarator.  */
7000       decl = cp_parser_init_declarator (parser, &decl_specifiers,
7001                                         function_definition_allowed_p,
7002                                         /*member_p=*/false,
7003                                         declares_class_or_enum,
7004                                         &function_definition_p);
7005       /* If an error occurred while parsing tentatively, exit quickly.
7006          (That usually happens when in the body of a function; each
7007          statement is treated as a declaration-statement until proven
7008          otherwise.)  */
7009       if (cp_parser_error_occurred (parser))
7010         goto done;
7011       /* Handle function definitions specially.  */
7012       if (function_definition_p)
7013         {
7014           /* If the next token is a `,', then we are probably
7015              processing something like:
7016
7017                void f() {}, *p;
7018
7019              which is erroneous.  */
7020           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7021             error ("mixing declarations and function-definitions is forbidden");
7022           /* Otherwise, we're done with the list of declarators.  */
7023           else
7024             {
7025               pop_deferring_access_checks ();
7026               return;
7027             }
7028         }
7029       /* The next token should be either a `,' or a `;'.  */
7030       token = cp_lexer_peek_token (parser->lexer);
7031       /* If it's a `,', there are more declarators to come.  */
7032       if (token->type == CPP_COMMA)
7033         cp_lexer_consume_token (parser->lexer);
7034       /* If it's a `;', we are done.  */
7035       else if (token->type == CPP_SEMICOLON)
7036         break;
7037       /* Anything else is an error.  */
7038       else
7039         {
7040           cp_parser_error (parser, "expected `,' or `;'");
7041           /* Skip tokens until we reach the end of the statement.  */
7042           cp_parser_skip_to_end_of_statement (parser);
7043           /* If the next token is now a `;', consume it.  */
7044           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7045             cp_lexer_consume_token (parser->lexer);
7046           goto done;
7047         }
7048       /* After the first time around, a function-definition is not
7049          allowed -- even if it was OK at first.  For example:
7050
7051            int i, f() {}
7052
7053          is not valid.  */
7054       function_definition_allowed_p = false;
7055     }
7056
7057   /* Issue an error message if no declarators are present, and the
7058      decl-specifier-seq does not itself declare a class or
7059      enumeration.  */
7060   if (!saw_declarator)
7061     {
7062       if (cp_parser_declares_only_class_p (parser))
7063         shadow_tag (&decl_specifiers);
7064       /* Perform any deferred access checks.  */
7065       perform_deferred_access_checks ();
7066     }
7067
7068   /* Consume the `;'.  */
7069   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7070
7071  done:
7072   pop_deferring_access_checks ();
7073 }
7074
7075 /* Parse a decl-specifier-seq.
7076
7077    decl-specifier-seq:
7078      decl-specifier-seq [opt] decl-specifier
7079
7080    decl-specifier:
7081      storage-class-specifier
7082      type-specifier
7083      function-specifier
7084      friend
7085      typedef
7086
7087    GNU Extension:
7088
7089    decl-specifier:
7090      attributes
7091
7092    Set *DECL_SPECS to a representation of the decl-specifier-seq.
7093
7094    If FRIEND_IS_NOT_CLASS_P is non-NULL, and the `friend' specifier
7095    appears, and the entity that will be a friend is not going to be a
7096    class, then *FRIEND_IS_NOT_CLASS_P will be set to TRUE.  Note that
7097    even if *FRIEND_IS_NOT_CLASS_P is FALSE, the entity to which
7098    friendship is granted might not be a class.
7099
7100    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7101    flags:
7102
7103      1: one of the decl-specifiers is an elaborated-type-specifier
7104         (i.e., a type declaration)
7105      2: one of the decl-specifiers is an enum-specifier or a
7106         class-specifier (i.e., a type definition)
7107
7108    */
7109
7110 static void
7111 cp_parser_decl_specifier_seq (cp_parser* parser,
7112                               cp_parser_flags flags,
7113                               cp_decl_specifier_seq *decl_specs,
7114                               int* declares_class_or_enum)
7115 {
7116   bool constructor_possible_p = !parser->in_declarator_p;
7117
7118   /* Clear DECL_SPECS.  */
7119   clear_decl_specs (decl_specs);
7120
7121   /* Assume no class or enumeration type is declared.  */
7122   *declares_class_or_enum = 0;
7123
7124   /* Keep reading specifiers until there are no more to read.  */
7125   while (true)
7126     {
7127       bool constructor_p;
7128       bool found_decl_spec;
7129       cp_token *token;
7130
7131       /* Peek at the next token.  */
7132       token = cp_lexer_peek_token (parser->lexer);
7133       /* Handle attributes.  */
7134       if (token->keyword == RID_ATTRIBUTE)
7135         {
7136           /* Parse the attributes.  */
7137           decl_specs->attributes
7138             = chainon (decl_specs->attributes,
7139                        cp_parser_attributes_opt (parser));
7140           continue;
7141         }
7142       /* Assume we will find a decl-specifier keyword.  */
7143       found_decl_spec = true;
7144       /* If the next token is an appropriate keyword, we can simply
7145          add it to the list.  */
7146       switch (token->keyword)
7147         {
7148           /* decl-specifier:
7149                friend  */
7150         case RID_FRIEND:
7151           if (decl_specs->specs[(int) ds_friend]++)
7152             error ("duplicate `friend'");
7153           /* Consume the token.  */
7154           cp_lexer_consume_token (parser->lexer);
7155           break;
7156
7157           /* function-specifier:
7158                inline
7159                virtual
7160                explicit  */
7161         case RID_INLINE:
7162         case RID_VIRTUAL:
7163         case RID_EXPLICIT:
7164           cp_parser_function_specifier_opt (parser, decl_specs);
7165           break;
7166
7167           /* decl-specifier:
7168                typedef  */
7169         case RID_TYPEDEF:
7170           ++decl_specs->specs[(int) ds_typedef];
7171           /* Consume the token.  */
7172           cp_lexer_consume_token (parser->lexer);
7173           /* A constructor declarator cannot appear in a typedef.  */
7174           constructor_possible_p = false;
7175           /* The "typedef" keyword can only occur in a declaration; we
7176              may as well commit at this point.  */
7177           cp_parser_commit_to_tentative_parse (parser);
7178           break;
7179
7180           /* storage-class-specifier:
7181                auto
7182                register
7183                static
7184                extern
7185                mutable
7186
7187              GNU Extension:
7188                thread  */
7189         case RID_AUTO:
7190           /* Consume the token.  */
7191           cp_lexer_consume_token (parser->lexer);
7192           cp_parser_set_storage_class (decl_specs, sc_auto);
7193           break;
7194         case RID_REGISTER:
7195           /* Consume the token.  */
7196           cp_lexer_consume_token (parser->lexer);
7197           cp_parser_set_storage_class (decl_specs, sc_register);
7198           break;
7199         case RID_STATIC:
7200           /* Consume the token.  */
7201           cp_lexer_consume_token (parser->lexer);
7202           if (decl_specs->specs[(int) ds_thread])
7203             {
7204               error ("`__thread' before `static'");
7205               decl_specs->specs[(int) ds_thread] = 0;
7206             }
7207           cp_parser_set_storage_class (decl_specs, sc_static);
7208           break;
7209         case RID_EXTERN:
7210           /* Consume the token.  */
7211           cp_lexer_consume_token (parser->lexer);
7212           if (decl_specs->specs[(int) ds_thread])
7213             {
7214               error ("`__thread' before `extern'");
7215               decl_specs->specs[(int) ds_thread] = 0;
7216             }
7217           cp_parser_set_storage_class (decl_specs, sc_extern);
7218           break;
7219         case RID_MUTABLE:
7220           /* Consume the token.  */
7221           cp_lexer_consume_token (parser->lexer);
7222           cp_parser_set_storage_class (decl_specs, sc_mutable);
7223           break;
7224         case RID_THREAD:
7225           /* Consume the token.  */
7226           cp_lexer_consume_token (parser->lexer);
7227           ++decl_specs->specs[(int) ds_thread];
7228           break;
7229
7230         default:
7231           /* We did not yet find a decl-specifier yet.  */
7232           found_decl_spec = false;
7233           break;
7234         }
7235
7236       /* Constructors are a special case.  The `S' in `S()' is not a
7237          decl-specifier; it is the beginning of the declarator.  */
7238       constructor_p
7239         = (!found_decl_spec
7240            && constructor_possible_p
7241            && (cp_parser_constructor_declarator_p
7242                (parser, decl_specs->specs[(int) ds_friend] != 0)));
7243
7244       /* If we don't have a DECL_SPEC yet, then we must be looking at
7245          a type-specifier.  */
7246       if (!found_decl_spec && !constructor_p)
7247         {
7248           int decl_spec_declares_class_or_enum;
7249           bool is_cv_qualifier;
7250           tree type_spec;
7251
7252           type_spec
7253             = cp_parser_type_specifier (parser, flags,
7254                                         decl_specs,
7255                                         /*is_declaration=*/true,
7256                                         &decl_spec_declares_class_or_enum,
7257                                         &is_cv_qualifier);
7258
7259           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
7260
7261           /* If this type-specifier referenced a user-defined type
7262              (a typedef, class-name, etc.), then we can't allow any
7263              more such type-specifiers henceforth.
7264
7265              [dcl.spec]
7266
7267              The longest sequence of decl-specifiers that could
7268              possibly be a type name is taken as the
7269              decl-specifier-seq of a declaration.  The sequence shall
7270              be self-consistent as described below.
7271
7272              [dcl.type]
7273
7274              As a general rule, at most one type-specifier is allowed
7275              in the complete decl-specifier-seq of a declaration.  The
7276              only exceptions are the following:
7277
7278              -- const or volatile can be combined with any other
7279                 type-specifier.
7280
7281              -- signed or unsigned can be combined with char, long,
7282                 short, or int.
7283
7284              -- ..
7285
7286              Example:
7287
7288                typedef char* Pc;
7289                void g (const int Pc);
7290
7291              Here, Pc is *not* part of the decl-specifier seq; it's
7292              the declarator.  Therefore, once we see a type-specifier
7293              (other than a cv-qualifier), we forbid any additional
7294              user-defined types.  We *do* still allow things like `int
7295              int' to be considered a decl-specifier-seq, and issue the
7296              error message later.  */
7297           if (type_spec && !is_cv_qualifier)
7298             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
7299           /* A constructor declarator cannot follow a type-specifier.  */
7300           if (type_spec)
7301             {
7302               constructor_possible_p = false;
7303               found_decl_spec = true;
7304             }
7305         }
7306
7307       /* If we still do not have a DECL_SPEC, then there are no more
7308          decl-specifiers.  */
7309       if (!found_decl_spec)
7310         break;
7311
7312       decl_specs->any_specifiers_p = true;
7313       /* After we see one decl-specifier, further decl-specifiers are
7314          always optional.  */
7315       flags |= CP_PARSER_FLAGS_OPTIONAL;
7316     }
7317
7318   /* Don't allow a friend specifier with a class definition.  */
7319   if (decl_specs->specs[(int) ds_friend] != 0
7320       && (*declares_class_or_enum & 2))
7321     error ("class definition may not be declared a friend");
7322 }
7323
7324 /* Parse an (optional) storage-class-specifier.
7325
7326    storage-class-specifier:
7327      auto
7328      register
7329      static
7330      extern
7331      mutable
7332
7333    GNU Extension:
7334
7335    storage-class-specifier:
7336      thread
7337
7338    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7339
7340 static tree
7341 cp_parser_storage_class_specifier_opt (cp_parser* parser)
7342 {
7343   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7344     {
7345     case RID_AUTO:
7346     case RID_REGISTER:
7347     case RID_STATIC:
7348     case RID_EXTERN:
7349     case RID_MUTABLE:
7350     case RID_THREAD:
7351       /* Consume the token.  */
7352       return cp_lexer_consume_token (parser->lexer)->value;
7353
7354     default:
7355       return NULL_TREE;
7356     }
7357 }
7358
7359 /* Parse an (optional) function-specifier.
7360
7361    function-specifier:
7362      inline
7363      virtual
7364      explicit
7365
7366    Returns an IDENTIFIER_NODE corresponding to the keyword used.
7367    Updates DECL_SPECS, if it is non-NULL.  */
7368
7369 static tree
7370 cp_parser_function_specifier_opt (cp_parser* parser,
7371                                   cp_decl_specifier_seq *decl_specs)
7372 {
7373   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7374     {
7375     case RID_INLINE:
7376       if (decl_specs)
7377         ++decl_specs->specs[(int) ds_inline];
7378       break;
7379
7380     case RID_VIRTUAL:
7381       if (decl_specs)
7382         ++decl_specs->specs[(int) ds_virtual];
7383       break;
7384
7385     case RID_EXPLICIT:
7386       if (decl_specs)
7387         ++decl_specs->specs[(int) ds_explicit];
7388       break;
7389
7390     default:
7391       return NULL_TREE;
7392     }
7393
7394   /* Consume the token.  */
7395   return cp_lexer_consume_token (parser->lexer)->value;
7396 }
7397
7398 /* Parse a linkage-specification.
7399
7400    linkage-specification:
7401      extern string-literal { declaration-seq [opt] }
7402      extern string-literal declaration  */
7403
7404 static void
7405 cp_parser_linkage_specification (cp_parser* parser)
7406 {
7407   cp_token *token;
7408   tree linkage;
7409
7410   /* Look for the `extern' keyword.  */
7411   cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7412
7413   /* Peek at the next token.  */
7414   token = cp_lexer_peek_token (parser->lexer);
7415   /* If it's not a string-literal, then there's a problem.  */
7416   if (!cp_parser_is_string_literal (token))
7417     {
7418       cp_parser_error (parser, "expected language-name");
7419       return;
7420     }
7421   /* Consume the token.  */
7422   cp_lexer_consume_token (parser->lexer);
7423
7424   /* Transform the literal into an identifier.  If the literal is a
7425      wide-character string, or contains embedded NULs, then we can't
7426      handle it as the user wants.  */
7427   if (token->type == CPP_WSTRING
7428       || (strlen (TREE_STRING_POINTER (token->value))
7429           != (size_t) (TREE_STRING_LENGTH (token->value) - 1)))
7430     {
7431       cp_parser_error (parser, "invalid linkage-specification");
7432       /* Assume C++ linkage.  */
7433       linkage = get_identifier ("c++");
7434     }
7435   /* If the string is chained to another string, take the latter,
7436      that's the untranslated string.  */
7437   else if (TREE_CHAIN (token->value))
7438     linkage = get_identifier (TREE_STRING_POINTER (TREE_CHAIN (token->value)));
7439   /* If it's a simple string constant, things are easier.  */
7440   else
7441     linkage = get_identifier (TREE_STRING_POINTER (token->value));
7442
7443   /* We're now using the new linkage.  */
7444   push_lang_context (linkage);
7445
7446   /* If the next token is a `{', then we're using the first
7447      production.  */
7448   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7449     {
7450       /* Consume the `{' token.  */
7451       cp_lexer_consume_token (parser->lexer);
7452       /* Parse the declarations.  */
7453       cp_parser_declaration_seq_opt (parser);
7454       /* Look for the closing `}'.  */
7455       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7456     }
7457   /* Otherwise, there's just one declaration.  */
7458   else
7459     {
7460       bool saved_in_unbraced_linkage_specification_p;
7461
7462       saved_in_unbraced_linkage_specification_p
7463         = parser->in_unbraced_linkage_specification_p;
7464       parser->in_unbraced_linkage_specification_p = true;
7465       have_extern_spec = true;
7466       cp_parser_declaration (parser);
7467       have_extern_spec = false;
7468       parser->in_unbraced_linkage_specification_p
7469         = saved_in_unbraced_linkage_specification_p;
7470     }
7471
7472   /* We're done with the linkage-specification.  */
7473   pop_lang_context ();
7474 }
7475
7476 /* Special member functions [gram.special] */
7477
7478 /* Parse a conversion-function-id.
7479
7480    conversion-function-id:
7481      operator conversion-type-id
7482
7483    Returns an IDENTIFIER_NODE representing the operator.  */
7484
7485 static tree
7486 cp_parser_conversion_function_id (cp_parser* parser)
7487 {
7488   tree type;
7489   tree saved_scope;
7490   tree saved_qualifying_scope;
7491   tree saved_object_scope;
7492   bool pop_p = false;
7493
7494   /* Look for the `operator' token.  */
7495   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7496     return error_mark_node;
7497   /* When we parse the conversion-type-id, the current scope will be
7498      reset.  However, we need that information in able to look up the
7499      conversion function later, so we save it here.  */
7500   saved_scope = parser->scope;
7501   saved_qualifying_scope = parser->qualifying_scope;
7502   saved_object_scope = parser->object_scope;
7503   /* We must enter the scope of the class so that the names of
7504      entities declared within the class are available in the
7505      conversion-type-id.  For example, consider:
7506
7507        struct S {
7508          typedef int I;
7509          operator I();
7510        };
7511
7512        S::operator I() { ... }
7513
7514      In order to see that `I' is a type-name in the definition, we
7515      must be in the scope of `S'.  */
7516   if (saved_scope)
7517     pop_p = push_scope (saved_scope);
7518   /* Parse the conversion-type-id.  */
7519   type = cp_parser_conversion_type_id (parser);
7520   /* Leave the scope of the class, if any.  */
7521   if (pop_p)
7522     pop_scope (saved_scope);
7523   /* Restore the saved scope.  */
7524   parser->scope = saved_scope;
7525   parser->qualifying_scope = saved_qualifying_scope;
7526   parser->object_scope = saved_object_scope;
7527   /* If the TYPE is invalid, indicate failure.  */
7528   if (type == error_mark_node)
7529     return error_mark_node;
7530   return mangle_conv_op_name_for_type (type);
7531 }
7532
7533 /* Parse a conversion-type-id:
7534
7535    conversion-type-id:
7536      type-specifier-seq conversion-declarator [opt]
7537
7538    Returns the TYPE specified.  */
7539
7540 static tree
7541 cp_parser_conversion_type_id (cp_parser* parser)
7542 {
7543   tree attributes;
7544   cp_decl_specifier_seq type_specifiers;
7545   cp_declarator *declarator;
7546
7547   /* Parse the attributes.  */
7548   attributes = cp_parser_attributes_opt (parser);
7549   /* Parse the type-specifiers.  */
7550   cp_parser_type_specifier_seq (parser, &type_specifiers);
7551   /* If that didn't work, stop.  */
7552   if (type_specifiers.type == error_mark_node)
7553     return error_mark_node;
7554   /* Parse the conversion-declarator.  */
7555   declarator = cp_parser_conversion_declarator_opt (parser);
7556
7557   return grokdeclarator (declarator, &type_specifiers, TYPENAME,
7558                          /*initialized=*/0, &attributes);
7559 }
7560
7561 /* Parse an (optional) conversion-declarator.
7562
7563    conversion-declarator:
7564      ptr-operator conversion-declarator [opt]
7565
7566    */
7567
7568 static cp_declarator *
7569 cp_parser_conversion_declarator_opt (cp_parser* parser)
7570 {
7571   enum tree_code code;
7572   tree class_type;
7573   cp_cv_quals cv_quals;
7574
7575   /* We don't know if there's a ptr-operator next, or not.  */
7576   cp_parser_parse_tentatively (parser);
7577   /* Try the ptr-operator.  */
7578   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
7579   /* If it worked, look for more conversion-declarators.  */
7580   if (cp_parser_parse_definitely (parser))
7581     {
7582       cp_declarator *declarator;
7583
7584       /* Parse another optional declarator.  */
7585       declarator = cp_parser_conversion_declarator_opt (parser);
7586
7587       /* Create the representation of the declarator.  */
7588       if (class_type)
7589         declarator = make_ptrmem_declarator (cv_quals, class_type,
7590                                              declarator);
7591       else if (code == INDIRECT_REF)
7592         declarator = make_pointer_declarator (cv_quals, declarator);
7593       else
7594         declarator = make_reference_declarator (cv_quals, declarator);
7595
7596       return declarator;
7597    }
7598
7599   return NULL;
7600 }
7601
7602 /* Parse an (optional) ctor-initializer.
7603
7604    ctor-initializer:
7605      : mem-initializer-list
7606
7607    Returns TRUE iff the ctor-initializer was actually present.  */
7608
7609 static bool
7610 cp_parser_ctor_initializer_opt (cp_parser* parser)
7611 {
7612   /* If the next token is not a `:', then there is no
7613      ctor-initializer.  */
7614   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
7615     {
7616       /* Do default initialization of any bases and members.  */
7617       if (DECL_CONSTRUCTOR_P (current_function_decl))
7618         finish_mem_initializers (NULL_TREE);
7619
7620       return false;
7621     }
7622
7623   /* Consume the `:' token.  */
7624   cp_lexer_consume_token (parser->lexer);
7625   /* And the mem-initializer-list.  */
7626   cp_parser_mem_initializer_list (parser);
7627
7628   return true;
7629 }
7630
7631 /* Parse a mem-initializer-list.
7632
7633    mem-initializer-list:
7634      mem-initializer
7635      mem-initializer , mem-initializer-list  */
7636
7637 static void
7638 cp_parser_mem_initializer_list (cp_parser* parser)
7639 {
7640   tree mem_initializer_list = NULL_TREE;
7641
7642   /* Let the semantic analysis code know that we are starting the
7643      mem-initializer-list.  */
7644   if (!DECL_CONSTRUCTOR_P (current_function_decl))
7645     error ("only constructors take base initializers");
7646
7647   /* Loop through the list.  */
7648   while (true)
7649     {
7650       tree mem_initializer;
7651
7652       /* Parse the mem-initializer.  */
7653       mem_initializer = cp_parser_mem_initializer (parser);
7654       /* Add it to the list, unless it was erroneous.  */
7655       if (mem_initializer)
7656         {
7657           TREE_CHAIN (mem_initializer) = mem_initializer_list;
7658           mem_initializer_list = mem_initializer;
7659         }
7660       /* If the next token is not a `,', we're done.  */
7661       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7662         break;
7663       /* Consume the `,' token.  */
7664       cp_lexer_consume_token (parser->lexer);
7665     }
7666
7667   /* Perform semantic analysis.  */
7668   if (DECL_CONSTRUCTOR_P (current_function_decl))
7669     finish_mem_initializers (mem_initializer_list);
7670 }
7671
7672 /* Parse a mem-initializer.
7673
7674    mem-initializer:
7675      mem-initializer-id ( expression-list [opt] )
7676
7677    GNU extension:
7678
7679    mem-initializer:
7680      ( expression-list [opt] )
7681
7682    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
7683    class) or FIELD_DECL (for a non-static data member) to initialize;
7684    the TREE_VALUE is the expression-list.  */
7685
7686 static tree
7687 cp_parser_mem_initializer (cp_parser* parser)
7688 {
7689   tree mem_initializer_id;
7690   tree expression_list;
7691   tree member;
7692
7693   /* Find out what is being initialized.  */
7694   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7695     {
7696       pedwarn ("anachronistic old-style base class initializer");
7697       mem_initializer_id = NULL_TREE;
7698     }
7699   else
7700     mem_initializer_id = cp_parser_mem_initializer_id (parser);
7701   member = expand_member_init (mem_initializer_id);
7702   if (member && !DECL_P (member))
7703     in_base_initializer = 1;
7704
7705   expression_list
7706     = cp_parser_parenthesized_expression_list (parser, false,
7707                                                /*non_constant_p=*/NULL);
7708   if (!expression_list)
7709     expression_list = void_type_node;
7710
7711   in_base_initializer = 0;
7712
7713   return member ? build_tree_list (member, expression_list) : NULL_TREE;
7714 }
7715
7716 /* Parse a mem-initializer-id.
7717
7718    mem-initializer-id:
7719      :: [opt] nested-name-specifier [opt] class-name
7720      identifier
7721
7722    Returns a TYPE indicating the class to be initializer for the first
7723    production.  Returns an IDENTIFIER_NODE indicating the data member
7724    to be initialized for the second production.  */
7725
7726 static tree
7727 cp_parser_mem_initializer_id (cp_parser* parser)
7728 {
7729   bool global_scope_p;
7730   bool nested_name_specifier_p;
7731   bool template_p = false;
7732   tree id;
7733
7734   /* `typename' is not allowed in this context ([temp.res]).  */
7735   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
7736     {
7737       error ("keyword `typename' not allowed in this context (a qualified "
7738              "member initializer is implicitly a type)");
7739       cp_lexer_consume_token (parser->lexer);
7740     }
7741   /* Look for the optional `::' operator.  */
7742   global_scope_p
7743     = (cp_parser_global_scope_opt (parser,
7744                                    /*current_scope_valid_p=*/false)
7745        != NULL_TREE);
7746   /* Look for the optional nested-name-specifier.  The simplest way to
7747      implement:
7748
7749        [temp.res]
7750
7751        The keyword `typename' is not permitted in a base-specifier or
7752        mem-initializer; in these contexts a qualified name that
7753        depends on a template-parameter is implicitly assumed to be a
7754        type name.
7755
7756      is to assume that we have seen the `typename' keyword at this
7757      point.  */
7758   nested_name_specifier_p
7759     = (cp_parser_nested_name_specifier_opt (parser,
7760                                             /*typename_keyword_p=*/true,
7761                                             /*check_dependency_p=*/true,
7762                                             /*type_p=*/true,
7763                                             /*is_declaration=*/true)
7764        != NULL_TREE);
7765   if (nested_name_specifier_p)
7766     template_p = cp_parser_optional_template_keyword (parser);
7767   /* If there is a `::' operator or a nested-name-specifier, then we
7768      are definitely looking for a class-name.  */
7769   if (global_scope_p || nested_name_specifier_p)
7770     return cp_parser_class_name (parser,
7771                                  /*typename_keyword_p=*/true,
7772                                  /*template_keyword_p=*/template_p,
7773                                  /*type_p=*/false,
7774                                  /*check_dependency_p=*/true,
7775                                  /*class_head_p=*/false,
7776                                  /*is_declaration=*/true);
7777   /* Otherwise, we could also be looking for an ordinary identifier.  */
7778   cp_parser_parse_tentatively (parser);
7779   /* Try a class-name.  */
7780   id = cp_parser_class_name (parser,
7781                              /*typename_keyword_p=*/true,
7782                              /*template_keyword_p=*/false,
7783                              /*type_p=*/false,
7784                              /*check_dependency_p=*/true,
7785                              /*class_head_p=*/false,
7786                              /*is_declaration=*/true);
7787   /* If we found one, we're done.  */
7788   if (cp_parser_parse_definitely (parser))
7789     return id;
7790   /* Otherwise, look for an ordinary identifier.  */
7791   return cp_parser_identifier (parser);
7792 }
7793
7794 /* Overloading [gram.over] */
7795
7796 /* Parse an operator-function-id.
7797
7798    operator-function-id:
7799      operator operator
7800
7801    Returns an IDENTIFIER_NODE for the operator which is a
7802    human-readable spelling of the identifier, e.g., `operator +'.  */
7803
7804 static tree
7805 cp_parser_operator_function_id (cp_parser* parser)
7806 {
7807   /* Look for the `operator' keyword.  */
7808   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7809     return error_mark_node;
7810   /* And then the name of the operator itself.  */
7811   return cp_parser_operator (parser);
7812 }
7813
7814 /* Parse an operator.
7815
7816    operator:
7817      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
7818      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
7819      || ++ -- , ->* -> () []
7820
7821    GNU Extensions:
7822
7823    operator:
7824      <? >? <?= >?=
7825
7826    Returns an IDENTIFIER_NODE for the operator which is a
7827    human-readable spelling of the identifier, e.g., `operator +'.  */
7828
7829 static tree
7830 cp_parser_operator (cp_parser* parser)
7831 {
7832   tree id = NULL_TREE;
7833   cp_token *token;
7834
7835   /* Peek at the next token.  */
7836   token = cp_lexer_peek_token (parser->lexer);
7837   /* Figure out which operator we have.  */
7838   switch (token->type)
7839     {
7840     case CPP_KEYWORD:
7841       {
7842         enum tree_code op;
7843
7844         /* The keyword should be either `new' or `delete'.  */
7845         if (token->keyword == RID_NEW)
7846           op = NEW_EXPR;
7847         else if (token->keyword == RID_DELETE)
7848           op = DELETE_EXPR;
7849         else
7850           break;
7851
7852         /* Consume the `new' or `delete' token.  */
7853         cp_lexer_consume_token (parser->lexer);
7854
7855         /* Peek at the next token.  */
7856         token = cp_lexer_peek_token (parser->lexer);
7857         /* If it's a `[' token then this is the array variant of the
7858            operator.  */
7859         if (token->type == CPP_OPEN_SQUARE)
7860           {
7861             /* Consume the `[' token.  */
7862             cp_lexer_consume_token (parser->lexer);
7863             /* Look for the `]' token.  */
7864             cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
7865             id = ansi_opname (op == NEW_EXPR
7866                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
7867           }
7868         /* Otherwise, we have the non-array variant.  */
7869         else
7870           id = ansi_opname (op);
7871
7872         return id;
7873       }
7874
7875     case CPP_PLUS:
7876       id = ansi_opname (PLUS_EXPR);
7877       break;
7878
7879     case CPP_MINUS:
7880       id = ansi_opname (MINUS_EXPR);
7881       break;
7882
7883     case CPP_MULT:
7884       id = ansi_opname (MULT_EXPR);
7885       break;
7886
7887     case CPP_DIV:
7888       id = ansi_opname (TRUNC_DIV_EXPR);
7889       break;
7890
7891     case CPP_MOD:
7892       id = ansi_opname (TRUNC_MOD_EXPR);
7893       break;
7894
7895     case CPP_XOR:
7896       id = ansi_opname (BIT_XOR_EXPR);
7897       break;
7898
7899     case CPP_AND:
7900       id = ansi_opname (BIT_AND_EXPR);
7901       break;
7902
7903     case CPP_OR:
7904       id = ansi_opname (BIT_IOR_EXPR);
7905       break;
7906
7907     case CPP_COMPL:
7908       id = ansi_opname (BIT_NOT_EXPR);
7909       break;
7910
7911     case CPP_NOT:
7912       id = ansi_opname (TRUTH_NOT_EXPR);
7913       break;
7914
7915     case CPP_EQ:
7916       id = ansi_assopname (NOP_EXPR);
7917       break;
7918
7919     case CPP_LESS:
7920       id = ansi_opname (LT_EXPR);
7921       break;
7922
7923     case CPP_GREATER:
7924       id = ansi_opname (GT_EXPR);
7925       break;
7926
7927     case CPP_PLUS_EQ:
7928       id = ansi_assopname (PLUS_EXPR);
7929       break;
7930
7931     case CPP_MINUS_EQ:
7932       id = ansi_assopname (MINUS_EXPR);
7933       break;
7934
7935     case CPP_MULT_EQ:
7936       id = ansi_assopname (MULT_EXPR);
7937       break;
7938
7939     case CPP_DIV_EQ:
7940       id = ansi_assopname (TRUNC_DIV_EXPR);
7941       break;
7942
7943     case CPP_MOD_EQ:
7944       id = ansi_assopname (TRUNC_MOD_EXPR);
7945       break;
7946
7947     case CPP_XOR_EQ:
7948       id = ansi_assopname (BIT_XOR_EXPR);
7949       break;
7950
7951     case CPP_AND_EQ:
7952       id = ansi_assopname (BIT_AND_EXPR);
7953       break;
7954
7955     case CPP_OR_EQ:
7956       id = ansi_assopname (BIT_IOR_EXPR);
7957       break;
7958
7959     case CPP_LSHIFT:
7960       id = ansi_opname (LSHIFT_EXPR);
7961       break;
7962
7963     case CPP_RSHIFT:
7964       id = ansi_opname (RSHIFT_EXPR);
7965       break;
7966
7967     case CPP_LSHIFT_EQ:
7968       id = ansi_assopname (LSHIFT_EXPR);
7969       break;
7970
7971     case CPP_RSHIFT_EQ:
7972       id = ansi_assopname (RSHIFT_EXPR);
7973       break;
7974
7975     case CPP_EQ_EQ:
7976       id = ansi_opname (EQ_EXPR);
7977       break;
7978
7979     case CPP_NOT_EQ:
7980       id = ansi_opname (NE_EXPR);
7981       break;
7982
7983     case CPP_LESS_EQ:
7984       id = ansi_opname (LE_EXPR);
7985       break;
7986
7987     case CPP_GREATER_EQ:
7988       id = ansi_opname (GE_EXPR);
7989       break;
7990
7991     case CPP_AND_AND:
7992       id = ansi_opname (TRUTH_ANDIF_EXPR);
7993       break;
7994
7995     case CPP_OR_OR:
7996       id = ansi_opname (TRUTH_ORIF_EXPR);
7997       break;
7998
7999     case CPP_PLUS_PLUS:
8000       id = ansi_opname (POSTINCREMENT_EXPR);
8001       break;
8002
8003     case CPP_MINUS_MINUS:
8004       id = ansi_opname (PREDECREMENT_EXPR);
8005       break;
8006
8007     case CPP_COMMA:
8008       id = ansi_opname (COMPOUND_EXPR);
8009       break;
8010
8011     case CPP_DEREF_STAR:
8012       id = ansi_opname (MEMBER_REF);
8013       break;
8014
8015     case CPP_DEREF:
8016       id = ansi_opname (COMPONENT_REF);
8017       break;
8018
8019     case CPP_OPEN_PAREN:
8020       /* Consume the `('.  */
8021       cp_lexer_consume_token (parser->lexer);
8022       /* Look for the matching `)'.  */
8023       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8024       return ansi_opname (CALL_EXPR);
8025
8026     case CPP_OPEN_SQUARE:
8027       /* Consume the `['.  */
8028       cp_lexer_consume_token (parser->lexer);
8029       /* Look for the matching `]'.  */
8030       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8031       return ansi_opname (ARRAY_REF);
8032
8033       /* Extensions.  */
8034     case CPP_MIN:
8035       id = ansi_opname (MIN_EXPR);
8036       break;
8037
8038     case CPP_MAX:
8039       id = ansi_opname (MAX_EXPR);
8040       break;
8041
8042     case CPP_MIN_EQ:
8043       id = ansi_assopname (MIN_EXPR);
8044       break;
8045
8046     case CPP_MAX_EQ:
8047       id = ansi_assopname (MAX_EXPR);
8048       break;
8049
8050     default:
8051       /* Anything else is an error.  */
8052       break;
8053     }
8054
8055   /* If we have selected an identifier, we need to consume the
8056      operator token.  */
8057   if (id)
8058     cp_lexer_consume_token (parser->lexer);
8059   /* Otherwise, no valid operator name was present.  */
8060   else
8061     {
8062       cp_parser_error (parser, "expected operator");
8063       id = error_mark_node;
8064     }
8065
8066   return id;
8067 }
8068
8069 /* Parse a template-declaration.
8070
8071    template-declaration:
8072      export [opt] template < template-parameter-list > declaration
8073
8074    If MEMBER_P is TRUE, this template-declaration occurs within a
8075    class-specifier.
8076
8077    The grammar rule given by the standard isn't correct.  What
8078    is really meant is:
8079
8080    template-declaration:
8081      export [opt] template-parameter-list-seq
8082        decl-specifier-seq [opt] init-declarator [opt] ;
8083      export [opt] template-parameter-list-seq
8084        function-definition
8085
8086    template-parameter-list-seq:
8087      template-parameter-list-seq [opt]
8088      template < template-parameter-list >  */
8089
8090 static void
8091 cp_parser_template_declaration (cp_parser* parser, bool member_p)
8092 {
8093   /* Check for `export'.  */
8094   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8095     {
8096       /* Consume the `export' token.  */
8097       cp_lexer_consume_token (parser->lexer);
8098       /* Warn that we do not support `export'.  */
8099       warning ("keyword `export' not implemented, and will be ignored");
8100     }
8101
8102   cp_parser_template_declaration_after_export (parser, member_p);
8103 }
8104
8105 /* Parse a template-parameter-list.
8106
8107    template-parameter-list:
8108      template-parameter
8109      template-parameter-list , template-parameter
8110
8111    Returns a TREE_LIST.  Each node represents a template parameter.
8112    The nodes are connected via their TREE_CHAINs.  */
8113
8114 static tree
8115 cp_parser_template_parameter_list (cp_parser* parser)
8116 {
8117   tree parameter_list = NULL_TREE;
8118
8119   while (true)
8120     {
8121       tree parameter;
8122       cp_token *token;
8123       bool is_non_type;
8124
8125       /* Parse the template-parameter.  */
8126       parameter = cp_parser_template_parameter (parser, &is_non_type);
8127       /* Add it to the list.  */
8128       parameter_list = process_template_parm (parameter_list,
8129                                               parameter,
8130                                               is_non_type);
8131       /* Peek at the next token.  */
8132       token = cp_lexer_peek_token (parser->lexer);
8133       /* If it's not a `,', we're done.  */
8134       if (token->type != CPP_COMMA)
8135         break;
8136       /* Otherwise, consume the `,' token.  */
8137       cp_lexer_consume_token (parser->lexer);
8138     }
8139
8140   return parameter_list;
8141 }
8142
8143 /* Parse a template-parameter.
8144
8145    template-parameter:
8146      type-parameter
8147      parameter-declaration
8148
8149    Returns a TREE_LIST.  The TREE_VALUE represents the parameter.  The
8150    TREE_PURPOSE is the default value, if any.  *IS_NON_TYPE is set to
8151    true iff this parameter is a non-type parameter.  */
8152
8153 static tree
8154 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
8155 {
8156   cp_token *token;
8157   cp_parameter_declarator *parameter_declarator;
8158
8159   /* Assume it is a type parameter or a template parameter.  */
8160   *is_non_type = false;
8161   /* Peek at the next token.  */
8162   token = cp_lexer_peek_token (parser->lexer);
8163   /* If it is `class' or `template', we have a type-parameter.  */
8164   if (token->keyword == RID_TEMPLATE)
8165     return cp_parser_type_parameter (parser);
8166   /* If it is `class' or `typename' we do not know yet whether it is a
8167      type parameter or a non-type parameter.  Consider:
8168
8169        template <typename T, typename T::X X> ...
8170
8171      or:
8172
8173        template <class C, class D*> ...
8174
8175      Here, the first parameter is a type parameter, and the second is
8176      a non-type parameter.  We can tell by looking at the token after
8177      the identifier -- if it is a `,', `=', or `>' then we have a type
8178      parameter.  */
8179   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
8180     {
8181       /* Peek at the token after `class' or `typename'.  */
8182       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8183       /* If it's an identifier, skip it.  */
8184       if (token->type == CPP_NAME)
8185         token = cp_lexer_peek_nth_token (parser->lexer, 3);
8186       /* Now, see if the token looks like the end of a template
8187          parameter.  */
8188       if (token->type == CPP_COMMA
8189           || token->type == CPP_EQ
8190           || token->type == CPP_GREATER)
8191         return cp_parser_type_parameter (parser);
8192     }
8193
8194   /* Otherwise, it is a non-type parameter.
8195
8196      [temp.param]
8197
8198      When parsing a default template-argument for a non-type
8199      template-parameter, the first non-nested `>' is taken as the end
8200      of the template parameter-list rather than a greater-than
8201      operator.  */
8202   *is_non_type = true;
8203   parameter_declarator
8204      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
8205                                         /*parenthesized_p=*/NULL);
8206   return (build_tree_list
8207           (parameter_declarator->default_argument,
8208            grokdeclarator (parameter_declarator->declarator,
8209                            &parameter_declarator->decl_specifiers,
8210                            PARM, /*initialized=*/0,
8211                            /*attrlist=*/NULL)));
8212 }
8213
8214 /* Parse a type-parameter.
8215
8216    type-parameter:
8217      class identifier [opt]
8218      class identifier [opt] = type-id
8219      typename identifier [opt]
8220      typename identifier [opt] = type-id
8221      template < template-parameter-list > class identifier [opt]
8222      template < template-parameter-list > class identifier [opt]
8223        = id-expression
8224
8225    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
8226    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
8227    the declaration of the parameter.  */
8228
8229 static tree
8230 cp_parser_type_parameter (cp_parser* parser)
8231 {
8232   cp_token *token;
8233   tree parameter;
8234
8235   /* Look for a keyword to tell us what kind of parameter this is.  */
8236   token = cp_parser_require (parser, CPP_KEYWORD,
8237                              "`class', `typename', or `template'");
8238   if (!token)
8239     return error_mark_node;
8240
8241   switch (token->keyword)
8242     {
8243     case RID_CLASS:
8244     case RID_TYPENAME:
8245       {
8246         tree identifier;
8247         tree default_argument;
8248
8249         /* If the next token is an identifier, then it names the
8250            parameter.  */
8251         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8252           identifier = cp_parser_identifier (parser);
8253         else
8254           identifier = NULL_TREE;
8255
8256         /* Create the parameter.  */
8257         parameter = finish_template_type_parm (class_type_node, identifier);
8258
8259         /* If the next token is an `=', we have a default argument.  */
8260         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8261           {
8262             /* Consume the `=' token.  */
8263             cp_lexer_consume_token (parser->lexer);
8264             /* Parse the default-argument.  */
8265             default_argument = cp_parser_type_id (parser);
8266           }
8267         else
8268           default_argument = NULL_TREE;
8269
8270         /* Create the combined representation of the parameter and the
8271            default argument.  */
8272         parameter = build_tree_list (default_argument, parameter);
8273       }
8274       break;
8275
8276     case RID_TEMPLATE:
8277       {
8278         tree parameter_list;
8279         tree identifier;
8280         tree default_argument;
8281
8282         /* Look for the `<'.  */
8283         cp_parser_require (parser, CPP_LESS, "`<'");
8284         /* Parse the template-parameter-list.  */
8285         begin_template_parm_list ();
8286         parameter_list
8287           = cp_parser_template_parameter_list (parser);
8288         parameter_list = end_template_parm_list (parameter_list);
8289         /* Look for the `>'.  */
8290         cp_parser_require (parser, CPP_GREATER, "`>'");
8291         /* Look for the `class' keyword.  */
8292         cp_parser_require_keyword (parser, RID_CLASS, "`class'");
8293         /* If the next token is an `=', then there is a
8294            default-argument.  If the next token is a `>', we are at
8295            the end of the parameter-list.  If the next token is a `,',
8296            then we are at the end of this parameter.  */
8297         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8298             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
8299             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8300           identifier = cp_parser_identifier (parser);
8301         else
8302           identifier = NULL_TREE;
8303         /* Create the template parameter.  */
8304         parameter = finish_template_template_parm (class_type_node,
8305                                                    identifier);
8306
8307         /* If the next token is an `=', then there is a
8308            default-argument.  */
8309         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8310           {
8311             bool is_template;
8312
8313             /* Consume the `='.  */
8314             cp_lexer_consume_token (parser->lexer);
8315             /* Parse the id-expression.  */
8316             default_argument
8317               = cp_parser_id_expression (parser,
8318                                          /*template_keyword_p=*/false,
8319                                          /*check_dependency_p=*/true,
8320                                          /*template_p=*/&is_template,
8321                                          /*declarator_p=*/false);
8322             if (TREE_CODE (default_argument) == TYPE_DECL)
8323               /* If the id-expression was a template-id that refers to
8324                  a template-class, we already have the declaration here,
8325                  so no further lookup is needed.  */
8326                  ;
8327             else
8328               /* Look up the name.  */
8329               default_argument
8330                 = cp_parser_lookup_name (parser, default_argument,
8331                                         /*is_type=*/false,
8332                                         /*is_template=*/is_template,
8333                                         /*is_namespace=*/false,
8334                                         /*check_dependency=*/true);
8335             /* See if the default argument is valid.  */
8336             default_argument
8337               = check_template_template_default_arg (default_argument);
8338           }
8339         else
8340           default_argument = NULL_TREE;
8341
8342         /* Create the combined representation of the parameter and the
8343            default argument.  */
8344         parameter =  build_tree_list (default_argument, parameter);
8345       }
8346       break;
8347
8348     default:
8349       /* Anything else is an error.  */
8350       cp_parser_error (parser,
8351                        "expected `class', `typename', or `template'");
8352       parameter = error_mark_node;
8353     }
8354
8355   return parameter;
8356 }
8357
8358 /* Parse a template-id.
8359
8360    template-id:
8361      template-name < template-argument-list [opt] >
8362
8363    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8364    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8365    returned.  Otherwise, if the template-name names a function, or set
8366    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8367    names a class, returns a TYPE_DECL for the specialization.
8368
8369    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8370    uninstantiated templates.  */
8371
8372 static tree
8373 cp_parser_template_id (cp_parser *parser,
8374                        bool template_keyword_p,
8375                        bool check_dependency_p,
8376                        bool is_declaration)
8377 {
8378   tree template;
8379   tree arguments;
8380   tree template_id;
8381   ptrdiff_t start_of_id;
8382   tree access_check = NULL_TREE;
8383   cp_token *next_token, *next_token_2;
8384   bool is_identifier;
8385
8386   /* If the next token corresponds to a template-id, there is no need
8387      to reparse it.  */
8388   next_token = cp_lexer_peek_token (parser->lexer);
8389   if (next_token->type == CPP_TEMPLATE_ID)
8390     {
8391       tree value;
8392       tree check;
8393
8394       /* Get the stored value.  */
8395       value = cp_lexer_consume_token (parser->lexer)->value;
8396       /* Perform any access checks that were deferred.  */
8397       for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
8398         perform_or_defer_access_check (TREE_PURPOSE (check),
8399                                        TREE_VALUE (check));
8400       /* Return the stored value.  */
8401       return TREE_VALUE (value);
8402     }
8403
8404   /* Avoid performing name lookup if there is no possibility of
8405      finding a template-id.  */
8406   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8407       || (next_token->type == CPP_NAME
8408           && !cp_parser_nth_token_starts_template_argument_list_p
8409                (parser, 2)))
8410     {
8411       cp_parser_error (parser, "expected template-id");
8412       return error_mark_node;
8413     }
8414
8415   /* Remember where the template-id starts.  */
8416   if (cp_parser_parsing_tentatively (parser)
8417       && !cp_parser_committed_to_tentative_parse (parser))
8418     {
8419       next_token = cp_lexer_peek_token (parser->lexer);
8420       start_of_id = cp_lexer_token_difference (parser->lexer,
8421                                                parser->lexer->first_token,
8422                                                next_token);
8423     }
8424   else
8425     start_of_id = -1;
8426
8427   push_deferring_access_checks (dk_deferred);
8428
8429   /* Parse the template-name.  */
8430   is_identifier = false;
8431   template = cp_parser_template_name (parser, template_keyword_p,
8432                                       check_dependency_p,
8433                                       is_declaration,
8434                                       &is_identifier);
8435   if (template == error_mark_node || is_identifier)
8436     {
8437       pop_deferring_access_checks ();
8438       return template;
8439     }
8440
8441   /* If we find the sequence `[:' after a template-name, it's probably
8442      a digraph-typo for `< ::'. Substitute the tokens and check if we can
8443      parse correctly the argument list.  */
8444   next_token = cp_lexer_peek_nth_token (parser->lexer, 1);
8445   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8446   if (next_token->type == CPP_OPEN_SQUARE
8447       && next_token->flags & DIGRAPH
8448       && next_token_2->type == CPP_COLON
8449       && !(next_token_2->flags & PREV_WHITE))
8450     {
8451       cp_parser_parse_tentatively (parser);
8452       /* Change `:' into `::'.  */
8453       next_token_2->type = CPP_SCOPE;
8454       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8455          CPP_LESS.  */
8456       cp_lexer_consume_token (parser->lexer);
8457       /* Parse the arguments.  */
8458       arguments = cp_parser_enclosed_template_argument_list (parser);
8459       if (!cp_parser_parse_definitely (parser))
8460         {
8461           /* If we couldn't parse an argument list, then we revert our changes
8462              and return simply an error. Maybe this is not a template-id
8463              after all.  */
8464           next_token_2->type = CPP_COLON;
8465           cp_parser_error (parser, "expected `<'");
8466           pop_deferring_access_checks ();
8467           return error_mark_node;
8468         }
8469       /* Otherwise, emit an error about the invalid digraph, but continue
8470          parsing because we got our argument list.  */
8471       pedwarn ("`<::' cannot begin a template-argument list");
8472       inform ("`<:' is an alternate spelling for `['. Insert whitespace "
8473               "between `<' and `::'");
8474       if (!flag_permissive)
8475         {
8476           static bool hint;
8477           if (!hint)
8478             {
8479               inform ("(if you use `-fpermissive' G++ will accept your code)");
8480               hint = true;
8481             }
8482         }
8483     }
8484   else
8485     {
8486       /* Look for the `<' that starts the template-argument-list.  */
8487       if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8488         {
8489           pop_deferring_access_checks ();
8490           return error_mark_node;
8491         }
8492       /* Parse the arguments.  */
8493       arguments = cp_parser_enclosed_template_argument_list (parser);
8494     }
8495
8496   /* Build a representation of the specialization.  */
8497   if (TREE_CODE (template) == IDENTIFIER_NODE)
8498     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8499   else if (DECL_CLASS_TEMPLATE_P (template)
8500            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8501     template_id
8502       = finish_template_type (template, arguments,
8503                               cp_lexer_next_token_is (parser->lexer,
8504                                                       CPP_SCOPE));
8505   else
8506     {
8507       /* If it's not a class-template or a template-template, it should be
8508          a function-template.  */
8509       my_friendly_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8510                            || TREE_CODE (template) == OVERLOAD
8511                            || BASELINK_P (template)),
8512                           20010716);
8513
8514       template_id = lookup_template_function (template, arguments);
8515     }
8516
8517   /* Retrieve any deferred checks.  Do not pop this access checks yet
8518      so the memory will not be reclaimed during token replacing below.  */
8519   access_check = get_deferred_access_checks ();
8520
8521   /* If parsing tentatively, replace the sequence of tokens that makes
8522      up the template-id with a CPP_TEMPLATE_ID token.  That way,
8523      should we re-parse the token stream, we will not have to repeat
8524      the effort required to do the parse, nor will we issue duplicate
8525      error messages about problems during instantiation of the
8526      template.  */
8527   if (start_of_id >= 0)
8528     {
8529       cp_token *token;
8530
8531       /* Find the token that corresponds to the start of the
8532          template-id.  */
8533       token = cp_lexer_advance_token (parser->lexer,
8534                                       parser->lexer->first_token,
8535                                       start_of_id);
8536
8537       /* Reset the contents of the START_OF_ID token.  */
8538       token->type = CPP_TEMPLATE_ID;
8539       token->value = build_tree_list (access_check, template_id);
8540       token->keyword = RID_MAX;
8541       /* Purge all subsequent tokens.  */
8542       cp_lexer_purge_tokens_after (parser->lexer, token);
8543     }
8544
8545   pop_deferring_access_checks ();
8546   return template_id;
8547 }
8548
8549 /* Parse a template-name.
8550
8551    template-name:
8552      identifier
8553
8554    The standard should actually say:
8555
8556    template-name:
8557      identifier
8558      operator-function-id
8559
8560    A defect report has been filed about this issue.
8561
8562    A conversion-function-id cannot be a template name because they cannot
8563    be part of a template-id. In fact, looking at this code:
8564
8565    a.operator K<int>()
8566
8567    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
8568    It is impossible to call a templated conversion-function-id with an
8569    explicit argument list, since the only allowed template parameter is
8570    the type to which it is converting.
8571
8572    If TEMPLATE_KEYWORD_P is true, then we have just seen the
8573    `template' keyword, in a construction like:
8574
8575      T::template f<3>()
8576
8577    In that case `f' is taken to be a template-name, even though there
8578    is no way of knowing for sure.
8579
8580    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
8581    name refers to a set of overloaded functions, at least one of which
8582    is a template, or an IDENTIFIER_NODE with the name of the template,
8583    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
8584    names are looked up inside uninstantiated templates.  */
8585
8586 static tree
8587 cp_parser_template_name (cp_parser* parser,
8588                          bool template_keyword_p,
8589                          bool check_dependency_p,
8590                          bool is_declaration,
8591                          bool *is_identifier)
8592 {
8593   tree identifier;
8594   tree decl;
8595   tree fns;
8596
8597   /* If the next token is `operator', then we have either an
8598      operator-function-id or a conversion-function-id.  */
8599   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
8600     {
8601       /* We don't know whether we're looking at an
8602          operator-function-id or a conversion-function-id.  */
8603       cp_parser_parse_tentatively (parser);
8604       /* Try an operator-function-id.  */
8605       identifier = cp_parser_operator_function_id (parser);
8606       /* If that didn't work, try a conversion-function-id.  */
8607       if (!cp_parser_parse_definitely (parser))
8608         {
8609           cp_parser_error (parser, "expected template-name");
8610           return error_mark_node;
8611         }
8612     }
8613   /* Look for the identifier.  */
8614   else
8615     identifier = cp_parser_identifier (parser);
8616
8617   /* If we didn't find an identifier, we don't have a template-id.  */
8618   if (identifier == error_mark_node)
8619     return error_mark_node;
8620
8621   /* If the name immediately followed the `template' keyword, then it
8622      is a template-name.  However, if the next token is not `<', then
8623      we do not treat it as a template-name, since it is not being used
8624      as part of a template-id.  This enables us to handle constructs
8625      like:
8626
8627        template <typename T> struct S { S(); };
8628        template <typename T> S<T>::S();
8629
8630      correctly.  We would treat `S' as a template -- if it were `S<T>'
8631      -- but we do not if there is no `<'.  */
8632
8633   if (processing_template_decl
8634       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
8635     {
8636       /* In a declaration, in a dependent context, we pretend that the
8637          "template" keyword was present in order to improve error
8638          recovery.  For example, given:
8639
8640            template <typename T> void f(T::X<int>);
8641
8642          we want to treat "X<int>" as a template-id.  */
8643       if (is_declaration
8644           && !template_keyword_p
8645           && parser->scope && TYPE_P (parser->scope)
8646           && dependent_type_p (parser->scope)
8647           /* Do not do this for dtors (or ctors), since they never
8648              need the template keyword before their name.  */
8649           && !constructor_name_p (identifier, parser->scope))
8650         {
8651           ptrdiff_t start;
8652           cp_token* token;
8653           /* Explain what went wrong.  */
8654           error ("non-template `%D' used as template", identifier);
8655           inform ("use `%T::template %D' to indicate that it is a template",
8656                   parser->scope, identifier);
8657           /* If parsing tentatively, find the location of the "<"
8658              token.  */
8659           if (cp_parser_parsing_tentatively (parser)
8660               && !cp_parser_committed_to_tentative_parse (parser))
8661             {
8662               cp_parser_simulate_error (parser);
8663               token = cp_lexer_peek_token (parser->lexer);
8664               token = cp_lexer_prev_token (parser->lexer, token);
8665               start = cp_lexer_token_difference (parser->lexer,
8666                                                  parser->lexer->first_token,
8667                                                  token);
8668             }
8669           else
8670             start = -1;
8671           /* Parse the template arguments so that we can issue error
8672              messages about them.  */
8673           cp_lexer_consume_token (parser->lexer);
8674           cp_parser_enclosed_template_argument_list (parser);
8675           /* Skip tokens until we find a good place from which to
8676              continue parsing.  */
8677           cp_parser_skip_to_closing_parenthesis (parser,
8678                                                  /*recovering=*/true,
8679                                                  /*or_comma=*/true,
8680                                                  /*consume_paren=*/false);
8681           /* If parsing tentatively, permanently remove the
8682              template argument list.  That will prevent duplicate
8683              error messages from being issued about the missing
8684              "template" keyword.  */
8685           if (start >= 0)
8686             {
8687               token = cp_lexer_advance_token (parser->lexer,
8688                                               parser->lexer->first_token,
8689                                               start);
8690               cp_lexer_purge_tokens_after (parser->lexer, token);
8691             }
8692           if (is_identifier)
8693             *is_identifier = true;
8694           return identifier;
8695         }
8696
8697       /* If the "template" keyword is present, then there is generally
8698          no point in doing name-lookup, so we just return IDENTIFIER.
8699          But, if the qualifying scope is non-dependent then we can
8700          (and must) do name-lookup normally.  */
8701       if (template_keyword_p
8702           && (!parser->scope
8703               || (TYPE_P (parser->scope)
8704                   && dependent_type_p (parser->scope))))
8705         return identifier;
8706     }
8707
8708   /* Look up the name.  */
8709   decl = cp_parser_lookup_name (parser, identifier,
8710                                 /*is_type=*/false,
8711                                 /*is_template=*/false,
8712                                 /*is_namespace=*/false,
8713                                 check_dependency_p);
8714   decl = maybe_get_template_decl_from_type_decl (decl);
8715
8716   /* If DECL is a template, then the name was a template-name.  */
8717   if (TREE_CODE (decl) == TEMPLATE_DECL)
8718     ;
8719   else
8720     {
8721       /* The standard does not explicitly indicate whether a name that
8722          names a set of overloaded declarations, some of which are
8723          templates, is a template-name.  However, such a name should
8724          be a template-name; otherwise, there is no way to form a
8725          template-id for the overloaded templates.  */
8726       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
8727       if (TREE_CODE (fns) == OVERLOAD)
8728         {
8729           tree fn;
8730
8731           for (fn = fns; fn; fn = OVL_NEXT (fn))
8732             if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
8733               break;
8734         }
8735       else
8736         {
8737           /* Otherwise, the name does not name a template.  */
8738           cp_parser_error (parser, "expected template-name");
8739           return error_mark_node;
8740         }
8741     }
8742
8743   /* If DECL is dependent, and refers to a function, then just return
8744      its name; we will look it up again during template instantiation.  */
8745   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
8746     {
8747       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
8748       if (TYPE_P (scope) && dependent_type_p (scope))
8749         return identifier;
8750     }
8751
8752   return decl;
8753 }
8754
8755 /* Parse a template-argument-list.
8756
8757    template-argument-list:
8758      template-argument
8759      template-argument-list , template-argument
8760
8761    Returns a TREE_VEC containing the arguments.  */
8762
8763 static tree
8764 cp_parser_template_argument_list (cp_parser* parser)
8765 {
8766   tree fixed_args[10];
8767   unsigned n_args = 0;
8768   unsigned alloced = 10;
8769   tree *arg_ary = fixed_args;
8770   tree vec;
8771   bool saved_in_template_argument_list_p;
8772
8773   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
8774   parser->in_template_argument_list_p = true;
8775   do
8776     {
8777       tree argument;
8778
8779       if (n_args)
8780         /* Consume the comma.  */
8781         cp_lexer_consume_token (parser->lexer);
8782
8783       /* Parse the template-argument.  */
8784       argument = cp_parser_template_argument (parser);
8785       if (n_args == alloced)
8786         {
8787           alloced *= 2;
8788
8789           if (arg_ary == fixed_args)
8790             {
8791               arg_ary = xmalloc (sizeof (tree) * alloced);
8792               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
8793             }
8794           else
8795             arg_ary = xrealloc (arg_ary, sizeof (tree) * alloced);
8796         }
8797       arg_ary[n_args++] = argument;
8798     }
8799   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
8800
8801   vec = make_tree_vec (n_args);
8802
8803   while (n_args--)
8804     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
8805
8806   if (arg_ary != fixed_args)
8807     free (arg_ary);
8808   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
8809   return vec;
8810 }
8811
8812 /* Parse a template-argument.
8813
8814    template-argument:
8815      assignment-expression
8816      type-id
8817      id-expression
8818
8819    The representation is that of an assignment-expression, type-id, or
8820    id-expression -- except that the qualified id-expression is
8821    evaluated, so that the value returned is either a DECL or an
8822    OVERLOAD.
8823
8824    Although the standard says "assignment-expression", it forbids
8825    throw-expressions or assignments in the template argument.
8826    Therefore, we use "conditional-expression" instead.  */
8827
8828 static tree
8829 cp_parser_template_argument (cp_parser* parser)
8830 {
8831   tree argument;
8832   bool template_p;
8833   bool address_p;
8834   bool maybe_type_id = false;
8835   cp_token *token;
8836   cp_id_kind idk;
8837   tree qualifying_class;
8838
8839   /* There's really no way to know what we're looking at, so we just
8840      try each alternative in order.
8841
8842        [temp.arg]
8843
8844        In a template-argument, an ambiguity between a type-id and an
8845        expression is resolved to a type-id, regardless of the form of
8846        the corresponding template-parameter.
8847
8848      Therefore, we try a type-id first.  */
8849   cp_parser_parse_tentatively (parser);
8850   argument = cp_parser_type_id (parser);
8851   /* If there was no error parsing the type-id but the next token is a '>>',
8852      we probably found a typo for '> >'. But there are type-id which are
8853      also valid expressions. For instance:
8854
8855      struct X { int operator >> (int); };
8856      template <int V> struct Foo {};
8857      Foo<X () >> 5> r;
8858
8859      Here 'X()' is a valid type-id of a function type, but the user just
8860      wanted to write the expression "X() >> 5". Thus, we remember that we
8861      found a valid type-id, but we still try to parse the argument as an
8862      expression to see what happens.  */
8863   if (!cp_parser_error_occurred (parser)
8864       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
8865     {
8866       maybe_type_id = true;
8867       cp_parser_abort_tentative_parse (parser);
8868     }
8869   else
8870     {
8871       /* If the next token isn't a `,' or a `>', then this argument wasn't
8872       really finished. This means that the argument is not a valid
8873       type-id.  */
8874       if (!cp_parser_next_token_ends_template_argument_p (parser))
8875         cp_parser_error (parser, "expected template-argument");
8876       /* If that worked, we're done.  */
8877       if (cp_parser_parse_definitely (parser))
8878         return argument;
8879     }
8880   /* We're still not sure what the argument will be.  */
8881   cp_parser_parse_tentatively (parser);
8882   /* Try a template.  */
8883   argument = cp_parser_id_expression (parser,
8884                                       /*template_keyword_p=*/false,
8885                                       /*check_dependency_p=*/true,
8886                                       &template_p,
8887                                       /*declarator_p=*/false);
8888   /* If the next token isn't a `,' or a `>', then this argument wasn't
8889      really finished.  */
8890   if (!cp_parser_next_token_ends_template_argument_p (parser))
8891     cp_parser_error (parser, "expected template-argument");
8892   if (!cp_parser_error_occurred (parser))
8893     {
8894       /* Figure out what is being referred to.  If the id-expression
8895          was for a class template specialization, then we will have a
8896          TYPE_DECL at this point.  There is no need to do name lookup
8897          at this point in that case.  */
8898       if (TREE_CODE (argument) != TYPE_DECL)
8899         argument = cp_parser_lookup_name (parser, argument,
8900                                           /*is_type=*/false,
8901                                           /*is_template=*/template_p,
8902                                           /*is_namespace=*/false,
8903                                           /*check_dependency=*/true);
8904       if (TREE_CODE (argument) != TEMPLATE_DECL
8905           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
8906         cp_parser_error (parser, "expected template-name");
8907     }
8908   if (cp_parser_parse_definitely (parser))
8909     return argument;
8910   /* It must be a non-type argument.  There permitted cases are given
8911      in [temp.arg.nontype]:
8912
8913      -- an integral constant-expression of integral or enumeration
8914         type; or
8915
8916      -- the name of a non-type template-parameter; or
8917
8918      -- the name of an object or function with external linkage...
8919
8920      -- the address of an object or function with external linkage...
8921
8922      -- a pointer to member...  */
8923   /* Look for a non-type template parameter.  */
8924   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8925     {
8926       cp_parser_parse_tentatively (parser);
8927       argument = cp_parser_primary_expression (parser,
8928                                                &idk,
8929                                                &qualifying_class);
8930       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
8931           || !cp_parser_next_token_ends_template_argument_p (parser))
8932         cp_parser_simulate_error (parser);
8933       if (cp_parser_parse_definitely (parser))
8934         return argument;
8935     }
8936   /* If the next token is "&", the argument must be the address of an
8937      object or function with external linkage.  */
8938   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
8939   if (address_p)
8940     cp_lexer_consume_token (parser->lexer);
8941   /* See if we might have an id-expression.  */
8942   token = cp_lexer_peek_token (parser->lexer);
8943   if (token->type == CPP_NAME
8944       || token->keyword == RID_OPERATOR
8945       || token->type == CPP_SCOPE
8946       || token->type == CPP_TEMPLATE_ID
8947       || token->type == CPP_NESTED_NAME_SPECIFIER)
8948     {
8949       cp_parser_parse_tentatively (parser);
8950       argument = cp_parser_primary_expression (parser,
8951                                                &idk,
8952                                                &qualifying_class);
8953       if (cp_parser_error_occurred (parser)
8954           || !cp_parser_next_token_ends_template_argument_p (parser))
8955         cp_parser_abort_tentative_parse (parser);
8956       else
8957         {
8958           if (qualifying_class)
8959             argument = finish_qualified_id_expr (qualifying_class,
8960                                                  argument,
8961                                                  /*done=*/true,
8962                                                  address_p);
8963           if (TREE_CODE (argument) == VAR_DECL)
8964             {
8965               /* A variable without external linkage might still be a
8966                  valid constant-expression, so no error is issued here
8967                  if the external-linkage check fails.  */
8968               if (!DECL_EXTERNAL_LINKAGE_P (argument))
8969                 cp_parser_simulate_error (parser);
8970             }
8971           else if (is_overloaded_fn (argument))
8972             /* All overloaded functions are allowed; if the external
8973                linkage test does not pass, an error will be issued
8974                later.  */
8975             ;
8976           else if (address_p
8977                    && (TREE_CODE (argument) == OFFSET_REF
8978                        || TREE_CODE (argument) == SCOPE_REF))
8979             /* A pointer-to-member.  */
8980             ;
8981           else
8982             cp_parser_simulate_error (parser);
8983
8984           if (cp_parser_parse_definitely (parser))
8985             {
8986               if (address_p)
8987                 argument = build_x_unary_op (ADDR_EXPR, argument);
8988               return argument;
8989             }
8990         }
8991     }
8992   /* If the argument started with "&", there are no other valid
8993      alternatives at this point.  */
8994   if (address_p)
8995     {
8996       cp_parser_error (parser, "invalid non-type template argument");
8997       return error_mark_node;
8998     }
8999   /* If the argument wasn't successfully parsed as a type-id followed
9000      by '>>', the argument can only be a constant expression now.
9001      Otherwise, we try parsing the constant-expression tentatively,
9002      because the argument could really be a type-id.  */
9003   if (maybe_type_id)
9004     cp_parser_parse_tentatively (parser);
9005   argument = cp_parser_constant_expression (parser,
9006                                             /*allow_non_constant_p=*/false,
9007                                             /*non_constant_p=*/NULL);
9008   argument = fold_non_dependent_expr (argument);
9009   if (!maybe_type_id)
9010     return argument;
9011   if (!cp_parser_next_token_ends_template_argument_p (parser))
9012     cp_parser_error (parser, "expected template-argument");
9013   if (cp_parser_parse_definitely (parser))
9014     return argument;
9015   /* We did our best to parse the argument as a non type-id, but that
9016      was the only alternative that matched (albeit with a '>' after
9017      it). We can assume it's just a typo from the user, and a
9018      diagnostic will then be issued.  */
9019   return cp_parser_type_id (parser);
9020 }
9021
9022 /* Parse an explicit-instantiation.
9023
9024    explicit-instantiation:
9025      template declaration
9026
9027    Although the standard says `declaration', what it really means is:
9028
9029    explicit-instantiation:
9030      template decl-specifier-seq [opt] declarator [opt] ;
9031
9032    Things like `template int S<int>::i = 5, int S<double>::j;' are not
9033    supposed to be allowed.  A defect report has been filed about this
9034    issue.
9035
9036    GNU Extension:
9037
9038    explicit-instantiation:
9039      storage-class-specifier template
9040        decl-specifier-seq [opt] declarator [opt] ;
9041      function-specifier template
9042        decl-specifier-seq [opt] declarator [opt] ;  */
9043
9044 static void
9045 cp_parser_explicit_instantiation (cp_parser* parser)
9046 {
9047   int declares_class_or_enum;
9048   cp_decl_specifier_seq decl_specifiers;
9049   tree extension_specifier = NULL_TREE;
9050
9051   /* Look for an (optional) storage-class-specifier or
9052      function-specifier.  */
9053   if (cp_parser_allow_gnu_extensions_p (parser))
9054     {
9055       extension_specifier
9056         = cp_parser_storage_class_specifier_opt (parser);
9057       if (!extension_specifier)
9058         extension_specifier
9059           = cp_parser_function_specifier_opt (parser,
9060                                               /*decl_specs=*/NULL);
9061     }
9062
9063   /* Look for the `template' keyword.  */
9064   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9065   /* Let the front end know that we are processing an explicit
9066      instantiation.  */
9067   begin_explicit_instantiation ();
9068   /* [temp.explicit] says that we are supposed to ignore access
9069      control while processing explicit instantiation directives.  */
9070   push_deferring_access_checks (dk_no_check);
9071   /* Parse a decl-specifier-seq.  */
9072   cp_parser_decl_specifier_seq (parser,
9073                                 CP_PARSER_FLAGS_OPTIONAL,
9074                                 &decl_specifiers,
9075                                 &declares_class_or_enum);
9076   /* If there was exactly one decl-specifier, and it declared a class,
9077      and there's no declarator, then we have an explicit type
9078      instantiation.  */
9079   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
9080     {
9081       tree type;
9082
9083       type = check_tag_decl (&decl_specifiers);
9084       /* Turn access control back on for names used during
9085          template instantiation.  */
9086       pop_deferring_access_checks ();
9087       if (type)
9088         do_type_instantiation (type, extension_specifier, /*complain=*/1);
9089     }
9090   else
9091     {
9092       cp_declarator *declarator;
9093       tree decl;
9094
9095       /* Parse the declarator.  */
9096       declarator
9097         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9098                                 /*ctor_dtor_or_conv_p=*/NULL,
9099                                 /*parenthesized_p=*/NULL);
9100       cp_parser_check_for_definition_in_return_type (declarator,
9101                                                      declares_class_or_enum);
9102       if (declarator != cp_error_declarator)
9103         {
9104           decl = grokdeclarator (declarator, &decl_specifiers,
9105                                  NORMAL, 0, NULL);
9106           /* Turn access control back on for names used during
9107              template instantiation.  */
9108           pop_deferring_access_checks ();
9109           /* Do the explicit instantiation.  */
9110           do_decl_instantiation (decl, extension_specifier);
9111         }
9112       else
9113         {
9114           pop_deferring_access_checks ();
9115           /* Skip the body of the explicit instantiation.  */
9116           cp_parser_skip_to_end_of_statement (parser);
9117         }
9118     }
9119   /* We're done with the instantiation.  */
9120   end_explicit_instantiation ();
9121
9122   cp_parser_consume_semicolon_at_end_of_statement (parser);
9123 }
9124
9125 /* Parse an explicit-specialization.
9126
9127    explicit-specialization:
9128      template < > declaration
9129
9130    Although the standard says `declaration', what it really means is:
9131
9132    explicit-specialization:
9133      template <> decl-specifier [opt] init-declarator [opt] ;
9134      template <> function-definition
9135      template <> explicit-specialization
9136      template <> template-declaration  */
9137
9138 static void
9139 cp_parser_explicit_specialization (cp_parser* parser)
9140 {
9141   /* Look for the `template' keyword.  */
9142   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9143   /* Look for the `<'.  */
9144   cp_parser_require (parser, CPP_LESS, "`<'");
9145   /* Look for the `>'.  */
9146   cp_parser_require (parser, CPP_GREATER, "`>'");
9147   /* We have processed another parameter list.  */
9148   ++parser->num_template_parameter_lists;
9149   /* Let the front end know that we are beginning a specialization.  */
9150   begin_specialization ();
9151
9152   /* If the next keyword is `template', we need to figure out whether
9153      or not we're looking a template-declaration.  */
9154   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
9155     {
9156       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
9157           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
9158         cp_parser_template_declaration_after_export (parser,
9159                                                      /*member_p=*/false);
9160       else
9161         cp_parser_explicit_specialization (parser);
9162     }
9163   else
9164     /* Parse the dependent declaration.  */
9165     cp_parser_single_declaration (parser,
9166                                   /*member_p=*/false,
9167                                   /*friend_p=*/NULL);
9168
9169   /* We're done with the specialization.  */
9170   end_specialization ();
9171   /* We're done with this parameter list.  */
9172   --parser->num_template_parameter_lists;
9173 }
9174
9175 /* Parse a type-specifier.
9176
9177    type-specifier:
9178      simple-type-specifier
9179      class-specifier
9180      enum-specifier
9181      elaborated-type-specifier
9182      cv-qualifier
9183
9184    GNU Extension:
9185
9186    type-specifier:
9187      __complex__
9188
9189    Returns a representation of the type-specifier.  For a
9190    class-specifier, enum-specifier, or elaborated-type-specifier, a
9191    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
9192
9193    If IS_FRIEND is TRUE then this type-specifier is being declared a
9194    `friend'.  If IS_DECLARATION is TRUE, then this type-specifier is
9195    appearing in a decl-specifier-seq.
9196
9197    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
9198    class-specifier, enum-specifier, or elaborated-type-specifier, then
9199    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
9200    if a type is declared; 2 if it is defined.  Otherwise, it is set to
9201    zero.
9202
9203    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
9204    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
9205    is set to FALSE.  */
9206
9207 static tree
9208 cp_parser_type_specifier (cp_parser* parser,
9209                           cp_parser_flags flags,
9210                           cp_decl_specifier_seq *decl_specs,
9211                           bool is_declaration,
9212                           int* declares_class_or_enum,
9213                           bool* is_cv_qualifier)
9214 {
9215   tree type_spec = NULL_TREE;
9216   cp_token *token;
9217   enum rid keyword;
9218   cp_decl_spec ds = ds_last;
9219
9220   /* Assume this type-specifier does not declare a new type.  */
9221   if (declares_class_or_enum)
9222     *declares_class_or_enum = 0;
9223   /* And that it does not specify a cv-qualifier.  */
9224   if (is_cv_qualifier)
9225     *is_cv_qualifier = false;
9226   /* Peek at the next token.  */
9227   token = cp_lexer_peek_token (parser->lexer);
9228
9229   /* If we're looking at a keyword, we can use that to guide the
9230      production we choose.  */
9231   keyword = token->keyword;
9232   switch (keyword)
9233     {
9234       /* Any of these indicate either a class-specifier, or an
9235          elaborated-type-specifier.  */
9236     case RID_CLASS:
9237     case RID_STRUCT:
9238     case RID_UNION:
9239     case RID_ENUM:
9240       /* Parse tentatively so that we can back up if we don't find a
9241          class-specifier or enum-specifier.  */
9242       cp_parser_parse_tentatively (parser);
9243       /* Look for the class-specifier or enum-specifier.  */
9244       if (keyword == RID_ENUM)
9245         type_spec = cp_parser_enum_specifier (parser);
9246       else
9247         type_spec = cp_parser_class_specifier (parser);
9248
9249       /* If that worked, we're done.  */
9250       if (cp_parser_parse_definitely (parser))
9251         {
9252           if (declares_class_or_enum)
9253             *declares_class_or_enum = 2;
9254           if (decl_specs)
9255             cp_parser_set_decl_spec_type (decl_specs,
9256                                           type_spec,
9257                                           /*user_defined_p=*/true);
9258           return type_spec;
9259         }
9260
9261       /* Fall through.  */
9262
9263     case RID_TYPENAME:
9264       /* Look for an elaborated-type-specifier.  */
9265       type_spec
9266         = (cp_parser_elaborated_type_specifier
9267            (parser,
9268             decl_specs && decl_specs->specs[(int) ds_friend],
9269             is_declaration));
9270       /* We're declaring a class or enum -- unless we're using
9271          `typename'.  */
9272       if (declares_class_or_enum && keyword != RID_TYPENAME)
9273         *declares_class_or_enum = 1;
9274       if (decl_specs)
9275         cp_parser_set_decl_spec_type (decl_specs,
9276                                       type_spec,
9277                                       /*user_defined_p=*/true);
9278       return type_spec;
9279
9280     case RID_CONST:
9281       ds = ds_const;
9282       if (is_cv_qualifier)
9283         *is_cv_qualifier = true;
9284       break;
9285
9286     case RID_VOLATILE:
9287       ds = ds_volatile;
9288       if (is_cv_qualifier)
9289         *is_cv_qualifier = true;
9290       break;
9291
9292     case RID_RESTRICT:
9293       ds = ds_restrict;
9294       if (is_cv_qualifier)
9295         *is_cv_qualifier = true;
9296       break;
9297
9298     case RID_COMPLEX:
9299       /* The `__complex__' keyword is a GNU extension.  */
9300       ds = ds_complex;
9301       break;
9302
9303     default:
9304       break;
9305     }
9306
9307   /* Handle simple keywords.  */
9308   if (ds != ds_last)
9309     {
9310       if (decl_specs)
9311         {
9312           ++decl_specs->specs[(int)ds];
9313           decl_specs->any_specifiers_p = true;
9314         }
9315       return cp_lexer_consume_token (parser->lexer)->value;
9316     }
9317
9318   /* If we do not already have a type-specifier, assume we are looking
9319      at a simple-type-specifier.  */
9320   type_spec = cp_parser_simple_type_specifier (parser,
9321                                                decl_specs,
9322                                                flags);
9323
9324   /* If we didn't find a type-specifier, and a type-specifier was not
9325      optional in this context, issue an error message.  */
9326   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9327     {
9328       cp_parser_error (parser, "expected type specifier");
9329       return error_mark_node;
9330     }
9331
9332   return type_spec;
9333 }
9334
9335 /* Parse a simple-type-specifier.
9336
9337    simple-type-specifier:
9338      :: [opt] nested-name-specifier [opt] type-name
9339      :: [opt] nested-name-specifier template template-id
9340      char
9341      wchar_t
9342      bool
9343      short
9344      int
9345      long
9346      signed
9347      unsigned
9348      float
9349      double
9350      void
9351
9352    GNU Extension:
9353
9354    simple-type-specifier:
9355      __typeof__ unary-expression
9356      __typeof__ ( type-id )
9357
9358    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
9359    appropriately updated.  */
9360
9361 static tree
9362 cp_parser_simple_type_specifier (cp_parser* parser,
9363                                  cp_decl_specifier_seq *decl_specs,
9364                                  cp_parser_flags flags)
9365 {
9366   tree type = NULL_TREE;
9367   cp_token *token;
9368
9369   /* Peek at the next token.  */
9370   token = cp_lexer_peek_token (parser->lexer);
9371
9372   /* If we're looking at a keyword, things are easy.  */
9373   switch (token->keyword)
9374     {
9375     case RID_CHAR:
9376       if (decl_specs)
9377         decl_specs->explicit_char_p = true;
9378       type = char_type_node;
9379       break;
9380     case RID_WCHAR:
9381       type = wchar_type_node;
9382       break;
9383     case RID_BOOL:
9384       type = boolean_type_node;
9385       break;
9386     case RID_SHORT:
9387       if (decl_specs)
9388         ++decl_specs->specs[(int) ds_short];
9389       type = short_integer_type_node;
9390       break;
9391     case RID_INT:
9392       if (decl_specs)
9393         decl_specs->explicit_int_p = true;
9394       type = integer_type_node;
9395       break;
9396     case RID_LONG:
9397       if (decl_specs)
9398         ++decl_specs->specs[(int) ds_long];
9399       type = long_integer_type_node;
9400       break;
9401     case RID_SIGNED:
9402       if (decl_specs)
9403         ++decl_specs->specs[(int) ds_signed];
9404       type = integer_type_node;
9405       break;
9406     case RID_UNSIGNED:
9407       if (decl_specs)
9408         ++decl_specs->specs[(int) ds_unsigned];
9409       type = unsigned_type_node;
9410       break;
9411     case RID_FLOAT:
9412       type = float_type_node;
9413       break;
9414     case RID_DOUBLE:
9415       type = double_type_node;
9416       break;
9417     case RID_VOID:
9418       type = void_type_node;
9419       break;
9420
9421     case RID_TYPEOF:
9422       /* Consume the `typeof' token.  */
9423       cp_lexer_consume_token (parser->lexer);
9424       /* Parse the operand to `typeof'.  */
9425       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9426       /* If it is not already a TYPE, take its type.  */
9427       if (!TYPE_P (type))
9428         type = finish_typeof (type);
9429
9430       if (decl_specs)
9431         cp_parser_set_decl_spec_type (decl_specs, type,
9432                                       /*user_defined_p=*/true);
9433
9434       return type;
9435
9436     default:
9437       break;
9438     }
9439
9440   /* If the type-specifier was for a built-in type, we're done.  */
9441   if (type)
9442     {
9443       tree id;
9444
9445       /* Record the type.  */
9446       if (decl_specs
9447           && (token->keyword != RID_SIGNED
9448               && token->keyword != RID_UNSIGNED
9449               && token->keyword != RID_SHORT
9450               && token->keyword != RID_LONG))
9451         cp_parser_set_decl_spec_type (decl_specs,
9452                                       type,
9453                                       /*user_defined=*/false);
9454       if (decl_specs)
9455         decl_specs->any_specifiers_p = true;
9456
9457       /* Consume the token.  */
9458       id = cp_lexer_consume_token (parser->lexer)->value;
9459
9460       /* There is no valid C++ program where a non-template type is
9461          followed by a "<".  That usually indicates that the user thought
9462          that the type was a template.  */
9463       cp_parser_check_for_invalid_template_id (parser, type);
9464
9465       return TYPE_NAME (type);
9466     }
9467
9468   /* The type-specifier must be a user-defined type.  */
9469   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
9470     {
9471       bool qualified_p;
9472       bool global_p;
9473
9474       /* Don't gobble tokens or issue error messages if this is an
9475          optional type-specifier.  */
9476       if (flags & CP_PARSER_FLAGS_OPTIONAL)
9477         cp_parser_parse_tentatively (parser);
9478
9479       /* Look for the optional `::' operator.  */
9480       global_p
9481         = (cp_parser_global_scope_opt (parser,
9482                                        /*current_scope_valid_p=*/false)
9483            != NULL_TREE);
9484       /* Look for the nested-name specifier.  */
9485       qualified_p
9486         = (cp_parser_nested_name_specifier_opt (parser,
9487                                                 /*typename_keyword_p=*/false,
9488                                                 /*check_dependency_p=*/true,
9489                                                 /*type_p=*/false,
9490                                                 /*is_declaration=*/false)
9491            != NULL_TREE);
9492       /* If we have seen a nested-name-specifier, and the next token
9493          is `template', then we are using the template-id production.  */
9494       if (parser->scope
9495           && cp_parser_optional_template_keyword (parser))
9496         {
9497           /* Look for the template-id.  */
9498           type = cp_parser_template_id (parser,
9499                                         /*template_keyword_p=*/true,
9500                                         /*check_dependency_p=*/true,
9501                                         /*is_declaration=*/false);
9502           /* If the template-id did not name a type, we are out of
9503              luck.  */
9504           if (TREE_CODE (type) != TYPE_DECL)
9505             {
9506               cp_parser_error (parser, "expected template-id for type");
9507               type = NULL_TREE;
9508             }
9509         }
9510       /* Otherwise, look for a type-name.  */
9511       else
9512         type = cp_parser_type_name (parser);
9513       /* Keep track of all name-lookups performed in class scopes.  */
9514       if (type
9515           && !global_p
9516           && !qualified_p
9517           && TREE_CODE (type) == TYPE_DECL
9518           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
9519         maybe_note_name_used_in_class (DECL_NAME (type), type);
9520       /* If it didn't work out, we don't have a TYPE.  */
9521       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
9522           && !cp_parser_parse_definitely (parser))
9523         type = NULL_TREE;
9524       if (type && decl_specs)
9525         cp_parser_set_decl_spec_type (decl_specs, type,
9526                                       /*user_defined=*/true);
9527     }
9528
9529   /* If we didn't get a type-name, issue an error message.  */
9530   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9531     {
9532       cp_parser_error (parser, "expected type-name");
9533       return error_mark_node;
9534     }
9535
9536   /* There is no valid C++ program where a non-template type is
9537      followed by a "<".  That usually indicates that the user thought
9538      that the type was a template.  */
9539   if (type && type != error_mark_node)
9540     cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
9541
9542   return type;
9543 }
9544
9545 /* Parse a type-name.
9546
9547    type-name:
9548      class-name
9549      enum-name
9550      typedef-name
9551
9552    enum-name:
9553      identifier
9554
9555    typedef-name:
9556      identifier
9557
9558    Returns a TYPE_DECL for the the type.  */
9559
9560 static tree
9561 cp_parser_type_name (cp_parser* parser)
9562 {
9563   tree type_decl;
9564   tree identifier;
9565
9566   /* We can't know yet whether it is a class-name or not.  */
9567   cp_parser_parse_tentatively (parser);
9568   /* Try a class-name.  */
9569   type_decl = cp_parser_class_name (parser,
9570                                     /*typename_keyword_p=*/false,
9571                                     /*template_keyword_p=*/false,
9572                                     /*type_p=*/false,
9573                                     /*check_dependency_p=*/true,
9574                                     /*class_head_p=*/false,
9575                                     /*is_declaration=*/false);
9576   /* If it's not a class-name, keep looking.  */
9577   if (!cp_parser_parse_definitely (parser))
9578     {
9579       /* It must be a typedef-name or an enum-name.  */
9580       identifier = cp_parser_identifier (parser);
9581       if (identifier == error_mark_node)
9582         return error_mark_node;
9583
9584       /* Look up the type-name.  */
9585       type_decl = cp_parser_lookup_name_simple (parser, identifier);
9586       /* Issue an error if we did not find a type-name.  */
9587       if (TREE_CODE (type_decl) != TYPE_DECL)
9588         {
9589           if (!cp_parser_simulate_error (parser))
9590             cp_parser_name_lookup_error (parser, identifier, type_decl,
9591                                          "is not a type");
9592           type_decl = error_mark_node;
9593         }
9594       /* Remember that the name was used in the definition of the
9595          current class so that we can check later to see if the
9596          meaning would have been different after the class was
9597          entirely defined.  */
9598       else if (type_decl != error_mark_node
9599                && !parser->scope)
9600         maybe_note_name_used_in_class (identifier, type_decl);
9601     }
9602
9603   return type_decl;
9604 }
9605
9606
9607 /* Parse an elaborated-type-specifier.  Note that the grammar given
9608    here incorporates the resolution to DR68.
9609
9610    elaborated-type-specifier:
9611      class-key :: [opt] nested-name-specifier [opt] identifier
9612      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
9613      enum :: [opt] nested-name-specifier [opt] identifier
9614      typename :: [opt] nested-name-specifier identifier
9615      typename :: [opt] nested-name-specifier template [opt]
9616        template-id
9617
9618    GNU extension:
9619
9620    elaborated-type-specifier:
9621      class-key attributes :: [opt] nested-name-specifier [opt] identifier
9622      class-key attributes :: [opt] nested-name-specifier [opt]
9623                template [opt] template-id
9624      enum attributes :: [opt] nested-name-specifier [opt] identifier
9625
9626    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
9627    declared `friend'.  If IS_DECLARATION is TRUE, then this
9628    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
9629    something is being declared.
9630
9631    Returns the TYPE specified.  */
9632
9633 static tree
9634 cp_parser_elaborated_type_specifier (cp_parser* parser,
9635                                      bool is_friend,
9636                                      bool is_declaration)
9637 {
9638   enum tag_types tag_type;
9639   tree identifier;
9640   tree type = NULL_TREE;
9641   tree attributes = NULL_TREE;
9642
9643   /* See if we're looking at the `enum' keyword.  */
9644   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
9645     {
9646       /* Consume the `enum' token.  */
9647       cp_lexer_consume_token (parser->lexer);
9648       /* Remember that it's an enumeration type.  */
9649       tag_type = enum_type;
9650       /* Parse the attributes.  */
9651       attributes = cp_parser_attributes_opt (parser);
9652     }
9653   /* Or, it might be `typename'.  */
9654   else if (cp_lexer_next_token_is_keyword (parser->lexer,
9655                                            RID_TYPENAME))
9656     {
9657       /* Consume the `typename' token.  */
9658       cp_lexer_consume_token (parser->lexer);
9659       /* Remember that it's a `typename' type.  */
9660       tag_type = typename_type;
9661       /* The `typename' keyword is only allowed in templates.  */
9662       if (!processing_template_decl)
9663         pedwarn ("using `typename' outside of template");
9664     }
9665   /* Otherwise it must be a class-key.  */
9666   else
9667     {
9668       tag_type = cp_parser_class_key (parser);
9669       if (tag_type == none_type)
9670         return error_mark_node;
9671       /* Parse the attributes.  */
9672       attributes = cp_parser_attributes_opt (parser);
9673     }
9674
9675   /* Look for the `::' operator.  */
9676   cp_parser_global_scope_opt (parser,
9677                               /*current_scope_valid_p=*/false);
9678   /* Look for the nested-name-specifier.  */
9679   if (tag_type == typename_type)
9680     {
9681       if (cp_parser_nested_name_specifier (parser,
9682                                            /*typename_keyword_p=*/true,
9683                                            /*check_dependency_p=*/true,
9684                                            /*type_p=*/true,
9685                                            is_declaration)
9686           == error_mark_node)
9687         return error_mark_node;
9688     }
9689   else
9690     /* Even though `typename' is not present, the proposed resolution
9691        to Core Issue 180 says that in `class A<T>::B', `B' should be
9692        considered a type-name, even if `A<T>' is dependent.  */
9693     cp_parser_nested_name_specifier_opt (parser,
9694                                          /*typename_keyword_p=*/true,
9695                                          /*check_dependency_p=*/true,
9696                                          /*type_p=*/true,
9697                                          is_declaration);
9698   /* For everything but enumeration types, consider a template-id.  */
9699   if (tag_type != enum_type)
9700     {
9701       bool template_p = false;
9702       tree decl;
9703
9704       /* Allow the `template' keyword.  */
9705       template_p = cp_parser_optional_template_keyword (parser);
9706       /* If we didn't see `template', we don't know if there's a
9707          template-id or not.  */
9708       if (!template_p)
9709         cp_parser_parse_tentatively (parser);
9710       /* Parse the template-id.  */
9711       decl = cp_parser_template_id (parser, template_p,
9712                                     /*check_dependency_p=*/true,
9713                                     is_declaration);
9714       /* If we didn't find a template-id, look for an ordinary
9715          identifier.  */
9716       if (!template_p && !cp_parser_parse_definitely (parser))
9717         ;
9718       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
9719          in effect, then we must assume that, upon instantiation, the
9720          template will correspond to a class.  */
9721       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
9722                && tag_type == typename_type)
9723         type = make_typename_type (parser->scope, decl,
9724                                    /*complain=*/1);
9725       else
9726         type = TREE_TYPE (decl);
9727     }
9728
9729   /* For an enumeration type, consider only a plain identifier.  */
9730   if (!type)
9731     {
9732       identifier = cp_parser_identifier (parser);
9733
9734       if (identifier == error_mark_node)
9735         {
9736           parser->scope = NULL_TREE;
9737           return error_mark_node;
9738         }
9739
9740       /* For a `typename', we needn't call xref_tag.  */
9741       if (tag_type == typename_type)
9742         return cp_parser_make_typename_type (parser, parser->scope,
9743                                              identifier);
9744       /* Look up a qualified name in the usual way.  */
9745       if (parser->scope)
9746         {
9747           tree decl;
9748
9749           /* In an elaborated-type-specifier, names are assumed to name
9750              types, so we set IS_TYPE to TRUE when calling
9751              cp_parser_lookup_name.  */
9752           decl = cp_parser_lookup_name (parser, identifier,
9753                                         /*is_type=*/true,
9754                                         /*is_template=*/false,
9755                                         /*is_namespace=*/false,
9756                                         /*check_dependency=*/true);
9757
9758           /* If we are parsing friend declaration, DECL may be a
9759              TEMPLATE_DECL tree node here.  However, we need to check
9760              whether this TEMPLATE_DECL results in valid code.  Consider
9761              the following example:
9762
9763                namespace N {
9764                  template <class T> class C {};
9765                }
9766                class X {
9767                  template <class T> friend class N::C; // #1, valid code
9768                };
9769                template <class T> class Y {
9770                  friend class N::C;                    // #2, invalid code
9771                };
9772
9773              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
9774              name lookup of `N::C'.  We see that friend declaration must
9775              be template for the code to be valid.  Note that
9776              processing_template_decl does not work here since it is
9777              always 1 for the above two cases.  */
9778
9779           decl = (cp_parser_maybe_treat_template_as_class
9780                   (decl, /*tag_name_p=*/is_friend
9781                          && parser->num_template_parameter_lists));
9782
9783           if (TREE_CODE (decl) != TYPE_DECL)
9784             {
9785               error ("expected type-name");
9786               return error_mark_node;
9787             }
9788
9789           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
9790             check_elaborated_type_specifier
9791               (tag_type, decl,
9792                (parser->num_template_parameter_lists
9793                 || DECL_SELF_REFERENCE_P (decl)));
9794
9795           type = TREE_TYPE (decl);
9796         }
9797       else
9798         {
9799           /* An elaborated-type-specifier sometimes introduces a new type and
9800              sometimes names an existing type.  Normally, the rule is that it
9801              introduces a new type only if there is not an existing type of
9802              the same name already in scope.  For example, given:
9803
9804                struct S {};
9805                void f() { struct S s; }
9806
9807              the `struct S' in the body of `f' is the same `struct S' as in
9808              the global scope; the existing definition is used.  However, if
9809              there were no global declaration, this would introduce a new
9810              local class named `S'.
9811
9812              An exception to this rule applies to the following code:
9813
9814                namespace N { struct S; }
9815
9816              Here, the elaborated-type-specifier names a new type
9817              unconditionally; even if there is already an `S' in the
9818              containing scope this declaration names a new type.
9819              This exception only applies if the elaborated-type-specifier
9820              forms the complete declaration:
9821
9822                [class.name]
9823
9824                A declaration consisting solely of `class-key identifier ;' is
9825                either a redeclaration of the name in the current scope or a
9826                forward declaration of the identifier as a class name.  It
9827                introduces the name into the current scope.
9828
9829              We are in this situation precisely when the next token is a `;'.
9830
9831              An exception to the exception is that a `friend' declaration does
9832              *not* name a new type; i.e., given:
9833
9834                struct S { friend struct T; };
9835
9836              `T' is not a new type in the scope of `S'.
9837
9838              Also, `new struct S' or `sizeof (struct S)' never results in the
9839              definition of a new type; a new type can only be declared in a
9840              declaration context.  */
9841
9842           /* Warn about attributes. They are ignored.  */
9843           if (attributes)
9844             warning ("type attributes are honored only at type definition");
9845
9846           type = xref_tag (tag_type, identifier,
9847                            (is_friend
9848                             || !is_declaration
9849                             || cp_lexer_next_token_is_not (parser->lexer,
9850                                                            CPP_SEMICOLON)),
9851                            parser->num_template_parameter_lists);
9852         }
9853     }
9854   if (tag_type != enum_type)
9855     cp_parser_check_class_key (tag_type, type);
9856
9857   /* A "<" cannot follow an elaborated type specifier.  If that
9858      happens, the user was probably trying to form a template-id.  */
9859   cp_parser_check_for_invalid_template_id (parser, type);
9860
9861   return type;
9862 }
9863
9864 /* Parse an enum-specifier.
9865
9866    enum-specifier:
9867      enum identifier [opt] { enumerator-list [opt] }
9868
9869    Returns an ENUM_TYPE representing the enumeration.  */
9870
9871 static tree
9872 cp_parser_enum_specifier (cp_parser* parser)
9873 {
9874   cp_token *token;
9875   tree identifier = NULL_TREE;
9876   tree type;
9877
9878   /* Look for the `enum' keyword.  */
9879   if (!cp_parser_require_keyword (parser, RID_ENUM, "`enum'"))
9880     return error_mark_node;
9881   /* Peek at the next token.  */
9882   token = cp_lexer_peek_token (parser->lexer);
9883
9884   /* See if it is an identifier.  */
9885   if (token->type == CPP_NAME)
9886     identifier = cp_parser_identifier (parser);
9887
9888   /* Look for the `{'.  */
9889   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
9890     return error_mark_node;
9891
9892   /* At this point, we're going ahead with the enum-specifier, even
9893      if some other problem occurs.  */
9894   cp_parser_commit_to_tentative_parse (parser);
9895
9896   /* Issue an error message if type-definitions are forbidden here.  */
9897   cp_parser_check_type_definition (parser);
9898
9899   /* Create the new type.  */
9900   type = start_enum (identifier ? identifier : make_anon_name ());
9901
9902   /* Peek at the next token.  */
9903   token = cp_lexer_peek_token (parser->lexer);
9904   /* If it's not a `}', then there are some enumerators.  */
9905   if (token->type != CPP_CLOSE_BRACE)
9906     cp_parser_enumerator_list (parser, type);
9907   /* Look for the `}'.  */
9908   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
9909
9910   /* Finish up the enumeration.  */
9911   finish_enum (type);
9912
9913   return type;
9914 }
9915
9916 /* Parse an enumerator-list.  The enumerators all have the indicated
9917    TYPE.
9918
9919    enumerator-list:
9920      enumerator-definition
9921      enumerator-list , enumerator-definition  */
9922
9923 static void
9924 cp_parser_enumerator_list (cp_parser* parser, tree type)
9925 {
9926   while (true)
9927     {
9928       cp_token *token;
9929
9930       /* Parse an enumerator-definition.  */
9931       cp_parser_enumerator_definition (parser, type);
9932       /* Peek at the next token.  */
9933       token = cp_lexer_peek_token (parser->lexer);
9934       /* If it's not a `,', then we've reached the end of the
9935          list.  */
9936       if (token->type != CPP_COMMA)
9937         break;
9938       /* Otherwise, consume the `,' and keep going.  */
9939       cp_lexer_consume_token (parser->lexer);
9940       /* If the next token is a `}', there is a trailing comma.  */
9941       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
9942         {
9943           if (pedantic && !in_system_header)
9944             pedwarn ("comma at end of enumerator list");
9945           break;
9946         }
9947     }
9948 }
9949
9950 /* Parse an enumerator-definition.  The enumerator has the indicated
9951    TYPE.
9952
9953    enumerator-definition:
9954      enumerator
9955      enumerator = constant-expression
9956
9957    enumerator:
9958      identifier  */
9959
9960 static void
9961 cp_parser_enumerator_definition (cp_parser* parser, tree type)
9962 {
9963   cp_token *token;
9964   tree identifier;
9965   tree value;
9966
9967   /* Look for the identifier.  */
9968   identifier = cp_parser_identifier (parser);
9969   if (identifier == error_mark_node)
9970     return;
9971
9972   /* Peek at the next token.  */
9973   token = cp_lexer_peek_token (parser->lexer);
9974   /* If it's an `=', then there's an explicit value.  */
9975   if (token->type == CPP_EQ)
9976     {
9977       /* Consume the `=' token.  */
9978       cp_lexer_consume_token (parser->lexer);
9979       /* Parse the value.  */
9980       value = cp_parser_constant_expression (parser,
9981                                              /*allow_non_constant_p=*/false,
9982                                              NULL);
9983     }
9984   else
9985     value = NULL_TREE;
9986
9987   /* Create the enumerator.  */
9988   build_enumerator (identifier, value, type);
9989 }
9990
9991 /* Parse a namespace-name.
9992
9993    namespace-name:
9994      original-namespace-name
9995      namespace-alias
9996
9997    Returns the NAMESPACE_DECL for the namespace.  */
9998
9999 static tree
10000 cp_parser_namespace_name (cp_parser* parser)
10001 {
10002   tree identifier;
10003   tree namespace_decl;
10004
10005   /* Get the name of the namespace.  */
10006   identifier = cp_parser_identifier (parser);
10007   if (identifier == error_mark_node)
10008     return error_mark_node;
10009
10010   /* Look up the identifier in the currently active scope.  Look only
10011      for namespaces, due to:
10012
10013        [basic.lookup.udir]
10014
10015        When looking up a namespace-name in a using-directive or alias
10016        definition, only namespace names are considered.
10017
10018      And:
10019
10020        [basic.lookup.qual]
10021
10022        During the lookup of a name preceding the :: scope resolution
10023        operator, object, function, and enumerator names are ignored.
10024
10025      (Note that cp_parser_class_or_namespace_name only calls this
10026      function if the token after the name is the scope resolution
10027      operator.)  */
10028   namespace_decl = cp_parser_lookup_name (parser, identifier,
10029                                           /*is_type=*/false,
10030                                           /*is_template=*/false,
10031                                           /*is_namespace=*/true,
10032                                           /*check_dependency=*/true);
10033   /* If it's not a namespace, issue an error.  */
10034   if (namespace_decl == error_mark_node
10035       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
10036     {
10037       cp_parser_error (parser, "expected namespace-name");
10038       namespace_decl = error_mark_node;
10039     }
10040
10041   return namespace_decl;
10042 }
10043
10044 /* Parse a namespace-definition.
10045
10046    namespace-definition:
10047      named-namespace-definition
10048      unnamed-namespace-definition
10049
10050    named-namespace-definition:
10051      original-namespace-definition
10052      extension-namespace-definition
10053
10054    original-namespace-definition:
10055      namespace identifier { namespace-body }
10056
10057    extension-namespace-definition:
10058      namespace original-namespace-name { namespace-body }
10059
10060    unnamed-namespace-definition:
10061      namespace { namespace-body } */
10062
10063 static void
10064 cp_parser_namespace_definition (cp_parser* parser)
10065 {
10066   tree identifier;
10067
10068   /* Look for the `namespace' keyword.  */
10069   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10070
10071   /* Get the name of the namespace.  We do not attempt to distinguish
10072      between an original-namespace-definition and an
10073      extension-namespace-definition at this point.  The semantic
10074      analysis routines are responsible for that.  */
10075   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10076     identifier = cp_parser_identifier (parser);
10077   else
10078     identifier = NULL_TREE;
10079
10080   /* Look for the `{' to start the namespace.  */
10081   cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
10082   /* Start the namespace.  */
10083   push_namespace (identifier);
10084   /* Parse the body of the namespace.  */
10085   cp_parser_namespace_body (parser);
10086   /* Finish the namespace.  */
10087   pop_namespace ();
10088   /* Look for the final `}'.  */
10089   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10090 }
10091
10092 /* Parse a namespace-body.
10093
10094    namespace-body:
10095      declaration-seq [opt]  */
10096
10097 static void
10098 cp_parser_namespace_body (cp_parser* parser)
10099 {
10100   cp_parser_declaration_seq_opt (parser);
10101 }
10102
10103 /* Parse a namespace-alias-definition.
10104
10105    namespace-alias-definition:
10106      namespace identifier = qualified-namespace-specifier ;  */
10107
10108 static void
10109 cp_parser_namespace_alias_definition (cp_parser* parser)
10110 {
10111   tree identifier;
10112   tree namespace_specifier;
10113
10114   /* Look for the `namespace' keyword.  */
10115   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10116   /* Look for the identifier.  */
10117   identifier = cp_parser_identifier (parser);
10118   if (identifier == error_mark_node)
10119     return;
10120   /* Look for the `=' token.  */
10121   cp_parser_require (parser, CPP_EQ, "`='");
10122   /* Look for the qualified-namespace-specifier.  */
10123   namespace_specifier
10124     = cp_parser_qualified_namespace_specifier (parser);
10125   /* Look for the `;' token.  */
10126   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10127
10128   /* Register the alias in the symbol table.  */
10129   do_namespace_alias (identifier, namespace_specifier);
10130 }
10131
10132 /* Parse a qualified-namespace-specifier.
10133
10134    qualified-namespace-specifier:
10135      :: [opt] nested-name-specifier [opt] namespace-name
10136
10137    Returns a NAMESPACE_DECL corresponding to the specified
10138    namespace.  */
10139
10140 static tree
10141 cp_parser_qualified_namespace_specifier (cp_parser* parser)
10142 {
10143   /* Look for the optional `::'.  */
10144   cp_parser_global_scope_opt (parser,
10145                               /*current_scope_valid_p=*/false);
10146
10147   /* Look for the optional nested-name-specifier.  */
10148   cp_parser_nested_name_specifier_opt (parser,
10149                                        /*typename_keyword_p=*/false,
10150                                        /*check_dependency_p=*/true,
10151                                        /*type_p=*/false,
10152                                        /*is_declaration=*/true);
10153
10154   return cp_parser_namespace_name (parser);
10155 }
10156
10157 /* Parse a using-declaration.
10158
10159    using-declaration:
10160      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
10161      using :: unqualified-id ;  */
10162
10163 static void
10164 cp_parser_using_declaration (cp_parser* parser)
10165 {
10166   cp_token *token;
10167   bool typename_p = false;
10168   bool global_scope_p;
10169   tree decl;
10170   tree identifier;
10171   tree scope;
10172   tree qscope;
10173
10174   /* Look for the `using' keyword.  */
10175   cp_parser_require_keyword (parser, RID_USING, "`using'");
10176
10177   /* Peek at the next token.  */
10178   token = cp_lexer_peek_token (parser->lexer);
10179   /* See if it's `typename'.  */
10180   if (token->keyword == RID_TYPENAME)
10181     {
10182       /* Remember that we've seen it.  */
10183       typename_p = true;
10184       /* Consume the `typename' token.  */
10185       cp_lexer_consume_token (parser->lexer);
10186     }
10187
10188   /* Look for the optional global scope qualification.  */
10189   global_scope_p
10190     = (cp_parser_global_scope_opt (parser,
10191                                    /*current_scope_valid_p=*/false)
10192        != NULL_TREE);
10193
10194   /* If we saw `typename', or didn't see `::', then there must be a
10195      nested-name-specifier present.  */
10196   if (typename_p || !global_scope_p)
10197     qscope = cp_parser_nested_name_specifier (parser, typename_p,
10198                                               /*check_dependency_p=*/true,
10199                                               /*type_p=*/false,
10200                                               /*is_declaration=*/true);
10201   /* Otherwise, we could be in either of the two productions.  In that
10202      case, treat the nested-name-specifier as optional.  */
10203   else
10204     qscope = cp_parser_nested_name_specifier_opt (parser,
10205                                                   /*typename_keyword_p=*/false,
10206                                                   /*check_dependency_p=*/true,
10207                                                   /*type_p=*/false,
10208                                                   /*is_declaration=*/true);
10209   if (!qscope)
10210     qscope = global_namespace;
10211
10212   /* Parse the unqualified-id.  */
10213   identifier = cp_parser_unqualified_id (parser,
10214                                          /*template_keyword_p=*/false,
10215                                          /*check_dependency_p=*/true,
10216                                          /*declarator_p=*/true);
10217
10218   /* The function we call to handle a using-declaration is different
10219      depending on what scope we are in.  */
10220   if (identifier == error_mark_node)
10221     ;
10222   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
10223            && TREE_CODE (identifier) != BIT_NOT_EXPR)
10224     /* [namespace.udecl]
10225
10226        A using declaration shall not name a template-id.  */
10227     error ("a template-id may not appear in a using-declaration");
10228   else
10229     {
10230       scope = current_scope ();
10231       if (scope && TYPE_P (scope))
10232         {
10233           /* Create the USING_DECL.  */
10234           decl = do_class_using_decl (build_nt (SCOPE_REF,
10235                                                 parser->scope,
10236                                                 identifier));
10237           /* Add it to the list of members in this class.  */
10238           finish_member_declaration (decl);
10239         }
10240       else
10241         {
10242           decl = cp_parser_lookup_name_simple (parser, identifier);
10243           if (decl == error_mark_node)
10244             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
10245           else if (scope)
10246             do_local_using_decl (decl, qscope, identifier);
10247           else
10248             do_toplevel_using_decl (decl, qscope, identifier);
10249         }
10250     }
10251
10252   /* Look for the final `;'.  */
10253   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10254 }
10255
10256 /* Parse a using-directive.
10257
10258    using-directive:
10259      using namespace :: [opt] nested-name-specifier [opt]
10260        namespace-name ;  */
10261
10262 static void
10263 cp_parser_using_directive (cp_parser* parser)
10264 {
10265   tree namespace_decl;
10266   tree attribs;
10267
10268   /* Look for the `using' keyword.  */
10269   cp_parser_require_keyword (parser, RID_USING, "`using'");
10270   /* And the `namespace' keyword.  */
10271   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10272   /* Look for the optional `::' operator.  */
10273   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
10274   /* And the optional nested-name-specifier.  */
10275   cp_parser_nested_name_specifier_opt (parser,
10276                                        /*typename_keyword_p=*/false,
10277                                        /*check_dependency_p=*/true,
10278                                        /*type_p=*/false,
10279                                        /*is_declaration=*/true);
10280   /* Get the namespace being used.  */
10281   namespace_decl = cp_parser_namespace_name (parser);
10282   /* And any specified attributes.  */
10283   attribs = cp_parser_attributes_opt (parser);
10284   /* Update the symbol table.  */
10285   parse_using_directive (namespace_decl, attribs);
10286   /* Look for the final `;'.  */
10287   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10288 }
10289
10290 /* Parse an asm-definition.
10291
10292    asm-definition:
10293      asm ( string-literal ) ;
10294
10295    GNU Extension:
10296
10297    asm-definition:
10298      asm volatile [opt] ( string-literal ) ;
10299      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
10300      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10301                           : asm-operand-list [opt] ) ;
10302      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10303                           : asm-operand-list [opt]
10304                           : asm-operand-list [opt] ) ;  */
10305
10306 static void
10307 cp_parser_asm_definition (cp_parser* parser)
10308 {
10309   cp_token *token;
10310   tree string;
10311   tree outputs = NULL_TREE;
10312   tree inputs = NULL_TREE;
10313   tree clobbers = NULL_TREE;
10314   tree asm_stmt;
10315   bool volatile_p = false;
10316   bool extended_p = false;
10317
10318   /* Look for the `asm' keyword.  */
10319   cp_parser_require_keyword (parser, RID_ASM, "`asm'");
10320   /* See if the next token is `volatile'.  */
10321   if (cp_parser_allow_gnu_extensions_p (parser)
10322       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
10323     {
10324       /* Remember that we saw the `volatile' keyword.  */
10325       volatile_p = true;
10326       /* Consume the token.  */
10327       cp_lexer_consume_token (parser->lexer);
10328     }
10329   /* Look for the opening `('.  */
10330   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
10331   /* Look for the string.  */
10332   c_lex_string_translate = 0;
10333   token = cp_parser_require (parser, CPP_STRING, "asm body");
10334   if (!token)
10335     goto finish;
10336   string = token->value;
10337   /* If we're allowing GNU extensions, check for the extended assembly
10338      syntax.  Unfortunately, the `:' tokens need not be separated by
10339      a space in C, and so, for compatibility, we tolerate that here
10340      too.  Doing that means that we have to treat the `::' operator as
10341      two `:' tokens.  */
10342   if (cp_parser_allow_gnu_extensions_p (parser)
10343       && at_function_scope_p ()
10344       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
10345           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
10346     {
10347       bool inputs_p = false;
10348       bool clobbers_p = false;
10349
10350       /* The extended syntax was used.  */
10351       extended_p = true;
10352
10353       /* Look for outputs.  */
10354       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10355         {
10356           /* Consume the `:'.  */
10357           cp_lexer_consume_token (parser->lexer);
10358           /* Parse the output-operands.  */
10359           if (cp_lexer_next_token_is_not (parser->lexer,
10360                                           CPP_COLON)
10361               && cp_lexer_next_token_is_not (parser->lexer,
10362                                              CPP_SCOPE)
10363               && cp_lexer_next_token_is_not (parser->lexer,
10364                                              CPP_CLOSE_PAREN))
10365             outputs = cp_parser_asm_operand_list (parser);
10366         }
10367       /* If the next token is `::', there are no outputs, and the
10368          next token is the beginning of the inputs.  */
10369       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10370         /* The inputs are coming next.  */
10371         inputs_p = true;
10372
10373       /* Look for inputs.  */
10374       if (inputs_p
10375           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10376         {
10377           /* Consume the `:' or `::'.  */
10378           cp_lexer_consume_token (parser->lexer);
10379           /* Parse the output-operands.  */
10380           if (cp_lexer_next_token_is_not (parser->lexer,
10381                                           CPP_COLON)
10382               && cp_lexer_next_token_is_not (parser->lexer,
10383                                              CPP_CLOSE_PAREN))
10384             inputs = cp_parser_asm_operand_list (parser);
10385         }
10386       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10387         /* The clobbers are coming next.  */
10388         clobbers_p = true;
10389
10390       /* Look for clobbers.  */
10391       if (clobbers_p
10392           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10393         {
10394           /* Consume the `:' or `::'.  */
10395           cp_lexer_consume_token (parser->lexer);
10396           /* Parse the clobbers.  */
10397           if (cp_lexer_next_token_is_not (parser->lexer,
10398                                           CPP_CLOSE_PAREN))
10399             clobbers = cp_parser_asm_clobber_list (parser);
10400         }
10401     }
10402   /* Look for the closing `)'.  */
10403   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
10404     cp_parser_skip_to_closing_parenthesis (parser, true, false,
10405                                            /*consume_paren=*/true);
10406   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10407
10408   /* Create the ASM_EXPR.  */
10409   if (at_function_scope_p ())
10410     {
10411       asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
10412                                   inputs, clobbers);
10413       /* If the extended syntax was not used, mark the ASM_EXPR.  */
10414       if (!extended_p)
10415         ASM_INPUT_P (asm_stmt) = 1;
10416     }
10417   else
10418     assemble_asm (string);
10419
10420  finish:
10421   c_lex_string_translate = 1;
10422 }
10423
10424 /* Declarators [gram.dcl.decl] */
10425
10426 /* Parse an init-declarator.
10427
10428    init-declarator:
10429      declarator initializer [opt]
10430
10431    GNU Extension:
10432
10433    init-declarator:
10434      declarator asm-specification [opt] attributes [opt] initializer [opt]
10435
10436    function-definition:
10437      decl-specifier-seq [opt] declarator ctor-initializer [opt]
10438        function-body
10439      decl-specifier-seq [opt] declarator function-try-block
10440
10441    GNU Extension:
10442
10443    function-definition:
10444      __extension__ function-definition
10445
10446    The DECL_SPECIFIERS and PREFIX_ATTRIBUTES apply to this declarator.
10447    Returns a representation of the entity declared.  If MEMBER_P is TRUE,
10448    then this declarator appears in a class scope.  The new DECL created
10449    by this declarator is returned.
10450
10451    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
10452    for a function-definition here as well.  If the declarator is a
10453    declarator for a function-definition, *FUNCTION_DEFINITION_P will
10454    be TRUE upon return.  By that point, the function-definition will
10455    have been completely parsed.
10456
10457    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
10458    is FALSE.  */
10459
10460 static tree
10461 cp_parser_init_declarator (cp_parser* parser,
10462                            cp_decl_specifier_seq *decl_specifiers,
10463                            bool function_definition_allowed_p,
10464                            bool member_p,
10465                            int declares_class_or_enum,
10466                            bool* function_definition_p)
10467 {
10468   cp_token *token;
10469   cp_declarator *declarator;
10470   tree prefix_attributes;
10471   tree attributes;
10472   tree asm_specification;
10473   tree initializer;
10474   tree decl = NULL_TREE;
10475   tree scope;
10476   bool is_initialized;
10477   bool is_parenthesized_init;
10478   bool is_non_constant_init;
10479   int ctor_dtor_or_conv_p;
10480   bool friend_p;
10481   bool pop_p = false;
10482
10483   /* Gather the attributes that were provided with the
10484      decl-specifiers.  */
10485   prefix_attributes = decl_specifiers->attributes;
10486
10487   /* Assume that this is not the declarator for a function
10488      definition.  */
10489   if (function_definition_p)
10490     *function_definition_p = false;
10491
10492   /* Defer access checks while parsing the declarator; we cannot know
10493      what names are accessible until we know what is being
10494      declared.  */
10495   resume_deferring_access_checks ();
10496
10497   /* Parse the declarator.  */
10498   declarator
10499     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10500                             &ctor_dtor_or_conv_p,
10501                             /*parenthesized_p=*/NULL);
10502   /* Gather up the deferred checks.  */
10503   stop_deferring_access_checks ();
10504
10505   /* If the DECLARATOR was erroneous, there's no need to go
10506      further.  */
10507   if (declarator == cp_error_declarator)
10508     return error_mark_node;
10509
10510   cp_parser_check_for_definition_in_return_type (declarator,
10511                                                  declares_class_or_enum);
10512
10513   /* Figure out what scope the entity declared by the DECLARATOR is
10514      located in.  `grokdeclarator' sometimes changes the scope, so
10515      we compute it now.  */
10516   scope = get_scope_of_declarator (declarator);
10517
10518   /* If we're allowing GNU extensions, look for an asm-specification
10519      and attributes.  */
10520   if (cp_parser_allow_gnu_extensions_p (parser))
10521     {
10522       /* Look for an asm-specification.  */
10523       asm_specification = cp_parser_asm_specification_opt (parser);
10524       /* And attributes.  */
10525       attributes = cp_parser_attributes_opt (parser);
10526     }
10527   else
10528     {
10529       asm_specification = NULL_TREE;
10530       attributes = NULL_TREE;
10531     }
10532
10533   /* Peek at the next token.  */
10534   token = cp_lexer_peek_token (parser->lexer);
10535   /* Check to see if the token indicates the start of a
10536      function-definition.  */
10537   if (cp_parser_token_starts_function_definition_p (token))
10538     {
10539       if (!function_definition_allowed_p)
10540         {
10541           /* If a function-definition should not appear here, issue an
10542              error message.  */
10543           cp_parser_error (parser,
10544                            "a function-definition is not allowed here");
10545           return error_mark_node;
10546         }
10547       else
10548         {
10549           /* Neither attributes nor an asm-specification are allowed
10550              on a function-definition.  */
10551           if (asm_specification)
10552             error ("an asm-specification is not allowed on a function-definition");
10553           if (attributes)
10554             error ("attributes are not allowed on a function-definition");
10555           /* This is a function-definition.  */
10556           *function_definition_p = true;
10557
10558           /* Parse the function definition.  */
10559           if (member_p)
10560             decl = cp_parser_save_member_function_body (parser,
10561                                                         decl_specifiers,
10562                                                         declarator,
10563                                                         prefix_attributes);
10564           else
10565             decl
10566               = (cp_parser_function_definition_from_specifiers_and_declarator
10567                  (parser, decl_specifiers, prefix_attributes, declarator));
10568
10569           return decl;
10570         }
10571     }
10572
10573   /* [dcl.dcl]
10574
10575      Only in function declarations for constructors, destructors, and
10576      type conversions can the decl-specifier-seq be omitted.
10577
10578      We explicitly postpone this check past the point where we handle
10579      function-definitions because we tolerate function-definitions
10580      that are missing their return types in some modes.  */
10581   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
10582     {
10583       cp_parser_error (parser,
10584                        "expected constructor, destructor, or type conversion");
10585       return error_mark_node;
10586     }
10587
10588   /* An `=' or an `(' indicates an initializer.  */
10589   is_initialized = (token->type == CPP_EQ
10590                      || token->type == CPP_OPEN_PAREN);
10591   /* If the init-declarator isn't initialized and isn't followed by a
10592      `,' or `;', it's not a valid init-declarator.  */
10593   if (!is_initialized
10594       && token->type != CPP_COMMA
10595       && token->type != CPP_SEMICOLON)
10596     {
10597       cp_parser_error (parser, "expected init-declarator");
10598       return error_mark_node;
10599     }
10600
10601   /* Because start_decl has side-effects, we should only call it if we
10602      know we're going ahead.  By this point, we know that we cannot
10603      possibly be looking at any other construct.  */
10604   cp_parser_commit_to_tentative_parse (parser);
10605
10606   /* If the decl specifiers were bad, issue an error now that we're
10607      sure this was intended to be a declarator.  Then continue
10608      declaring the variable(s), as int, to try to cut down on further
10609      errors.  */
10610   if (decl_specifiers->any_specifiers_p
10611       && decl_specifiers->type == error_mark_node)
10612     {
10613       cp_parser_error (parser, "invalid type in declaration");
10614       decl_specifiers->type = integer_type_node;
10615     }
10616
10617   /* Check to see whether or not this declaration is a friend.  */
10618   friend_p = cp_parser_friend_p (decl_specifiers);
10619
10620   /* Check that the number of template-parameter-lists is OK.  */
10621   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
10622     return error_mark_node;
10623
10624   /* Enter the newly declared entry in the symbol table.  If we're
10625      processing a declaration in a class-specifier, we wait until
10626      after processing the initializer.  */
10627   if (!member_p)
10628     {
10629       if (parser->in_unbraced_linkage_specification_p)
10630         {
10631           decl_specifiers->storage_class = sc_extern;
10632           have_extern_spec = false;
10633         }
10634       decl = start_decl (declarator, decl_specifiers,
10635                          is_initialized, attributes, prefix_attributes,
10636                          &pop_p);
10637     }
10638   else if (scope)
10639     /* Enter the SCOPE.  That way unqualified names appearing in the
10640        initializer will be looked up in SCOPE.  */
10641     pop_p = push_scope (scope);
10642
10643   /* Perform deferred access control checks, now that we know in which
10644      SCOPE the declared entity resides.  */
10645   if (!member_p && decl)
10646     {
10647       tree saved_current_function_decl = NULL_TREE;
10648
10649       /* If the entity being declared is a function, pretend that we
10650          are in its scope.  If it is a `friend', it may have access to
10651          things that would not otherwise be accessible.  */
10652       if (TREE_CODE (decl) == FUNCTION_DECL)
10653         {
10654           saved_current_function_decl = current_function_decl;
10655           current_function_decl = decl;
10656         }
10657
10658       /* Perform the access control checks for the declarator and the
10659          the decl-specifiers.  */
10660       perform_deferred_access_checks ();
10661
10662       /* Restore the saved value.  */
10663       if (TREE_CODE (decl) == FUNCTION_DECL)
10664         current_function_decl = saved_current_function_decl;
10665     }
10666
10667   /* Parse the initializer.  */
10668   if (is_initialized)
10669     initializer = cp_parser_initializer (parser,
10670                                          &is_parenthesized_init,
10671                                          &is_non_constant_init);
10672   else
10673     {
10674       initializer = NULL_TREE;
10675       is_parenthesized_init = false;
10676       is_non_constant_init = true;
10677     }
10678
10679   /* The old parser allows attributes to appear after a parenthesized
10680      initializer.  Mark Mitchell proposed removing this functionality
10681      on the GCC mailing lists on 2002-08-13.  This parser accepts the
10682      attributes -- but ignores them.  */
10683   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
10684     if (cp_parser_attributes_opt (parser))
10685       warning ("attributes after parenthesized initializer ignored");
10686
10687   /* For an in-class declaration, use `grokfield' to create the
10688      declaration.  */
10689   if (member_p)
10690     {
10691       if (pop_p)
10692         pop_scope (scope);
10693       decl = grokfield (declarator, decl_specifiers,
10694                         initializer, /*asmspec=*/NULL_TREE,
10695                         /*attributes=*/NULL_TREE);
10696       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
10697         cp_parser_save_default_args (parser, decl);
10698     }
10699
10700   /* Finish processing the declaration.  But, skip friend
10701      declarations.  */
10702   if (!friend_p && decl && decl != error_mark_node)
10703     {
10704       cp_finish_decl (decl,
10705                       initializer,
10706                       asm_specification,
10707                       /* If the initializer is in parentheses, then this is
10708                          a direct-initialization, which means that an
10709                          `explicit' constructor is OK.  Otherwise, an
10710                          `explicit' constructor cannot be used.  */
10711                       ((is_parenthesized_init || !is_initialized)
10712                      ? 0 : LOOKUP_ONLYCONVERTING));
10713       if (pop_p)
10714         pop_scope (DECL_CONTEXT (decl));
10715     }
10716
10717   /* Remember whether or not variables were initialized by
10718      constant-expressions.  */
10719   if (decl && TREE_CODE (decl) == VAR_DECL
10720       && is_initialized && !is_non_constant_init)
10721     DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
10722
10723   return decl;
10724 }
10725
10726 /* Parse a declarator.
10727
10728    declarator:
10729      direct-declarator
10730      ptr-operator declarator
10731
10732    abstract-declarator:
10733      ptr-operator abstract-declarator [opt]
10734      direct-abstract-declarator
10735
10736    GNU Extensions:
10737
10738    declarator:
10739      attributes [opt] direct-declarator
10740      attributes [opt] ptr-operator declarator
10741
10742    abstract-declarator:
10743      attributes [opt] ptr-operator abstract-declarator [opt]
10744      attributes [opt] direct-abstract-declarator
10745
10746    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
10747    detect constructor, destructor or conversion operators. It is set
10748    to -1 if the declarator is a name, and +1 if it is a
10749    function. Otherwise it is set to zero. Usually you just want to
10750    test for >0, but internally the negative value is used.
10751
10752    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
10753    a decl-specifier-seq unless it declares a constructor, destructor,
10754    or conversion.  It might seem that we could check this condition in
10755    semantic analysis, rather than parsing, but that makes it difficult
10756    to handle something like `f()'.  We want to notice that there are
10757    no decl-specifiers, and therefore realize that this is an
10758    expression, not a declaration.)
10759
10760    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
10761    the declarator is a direct-declarator of the form "(...)".  */
10762
10763 static cp_declarator *
10764 cp_parser_declarator (cp_parser* parser,
10765                       cp_parser_declarator_kind dcl_kind,
10766                       int* ctor_dtor_or_conv_p,
10767                       bool* parenthesized_p)
10768 {
10769   cp_token *token;
10770   cp_declarator *declarator;
10771   enum tree_code code;
10772   cp_cv_quals cv_quals;
10773   tree class_type;
10774   tree attributes = NULL_TREE;
10775
10776   /* Assume this is not a constructor, destructor, or type-conversion
10777      operator.  */
10778   if (ctor_dtor_or_conv_p)
10779     *ctor_dtor_or_conv_p = 0;
10780
10781   if (cp_parser_allow_gnu_extensions_p (parser))
10782     attributes = cp_parser_attributes_opt (parser);
10783
10784   /* Peek at the next token.  */
10785   token = cp_lexer_peek_token (parser->lexer);
10786
10787   /* Check for the ptr-operator production.  */
10788   cp_parser_parse_tentatively (parser);
10789   /* Parse the ptr-operator.  */
10790   code = cp_parser_ptr_operator (parser,
10791                                  &class_type,
10792                                  &cv_quals);
10793   /* If that worked, then we have a ptr-operator.  */
10794   if (cp_parser_parse_definitely (parser))
10795     {
10796       /* If a ptr-operator was found, then this declarator was not
10797          parenthesized.  */
10798       if (parenthesized_p)
10799         *parenthesized_p = true;
10800       /* The dependent declarator is optional if we are parsing an
10801          abstract-declarator.  */
10802       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
10803         cp_parser_parse_tentatively (parser);
10804
10805       /* Parse the dependent declarator.  */
10806       declarator = cp_parser_declarator (parser, dcl_kind,
10807                                          /*ctor_dtor_or_conv_p=*/NULL,
10808                                          /*parenthesized_p=*/NULL);
10809
10810       /* If we are parsing an abstract-declarator, we must handle the
10811          case where the dependent declarator is absent.  */
10812       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
10813           && !cp_parser_parse_definitely (parser))
10814         declarator = NULL;
10815
10816       /* Build the representation of the ptr-operator.  */
10817       if (class_type)
10818         declarator = make_ptrmem_declarator (cv_quals,
10819                                              class_type,
10820                                              declarator);
10821       else if (code == INDIRECT_REF)
10822         declarator = make_pointer_declarator (cv_quals, declarator);
10823       else
10824         declarator = make_reference_declarator (cv_quals, declarator);
10825     }
10826   /* Everything else is a direct-declarator.  */
10827   else
10828     {
10829       if (parenthesized_p)
10830         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
10831                                                    CPP_OPEN_PAREN);
10832       declarator = cp_parser_direct_declarator (parser, dcl_kind,
10833                                                 ctor_dtor_or_conv_p);
10834     }
10835
10836   if (attributes && declarator != cp_error_declarator)
10837     declarator->attributes = attributes;
10838
10839   return declarator;
10840 }
10841
10842 /* Parse a direct-declarator or direct-abstract-declarator.
10843
10844    direct-declarator:
10845      declarator-id
10846      direct-declarator ( parameter-declaration-clause )
10847        cv-qualifier-seq [opt]
10848        exception-specification [opt]
10849      direct-declarator [ constant-expression [opt] ]
10850      ( declarator )
10851
10852    direct-abstract-declarator:
10853      direct-abstract-declarator [opt]
10854        ( parameter-declaration-clause )
10855        cv-qualifier-seq [opt]
10856        exception-specification [opt]
10857      direct-abstract-declarator [opt] [ constant-expression [opt] ]
10858      ( abstract-declarator )
10859
10860    Returns a representation of the declarator.  DCL_KIND is
10861    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
10862    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
10863    we are parsing a direct-declarator.  It is
10864    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
10865    of ambiguity we prefer an abstract declarator, as per
10866    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P is as for
10867    cp_parser_declarator.  */
10868
10869 static cp_declarator *
10870 cp_parser_direct_declarator (cp_parser* parser,
10871                              cp_parser_declarator_kind dcl_kind,
10872                              int* ctor_dtor_or_conv_p)
10873 {
10874   cp_token *token;
10875   cp_declarator *declarator = NULL;
10876   tree scope = NULL_TREE;
10877   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
10878   bool saved_in_declarator_p = parser->in_declarator_p;
10879   bool first = true;
10880   bool pop_p = false;
10881
10882   while (true)
10883     {
10884       /* Peek at the next token.  */
10885       token = cp_lexer_peek_token (parser->lexer);
10886       if (token->type == CPP_OPEN_PAREN)
10887         {
10888           /* This is either a parameter-declaration-clause, or a
10889              parenthesized declarator. When we know we are parsing a
10890              named declarator, it must be a parenthesized declarator
10891              if FIRST is true. For instance, `(int)' is a
10892              parameter-declaration-clause, with an omitted
10893              direct-abstract-declarator. But `((*))', is a
10894              parenthesized abstract declarator. Finally, when T is a
10895              template parameter `(T)' is a
10896              parameter-declaration-clause, and not a parenthesized
10897              named declarator.
10898
10899              We first try and parse a parameter-declaration-clause,
10900              and then try a nested declarator (if FIRST is true).
10901
10902              It is not an error for it not to be a
10903              parameter-declaration-clause, even when FIRST is
10904              false. Consider,
10905
10906                int i (int);
10907                int i (3);
10908
10909              The first is the declaration of a function while the
10910              second is a the definition of a variable, including its
10911              initializer.
10912
10913              Having seen only the parenthesis, we cannot know which of
10914              these two alternatives should be selected.  Even more
10915              complex are examples like:
10916
10917                int i (int (a));
10918                int i (int (3));
10919
10920              The former is a function-declaration; the latter is a
10921              variable initialization.
10922
10923              Thus again, we try a parameter-declaration-clause, and if
10924              that fails, we back out and return.  */
10925
10926           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
10927             {
10928               cp_parameter_declarator *params;
10929               unsigned saved_num_template_parameter_lists;
10930
10931               cp_parser_parse_tentatively (parser);
10932
10933               /* Consume the `('.  */
10934               cp_lexer_consume_token (parser->lexer);
10935               if (first)
10936                 {
10937                   /* If this is going to be an abstract declarator, we're
10938                      in a declarator and we can't have default args.  */
10939                   parser->default_arg_ok_p = false;
10940                   parser->in_declarator_p = true;
10941                 }
10942
10943               /* Inside the function parameter list, surrounding
10944                  template-parameter-lists do not apply.  */
10945               saved_num_template_parameter_lists
10946                 = parser->num_template_parameter_lists;
10947               parser->num_template_parameter_lists = 0;
10948
10949               /* Parse the parameter-declaration-clause.  */
10950               params = cp_parser_parameter_declaration_clause (parser);
10951
10952               parser->num_template_parameter_lists
10953                 = saved_num_template_parameter_lists;
10954
10955               /* If all went well, parse the cv-qualifier-seq and the
10956                  exception-specification.  */
10957               if (cp_parser_parse_definitely (parser))
10958                 {
10959                   cp_cv_quals cv_quals;
10960                   tree exception_specification;
10961
10962                   if (ctor_dtor_or_conv_p)
10963                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
10964                   first = false;
10965                   /* Consume the `)'.  */
10966                   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
10967
10968                   /* Parse the cv-qualifier-seq.  */
10969                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
10970                   /* And the exception-specification.  */
10971                   exception_specification
10972                     = cp_parser_exception_specification_opt (parser);
10973
10974                   /* Create the function-declarator.  */
10975                   declarator = make_call_declarator (declarator,
10976                                                      params,
10977                                                      cv_quals,
10978                                                      exception_specification);
10979                   /* Any subsequent parameter lists are to do with
10980                      return type, so are not those of the declared
10981                      function.  */
10982                   parser->default_arg_ok_p = false;
10983
10984                   /* Repeat the main loop.  */
10985                   continue;
10986                 }
10987             }
10988
10989           /* If this is the first, we can try a parenthesized
10990              declarator.  */
10991           if (first)
10992             {
10993               bool saved_in_type_id_in_expr_p;
10994
10995               parser->default_arg_ok_p = saved_default_arg_ok_p;
10996               parser->in_declarator_p = saved_in_declarator_p;
10997
10998               /* Consume the `('.  */
10999               cp_lexer_consume_token (parser->lexer);
11000               /* Parse the nested declarator.  */
11001               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
11002               parser->in_type_id_in_expr_p = true;
11003               declarator
11004                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
11005                                         /*parenthesized_p=*/NULL);
11006               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
11007               first = false;
11008               /* Expect a `)'.  */
11009               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11010                 declarator = cp_error_declarator;
11011               if (declarator == cp_error_declarator)
11012                 break;
11013
11014               goto handle_declarator;
11015             }
11016           /* Otherwise, we must be done.  */
11017           else
11018             break;
11019         }
11020       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11021                && token->type == CPP_OPEN_SQUARE)
11022         {
11023           /* Parse an array-declarator.  */
11024           tree bounds;
11025
11026           if (ctor_dtor_or_conv_p)
11027             *ctor_dtor_or_conv_p = 0;
11028
11029           first = false;
11030           parser->default_arg_ok_p = false;
11031           parser->in_declarator_p = true;
11032           /* Consume the `['.  */
11033           cp_lexer_consume_token (parser->lexer);
11034           /* Peek at the next token.  */
11035           token = cp_lexer_peek_token (parser->lexer);
11036           /* If the next token is `]', then there is no
11037              constant-expression.  */
11038           if (token->type != CPP_CLOSE_SQUARE)
11039             {
11040               bool non_constant_p;
11041
11042               bounds
11043                 = cp_parser_constant_expression (parser,
11044                                                  /*allow_non_constant=*/true,
11045                                                  &non_constant_p);
11046               if (!non_constant_p)
11047                 bounds = fold_non_dependent_expr (bounds);
11048             }
11049           else
11050             bounds = NULL_TREE;
11051           /* Look for the closing `]'.  */
11052           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
11053             {
11054               declarator = cp_error_declarator;
11055               break;
11056             }
11057
11058           declarator = make_array_declarator (declarator, bounds);
11059         }
11060       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
11061         {
11062           tree id;
11063
11064           /* Parse a declarator-id */
11065           if (dcl_kind == CP_PARSER_DECLARATOR_EITHER)
11066             cp_parser_parse_tentatively (parser);
11067           id = cp_parser_declarator_id (parser);
11068           if (dcl_kind == CP_PARSER_DECLARATOR_EITHER)
11069             {
11070               if (!cp_parser_parse_definitely (parser))
11071                 id = error_mark_node;
11072               else if (TREE_CODE (id) != IDENTIFIER_NODE)
11073                 {
11074                   cp_parser_error (parser, "expected unqualified-id");
11075                   id = error_mark_node;
11076                 }
11077             }
11078
11079           if (id == error_mark_node)
11080             {
11081               declarator = cp_error_declarator;
11082               break;
11083             }
11084
11085           if (TREE_CODE (id) == SCOPE_REF && !current_scope ())
11086             {
11087               tree scope = TREE_OPERAND (id, 0);
11088
11089               /* In the declaration of a member of a template class
11090                  outside of the class itself, the SCOPE will sometimes
11091                  be a TYPENAME_TYPE.  For example, given:
11092
11093                  template <typename T>
11094                  int S<T>::R::i = 3;
11095
11096                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
11097                  this context, we must resolve S<T>::R to an ordinary
11098                  type, rather than a typename type.
11099
11100                  The reason we normally avoid resolving TYPENAME_TYPEs
11101                  is that a specialization of `S' might render
11102                  `S<T>::R' not a type.  However, if `S' is
11103                  specialized, then this `i' will not be used, so there
11104                  is no harm in resolving the types here.  */
11105               if (TREE_CODE (scope) == TYPENAME_TYPE)
11106                 {
11107                   tree type;
11108
11109                   /* Resolve the TYPENAME_TYPE.  */
11110                   type = resolve_typename_type (scope,
11111                                                  /*only_current_p=*/false);
11112                   /* If that failed, the declarator is invalid.  */
11113                   if (type == error_mark_node)
11114                     error ("`%T::%D' is not a type",
11115                            TYPE_CONTEXT (scope),
11116                            TYPE_IDENTIFIER (scope));
11117                   /* Build a new DECLARATOR.  */
11118                   id = build_nt (SCOPE_REF, type, TREE_OPERAND (id, 1));
11119                 }
11120             }
11121
11122           declarator = make_id_declarator (id);
11123           if (id)
11124             {
11125               tree class_type;
11126               tree unqualified_name;
11127
11128               if (TREE_CODE (id) == SCOPE_REF
11129                   && CLASS_TYPE_P (TREE_OPERAND (id, 0)))
11130                 {
11131                   class_type = TREE_OPERAND (id, 0);
11132                   unqualified_name = TREE_OPERAND (id, 1);
11133                 }
11134               else
11135                 {
11136                   class_type = current_class_type;
11137                   unqualified_name = id;
11138                 }
11139
11140               if (class_type)
11141                 {
11142                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
11143                     declarator->u.id.sfk = sfk_destructor;
11144                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
11145                     declarator->u.id.sfk = sfk_conversion;
11146                   else if (constructor_name_p (unqualified_name,
11147                                                class_type)
11148                            || (TREE_CODE (unqualified_name) == TYPE_DECL
11149                                && same_type_p (TREE_TYPE (unqualified_name),
11150                                                class_type)))
11151                     declarator->u.id.sfk = sfk_constructor;
11152
11153                   if (ctor_dtor_or_conv_p && declarator->u.id.sfk != sfk_none)
11154                     *ctor_dtor_or_conv_p = -1;
11155                   if (TREE_CODE (id) == SCOPE_REF
11156                       && TREE_CODE (unqualified_name) == TYPE_DECL
11157                       && CLASSTYPE_USE_TEMPLATE (TREE_TYPE (unqualified_name)))
11158                     {
11159                       error ("invalid use of constructor as a template");
11160                       inform ("use `%T::%D' instead of `%T::%T' to name the "
11161                               "constructor in a qualified name", class_type,
11162                               DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
11163                               class_type, class_type);
11164                     }
11165                 }
11166             }
11167
11168         handle_declarator:;
11169           scope = get_scope_of_declarator (declarator);
11170           if (scope)
11171             /* Any names that appear after the declarator-id for a
11172                member are looked up in the containing scope.  */
11173             pop_p = push_scope (scope);
11174           parser->in_declarator_p = true;
11175           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
11176               || (declarator && declarator->kind == cdk_id))
11177             /* Default args are only allowed on function
11178                declarations.  */
11179             parser->default_arg_ok_p = saved_default_arg_ok_p;
11180           else
11181             parser->default_arg_ok_p = false;
11182
11183           first = false;
11184         }
11185       /* We're done.  */
11186       else
11187         break;
11188     }
11189
11190   /* For an abstract declarator, we might wind up with nothing at this
11191      point.  That's an error; the declarator is not optional.  */
11192   if (!declarator)
11193     cp_parser_error (parser, "expected declarator");
11194
11195   /* If we entered a scope, we must exit it now.  */
11196   if (pop_p)
11197     pop_scope (scope);
11198
11199   parser->default_arg_ok_p = saved_default_arg_ok_p;
11200   parser->in_declarator_p = saved_in_declarator_p;
11201
11202   return declarator;
11203 }
11204
11205 /* Parse a ptr-operator.
11206
11207    ptr-operator:
11208      * cv-qualifier-seq [opt]
11209      &
11210      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
11211
11212    GNU Extension:
11213
11214    ptr-operator:
11215      & cv-qualifier-seq [opt]
11216
11217    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
11218    Returns ADDR_EXPR if a reference was used.  In the case of a
11219    pointer-to-member, *TYPE is filled in with the TYPE containing the
11220    member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
11221    TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
11222    ERROR_MARK if an error occurred.  */
11223
11224 static enum tree_code
11225 cp_parser_ptr_operator (cp_parser* parser,
11226                         tree* type,
11227                         cp_cv_quals *cv_quals)
11228 {
11229   enum tree_code code = ERROR_MARK;
11230   cp_token *token;
11231
11232   /* Assume that it's not a pointer-to-member.  */
11233   *type = NULL_TREE;
11234   /* And that there are no cv-qualifiers.  */
11235   *cv_quals = TYPE_UNQUALIFIED;
11236
11237   /* Peek at the next token.  */
11238   token = cp_lexer_peek_token (parser->lexer);
11239   /* If it's a `*' or `&' we have a pointer or reference.  */
11240   if (token->type == CPP_MULT || token->type == CPP_AND)
11241     {
11242       /* Remember which ptr-operator we were processing.  */
11243       code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
11244
11245       /* Consume the `*' or `&'.  */
11246       cp_lexer_consume_token (parser->lexer);
11247
11248       /* A `*' can be followed by a cv-qualifier-seq, and so can a
11249          `&', if we are allowing GNU extensions.  (The only qualifier
11250          that can legally appear after `&' is `restrict', but that is
11251          enforced during semantic analysis.  */
11252       if (code == INDIRECT_REF
11253           || cp_parser_allow_gnu_extensions_p (parser))
11254         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11255     }
11256   else
11257     {
11258       /* Try the pointer-to-member case.  */
11259       cp_parser_parse_tentatively (parser);
11260       /* Look for the optional `::' operator.  */
11261       cp_parser_global_scope_opt (parser,
11262                                   /*current_scope_valid_p=*/false);
11263       /* Look for the nested-name specifier.  */
11264       cp_parser_nested_name_specifier (parser,
11265                                        /*typename_keyword_p=*/false,
11266                                        /*check_dependency_p=*/true,
11267                                        /*type_p=*/false,
11268                                        /*is_declaration=*/false);
11269       /* If we found it, and the next token is a `*', then we are
11270          indeed looking at a pointer-to-member operator.  */
11271       if (!cp_parser_error_occurred (parser)
11272           && cp_parser_require (parser, CPP_MULT, "`*'"))
11273         {
11274           /* The type of which the member is a member is given by the
11275              current SCOPE.  */
11276           *type = parser->scope;
11277           /* The next name will not be qualified.  */
11278           parser->scope = NULL_TREE;
11279           parser->qualifying_scope = NULL_TREE;
11280           parser->object_scope = NULL_TREE;
11281           /* Indicate that the `*' operator was used.  */
11282           code = INDIRECT_REF;
11283           /* Look for the optional cv-qualifier-seq.  */
11284           *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11285         }
11286       /* If that didn't work we don't have a ptr-operator.  */
11287       if (!cp_parser_parse_definitely (parser))
11288         cp_parser_error (parser, "expected ptr-operator");
11289     }
11290
11291   return code;
11292 }
11293
11294 /* Parse an (optional) cv-qualifier-seq.
11295
11296    cv-qualifier-seq:
11297      cv-qualifier cv-qualifier-seq [opt]
11298
11299    cv-qualifier:
11300      const
11301      volatile
11302
11303    GNU Extension:
11304
11305    cv-qualifier:
11306      __restrict__
11307
11308    Returns a bitmask representing the cv-qualifiers.  */
11309
11310 static cp_cv_quals
11311 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
11312 {
11313   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
11314
11315   while (true)
11316     {
11317       cp_token *token;
11318       cp_cv_quals cv_qualifier;
11319
11320       /* Peek at the next token.  */
11321       token = cp_lexer_peek_token (parser->lexer);
11322       /* See if it's a cv-qualifier.  */
11323       switch (token->keyword)
11324         {
11325         case RID_CONST:
11326           cv_qualifier = TYPE_QUAL_CONST;
11327           break;
11328
11329         case RID_VOLATILE:
11330           cv_qualifier = TYPE_QUAL_VOLATILE;
11331           break;
11332
11333         case RID_RESTRICT:
11334           cv_qualifier = TYPE_QUAL_RESTRICT;
11335           break;
11336
11337         default:
11338           cv_qualifier = TYPE_UNQUALIFIED;
11339           break;
11340         }
11341
11342       if (!cv_qualifier)
11343         break;
11344
11345       if (cv_quals & cv_qualifier)
11346         {
11347           error ("duplicate cv-qualifier");
11348           cp_lexer_purge_token (parser->lexer);
11349         }
11350       else
11351         {
11352           cp_lexer_consume_token (parser->lexer);
11353           cv_quals |= cv_qualifier;
11354         }
11355     }
11356
11357   return cv_quals;
11358 }
11359
11360 /* Parse a declarator-id.
11361
11362    declarator-id:
11363      id-expression
11364      :: [opt] nested-name-specifier [opt] type-name
11365
11366    In the `id-expression' case, the value returned is as for
11367    cp_parser_id_expression if the id-expression was an unqualified-id.
11368    If the id-expression was a qualified-id, then a SCOPE_REF is
11369    returned.  The first operand is the scope (either a NAMESPACE_DECL
11370    or TREE_TYPE), but the second is still just a representation of an
11371    unqualified-id.  */
11372
11373 static tree
11374 cp_parser_declarator_id (cp_parser* parser)
11375 {
11376   tree id_expression;
11377
11378   /* The expression must be an id-expression.  Assume that qualified
11379      names are the names of types so that:
11380
11381        template <class T>
11382        int S<T>::R::i = 3;
11383
11384      will work; we must treat `S<T>::R' as the name of a type.
11385      Similarly, assume that qualified names are templates, where
11386      required, so that:
11387
11388        template <class T>
11389        int S<T>::R<T>::i = 3;
11390
11391      will work, too.  */
11392   id_expression = cp_parser_id_expression (parser,
11393                                            /*template_keyword_p=*/false,
11394                                            /*check_dependency_p=*/false,
11395                                            /*template_p=*/NULL,
11396                                            /*declarator_p=*/true);
11397   /* If the name was qualified, create a SCOPE_REF to represent
11398      that.  */
11399   if (parser->scope)
11400     {
11401       id_expression = build_nt (SCOPE_REF, parser->scope, id_expression);
11402       parser->scope = NULL_TREE;
11403     }
11404
11405   return id_expression;
11406 }
11407
11408 /* Parse a type-id.
11409
11410    type-id:
11411      type-specifier-seq abstract-declarator [opt]
11412
11413    Returns the TYPE specified.  */
11414
11415 static tree
11416 cp_parser_type_id (cp_parser* parser)
11417 {
11418   cp_decl_specifier_seq type_specifier_seq;
11419   cp_declarator *abstract_declarator;
11420
11421   /* Parse the type-specifier-seq.  */
11422   cp_parser_type_specifier_seq (parser, &type_specifier_seq);
11423   if (type_specifier_seq.type == error_mark_node)
11424     return error_mark_node;
11425
11426   /* There might or might not be an abstract declarator.  */
11427   cp_parser_parse_tentatively (parser);
11428   /* Look for the declarator.  */
11429   abstract_declarator
11430     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
11431                             /*parenthesized_p=*/NULL);
11432   /* Check to see if there really was a declarator.  */
11433   if (!cp_parser_parse_definitely (parser))
11434     abstract_declarator = NULL;
11435
11436   return groktypename (&type_specifier_seq, abstract_declarator);
11437 }
11438
11439 /* Parse a type-specifier-seq.
11440
11441    type-specifier-seq:
11442      type-specifier type-specifier-seq [opt]
11443
11444    GNU extension:
11445
11446    type-specifier-seq:
11447      attributes type-specifier-seq [opt]
11448
11449    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
11450
11451 static void
11452 cp_parser_type_specifier_seq (cp_parser* parser,
11453                               cp_decl_specifier_seq *type_specifier_seq)
11454 {
11455   bool seen_type_specifier = false;
11456
11457   /* Clear the TYPE_SPECIFIER_SEQ.  */
11458   clear_decl_specs (type_specifier_seq);
11459
11460   /* Parse the type-specifiers and attributes.  */
11461   while (true)
11462     {
11463       tree type_specifier;
11464
11465       /* Check for attributes first.  */
11466       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
11467         {
11468           type_specifier_seq->attributes =
11469             chainon (type_specifier_seq->attributes,
11470                      cp_parser_attributes_opt (parser));
11471           continue;
11472         }
11473
11474       /* Look for the type-specifier.  */
11475       type_specifier = cp_parser_type_specifier (parser,
11476                                                  CP_PARSER_FLAGS_OPTIONAL,
11477                                                  type_specifier_seq,
11478                                                  /*is_declaration=*/false,
11479                                                  NULL,
11480                                                  NULL);
11481       /* If the first type-specifier could not be found, this is not a
11482          type-specifier-seq at all.  */
11483       if (!seen_type_specifier && !type_specifier)
11484         {
11485           cp_parser_error (parser, "expected type-specifier");
11486           type_specifier_seq->type = error_mark_node;
11487           return;
11488         }
11489       /* If subsequent type-specifiers could not be found, the
11490          type-specifier-seq is complete.  */
11491       else if (seen_type_specifier && !type_specifier)
11492         break;
11493
11494       seen_type_specifier = true;
11495     }
11496
11497   return;
11498 }
11499
11500 /* Parse a parameter-declaration-clause.
11501
11502    parameter-declaration-clause:
11503      parameter-declaration-list [opt] ... [opt]
11504      parameter-declaration-list , ...
11505
11506    Returns a representation for the parameter declarations.  A return
11507    value of NULL indicates a parameter-declaration-clause consisting
11508    only of an ellipsis.  */
11509
11510 static cp_parameter_declarator *
11511 cp_parser_parameter_declaration_clause (cp_parser* parser)
11512 {
11513   cp_parameter_declarator *parameters;
11514   cp_token *token;
11515   bool ellipsis_p;
11516   bool is_error;
11517
11518   /* Peek at the next token.  */
11519   token = cp_lexer_peek_token (parser->lexer);
11520   /* Check for trivial parameter-declaration-clauses.  */
11521   if (token->type == CPP_ELLIPSIS)
11522     {
11523       /* Consume the `...' token.  */
11524       cp_lexer_consume_token (parser->lexer);
11525       return NULL;
11526     }
11527   else if (token->type == CPP_CLOSE_PAREN)
11528     /* There are no parameters.  */
11529     {
11530 #ifndef NO_IMPLICIT_EXTERN_C
11531       if (in_system_header && current_class_type == NULL
11532           && current_lang_name == lang_name_c)
11533         return NULL;
11534       else
11535 #endif
11536         return no_parameters;
11537     }
11538   /* Check for `(void)', too, which is a special case.  */
11539   else if (token->keyword == RID_VOID
11540            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
11541                == CPP_CLOSE_PAREN))
11542     {
11543       /* Consume the `void' token.  */
11544       cp_lexer_consume_token (parser->lexer);
11545       /* There are no parameters.  */
11546       return no_parameters;
11547     }
11548
11549   /* Parse the parameter-declaration-list.  */
11550   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
11551   /* If a parse error occurred while parsing the
11552      parameter-declaration-list, then the entire
11553      parameter-declaration-clause is erroneous.  */
11554   if (is_error)
11555     return NULL;
11556
11557   /* Peek at the next token.  */
11558   token = cp_lexer_peek_token (parser->lexer);
11559   /* If it's a `,', the clause should terminate with an ellipsis.  */
11560   if (token->type == CPP_COMMA)
11561     {
11562       /* Consume the `,'.  */
11563       cp_lexer_consume_token (parser->lexer);
11564       /* Expect an ellipsis.  */
11565       ellipsis_p
11566         = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
11567     }
11568   /* It might also be `...' if the optional trailing `,' was
11569      omitted.  */
11570   else if (token->type == CPP_ELLIPSIS)
11571     {
11572       /* Consume the `...' token.  */
11573       cp_lexer_consume_token (parser->lexer);
11574       /* And remember that we saw it.  */
11575       ellipsis_p = true;
11576     }
11577   else
11578     ellipsis_p = false;
11579
11580   /* Finish the parameter list.  */
11581   if (parameters && ellipsis_p)
11582     parameters->ellipsis_p = true;
11583
11584   return parameters;
11585 }
11586
11587 /* Parse a parameter-declaration-list.
11588
11589    parameter-declaration-list:
11590      parameter-declaration
11591      parameter-declaration-list , parameter-declaration
11592
11593    Returns a representation of the parameter-declaration-list, as for
11594    cp_parser_parameter_declaration_clause.  However, the
11595    `void_list_node' is never appended to the list.  Upon return,
11596    *IS_ERROR will be true iff an error occurred.  */
11597
11598 static cp_parameter_declarator *
11599 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
11600 {
11601   cp_parameter_declarator *parameters = NULL;
11602   cp_parameter_declarator **tail = &parameters;
11603
11604   /* Assume all will go well.  */
11605   *is_error = false;
11606
11607   /* Look for more parameters.  */
11608   while (true)
11609     {
11610       cp_parameter_declarator *parameter;
11611       bool parenthesized_p;
11612       /* Parse the parameter.  */
11613       parameter
11614         = cp_parser_parameter_declaration (parser,
11615                                            /*template_parm_p=*/false,
11616                                            &parenthesized_p);
11617
11618       /* If a parse error occurred parsing the parameter declaration,
11619          then the entire parameter-declaration-list is erroneous.  */
11620       if (!parameter)
11621         {
11622           *is_error = true;
11623           parameters = NULL;
11624           break;
11625         }
11626       /* Add the new parameter to the list.  */
11627       *tail = parameter;
11628       tail = &parameter->next;
11629
11630       /* Peek at the next token.  */
11631       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
11632           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11633         /* The parameter-declaration-list is complete.  */
11634         break;
11635       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
11636         {
11637           cp_token *token;
11638
11639           /* Peek at the next token.  */
11640           token = cp_lexer_peek_nth_token (parser->lexer, 2);
11641           /* If it's an ellipsis, then the list is complete.  */
11642           if (token->type == CPP_ELLIPSIS)
11643             break;
11644           /* Otherwise, there must be more parameters.  Consume the
11645              `,'.  */
11646           cp_lexer_consume_token (parser->lexer);
11647           /* When parsing something like:
11648
11649                 int i(float f, double d)
11650
11651              we can tell after seeing the declaration for "f" that we
11652              are not looking at an initialization of a variable "i",
11653              but rather at the declaration of a function "i".
11654
11655              Due to the fact that the parsing of template arguments
11656              (as specified to a template-id) requires backtracking we
11657              cannot use this technique when inside a template argument
11658              list.  */
11659           if (!parser->in_template_argument_list_p
11660               && !parser->in_type_id_in_expr_p
11661               && cp_parser_parsing_tentatively (parser)
11662               && !cp_parser_committed_to_tentative_parse (parser)
11663               /* However, a parameter-declaration of the form
11664                  "foat(f)" (which is a valid declaration of a
11665                  parameter "f") can also be interpreted as an
11666                  expression (the conversion of "f" to "float").  */
11667               && !parenthesized_p)
11668             cp_parser_commit_to_tentative_parse (parser);
11669         }
11670       else
11671         {
11672           cp_parser_error (parser, "expected `,' or `...'");
11673           if (!cp_parser_parsing_tentatively (parser)
11674               || cp_parser_committed_to_tentative_parse (parser))
11675             cp_parser_skip_to_closing_parenthesis (parser,
11676                                                    /*recovering=*/true,
11677                                                    /*or_comma=*/false,
11678                                                    /*consume_paren=*/false);
11679           break;
11680         }
11681     }
11682
11683   return parameters;
11684 }
11685
11686 /* Parse a parameter declaration.
11687
11688    parameter-declaration:
11689      decl-specifier-seq declarator
11690      decl-specifier-seq declarator = assignment-expression
11691      decl-specifier-seq abstract-declarator [opt]
11692      decl-specifier-seq abstract-declarator [opt] = assignment-expression
11693
11694    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
11695    declares a template parameter.  (In that case, a non-nested `>'
11696    token encountered during the parsing of the assignment-expression
11697    is not interpreted as a greater-than operator.)
11698
11699    Returns a representation of the parameter, or NULL if an error
11700    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
11701    true iff the declarator is of the form "(p)".  */
11702
11703 static cp_parameter_declarator *
11704 cp_parser_parameter_declaration (cp_parser *parser,
11705                                  bool template_parm_p,
11706                                  bool *parenthesized_p)
11707 {
11708   int declares_class_or_enum;
11709   bool greater_than_is_operator_p;
11710   cp_decl_specifier_seq decl_specifiers;
11711   cp_declarator *declarator;
11712   tree default_argument;
11713   cp_token *token;
11714   const char *saved_message;
11715
11716   /* In a template parameter, `>' is not an operator.
11717
11718      [temp.param]
11719
11720      When parsing a default template-argument for a non-type
11721      template-parameter, the first non-nested `>' is taken as the end
11722      of the template parameter-list rather than a greater-than
11723      operator.  */
11724   greater_than_is_operator_p = !template_parm_p;
11725
11726   /* Type definitions may not appear in parameter types.  */
11727   saved_message = parser->type_definition_forbidden_message;
11728   parser->type_definition_forbidden_message
11729     = "types may not be defined in parameter types";
11730
11731   /* Parse the declaration-specifiers.  */
11732   cp_parser_decl_specifier_seq (parser,
11733                                 CP_PARSER_FLAGS_NONE,
11734                                 &decl_specifiers,
11735                                 &declares_class_or_enum);
11736   /* If an error occurred, there's no reason to attempt to parse the
11737      rest of the declaration.  */
11738   if (cp_parser_error_occurred (parser))
11739     {
11740       parser->type_definition_forbidden_message = saved_message;
11741       return NULL;
11742     }
11743
11744   /* Peek at the next token.  */
11745   token = cp_lexer_peek_token (parser->lexer);
11746   /* If the next token is a `)', `,', `=', `>', or `...', then there
11747      is no declarator.  */
11748   if (token->type == CPP_CLOSE_PAREN
11749       || token->type == CPP_COMMA
11750       || token->type == CPP_EQ
11751       || token->type == CPP_ELLIPSIS
11752       || token->type == CPP_GREATER)
11753     {
11754       declarator = NULL;
11755       if (parenthesized_p)
11756         *parenthesized_p = false;
11757     }
11758   /* Otherwise, there should be a declarator.  */
11759   else
11760     {
11761       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11762       parser->default_arg_ok_p = false;
11763
11764       /* After seeing a decl-specifier-seq, if the next token is not a
11765          "(", there is no possibility that the code is a valid
11766          expression.  Therefore, if parsing tentatively, we commit at
11767          this point.  */
11768       if (!parser->in_template_argument_list_p
11769           /* In an expression context, having seen:
11770
11771                (int((char ...
11772
11773              we cannot be sure whether we are looking at a
11774              function-type (taking a "char" as a parameter) or a cast
11775              of some object of type "char" to "int".  */
11776           && !parser->in_type_id_in_expr_p
11777           && cp_parser_parsing_tentatively (parser)
11778           && !cp_parser_committed_to_tentative_parse (parser)
11779           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
11780         cp_parser_commit_to_tentative_parse (parser);
11781       /* Parse the declarator.  */
11782       declarator = cp_parser_declarator (parser,
11783                                          CP_PARSER_DECLARATOR_EITHER,
11784                                          /*ctor_dtor_or_conv_p=*/NULL,
11785                                          parenthesized_p);
11786       parser->default_arg_ok_p = saved_default_arg_ok_p;
11787       /* After the declarator, allow more attributes.  */
11788       decl_specifiers.attributes
11789         = chainon (decl_specifiers.attributes,
11790                    cp_parser_attributes_opt (parser));
11791     }
11792
11793   /* The restriction on defining new types applies only to the type
11794      of the parameter, not to the default argument.  */
11795   parser->type_definition_forbidden_message = saved_message;
11796
11797   /* If the next token is `=', then process a default argument.  */
11798   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11799     {
11800       bool saved_greater_than_is_operator_p;
11801       /* Consume the `='.  */
11802       cp_lexer_consume_token (parser->lexer);
11803
11804       /* If we are defining a class, then the tokens that make up the
11805          default argument must be saved and processed later.  */
11806       if (!template_parm_p && at_class_scope_p ()
11807           && TYPE_BEING_DEFINED (current_class_type))
11808         {
11809           unsigned depth = 0;
11810
11811           /* Create a DEFAULT_ARG to represented the unparsed default
11812              argument.  */
11813           default_argument = make_node (DEFAULT_ARG);
11814           DEFARG_TOKENS (default_argument) = cp_token_cache_new ();
11815
11816           /* Add tokens until we have processed the entire default
11817              argument.  */
11818           while (true)
11819             {
11820               bool done = false;
11821               cp_token *token;
11822
11823               /* Peek at the next token.  */
11824               token = cp_lexer_peek_token (parser->lexer);
11825               /* What we do depends on what token we have.  */
11826               switch (token->type)
11827                 {
11828                   /* In valid code, a default argument must be
11829                      immediately followed by a `,' `)', or `...'.  */
11830                 case CPP_COMMA:
11831                 case CPP_CLOSE_PAREN:
11832                 case CPP_ELLIPSIS:
11833                   /* If we run into a non-nested `;', `}', or `]',
11834                      then the code is invalid -- but the default
11835                      argument is certainly over.  */
11836                 case CPP_SEMICOLON:
11837                 case CPP_CLOSE_BRACE:
11838                 case CPP_CLOSE_SQUARE:
11839                   if (depth == 0)
11840                     done = true;
11841                   /* Update DEPTH, if necessary.  */
11842                   else if (token->type == CPP_CLOSE_PAREN
11843                            || token->type == CPP_CLOSE_BRACE
11844                            || token->type == CPP_CLOSE_SQUARE)
11845                     --depth;
11846                   break;
11847
11848                 case CPP_OPEN_PAREN:
11849                 case CPP_OPEN_SQUARE:
11850                 case CPP_OPEN_BRACE:
11851                   ++depth;
11852                   break;
11853
11854                 case CPP_GREATER:
11855                   /* If we see a non-nested `>', and `>' is not an
11856                      operator, then it marks the end of the default
11857                      argument.  */
11858                   if (!depth && !greater_than_is_operator_p)
11859                     done = true;
11860                   break;
11861
11862                   /* If we run out of tokens, issue an error message.  */
11863                 case CPP_EOF:
11864                   error ("file ends in default argument");
11865                   done = true;
11866                   break;
11867
11868                 case CPP_NAME:
11869                 case CPP_SCOPE:
11870                   /* In these cases, we should look for template-ids.
11871                      For example, if the default argument is
11872                      `X<int, double>()', we need to do name lookup to
11873                      figure out whether or not `X' is a template; if
11874                      so, the `,' does not end the default argument.
11875
11876                      That is not yet done.  */
11877                   break;
11878
11879                 default:
11880                   break;
11881                 }
11882
11883               /* If we've reached the end, stop.  */
11884               if (done)
11885                 break;
11886
11887               /* Add the token to the token block.  */
11888               token = cp_lexer_consume_token (parser->lexer);
11889               cp_token_cache_push_token (DEFARG_TOKENS (default_argument),
11890                                          token);
11891             }
11892         }
11893       /* Outside of a class definition, we can just parse the
11894          assignment-expression.  */
11895       else
11896         {
11897           bool saved_local_variables_forbidden_p;
11898
11899           /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
11900              set correctly.  */
11901           saved_greater_than_is_operator_p
11902             = parser->greater_than_is_operator_p;
11903           parser->greater_than_is_operator_p = greater_than_is_operator_p;
11904           /* Local variable names (and the `this' keyword) may not
11905              appear in a default argument.  */
11906           saved_local_variables_forbidden_p
11907             = parser->local_variables_forbidden_p;
11908           parser->local_variables_forbidden_p = true;
11909           /* Parse the assignment-expression.  */
11910           default_argument = cp_parser_assignment_expression (parser);
11911           /* Restore saved state.  */
11912           parser->greater_than_is_operator_p
11913             = saved_greater_than_is_operator_p;
11914           parser->local_variables_forbidden_p
11915             = saved_local_variables_forbidden_p;
11916         }
11917       if (!parser->default_arg_ok_p)
11918         {
11919           if (!flag_pedantic_errors)
11920             warning ("deprecated use of default argument for parameter of non-function");
11921           else
11922             {
11923               error ("default arguments are only permitted for function parameters");
11924               default_argument = NULL_TREE;
11925             }
11926         }
11927     }
11928   else
11929     default_argument = NULL_TREE;
11930
11931   return make_parameter_declarator (&decl_specifiers,
11932                                     declarator,
11933                                     default_argument);
11934 }
11935
11936 /* Parse a function-body.
11937
11938    function-body:
11939      compound_statement  */
11940
11941 static void
11942 cp_parser_function_body (cp_parser *parser)
11943 {
11944   cp_parser_compound_statement (parser, NULL, false);
11945 }
11946
11947 /* Parse a ctor-initializer-opt followed by a function-body.  Return
11948    true if a ctor-initializer was present.  */
11949
11950 static bool
11951 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
11952 {
11953   tree body;
11954   bool ctor_initializer_p;
11955
11956   /* Begin the function body.  */
11957   body = begin_function_body ();
11958   /* Parse the optional ctor-initializer.  */
11959   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
11960   /* Parse the function-body.  */
11961   cp_parser_function_body (parser);
11962   /* Finish the function body.  */
11963   finish_function_body (body);
11964
11965   return ctor_initializer_p;
11966 }
11967
11968 /* Parse an initializer.
11969
11970    initializer:
11971      = initializer-clause
11972      ( expression-list )
11973
11974    Returns a expression representing the initializer.  If no
11975    initializer is present, NULL_TREE is returned.
11976
11977    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
11978    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
11979    set to FALSE if there is no initializer present.  If there is an
11980    initializer, and it is not a constant-expression, *NON_CONSTANT_P
11981    is set to true; otherwise it is set to false.  */
11982
11983 static tree
11984 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
11985                        bool* non_constant_p)
11986 {
11987   cp_token *token;
11988   tree init;
11989
11990   /* Peek at the next token.  */
11991   token = cp_lexer_peek_token (parser->lexer);
11992
11993   /* Let our caller know whether or not this initializer was
11994      parenthesized.  */
11995   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
11996   /* Assume that the initializer is constant.  */
11997   *non_constant_p = false;
11998
11999   if (token->type == CPP_EQ)
12000     {
12001       /* Consume the `='.  */
12002       cp_lexer_consume_token (parser->lexer);
12003       /* Parse the initializer-clause.  */
12004       init = cp_parser_initializer_clause (parser, non_constant_p);
12005     }
12006   else if (token->type == CPP_OPEN_PAREN)
12007     init = cp_parser_parenthesized_expression_list (parser, false,
12008                                                     non_constant_p);
12009   else
12010     {
12011       /* Anything else is an error.  */
12012       cp_parser_error (parser, "expected initializer");
12013       init = error_mark_node;
12014     }
12015
12016   return init;
12017 }
12018
12019 /* Parse an initializer-clause.
12020
12021    initializer-clause:
12022      assignment-expression
12023      { initializer-list , [opt] }
12024      { }
12025
12026    Returns an expression representing the initializer.
12027
12028    If the `assignment-expression' production is used the value
12029    returned is simply a representation for the expression.
12030
12031    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
12032    the elements of the initializer-list (or NULL_TREE, if the last
12033    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
12034    NULL_TREE.  There is no way to detect whether or not the optional
12035    trailing `,' was provided.  NON_CONSTANT_P is as for
12036    cp_parser_initializer.  */
12037
12038 static tree
12039 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
12040 {
12041   tree initializer;
12042
12043   /* If it is not a `{', then we are looking at an
12044      assignment-expression.  */
12045   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
12046     {
12047       initializer
12048         = cp_parser_constant_expression (parser,
12049                                         /*allow_non_constant_p=*/true,
12050                                         non_constant_p);
12051       if (!*non_constant_p)
12052         initializer = fold_non_dependent_expr (initializer);
12053     }
12054   else
12055     {
12056       /* Consume the `{' token.  */
12057       cp_lexer_consume_token (parser->lexer);
12058       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
12059       initializer = make_node (CONSTRUCTOR);
12060       /* If it's not a `}', then there is a non-trivial initializer.  */
12061       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12062         {
12063           /* Parse the initializer list.  */
12064           CONSTRUCTOR_ELTS (initializer)
12065             = cp_parser_initializer_list (parser, non_constant_p);
12066           /* A trailing `,' token is allowed.  */
12067           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12068             cp_lexer_consume_token (parser->lexer);
12069         }
12070       /* Now, there should be a trailing `}'.  */
12071       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12072     }
12073
12074   return initializer;
12075 }
12076
12077 /* Parse an initializer-list.
12078
12079    initializer-list:
12080      initializer-clause
12081      initializer-list , initializer-clause
12082
12083    GNU Extension:
12084
12085    initializer-list:
12086      identifier : initializer-clause
12087      initializer-list, identifier : initializer-clause
12088
12089    Returns a TREE_LIST.  The TREE_VALUE of each node is an expression
12090    for the initializer.  If the TREE_PURPOSE is non-NULL, it is the
12091    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
12092    as for cp_parser_initializer.  */
12093
12094 static tree
12095 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
12096 {
12097   tree initializers = NULL_TREE;
12098
12099   /* Assume all of the expressions are constant.  */
12100   *non_constant_p = false;
12101
12102   /* Parse the rest of the list.  */
12103   while (true)
12104     {
12105       cp_token *token;
12106       tree identifier;
12107       tree initializer;
12108       bool clause_non_constant_p;
12109
12110       /* If the next token is an identifier and the following one is a
12111          colon, we are looking at the GNU designated-initializer
12112          syntax.  */
12113       if (cp_parser_allow_gnu_extensions_p (parser)
12114           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
12115           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
12116         {
12117           /* Consume the identifier.  */
12118           identifier = cp_lexer_consume_token (parser->lexer)->value;
12119           /* Consume the `:'.  */
12120           cp_lexer_consume_token (parser->lexer);
12121         }
12122       else
12123         identifier = NULL_TREE;
12124
12125       /* Parse the initializer.  */
12126       initializer = cp_parser_initializer_clause (parser,
12127                                                   &clause_non_constant_p);
12128       /* If any clause is non-constant, so is the entire initializer.  */
12129       if (clause_non_constant_p)
12130         *non_constant_p = true;
12131       /* Add it to the list.  */
12132       initializers = tree_cons (identifier, initializer, initializers);
12133
12134       /* If the next token is not a comma, we have reached the end of
12135          the list.  */
12136       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12137         break;
12138
12139       /* Peek at the next token.  */
12140       token = cp_lexer_peek_nth_token (parser->lexer, 2);
12141       /* If the next token is a `}', then we're still done.  An
12142          initializer-clause can have a trailing `,' after the
12143          initializer-list and before the closing `}'.  */
12144       if (token->type == CPP_CLOSE_BRACE)
12145         break;
12146
12147       /* Consume the `,' token.  */
12148       cp_lexer_consume_token (parser->lexer);
12149     }
12150
12151   /* The initializers were built up in reverse order, so we need to
12152      reverse them now.  */
12153   return nreverse (initializers);
12154 }
12155
12156 /* Classes [gram.class] */
12157
12158 /* Parse a class-name.
12159
12160    class-name:
12161      identifier
12162      template-id
12163
12164    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
12165    to indicate that names looked up in dependent types should be
12166    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
12167    keyword has been used to indicate that the name that appears next
12168    is a template.  TYPE_P is true iff the next name should be treated
12169    as class-name, even if it is declared to be some other kind of name
12170    as well.  If CHECK_DEPENDENCY_P is FALSE, names are looked up in
12171    dependent scopes.  If CLASS_HEAD_P is TRUE, this class is the class
12172    being defined in a class-head.
12173
12174    Returns the TYPE_DECL representing the class.  */
12175
12176 static tree
12177 cp_parser_class_name (cp_parser *parser,
12178                       bool typename_keyword_p,
12179                       bool template_keyword_p,
12180                       bool type_p,
12181                       bool check_dependency_p,
12182                       bool class_head_p,
12183                       bool is_declaration)
12184 {
12185   tree decl;
12186   tree scope;
12187   bool typename_p;
12188   cp_token *token;
12189
12190   /* All class-names start with an identifier.  */
12191   token = cp_lexer_peek_token (parser->lexer);
12192   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
12193     {
12194       cp_parser_error (parser, "expected class-name");
12195       return error_mark_node;
12196     }
12197
12198   /* PARSER->SCOPE can be cleared when parsing the template-arguments
12199      to a template-id, so we save it here.  */
12200   scope = parser->scope;
12201   if (scope == error_mark_node)
12202     return error_mark_node;
12203
12204   /* Any name names a type if we're following the `typename' keyword
12205      in a qualified name where the enclosing scope is type-dependent.  */
12206   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
12207                 && dependent_type_p (scope));
12208   /* Handle the common case (an identifier, but not a template-id)
12209      efficiently.  */
12210   if (token->type == CPP_NAME
12211       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
12212     {
12213       tree identifier;
12214
12215       /* Look for the identifier.  */
12216       identifier = cp_parser_identifier (parser);
12217       /* If the next token isn't an identifier, we are certainly not
12218          looking at a class-name.  */
12219       if (identifier == error_mark_node)
12220         decl = error_mark_node;
12221       /* If we know this is a type-name, there's no need to look it
12222          up.  */
12223       else if (typename_p)
12224         decl = identifier;
12225       else
12226         {
12227           /* If the next token is a `::', then the name must be a type
12228              name.
12229
12230              [basic.lookup.qual]
12231
12232              During the lookup for a name preceding the :: scope
12233              resolution operator, object, function, and enumerator
12234              names are ignored.  */
12235           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12236             type_p = true;
12237           /* Look up the name.  */
12238           decl = cp_parser_lookup_name (parser, identifier,
12239                                         type_p,
12240                                         /*is_template=*/false,
12241                                         /*is_namespace=*/false,
12242                                         check_dependency_p);
12243         }
12244     }
12245   else
12246     {
12247       /* Try a template-id.  */
12248       decl = cp_parser_template_id (parser, template_keyword_p,
12249                                     check_dependency_p,
12250                                     is_declaration);
12251       if (decl == error_mark_node)
12252         return error_mark_node;
12253     }
12254
12255   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
12256
12257   /* If this is a typename, create a TYPENAME_TYPE.  */
12258   if (typename_p && decl != error_mark_node)
12259     {
12260       decl = make_typename_type (scope, decl, /*complain=*/1);
12261       if (decl != error_mark_node)
12262         decl = TYPE_NAME (decl);
12263     }
12264
12265   /* Check to see that it is really the name of a class.  */
12266   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
12267       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
12268       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12269     /* Situations like this:
12270
12271          template <typename T> struct A {
12272            typename T::template X<int>::I i;
12273          };
12274
12275        are problematic.  Is `T::template X<int>' a class-name?  The
12276        standard does not seem to be definitive, but there is no other
12277        valid interpretation of the following `::'.  Therefore, those
12278        names are considered class-names.  */
12279     decl = TYPE_NAME (make_typename_type (scope, decl, tf_error));
12280   else if (decl == error_mark_node
12281            || TREE_CODE (decl) != TYPE_DECL
12282            || !IS_AGGR_TYPE (TREE_TYPE (decl)))
12283     {
12284       cp_parser_error (parser, "expected class-name");
12285       return error_mark_node;
12286     }
12287
12288   return decl;
12289 }
12290
12291 /* Parse a class-specifier.
12292
12293    class-specifier:
12294      class-head { member-specification [opt] }
12295
12296    Returns the TREE_TYPE representing the class.  */
12297
12298 static tree
12299 cp_parser_class_specifier (cp_parser* parser)
12300 {
12301   cp_token *token;
12302   tree type;
12303   tree attributes = NULL_TREE;
12304   int has_trailing_semicolon;
12305   bool nested_name_specifier_p;
12306   unsigned saved_num_template_parameter_lists;
12307   bool pop_p = false;
12308   tree scope = NULL_TREE;
12309
12310   push_deferring_access_checks (dk_no_deferred);
12311
12312   /* Parse the class-head.  */
12313   type = cp_parser_class_head (parser,
12314                                &nested_name_specifier_p,
12315                                &attributes);
12316   /* If the class-head was a semantic disaster, skip the entire body
12317      of the class.  */
12318   if (!type)
12319     {
12320       cp_parser_skip_to_end_of_block_or_statement (parser);
12321       pop_deferring_access_checks ();
12322       return error_mark_node;
12323     }
12324
12325   /* Look for the `{'.  */
12326   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
12327     {
12328       pop_deferring_access_checks ();
12329       return error_mark_node;
12330     }
12331
12332   /* Issue an error message if type-definitions are forbidden here.  */
12333   cp_parser_check_type_definition (parser);
12334   /* Remember that we are defining one more class.  */
12335   ++parser->num_classes_being_defined;
12336   /* Inside the class, surrounding template-parameter-lists do not
12337      apply.  */
12338   saved_num_template_parameter_lists
12339     = parser->num_template_parameter_lists;
12340   parser->num_template_parameter_lists = 0;
12341
12342   /* Start the class.  */
12343   if (nested_name_specifier_p)
12344     {
12345       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
12346       pop_p = push_scope (scope);
12347     }
12348   type = begin_class_definition (type);
12349
12350   if (type == error_mark_node)
12351     /* If the type is erroneous, skip the entire body of the class.  */
12352     cp_parser_skip_to_closing_brace (parser);
12353   else
12354     /* Parse the member-specification.  */
12355     cp_parser_member_specification_opt (parser);
12356
12357   /* Look for the trailing `}'.  */
12358   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12359   /* We get better error messages by noticing a common problem: a
12360      missing trailing `;'.  */
12361   token = cp_lexer_peek_token (parser->lexer);
12362   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
12363   /* Look for trailing attributes to apply to this class.  */
12364   if (cp_parser_allow_gnu_extensions_p (parser))
12365     {
12366       tree sub_attr = cp_parser_attributes_opt (parser);
12367       attributes = chainon (attributes, sub_attr);
12368     }
12369   if (type != error_mark_node)
12370     type = finish_struct (type, attributes);
12371   if (pop_p)
12372     pop_scope (scope);
12373   /* If this class is not itself within the scope of another class,
12374      then we need to parse the bodies of all of the queued function
12375      definitions.  Note that the queued functions defined in a class
12376      are not always processed immediately following the
12377      class-specifier for that class.  Consider:
12378
12379        struct A {
12380          struct B { void f() { sizeof (A); } };
12381        };
12382
12383      If `f' were processed before the processing of `A' were
12384      completed, there would be no way to compute the size of `A'.
12385      Note that the nesting we are interested in here is lexical --
12386      not the semantic nesting given by TYPE_CONTEXT.  In particular,
12387      for:
12388
12389        struct A { struct B; };
12390        struct A::B { void f() { } };
12391
12392      there is no need to delay the parsing of `A::B::f'.  */
12393   if (--parser->num_classes_being_defined == 0)
12394     {
12395       tree queue_entry;
12396       tree fn;
12397       tree class_type;
12398       bool pop_p;
12399
12400       /* In a first pass, parse default arguments to the functions.
12401          Then, in a second pass, parse the bodies of the functions.
12402          This two-phased approach handles cases like:
12403
12404             struct S {
12405               void f() { g(); }
12406               void g(int i = 3);
12407             };
12408
12409          */
12410       class_type = NULL_TREE;
12411       pop_p = false;
12412       for (TREE_PURPOSE (parser->unparsed_functions_queues)
12413              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
12414            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
12415            TREE_PURPOSE (parser->unparsed_functions_queues)
12416              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
12417         {
12418           fn = TREE_VALUE (queue_entry);
12419           /* If there are default arguments that have not yet been processed,
12420              take care of them now.  */
12421           if (class_type != TREE_PURPOSE (queue_entry))
12422             {
12423               if (pop_p)
12424                 pop_scope (class_type);
12425               class_type = TREE_PURPOSE (queue_entry);
12426               pop_p = push_scope (class_type);
12427             }
12428           /* Make sure that any template parameters are in scope.  */
12429           maybe_begin_member_template_processing (fn);
12430           /* Parse the default argument expressions.  */
12431           cp_parser_late_parsing_default_args (parser, fn);
12432           /* Remove any template parameters from the symbol table.  */
12433           maybe_end_member_template_processing ();
12434         }
12435       if (pop_p)
12436         pop_scope (class_type);
12437       /* Now parse the body of the functions.  */
12438       for (TREE_VALUE (parser->unparsed_functions_queues)
12439              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
12440            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
12441            TREE_VALUE (parser->unparsed_functions_queues)
12442              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
12443         {
12444           /* Figure out which function we need to process.  */
12445           fn = TREE_VALUE (queue_entry);
12446
12447           /* A hack to prevent garbage collection.  */
12448           function_depth++;
12449
12450           /* Parse the function.  */
12451           cp_parser_late_parsing_for_member (parser, fn);
12452           function_depth--;
12453         }
12454     }
12455
12456   /* Put back any saved access checks.  */
12457   pop_deferring_access_checks ();
12458
12459   /* Restore the count of active template-parameter-lists.  */
12460   parser->num_template_parameter_lists
12461     = saved_num_template_parameter_lists;
12462
12463   return type;
12464 }
12465
12466 /* Parse a class-head.
12467
12468    class-head:
12469      class-key identifier [opt] base-clause [opt]
12470      class-key nested-name-specifier identifier base-clause [opt]
12471      class-key nested-name-specifier [opt] template-id
12472        base-clause [opt]
12473
12474    GNU Extensions:
12475      class-key attributes identifier [opt] base-clause [opt]
12476      class-key attributes nested-name-specifier identifier base-clause [opt]
12477      class-key attributes nested-name-specifier [opt] template-id
12478        base-clause [opt]
12479
12480    Returns the TYPE of the indicated class.  Sets
12481    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
12482    involving a nested-name-specifier was used, and FALSE otherwise.
12483
12484    Returns NULL_TREE if the class-head is syntactically valid, but
12485    semantically invalid in a way that means we should skip the entire
12486    body of the class.  */
12487
12488 static tree
12489 cp_parser_class_head (cp_parser* parser,
12490                       bool* nested_name_specifier_p,
12491                       tree *attributes_p)
12492 {
12493   tree nested_name_specifier;
12494   enum tag_types class_key;
12495   tree id = NULL_TREE;
12496   tree type = NULL_TREE;
12497   tree attributes;
12498   bool template_id_p = false;
12499   bool qualified_p = false;
12500   bool invalid_nested_name_p = false;
12501   bool invalid_explicit_specialization_p = false;
12502   bool pop_p = false;
12503   unsigned num_templates;
12504   tree bases;
12505
12506   /* Assume no nested-name-specifier will be present.  */
12507   *nested_name_specifier_p = false;
12508   /* Assume no template parameter lists will be used in defining the
12509      type.  */
12510   num_templates = 0;
12511
12512   /* Look for the class-key.  */
12513   class_key = cp_parser_class_key (parser);
12514   if (class_key == none_type)
12515     return error_mark_node;
12516
12517   /* Parse the attributes.  */
12518   attributes = cp_parser_attributes_opt (parser);
12519
12520   /* If the next token is `::', that is invalid -- but sometimes
12521      people do try to write:
12522
12523        struct ::S {};
12524
12525      Handle this gracefully by accepting the extra qualifier, and then
12526      issuing an error about it later if this really is a
12527      class-head.  If it turns out just to be an elaborated type
12528      specifier, remain silent.  */
12529   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
12530     qualified_p = true;
12531
12532   push_deferring_access_checks (dk_no_check);
12533
12534   /* Determine the name of the class.  Begin by looking for an
12535      optional nested-name-specifier.  */
12536   nested_name_specifier
12537     = cp_parser_nested_name_specifier_opt (parser,
12538                                            /*typename_keyword_p=*/false,
12539                                            /*check_dependency_p=*/false,
12540                                            /*type_p=*/false,
12541                                            /*is_declaration=*/false);
12542   /* If there was a nested-name-specifier, then there *must* be an
12543      identifier.  */
12544   if (nested_name_specifier)
12545     {
12546       /* Although the grammar says `identifier', it really means
12547          `class-name' or `template-name'.  You are only allowed to
12548          define a class that has already been declared with this
12549          syntax.
12550
12551          The proposed resolution for Core Issue 180 says that whever
12552          you see `class T::X' you should treat `X' as a type-name.
12553
12554          It is OK to define an inaccessible class; for example:
12555
12556            class A { class B; };
12557            class A::B {};
12558
12559          We do not know if we will see a class-name, or a
12560          template-name.  We look for a class-name first, in case the
12561          class-name is a template-id; if we looked for the
12562          template-name first we would stop after the template-name.  */
12563       cp_parser_parse_tentatively (parser);
12564       type = cp_parser_class_name (parser,
12565                                    /*typename_keyword_p=*/false,
12566                                    /*template_keyword_p=*/false,
12567                                    /*type_p=*/true,
12568                                    /*check_dependency_p=*/false,
12569                                    /*class_head_p=*/true,
12570                                    /*is_declaration=*/false);
12571       /* If that didn't work, ignore the nested-name-specifier.  */
12572       if (!cp_parser_parse_definitely (parser))
12573         {
12574           invalid_nested_name_p = true;
12575           id = cp_parser_identifier (parser);
12576           if (id == error_mark_node)
12577             id = NULL_TREE;
12578         }
12579       /* If we could not find a corresponding TYPE, treat this
12580          declaration like an unqualified declaration.  */
12581       if (type == error_mark_node)
12582         nested_name_specifier = NULL_TREE;
12583       /* Otherwise, count the number of templates used in TYPE and its
12584          containing scopes.  */
12585       else
12586         {
12587           tree scope;
12588
12589           for (scope = TREE_TYPE (type);
12590                scope && TREE_CODE (scope) != NAMESPACE_DECL;
12591                scope = (TYPE_P (scope)
12592                         ? TYPE_CONTEXT (scope)
12593                         : DECL_CONTEXT (scope)))
12594             if (TYPE_P (scope)
12595                 && CLASS_TYPE_P (scope)
12596                 && CLASSTYPE_TEMPLATE_INFO (scope)
12597                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
12598                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
12599               ++num_templates;
12600         }
12601     }
12602   /* Otherwise, the identifier is optional.  */
12603   else
12604     {
12605       /* We don't know whether what comes next is a template-id,
12606          an identifier, or nothing at all.  */
12607       cp_parser_parse_tentatively (parser);
12608       /* Check for a template-id.  */
12609       id = cp_parser_template_id (parser,
12610                                   /*template_keyword_p=*/false,
12611                                   /*check_dependency_p=*/true,
12612                                   /*is_declaration=*/true);
12613       /* If that didn't work, it could still be an identifier.  */
12614       if (!cp_parser_parse_definitely (parser))
12615         {
12616           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12617             id = cp_parser_identifier (parser);
12618           else
12619             id = NULL_TREE;
12620         }
12621       else
12622         {
12623           template_id_p = true;
12624           ++num_templates;
12625         }
12626     }
12627
12628   pop_deferring_access_checks ();
12629
12630   if (id)
12631     cp_parser_check_for_invalid_template_id (parser, id);
12632
12633   /* If it's not a `:' or a `{' then we can't really be looking at a
12634      class-head, since a class-head only appears as part of a
12635      class-specifier.  We have to detect this situation before calling
12636      xref_tag, since that has irreversible side-effects.  */
12637   if (!cp_parser_next_token_starts_class_definition_p (parser))
12638     {
12639       cp_parser_error (parser, "expected `{' or `:'");
12640       return error_mark_node;
12641     }
12642
12643   /* At this point, we're going ahead with the class-specifier, even
12644      if some other problem occurs.  */
12645   cp_parser_commit_to_tentative_parse (parser);
12646   /* Issue the error about the overly-qualified name now.  */
12647   if (qualified_p)
12648     cp_parser_error (parser,
12649                      "global qualification of class name is invalid");
12650   else if (invalid_nested_name_p)
12651     cp_parser_error (parser,
12652                      "qualified name does not name a class");
12653   else if (nested_name_specifier)
12654     {
12655       tree scope;
12656       /* Figure out in what scope the declaration is being placed.  */
12657       scope = current_scope ();
12658       if (!scope)
12659         scope = current_namespace;
12660       /* If that scope does not contain the scope in which the
12661          class was originally declared, the program is invalid.  */
12662       if (scope && !is_ancestor (scope, nested_name_specifier))
12663         {
12664           error ("declaration of `%D' in `%D' which does not "
12665                  "enclose `%D'", type, scope, nested_name_specifier);
12666           type = NULL_TREE;
12667           goto done;
12668         }
12669       /* [dcl.meaning]
12670
12671          A declarator-id shall not be qualified exception of the
12672          definition of a ... nested class outside of its class
12673          ... [or] a the definition or explicit instantiation of a
12674          class member of a namespace outside of its namespace.  */
12675       if (scope == nested_name_specifier)
12676         {
12677           pedwarn ("extra qualification ignored");
12678           nested_name_specifier = NULL_TREE;
12679           num_templates = 0;
12680         }
12681     }
12682   /* An explicit-specialization must be preceded by "template <>".  If
12683      it is not, try to recover gracefully.  */
12684   if (at_namespace_scope_p ()
12685       && parser->num_template_parameter_lists == 0
12686       && template_id_p)
12687     {
12688       error ("an explicit specialization must be preceded by 'template <>'");
12689       invalid_explicit_specialization_p = true;
12690       /* Take the same action that would have been taken by
12691          cp_parser_explicit_specialization.  */
12692       ++parser->num_template_parameter_lists;
12693       begin_specialization ();
12694     }
12695   /* There must be no "return" statements between this point and the
12696      end of this function; set "type "to the correct return value and
12697      use "goto done;" to return.  */
12698   /* Make sure that the right number of template parameters were
12699      present.  */
12700   if (!cp_parser_check_template_parameters (parser, num_templates))
12701     {
12702       /* If something went wrong, there is no point in even trying to
12703          process the class-definition.  */
12704       type = NULL_TREE;
12705       goto done;
12706     }
12707
12708   /* Look up the type.  */
12709   if (template_id_p)
12710     {
12711       type = TREE_TYPE (id);
12712       maybe_process_partial_specialization (type);
12713     }
12714   else if (!nested_name_specifier)
12715     {
12716       /* If the class was unnamed, create a dummy name.  */
12717       if (!id)
12718         id = make_anon_name ();
12719       type = xref_tag (class_key, id, /*globalize=*/false,
12720                        parser->num_template_parameter_lists);
12721     }
12722   else
12723     {
12724       tree class_type;
12725       bool pop_p = false;
12726
12727       /* Given:
12728
12729             template <typename T> struct S { struct T };
12730             template <typename T> struct S<T>::T { };
12731
12732          we will get a TYPENAME_TYPE when processing the definition of
12733          `S::T'.  We need to resolve it to the actual type before we
12734          try to define it.  */
12735       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
12736         {
12737           class_type = resolve_typename_type (TREE_TYPE (type),
12738                                               /*only_current_p=*/false);
12739           if (class_type != error_mark_node)
12740             type = TYPE_NAME (class_type);
12741           else
12742             {
12743               cp_parser_error (parser, "could not resolve typename type");
12744               type = error_mark_node;
12745             }
12746         }
12747
12748       maybe_process_partial_specialization (TREE_TYPE (type));
12749       class_type = current_class_type;
12750       /* Enter the scope indicated by the nested-name-specifier.  */
12751       if (nested_name_specifier)
12752         pop_p = push_scope (nested_name_specifier);
12753       /* Get the canonical version of this type.  */
12754       type = TYPE_MAIN_DECL (TREE_TYPE (type));
12755       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
12756           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
12757         type = push_template_decl (type);
12758       type = TREE_TYPE (type);
12759       if (nested_name_specifier)
12760         {
12761           *nested_name_specifier_p = true;
12762           if (pop_p)
12763             pop_scope (nested_name_specifier);
12764         }
12765     }
12766   /* Indicate whether this class was declared as a `class' or as a
12767      `struct'.  */
12768   if (TREE_CODE (type) == RECORD_TYPE)
12769     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
12770   cp_parser_check_class_key (class_key, type);
12771
12772   /* Enter the scope containing the class; the names of base classes
12773      should be looked up in that context.  For example, given:
12774
12775        struct A { struct B {}; struct C; };
12776        struct A::C : B {};
12777
12778      is valid.  */
12779   if (nested_name_specifier)
12780     pop_p = push_scope (nested_name_specifier);
12781
12782   bases = NULL_TREE;
12783
12784   /* Get the list of base-classes, if there is one.  */
12785   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12786     bases = cp_parser_base_clause (parser);
12787
12788   /* Process the base classes.  */
12789   xref_basetypes (type, bases);
12790
12791   /* Leave the scope given by the nested-name-specifier.  We will
12792      enter the class scope itself while processing the members.  */
12793   if (pop_p)
12794     pop_scope (nested_name_specifier);
12795
12796  done:
12797   if (invalid_explicit_specialization_p)
12798     {
12799       end_specialization ();
12800       --parser->num_template_parameter_lists;
12801     }
12802   *attributes_p = attributes;
12803   return type;
12804 }
12805
12806 /* Parse a class-key.
12807
12808    class-key:
12809      class
12810      struct
12811      union
12812
12813    Returns the kind of class-key specified, or none_type to indicate
12814    error.  */
12815
12816 static enum tag_types
12817 cp_parser_class_key (cp_parser* parser)
12818 {
12819   cp_token *token;
12820   enum tag_types tag_type;
12821
12822   /* Look for the class-key.  */
12823   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
12824   if (!token)
12825     return none_type;
12826
12827   /* Check to see if the TOKEN is a class-key.  */
12828   tag_type = cp_parser_token_is_class_key (token);
12829   if (!tag_type)
12830     cp_parser_error (parser, "expected class-key");
12831   return tag_type;
12832 }
12833
12834 /* Parse an (optional) member-specification.
12835
12836    member-specification:
12837      member-declaration member-specification [opt]
12838      access-specifier : member-specification [opt]  */
12839
12840 static void
12841 cp_parser_member_specification_opt (cp_parser* parser)
12842 {
12843   while (true)
12844     {
12845       cp_token *token;
12846       enum rid keyword;
12847
12848       /* Peek at the next token.  */
12849       token = cp_lexer_peek_token (parser->lexer);
12850       /* If it's a `}', or EOF then we've seen all the members.  */
12851       if (token->type == CPP_CLOSE_BRACE || token->type == CPP_EOF)
12852         break;
12853
12854       /* See if this token is a keyword.  */
12855       keyword = token->keyword;
12856       switch (keyword)
12857         {
12858         case RID_PUBLIC:
12859         case RID_PROTECTED:
12860         case RID_PRIVATE:
12861           /* Consume the access-specifier.  */
12862           cp_lexer_consume_token (parser->lexer);
12863           /* Remember which access-specifier is active.  */
12864           current_access_specifier = token->value;
12865           /* Look for the `:'.  */
12866           cp_parser_require (parser, CPP_COLON, "`:'");
12867           break;
12868
12869         default:
12870           /* Otherwise, the next construction must be a
12871              member-declaration.  */
12872           cp_parser_member_declaration (parser);
12873         }
12874     }
12875 }
12876
12877 /* Parse a member-declaration.
12878
12879    member-declaration:
12880      decl-specifier-seq [opt] member-declarator-list [opt] ;
12881      function-definition ; [opt]
12882      :: [opt] nested-name-specifier template [opt] unqualified-id ;
12883      using-declaration
12884      template-declaration
12885
12886    member-declarator-list:
12887      member-declarator
12888      member-declarator-list , member-declarator
12889
12890    member-declarator:
12891      declarator pure-specifier [opt]
12892      declarator constant-initializer [opt]
12893      identifier [opt] : constant-expression
12894
12895    GNU Extensions:
12896
12897    member-declaration:
12898      __extension__ member-declaration
12899
12900    member-declarator:
12901      declarator attributes [opt] pure-specifier [opt]
12902      declarator attributes [opt] constant-initializer [opt]
12903      identifier [opt] attributes [opt] : constant-expression  */
12904
12905 static void
12906 cp_parser_member_declaration (cp_parser* parser)
12907 {
12908   cp_decl_specifier_seq decl_specifiers;
12909   tree prefix_attributes;
12910   tree decl;
12911   int declares_class_or_enum;
12912   bool friend_p;
12913   cp_token *token;
12914   int saved_pedantic;
12915
12916   /* Check for the `__extension__' keyword.  */
12917   if (cp_parser_extension_opt (parser, &saved_pedantic))
12918     {
12919       /* Recurse.  */
12920       cp_parser_member_declaration (parser);
12921       /* Restore the old value of the PEDANTIC flag.  */
12922       pedantic = saved_pedantic;
12923
12924       return;
12925     }
12926
12927   /* Check for a template-declaration.  */
12928   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
12929     {
12930       /* Parse the template-declaration.  */
12931       cp_parser_template_declaration (parser, /*member_p=*/true);
12932
12933       return;
12934     }
12935
12936   /* Check for a using-declaration.  */
12937   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
12938     {
12939       /* Parse the using-declaration.  */
12940       cp_parser_using_declaration (parser);
12941
12942       return;
12943     }
12944
12945   /* Parse the decl-specifier-seq.  */
12946   cp_parser_decl_specifier_seq (parser,
12947                                 CP_PARSER_FLAGS_OPTIONAL,
12948                                 &decl_specifiers,
12949                                 &declares_class_or_enum);
12950   prefix_attributes = decl_specifiers.attributes;
12951   decl_specifiers.attributes = NULL_TREE;
12952   /* Check for an invalid type-name.  */
12953   if (cp_parser_parse_and_diagnose_invalid_type_name (parser))
12954     return;
12955   /* If there is no declarator, then the decl-specifier-seq should
12956      specify a type.  */
12957   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
12958     {
12959       /* If there was no decl-specifier-seq, and the next token is a
12960          `;', then we have something like:
12961
12962            struct S { ; };
12963
12964          [class.mem]
12965
12966          Each member-declaration shall declare at least one member
12967          name of the class.  */
12968       if (!decl_specifiers.any_specifiers_p)
12969         {
12970           if (pedantic)
12971             pedwarn ("extra semicolon");
12972         }
12973       else
12974         {
12975           tree type;
12976
12977           /* See if this declaration is a friend.  */
12978           friend_p = cp_parser_friend_p (&decl_specifiers);
12979           /* If there were decl-specifiers, check to see if there was
12980              a class-declaration.  */
12981           type = check_tag_decl (&decl_specifiers);
12982           /* Nested classes have already been added to the class, but
12983              a `friend' needs to be explicitly registered.  */
12984           if (friend_p)
12985             {
12986               /* If the `friend' keyword was present, the friend must
12987                  be introduced with a class-key.  */
12988                if (!declares_class_or_enum)
12989                  error ("a class-key must be used when declaring a friend");
12990                /* In this case:
12991
12992                     template <typename T> struct A {
12993                       friend struct A<T>::B;
12994                     };
12995
12996                   A<T>::B will be represented by a TYPENAME_TYPE, and
12997                   therefore not recognized by check_tag_decl.  */
12998                if (!type
12999                    && decl_specifiers.type
13000                    && TYPE_P (decl_specifiers.type))
13001                  type = decl_specifiers.type;
13002                if (!type || !TYPE_P (type))
13003                  error ("friend declaration does not name a class or "
13004                         "function");
13005                else
13006                  make_friend_class (current_class_type, type,
13007                                     /*complain=*/true);
13008             }
13009           /* If there is no TYPE, an error message will already have
13010              been issued.  */
13011           else if (!type || type == error_mark_node)
13012             ;
13013           /* An anonymous aggregate has to be handled specially; such
13014              a declaration really declares a data member (with a
13015              particular type), as opposed to a nested class.  */
13016           else if (ANON_AGGR_TYPE_P (type))
13017             {
13018               /* Remove constructors and such from TYPE, now that we
13019                  know it is an anonymous aggregate.  */
13020               fixup_anonymous_aggr (type);
13021               /* And make the corresponding data member.  */
13022               decl = build_decl (FIELD_DECL, NULL_TREE, type);
13023               /* Add it to the class.  */
13024               finish_member_declaration (decl);
13025             }
13026           else
13027             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
13028         }
13029     }
13030   else
13031     {
13032       /* See if these declarations will be friends.  */
13033       friend_p = cp_parser_friend_p (&decl_specifiers);
13034
13035       /* Keep going until we hit the `;' at the end of the
13036          declaration.  */
13037       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13038         {
13039           tree attributes = NULL_TREE;
13040           tree first_attribute;
13041
13042           /* Peek at the next token.  */
13043           token = cp_lexer_peek_token (parser->lexer);
13044
13045           /* Check for a bitfield declaration.  */
13046           if (token->type == CPP_COLON
13047               || (token->type == CPP_NAME
13048                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
13049                   == CPP_COLON))
13050             {
13051               tree identifier;
13052               tree width;
13053
13054               /* Get the name of the bitfield.  Note that we cannot just
13055                  check TOKEN here because it may have been invalidated by
13056                  the call to cp_lexer_peek_nth_token above.  */
13057               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
13058                 identifier = cp_parser_identifier (parser);
13059               else
13060                 identifier = NULL_TREE;
13061
13062               /* Consume the `:' token.  */
13063               cp_lexer_consume_token (parser->lexer);
13064               /* Get the width of the bitfield.  */
13065               width
13066                 = cp_parser_constant_expression (parser,
13067                                                  /*allow_non_constant=*/false,
13068                                                  NULL);
13069
13070               /* Look for attributes that apply to the bitfield.  */
13071               attributes = cp_parser_attributes_opt (parser);
13072               /* Remember which attributes are prefix attributes and
13073                  which are not.  */
13074               first_attribute = attributes;
13075               /* Combine the attributes.  */
13076               attributes = chainon (prefix_attributes, attributes);
13077
13078               /* Create the bitfield declaration.  */
13079               decl = grokbitfield (identifier
13080                                    ? make_id_declarator (identifier)
13081                                    : NULL,
13082                                    &decl_specifiers,
13083                                    width);
13084               /* Apply the attributes.  */
13085               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
13086             }
13087           else
13088             {
13089               cp_declarator *declarator;
13090               tree initializer;
13091               tree asm_specification;
13092               int ctor_dtor_or_conv_p;
13093
13094               /* Parse the declarator.  */
13095               declarator
13096                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13097                                         &ctor_dtor_or_conv_p,
13098                                         /*parenthesized_p=*/NULL);
13099
13100               /* If something went wrong parsing the declarator, make sure
13101                  that we at least consume some tokens.  */
13102               if (declarator == cp_error_declarator)
13103                 {
13104                   /* Skip to the end of the statement.  */
13105                   cp_parser_skip_to_end_of_statement (parser);
13106                   /* If the next token is not a semicolon, that is
13107                      probably because we just skipped over the body of
13108                      a function.  So, we consume a semicolon if
13109                      present, but do not issue an error message if it
13110                      is not present.  */
13111                   if (cp_lexer_next_token_is (parser->lexer,
13112                                               CPP_SEMICOLON))
13113                     cp_lexer_consume_token (parser->lexer);
13114                   return;
13115                 }
13116
13117               cp_parser_check_for_definition_in_return_type
13118                 (declarator, declares_class_or_enum);
13119
13120               /* Look for an asm-specification.  */
13121               asm_specification = cp_parser_asm_specification_opt (parser);
13122               /* Look for attributes that apply to the declaration.  */
13123               attributes = cp_parser_attributes_opt (parser);
13124               /* Remember which attributes are prefix attributes and
13125                  which are not.  */
13126               first_attribute = attributes;
13127               /* Combine the attributes.  */
13128               attributes = chainon (prefix_attributes, attributes);
13129
13130               /* If it's an `=', then we have a constant-initializer or a
13131                  pure-specifier.  It is not correct to parse the
13132                  initializer before registering the member declaration
13133                  since the member declaration should be in scope while
13134                  its initializer is processed.  However, the rest of the
13135                  front end does not yet provide an interface that allows
13136                  us to handle this correctly.  */
13137               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13138                 {
13139                   /* In [class.mem]:
13140
13141                      A pure-specifier shall be used only in the declaration of
13142                      a virtual function.
13143
13144                      A member-declarator can contain a constant-initializer
13145                      only if it declares a static member of integral or
13146                      enumeration type.
13147
13148                      Therefore, if the DECLARATOR is for a function, we look
13149                      for a pure-specifier; otherwise, we look for a
13150                      constant-initializer.  When we call `grokfield', it will
13151                      perform more stringent semantics checks.  */
13152                   if (declarator->kind == cdk_function)
13153                     initializer = cp_parser_pure_specifier (parser);
13154                   else
13155                     /* Parse the initializer.  */
13156                     initializer = cp_parser_constant_initializer (parser);
13157                 }
13158               /* Otherwise, there is no initializer.  */
13159               else
13160                 initializer = NULL_TREE;
13161
13162               /* See if we are probably looking at a function
13163                  definition.  We are certainly not looking at at a
13164                  member-declarator.  Calling `grokfield' has
13165                  side-effects, so we must not do it unless we are sure
13166                  that we are looking at a member-declarator.  */
13167               if (cp_parser_token_starts_function_definition_p
13168                   (cp_lexer_peek_token (parser->lexer)))
13169                 {
13170                   /* The grammar does not allow a pure-specifier to be
13171                      used when a member function is defined.  (It is
13172                      possible that this fact is an oversight in the
13173                      standard, since a pure function may be defined
13174                      outside of the class-specifier.  */
13175                   if (initializer)
13176                     error ("pure-specifier on function-definition");
13177                   decl = cp_parser_save_member_function_body (parser,
13178                                                               &decl_specifiers,
13179                                                               declarator,
13180                                                               attributes);
13181                   /* If the member was not a friend, declare it here.  */
13182                   if (!friend_p)
13183                     finish_member_declaration (decl);
13184                   /* Peek at the next token.  */
13185                   token = cp_lexer_peek_token (parser->lexer);
13186                   /* If the next token is a semicolon, consume it.  */
13187                   if (token->type == CPP_SEMICOLON)
13188                     cp_lexer_consume_token (parser->lexer);
13189                   return;
13190                 }
13191               else
13192                 {
13193                   /* Create the declaration.  */
13194                   decl = grokfield (declarator, &decl_specifiers,
13195                                     initializer, asm_specification,
13196                                     attributes);
13197                   /* Any initialization must have been from a
13198                      constant-expression.  */
13199                   if (decl && TREE_CODE (decl) == VAR_DECL && initializer)
13200                     DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
13201                 }
13202             }
13203
13204           /* Reset PREFIX_ATTRIBUTES.  */
13205           while (attributes && TREE_CHAIN (attributes) != first_attribute)
13206             attributes = TREE_CHAIN (attributes);
13207           if (attributes)
13208             TREE_CHAIN (attributes) = NULL_TREE;
13209
13210           /* If there is any qualification still in effect, clear it
13211              now; we will be starting fresh with the next declarator.  */
13212           parser->scope = NULL_TREE;
13213           parser->qualifying_scope = NULL_TREE;
13214           parser->object_scope = NULL_TREE;
13215           /* If it's a `,', then there are more declarators.  */
13216           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
13217             cp_lexer_consume_token (parser->lexer);
13218           /* If the next token isn't a `;', then we have a parse error.  */
13219           else if (cp_lexer_next_token_is_not (parser->lexer,
13220                                                CPP_SEMICOLON))
13221             {
13222               cp_parser_error (parser, "expected `;'");
13223               /* Skip tokens until we find a `;'.  */
13224               cp_parser_skip_to_end_of_statement (parser);
13225
13226               break;
13227             }
13228
13229           if (decl)
13230             {
13231               /* Add DECL to the list of members.  */
13232               if (!friend_p)
13233                 finish_member_declaration (decl);
13234
13235               if (TREE_CODE (decl) == FUNCTION_DECL)
13236                 cp_parser_save_default_args (parser, decl);
13237             }
13238         }
13239     }
13240
13241   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
13242 }
13243
13244 /* Parse a pure-specifier.
13245
13246    pure-specifier:
13247      = 0
13248
13249    Returns INTEGER_ZERO_NODE if a pure specifier is found.
13250    Otherwise, ERROR_MARK_NODE is returned.  */
13251
13252 static tree
13253 cp_parser_pure_specifier (cp_parser* parser)
13254 {
13255   cp_token *token;
13256
13257   /* Look for the `=' token.  */
13258   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13259     return error_mark_node;
13260   /* Look for the `0' token.  */
13261   token = cp_parser_require (parser, CPP_NUMBER, "`0'");
13262   /* Unfortunately, this will accept `0L' and `0x00' as well.  We need
13263      to get information from the lexer about how the number was
13264      spelled in order to fix this problem.  */
13265   if (!token || !integer_zerop (token->value))
13266     return error_mark_node;
13267
13268   return integer_zero_node;
13269 }
13270
13271 /* Parse a constant-initializer.
13272
13273    constant-initializer:
13274      = constant-expression
13275
13276    Returns a representation of the constant-expression.  */
13277
13278 static tree
13279 cp_parser_constant_initializer (cp_parser* parser)
13280 {
13281   /* Look for the `=' token.  */
13282   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13283     return error_mark_node;
13284
13285   /* It is invalid to write:
13286
13287        struct S { static const int i = { 7 }; };
13288
13289      */
13290   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13291     {
13292       cp_parser_error (parser,
13293                        "a brace-enclosed initializer is not allowed here");
13294       /* Consume the opening brace.  */
13295       cp_lexer_consume_token (parser->lexer);
13296       /* Skip the initializer.  */
13297       cp_parser_skip_to_closing_brace (parser);
13298       /* Look for the trailing `}'.  */
13299       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13300
13301       return error_mark_node;
13302     }
13303
13304   return cp_parser_constant_expression (parser,
13305                                         /*allow_non_constant=*/false,
13306                                         NULL);
13307 }
13308
13309 /* Derived classes [gram.class.derived] */
13310
13311 /* Parse a base-clause.
13312
13313    base-clause:
13314      : base-specifier-list
13315
13316    base-specifier-list:
13317      base-specifier
13318      base-specifier-list , base-specifier
13319
13320    Returns a TREE_LIST representing the base-classes, in the order in
13321    which they were declared.  The representation of each node is as
13322    described by cp_parser_base_specifier.
13323
13324    In the case that no bases are specified, this function will return
13325    NULL_TREE, not ERROR_MARK_NODE.  */
13326
13327 static tree
13328 cp_parser_base_clause (cp_parser* parser)
13329 {
13330   tree bases = NULL_TREE;
13331
13332   /* Look for the `:' that begins the list.  */
13333   cp_parser_require (parser, CPP_COLON, "`:'");
13334
13335   /* Scan the base-specifier-list.  */
13336   while (true)
13337     {
13338       cp_token *token;
13339       tree base;
13340
13341       /* Look for the base-specifier.  */
13342       base = cp_parser_base_specifier (parser);
13343       /* Add BASE to the front of the list.  */
13344       if (base != error_mark_node)
13345         {
13346           TREE_CHAIN (base) = bases;
13347           bases = base;
13348         }
13349       /* Peek at the next token.  */
13350       token = cp_lexer_peek_token (parser->lexer);
13351       /* If it's not a comma, then the list is complete.  */
13352       if (token->type != CPP_COMMA)
13353         break;
13354       /* Consume the `,'.  */
13355       cp_lexer_consume_token (parser->lexer);
13356     }
13357
13358   /* PARSER->SCOPE may still be non-NULL at this point, if the last
13359      base class had a qualified name.  However, the next name that
13360      appears is certainly not qualified.  */
13361   parser->scope = NULL_TREE;
13362   parser->qualifying_scope = NULL_TREE;
13363   parser->object_scope = NULL_TREE;
13364
13365   return nreverse (bases);
13366 }
13367
13368 /* Parse a base-specifier.
13369
13370    base-specifier:
13371      :: [opt] nested-name-specifier [opt] class-name
13372      virtual access-specifier [opt] :: [opt] nested-name-specifier
13373        [opt] class-name
13374      access-specifier virtual [opt] :: [opt] nested-name-specifier
13375        [opt] class-name
13376
13377    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
13378    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
13379    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
13380    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
13381
13382 static tree
13383 cp_parser_base_specifier (cp_parser* parser)
13384 {
13385   cp_token *token;
13386   bool done = false;
13387   bool virtual_p = false;
13388   bool duplicate_virtual_error_issued_p = false;
13389   bool duplicate_access_error_issued_p = false;
13390   bool class_scope_p, template_p;
13391   tree access = access_default_node;
13392   tree type;
13393
13394   /* Process the optional `virtual' and `access-specifier'.  */
13395   while (!done)
13396     {
13397       /* Peek at the next token.  */
13398       token = cp_lexer_peek_token (parser->lexer);
13399       /* Process `virtual'.  */
13400       switch (token->keyword)
13401         {
13402         case RID_VIRTUAL:
13403           /* If `virtual' appears more than once, issue an error.  */
13404           if (virtual_p && !duplicate_virtual_error_issued_p)
13405             {
13406               cp_parser_error (parser,
13407                                "`virtual' specified more than once in base-specified");
13408               duplicate_virtual_error_issued_p = true;
13409             }
13410
13411           virtual_p = true;
13412
13413           /* Consume the `virtual' token.  */
13414           cp_lexer_consume_token (parser->lexer);
13415
13416           break;
13417
13418         case RID_PUBLIC:
13419         case RID_PROTECTED:
13420         case RID_PRIVATE:
13421           /* If more than one access specifier appears, issue an
13422              error.  */
13423           if (access != access_default_node
13424               && !duplicate_access_error_issued_p)
13425             {
13426               cp_parser_error (parser,
13427                                "more than one access specifier in base-specified");
13428               duplicate_access_error_issued_p = true;
13429             }
13430
13431           access = ridpointers[(int) token->keyword];
13432
13433           /* Consume the access-specifier.  */
13434           cp_lexer_consume_token (parser->lexer);
13435
13436           break;
13437
13438         default:
13439           done = true;
13440           break;
13441         }
13442     }
13443   /* It is not uncommon to see programs mechanically, erroneously, use
13444      the 'typename' keyword to denote (dependent) qualified types
13445      as base classes.  */
13446   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
13447     {
13448       if (!processing_template_decl)
13449         error ("keyword `typename' not allowed outside of templates");
13450       else
13451         error ("keyword `typename' not allowed in this context "
13452                "(the base class is implicitly a type)");
13453       cp_lexer_consume_token (parser->lexer);
13454     }
13455
13456   /* Look for the optional `::' operator.  */
13457   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
13458   /* Look for the nested-name-specifier.  The simplest way to
13459      implement:
13460
13461        [temp.res]
13462
13463        The keyword `typename' is not permitted in a base-specifier or
13464        mem-initializer; in these contexts a qualified name that
13465        depends on a template-parameter is implicitly assumed to be a
13466        type name.
13467
13468      is to pretend that we have seen the `typename' keyword at this
13469      point.  */
13470   cp_parser_nested_name_specifier_opt (parser,
13471                                        /*typename_keyword_p=*/true,
13472                                        /*check_dependency_p=*/true,
13473                                        /*type_p=*/true,
13474                                        /*is_declaration=*/true);
13475   /* If the base class is given by a qualified name, assume that names
13476      we see are type names or templates, as appropriate.  */
13477   class_scope_p = (parser->scope && TYPE_P (parser->scope));
13478   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
13479
13480   /* Finally, look for the class-name.  */
13481   type = cp_parser_class_name (parser,
13482                                class_scope_p,
13483                                template_p,
13484                                /*type_p=*/true,
13485                                /*check_dependency_p=*/true,
13486                                /*class_head_p=*/false,
13487                                /*is_declaration=*/true);
13488
13489   if (type == error_mark_node)
13490     return error_mark_node;
13491
13492   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
13493 }
13494
13495 /* Exception handling [gram.exception] */
13496
13497 /* Parse an (optional) exception-specification.
13498
13499    exception-specification:
13500      throw ( type-id-list [opt] )
13501
13502    Returns a TREE_LIST representing the exception-specification.  The
13503    TREE_VALUE of each node is a type.  */
13504
13505 static tree
13506 cp_parser_exception_specification_opt (cp_parser* parser)
13507 {
13508   cp_token *token;
13509   tree type_id_list;
13510
13511   /* Peek at the next token.  */
13512   token = cp_lexer_peek_token (parser->lexer);
13513   /* If it's not `throw', then there's no exception-specification.  */
13514   if (!cp_parser_is_keyword (token, RID_THROW))
13515     return NULL_TREE;
13516
13517   /* Consume the `throw'.  */
13518   cp_lexer_consume_token (parser->lexer);
13519
13520   /* Look for the `('.  */
13521   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13522
13523   /* Peek at the next token.  */
13524   token = cp_lexer_peek_token (parser->lexer);
13525   /* If it's not a `)', then there is a type-id-list.  */
13526   if (token->type != CPP_CLOSE_PAREN)
13527     {
13528       const char *saved_message;
13529
13530       /* Types may not be defined in an exception-specification.  */
13531       saved_message = parser->type_definition_forbidden_message;
13532       parser->type_definition_forbidden_message
13533         = "types may not be defined in an exception-specification";
13534       /* Parse the type-id-list.  */
13535       type_id_list = cp_parser_type_id_list (parser);
13536       /* Restore the saved message.  */
13537       parser->type_definition_forbidden_message = saved_message;
13538     }
13539   else
13540     type_id_list = empty_except_spec;
13541
13542   /* Look for the `)'.  */
13543   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13544
13545   return type_id_list;
13546 }
13547
13548 /* Parse an (optional) type-id-list.
13549
13550    type-id-list:
13551      type-id
13552      type-id-list , type-id
13553
13554    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
13555    in the order that the types were presented.  */
13556
13557 static tree
13558 cp_parser_type_id_list (cp_parser* parser)
13559 {
13560   tree types = NULL_TREE;
13561
13562   while (true)
13563     {
13564       cp_token *token;
13565       tree type;
13566
13567       /* Get the next type-id.  */
13568       type = cp_parser_type_id (parser);
13569       /* Add it to the list.  */
13570       types = add_exception_specifier (types, type, /*complain=*/1);
13571       /* Peek at the next token.  */
13572       token = cp_lexer_peek_token (parser->lexer);
13573       /* If it is not a `,', we are done.  */
13574       if (token->type != CPP_COMMA)
13575         break;
13576       /* Consume the `,'.  */
13577       cp_lexer_consume_token (parser->lexer);
13578     }
13579
13580   return nreverse (types);
13581 }
13582
13583 /* Parse a try-block.
13584
13585    try-block:
13586      try compound-statement handler-seq  */
13587
13588 static tree
13589 cp_parser_try_block (cp_parser* parser)
13590 {
13591   tree try_block;
13592
13593   cp_parser_require_keyword (parser, RID_TRY, "`try'");
13594   try_block = begin_try_block ();
13595   cp_parser_compound_statement (parser, NULL, true);
13596   finish_try_block (try_block);
13597   cp_parser_handler_seq (parser);
13598   finish_handler_sequence (try_block);
13599
13600   return try_block;
13601 }
13602
13603 /* Parse a function-try-block.
13604
13605    function-try-block:
13606      try ctor-initializer [opt] function-body handler-seq  */
13607
13608 static bool
13609 cp_parser_function_try_block (cp_parser* parser)
13610 {
13611   tree try_block;
13612   bool ctor_initializer_p;
13613
13614   /* Look for the `try' keyword.  */
13615   if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
13616     return false;
13617   /* Let the rest of the front-end know where we are.  */
13618   try_block = begin_function_try_block ();
13619   /* Parse the function-body.  */
13620   ctor_initializer_p
13621     = cp_parser_ctor_initializer_opt_and_function_body (parser);
13622   /* We're done with the `try' part.  */
13623   finish_function_try_block (try_block);
13624   /* Parse the handlers.  */
13625   cp_parser_handler_seq (parser);
13626   /* We're done with the handlers.  */
13627   finish_function_handler_sequence (try_block);
13628
13629   return ctor_initializer_p;
13630 }
13631
13632 /* Parse a handler-seq.
13633
13634    handler-seq:
13635      handler handler-seq [opt]  */
13636
13637 static void
13638 cp_parser_handler_seq (cp_parser* parser)
13639 {
13640   while (true)
13641     {
13642       cp_token *token;
13643
13644       /* Parse the handler.  */
13645       cp_parser_handler (parser);
13646       /* Peek at the next token.  */
13647       token = cp_lexer_peek_token (parser->lexer);
13648       /* If it's not `catch' then there are no more handlers.  */
13649       if (!cp_parser_is_keyword (token, RID_CATCH))
13650         break;
13651     }
13652 }
13653
13654 /* Parse a handler.
13655
13656    handler:
13657      catch ( exception-declaration ) compound-statement  */
13658
13659 static void
13660 cp_parser_handler (cp_parser* parser)
13661 {
13662   tree handler;
13663   tree declaration;
13664
13665   cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
13666   handler = begin_handler ();
13667   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13668   declaration = cp_parser_exception_declaration (parser);
13669   finish_handler_parms (declaration, handler);
13670   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13671   cp_parser_compound_statement (parser, NULL, false);
13672   finish_handler (handler);
13673 }
13674
13675 /* Parse an exception-declaration.
13676
13677    exception-declaration:
13678      type-specifier-seq declarator
13679      type-specifier-seq abstract-declarator
13680      type-specifier-seq
13681      ...
13682
13683    Returns a VAR_DECL for the declaration, or NULL_TREE if the
13684    ellipsis variant is used.  */
13685
13686 static tree
13687 cp_parser_exception_declaration (cp_parser* parser)
13688 {
13689   tree decl;
13690   cp_decl_specifier_seq type_specifiers;
13691   cp_declarator *declarator;
13692   const char *saved_message;
13693
13694   /* If it's an ellipsis, it's easy to handle.  */
13695   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
13696     {
13697       /* Consume the `...' token.  */
13698       cp_lexer_consume_token (parser->lexer);
13699       return NULL_TREE;
13700     }
13701
13702   /* Types may not be defined in exception-declarations.  */
13703   saved_message = parser->type_definition_forbidden_message;
13704   parser->type_definition_forbidden_message
13705     = "types may not be defined in exception-declarations";
13706
13707   /* Parse the type-specifier-seq.  */
13708   cp_parser_type_specifier_seq (parser, &type_specifiers);
13709   /* If it's a `)', then there is no declarator.  */
13710   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
13711     declarator = NULL;
13712   else
13713     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
13714                                        /*ctor_dtor_or_conv_p=*/NULL,
13715                                        /*parenthesized_p=*/NULL);
13716
13717   /* Restore the saved message.  */
13718   parser->type_definition_forbidden_message = saved_message;
13719
13720   if (type_specifiers.any_specifiers_p)
13721     {
13722       decl = grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
13723       if (decl == NULL_TREE)
13724         error ("invalid catch parameter");
13725     }
13726   else
13727     decl = NULL_TREE;
13728
13729   return decl;
13730 }
13731
13732 /* Parse a throw-expression.
13733
13734    throw-expression:
13735      throw assignment-expression [opt]
13736
13737    Returns a THROW_EXPR representing the throw-expression.  */
13738
13739 static tree
13740 cp_parser_throw_expression (cp_parser* parser)
13741 {
13742   tree expression;
13743   cp_token* token;
13744
13745   cp_parser_require_keyword (parser, RID_THROW, "`throw'");
13746   token = cp_lexer_peek_token (parser->lexer);
13747   /* Figure out whether or not there is an assignment-expression
13748      following the "throw" keyword.  */
13749   if (token->type == CPP_COMMA
13750       || token->type == CPP_SEMICOLON
13751       || token->type == CPP_CLOSE_PAREN
13752       || token->type == CPP_CLOSE_SQUARE
13753       || token->type == CPP_CLOSE_BRACE
13754       || token->type == CPP_COLON)
13755     expression = NULL_TREE;
13756   else
13757     expression = cp_parser_assignment_expression (parser);
13758
13759   return build_throw (expression);
13760 }
13761
13762 /* GNU Extensions */
13763
13764 /* Parse an (optional) asm-specification.
13765
13766    asm-specification:
13767      asm ( string-literal )
13768
13769    If the asm-specification is present, returns a STRING_CST
13770    corresponding to the string-literal.  Otherwise, returns
13771    NULL_TREE.  */
13772
13773 static tree
13774 cp_parser_asm_specification_opt (cp_parser* parser)
13775 {
13776   cp_token *token;
13777   tree asm_specification;
13778
13779   /* Peek at the next token.  */
13780   token = cp_lexer_peek_token (parser->lexer);
13781   /* If the next token isn't the `asm' keyword, then there's no
13782      asm-specification.  */
13783   if (!cp_parser_is_keyword (token, RID_ASM))
13784     return NULL_TREE;
13785
13786   /* Consume the `asm' token.  */
13787   cp_lexer_consume_token (parser->lexer);
13788   /* Look for the `('.  */
13789   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13790
13791   /* Look for the string-literal.  */
13792   token = cp_parser_require (parser, CPP_STRING, "string-literal");
13793   if (token)
13794     asm_specification = token->value;
13795   else
13796     asm_specification = NULL_TREE;
13797
13798   /* Look for the `)'.  */
13799   cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
13800
13801   return asm_specification;
13802 }
13803
13804 /* Parse an asm-operand-list.
13805
13806    asm-operand-list:
13807      asm-operand
13808      asm-operand-list , asm-operand
13809
13810    asm-operand:
13811      string-literal ( expression )
13812      [ string-literal ] string-literal ( expression )
13813
13814    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
13815    each node is the expression.  The TREE_PURPOSE is itself a
13816    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
13817    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
13818    is a STRING_CST for the string literal before the parenthesis.  */
13819
13820 static tree
13821 cp_parser_asm_operand_list (cp_parser* parser)
13822 {
13823   tree asm_operands = NULL_TREE;
13824
13825   while (true)
13826     {
13827       tree string_literal;
13828       tree expression;
13829       tree name;
13830       cp_token *token;
13831
13832       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
13833         {
13834           /* Consume the `[' token.  */
13835           cp_lexer_consume_token (parser->lexer);
13836           /* Read the operand name.  */
13837           name = cp_parser_identifier (parser);
13838           if (name != error_mark_node)
13839             name = build_string (IDENTIFIER_LENGTH (name),
13840                                  IDENTIFIER_POINTER (name));
13841           /* Look for the closing `]'.  */
13842           cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
13843         }
13844       else
13845         name = NULL_TREE;
13846       /* Look for the string-literal.  */
13847       token = cp_parser_require (parser, CPP_STRING, "string-literal");
13848       string_literal = token ? token->value : error_mark_node;
13849       c_lex_string_translate = 1;
13850       /* Look for the `('.  */
13851       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13852       /* Parse the expression.  */
13853       expression = cp_parser_expression (parser);
13854       /* Look for the `)'.  */
13855       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13856       c_lex_string_translate = 0;
13857       /* Add this operand to the list.  */
13858       asm_operands = tree_cons (build_tree_list (name, string_literal),
13859                                 expression,
13860                                 asm_operands);
13861       /* If the next token is not a `,', there are no more
13862          operands.  */
13863       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13864         break;
13865       /* Consume the `,'.  */
13866       cp_lexer_consume_token (parser->lexer);
13867     }
13868
13869   return nreverse (asm_operands);
13870 }
13871
13872 /* Parse an asm-clobber-list.
13873
13874    asm-clobber-list:
13875      string-literal
13876      asm-clobber-list , string-literal
13877
13878    Returns a TREE_LIST, indicating the clobbers in the order that they
13879    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
13880
13881 static tree
13882 cp_parser_asm_clobber_list (cp_parser* parser)
13883 {
13884   tree clobbers = NULL_TREE;
13885
13886   while (true)
13887     {
13888       cp_token *token;
13889       tree string_literal;
13890
13891       /* Look for the string literal.  */
13892       token = cp_parser_require (parser, CPP_STRING, "string-literal");
13893       string_literal = token ? token->value : error_mark_node;
13894       /* Add it to the list.  */
13895       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
13896       /* If the next token is not a `,', then the list is
13897          complete.  */
13898       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13899         break;
13900       /* Consume the `,' token.  */
13901       cp_lexer_consume_token (parser->lexer);
13902     }
13903
13904   return clobbers;
13905 }
13906
13907 /* Parse an (optional) series of attributes.
13908
13909    attributes:
13910      attributes attribute
13911
13912    attribute:
13913      __attribute__ (( attribute-list [opt] ))
13914
13915    The return value is as for cp_parser_attribute_list.  */
13916
13917 static tree
13918 cp_parser_attributes_opt (cp_parser* parser)
13919 {
13920   tree attributes = NULL_TREE;
13921
13922   while (true)
13923     {
13924       cp_token *token;
13925       tree attribute_list;
13926
13927       /* Peek at the next token.  */
13928       token = cp_lexer_peek_token (parser->lexer);
13929       /* If it's not `__attribute__', then we're done.  */
13930       if (token->keyword != RID_ATTRIBUTE)
13931         break;
13932
13933       /* Consume the `__attribute__' keyword.  */
13934       cp_lexer_consume_token (parser->lexer);
13935       /* Look for the two `(' tokens.  */
13936       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13937       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13938
13939       /* Peek at the next token.  */
13940       token = cp_lexer_peek_token (parser->lexer);
13941       if (token->type != CPP_CLOSE_PAREN)
13942         /* Parse the attribute-list.  */
13943         attribute_list = cp_parser_attribute_list (parser);
13944       else
13945         /* If the next token is a `)', then there is no attribute
13946            list.  */
13947         attribute_list = NULL;
13948
13949       /* Look for the two `)' tokens.  */
13950       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13951       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13952
13953       /* Add these new attributes to the list.  */
13954       attributes = chainon (attributes, attribute_list);
13955     }
13956
13957   return attributes;
13958 }
13959
13960 /* Parse an attribute-list.
13961
13962    attribute-list:
13963      attribute
13964      attribute-list , attribute
13965
13966    attribute:
13967      identifier
13968      identifier ( identifier )
13969      identifier ( identifier , expression-list )
13970      identifier ( expression-list )
13971
13972    Returns a TREE_LIST.  Each node corresponds to an attribute.  THe
13973    TREE_PURPOSE of each node is the identifier indicating which
13974    attribute is in use.  The TREE_VALUE represents the arguments, if
13975    any.  */
13976
13977 static tree
13978 cp_parser_attribute_list (cp_parser* parser)
13979 {
13980   tree attribute_list = NULL_TREE;
13981
13982   c_lex_string_translate = 0;
13983   while (true)
13984     {
13985       cp_token *token;
13986       tree identifier;
13987       tree attribute;
13988
13989       /* Look for the identifier.  We also allow keywords here; for
13990          example `__attribute__ ((const))' is legal.  */
13991       token = cp_lexer_peek_token (parser->lexer);
13992       if (token->type != CPP_NAME
13993           && token->type != CPP_KEYWORD)
13994         return error_mark_node;
13995       /* Consume the token.  */
13996       token = cp_lexer_consume_token (parser->lexer);
13997
13998       /* Save away the identifier that indicates which attribute this is.  */
13999       identifier = token->value;
14000       attribute = build_tree_list (identifier, NULL_TREE);
14001
14002       /* Peek at the next token.  */
14003       token = cp_lexer_peek_token (parser->lexer);
14004       /* If it's an `(', then parse the attribute arguments.  */
14005       if (token->type == CPP_OPEN_PAREN)
14006         {
14007           tree arguments;
14008
14009           arguments = (cp_parser_parenthesized_expression_list
14010                        (parser, true, /*non_constant_p=*/NULL));
14011           /* Save the identifier and arguments away.  */
14012           TREE_VALUE (attribute) = arguments;
14013         }
14014
14015       /* Add this attribute to the list.  */
14016       TREE_CHAIN (attribute) = attribute_list;
14017       attribute_list = attribute;
14018
14019       /* Now, look for more attributes.  */
14020       token = cp_lexer_peek_token (parser->lexer);
14021       /* If the next token isn't a `,', we're done.  */
14022       if (token->type != CPP_COMMA)
14023         break;
14024
14025       /* Consume the comma and keep going.  */
14026       cp_lexer_consume_token (parser->lexer);
14027     }
14028   c_lex_string_translate = 1;
14029
14030   /* We built up the list in reverse order.  */
14031   return nreverse (attribute_list);
14032 }
14033
14034 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
14035    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
14036    current value of the PEDANTIC flag, regardless of whether or not
14037    the `__extension__' keyword is present.  The caller is responsible
14038    for restoring the value of the PEDANTIC flag.  */
14039
14040 static bool
14041 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
14042 {
14043   /* Save the old value of the PEDANTIC flag.  */
14044   *saved_pedantic = pedantic;
14045
14046   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
14047     {
14048       /* Consume the `__extension__' token.  */
14049       cp_lexer_consume_token (parser->lexer);
14050       /* We're not being pedantic while the `__extension__' keyword is
14051          in effect.  */
14052       pedantic = 0;
14053
14054       return true;
14055     }
14056
14057   return false;
14058 }
14059
14060 /* Parse a label declaration.
14061
14062    label-declaration:
14063      __label__ label-declarator-seq ;
14064
14065    label-declarator-seq:
14066      identifier , label-declarator-seq
14067      identifier  */
14068
14069 static void
14070 cp_parser_label_declaration (cp_parser* parser)
14071 {
14072   /* Look for the `__label__' keyword.  */
14073   cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
14074
14075   while (true)
14076     {
14077       tree identifier;
14078
14079       /* Look for an identifier.  */
14080       identifier = cp_parser_identifier (parser);
14081       /* Declare it as a lobel.  */
14082       finish_label_decl (identifier);
14083       /* If the next token is a `;', stop.  */
14084       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14085         break;
14086       /* Look for the `,' separating the label declarations.  */
14087       cp_parser_require (parser, CPP_COMMA, "`,'");
14088     }
14089
14090   /* Look for the final `;'.  */
14091   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14092 }
14093
14094 /* Support Functions */
14095
14096 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
14097    NAME should have one of the representations used for an
14098    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
14099    is returned.  If PARSER->SCOPE is a dependent type, then a
14100    SCOPE_REF is returned.
14101
14102    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
14103    returned; the name was already resolved when the TEMPLATE_ID_EXPR
14104    was formed.  Abstractly, such entities should not be passed to this
14105    function, because they do not need to be looked up, but it is
14106    simpler to check for this special case here, rather than at the
14107    call-sites.
14108
14109    In cases not explicitly covered above, this function returns a
14110    DECL, OVERLOAD, or baselink representing the result of the lookup.
14111    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
14112    is returned.
14113
14114    If IS_TYPE is TRUE, bindings that do not refer to types are
14115    ignored.
14116
14117    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
14118    ignored.
14119
14120    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
14121    are ignored.
14122
14123    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
14124    types.  */
14125
14126 static tree
14127 cp_parser_lookup_name (cp_parser *parser, tree name,
14128                        bool is_type, bool is_template, bool is_namespace,
14129                        bool check_dependency)
14130 {
14131   tree decl;
14132   tree object_type = parser->context->object_type;
14133
14134   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
14135      no longer valid.  Note that if we are parsing tentatively, and
14136      the parse fails, OBJECT_TYPE will be automatically restored.  */
14137   parser->context->object_type = NULL_TREE;
14138
14139   if (name == error_mark_node)
14140     return error_mark_node;
14141
14142   /* A template-id has already been resolved; there is no lookup to
14143      do.  */
14144   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
14145     return name;
14146   if (BASELINK_P (name))
14147     {
14148       my_friendly_assert ((TREE_CODE (BASELINK_FUNCTIONS (name))
14149                            == TEMPLATE_ID_EXPR),
14150                           20020909);
14151       return name;
14152     }
14153
14154   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
14155      it should already have been checked to make sure that the name
14156      used matches the type being destroyed.  */
14157   if (TREE_CODE (name) == BIT_NOT_EXPR)
14158     {
14159       tree type;
14160
14161       /* Figure out to which type this destructor applies.  */
14162       if (parser->scope)
14163         type = parser->scope;
14164       else if (object_type)
14165         type = object_type;
14166       else
14167         type = current_class_type;
14168       /* If that's not a class type, there is no destructor.  */
14169       if (!type || !CLASS_TYPE_P (type))
14170         return error_mark_node;
14171       if (!CLASSTYPE_DESTRUCTORS (type))
14172           return error_mark_node;
14173       /* If it was a class type, return the destructor.  */
14174       return CLASSTYPE_DESTRUCTORS (type);
14175     }
14176
14177   /* By this point, the NAME should be an ordinary identifier.  If
14178      the id-expression was a qualified name, the qualifying scope is
14179      stored in PARSER->SCOPE at this point.  */
14180   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE,
14181                       20000619);
14182
14183   /* Perform the lookup.  */
14184   if (parser->scope)
14185     {
14186       bool dependent_p;
14187
14188       if (parser->scope == error_mark_node)
14189         return error_mark_node;
14190
14191       /* If the SCOPE is dependent, the lookup must be deferred until
14192          the template is instantiated -- unless we are explicitly
14193          looking up names in uninstantiated templates.  Even then, we
14194          cannot look up the name if the scope is not a class type; it
14195          might, for example, be a template type parameter.  */
14196       dependent_p = (TYPE_P (parser->scope)
14197                      && !(parser->in_declarator_p
14198                           && currently_open_class (parser->scope))
14199                      && dependent_type_p (parser->scope));
14200       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
14201            && dependent_p)
14202         {
14203           if (is_type)
14204             /* The resolution to Core Issue 180 says that `struct A::B'
14205                should be considered a type-name, even if `A' is
14206                dependent.  */
14207             decl = TYPE_NAME (make_typename_type (parser->scope,
14208                                                   name,
14209                                                   /*complain=*/1));
14210           else if (is_template)
14211             decl = make_unbound_class_template (parser->scope,
14212                                                 name,
14213                                                 /*complain=*/1);
14214           else
14215             decl = build_nt (SCOPE_REF, parser->scope, name);
14216         }
14217       else
14218         {
14219           bool pop_p = false;
14220
14221           /* If PARSER->SCOPE is a dependent type, then it must be a
14222              class type, and we must not be checking dependencies;
14223              otherwise, we would have processed this lookup above.  So
14224              that PARSER->SCOPE is not considered a dependent base by
14225              lookup_member, we must enter the scope here.  */
14226           if (dependent_p)
14227             pop_p = push_scope (parser->scope);
14228           /* If the PARSER->SCOPE is a a template specialization, it
14229              may be instantiated during name lookup.  In that case,
14230              errors may be issued.  Even if we rollback the current
14231              tentative parse, those errors are valid.  */
14232           decl = lookup_qualified_name (parser->scope, name, is_type,
14233                                         /*complain=*/true);
14234           if (pop_p)
14235             pop_scope (parser->scope);
14236         }
14237       parser->qualifying_scope = parser->scope;
14238       parser->object_scope = NULL_TREE;
14239     }
14240   else if (object_type)
14241     {
14242       tree object_decl = NULL_TREE;
14243       /* Look up the name in the scope of the OBJECT_TYPE, unless the
14244          OBJECT_TYPE is not a class.  */
14245       if (CLASS_TYPE_P (object_type))
14246         /* If the OBJECT_TYPE is a template specialization, it may
14247            be instantiated during name lookup.  In that case, errors
14248            may be issued.  Even if we rollback the current tentative
14249            parse, those errors are valid.  */
14250         object_decl = lookup_member (object_type,
14251                                      name,
14252                                      /*protect=*/0, is_type);
14253       /* Look it up in the enclosing context, too.  */
14254       decl = lookup_name_real (name, is_type, /*nonclass=*/0,
14255                                /*block_p=*/true, is_namespace,
14256                                /*flags=*/0);
14257       parser->object_scope = object_type;
14258       parser->qualifying_scope = NULL_TREE;
14259       if (object_decl)
14260         decl = object_decl;
14261     }
14262   else
14263     {
14264       decl = lookup_name_real (name, is_type, /*nonclass=*/0,
14265                                /*block_p=*/true, is_namespace,
14266                                /*flags=*/0);
14267       parser->qualifying_scope = NULL_TREE;
14268       parser->object_scope = NULL_TREE;
14269     }
14270
14271   /* If the lookup failed, let our caller know.  */
14272   if (!decl
14273       || decl == error_mark_node
14274       || (TREE_CODE (decl) == FUNCTION_DECL
14275           && DECL_ANTICIPATED (decl)))
14276     return error_mark_node;
14277
14278   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
14279   if (TREE_CODE (decl) == TREE_LIST)
14280     {
14281       /* The error message we have to print is too complicated for
14282          cp_parser_error, so we incorporate its actions directly.  */
14283       if (!cp_parser_simulate_error (parser))
14284         {
14285           error ("reference to `%D' is ambiguous", name);
14286           print_candidates (decl);
14287         }
14288       return error_mark_node;
14289     }
14290
14291   my_friendly_assert (DECL_P (decl)
14292                       || TREE_CODE (decl) == OVERLOAD
14293                       || TREE_CODE (decl) == SCOPE_REF
14294                       || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
14295                       || BASELINK_P (decl),
14296                       20000619);
14297
14298   /* If we have resolved the name of a member declaration, check to
14299      see if the declaration is accessible.  When the name resolves to
14300      set of overloaded functions, accessibility is checked when
14301      overload resolution is done.
14302
14303      During an explicit instantiation, access is not checked at all,
14304      as per [temp.explicit].  */
14305   if (DECL_P (decl))
14306     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
14307
14308   return decl;
14309 }
14310
14311 /* Like cp_parser_lookup_name, but for use in the typical case where
14312    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
14313    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
14314
14315 static tree
14316 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
14317 {
14318   return cp_parser_lookup_name (parser, name,
14319                                 /*is_type=*/false,
14320                                 /*is_template=*/false,
14321                                 /*is_namespace=*/false,
14322                                 /*check_dependency=*/true);
14323 }
14324
14325 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
14326    the current context, return the TYPE_DECL.  If TAG_NAME_P is
14327    true, the DECL indicates the class being defined in a class-head,
14328    or declared in an elaborated-type-specifier.
14329
14330    Otherwise, return DECL.  */
14331
14332 static tree
14333 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
14334 {
14335   /* If the TEMPLATE_DECL is being declared as part of a class-head,
14336      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
14337
14338        struct A {
14339          template <typename T> struct B;
14340        };
14341
14342        template <typename T> struct A::B {};
14343
14344      Similarly, in a elaborated-type-specifier:
14345
14346        namespace N { struct X{}; }
14347
14348        struct A {
14349          template <typename T> friend struct N::X;
14350        };
14351
14352      However, if the DECL refers to a class type, and we are in
14353      the scope of the class, then the name lookup automatically
14354      finds the TYPE_DECL created by build_self_reference rather
14355      than a TEMPLATE_DECL.  For example, in:
14356
14357        template <class T> struct S {
14358          S s;
14359        };
14360
14361      there is no need to handle such case.  */
14362
14363   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
14364     return DECL_TEMPLATE_RESULT (decl);
14365
14366   return decl;
14367 }
14368
14369 /* If too many, or too few, template-parameter lists apply to the
14370    declarator, issue an error message.  Returns TRUE if all went well,
14371    and FALSE otherwise.  */
14372
14373 static bool
14374 cp_parser_check_declarator_template_parameters (cp_parser* parser,
14375                                                 cp_declarator *declarator)
14376 {
14377   unsigned num_templates;
14378
14379   /* We haven't seen any classes that involve template parameters yet.  */
14380   num_templates = 0;
14381
14382   switch (declarator->kind)
14383     {
14384     case cdk_id:
14385       if (TREE_CODE (declarator->u.id.name) == SCOPE_REF)
14386         {
14387           tree scope;
14388           tree member;
14389
14390           scope = TREE_OPERAND (declarator->u.id.name, 0);
14391           member = TREE_OPERAND (declarator->u.id.name, 1);
14392
14393           while (scope && CLASS_TYPE_P (scope))
14394             {
14395               /* You're supposed to have one `template <...>'
14396                  for every template class, but you don't need one
14397                  for a full specialization.  For example:
14398
14399                  template <class T> struct S{};
14400                  template <> struct S<int> { void f(); };
14401                  void S<int>::f () {}
14402
14403                  is correct; there shouldn't be a `template <>' for
14404                  the definition of `S<int>::f'.  */
14405               if (CLASSTYPE_TEMPLATE_INFO (scope)
14406                   && (CLASSTYPE_TEMPLATE_INSTANTIATION (scope)
14407                       || uses_template_parms (CLASSTYPE_TI_ARGS (scope)))
14408                   && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
14409                 ++num_templates;
14410
14411               scope = TYPE_CONTEXT (scope);
14412             }
14413         }
14414
14415       /* If the DECLARATOR has the form `X<y>' then it uses one
14416          additional level of template parameters.  */
14417       if (TREE_CODE (declarator->u.id.name) == TEMPLATE_ID_EXPR)
14418         ++num_templates;
14419
14420       return cp_parser_check_template_parameters (parser,
14421                                                   num_templates);
14422
14423     case cdk_function:
14424     case cdk_array:
14425     case cdk_pointer:
14426     case cdk_reference:
14427     case cdk_ptrmem:
14428       return (cp_parser_check_declarator_template_parameters
14429               (parser, declarator->declarator));
14430
14431     case cdk_error:
14432       return true;
14433
14434     default:
14435       abort ();
14436       return false;
14437     }
14438 }
14439
14440 /* NUM_TEMPLATES were used in the current declaration.  If that is
14441    invalid, return FALSE and issue an error messages.  Otherwise,
14442    return TRUE.  */
14443
14444 static bool
14445 cp_parser_check_template_parameters (cp_parser* parser,
14446                                      unsigned num_templates)
14447 {
14448   /* If there are more template classes than parameter lists, we have
14449      something like:
14450
14451        template <class T> void S<T>::R<T>::f ();  */
14452   if (parser->num_template_parameter_lists < num_templates)
14453     {
14454       error ("too few template-parameter-lists");
14455       return false;
14456     }
14457   /* If there are the same number of template classes and parameter
14458      lists, that's OK.  */
14459   if (parser->num_template_parameter_lists == num_templates)
14460     return true;
14461   /* If there are more, but only one more, then we are referring to a
14462      member template.  That's OK too.  */
14463   if (parser->num_template_parameter_lists == num_templates + 1)
14464       return true;
14465   /* Otherwise, there are too many template parameter lists.  We have
14466      something like:
14467
14468      template <class T> template <class U> void S::f();  */
14469   error ("too many template-parameter-lists");
14470   return false;
14471 }
14472
14473 /* Parse a binary-expression of the general form:
14474
14475    binary-expression:
14476      <expr>
14477      binary-expression <token> <expr>
14478
14479    The TOKEN_TREE_MAP maps <token> types to <expr> codes.  FN is used
14480    to parser the <expr>s.  If the first production is used, then the
14481    value returned by FN is returned directly.  Otherwise, a node with
14482    the indicated EXPR_TYPE is returned, with operands corresponding to
14483    the two sub-expressions.  */
14484
14485 static tree
14486 cp_parser_binary_expression (cp_parser* parser,
14487                              const cp_parser_token_tree_map token_tree_map,
14488                              cp_parser_expression_fn fn)
14489 {
14490   tree lhs;
14491
14492   /* Parse the first expression.  */
14493   lhs = (*fn) (parser);
14494   /* Now, look for more expressions.  */
14495   while (true)
14496     {
14497       cp_token *token;
14498       const cp_parser_token_tree_map_node *map_node;
14499       tree rhs;
14500
14501       /* Peek at the next token.  */
14502       token = cp_lexer_peek_token (parser->lexer);
14503       /* If the token is `>', and that's not an operator at the
14504          moment, then we're done.  */
14505       if (token->type == CPP_GREATER
14506           && !parser->greater_than_is_operator_p)
14507         break;
14508       /* If we find one of the tokens we want, build the corresponding
14509          tree representation.  */
14510       for (map_node = token_tree_map;
14511            map_node->token_type != CPP_EOF;
14512            ++map_node)
14513         if (map_node->token_type == token->type)
14514           {
14515             /* Assume that an overloaded operator will not be used.  */
14516             bool overloaded_p = false;
14517
14518             /* Consume the operator token.  */
14519             cp_lexer_consume_token (parser->lexer);
14520             /* Parse the right-hand side of the expression.  */
14521             rhs = (*fn) (parser);
14522             /* Build the binary tree node.  */
14523             lhs = build_x_binary_op (map_node->tree_type, lhs, rhs,
14524                                      &overloaded_p);
14525             /* If the binary operator required the use of an
14526                overloaded operator, then this expression cannot be an
14527                integral constant-expression.  An overloaded operator
14528                can be used even if both operands are otherwise
14529                permissible in an integral constant-expression if at
14530                least one of the operands is of enumeration type.  */
14531             if (overloaded_p
14532                 && (cp_parser_non_integral_constant_expression
14533                     (parser, "calls to overloaded operators")))
14534               lhs = error_mark_node;
14535             break;
14536           }
14537
14538       /* If the token wasn't one of the ones we want, we're done.  */
14539       if (map_node->token_type == CPP_EOF)
14540         break;
14541     }
14542
14543   return lhs;
14544 }
14545
14546 /* Parse an optional `::' token indicating that the following name is
14547    from the global namespace.  If so, PARSER->SCOPE is set to the
14548    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
14549    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
14550    Returns the new value of PARSER->SCOPE, if the `::' token is
14551    present, and NULL_TREE otherwise.  */
14552
14553 static tree
14554 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
14555 {
14556   cp_token *token;
14557
14558   /* Peek at the next token.  */
14559   token = cp_lexer_peek_token (parser->lexer);
14560   /* If we're looking at a `::' token then we're starting from the
14561      global namespace, not our current location.  */
14562   if (token->type == CPP_SCOPE)
14563     {
14564       /* Consume the `::' token.  */
14565       cp_lexer_consume_token (parser->lexer);
14566       /* Set the SCOPE so that we know where to start the lookup.  */
14567       parser->scope = global_namespace;
14568       parser->qualifying_scope = global_namespace;
14569       parser->object_scope = NULL_TREE;
14570
14571       return parser->scope;
14572     }
14573   else if (!current_scope_valid_p)
14574     {
14575       parser->scope = NULL_TREE;
14576       parser->qualifying_scope = NULL_TREE;
14577       parser->object_scope = NULL_TREE;
14578     }
14579
14580   return NULL_TREE;
14581 }
14582
14583 /* Returns TRUE if the upcoming token sequence is the start of a
14584    constructor declarator.  If FRIEND_P is true, the declarator is
14585    preceded by the `friend' specifier.  */
14586
14587 static bool
14588 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
14589 {
14590   bool constructor_p;
14591   tree type_decl = NULL_TREE;
14592   bool nested_name_p;
14593   cp_token *next_token;
14594
14595   /* The common case is that this is not a constructor declarator, so
14596      try to avoid doing lots of work if at all possible.  It's not
14597      valid declare a constructor at function scope.  */
14598   if (at_function_scope_p ())
14599     return false;
14600   /* And only certain tokens can begin a constructor declarator.  */
14601   next_token = cp_lexer_peek_token (parser->lexer);
14602   if (next_token->type != CPP_NAME
14603       && next_token->type != CPP_SCOPE
14604       && next_token->type != CPP_NESTED_NAME_SPECIFIER
14605       && next_token->type != CPP_TEMPLATE_ID)
14606     return false;
14607
14608   /* Parse tentatively; we are going to roll back all of the tokens
14609      consumed here.  */
14610   cp_parser_parse_tentatively (parser);
14611   /* Assume that we are looking at a constructor declarator.  */
14612   constructor_p = true;
14613
14614   /* Look for the optional `::' operator.  */
14615   cp_parser_global_scope_opt (parser,
14616                               /*current_scope_valid_p=*/false);
14617   /* Look for the nested-name-specifier.  */
14618   nested_name_p
14619     = (cp_parser_nested_name_specifier_opt (parser,
14620                                             /*typename_keyword_p=*/false,
14621                                             /*check_dependency_p=*/false,
14622                                             /*type_p=*/false,
14623                                             /*is_declaration=*/false)
14624        != NULL_TREE);
14625   /* Outside of a class-specifier, there must be a
14626      nested-name-specifier.  */
14627   if (!nested_name_p &&
14628       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
14629        || friend_p))
14630     constructor_p = false;
14631   /* If we still think that this might be a constructor-declarator,
14632      look for a class-name.  */
14633   if (constructor_p)
14634     {
14635       /* If we have:
14636
14637            template <typename T> struct S { S(); };
14638            template <typename T> S<T>::S ();
14639
14640          we must recognize that the nested `S' names a class.
14641          Similarly, for:
14642
14643            template <typename T> S<T>::S<T> ();
14644
14645          we must recognize that the nested `S' names a template.  */
14646       type_decl = cp_parser_class_name (parser,
14647                                         /*typename_keyword_p=*/false,
14648                                         /*template_keyword_p=*/false,
14649                                         /*type_p=*/false,
14650                                         /*check_dependency_p=*/false,
14651                                         /*class_head_p=*/false,
14652                                         /*is_declaration=*/false);
14653       /* If there was no class-name, then this is not a constructor.  */
14654       constructor_p = !cp_parser_error_occurred (parser);
14655     }
14656
14657   /* If we're still considering a constructor, we have to see a `(',
14658      to begin the parameter-declaration-clause, followed by either a
14659      `)', an `...', or a decl-specifier.  We need to check for a
14660      type-specifier to avoid being fooled into thinking that:
14661
14662        S::S (f) (int);
14663
14664      is a constructor.  (It is actually a function named `f' that
14665      takes one parameter (of type `int') and returns a value of type
14666      `S::S'.  */
14667   if (constructor_p
14668       && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
14669     {
14670       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
14671           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
14672           /* A parameter declaration begins with a decl-specifier,
14673              which is either the "attribute" keyword, a storage class
14674              specifier, or (usually) a type-specifier.  */
14675           && !cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE)
14676           && !cp_parser_storage_class_specifier_opt (parser))
14677         {
14678           tree type;
14679           bool pop_p = false;
14680           unsigned saved_num_template_parameter_lists;
14681
14682           /* Names appearing in the type-specifier should be looked up
14683              in the scope of the class.  */
14684           if (current_class_type)
14685             type = NULL_TREE;
14686           else
14687             {
14688               type = TREE_TYPE (type_decl);
14689               if (TREE_CODE (type) == TYPENAME_TYPE)
14690                 {
14691                   type = resolve_typename_type (type,
14692                                                 /*only_current_p=*/false);
14693                   if (type == error_mark_node)
14694                     {
14695                       cp_parser_abort_tentative_parse (parser);
14696                       return false;
14697                     }
14698                 }
14699               pop_p = push_scope (type);
14700             }
14701
14702           /* Inside the constructor parameter list, surrounding
14703              template-parameter-lists do not apply.  */
14704           saved_num_template_parameter_lists
14705             = parser->num_template_parameter_lists;
14706           parser->num_template_parameter_lists = 0;
14707
14708           /* Look for the type-specifier.  */
14709           cp_parser_type_specifier (parser,
14710                                     CP_PARSER_FLAGS_NONE,
14711                                     /*decl_specs=*/NULL,
14712                                     /*is_declarator=*/true,
14713                                     /*declares_class_or_enum=*/NULL,
14714                                     /*is_cv_qualifier=*/NULL);
14715
14716           parser->num_template_parameter_lists
14717             = saved_num_template_parameter_lists;
14718
14719           /* Leave the scope of the class.  */
14720           if (pop_p)
14721             pop_scope (type);
14722
14723           constructor_p = !cp_parser_error_occurred (parser);
14724         }
14725     }
14726   else
14727     constructor_p = false;
14728   /* We did not really want to consume any tokens.  */
14729   cp_parser_abort_tentative_parse (parser);
14730
14731   return constructor_p;
14732 }
14733
14734 /* Parse the definition of the function given by the DECL_SPECIFIERS,
14735    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
14736    they must be performed once we are in the scope of the function.
14737
14738    Returns the function defined.  */
14739
14740 static tree
14741 cp_parser_function_definition_from_specifiers_and_declarator
14742   (cp_parser* parser,
14743    cp_decl_specifier_seq *decl_specifiers,
14744    tree attributes,
14745    const cp_declarator *declarator)
14746 {
14747   tree fn;
14748   bool success_p;
14749
14750   /* Begin the function-definition.  */
14751   success_p = start_function (decl_specifiers, declarator, attributes);
14752
14753   /* The things we're about to see are not directly qualified by any
14754      template headers we've seen thus far.  */
14755   reset_specialization ();
14756
14757   /* If there were names looked up in the decl-specifier-seq that we
14758      did not check, check them now.  We must wait until we are in the
14759      scope of the function to perform the checks, since the function
14760      might be a friend.  */
14761   perform_deferred_access_checks ();
14762
14763   if (!success_p)
14764     {
14765       /* Skip the entire function.  */
14766       error ("invalid function declaration");
14767       cp_parser_skip_to_end_of_block_or_statement (parser);
14768       fn = error_mark_node;
14769     }
14770   else
14771     fn = cp_parser_function_definition_after_declarator (parser,
14772                                                          /*inline_p=*/false);
14773
14774   return fn;
14775 }
14776
14777 /* Parse the part of a function-definition that follows the
14778    declarator.  INLINE_P is TRUE iff this function is an inline
14779    function defined with a class-specifier.
14780
14781    Returns the function defined.  */
14782
14783 static tree
14784 cp_parser_function_definition_after_declarator (cp_parser* parser,
14785                                                 bool inline_p)
14786 {
14787   tree fn;
14788   bool ctor_initializer_p = false;
14789   bool saved_in_unbraced_linkage_specification_p;
14790   unsigned saved_num_template_parameter_lists;
14791
14792   /* If the next token is `return', then the code may be trying to
14793      make use of the "named return value" extension that G++ used to
14794      support.  */
14795   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
14796     {
14797       /* Consume the `return' keyword.  */
14798       cp_lexer_consume_token (parser->lexer);
14799       /* Look for the identifier that indicates what value is to be
14800          returned.  */
14801       cp_parser_identifier (parser);
14802       /* Issue an error message.  */
14803       error ("named return values are no longer supported");
14804       /* Skip tokens until we reach the start of the function body.  */
14805       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
14806              && cp_lexer_next_token_is_not (parser->lexer, CPP_EOF))
14807         cp_lexer_consume_token (parser->lexer);
14808     }
14809   /* The `extern' in `extern "C" void f () { ... }' does not apply to
14810      anything declared inside `f'.  */
14811   saved_in_unbraced_linkage_specification_p
14812     = parser->in_unbraced_linkage_specification_p;
14813   parser->in_unbraced_linkage_specification_p = false;
14814   /* Inside the function, surrounding template-parameter-lists do not
14815      apply.  */
14816   saved_num_template_parameter_lists
14817     = parser->num_template_parameter_lists;
14818   parser->num_template_parameter_lists = 0;
14819   /* If the next token is `try', then we are looking at a
14820      function-try-block.  */
14821   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
14822     ctor_initializer_p = cp_parser_function_try_block (parser);
14823   /* A function-try-block includes the function-body, so we only do
14824      this next part if we're not processing a function-try-block.  */
14825   else
14826     ctor_initializer_p
14827       = cp_parser_ctor_initializer_opt_and_function_body (parser);
14828
14829   /* Finish the function.  */
14830   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
14831                         (inline_p ? 2 : 0));
14832   /* Generate code for it, if necessary.  */
14833   expand_or_defer_fn (fn);
14834   /* Restore the saved values.  */
14835   parser->in_unbraced_linkage_specification_p
14836     = saved_in_unbraced_linkage_specification_p;
14837   parser->num_template_parameter_lists
14838     = saved_num_template_parameter_lists;
14839
14840   return fn;
14841 }
14842
14843 /* Parse a template-declaration, assuming that the `export' (and
14844    `extern') keywords, if present, has already been scanned.  MEMBER_P
14845    is as for cp_parser_template_declaration.  */
14846
14847 static void
14848 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
14849 {
14850   tree decl = NULL_TREE;
14851   tree parameter_list;
14852   bool friend_p = false;
14853
14854   /* Look for the `template' keyword.  */
14855   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
14856     return;
14857
14858   /* And the `<'.  */
14859   if (!cp_parser_require (parser, CPP_LESS, "`<'"))
14860     return;
14861
14862   /* If the next token is `>', then we have an invalid
14863      specialization.  Rather than complain about an invalid template
14864      parameter, issue an error message here.  */
14865   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
14866     {
14867       cp_parser_error (parser, "invalid explicit specialization");
14868       begin_specialization ();
14869       parameter_list = NULL_TREE;
14870     }
14871   else
14872     {
14873       /* Parse the template parameters.  */
14874       begin_template_parm_list ();
14875       parameter_list = cp_parser_template_parameter_list (parser);
14876       parameter_list = end_template_parm_list (parameter_list);
14877     }
14878
14879   /* Look for the `>'.  */
14880   cp_parser_skip_until_found (parser, CPP_GREATER, "`>'");
14881   /* We just processed one more parameter list.  */
14882   ++parser->num_template_parameter_lists;
14883   /* If the next token is `template', there are more template
14884      parameters.  */
14885   if (cp_lexer_next_token_is_keyword (parser->lexer,
14886                                       RID_TEMPLATE))
14887     cp_parser_template_declaration_after_export (parser, member_p);
14888   else
14889     {
14890       /* There are no access checks when parsing a template, as we do not
14891          know if a specialization will be a friend.  */
14892       push_deferring_access_checks (dk_no_check);
14893
14894       decl = cp_parser_single_declaration (parser,
14895                                            member_p,
14896                                            &friend_p);
14897
14898       pop_deferring_access_checks ();
14899
14900       /* If this is a member template declaration, let the front
14901          end know.  */
14902       if (member_p && !friend_p && decl)
14903         {
14904           if (TREE_CODE (decl) == TYPE_DECL)
14905             cp_parser_check_access_in_redeclaration (decl);
14906
14907           decl = finish_member_template_decl (decl);
14908         }
14909       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
14910         make_friend_class (current_class_type, TREE_TYPE (decl),
14911                            /*complain=*/true);
14912     }
14913   /* We are done with the current parameter list.  */
14914   --parser->num_template_parameter_lists;
14915
14916   /* Finish up.  */
14917   finish_template_decl (parameter_list);
14918
14919   /* Register member declarations.  */
14920   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
14921     finish_member_declaration (decl);
14922
14923   /* If DECL is a function template, we must return to parse it later.
14924      (Even though there is no definition, there might be default
14925      arguments that need handling.)  */
14926   if (member_p && decl
14927       && (TREE_CODE (decl) == FUNCTION_DECL
14928           || DECL_FUNCTION_TEMPLATE_P (decl)))
14929     TREE_VALUE (parser->unparsed_functions_queues)
14930       = tree_cons (NULL_TREE, decl,
14931                    TREE_VALUE (parser->unparsed_functions_queues));
14932 }
14933
14934 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
14935    `function-definition' sequence.  MEMBER_P is true, this declaration
14936    appears in a class scope.
14937
14938    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
14939    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
14940
14941 static tree
14942 cp_parser_single_declaration (cp_parser* parser,
14943                               bool member_p,
14944                               bool* friend_p)
14945 {
14946   int declares_class_or_enum;
14947   tree decl = NULL_TREE;
14948   cp_decl_specifier_seq decl_specifiers;
14949   bool function_definition_p = false;
14950
14951   /* Defer access checks until we know what is being declared.  */
14952   push_deferring_access_checks (dk_deferred);
14953
14954   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
14955      alternative.  */
14956   cp_parser_decl_specifier_seq (parser,
14957                                 CP_PARSER_FLAGS_OPTIONAL,
14958                                 &decl_specifiers,
14959                                 &declares_class_or_enum);
14960   if (friend_p)
14961     *friend_p = cp_parser_friend_p (&decl_specifiers);
14962   /* Gather up the access checks that occurred the
14963      decl-specifier-seq.  */
14964   stop_deferring_access_checks ();
14965
14966   /* Check for the declaration of a template class.  */
14967   if (declares_class_or_enum)
14968     {
14969       if (cp_parser_declares_only_class_p (parser))
14970         {
14971           decl = shadow_tag (&decl_specifiers);
14972           if (decl && decl != error_mark_node)
14973             decl = TYPE_NAME (decl);
14974           else
14975             decl = error_mark_node;
14976         }
14977     }
14978   else
14979     decl = NULL_TREE;
14980   /* If it's not a template class, try for a template function.  If
14981      the next token is a `;', then this declaration does not declare
14982      anything.  But, if there were errors in the decl-specifiers, then
14983      the error might well have come from an attempted class-specifier.
14984      In that case, there's no need to warn about a missing declarator.  */
14985   if (!decl
14986       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
14987           || decl_specifiers.type != error_mark_node))
14988     decl = cp_parser_init_declarator (parser,
14989                                       &decl_specifiers,
14990                                       /*function_definition_allowed_p=*/true,
14991                                       member_p,
14992                                       declares_class_or_enum,
14993                                       &function_definition_p);
14994
14995   pop_deferring_access_checks ();
14996
14997   /* Clear any current qualification; whatever comes next is the start
14998      of something new.  */
14999   parser->scope = NULL_TREE;
15000   parser->qualifying_scope = NULL_TREE;
15001   parser->object_scope = NULL_TREE;
15002   /* Look for a trailing `;' after the declaration.  */
15003   if (!function_definition_p
15004       && !cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
15005     cp_parser_skip_to_end_of_block_or_statement (parser);
15006
15007   return decl;
15008 }
15009
15010 /* Parse a cast-expression that is not the operand of a unary "&".  */
15011
15012 static tree
15013 cp_parser_simple_cast_expression (cp_parser *parser)
15014 {
15015   return cp_parser_cast_expression (parser, /*address_p=*/false);
15016 }
15017
15018 /* Parse a functional cast to TYPE.  Returns an expression
15019    representing the cast.  */
15020
15021 static tree
15022 cp_parser_functional_cast (cp_parser* parser, tree type)
15023 {
15024   tree expression_list;
15025   tree cast;
15026
15027   expression_list
15028     = cp_parser_parenthesized_expression_list (parser, false,
15029                                                /*non_constant_p=*/NULL);
15030
15031   cast = build_functional_cast (type, expression_list);
15032   /* [expr.const]/1: In an integral constant expression "only type
15033      conversions to integral or enumeration type can be used".  */
15034   if (cast != error_mark_node && !type_dependent_expression_p (type)
15035       && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (type)))
15036     {
15037       if (cp_parser_non_integral_constant_expression
15038           (parser, "a call to a constructor"))
15039         return error_mark_node;
15040     }
15041   return cast;
15042 }
15043
15044 /* Save the tokens that make up the body of a member function defined
15045    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
15046    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
15047    specifiers applied to the declaration.  Returns the FUNCTION_DECL
15048    for the member function.  */
15049
15050 static tree
15051 cp_parser_save_member_function_body (cp_parser* parser,
15052                                      cp_decl_specifier_seq *decl_specifiers,
15053                                      cp_declarator *declarator,
15054                                      tree attributes)
15055 {
15056   cp_token_cache *cache;
15057   tree fn;
15058
15059   /* Create the function-declaration.  */
15060   fn = start_method (decl_specifiers, declarator, attributes);
15061   /* If something went badly wrong, bail out now.  */
15062   if (fn == error_mark_node)
15063     {
15064       /* If there's a function-body, skip it.  */
15065       if (cp_parser_token_starts_function_definition_p
15066           (cp_lexer_peek_token (parser->lexer)))
15067         cp_parser_skip_to_end_of_block_or_statement (parser);
15068       return error_mark_node;
15069     }
15070
15071   /* Remember it, if there default args to post process.  */
15072   cp_parser_save_default_args (parser, fn);
15073
15074   /* Create a token cache.  */
15075   cache = cp_token_cache_new ();
15076   /* Save away the tokens that make up the body of the
15077      function.  */
15078   cp_parser_cache_group (parser, cache, CPP_CLOSE_BRACE, /*depth=*/0);
15079   /* Handle function try blocks.  */
15080   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
15081     cp_parser_cache_group (parser, cache, CPP_CLOSE_BRACE, /*depth=*/0);
15082
15083   /* Save away the inline definition; we will process it when the
15084      class is complete.  */
15085   DECL_PENDING_INLINE_INFO (fn) = cache;
15086   DECL_PENDING_INLINE_P (fn) = 1;
15087
15088   /* We need to know that this was defined in the class, so that
15089      friend templates are handled correctly.  */
15090   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
15091
15092   /* We're done with the inline definition.  */
15093   finish_method (fn);
15094
15095   /* Add FN to the queue of functions to be parsed later.  */
15096   TREE_VALUE (parser->unparsed_functions_queues)
15097     = tree_cons (NULL_TREE, fn,
15098                  TREE_VALUE (parser->unparsed_functions_queues));
15099
15100   return fn;
15101 }
15102
15103 /* Parse a template-argument-list, as well as the trailing ">" (but
15104    not the opening ">").  See cp_parser_template_argument_list for the
15105    return value.  */
15106
15107 static tree
15108 cp_parser_enclosed_template_argument_list (cp_parser* parser)
15109 {
15110   tree arguments;
15111   tree saved_scope;
15112   tree saved_qualifying_scope;
15113   tree saved_object_scope;
15114   bool saved_greater_than_is_operator_p;
15115
15116   /* [temp.names]
15117
15118      When parsing a template-id, the first non-nested `>' is taken as
15119      the end of the template-argument-list rather than a greater-than
15120      operator.  */
15121   saved_greater_than_is_operator_p
15122     = parser->greater_than_is_operator_p;
15123   parser->greater_than_is_operator_p = false;
15124   /* Parsing the argument list may modify SCOPE, so we save it
15125      here.  */
15126   saved_scope = parser->scope;
15127   saved_qualifying_scope = parser->qualifying_scope;
15128   saved_object_scope = parser->object_scope;
15129   /* Parse the template-argument-list itself.  */
15130   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15131     arguments = NULL_TREE;
15132   else
15133     arguments = cp_parser_template_argument_list (parser);
15134   /* Look for the `>' that ends the template-argument-list. If we find
15135      a '>>' instead, it's probably just a typo.  */
15136   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
15137     {
15138       if (!saved_greater_than_is_operator_p)
15139         {
15140           /* If we're in a nested template argument list, the '>>' has to be
15141             a typo for '> >'. We emit the error message, but we continue
15142             parsing and we push a '>' as next token, so that the argument
15143             list will be parsed correctly..  */
15144           cp_token* token;
15145           error ("`>>' should be `> >' within a nested template argument list");
15146           token = cp_lexer_peek_token (parser->lexer);
15147           token->type = CPP_GREATER;
15148         }
15149       else
15150         {
15151           /* If this is not a nested template argument list, the '>>' is
15152             a typo for '>'. Emit an error message and continue.  */
15153           error ("spurious `>>', use `>' to terminate a template argument list");
15154           cp_lexer_consume_token (parser->lexer);
15155         }
15156     }
15157   else if (!cp_parser_require (parser, CPP_GREATER, "`>'"))
15158     error ("missing `>' to terminate the template argument list");
15159   /* The `>' token might be a greater-than operator again now.  */
15160   parser->greater_than_is_operator_p
15161     = saved_greater_than_is_operator_p;
15162   /* Restore the SAVED_SCOPE.  */
15163   parser->scope = saved_scope;
15164   parser->qualifying_scope = saved_qualifying_scope;
15165   parser->object_scope = saved_object_scope;
15166
15167   return arguments;
15168 }
15169
15170 /* MEMBER_FUNCTION is a member function, or a friend.  If default
15171    arguments, or the body of the function have not yet been parsed,
15172    parse them now.  */
15173
15174 static void
15175 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
15176 {
15177   cp_lexer *saved_lexer;
15178
15179   /* If this member is a template, get the underlying
15180      FUNCTION_DECL.  */
15181   if (DECL_FUNCTION_TEMPLATE_P (member_function))
15182     member_function = DECL_TEMPLATE_RESULT (member_function);
15183
15184   /* There should not be any class definitions in progress at this
15185      point; the bodies of members are only parsed outside of all class
15186      definitions.  */
15187   my_friendly_assert (parser->num_classes_being_defined == 0, 20010816);
15188   /* While we're parsing the member functions we might encounter more
15189      classes.  We want to handle them right away, but we don't want
15190      them getting mixed up with functions that are currently in the
15191      queue.  */
15192   parser->unparsed_functions_queues
15193     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15194
15195   /* Make sure that any template parameters are in scope.  */
15196   maybe_begin_member_template_processing (member_function);
15197
15198   /* If the body of the function has not yet been parsed, parse it
15199      now.  */
15200   if (DECL_PENDING_INLINE_P (member_function))
15201     {
15202       tree function_scope;
15203       cp_token_cache *tokens;
15204
15205       /* The function is no longer pending; we are processing it.  */
15206       tokens = DECL_PENDING_INLINE_INFO (member_function);
15207       DECL_PENDING_INLINE_INFO (member_function) = NULL;
15208       DECL_PENDING_INLINE_P (member_function) = 0;
15209       /* If this was an inline function in a local class, enter the scope
15210          of the containing function.  */
15211       function_scope = decl_function_context (member_function);
15212       if (function_scope)
15213         push_function_context_to (function_scope);
15214
15215       /* Save away the current lexer.  */
15216       saved_lexer = parser->lexer;
15217       /* Make a new lexer to feed us the tokens saved for this function.  */
15218       parser->lexer = cp_lexer_new_from_tokens (tokens);
15219       parser->lexer->next = saved_lexer;
15220
15221       /* Set the current source position to be the location of the first
15222          token in the saved inline body.  */
15223       cp_lexer_peek_token (parser->lexer);
15224
15225       /* Let the front end know that we going to be defining this
15226          function.  */
15227       start_preparsed_function (member_function, NULL_TREE,
15228                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
15229
15230       /* Now, parse the body of the function.  */
15231       cp_parser_function_definition_after_declarator (parser,
15232                                                       /*inline_p=*/true);
15233
15234       /* Leave the scope of the containing function.  */
15235       if (function_scope)
15236         pop_function_context_from (function_scope);
15237       /* Restore the lexer.  */
15238       parser->lexer = saved_lexer;
15239     }
15240
15241   /* Remove any template parameters from the symbol table.  */
15242   maybe_end_member_template_processing ();
15243
15244   /* Restore the queue.  */
15245   parser->unparsed_functions_queues
15246     = TREE_CHAIN (parser->unparsed_functions_queues);
15247 }
15248
15249 /* If DECL contains any default args, remember it on the unparsed
15250    functions queue.  */
15251
15252 static void
15253 cp_parser_save_default_args (cp_parser* parser, tree decl)
15254 {
15255   tree probe;
15256
15257   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
15258        probe;
15259        probe = TREE_CHAIN (probe))
15260     if (TREE_PURPOSE (probe))
15261       {
15262         TREE_PURPOSE (parser->unparsed_functions_queues)
15263           = tree_cons (current_class_type, decl,
15264                        TREE_PURPOSE (parser->unparsed_functions_queues));
15265         break;
15266       }
15267   return;
15268 }
15269
15270 /* FN is a FUNCTION_DECL which may contains a parameter with an
15271    unparsed DEFAULT_ARG.  Parse the default args now.  This function
15272    assumes that the current scope is the scope in which the default
15273    argument should be processed.  */
15274
15275 static void
15276 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
15277 {
15278   cp_lexer *saved_lexer;
15279   cp_token_cache *tokens;
15280   bool saved_local_variables_forbidden_p;
15281   tree parameters;
15282
15283   /* While we're parsing the default args, we might (due to the
15284      statement expression extension) encounter more classes.  We want
15285      to handle them right away, but we don't want them getting mixed
15286      up with default args that are currently in the queue.  */
15287   parser->unparsed_functions_queues
15288     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15289
15290   for (parameters = TYPE_ARG_TYPES (TREE_TYPE (fn));
15291        parameters;
15292        parameters = TREE_CHAIN (parameters))
15293     {
15294       if (!TREE_PURPOSE (parameters)
15295           || TREE_CODE (TREE_PURPOSE (parameters)) != DEFAULT_ARG)
15296         continue;
15297
15298        /* Save away the current lexer.  */
15299       saved_lexer = parser->lexer;
15300        /* Create a new one, using the tokens we have saved.  */
15301       tokens =  DEFARG_TOKENS (TREE_PURPOSE (parameters));
15302       parser->lexer = cp_lexer_new_from_tokens (tokens);
15303
15304        /* Set the current source position to be the location of the
15305           first token in the default argument.  */
15306       cp_lexer_peek_token (parser->lexer);
15307
15308        /* Local variable names (and the `this' keyword) may not appear
15309           in a default argument.  */
15310       saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
15311       parser->local_variables_forbidden_p = true;
15312        /* Parse the assignment-expression.  */
15313       TREE_PURPOSE (parameters) = cp_parser_assignment_expression (parser);
15314
15315       /* If the token stream has not been completely used up, then
15316          there was extra junk after the end of the default
15317          argument.  */
15318       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
15319         cp_parser_error (parser, "expected `,'");
15320
15321        /* Restore saved state.  */
15322       parser->lexer = saved_lexer;
15323       parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
15324     }
15325
15326   /* Restore the queue.  */
15327   parser->unparsed_functions_queues
15328     = TREE_CHAIN (parser->unparsed_functions_queues);
15329 }
15330
15331 /* Parse the operand of `sizeof' (or a similar operator).  Returns
15332    either a TYPE or an expression, depending on the form of the
15333    input.  The KEYWORD indicates which kind of expression we have
15334    encountered.  */
15335
15336 static tree
15337 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
15338 {
15339   static const char *format;
15340   tree expr = NULL_TREE;
15341   const char *saved_message;
15342   bool saved_integral_constant_expression_p;
15343
15344   /* Initialize FORMAT the first time we get here.  */
15345   if (!format)
15346     format = "types may not be defined in `%s' expressions";
15347
15348   /* Types cannot be defined in a `sizeof' expression.  Save away the
15349      old message.  */
15350   saved_message = parser->type_definition_forbidden_message;
15351   /* And create the new one.  */
15352   parser->type_definition_forbidden_message
15353     = xmalloc (strlen (format)
15354                + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
15355                + 1 /* `\0' */);
15356   sprintf ((char *) parser->type_definition_forbidden_message,
15357            format, IDENTIFIER_POINTER (ridpointers[keyword]));
15358
15359   /* The restrictions on constant-expressions do not apply inside
15360      sizeof expressions.  */
15361   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
15362   parser->integral_constant_expression_p = false;
15363
15364   /* Do not actually evaluate the expression.  */
15365   ++skip_evaluation;
15366   /* If it's a `(', then we might be looking at the type-id
15367      construction.  */
15368   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
15369     {
15370       tree type;
15371       bool saved_in_type_id_in_expr_p;
15372
15373       /* We can't be sure yet whether we're looking at a type-id or an
15374          expression.  */
15375       cp_parser_parse_tentatively (parser);
15376       /* Consume the `('.  */
15377       cp_lexer_consume_token (parser->lexer);
15378       /* Parse the type-id.  */
15379       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
15380       parser->in_type_id_in_expr_p = true;
15381       type = cp_parser_type_id (parser);
15382       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
15383       /* Now, look for the trailing `)'.  */
15384       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
15385       /* If all went well, then we're done.  */
15386       if (cp_parser_parse_definitely (parser))
15387         {
15388           cp_decl_specifier_seq decl_specs;
15389
15390           /* Build a trivial decl-specifier-seq.  */
15391           clear_decl_specs (&decl_specs);
15392           decl_specs.type = type;
15393
15394           /* Call grokdeclarator to figure out what type this is.  */
15395           expr = grokdeclarator (NULL,
15396                                  &decl_specs,
15397                                  TYPENAME,
15398                                  /*initialized=*/0,
15399                                  /*attrlist=*/NULL);
15400         }
15401     }
15402
15403   /* If the type-id production did not work out, then we must be
15404      looking at the unary-expression production.  */
15405   if (!expr)
15406     expr = cp_parser_unary_expression (parser, /*address_p=*/false);
15407   /* Go back to evaluating expressions.  */
15408   --skip_evaluation;
15409
15410   /* Free the message we created.  */
15411   free ((char *) parser->type_definition_forbidden_message);
15412   /* And restore the old one.  */
15413   parser->type_definition_forbidden_message = saved_message;
15414   parser->integral_constant_expression_p = saved_integral_constant_expression_p;
15415
15416   return expr;
15417 }
15418
15419 /* If the current declaration has no declarator, return true.  */
15420
15421 static bool
15422 cp_parser_declares_only_class_p (cp_parser *parser)
15423 {
15424   /* If the next token is a `;' or a `,' then there is no
15425      declarator.  */
15426   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
15427           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
15428 }
15429
15430 /* Update the DECL_SPECS to reflect the STORAGE_CLASS.  */
15431
15432 static void
15433 cp_parser_set_storage_class (cp_decl_specifier_seq *decl_specs,
15434                              cp_storage_class storage_class)
15435 {
15436   if (decl_specs->storage_class != sc_none)
15437     decl_specs->multiple_storage_classes_p = true;
15438   else
15439     decl_specs->storage_class = storage_class;
15440 }
15441
15442 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
15443    is true, the type is a user-defined type; otherwise it is a
15444    built-in type specified by a keyword.  */
15445
15446 static void
15447 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
15448                               tree type_spec,
15449                               bool user_defined_p)
15450 {
15451   decl_specs->any_specifiers_p = true;
15452
15453   /* If the user tries to redeclare a built-in type (with, for example,
15454      in "typedef int wchar_t;") we remember that this is what
15455      happened.  In system headers, we ignore these declarations so
15456      that G++ can work with system headers that are not C++-safe.  */
15457   if (decl_specs->specs[(int) ds_typedef]
15458       && !user_defined_p
15459       && (decl_specs->type
15460           || decl_specs->specs[(int) ds_long]
15461           || decl_specs->specs[(int) ds_short]
15462           || decl_specs->specs[(int) ds_unsigned]
15463           || decl_specs->specs[(int) ds_signed]))
15464     {
15465       decl_specs->redefined_builtin_type = type_spec;
15466       if (!decl_specs->type)
15467         {
15468           decl_specs->type = type_spec;
15469           decl_specs->user_defined_type_p = false;
15470         }
15471     }
15472   else if (decl_specs->type)
15473     decl_specs->multiple_types_p = true;
15474   else
15475     {
15476       decl_specs->type = type_spec;
15477       decl_specs->user_defined_type_p = user_defined_p;
15478       decl_specs->redefined_builtin_type = NULL_TREE;
15479     }
15480 }
15481
15482 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
15483    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
15484
15485 static bool
15486 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
15487 {
15488   return decl_specifiers->specs[(int) ds_friend] != 0;
15489 }
15490
15491 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
15492    issue an error message indicating that TOKEN_DESC was expected.
15493
15494    Returns the token consumed, if the token had the appropriate type.
15495    Otherwise, returns NULL.  */
15496
15497 static cp_token *
15498 cp_parser_require (cp_parser* parser,
15499                    enum cpp_ttype type,
15500                    const char* token_desc)
15501 {
15502   if (cp_lexer_next_token_is (parser->lexer, type))
15503     return cp_lexer_consume_token (parser->lexer);
15504   else
15505     {
15506       /* Output the MESSAGE -- unless we're parsing tentatively.  */
15507       if (!cp_parser_simulate_error (parser))
15508         {
15509           char *message = concat ("expected ", token_desc, NULL);
15510           cp_parser_error (parser, message);
15511           free (message);
15512         }
15513       return NULL;
15514     }
15515 }
15516
15517 /* Like cp_parser_require, except that tokens will be skipped until
15518    the desired token is found.  An error message is still produced if
15519    the next token is not as expected.  */
15520
15521 static void
15522 cp_parser_skip_until_found (cp_parser* parser,
15523                             enum cpp_ttype type,
15524                             const char* token_desc)
15525 {
15526   cp_token *token;
15527   unsigned nesting_depth = 0;
15528
15529   if (cp_parser_require (parser, type, token_desc))
15530     return;
15531
15532   /* Skip tokens until the desired token is found.  */
15533   while (true)
15534     {
15535       /* Peek at the next token.  */
15536       token = cp_lexer_peek_token (parser->lexer);
15537       /* If we've reached the token we want, consume it and
15538          stop.  */
15539       if (token->type == type && !nesting_depth)
15540         {
15541           cp_lexer_consume_token (parser->lexer);
15542           return;
15543         }
15544       /* If we've run out of tokens, stop.  */
15545       if (token->type == CPP_EOF)
15546         return;
15547       if (token->type == CPP_OPEN_BRACE
15548           || token->type == CPP_OPEN_PAREN
15549           || token->type == CPP_OPEN_SQUARE)
15550         ++nesting_depth;
15551       else if (token->type == CPP_CLOSE_BRACE
15552                || token->type == CPP_CLOSE_PAREN
15553                || token->type == CPP_CLOSE_SQUARE)
15554         {
15555           if (nesting_depth-- == 0)
15556             return;
15557         }
15558       /* Consume this token.  */
15559       cp_lexer_consume_token (parser->lexer);
15560     }
15561 }
15562
15563 /* If the next token is the indicated keyword, consume it.  Otherwise,
15564    issue an error message indicating that TOKEN_DESC was expected.
15565
15566    Returns the token consumed, if the token had the appropriate type.
15567    Otherwise, returns NULL.  */
15568
15569 static cp_token *
15570 cp_parser_require_keyword (cp_parser* parser,
15571                            enum rid keyword,
15572                            const char* token_desc)
15573 {
15574   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
15575
15576   if (token && token->keyword != keyword)
15577     {
15578       dyn_string_t error_msg;
15579
15580       /* Format the error message.  */
15581       error_msg = dyn_string_new (0);
15582       dyn_string_append_cstr (error_msg, "expected ");
15583       dyn_string_append_cstr (error_msg, token_desc);
15584       cp_parser_error (parser, error_msg->s);
15585       dyn_string_delete (error_msg);
15586       return NULL;
15587     }
15588
15589   return token;
15590 }
15591
15592 /* Returns TRUE iff TOKEN is a token that can begin the body of a
15593    function-definition.  */
15594
15595 static bool
15596 cp_parser_token_starts_function_definition_p (cp_token* token)
15597 {
15598   return (/* An ordinary function-body begins with an `{'.  */
15599           token->type == CPP_OPEN_BRACE
15600           /* A ctor-initializer begins with a `:'.  */
15601           || token->type == CPP_COLON
15602           /* A function-try-block begins with `try'.  */
15603           || token->keyword == RID_TRY
15604           /* The named return value extension begins with `return'.  */
15605           || token->keyword == RID_RETURN);
15606 }
15607
15608 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
15609    definition.  */
15610
15611 static bool
15612 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
15613 {
15614   cp_token *token;
15615
15616   token = cp_lexer_peek_token (parser->lexer);
15617   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
15618 }
15619
15620 /* Returns TRUE iff the next token is the "," or ">" ending a
15621    template-argument. ">>" is also accepted (after the full
15622    argument was parsed) because it's probably a typo for "> >",
15623    and there is a specific diagnostic for this.  */
15624
15625 static bool
15626 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
15627 {
15628   cp_token *token;
15629
15630   token = cp_lexer_peek_token (parser->lexer);
15631   return (token->type == CPP_COMMA || token->type == CPP_GREATER
15632           || token->type == CPP_RSHIFT);
15633 }
15634
15635 /* Returns TRUE iff the n-th token is a ">", or the n-th is a "[" and the
15636    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
15637
15638 static bool
15639 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
15640                                                      size_t n)
15641 {
15642   cp_token *token;
15643
15644   token = cp_lexer_peek_nth_token (parser->lexer, n);
15645   if (token->type == CPP_LESS)
15646     return true;
15647   /* Check for the sequence `<::' in the original code. It would be lexed as
15648      `[:', where `[' is a digraph, and there is no whitespace before
15649      `:'.  */
15650   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
15651     {
15652       cp_token *token2;
15653       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
15654       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
15655         return true;
15656     }
15657   return false;
15658 }
15659
15660 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
15661    or none_type otherwise.  */
15662
15663 static enum tag_types
15664 cp_parser_token_is_class_key (cp_token* token)
15665 {
15666   switch (token->keyword)
15667     {
15668     case RID_CLASS:
15669       return class_type;
15670     case RID_STRUCT:
15671       return record_type;
15672     case RID_UNION:
15673       return union_type;
15674
15675     default:
15676       return none_type;
15677     }
15678 }
15679
15680 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
15681
15682 static void
15683 cp_parser_check_class_key (enum tag_types class_key, tree type)
15684 {
15685   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
15686     pedwarn ("`%s' tag used in naming `%#T'",
15687             class_key == union_type ? "union"
15688              : class_key == record_type ? "struct" : "class",
15689              type);
15690 }
15691
15692 /* Issue an error message if DECL is redeclared with different
15693    access than its original declaration [class.access.spec/3].
15694    This applies to nested classes and nested class templates.
15695    [class.mem/1].  */
15696
15697 static void cp_parser_check_access_in_redeclaration (tree decl)
15698 {
15699   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
15700     return;
15701
15702   if ((TREE_PRIVATE (decl)
15703        != (current_access_specifier == access_private_node))
15704       || (TREE_PROTECTED (decl)
15705           != (current_access_specifier == access_protected_node)))
15706     error ("%D redeclared with different access", decl);
15707 }
15708
15709 /* Look for the `template' keyword, as a syntactic disambiguator.
15710    Return TRUE iff it is present, in which case it will be
15711    consumed.  */
15712
15713 static bool
15714 cp_parser_optional_template_keyword (cp_parser *parser)
15715 {
15716   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
15717     {
15718       /* The `template' keyword can only be used within templates;
15719          outside templates the parser can always figure out what is a
15720          template and what is not.  */
15721       if (!processing_template_decl)
15722         {
15723           error ("`template' (as a disambiguator) is only allowed "
15724                  "within templates");
15725           /* If this part of the token stream is rescanned, the same
15726              error message would be generated.  So, we purge the token
15727              from the stream.  */
15728           cp_lexer_purge_token (parser->lexer);
15729           return false;
15730         }
15731       else
15732         {
15733           /* Consume the `template' keyword.  */
15734           cp_lexer_consume_token (parser->lexer);
15735           return true;
15736         }
15737     }
15738
15739   return false;
15740 }
15741
15742 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
15743    set PARSER->SCOPE, and perform other related actions.  */
15744
15745 static void
15746 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
15747 {
15748   tree value;
15749   tree check;
15750
15751   /* Get the stored value.  */
15752   value = cp_lexer_consume_token (parser->lexer)->value;
15753   /* Perform any access checks that were deferred.  */
15754   for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
15755     perform_or_defer_access_check (TREE_PURPOSE (check), TREE_VALUE (check));
15756   /* Set the scope from the stored value.  */
15757   parser->scope = TREE_VALUE (value);
15758   parser->qualifying_scope = TREE_TYPE (value);
15759   parser->object_scope = NULL_TREE;
15760 }
15761
15762 /* Add tokens to CACHE until a non-nested END token appears.  */
15763
15764 static void
15765 cp_parser_cache_group_1 (cp_parser *parser,
15766                          cp_token_cache *cache,
15767                          enum cpp_ttype end,
15768                          unsigned depth)
15769 {
15770   while (true)
15771     {
15772       cp_token *token;
15773
15774       /* Abort a parenthesized expression if we encounter a brace.  */
15775       if ((end == CPP_CLOSE_PAREN || depth == 0)
15776           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15777         return;
15778       /* If we've reached the end of the file, stop.  */
15779       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
15780         return;
15781       /* Consume the next token.  */
15782       token = cp_lexer_consume_token (parser->lexer);
15783       /* Add this token to the tokens we are saving.  */
15784       cp_token_cache_push_token (cache, token);
15785       /* See if it starts a new group.  */
15786       if (token->type == CPP_OPEN_BRACE)
15787         {
15788           cp_parser_cache_group_1 (parser, cache, CPP_CLOSE_BRACE, depth + 1);
15789           if (depth == 0)
15790             return;
15791         }
15792       else if (token->type == CPP_OPEN_PAREN)
15793         cp_parser_cache_group_1 (parser, cache, CPP_CLOSE_PAREN, depth + 1);
15794       else if (token->type == end)
15795         return;
15796     }
15797 }
15798
15799 /* Convenient interface for cp_parser_cache_group_1 that makes sure we
15800    preserve string tokens in both translated and untranslated
15801    forms.  */
15802
15803 static void
15804 cp_parser_cache_group (cp_parser *parser,
15805                          cp_token_cache *cache,
15806                          enum cpp_ttype end,
15807                          unsigned depth)
15808 {
15809   int saved_c_lex_string_translate;
15810
15811   saved_c_lex_string_translate = c_lex_string_translate;
15812   c_lex_string_translate = -1;
15813
15814   cp_parser_cache_group_1 (parser, cache, end, depth);
15815
15816   c_lex_string_translate = saved_c_lex_string_translate;
15817 }
15818
15819
15820 /* Begin parsing tentatively.  We always save tokens while parsing
15821    tentatively so that if the tentative parsing fails we can restore the
15822    tokens.  */
15823
15824 static void
15825 cp_parser_parse_tentatively (cp_parser* parser)
15826 {
15827   /* Enter a new parsing context.  */
15828   parser->context = cp_parser_context_new (parser->context);
15829   /* Begin saving tokens.  */
15830   cp_lexer_save_tokens (parser->lexer);
15831   /* In order to avoid repetitive access control error messages,
15832      access checks are queued up until we are no longer parsing
15833      tentatively.  */
15834   push_deferring_access_checks (dk_deferred);
15835 }
15836
15837 /* Commit to the currently active tentative parse.  */
15838
15839 static void
15840 cp_parser_commit_to_tentative_parse (cp_parser* parser)
15841 {
15842   cp_parser_context *context;
15843   cp_lexer *lexer;
15844
15845   /* Mark all of the levels as committed.  */
15846   lexer = parser->lexer;
15847   for (context = parser->context; context->next; context = context->next)
15848     {
15849       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
15850         break;
15851       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
15852       while (!cp_lexer_saving_tokens (lexer))
15853         lexer = lexer->next;
15854       cp_lexer_commit_tokens (lexer);
15855     }
15856 }
15857
15858 /* Abort the currently active tentative parse.  All consumed tokens
15859    will be rolled back, and no diagnostics will be issued.  */
15860
15861 static void
15862 cp_parser_abort_tentative_parse (cp_parser* parser)
15863 {
15864   cp_parser_simulate_error (parser);
15865   /* Now, pretend that we want to see if the construct was
15866      successfully parsed.  */
15867   cp_parser_parse_definitely (parser);
15868 }
15869
15870 /* Stop parsing tentatively.  If a parse error has occurred, restore the
15871    token stream.  Otherwise, commit to the tokens we have consumed.
15872    Returns true if no error occurred; false otherwise.  */
15873
15874 static bool
15875 cp_parser_parse_definitely (cp_parser* parser)
15876 {
15877   bool error_occurred;
15878   cp_parser_context *context;
15879
15880   /* Remember whether or not an error occurred, since we are about to
15881      destroy that information.  */
15882   error_occurred = cp_parser_error_occurred (parser);
15883   /* Remove the topmost context from the stack.  */
15884   context = parser->context;
15885   parser->context = context->next;
15886   /* If no parse errors occurred, commit to the tentative parse.  */
15887   if (!error_occurred)
15888     {
15889       /* Commit to the tokens read tentatively, unless that was
15890          already done.  */
15891       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
15892         cp_lexer_commit_tokens (parser->lexer);
15893
15894       pop_to_parent_deferring_access_checks ();
15895     }
15896   /* Otherwise, if errors occurred, roll back our state so that things
15897      are just as they were before we began the tentative parse.  */
15898   else
15899     {
15900       cp_lexer_rollback_tokens (parser->lexer);
15901       pop_deferring_access_checks ();
15902     }
15903   /* Add the context to the front of the free list.  */
15904   context->next = cp_parser_context_free_list;
15905   cp_parser_context_free_list = context;
15906
15907   return !error_occurred;
15908 }
15909
15910 /* Returns true if we are parsing tentatively -- but have decided that
15911    we will stick with this tentative parse, even if errors occur.  */
15912
15913 static bool
15914 cp_parser_committed_to_tentative_parse (cp_parser* parser)
15915 {
15916   return (cp_parser_parsing_tentatively (parser)
15917           && parser->context->status == CP_PARSER_STATUS_KIND_COMMITTED);
15918 }
15919
15920 /* Returns nonzero iff an error has occurred during the most recent
15921    tentative parse.  */
15922
15923 static bool
15924 cp_parser_error_occurred (cp_parser* parser)
15925 {
15926   return (cp_parser_parsing_tentatively (parser)
15927           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
15928 }
15929
15930 /* Returns nonzero if GNU extensions are allowed.  */
15931
15932 static bool
15933 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
15934 {
15935   return parser->allow_gnu_extensions_p;
15936 }
15937
15938 \f
15939 /* The parser.  */
15940
15941 static GTY (()) cp_parser *the_parser;
15942
15943 /* External interface.  */
15944
15945 /* Parse one entire translation unit.  */
15946
15947 void
15948 c_parse_file (void)
15949 {
15950   bool error_occurred;
15951   static bool already_called = false;
15952
15953   if (already_called)
15954     {
15955       sorry ("inter-module optimizations not implemented for C++");
15956       return;
15957     }
15958   already_called = true;
15959
15960   the_parser = cp_parser_new ();
15961   push_deferring_access_checks (flag_access_control
15962                                 ? dk_no_deferred : dk_no_check);
15963   error_occurred = cp_parser_translation_unit (the_parser);
15964   the_parser = NULL;
15965 }
15966
15967 /* This variable must be provided by every front end.  */
15968
15969 int yydebug;
15970
15971 #include "gt-cp-parser.h"