OSDN Git Service

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