OSDN Git Service

* c-common.def (CASE_LABEL): Remove.
[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
38 \f
39 /* The lexer.  */
40
41 /* Overview
42    --------
43
44    A cp_lexer represents a stream of cp_tokens.  It allows arbitrary
45    look-ahead.
46
47    Methodology
48    -----------
49
50    We use a circular buffer to store incoming tokens.
51
52    Some artifacts of the C++ language (such as the
53    expression/declaration ambiguity) require arbitrary look-ahead.
54    The strategy we adopt for dealing with these problems is to attempt
55    to parse one construct (e.g., the declaration) and fall back to the
56    other (e.g., the expression) if that attempt does not succeed.
57    Therefore, we must sometimes store an arbitrary number of tokens.
58
59    The parser routinely peeks at the next token, and then consumes it
60    later.  That also requires a buffer in which to store the tokens.
61
62    In order to easily permit adding tokens to the end of the buffer,
63    while removing them from the beginning of the buffer, we use a
64    circular buffer.  */
65
66 /* A C++ token.  */
67
68 typedef struct cp_token GTY (())
69 {
70   /* The kind of token.  */
71   ENUM_BITFIELD (cpp_ttype) type : 8;
72   /* If this token is a keyword, this value indicates which keyword.
73      Otherwise, this value is RID_MAX.  */
74   ENUM_BITFIELD (rid) keyword : 8;
75   /* Token flags.  */
76   unsigned char flags;
77   /* The value associated with this token, if any.  */
78   tree value;
79   /* The location at which this token was found.  */
80   location_t location;
81 } cp_token;
82
83 /* The number of tokens in a single token block.
84    Computed so that cp_token_block fits in a 512B allocation unit.  */
85
86 #define CP_TOKEN_BLOCK_NUM_TOKENS ((512 - 3*sizeof (char*))/sizeof (cp_token))
87
88 /* A group of tokens.  These groups are chained together to store
89    large numbers of tokens.  (For example, a token block is created
90    when the body of an inline member function is first encountered;
91    the tokens are processed later after the class definition is
92    complete.)
93
94    This somewhat ungainly data structure (as opposed to, say, a
95    variable-length array), is used due to constraints imposed by the
96    current garbage-collection methodology.  If it is made more
97    flexible, we could perhaps simplify the data structures involved.  */
98
99 typedef struct cp_token_block GTY (())
100 {
101   /* The tokens.  */
102   cp_token tokens[CP_TOKEN_BLOCK_NUM_TOKENS];
103   /* The number of tokens in this block.  */
104   size_t num_tokens;
105   /* The next token block in the chain.  */
106   struct cp_token_block *next;
107   /* The previous block in the chain.  */
108   struct cp_token_block *prev;
109 } cp_token_block;
110
111 typedef struct cp_token_cache GTY (())
112 {
113   /* The first block in the cache.  NULL if there are no tokens in the
114      cache.  */
115   cp_token_block *first;
116   /* The last block in the cache.  NULL If there are no tokens in the
117      cache.  */
118   cp_token_block *last;
119 } cp_token_cache;
120
121 /* Prototypes.  */
122
123 static cp_token_cache *cp_token_cache_new
124   (void);
125 static void cp_token_cache_push_token
126   (cp_token_cache *, cp_token *);
127
128 /* Create a new cp_token_cache.  */
129
130 static cp_token_cache *
131 cp_token_cache_new (void)
132 {
133   return ggc_alloc_cleared (sizeof (cp_token_cache));
134 }
135
136 /* Add *TOKEN to *CACHE.  */
137
138 static void
139 cp_token_cache_push_token (cp_token_cache *cache,
140                            cp_token *token)
141 {
142   cp_token_block *b = cache->last;
143
144   /* See if we need to allocate a new token block.  */
145   if (!b || b->num_tokens == CP_TOKEN_BLOCK_NUM_TOKENS)
146     {
147       b = ggc_alloc_cleared (sizeof (cp_token_block));
148       b->prev = cache->last;
149       if (cache->last)
150         {
151           cache->last->next = b;
152           cache->last = b;
153         }
154       else
155         cache->first = cache->last = b;
156     }
157   /* Add this token to the current token block.  */
158   b->tokens[b->num_tokens++] = *token;
159 }
160
161 /* The cp_lexer structure represents the C++ lexer.  It is responsible
162    for managing the token stream from the preprocessor and supplying
163    it to the parser.  */
164
165 typedef struct cp_lexer GTY (())
166 {
167   /* The memory allocated for the buffer.  Never NULL.  */
168   cp_token * GTY ((length ("(%h.buffer_end - %h.buffer)"))) buffer;
169   /* A pointer just past the end of the memory allocated for the buffer.  */
170   cp_token * GTY ((skip)) buffer_end;
171   /* The first valid token in the buffer, or NULL if none.  */
172   cp_token * GTY ((skip)) first_token;
173   /* The next available token.  If NEXT_TOKEN is NULL, then there are
174      no more available tokens.  */
175   cp_token * GTY ((skip)) next_token;
176   /* A pointer just past the last available token.  If FIRST_TOKEN is
177      NULL, however, there are no available tokens, and then this
178      location is simply the place in which the next token read will be
179      placed.  If LAST_TOKEN == FIRST_TOKEN, then the buffer is full.
180      When the LAST_TOKEN == BUFFER, then the last token is at the
181      highest memory address in the BUFFER.  */
182   cp_token * GTY ((skip)) last_token;
183
184   /* A stack indicating positions at which cp_lexer_save_tokens was
185      called.  The top entry is the most recent position at which we
186      began saving tokens.  The entries are differences in token
187      position between FIRST_TOKEN and the first saved token.
188
189      If the stack is non-empty, we are saving tokens.  When a token is
190      consumed, the NEXT_TOKEN pointer will move, but the FIRST_TOKEN
191      pointer will not.  The token stream will be preserved so that it
192      can be reexamined later.
193
194      If the stack is empty, then we are not saving tokens.  Whenever a
195      token is consumed, the FIRST_TOKEN pointer will be moved, and the
196      consumed token will be gone forever.  */
197   varray_type saved_tokens;
198
199   /* The STRING_CST tokens encountered while processing the current
200      string literal.  */
201   varray_type string_tokens;
202
203   /* True if we should obtain more tokens from the preprocessor; false
204      if we are processing a saved token cache.  */
205   bool main_lexer_p;
206
207   /* True if we should output debugging information.  */
208   bool debugging_p;
209
210   /* The next lexer in a linked list of lexers.  */
211   struct cp_lexer *next;
212 } cp_lexer;
213
214 /* Prototypes.  */
215
216 static cp_lexer *cp_lexer_new_main
217   (void);
218 static cp_lexer *cp_lexer_new_from_tokens
219   (struct cp_token_cache *);
220 static int cp_lexer_saving_tokens
221   (const cp_lexer *);
222 static cp_token *cp_lexer_next_token
223   (cp_lexer *, cp_token *);
224 static cp_token *cp_lexer_prev_token
225   (cp_lexer *, cp_token *);
226 static ptrdiff_t cp_lexer_token_difference
227   (cp_lexer *, cp_token *, cp_token *);
228 static cp_token *cp_lexer_read_token
229   (cp_lexer *);
230 static void cp_lexer_maybe_grow_buffer
231   (cp_lexer *);
232 static void cp_lexer_get_preprocessor_token
233   (cp_lexer *, cp_token *);
234 static cp_token *cp_lexer_peek_token
235   (cp_lexer *);
236 static cp_token *cp_lexer_peek_nth_token
237   (cp_lexer *, size_t);
238 static inline bool cp_lexer_next_token_is
239   (cp_lexer *, enum cpp_ttype);
240 static bool cp_lexer_next_token_is_not
241   (cp_lexer *, enum cpp_ttype);
242 static bool cp_lexer_next_token_is_keyword
243   (cp_lexer *, enum rid);
244 static cp_token *cp_lexer_consume_token
245   (cp_lexer *);
246 static void cp_lexer_purge_token
247   (cp_lexer *);
248 static void cp_lexer_purge_tokens_after
249   (cp_lexer *, cp_token *);
250 static void cp_lexer_save_tokens
251   (cp_lexer *);
252 static void cp_lexer_commit_tokens
253   (cp_lexer *);
254 static void cp_lexer_rollback_tokens
255   (cp_lexer *);
256 static inline void cp_lexer_set_source_position_from_token
257   (cp_lexer *, const cp_token *);
258 static void cp_lexer_print_token
259   (FILE *, cp_token *);
260 static inline bool cp_lexer_debugging_p
261   (cp_lexer *);
262 static void cp_lexer_start_debugging
263   (cp_lexer *) ATTRIBUTE_UNUSED;
264 static void cp_lexer_stop_debugging
265   (cp_lexer *) ATTRIBUTE_UNUSED;
266
267 /* Manifest constants.  */
268
269 #define CP_TOKEN_BUFFER_SIZE 5
270 #define CP_SAVED_TOKENS_SIZE 5
271
272 /* A token type for keywords, as opposed to ordinary identifiers.  */
273 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
274
275 /* A token type for template-ids.  If a template-id is processed while
276    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
277    the value of the CPP_TEMPLATE_ID is whatever was returned by
278    cp_parser_template_id.  */
279 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
280
281 /* A token type for nested-name-specifiers.  If a
282    nested-name-specifier is processed while parsing tentatively, it is
283    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
284    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
285    cp_parser_nested_name_specifier_opt.  */
286 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
287
288 /* A token type for tokens that are not tokens at all; these are used
289    to mark the end of a token block.  */
290 #define CPP_NONE (CPP_NESTED_NAME_SPECIFIER + 1)
291
292 /* Variables.  */
293
294 /* The stream to which debugging output should be written.  */
295 static FILE *cp_lexer_debug_stream;
296
297 /* Create a new main C++ lexer, the lexer that gets tokens from the
298    preprocessor.  */
299
300 static cp_lexer *
301 cp_lexer_new_main (void)
302 {
303   cp_lexer *lexer;
304   cp_token first_token;
305
306   /* It's possible that lexing the first token will load a PCH file,
307      which is a GC collection point.  So we have to grab the first
308      token before allocating any memory.  */
309   cp_lexer_get_preprocessor_token (NULL, &first_token);
310   c_common_no_more_pch ();
311
312   /* Allocate the memory.  */
313   lexer = ggc_alloc_cleared (sizeof (cp_lexer));
314
315   /* Create the circular buffer.  */
316   lexer->buffer = ggc_calloc (CP_TOKEN_BUFFER_SIZE, sizeof (cp_token));
317   lexer->buffer_end = lexer->buffer + CP_TOKEN_BUFFER_SIZE;
318
319   /* There is one token in the buffer.  */
320   lexer->last_token = lexer->buffer + 1;
321   lexer->first_token = lexer->buffer;
322   lexer->next_token = lexer->buffer;
323   memcpy (lexer->buffer, &first_token, sizeof (cp_token));
324
325   /* This lexer obtains more tokens by calling c_lex.  */
326   lexer->main_lexer_p = true;
327
328   /* Create the SAVED_TOKENS stack.  */
329   VARRAY_INT_INIT (lexer->saved_tokens, CP_SAVED_TOKENS_SIZE, "saved_tokens");
330
331   /* Create the STRINGS array.  */
332   VARRAY_TREE_INIT (lexer->string_tokens, 32, "strings");
333
334   /* Assume we are not debugging.  */
335   lexer->debugging_p = false;
336
337   return lexer;
338 }
339
340 /* Create a new lexer whose token stream is primed with the TOKENS.
341    When these tokens are exhausted, no new tokens will be read.  */
342
343 static cp_lexer *
344 cp_lexer_new_from_tokens (cp_token_cache *tokens)
345 {
346   cp_lexer *lexer;
347   cp_token *token;
348   cp_token_block *block;
349   ptrdiff_t num_tokens;
350
351   /* Allocate the memory.  */
352   lexer = ggc_alloc_cleared (sizeof (cp_lexer));
353
354   /* Create a new buffer, appropriately sized.  */
355   num_tokens = 0;
356   for (block = tokens->first; block != NULL; block = block->next)
357     num_tokens += block->num_tokens;
358   lexer->buffer = ggc_alloc (num_tokens * sizeof (cp_token));
359   lexer->buffer_end = lexer->buffer + num_tokens;
360
361   /* Install the tokens.  */
362   token = lexer->buffer;
363   for (block = tokens->first; block != NULL; block = block->next)
364     {
365       memcpy (token, block->tokens, block->num_tokens * sizeof (cp_token));
366       token += block->num_tokens;
367     }
368
369   /* The FIRST_TOKEN is the beginning of the buffer.  */
370   lexer->first_token = lexer->buffer;
371   /* The next available token is also at the beginning of the buffer.  */
372   lexer->next_token = lexer->buffer;
373   /* The buffer is full.  */
374   lexer->last_token = lexer->first_token;
375
376   /* This lexer doesn't obtain more tokens.  */
377   lexer->main_lexer_p = false;
378
379   /* Create the SAVED_TOKENS stack.  */
380   VARRAY_INT_INIT (lexer->saved_tokens, CP_SAVED_TOKENS_SIZE, "saved_tokens");
381
382   /* Create the STRINGS array.  */
383   VARRAY_TREE_INIT (lexer->string_tokens, 32, "strings");
384
385   /* Assume we are not debugging.  */
386   lexer->debugging_p = false;
387
388   return lexer;
389 }
390
391 /* Returns nonzero if debugging information should be output.  */
392
393 static inline bool
394 cp_lexer_debugging_p (cp_lexer *lexer)
395 {
396   return lexer->debugging_p;
397 }
398
399 /* Set the current source position from the information stored in
400    TOKEN.  */
401
402 static inline void
403 cp_lexer_set_source_position_from_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
404                                          const cp_token *token)
405 {
406   /* Ideally, the source position information would not be a global
407      variable, but it is.  */
408
409   /* Update the line number.  */
410   if (token->type != CPP_EOF)
411     input_location = token->location;
412 }
413
414 /* TOKEN points into the circular token buffer.  Return a pointer to
415    the next token in the buffer.  */
416
417 static inline cp_token *
418 cp_lexer_next_token (cp_lexer* lexer, cp_token* token)
419 {
420   token++;
421   if (token == lexer->buffer_end)
422     token = lexer->buffer;
423   return token;
424 }
425
426 /* TOKEN points into the circular token buffer.  Return a pointer to
427    the previous token in the buffer.  */
428
429 static inline cp_token *
430 cp_lexer_prev_token (cp_lexer* lexer, cp_token* token)
431 {
432   if (token == lexer->buffer)
433     token = lexer->buffer_end;
434   return token - 1;
435 }
436
437 /* nonzero if we are presently saving tokens.  */
438
439 static int
440 cp_lexer_saving_tokens (const cp_lexer* lexer)
441 {
442   return VARRAY_ACTIVE_SIZE (lexer->saved_tokens) != 0;
443 }
444
445 /* Return a pointer to the token that is N tokens beyond TOKEN in the
446    buffer.  */
447
448 static cp_token *
449 cp_lexer_advance_token (cp_lexer *lexer, cp_token *token, ptrdiff_t n)
450 {
451   token += n;
452   if (token >= lexer->buffer_end)
453     token = lexer->buffer + (token - lexer->buffer_end);
454   return token;
455 }
456
457 /* Returns the number of times that START would have to be incremented
458    to reach FINISH.  If START and FINISH are the same, returns zero.  */
459
460 static ptrdiff_t
461 cp_lexer_token_difference (cp_lexer* lexer, cp_token* start, cp_token* finish)
462 {
463   if (finish >= start)
464     return finish - start;
465   else
466     return ((lexer->buffer_end - lexer->buffer)
467             - (start - finish));
468 }
469
470 /* Obtain another token from the C preprocessor and add it to the
471    token buffer.  Returns the newly read token.  */
472
473 static cp_token *
474 cp_lexer_read_token (cp_lexer* lexer)
475 {
476   cp_token *token;
477
478   /* Make sure there is room in the buffer.  */
479   cp_lexer_maybe_grow_buffer (lexer);
480
481   /* If there weren't any tokens, then this one will be the first.  */
482   if (!lexer->first_token)
483     lexer->first_token = lexer->last_token;
484   /* Similarly, if there were no available tokens, there is one now.  */
485   if (!lexer->next_token)
486     lexer->next_token = lexer->last_token;
487
488   /* Figure out where we're going to store the new token.  */
489   token = lexer->last_token;
490
491   /* Get a new token from the preprocessor.  */
492   cp_lexer_get_preprocessor_token (lexer, token);
493
494   /* Increment LAST_TOKEN.  */
495   lexer->last_token = cp_lexer_next_token (lexer, token);
496
497   /* Strings should have type `const char []'.  Right now, we will
498      have an ARRAY_TYPE that is constant rather than an array of
499      constant elements.
500      FIXME: Make fix_string_type get this right in the first place.  */
501   if ((token->type == CPP_STRING || token->type == CPP_WSTRING)
502       && flag_const_strings)
503     {
504       if (c_lex_string_translate)
505         {
506           tree value = token->value;
507           tree type;
508
509           /* We might as well go ahead and release the chained
510              translated string such that we can reuse its memory.  */
511           if (TREE_CHAIN (value))
512             value = TREE_CHAIN (token->value);
513
514           /* Get the current type.  It will be an ARRAY_TYPE.  */
515           type = TREE_TYPE (value);
516           /* Use build_cplus_array_type to rebuild the array, thereby
517              getting the right type.  */
518           type = build_cplus_array_type (TREE_TYPE (type),
519                                          TYPE_DOMAIN (type));
520           /* Reset the type of the token.  */
521           TREE_TYPE (value) = type;
522         }
523     }
524
525   return token;
526 }
527
528 /* If the circular buffer is full, make it bigger.  */
529
530 static void
531 cp_lexer_maybe_grow_buffer (cp_lexer* lexer)
532 {
533   /* If the buffer is full, enlarge it.  */
534   if (lexer->last_token == lexer->first_token)
535     {
536       cp_token *new_buffer;
537       cp_token *old_buffer;
538       cp_token *new_first_token;
539       ptrdiff_t buffer_length;
540       size_t num_tokens_to_copy;
541
542       /* Remember the current buffer pointer.  It will become invalid,
543          but we will need to do pointer arithmetic involving this
544          value.  */
545       old_buffer = lexer->buffer;
546       /* Compute the current buffer size.  */
547       buffer_length = lexer->buffer_end - lexer->buffer;
548       /* Allocate a buffer twice as big.  */
549       new_buffer = ggc_realloc (lexer->buffer,
550                                 2 * buffer_length * sizeof (cp_token));
551
552       /* Because the buffer is circular, logically consecutive tokens
553          are not necessarily placed consecutively in memory.
554          Therefore, we must keep move the tokens that were before
555          FIRST_TOKEN to the second half of the newly allocated
556          buffer.  */
557       num_tokens_to_copy = (lexer->first_token - old_buffer);
558       memcpy (new_buffer + buffer_length,
559               new_buffer,
560               num_tokens_to_copy * sizeof (cp_token));
561       /* Clear the rest of the buffer.  We never look at this storage,
562          but the garbage collector may.  */
563       memset (new_buffer + buffer_length + num_tokens_to_copy, 0,
564               (buffer_length - num_tokens_to_copy) * sizeof (cp_token));
565
566       /* Now recompute all of the buffer pointers.  */
567       new_first_token
568         = new_buffer + (lexer->first_token - old_buffer);
569       if (lexer->next_token != NULL)
570         {
571           ptrdiff_t next_token_delta;
572
573           if (lexer->next_token > lexer->first_token)
574             next_token_delta = lexer->next_token - lexer->first_token;
575           else
576             next_token_delta =
577               buffer_length - (lexer->first_token - lexer->next_token);
578           lexer->next_token = new_first_token + next_token_delta;
579         }
580       lexer->last_token = new_first_token + buffer_length;
581       lexer->buffer = new_buffer;
582       lexer->buffer_end = new_buffer + buffer_length * 2;
583       lexer->first_token = new_first_token;
584     }
585 }
586
587 /* Store the next token from the preprocessor in *TOKEN.  */
588
589 static void
590 cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
591                                  cp_token *token)
592 {
593   bool done;
594
595   /* If this not the main lexer, return a terminating CPP_EOF token.  */
596   if (lexer != NULL && !lexer->main_lexer_p)
597     {
598       token->type = CPP_EOF;
599       token->location.line = 0;
600       token->location.file = NULL;
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 /* The parser.  */
999
1000 /* Overview
1001    --------
1002
1003    A cp_parser parses the token stream as specified by the C++
1004    grammar.  Its job is purely parsing, not semantic analysis.  For
1005    example, the parser breaks the token stream into declarators,
1006    expressions, statements, and other similar syntactic constructs.
1007    It does not check that the types of the expressions on either side
1008    of an assignment-statement are compatible, or that a function is
1009    not declared with a parameter of type `void'.
1010
1011    The parser invokes routines elsewhere in the compiler to perform
1012    semantic analysis and to build up the abstract syntax tree for the
1013    code processed.
1014
1015    The parser (and the template instantiation code, which is, in a
1016    way, a close relative of parsing) are the only parts of the
1017    compiler that should be calling push_scope and pop_scope, or
1018    related functions.  The parser (and template instantiation code)
1019    keeps track of what scope is presently active; everything else
1020    should simply honor that.  (The code that generates static
1021    initializers may also need to set the scope, in order to check
1022    access control correctly when emitting the initializers.)
1023
1024    Methodology
1025    -----------
1026
1027    The parser is of the standard recursive-descent variety.  Upcoming
1028    tokens in the token stream are examined in order to determine which
1029    production to use when parsing a non-terminal.  Some C++ constructs
1030    require arbitrary look ahead to disambiguate.  For example, it is
1031    impossible, in the general case, to tell whether a statement is an
1032    expression or declaration without scanning the entire statement.
1033    Therefore, the parser is capable of "parsing tentatively."  When the
1034    parser is not sure what construct comes next, it enters this mode.
1035    Then, while we attempt to parse the construct, the parser queues up
1036    error messages, rather than issuing them immediately, and saves the
1037    tokens it consumes.  If the construct is parsed successfully, the
1038    parser "commits", i.e., it issues any queued error messages and
1039    the tokens that were being preserved are permanently discarded.
1040    If, however, the construct is not parsed successfully, the parser
1041    rolls back its state completely so that it can resume parsing using
1042    a different alternative.
1043
1044    Future Improvements
1045    -------------------
1046
1047    The performance of the parser could probably be improved
1048    substantially.  Some possible improvements include:
1049
1050      - The expression parser recurses through the various levels of
1051        precedence as specified in the grammar, rather than using an
1052        operator-precedence technique.  Therefore, parsing a simple
1053        identifier requires multiple recursive calls.
1054
1055      - We could often eliminate the need to parse tentatively by
1056        looking ahead a little bit.  In some places, this approach
1057        might not entirely eliminate the need to parse tentatively, but
1058        it might still speed up the average case.  */
1059
1060 /* Flags that are passed to some parsing functions.  These values can
1061    be bitwise-ored together.  */
1062
1063 typedef enum cp_parser_flags
1064 {
1065   /* No flags.  */
1066   CP_PARSER_FLAGS_NONE = 0x0,
1067   /* The construct is optional.  If it is not present, then no error
1068      should be issued.  */
1069   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1070   /* When parsing a type-specifier, do not allow user-defined types.  */
1071   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1072 } cp_parser_flags;
1073
1074 /* The different kinds of declarators we want to parse.  */
1075
1076 typedef enum cp_parser_declarator_kind
1077 {
1078   /* We want an abstract declarator.  */
1079   CP_PARSER_DECLARATOR_ABSTRACT,
1080   /* We want a named declarator.  */
1081   CP_PARSER_DECLARATOR_NAMED,
1082   /* We don't mind, but the name must be an unqualified-id.  */
1083   CP_PARSER_DECLARATOR_EITHER
1084 } cp_parser_declarator_kind;
1085
1086 /* A mapping from a token type to a corresponding tree node type.  */
1087
1088 typedef struct cp_parser_token_tree_map_node
1089 {
1090   /* The token type.  */
1091   ENUM_BITFIELD (cpp_ttype) token_type : 8;
1092   /* The corresponding tree code.  */
1093   ENUM_BITFIELD (tree_code) tree_type : 8;
1094 } cp_parser_token_tree_map_node;
1095
1096 /* A complete map consists of several ordinary entries, followed by a
1097    terminator.  The terminating entry has a token_type of CPP_EOF.  */
1098
1099 typedef cp_parser_token_tree_map_node cp_parser_token_tree_map[];
1100
1101 /* The status of a tentative parse.  */
1102
1103 typedef enum cp_parser_status_kind
1104 {
1105   /* No errors have occurred.  */
1106   CP_PARSER_STATUS_KIND_NO_ERROR,
1107   /* An error has occurred.  */
1108   CP_PARSER_STATUS_KIND_ERROR,
1109   /* We are committed to this tentative parse, whether or not an error
1110      has occurred.  */
1111   CP_PARSER_STATUS_KIND_COMMITTED
1112 } cp_parser_status_kind;
1113
1114 /* Context that is saved and restored when parsing tentatively.  */
1115
1116 typedef struct cp_parser_context GTY (())
1117 {
1118   /* If this is a tentative parsing context, the status of the
1119      tentative parse.  */
1120   enum cp_parser_status_kind status;
1121   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1122      that are looked up in this context must be looked up both in the
1123      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1124      the context of the containing expression.  */
1125   tree object_type;
1126   /* The next parsing context in the stack.  */
1127   struct cp_parser_context *next;
1128 } cp_parser_context;
1129
1130 /* Prototypes.  */
1131
1132 /* Constructors and destructors.  */
1133
1134 static cp_parser_context *cp_parser_context_new
1135   (cp_parser_context *);
1136
1137 /* Class variables.  */
1138
1139 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1140
1141 /* Constructors and destructors.  */
1142
1143 /* Construct a new context.  The context below this one on the stack
1144    is given by NEXT.  */
1145
1146 static cp_parser_context *
1147 cp_parser_context_new (cp_parser_context* next)
1148 {
1149   cp_parser_context *context;
1150
1151   /* Allocate the storage.  */
1152   if (cp_parser_context_free_list != NULL)
1153     {
1154       /* Pull the first entry from the free list.  */
1155       context = cp_parser_context_free_list;
1156       cp_parser_context_free_list = context->next;
1157       memset (context, 0, sizeof (*context));
1158     }
1159   else
1160     context = ggc_alloc_cleared (sizeof (cp_parser_context));
1161   /* No errors have occurred yet in this context.  */
1162   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1163   /* If this is not the bottomost context, copy information that we
1164      need from the previous context.  */
1165   if (next)
1166     {
1167       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1168          expression, then we are parsing one in this context, too.  */
1169       context->object_type = next->object_type;
1170       /* Thread the stack.  */
1171       context->next = next;
1172     }
1173
1174   return context;
1175 }
1176
1177 /* The cp_parser structure represents the C++ parser.  */
1178
1179 typedef struct cp_parser GTY(())
1180 {
1181   /* The lexer from which we are obtaining tokens.  */
1182   cp_lexer *lexer;
1183
1184   /* The scope in which names should be looked up.  If NULL_TREE, then
1185      we look up names in the scope that is currently open in the
1186      source program.  If non-NULL, this is either a TYPE or
1187      NAMESPACE_DECL for the scope in which we should look.
1188
1189      This value is not cleared automatically after a name is looked
1190      up, so we must be careful to clear it before starting a new look
1191      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1192      will look up `Z' in the scope of `X', rather than the current
1193      scope.)  Unfortunately, it is difficult to tell when name lookup
1194      is complete, because we sometimes peek at a token, look it up,
1195      and then decide not to consume it.  */
1196   tree scope;
1197
1198   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1199      last lookup took place.  OBJECT_SCOPE is used if an expression
1200      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1201      respectively.  QUALIFYING_SCOPE is used for an expression of the
1202      form "X::Y"; it refers to X.  */
1203   tree object_scope;
1204   tree qualifying_scope;
1205
1206   /* A stack of parsing contexts.  All but the bottom entry on the
1207      stack will be tentative contexts.
1208
1209      We parse tentatively in order to determine which construct is in
1210      use in some situations.  For example, in order to determine
1211      whether a statement is an expression-statement or a
1212      declaration-statement we parse it tentatively as a
1213      declaration-statement.  If that fails, we then reparse the same
1214      token stream as an expression-statement.  */
1215   cp_parser_context *context;
1216
1217   /* True if we are parsing GNU C++.  If this flag is not set, then
1218      GNU extensions are not recognized.  */
1219   bool allow_gnu_extensions_p;
1220
1221   /* TRUE if the `>' token should be interpreted as the greater-than
1222      operator.  FALSE if it is the end of a template-id or
1223      template-parameter-list.  */
1224   bool greater_than_is_operator_p;
1225
1226   /* TRUE if default arguments are allowed within a parameter list
1227      that starts at this point. FALSE if only a gnu extension makes
1228      them permissible.  */
1229   bool default_arg_ok_p;
1230
1231   /* TRUE if we are parsing an integral constant-expression.  See
1232      [expr.const] for a precise definition.  */
1233   bool integral_constant_expression_p;
1234
1235   /* TRUE if we are parsing an integral constant-expression -- but a
1236      non-constant expression should be permitted as well.  This flag
1237      is used when parsing an array bound so that GNU variable-length
1238      arrays are tolerated.  */
1239   bool allow_non_integral_constant_expression_p;
1240
1241   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1242      been seen that makes the expression non-constant.  */
1243   bool non_integral_constant_expression_p;
1244
1245   /* TRUE if local variable names and `this' are forbidden in the
1246      current context.  */
1247   bool local_variables_forbidden_p;
1248
1249   /* TRUE if the declaration we are parsing is part of a
1250      linkage-specification of the form `extern string-literal
1251      declaration'.  */
1252   bool in_unbraced_linkage_specification_p;
1253
1254   /* TRUE if we are presently parsing a declarator, after the
1255      direct-declarator.  */
1256   bool in_declarator_p;
1257
1258   /* TRUE if we are presently parsing a template-argument-list.  */
1259   bool in_template_argument_list_p;
1260
1261   /* TRUE if we are presently parsing the body of an
1262      iteration-statement.  */
1263   bool in_iteration_statement_p;
1264
1265   /* TRUE if we are presently parsing the body of a switch
1266      statement.  */
1267   bool in_switch_statement_p;
1268
1269   /* TRUE if we are parsing a type-id in an expression context.  In
1270      such a situation, both "type (expr)" and "type (type)" are valid
1271      alternatives.  */
1272   bool in_type_id_in_expr_p;
1273
1274   /* If non-NULL, then we are parsing a construct where new type
1275      definitions are not permitted.  The string stored here will be
1276      issued as an error message if a type is defined.  */
1277   const char *type_definition_forbidden_message;
1278
1279   /* A list of lists. The outer list is a stack, used for member
1280      functions of local classes. At each level there are two sub-list,
1281      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1282      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1283      TREE_VALUE's. The functions are chained in reverse declaration
1284      order.
1285
1286      The TREE_PURPOSE sublist contains those functions with default
1287      arguments that need post processing, and the TREE_VALUE sublist
1288      contains those functions with definitions that need post
1289      processing.
1290
1291      These lists can only be processed once the outermost class being
1292      defined is complete.  */
1293   tree unparsed_functions_queues;
1294
1295   /* The number of classes whose definitions are currently in
1296      progress.  */
1297   unsigned num_classes_being_defined;
1298
1299   /* The number of template parameter lists that apply directly to the
1300      current declaration.  */
1301   unsigned num_template_parameter_lists;
1302 } cp_parser;
1303
1304 /* The type of a function that parses some kind of expression.  */
1305 typedef tree (*cp_parser_expression_fn) (cp_parser *);
1306
1307 /* Prototypes.  */
1308
1309 /* Constructors and destructors.  */
1310
1311 static cp_parser *cp_parser_new
1312   (void);
1313
1314 /* Routines to parse various constructs.
1315
1316    Those that return `tree' will return the error_mark_node (rather
1317    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1318    Sometimes, they will return an ordinary node if error-recovery was
1319    attempted, even though a parse error occurred.  So, to check
1320    whether or not a parse error occurred, you should always use
1321    cp_parser_error_occurred.  If the construct is optional (indicated
1322    either by an `_opt' in the name of the function that does the
1323    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1324    the construct is not present.  */
1325
1326 /* Lexical conventions [gram.lex]  */
1327
1328 static tree cp_parser_identifier
1329   (cp_parser *);
1330
1331 /* Basic concepts [gram.basic]  */
1332
1333 static bool cp_parser_translation_unit
1334   (cp_parser *);
1335
1336 /* Expressions [gram.expr]  */
1337
1338 static tree cp_parser_primary_expression
1339   (cp_parser *, cp_id_kind *, tree *);
1340 static tree cp_parser_id_expression
1341   (cp_parser *, bool, bool, bool *, bool);
1342 static tree cp_parser_unqualified_id
1343   (cp_parser *, bool, bool, bool);
1344 static tree cp_parser_nested_name_specifier_opt
1345   (cp_parser *, bool, bool, bool, bool);
1346 static tree cp_parser_nested_name_specifier
1347   (cp_parser *, bool, bool, bool, bool);
1348 static tree cp_parser_class_or_namespace_name
1349   (cp_parser *, bool, bool, bool, bool, bool);
1350 static tree cp_parser_postfix_expression
1351   (cp_parser *, bool);
1352 static tree cp_parser_postfix_open_square_expression
1353   (cp_parser *, tree, bool);
1354 static tree cp_parser_postfix_dot_deref_expression
1355   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1356 static tree cp_parser_parenthesized_expression_list
1357   (cp_parser *, bool, bool *);
1358 static void cp_parser_pseudo_destructor_name
1359   (cp_parser *, tree *, tree *);
1360 static tree cp_parser_unary_expression
1361   (cp_parser *, bool);
1362 static enum tree_code cp_parser_unary_operator
1363   (cp_token *);
1364 static tree cp_parser_new_expression
1365   (cp_parser *);
1366 static tree cp_parser_new_placement
1367   (cp_parser *);
1368 static tree cp_parser_new_type_id
1369   (cp_parser *);
1370 static tree cp_parser_new_declarator_opt
1371   (cp_parser *);
1372 static tree cp_parser_direct_new_declarator
1373   (cp_parser *);
1374 static tree cp_parser_new_initializer
1375   (cp_parser *);
1376 static tree cp_parser_delete_expression
1377   (cp_parser *);
1378 static tree cp_parser_cast_expression
1379   (cp_parser *, bool);
1380 static tree cp_parser_pm_expression
1381   (cp_parser *);
1382 static tree cp_parser_multiplicative_expression
1383   (cp_parser *);
1384 static tree cp_parser_additive_expression
1385   (cp_parser *);
1386 static tree cp_parser_shift_expression
1387   (cp_parser *);
1388 static tree cp_parser_relational_expression
1389   (cp_parser *);
1390 static tree cp_parser_equality_expression
1391   (cp_parser *);
1392 static tree cp_parser_and_expression
1393   (cp_parser *);
1394 static tree cp_parser_exclusive_or_expression
1395   (cp_parser *);
1396 static tree cp_parser_inclusive_or_expression
1397   (cp_parser *);
1398 static tree cp_parser_logical_and_expression
1399   (cp_parser *);
1400 static tree cp_parser_logical_or_expression
1401   (cp_parser *);
1402 static tree cp_parser_question_colon_clause
1403   (cp_parser *, tree);
1404 static tree cp_parser_assignment_expression
1405   (cp_parser *);
1406 static enum tree_code cp_parser_assignment_operator_opt
1407   (cp_parser *);
1408 static tree cp_parser_expression
1409   (cp_parser *);
1410 static tree cp_parser_constant_expression
1411   (cp_parser *, bool, bool *);
1412 static tree cp_parser_builtin_offsetof
1413   (cp_parser *);
1414
1415 /* Statements [gram.stmt.stmt]  */
1416
1417 static void cp_parser_statement
1418   (cp_parser *, tree);
1419 static tree cp_parser_labeled_statement
1420   (cp_parser *, tree);
1421 static tree cp_parser_expression_statement
1422   (cp_parser *, tree);
1423 static tree cp_parser_compound_statement
1424   (cp_parser *, tree, bool);
1425 static void cp_parser_statement_seq_opt
1426   (cp_parser *, tree);
1427 static tree cp_parser_selection_statement
1428   (cp_parser *);
1429 static tree cp_parser_condition
1430   (cp_parser *);
1431 static tree cp_parser_iteration_statement
1432   (cp_parser *);
1433 static void cp_parser_for_init_statement
1434   (cp_parser *);
1435 static tree cp_parser_jump_statement
1436   (cp_parser *);
1437 static void cp_parser_declaration_statement
1438   (cp_parser *);
1439
1440 static tree cp_parser_implicitly_scoped_statement
1441   (cp_parser *);
1442 static void cp_parser_already_scoped_statement
1443   (cp_parser *);
1444
1445 /* Declarations [gram.dcl.dcl] */
1446
1447 static void cp_parser_declaration_seq_opt
1448   (cp_parser *);
1449 static void cp_parser_declaration
1450   (cp_parser *);
1451 static void cp_parser_block_declaration
1452   (cp_parser *, bool);
1453 static void cp_parser_simple_declaration
1454   (cp_parser *, bool);
1455 static tree cp_parser_decl_specifier_seq
1456   (cp_parser *, cp_parser_flags, tree *, int *);
1457 static tree cp_parser_storage_class_specifier_opt
1458   (cp_parser *);
1459 static tree cp_parser_function_specifier_opt
1460   (cp_parser *);
1461 static tree cp_parser_type_specifier
1462   (cp_parser *, cp_parser_flags, bool, bool, int *, bool *);
1463 static tree cp_parser_simple_type_specifier
1464   (cp_parser *, cp_parser_flags, bool);
1465 static tree cp_parser_type_name
1466   (cp_parser *);
1467 static tree cp_parser_elaborated_type_specifier
1468   (cp_parser *, bool, bool);
1469 static tree cp_parser_enum_specifier
1470   (cp_parser *);
1471 static void cp_parser_enumerator_list
1472   (cp_parser *, tree);
1473 static void cp_parser_enumerator_definition
1474   (cp_parser *, tree);
1475 static tree cp_parser_namespace_name
1476   (cp_parser *);
1477 static void cp_parser_namespace_definition
1478   (cp_parser *);
1479 static void cp_parser_namespace_body
1480   (cp_parser *);
1481 static tree cp_parser_qualified_namespace_specifier
1482   (cp_parser *);
1483 static void cp_parser_namespace_alias_definition
1484   (cp_parser *);
1485 static void cp_parser_using_declaration
1486   (cp_parser *);
1487 static void cp_parser_using_directive
1488   (cp_parser *);
1489 static void cp_parser_asm_definition
1490   (cp_parser *);
1491 static void cp_parser_linkage_specification
1492   (cp_parser *);
1493
1494 /* Declarators [gram.dcl.decl] */
1495
1496 static tree cp_parser_init_declarator
1497   (cp_parser *, tree, tree, bool, bool, int, bool *);
1498 static tree cp_parser_declarator
1499   (cp_parser *, cp_parser_declarator_kind, int *, bool *);
1500 static tree cp_parser_direct_declarator
1501   (cp_parser *, cp_parser_declarator_kind, int *);
1502 static enum tree_code cp_parser_ptr_operator
1503   (cp_parser *, tree *, tree *);
1504 static tree cp_parser_cv_qualifier_seq_opt
1505   (cp_parser *);
1506 static tree cp_parser_cv_qualifier_opt
1507   (cp_parser *);
1508 static tree cp_parser_declarator_id
1509   (cp_parser *);
1510 static tree cp_parser_type_id
1511   (cp_parser *);
1512 static tree cp_parser_type_specifier_seq
1513   (cp_parser *);
1514 static tree cp_parser_parameter_declaration_clause
1515   (cp_parser *);
1516 static tree cp_parser_parameter_declaration_list
1517   (cp_parser *);
1518 static tree cp_parser_parameter_declaration
1519   (cp_parser *, bool, bool *);
1520 static void cp_parser_function_body
1521   (cp_parser *);
1522 static tree cp_parser_initializer
1523   (cp_parser *, bool *, bool *);
1524 static tree cp_parser_initializer_clause
1525   (cp_parser *, bool *);
1526 static tree cp_parser_initializer_list
1527   (cp_parser *, bool *);
1528
1529 static bool cp_parser_ctor_initializer_opt_and_function_body
1530   (cp_parser *);
1531
1532 /* Classes [gram.class] */
1533
1534 static tree cp_parser_class_name
1535   (cp_parser *, bool, bool, bool, bool, bool, bool);
1536 static tree cp_parser_class_specifier
1537   (cp_parser *);
1538 static tree cp_parser_class_head
1539   (cp_parser *, bool *, tree *);
1540 static enum tag_types cp_parser_class_key
1541   (cp_parser *);
1542 static void cp_parser_member_specification_opt
1543   (cp_parser *);
1544 static void cp_parser_member_declaration
1545   (cp_parser *);
1546 static tree cp_parser_pure_specifier
1547   (cp_parser *);
1548 static tree cp_parser_constant_initializer
1549   (cp_parser *);
1550
1551 /* Derived classes [gram.class.derived] */
1552
1553 static tree cp_parser_base_clause
1554   (cp_parser *);
1555 static tree cp_parser_base_specifier
1556   (cp_parser *);
1557
1558 /* Special member functions [gram.special] */
1559
1560 static tree cp_parser_conversion_function_id
1561   (cp_parser *);
1562 static tree cp_parser_conversion_type_id
1563   (cp_parser *);
1564 static tree cp_parser_conversion_declarator_opt
1565   (cp_parser *);
1566 static bool cp_parser_ctor_initializer_opt
1567   (cp_parser *);
1568 static void cp_parser_mem_initializer_list
1569   (cp_parser *);
1570 static tree cp_parser_mem_initializer
1571   (cp_parser *);
1572 static tree cp_parser_mem_initializer_id
1573   (cp_parser *);
1574
1575 /* Overloading [gram.over] */
1576
1577 static tree cp_parser_operator_function_id
1578   (cp_parser *);
1579 static tree cp_parser_operator
1580   (cp_parser *);
1581
1582 /* Templates [gram.temp] */
1583
1584 static void cp_parser_template_declaration
1585   (cp_parser *, bool);
1586 static tree cp_parser_template_parameter_list
1587   (cp_parser *);
1588 static tree cp_parser_template_parameter
1589   (cp_parser *);
1590 static tree cp_parser_type_parameter
1591   (cp_parser *);
1592 static tree cp_parser_template_id
1593   (cp_parser *, bool, bool, bool);
1594 static tree cp_parser_template_name
1595   (cp_parser *, bool, bool, bool, bool *);
1596 static tree cp_parser_template_argument_list
1597   (cp_parser *);
1598 static tree cp_parser_template_argument
1599   (cp_parser *);
1600 static void cp_parser_explicit_instantiation
1601   (cp_parser *);
1602 static void cp_parser_explicit_specialization
1603   (cp_parser *);
1604
1605 /* Exception handling [gram.exception] */
1606
1607 static tree cp_parser_try_block
1608   (cp_parser *);
1609 static bool cp_parser_function_try_block
1610   (cp_parser *);
1611 static void cp_parser_handler_seq
1612   (cp_parser *);
1613 static void cp_parser_handler
1614   (cp_parser *);
1615 static tree cp_parser_exception_declaration
1616   (cp_parser *);
1617 static tree cp_parser_throw_expression
1618   (cp_parser *);
1619 static tree cp_parser_exception_specification_opt
1620   (cp_parser *);
1621 static tree cp_parser_type_id_list
1622   (cp_parser *);
1623
1624 /* GNU Extensions */
1625
1626 static tree cp_parser_asm_specification_opt
1627   (cp_parser *);
1628 static tree cp_parser_asm_operand_list
1629   (cp_parser *);
1630 static tree cp_parser_asm_clobber_list
1631   (cp_parser *);
1632 static tree cp_parser_attributes_opt
1633   (cp_parser *);
1634 static tree cp_parser_attribute_list
1635   (cp_parser *);
1636 static bool cp_parser_extension_opt
1637   (cp_parser *, int *);
1638 static void cp_parser_label_declaration
1639   (cp_parser *);
1640
1641 /* Utility Routines */
1642
1643 static tree cp_parser_lookup_name
1644   (cp_parser *, tree, bool, bool, bool, bool);
1645 static tree cp_parser_lookup_name_simple
1646   (cp_parser *, tree);
1647 static tree cp_parser_maybe_treat_template_as_class
1648   (tree, bool);
1649 static bool cp_parser_check_declarator_template_parameters
1650   (cp_parser *, tree);
1651 static bool cp_parser_check_template_parameters
1652   (cp_parser *, unsigned);
1653 static tree cp_parser_simple_cast_expression
1654   (cp_parser *);
1655 static tree cp_parser_binary_expression
1656   (cp_parser *, const cp_parser_token_tree_map, cp_parser_expression_fn);
1657 static tree cp_parser_global_scope_opt
1658   (cp_parser *, bool);
1659 static bool cp_parser_constructor_declarator_p
1660   (cp_parser *, bool);
1661 static tree cp_parser_function_definition_from_specifiers_and_declarator
1662   (cp_parser *, tree, tree, tree);
1663 static tree cp_parser_function_definition_after_declarator
1664   (cp_parser *, bool);
1665 static void cp_parser_template_declaration_after_export
1666   (cp_parser *, bool);
1667 static tree cp_parser_single_declaration
1668   (cp_parser *, bool, bool *);
1669 static tree cp_parser_functional_cast
1670   (cp_parser *, tree);
1671 static tree cp_parser_save_member_function_body
1672   (cp_parser *, tree, tree, tree);
1673 static tree cp_parser_enclosed_template_argument_list
1674   (cp_parser *);
1675 static void cp_parser_save_default_args
1676   (cp_parser *, tree);
1677 static void cp_parser_late_parsing_for_member
1678   (cp_parser *, tree);
1679 static void cp_parser_late_parsing_default_args
1680   (cp_parser *, tree);
1681 static tree cp_parser_sizeof_operand
1682   (cp_parser *, enum rid);
1683 static bool cp_parser_declares_only_class_p
1684   (cp_parser *);
1685 static bool cp_parser_friend_p
1686   (tree);
1687 static cp_token *cp_parser_require
1688   (cp_parser *, enum cpp_ttype, const char *);
1689 static cp_token *cp_parser_require_keyword
1690   (cp_parser *, enum rid, const char *);
1691 static bool cp_parser_token_starts_function_definition_p
1692   (cp_token *);
1693 static bool cp_parser_next_token_starts_class_definition_p
1694   (cp_parser *);
1695 static bool cp_parser_next_token_ends_template_argument_p
1696   (cp_parser *);
1697 static bool cp_parser_nth_token_starts_template_argument_list_p
1698   (cp_parser *, size_t);
1699 static enum tag_types cp_parser_token_is_class_key
1700   (cp_token *);
1701 static void cp_parser_check_class_key
1702   (enum tag_types, tree type);
1703 static void cp_parser_check_access_in_redeclaration
1704   (tree type);
1705 static bool cp_parser_optional_template_keyword
1706   (cp_parser *);
1707 static void cp_parser_pre_parsed_nested_name_specifier
1708   (cp_parser *);
1709 static void cp_parser_cache_group
1710   (cp_parser *, cp_token_cache *, enum cpp_ttype, unsigned);
1711 static void cp_parser_parse_tentatively
1712   (cp_parser *);
1713 static void cp_parser_commit_to_tentative_parse
1714   (cp_parser *);
1715 static void cp_parser_abort_tentative_parse
1716   (cp_parser *);
1717 static bool cp_parser_parse_definitely
1718   (cp_parser *);
1719 static inline bool cp_parser_parsing_tentatively
1720   (cp_parser *);
1721 static bool cp_parser_committed_to_tentative_parse
1722   (cp_parser *);
1723 static void cp_parser_error
1724   (cp_parser *, const char *);
1725 static void cp_parser_name_lookup_error
1726   (cp_parser *, tree, tree, const char *);
1727 static bool cp_parser_simulate_error
1728   (cp_parser *);
1729 static void cp_parser_check_type_definition
1730   (cp_parser *);
1731 static void cp_parser_check_for_definition_in_return_type
1732   (tree, int);
1733 static void cp_parser_check_for_invalid_template_id
1734   (cp_parser *, tree);
1735 static bool cp_parser_non_integral_constant_expression
1736   (cp_parser *, const char *);
1737 static void cp_parser_diagnose_invalid_type_name
1738   (cp_parser *, tree, tree);
1739 static bool cp_parser_parse_and_diagnose_invalid_type_name
1740   (cp_parser *);
1741 static int cp_parser_skip_to_closing_parenthesis
1742   (cp_parser *, bool, bool, bool);
1743 static void cp_parser_skip_to_end_of_statement
1744   (cp_parser *);
1745 static void cp_parser_consume_semicolon_at_end_of_statement
1746   (cp_parser *);
1747 static void cp_parser_skip_to_end_of_block_or_statement
1748   (cp_parser *);
1749 static void cp_parser_skip_to_closing_brace
1750   (cp_parser *);
1751 static void cp_parser_skip_until_found
1752   (cp_parser *, enum cpp_ttype, const char *);
1753 static bool cp_parser_error_occurred
1754   (cp_parser *);
1755 static bool cp_parser_allow_gnu_extensions_p
1756   (cp_parser *);
1757 static bool cp_parser_is_string_literal
1758   (cp_token *);
1759 static bool cp_parser_is_keyword
1760   (cp_token *, enum rid);
1761 static tree cp_parser_make_typename_type
1762   (cp_parser *, tree, tree);
1763
1764 /* Returns nonzero if we are parsing tentatively.  */
1765
1766 static inline bool
1767 cp_parser_parsing_tentatively (cp_parser* parser)
1768 {
1769   return parser->context->next != NULL;
1770 }
1771
1772 /* Returns nonzero if TOKEN is a string literal.  */
1773
1774 static bool
1775 cp_parser_is_string_literal (cp_token* token)
1776 {
1777   return (token->type == CPP_STRING || token->type == CPP_WSTRING);
1778 }
1779
1780 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
1781
1782 static bool
1783 cp_parser_is_keyword (cp_token* token, enum rid keyword)
1784 {
1785   return token->keyword == keyword;
1786 }
1787
1788 /* Issue the indicated error MESSAGE.  */
1789
1790 static void
1791 cp_parser_error (cp_parser* parser, const char* message)
1792 {
1793   /* Output the MESSAGE -- unless we're parsing tentatively.  */
1794   if (!cp_parser_simulate_error (parser))
1795     {
1796       cp_token *token;
1797       token = cp_lexer_peek_token (parser->lexer);
1798       c_parse_error (message,
1799                      /* Because c_parser_error does not understand
1800                         CPP_KEYWORD, keywords are treated like
1801                         identifiers.  */
1802                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
1803                      token->value);
1804     }
1805 }
1806
1807 /* Issue an error about name-lookup failing.  NAME is the
1808    IDENTIFIER_NODE DECL is the result of
1809    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
1810    the thing that we hoped to find.  */
1811
1812 static void
1813 cp_parser_name_lookup_error (cp_parser* parser,
1814                              tree name,
1815                              tree decl,
1816                              const char* desired)
1817 {
1818   /* If name lookup completely failed, tell the user that NAME was not
1819      declared.  */
1820   if (decl == error_mark_node)
1821     {
1822       if (parser->scope && parser->scope != global_namespace)
1823         error ("`%D::%D' has not been declared",
1824                parser->scope, name);
1825       else if (parser->scope == global_namespace)
1826         error ("`::%D' has not been declared", name);
1827       else
1828         error ("`%D' has not been declared", name);
1829     }
1830   else if (parser->scope && parser->scope != global_namespace)
1831     error ("`%D::%D' %s", parser->scope, name, desired);
1832   else if (parser->scope == global_namespace)
1833     error ("`::%D' %s", name, desired);
1834   else
1835     error ("`%D' %s", name, desired);
1836 }
1837
1838 /* If we are parsing tentatively, remember that an error has occurred
1839    during this tentative parse.  Returns true if the error was
1840    simulated; false if a message should be issued by the caller.  */
1841
1842 static bool
1843 cp_parser_simulate_error (cp_parser* parser)
1844 {
1845   if (cp_parser_parsing_tentatively (parser)
1846       && !cp_parser_committed_to_tentative_parse (parser))
1847     {
1848       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
1849       return true;
1850     }
1851   return false;
1852 }
1853
1854 /* This function is called when a type is defined.  If type
1855    definitions are forbidden at this point, an error message is
1856    issued.  */
1857
1858 static void
1859 cp_parser_check_type_definition (cp_parser* parser)
1860 {
1861   /* If types are forbidden here, issue a message.  */
1862   if (parser->type_definition_forbidden_message)
1863     /* Use `%s' to print the string in case there are any escape
1864        characters in the message.  */
1865     error ("%s", parser->type_definition_forbidden_message);
1866 }
1867
1868 /* This function is called when a declaration is parsed.  If
1869    DECLARATOR is a function declarator and DECLARES_CLASS_OR_ENUM
1870    indicates that a type was defined in the decl-specifiers for DECL,
1871    then an error is issued.  */
1872
1873 static void
1874 cp_parser_check_for_definition_in_return_type (tree declarator,
1875                                                int declares_class_or_enum)
1876 {
1877   /* [dcl.fct] forbids type definitions in return types.
1878      Unfortunately, it's not easy to know whether or not we are
1879      processing a return type until after the fact.  */
1880   while (declarator
1881          && (TREE_CODE (declarator) == INDIRECT_REF
1882              || TREE_CODE (declarator) == ADDR_EXPR))
1883     declarator = TREE_OPERAND (declarator, 0);
1884   if (declarator
1885       && TREE_CODE (declarator) == CALL_EXPR
1886       && declares_class_or_enum & 2)
1887     error ("new types may not be defined in a return type");
1888 }
1889
1890 /* A type-specifier (TYPE) has been parsed which cannot be followed by
1891    "<" in any valid C++ program.  If the next token is indeed "<",
1892    issue a message warning the user about what appears to be an
1893    invalid attempt to form a template-id.  */
1894
1895 static void
1896 cp_parser_check_for_invalid_template_id (cp_parser* parser,
1897                                          tree type)
1898 {
1899   ptrdiff_t start;
1900   cp_token *token;
1901
1902   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
1903     {
1904       if (TYPE_P (type))
1905         error ("`%T' is not a template", type);
1906       else if (TREE_CODE (type) == IDENTIFIER_NODE)
1907         error ("`%E' is not a template", type);
1908       else
1909         error ("invalid template-id");
1910       /* Remember the location of the invalid "<".  */
1911       if (cp_parser_parsing_tentatively (parser)
1912           && !cp_parser_committed_to_tentative_parse (parser))
1913         {
1914           token = cp_lexer_peek_token (parser->lexer);
1915           token = cp_lexer_prev_token (parser->lexer, token);
1916           start = cp_lexer_token_difference (parser->lexer,
1917                                              parser->lexer->first_token,
1918                                              token);
1919         }
1920       else
1921         start = -1;
1922       /* Consume the "<".  */
1923       cp_lexer_consume_token (parser->lexer);
1924       /* Parse the template arguments.  */
1925       cp_parser_enclosed_template_argument_list (parser);
1926       /* Permanently remove the invalid template arguments so that
1927          this error message is not issued again.  */
1928       if (start >= 0)
1929         {
1930           token = cp_lexer_advance_token (parser->lexer,
1931                                           parser->lexer->first_token,
1932                                           start);
1933           cp_lexer_purge_tokens_after (parser->lexer, token);
1934         }
1935     }
1936 }
1937
1938 /* If parsing an integral constant-expression, issue an error message
1939    about the fact that THING appeared and return true.  Otherwise,
1940    return false, marking the current expression as non-constant.  */
1941
1942 static bool
1943 cp_parser_non_integral_constant_expression (cp_parser  *parser,
1944                                             const char *thing)
1945 {
1946   if (parser->integral_constant_expression_p)
1947     {
1948       if (!parser->allow_non_integral_constant_expression_p)
1949         {
1950           error ("%s cannot appear in a constant-expression", thing);
1951           return true;
1952         }
1953       parser->non_integral_constant_expression_p = true;
1954     }
1955   return false;
1956 }
1957
1958 /* Emit a diagnostic for an invalid type name. Consider also if it is
1959    qualified or not and the result of a lookup, to provide a better
1960    message.  */
1961
1962 static void
1963 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
1964 {
1965   tree decl, old_scope;
1966   /* Try to lookup the identifier.  */
1967   old_scope = parser->scope;
1968   parser->scope = scope;
1969   decl = cp_parser_lookup_name_simple (parser, id);
1970   parser->scope = old_scope;
1971   /* If the lookup found a template-name, it means that the user forgot
1972   to specify an argument list. Emit an useful error message.  */
1973   if (TREE_CODE (decl) == TEMPLATE_DECL)
1974     error ("invalid use of template-name `%E' without an argument list",
1975       decl);
1976   else if (!parser->scope)
1977     {
1978       /* Issue an error message.  */
1979       error ("`%E' does not name a type", id);
1980       /* If we're in a template class, it's possible that the user was
1981          referring to a type from a base class.  For example:
1982
1983            template <typename T> struct A { typedef T X; };
1984            template <typename T> struct B : public A<T> { X x; };
1985
1986          The user should have said "typename A<T>::X".  */
1987       if (processing_template_decl && current_class_type)
1988         {
1989           tree b;
1990
1991           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
1992                b;
1993                b = TREE_CHAIN (b))
1994             {
1995               tree base_type = BINFO_TYPE (b);
1996               if (CLASS_TYPE_P (base_type)
1997                   && dependent_type_p (base_type))
1998                 {
1999                   tree field;
2000                   /* Go from a particular instantiation of the
2001                      template (which will have an empty TYPE_FIELDs),
2002                      to the main version.  */
2003                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2004                   for (field = TYPE_FIELDS (base_type);
2005                        field;
2006                        field = TREE_CHAIN (field))
2007                     if (TREE_CODE (field) == TYPE_DECL
2008                         && DECL_NAME (field) == id)
2009                       {
2010                         inform ("(perhaps `typename %T::%E' was intended)",
2011                                 BINFO_TYPE (b), id);
2012                         break;
2013                       }
2014                   if (field)
2015                     break;
2016                 }
2017             }
2018         }
2019     }
2020   /* Here we diagnose qualified-ids where the scope is actually correct,
2021      but the identifier does not resolve to a valid type name.  */
2022   else
2023     {
2024       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2025         error ("`%E' in namespace `%E' does not name a type",
2026                id, parser->scope);
2027       else if (TYPE_P (parser->scope))
2028         error ("`%E' in class `%T' does not name a type",
2029                id, parser->scope);
2030       else
2031         abort();
2032     }
2033 }
2034
2035 /* Check for a common situation where a type-name should be present,
2036    but is not, and issue a sensible error message.  Returns true if an
2037    invalid type-name was detected.
2038
2039    The situation handled by this function are variable declarations of the
2040    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2041    Usually, `ID' should name a type, but if we got here it means that it
2042    does not. We try to emit the best possible error message depending on
2043    how exactly the id-expression looks like.
2044 */
2045
2046 static bool
2047 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2048 {
2049   tree id;
2050
2051   cp_parser_parse_tentatively (parser);
2052   id = cp_parser_id_expression (parser,
2053                                 /*template_keyword_p=*/false,
2054                                 /*check_dependency_p=*/true,
2055                                 /*template_p=*/NULL,
2056                                 /*declarator_p=*/true);
2057   /* After the id-expression, there should be a plain identifier,
2058      otherwise this is not a simple variable declaration. Also, if
2059      the scope is dependent, we cannot do much.  */
2060   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2061       || (parser->scope && TYPE_P (parser->scope)
2062           && dependent_type_p (parser->scope)))
2063     {
2064       cp_parser_abort_tentative_parse (parser);
2065       return false;
2066     }
2067   if (!cp_parser_parse_definitely (parser))
2068     return false;
2069
2070   /* If we got here, this cannot be a valid variable declaration, thus
2071      the cp_parser_id_expression must have resolved to a plain identifier
2072      node (not a TYPE_DECL or TEMPLATE_ID_EXPR).  */
2073   my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 20030203);
2074   /* Emit a diagnostic for the invalid type.  */
2075   cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2076   /* Skip to the end of the declaration; there's no point in
2077      trying to process it.  */
2078   cp_parser_skip_to_end_of_block_or_statement (parser);
2079   return true;
2080 }
2081
2082 /* Consume tokens up to, and including, the next non-nested closing `)'.
2083    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2084    are doing error recovery. Returns -1 if OR_COMMA is true and we
2085    found an unnested comma.  */
2086
2087 static int
2088 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2089                                        bool recovering,
2090                                        bool or_comma,
2091                                        bool consume_paren)
2092 {
2093   unsigned paren_depth = 0;
2094   unsigned brace_depth = 0;
2095   int saved_c_lex_string_translate = c_lex_string_translate;
2096   int result;
2097
2098   if (recovering && !or_comma && cp_parser_parsing_tentatively (parser)
2099       && !cp_parser_committed_to_tentative_parse (parser))
2100     return 0;
2101
2102   if (! recovering)
2103     /* If we're looking ahead, keep both translated and untranslated
2104        strings.  */
2105     c_lex_string_translate = -1;
2106
2107   while (true)
2108     {
2109       cp_token *token;
2110
2111       /* If we've run out of tokens, then there is no closing `)'.  */
2112       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2113         {
2114           result = 0;
2115           break;
2116         }
2117
2118       token = cp_lexer_peek_token (parser->lexer);
2119
2120       /* This matches the processing in skip_to_end_of_statement.  */
2121       if (token->type == CPP_SEMICOLON && !brace_depth)
2122         {
2123           result = 0;
2124           break;
2125         }
2126       if (token->type == CPP_OPEN_BRACE)
2127         ++brace_depth;
2128       if (token->type == CPP_CLOSE_BRACE)
2129         {
2130           if (!brace_depth--)
2131             {
2132               result = 0;
2133               break;
2134             }
2135         }
2136       if (recovering && or_comma && token->type == CPP_COMMA
2137           && !brace_depth && !paren_depth)
2138         {
2139           result = -1;
2140           break;
2141         }
2142
2143       if (!brace_depth)
2144         {
2145           /* If it is an `(', we have entered another level of nesting.  */
2146           if (token->type == CPP_OPEN_PAREN)
2147             ++paren_depth;
2148           /* If it is a `)', then we might be done.  */
2149           else if (token->type == CPP_CLOSE_PAREN && !paren_depth--)
2150             {
2151               if (consume_paren)
2152                 cp_lexer_consume_token (parser->lexer);
2153               {
2154                 result = 1;
2155                 break;
2156               }
2157             }
2158         }
2159
2160       /* Consume the token.  */
2161       cp_lexer_consume_token (parser->lexer);
2162     }
2163
2164   c_lex_string_translate = saved_c_lex_string_translate;
2165   return result;
2166 }
2167
2168 /* Consume tokens until we reach the end of the current statement.
2169    Normally, that will be just before consuming a `;'.  However, if a
2170    non-nested `}' comes first, then we stop before consuming that.  */
2171
2172 static void
2173 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2174 {
2175   unsigned nesting_depth = 0;
2176
2177   while (true)
2178     {
2179       cp_token *token;
2180
2181       /* Peek at the next token.  */
2182       token = cp_lexer_peek_token (parser->lexer);
2183       /* If we've run out of tokens, stop.  */
2184       if (token->type == CPP_EOF)
2185         break;
2186       /* If the next token is a `;', we have reached the end of the
2187          statement.  */
2188       if (token->type == CPP_SEMICOLON && !nesting_depth)
2189         break;
2190       /* If the next token is a non-nested `}', then we have reached
2191          the end of the current block.  */
2192       if (token->type == CPP_CLOSE_BRACE)
2193         {
2194           /* If this is a non-nested `}', stop before consuming it.
2195              That way, when confronted with something like:
2196
2197                { 3 + }
2198
2199              we stop before consuming the closing `}', even though we
2200              have not yet reached a `;'.  */
2201           if (nesting_depth == 0)
2202             break;
2203           /* If it is the closing `}' for a block that we have
2204              scanned, stop -- but only after consuming the token.
2205              That way given:
2206
2207                 void f g () { ... }
2208                 typedef int I;
2209
2210              we will stop after the body of the erroneously declared
2211              function, but before consuming the following `typedef'
2212              declaration.  */
2213           if (--nesting_depth == 0)
2214             {
2215               cp_lexer_consume_token (parser->lexer);
2216               break;
2217             }
2218         }
2219       /* If it the next token is a `{', then we are entering a new
2220          block.  Consume the entire block.  */
2221       else if (token->type == CPP_OPEN_BRACE)
2222         ++nesting_depth;
2223       /* Consume the token.  */
2224       cp_lexer_consume_token (parser->lexer);
2225     }
2226 }
2227
2228 /* This function is called at the end of a statement or declaration.
2229    If the next token is a semicolon, it is consumed; otherwise, error
2230    recovery is attempted.  */
2231
2232 static void
2233 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2234 {
2235   /* Look for the trailing `;'.  */
2236   if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2237     {
2238       /* If there is additional (erroneous) input, skip to the end of
2239          the statement.  */
2240       cp_parser_skip_to_end_of_statement (parser);
2241       /* If the next token is now a `;', consume it.  */
2242       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2243         cp_lexer_consume_token (parser->lexer);
2244     }
2245 }
2246
2247 /* Skip tokens until we have consumed an entire block, or until we
2248    have consumed a non-nested `;'.  */
2249
2250 static void
2251 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2252 {
2253   unsigned nesting_depth = 0;
2254
2255   while (true)
2256     {
2257       cp_token *token;
2258
2259       /* Peek at the next token.  */
2260       token = cp_lexer_peek_token (parser->lexer);
2261       /* If we've run out of tokens, stop.  */
2262       if (token->type == CPP_EOF)
2263         break;
2264       /* If the next token is a `;', we have reached the end of the
2265          statement.  */
2266       if (token->type == CPP_SEMICOLON && !nesting_depth)
2267         {
2268           /* Consume the `;'.  */
2269           cp_lexer_consume_token (parser->lexer);
2270           break;
2271         }
2272       /* Consume the token.  */
2273       token = cp_lexer_consume_token (parser->lexer);
2274       /* If the next token is a non-nested `}', then we have reached
2275          the end of the current block.  */
2276       if (token->type == CPP_CLOSE_BRACE
2277           && (nesting_depth == 0 || --nesting_depth == 0))
2278         break;
2279       /* If it the next token is a `{', then we are entering a new
2280          block.  Consume the entire block.  */
2281       if (token->type == CPP_OPEN_BRACE)
2282         ++nesting_depth;
2283     }
2284 }
2285
2286 /* Skip tokens until a non-nested closing curly brace is the next
2287    token.  */
2288
2289 static void
2290 cp_parser_skip_to_closing_brace (cp_parser *parser)
2291 {
2292   unsigned nesting_depth = 0;
2293
2294   while (true)
2295     {
2296       cp_token *token;
2297
2298       /* Peek at the next token.  */
2299       token = cp_lexer_peek_token (parser->lexer);
2300       /* If we've run out of tokens, stop.  */
2301       if (token->type == CPP_EOF)
2302         break;
2303       /* If the next token is a non-nested `}', then we have reached
2304          the end of the current block.  */
2305       if (token->type == CPP_CLOSE_BRACE && nesting_depth-- == 0)
2306         break;
2307       /* If it the next token is a `{', then we are entering a new
2308          block.  Consume the entire block.  */
2309       else if (token->type == CPP_OPEN_BRACE)
2310         ++nesting_depth;
2311       /* Consume the token.  */
2312       cp_lexer_consume_token (parser->lexer);
2313     }
2314 }
2315
2316 /* This is a simple wrapper around make_typename_type. When the id is
2317    an unresolved identifier node, we can provide a superior diagnostic
2318    using cp_parser_diagnose_invalid_type_name.  */
2319
2320 static tree
2321 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2322 {
2323   tree result;
2324   if (TREE_CODE (id) == IDENTIFIER_NODE)
2325     {
2326       result = make_typename_type (scope, id, /*complain=*/0);
2327       if (result == error_mark_node)
2328         cp_parser_diagnose_invalid_type_name (parser, scope, id);
2329       return result;
2330     }
2331   return make_typename_type (scope, id, tf_error);
2332 }
2333
2334
2335 /* Create a new C++ parser.  */
2336
2337 static cp_parser *
2338 cp_parser_new (void)
2339 {
2340   cp_parser *parser;
2341   cp_lexer *lexer;
2342
2343   /* cp_lexer_new_main is called before calling ggc_alloc because
2344      cp_lexer_new_main might load a PCH file.  */
2345   lexer = cp_lexer_new_main ();
2346
2347   parser = ggc_alloc_cleared (sizeof (cp_parser));
2348   parser->lexer = lexer;
2349   parser->context = cp_parser_context_new (NULL);
2350
2351   /* For now, we always accept GNU extensions.  */
2352   parser->allow_gnu_extensions_p = 1;
2353
2354   /* The `>' token is a greater-than operator, not the end of a
2355      template-id.  */
2356   parser->greater_than_is_operator_p = true;
2357
2358   parser->default_arg_ok_p = true;
2359
2360   /* We are not parsing a constant-expression.  */
2361   parser->integral_constant_expression_p = false;
2362   parser->allow_non_integral_constant_expression_p = false;
2363   parser->non_integral_constant_expression_p = false;
2364
2365   /* Local variable names are not forbidden.  */
2366   parser->local_variables_forbidden_p = false;
2367
2368   /* We are not processing an `extern "C"' declaration.  */
2369   parser->in_unbraced_linkage_specification_p = false;
2370
2371   /* We are not processing a declarator.  */
2372   parser->in_declarator_p = false;
2373
2374   /* We are not processing a template-argument-list.  */
2375   parser->in_template_argument_list_p = false;
2376
2377   /* We are not in an iteration statement.  */
2378   parser->in_iteration_statement_p = false;
2379
2380   /* We are not in a switch statement.  */
2381   parser->in_switch_statement_p = false;
2382
2383   /* We are not parsing a type-id inside an expression.  */
2384   parser->in_type_id_in_expr_p = false;
2385
2386   /* The unparsed function queue is empty.  */
2387   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2388
2389   /* There are no classes being defined.  */
2390   parser->num_classes_being_defined = 0;
2391
2392   /* No template parameters apply.  */
2393   parser->num_template_parameter_lists = 0;
2394
2395   return parser;
2396 }
2397
2398 /* Lexical conventions [gram.lex]  */
2399
2400 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2401    identifier.  */
2402
2403 static tree
2404 cp_parser_identifier (cp_parser* parser)
2405 {
2406   cp_token *token;
2407
2408   /* Look for the identifier.  */
2409   token = cp_parser_require (parser, CPP_NAME, "identifier");
2410   /* Return the value.  */
2411   return token ? token->value : error_mark_node;
2412 }
2413
2414 /* Basic concepts [gram.basic]  */
2415
2416 /* Parse a translation-unit.
2417
2418    translation-unit:
2419      declaration-seq [opt]
2420
2421    Returns TRUE if all went well.  */
2422
2423 static bool
2424 cp_parser_translation_unit (cp_parser* parser)
2425 {
2426   while (true)
2427     {
2428       cp_parser_declaration_seq_opt (parser);
2429
2430       /* If there are no tokens left then all went well.  */
2431       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2432         break;
2433
2434       /* Otherwise, issue an error message.  */
2435       cp_parser_error (parser, "expected declaration");
2436       return false;
2437     }
2438
2439   /* Consume the EOF token.  */
2440   cp_parser_require (parser, CPP_EOF, "end-of-file");
2441
2442   /* Finish up.  */
2443   finish_translation_unit ();
2444
2445   /* All went well.  */
2446   return true;
2447 }
2448
2449 /* Expressions [gram.expr] */
2450
2451 /* Parse a primary-expression.
2452
2453    primary-expression:
2454      literal
2455      this
2456      ( expression )
2457      id-expression
2458
2459    GNU Extensions:
2460
2461    primary-expression:
2462      ( compound-statement )
2463      __builtin_va_arg ( assignment-expression , type-id )
2464
2465    literal:
2466      __null
2467
2468    Returns a representation of the expression.
2469
2470    *IDK indicates what kind of id-expression (if any) was present.
2471
2472    *QUALIFYING_CLASS is set to a non-NULL value if the id-expression can be
2473    used as the operand of a pointer-to-member.  In that case,
2474    *QUALIFYING_CLASS gives the class that is used as the qualifying
2475    class in the pointer-to-member.  */
2476
2477 static tree
2478 cp_parser_primary_expression (cp_parser *parser,
2479                               cp_id_kind *idk,
2480                               tree *qualifying_class)
2481 {
2482   cp_token *token;
2483
2484   /* Assume the primary expression is not an id-expression.  */
2485   *idk = CP_ID_KIND_NONE;
2486   /* And that it cannot be used as pointer-to-member.  */
2487   *qualifying_class = NULL_TREE;
2488
2489   /* Peek at the next token.  */
2490   token = cp_lexer_peek_token (parser->lexer);
2491   switch (token->type)
2492     {
2493       /* literal:
2494            integer-literal
2495            character-literal
2496            floating-literal
2497            string-literal
2498            boolean-literal  */
2499     case CPP_CHAR:
2500     case CPP_WCHAR:
2501     case CPP_NUMBER:
2502       token = cp_lexer_consume_token (parser->lexer);
2503       return token->value;
2504
2505     case CPP_STRING:
2506     case CPP_WSTRING:
2507       token = cp_lexer_consume_token (parser->lexer);
2508       if (TREE_CHAIN (token->value))
2509         return TREE_CHAIN (token->value);
2510       else
2511         return token->value;
2512
2513     case CPP_OPEN_PAREN:
2514       {
2515         tree expr;
2516         bool saved_greater_than_is_operator_p;
2517
2518         /* Consume the `('.  */
2519         cp_lexer_consume_token (parser->lexer);
2520         /* Within a parenthesized expression, a `>' token is always
2521            the greater-than operator.  */
2522         saved_greater_than_is_operator_p
2523           = parser->greater_than_is_operator_p;
2524         parser->greater_than_is_operator_p = true;
2525         /* If we see `( { ' then we are looking at the beginning of
2526            a GNU statement-expression.  */
2527         if (cp_parser_allow_gnu_extensions_p (parser)
2528             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
2529           {
2530             /* Statement-expressions are not allowed by the standard.  */
2531             if (pedantic)
2532               pedwarn ("ISO C++ forbids braced-groups within expressions");
2533
2534             /* And they're not allowed outside of a function-body; you
2535                cannot, for example, write:
2536
2537                  int i = ({ int j = 3; j + 1; });
2538
2539                at class or namespace scope.  */
2540             if (!at_function_scope_p ())
2541               error ("statement-expressions are allowed only inside functions");
2542             /* Start the statement-expression.  */
2543             expr = begin_stmt_expr ();
2544             /* Parse the compound-statement.  */
2545             cp_parser_compound_statement (parser, expr, false);
2546             /* Finish up.  */
2547             expr = finish_stmt_expr (expr, false);
2548           }
2549         else
2550           {
2551             /* Parse the parenthesized expression.  */
2552             expr = cp_parser_expression (parser);
2553             /* Let the front end know that this expression was
2554                enclosed in parentheses. This matters in case, for
2555                example, the expression is of the form `A::B', since
2556                `&A::B' might be a pointer-to-member, but `&(A::B)' is
2557                not.  */
2558             finish_parenthesized_expr (expr);
2559           }
2560         /* The `>' token might be the end of a template-id or
2561            template-parameter-list now.  */
2562         parser->greater_than_is_operator_p
2563           = saved_greater_than_is_operator_p;
2564         /* Consume the `)'.  */
2565         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
2566           cp_parser_skip_to_end_of_statement (parser);
2567
2568         return expr;
2569       }
2570
2571     case CPP_KEYWORD:
2572       switch (token->keyword)
2573         {
2574           /* These two are the boolean literals.  */
2575         case RID_TRUE:
2576           cp_lexer_consume_token (parser->lexer);
2577           return boolean_true_node;
2578         case RID_FALSE:
2579           cp_lexer_consume_token (parser->lexer);
2580           return boolean_false_node;
2581
2582           /* The `__null' literal.  */
2583         case RID_NULL:
2584           cp_lexer_consume_token (parser->lexer);
2585           return null_node;
2586
2587           /* Recognize the `this' keyword.  */
2588         case RID_THIS:
2589           cp_lexer_consume_token (parser->lexer);
2590           if (parser->local_variables_forbidden_p)
2591             {
2592               error ("`this' may not be used in this context");
2593               return error_mark_node;
2594             }
2595           /* Pointers cannot appear in constant-expressions.  */
2596           if (cp_parser_non_integral_constant_expression (parser,
2597                                                           "`this'"))
2598             return error_mark_node;
2599           return finish_this_expr ();
2600
2601           /* The `operator' keyword can be the beginning of an
2602              id-expression.  */
2603         case RID_OPERATOR:
2604           goto id_expression;
2605
2606         case RID_FUNCTION_NAME:
2607         case RID_PRETTY_FUNCTION_NAME:
2608         case RID_C99_FUNCTION_NAME:
2609           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
2610              __func__ are the names of variables -- but they are
2611              treated specially.  Therefore, they are handled here,
2612              rather than relying on the generic id-expression logic
2613              below.  Grammatically, these names are id-expressions.
2614
2615              Consume the token.  */
2616           token = cp_lexer_consume_token (parser->lexer);
2617           /* Look up the name.  */
2618           return finish_fname (token->value);
2619
2620         case RID_VA_ARG:
2621           {
2622             tree expression;
2623             tree type;
2624
2625             /* The `__builtin_va_arg' construct is used to handle
2626                `va_arg'.  Consume the `__builtin_va_arg' token.  */
2627             cp_lexer_consume_token (parser->lexer);
2628             /* Look for the opening `('.  */
2629             cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
2630             /* Now, parse the assignment-expression.  */
2631             expression = cp_parser_assignment_expression (parser);
2632             /* Look for the `,'.  */
2633             cp_parser_require (parser, CPP_COMMA, "`,'");
2634             /* Parse the type-id.  */
2635             type = cp_parser_type_id (parser);
2636             /* Look for the closing `)'.  */
2637             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
2638             /* Using `va_arg' in a constant-expression is not
2639                allowed.  */
2640             if (cp_parser_non_integral_constant_expression (parser,
2641                                                             "`va_arg'"))
2642               return error_mark_node;
2643             return build_x_va_arg (expression, type);
2644           }
2645
2646         case RID_OFFSETOF:
2647           return cp_parser_builtin_offsetof (parser);
2648
2649         default:
2650           cp_parser_error (parser, "expected primary-expression");
2651           return error_mark_node;
2652         }
2653
2654       /* An id-expression can start with either an identifier, a
2655          `::' as the beginning of a qualified-id, or the "operator"
2656          keyword.  */
2657     case CPP_NAME:
2658     case CPP_SCOPE:
2659     case CPP_TEMPLATE_ID:
2660     case CPP_NESTED_NAME_SPECIFIER:
2661       {
2662         tree id_expression;
2663         tree decl;
2664         const char *error_msg;
2665
2666       id_expression:
2667         /* Parse the id-expression.  */
2668         id_expression
2669           = cp_parser_id_expression (parser,
2670                                      /*template_keyword_p=*/false,
2671                                      /*check_dependency_p=*/true,
2672                                      /*template_p=*/NULL,
2673                                      /*declarator_p=*/false);
2674         if (id_expression == error_mark_node)
2675           return error_mark_node;
2676         /* If we have a template-id, then no further lookup is
2677            required.  If the template-id was for a template-class, we
2678            will sometimes have a TYPE_DECL at this point.  */
2679         else if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
2680             || TREE_CODE (id_expression) == TYPE_DECL)
2681           decl = id_expression;
2682         /* Look up the name.  */
2683         else
2684           {
2685             decl = cp_parser_lookup_name_simple (parser, id_expression);
2686             /* If name lookup gives us a SCOPE_REF, then the
2687                qualifying scope was dependent.  Just propagate the
2688                name.  */
2689             if (TREE_CODE (decl) == SCOPE_REF)
2690               {
2691                 if (TYPE_P (TREE_OPERAND (decl, 0)))
2692                   *qualifying_class = TREE_OPERAND (decl, 0);
2693                 return decl;
2694               }
2695             /* Check to see if DECL is a local variable in a context
2696                where that is forbidden.  */
2697             if (parser->local_variables_forbidden_p
2698                 && local_variable_p (decl))
2699               {
2700                 /* It might be that we only found DECL because we are
2701                    trying to be generous with pre-ISO scoping rules.
2702                    For example, consider:
2703
2704                      int i;
2705                      void g() {
2706                        for (int i = 0; i < 10; ++i) {}
2707                        extern void f(int j = i);
2708                      }
2709
2710                    Here, name look up will originally find the out
2711                    of scope `i'.  We need to issue a warning message,
2712                    but then use the global `i'.  */
2713                 decl = check_for_out_of_scope_variable (decl);
2714                 if (local_variable_p (decl))
2715                   {
2716                     error ("local variable `%D' may not appear in this context",
2717                            decl);
2718                     return error_mark_node;
2719                   }
2720               }
2721           }
2722
2723         decl = finish_id_expression (id_expression, decl, parser->scope,
2724                                      idk, qualifying_class,
2725                                      parser->integral_constant_expression_p,
2726                                      parser->allow_non_integral_constant_expression_p,
2727                                      &parser->non_integral_constant_expression_p,
2728                                      &error_msg);
2729         if (error_msg)
2730           cp_parser_error (parser, error_msg);
2731         return decl;
2732       }
2733
2734       /* Anything else is an error.  */
2735     default:
2736       cp_parser_error (parser, "expected primary-expression");
2737       return error_mark_node;
2738     }
2739 }
2740
2741 /* Parse an id-expression.
2742
2743    id-expression:
2744      unqualified-id
2745      qualified-id
2746
2747    qualified-id:
2748      :: [opt] nested-name-specifier template [opt] unqualified-id
2749      :: identifier
2750      :: operator-function-id
2751      :: template-id
2752
2753    Return a representation of the unqualified portion of the
2754    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
2755    a `::' or nested-name-specifier.
2756
2757    Often, if the id-expression was a qualified-id, the caller will
2758    want to make a SCOPE_REF to represent the qualified-id.  This
2759    function does not do this in order to avoid wastefully creating
2760    SCOPE_REFs when they are not required.
2761
2762    If TEMPLATE_KEYWORD_P is true, then we have just seen the
2763    `template' keyword.
2764
2765    If CHECK_DEPENDENCY_P is false, then names are looked up inside
2766    uninstantiated templates.
2767
2768    If *TEMPLATE_P is non-NULL, it is set to true iff the
2769    `template' keyword is used to explicitly indicate that the entity
2770    named is a template.
2771
2772    If DECLARATOR_P is true, the id-expression is appearing as part of
2773    a declarator, rather than as part of an expression.  */
2774
2775 static tree
2776 cp_parser_id_expression (cp_parser *parser,
2777                          bool template_keyword_p,
2778                          bool check_dependency_p,
2779                          bool *template_p,
2780                          bool declarator_p)
2781 {
2782   bool global_scope_p;
2783   bool nested_name_specifier_p;
2784
2785   /* Assume the `template' keyword was not used.  */
2786   if (template_p)
2787     *template_p = false;
2788
2789   /* Look for the optional `::' operator.  */
2790   global_scope_p
2791     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
2792        != NULL_TREE);
2793   /* Look for the optional nested-name-specifier.  */
2794   nested_name_specifier_p
2795     = (cp_parser_nested_name_specifier_opt (parser,
2796                                             /*typename_keyword_p=*/false,
2797                                             check_dependency_p,
2798                                             /*type_p=*/false,
2799                                             /*is_declarator=*/false)
2800        != NULL_TREE);
2801   /* If there is a nested-name-specifier, then we are looking at
2802      the first qualified-id production.  */
2803   if (nested_name_specifier_p)
2804     {
2805       tree saved_scope;
2806       tree saved_object_scope;
2807       tree saved_qualifying_scope;
2808       tree unqualified_id;
2809       bool is_template;
2810
2811       /* See if the next token is the `template' keyword.  */
2812       if (!template_p)
2813         template_p = &is_template;
2814       *template_p = cp_parser_optional_template_keyword (parser);
2815       /* Name lookup we do during the processing of the
2816          unqualified-id might obliterate SCOPE.  */
2817       saved_scope = parser->scope;
2818       saved_object_scope = parser->object_scope;
2819       saved_qualifying_scope = parser->qualifying_scope;
2820       /* Process the final unqualified-id.  */
2821       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
2822                                                  check_dependency_p,
2823                                                  declarator_p);
2824       /* Restore the SAVED_SCOPE for our caller.  */
2825       parser->scope = saved_scope;
2826       parser->object_scope = saved_object_scope;
2827       parser->qualifying_scope = saved_qualifying_scope;
2828
2829       return unqualified_id;
2830     }
2831   /* Otherwise, if we are in global scope, then we are looking at one
2832      of the other qualified-id productions.  */
2833   else if (global_scope_p)
2834     {
2835       cp_token *token;
2836       tree id;
2837
2838       /* Peek at the next token.  */
2839       token = cp_lexer_peek_token (parser->lexer);
2840
2841       /* If it's an identifier, and the next token is not a "<", then
2842          we can avoid the template-id case.  This is an optimization
2843          for this common case.  */
2844       if (token->type == CPP_NAME
2845           && !cp_parser_nth_token_starts_template_argument_list_p
2846                (parser, 2))
2847         return cp_parser_identifier (parser);
2848
2849       cp_parser_parse_tentatively (parser);
2850       /* Try a template-id.  */
2851       id = cp_parser_template_id (parser,
2852                                   /*template_keyword_p=*/false,
2853                                   /*check_dependency_p=*/true,
2854                                   declarator_p);
2855       /* If that worked, we're done.  */
2856       if (cp_parser_parse_definitely (parser))
2857         return id;
2858
2859       /* Peek at the next token.  (Changes in the token buffer may
2860          have invalidated the pointer obtained above.)  */
2861       token = cp_lexer_peek_token (parser->lexer);
2862
2863       switch (token->type)
2864         {
2865         case CPP_NAME:
2866           return cp_parser_identifier (parser);
2867
2868         case CPP_KEYWORD:
2869           if (token->keyword == RID_OPERATOR)
2870             return cp_parser_operator_function_id (parser);
2871           /* Fall through.  */
2872
2873         default:
2874           cp_parser_error (parser, "expected id-expression");
2875           return error_mark_node;
2876         }
2877     }
2878   else
2879     return cp_parser_unqualified_id (parser, template_keyword_p,
2880                                      /*check_dependency_p=*/true,
2881                                      declarator_p);
2882 }
2883
2884 /* Parse an unqualified-id.
2885
2886    unqualified-id:
2887      identifier
2888      operator-function-id
2889      conversion-function-id
2890      ~ class-name
2891      template-id
2892
2893    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
2894    keyword, in a construct like `A::template ...'.
2895
2896    Returns a representation of unqualified-id.  For the `identifier'
2897    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
2898    production a BIT_NOT_EXPR is returned; the operand of the
2899    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
2900    other productions, see the documentation accompanying the
2901    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
2902    names are looked up in uninstantiated templates.  If DECLARATOR_P
2903    is true, the unqualified-id is appearing as part of a declarator,
2904    rather than as part of an expression.  */
2905
2906 static tree
2907 cp_parser_unqualified_id (cp_parser* parser,
2908                           bool template_keyword_p,
2909                           bool check_dependency_p,
2910                           bool declarator_p)
2911 {
2912   cp_token *token;
2913
2914   /* Peek at the next token.  */
2915   token = cp_lexer_peek_token (parser->lexer);
2916
2917   switch (token->type)
2918     {
2919     case CPP_NAME:
2920       {
2921         tree id;
2922
2923         /* We don't know yet whether or not this will be a
2924            template-id.  */
2925         cp_parser_parse_tentatively (parser);
2926         /* Try a template-id.  */
2927         id = cp_parser_template_id (parser, template_keyword_p,
2928                                     check_dependency_p,
2929                                     declarator_p);
2930         /* If it worked, we're done.  */
2931         if (cp_parser_parse_definitely (parser))
2932           return id;
2933         /* Otherwise, it's an ordinary identifier.  */
2934         return cp_parser_identifier (parser);
2935       }
2936
2937     case CPP_TEMPLATE_ID:
2938       return cp_parser_template_id (parser, template_keyword_p,
2939                                     check_dependency_p,
2940                                     declarator_p);
2941
2942     case CPP_COMPL:
2943       {
2944         tree type_decl;
2945         tree qualifying_scope;
2946         tree object_scope;
2947         tree scope;
2948
2949         /* Consume the `~' token.  */
2950         cp_lexer_consume_token (parser->lexer);
2951         /* Parse the class-name.  The standard, as written, seems to
2952            say that:
2953
2954              template <typename T> struct S { ~S (); };
2955              template <typename T> S<T>::~S() {}
2956
2957            is invalid, since `~' must be followed by a class-name, but
2958            `S<T>' is dependent, and so not known to be a class.
2959            That's not right; we need to look in uninstantiated
2960            templates.  A further complication arises from:
2961
2962              template <typename T> void f(T t) {
2963                t.T::~T();
2964              }
2965
2966            Here, it is not possible to look up `T' in the scope of `T'
2967            itself.  We must look in both the current scope, and the
2968            scope of the containing complete expression.
2969
2970            Yet another issue is:
2971
2972              struct S {
2973                int S;
2974                ~S();
2975              };
2976
2977              S::~S() {}
2978
2979            The standard does not seem to say that the `S' in `~S'
2980            should refer to the type `S' and not the data member
2981            `S::S'.  */
2982
2983         /* DR 244 says that we look up the name after the "~" in the
2984            same scope as we looked up the qualifying name.  That idea
2985            isn't fully worked out; it's more complicated than that.  */
2986         scope = parser->scope;
2987         object_scope = parser->object_scope;
2988         qualifying_scope = parser->qualifying_scope;
2989
2990         /* If the name is of the form "X::~X" it's OK.  */
2991         if (scope && TYPE_P (scope)
2992             && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2993             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
2994                 == CPP_OPEN_PAREN)
2995             && (cp_lexer_peek_token (parser->lexer)->value
2996                 == TYPE_IDENTIFIER (scope)))
2997           {
2998             cp_lexer_consume_token (parser->lexer);
2999             return build_nt (BIT_NOT_EXPR, scope);
3000           }
3001
3002         /* If there was an explicit qualification (S::~T), first look
3003            in the scope given by the qualification (i.e., S).  */
3004         if (scope)
3005           {
3006             cp_parser_parse_tentatively (parser);
3007             type_decl = cp_parser_class_name (parser,
3008                                               /*typename_keyword_p=*/false,
3009                                               /*template_keyword_p=*/false,
3010                                               /*type_p=*/false,
3011                                               /*check_dependency=*/false,
3012                                               /*class_head_p=*/false,
3013                                               declarator_p);
3014             if (cp_parser_parse_definitely (parser))
3015               return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3016           }
3017         /* In "N::S::~S", look in "N" as well.  */
3018         if (scope && qualifying_scope)
3019           {
3020             cp_parser_parse_tentatively (parser);
3021             parser->scope = qualifying_scope;
3022             parser->object_scope = NULL_TREE;
3023             parser->qualifying_scope = NULL_TREE;
3024             type_decl
3025               = cp_parser_class_name (parser,
3026                                       /*typename_keyword_p=*/false,
3027                                       /*template_keyword_p=*/false,
3028                                       /*type_p=*/false,
3029                                       /*check_dependency=*/false,
3030                                       /*class_head_p=*/false,
3031                                       declarator_p);
3032             if (cp_parser_parse_definitely (parser))
3033               return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3034           }
3035         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3036         else if (object_scope)
3037           {
3038             cp_parser_parse_tentatively (parser);
3039             parser->scope = object_scope;
3040             parser->object_scope = NULL_TREE;
3041             parser->qualifying_scope = NULL_TREE;
3042             type_decl
3043               = cp_parser_class_name (parser,
3044                                       /*typename_keyword_p=*/false,
3045                                       /*template_keyword_p=*/false,
3046                                       /*type_p=*/false,
3047                                       /*check_dependency=*/false,
3048                                       /*class_head_p=*/false,
3049                                       declarator_p);
3050             if (cp_parser_parse_definitely (parser))
3051               return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3052           }
3053         /* Look in the surrounding context.  */
3054         parser->scope = NULL_TREE;
3055         parser->object_scope = NULL_TREE;
3056         parser->qualifying_scope = NULL_TREE;
3057         type_decl
3058           = cp_parser_class_name (parser,
3059                                   /*typename_keyword_p=*/false,
3060                                   /*template_keyword_p=*/false,
3061                                   /*type_p=*/false,
3062                                   /*check_dependency=*/false,
3063                                   /*class_head_p=*/false,
3064                                   declarator_p);
3065         /* If an error occurred, assume that the name of the
3066            destructor is the same as the name of the qualifying
3067            class.  That allows us to keep parsing after running
3068            into ill-formed destructor names.  */
3069         if (type_decl == error_mark_node && scope && TYPE_P (scope))
3070           return build_nt (BIT_NOT_EXPR, scope);
3071         else if (type_decl == error_mark_node)
3072           return error_mark_node;
3073
3074         /* [class.dtor]
3075
3076            A typedef-name that names a class shall not be used as the
3077            identifier in the declarator for a destructor declaration.  */
3078         if (declarator_p
3079             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3080             && !DECL_SELF_REFERENCE_P (type_decl))
3081           error ("typedef-name `%D' used as destructor declarator",
3082                  type_decl);
3083
3084         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3085       }
3086
3087     case CPP_KEYWORD:
3088       if (token->keyword == RID_OPERATOR)
3089         {
3090           tree id;
3091
3092           /* This could be a template-id, so we try that first.  */
3093           cp_parser_parse_tentatively (parser);
3094           /* Try a template-id.  */
3095           id = cp_parser_template_id (parser, template_keyword_p,
3096                                       /*check_dependency_p=*/true,
3097                                       declarator_p);
3098           /* If that worked, we're done.  */
3099           if (cp_parser_parse_definitely (parser))
3100             return id;
3101           /* We still don't know whether we're looking at an
3102              operator-function-id or a conversion-function-id.  */
3103           cp_parser_parse_tentatively (parser);
3104           /* Try an operator-function-id.  */
3105           id = cp_parser_operator_function_id (parser);
3106           /* If that didn't work, try a conversion-function-id.  */
3107           if (!cp_parser_parse_definitely (parser))
3108             id = cp_parser_conversion_function_id (parser);
3109
3110           return id;
3111         }
3112       /* Fall through.  */
3113
3114     default:
3115       cp_parser_error (parser, "expected unqualified-id");
3116       return error_mark_node;
3117     }
3118 }
3119
3120 /* Parse an (optional) nested-name-specifier.
3121
3122    nested-name-specifier:
3123      class-or-namespace-name :: nested-name-specifier [opt]
3124      class-or-namespace-name :: template nested-name-specifier [opt]
3125
3126    PARSER->SCOPE should be set appropriately before this function is
3127    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3128    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3129    in name lookups.
3130
3131    Sets PARSER->SCOPE to the class (TYPE) or namespace
3132    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3133    it unchanged if there is no nested-name-specifier.  Returns the new
3134    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3135
3136    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3137    part of a declaration and/or decl-specifier.  */
3138
3139 static tree
3140 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3141                                      bool typename_keyword_p,
3142                                      bool check_dependency_p,
3143                                      bool type_p,
3144                                      bool is_declaration)
3145 {
3146   bool success = false;
3147   tree access_check = NULL_TREE;
3148   ptrdiff_t start;
3149   cp_token* token;
3150
3151   /* If the next token corresponds to a nested name specifier, there
3152      is no need to reparse it.  However, if CHECK_DEPENDENCY_P is
3153      false, it may have been true before, in which case something
3154      like `A<X>::B<Y>::C' may have resulted in a nested-name-specifier
3155      of `A<X>::', where it should now be `A<X>::B<Y>::'.  So, when
3156      CHECK_DEPENDENCY_P is false, we have to fall through into the
3157      main loop.  */
3158   if (check_dependency_p
3159       && cp_lexer_next_token_is (parser->lexer, CPP_NESTED_NAME_SPECIFIER))
3160     {
3161       cp_parser_pre_parsed_nested_name_specifier (parser);
3162       return parser->scope;
3163     }
3164
3165   /* Remember where the nested-name-specifier starts.  */
3166   if (cp_parser_parsing_tentatively (parser)
3167       && !cp_parser_committed_to_tentative_parse (parser))
3168     {
3169       token = cp_lexer_peek_token (parser->lexer);
3170       start = cp_lexer_token_difference (parser->lexer,
3171                                          parser->lexer->first_token,
3172                                          token);
3173     }
3174   else
3175     start = -1;
3176
3177   push_deferring_access_checks (dk_deferred);
3178
3179   while (true)
3180     {
3181       tree new_scope;
3182       tree old_scope;
3183       tree saved_qualifying_scope;
3184       bool template_keyword_p;
3185
3186       /* Spot cases that cannot be the beginning of a
3187          nested-name-specifier.  */
3188       token = cp_lexer_peek_token (parser->lexer);
3189
3190       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3191          the already parsed nested-name-specifier.  */
3192       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3193         {
3194           /* Grab the nested-name-specifier and continue the loop.  */
3195           cp_parser_pre_parsed_nested_name_specifier (parser);
3196           success = true;
3197           continue;
3198         }
3199
3200       /* Spot cases that cannot be the beginning of a
3201          nested-name-specifier.  On the second and subsequent times
3202          through the loop, we look for the `template' keyword.  */
3203       if (success && token->keyword == RID_TEMPLATE)
3204         ;
3205       /* A template-id can start a nested-name-specifier.  */
3206       else if (token->type == CPP_TEMPLATE_ID)
3207         ;
3208       else
3209         {
3210           /* If the next token is not an identifier, then it is
3211              definitely not a class-or-namespace-name.  */
3212           if (token->type != CPP_NAME)
3213             break;
3214           /* If the following token is neither a `<' (to begin a
3215              template-id), nor a `::', then we are not looking at a
3216              nested-name-specifier.  */
3217           token = cp_lexer_peek_nth_token (parser->lexer, 2);
3218           if (token->type != CPP_SCOPE
3219               && !cp_parser_nth_token_starts_template_argument_list_p
3220                   (parser, 2))
3221             break;
3222         }
3223
3224       /* The nested-name-specifier is optional, so we parse
3225          tentatively.  */
3226       cp_parser_parse_tentatively (parser);
3227
3228       /* Look for the optional `template' keyword, if this isn't the
3229          first time through the loop.  */
3230       if (success)
3231         template_keyword_p = cp_parser_optional_template_keyword (parser);
3232       else
3233         template_keyword_p = false;
3234
3235       /* Save the old scope since the name lookup we are about to do
3236          might destroy it.  */
3237       old_scope = parser->scope;
3238       saved_qualifying_scope = parser->qualifying_scope;
3239       /* Parse the qualifying entity.  */
3240       new_scope
3241         = cp_parser_class_or_namespace_name (parser,
3242                                              typename_keyword_p,
3243                                              template_keyword_p,
3244                                              check_dependency_p,
3245                                              type_p,
3246                                              is_declaration);
3247       /* Look for the `::' token.  */
3248       cp_parser_require (parser, CPP_SCOPE, "`::'");
3249
3250       /* If we found what we wanted, we keep going; otherwise, we're
3251          done.  */
3252       if (!cp_parser_parse_definitely (parser))
3253         {
3254           bool error_p = false;
3255
3256           /* Restore the OLD_SCOPE since it was valid before the
3257              failed attempt at finding the last
3258              class-or-namespace-name.  */
3259           parser->scope = old_scope;
3260           parser->qualifying_scope = saved_qualifying_scope;
3261           /* If the next token is an identifier, and the one after
3262              that is a `::', then any valid interpretation would have
3263              found a class-or-namespace-name.  */
3264           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3265                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3266                      == CPP_SCOPE)
3267                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3268                      != CPP_COMPL))
3269             {
3270               token = cp_lexer_consume_token (parser->lexer);
3271               if (!error_p)
3272                 {
3273                   tree decl;
3274
3275                   decl = cp_parser_lookup_name_simple (parser, token->value);
3276                   if (TREE_CODE (decl) == TEMPLATE_DECL)
3277                     error ("`%D' used without template parameters",
3278                            decl);
3279                   else
3280                     cp_parser_name_lookup_error
3281                       (parser, token->value, decl,
3282                        "is not a class or namespace");
3283                   parser->scope = NULL_TREE;
3284                   error_p = true;
3285                   /* Treat this as a successful nested-name-specifier
3286                      due to:
3287
3288                      [basic.lookup.qual]
3289
3290                      If the name found is not a class-name (clause
3291                      _class_) or namespace-name (_namespace.def_), the
3292                      program is ill-formed.  */
3293                   success = true;
3294                 }
3295               cp_lexer_consume_token (parser->lexer);
3296             }
3297           break;
3298         }
3299
3300       /* We've found one valid nested-name-specifier.  */
3301       success = true;
3302       /* Make sure we look in the right scope the next time through
3303          the loop.  */
3304       parser->scope = (TREE_CODE (new_scope) == TYPE_DECL
3305                        ? TREE_TYPE (new_scope)
3306                        : new_scope);
3307       /* If it is a class scope, try to complete it; we are about to
3308          be looking up names inside the class.  */
3309       if (TYPE_P (parser->scope)
3310           /* Since checking types for dependency can be expensive,
3311              avoid doing it if the type is already complete.  */
3312           && !COMPLETE_TYPE_P (parser->scope)
3313           /* Do not try to complete dependent types.  */
3314           && !dependent_type_p (parser->scope))
3315         complete_type (parser->scope);
3316     }
3317
3318   /* Retrieve any deferred checks.  Do not pop this access checks yet
3319      so the memory will not be reclaimed during token replacing below.  */
3320   access_check = get_deferred_access_checks ();
3321
3322   /* If parsing tentatively, replace the sequence of tokens that makes
3323      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
3324      token.  That way, should we re-parse the token stream, we will
3325      not have to repeat the effort required to do the parse, nor will
3326      we issue duplicate error messages.  */
3327   if (success && start >= 0)
3328     {
3329       /* Find the token that corresponds to the start of the
3330          template-id.  */
3331       token = cp_lexer_advance_token (parser->lexer,
3332                                       parser->lexer->first_token,
3333                                       start);
3334
3335       /* Reset the contents of the START token.  */
3336       token->type = CPP_NESTED_NAME_SPECIFIER;
3337       token->value = build_tree_list (access_check, parser->scope);
3338       TREE_TYPE (token->value) = parser->qualifying_scope;
3339       token->keyword = RID_MAX;
3340       /* Purge all subsequent tokens.  */
3341       cp_lexer_purge_tokens_after (parser->lexer, token);
3342     }
3343
3344   pop_deferring_access_checks ();
3345   return success ? parser->scope : NULL_TREE;
3346 }
3347
3348 /* Parse a nested-name-specifier.  See
3349    cp_parser_nested_name_specifier_opt for details.  This function
3350    behaves identically, except that it will an issue an error if no
3351    nested-name-specifier is present, and it will return
3352    ERROR_MARK_NODE, rather than NULL_TREE, if no nested-name-specifier
3353    is present.  */
3354
3355 static tree
3356 cp_parser_nested_name_specifier (cp_parser *parser,
3357                                  bool typename_keyword_p,
3358                                  bool check_dependency_p,
3359                                  bool type_p,
3360                                  bool is_declaration)
3361 {
3362   tree scope;
3363
3364   /* Look for the nested-name-specifier.  */
3365   scope = cp_parser_nested_name_specifier_opt (parser,
3366                                                typename_keyword_p,
3367                                                check_dependency_p,
3368                                                type_p,
3369                                                is_declaration);
3370   /* If it was not present, issue an error message.  */
3371   if (!scope)
3372     {
3373       cp_parser_error (parser, "expected nested-name-specifier");
3374       parser->scope = NULL_TREE;
3375       return error_mark_node;
3376     }
3377
3378   return scope;
3379 }
3380
3381 /* Parse a class-or-namespace-name.
3382
3383    class-or-namespace-name:
3384      class-name
3385      namespace-name
3386
3387    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
3388    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
3389    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
3390    TYPE_P is TRUE iff the next name should be taken as a class-name,
3391    even the same name is declared to be another entity in the same
3392    scope.
3393
3394    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
3395    specified by the class-or-namespace-name.  If neither is found the
3396    ERROR_MARK_NODE is returned.  */
3397
3398 static tree
3399 cp_parser_class_or_namespace_name (cp_parser *parser,
3400                                    bool typename_keyword_p,
3401                                    bool template_keyword_p,
3402                                    bool check_dependency_p,
3403                                    bool type_p,
3404                                    bool is_declaration)
3405 {
3406   tree saved_scope;
3407   tree saved_qualifying_scope;
3408   tree saved_object_scope;
3409   tree scope;
3410   bool only_class_p;
3411
3412   /* Before we try to parse the class-name, we must save away the
3413      current PARSER->SCOPE since cp_parser_class_name will destroy
3414      it.  */
3415   saved_scope = parser->scope;
3416   saved_qualifying_scope = parser->qualifying_scope;
3417   saved_object_scope = parser->object_scope;
3418   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
3419      there is no need to look for a namespace-name.  */
3420   only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
3421   if (!only_class_p)
3422     cp_parser_parse_tentatively (parser);
3423   scope = cp_parser_class_name (parser,
3424                                 typename_keyword_p,
3425                                 template_keyword_p,
3426                                 type_p,
3427                                 check_dependency_p,
3428                                 /*class_head_p=*/false,
3429                                 is_declaration);
3430   /* If that didn't work, try for a namespace-name.  */
3431   if (!only_class_p && !cp_parser_parse_definitely (parser))
3432     {
3433       /* Restore the saved scope.  */
3434       parser->scope = saved_scope;
3435       parser->qualifying_scope = saved_qualifying_scope;
3436       parser->object_scope = saved_object_scope;
3437       /* If we are not looking at an identifier followed by the scope
3438          resolution operator, then this is not part of a
3439          nested-name-specifier.  (Note that this function is only used
3440          to parse the components of a nested-name-specifier.)  */
3441       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
3442           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
3443         return error_mark_node;
3444       scope = cp_parser_namespace_name (parser);
3445     }
3446
3447   return scope;
3448 }
3449
3450 /* Parse a postfix-expression.
3451
3452    postfix-expression:
3453      primary-expression
3454      postfix-expression [ expression ]
3455      postfix-expression ( expression-list [opt] )
3456      simple-type-specifier ( expression-list [opt] )
3457      typename :: [opt] nested-name-specifier identifier
3458        ( expression-list [opt] )
3459      typename :: [opt] nested-name-specifier template [opt] template-id
3460        ( expression-list [opt] )
3461      postfix-expression . template [opt] id-expression
3462      postfix-expression -> template [opt] id-expression
3463      postfix-expression . pseudo-destructor-name
3464      postfix-expression -> pseudo-destructor-name
3465      postfix-expression ++
3466      postfix-expression --
3467      dynamic_cast < type-id > ( expression )
3468      static_cast < type-id > ( expression )
3469      reinterpret_cast < type-id > ( expression )
3470      const_cast < type-id > ( expression )
3471      typeid ( expression )
3472      typeid ( type-id )
3473
3474    GNU Extension:
3475
3476    postfix-expression:
3477      ( type-id ) { initializer-list , [opt] }
3478
3479    This extension is a GNU version of the C99 compound-literal
3480    construct.  (The C99 grammar uses `type-name' instead of `type-id',
3481    but they are essentially the same concept.)
3482
3483    If ADDRESS_P is true, the postfix expression is the operand of the
3484    `&' operator.
3485
3486    Returns a representation of the expression.  */
3487
3488 static tree
3489 cp_parser_postfix_expression (cp_parser *parser, bool address_p)
3490 {
3491   cp_token *token;
3492   enum rid keyword;
3493   cp_id_kind idk = CP_ID_KIND_NONE;
3494   tree postfix_expression = NULL_TREE;
3495   /* Non-NULL only if the current postfix-expression can be used to
3496      form a pointer-to-member.  In that case, QUALIFYING_CLASS is the
3497      class used to qualify the member.  */
3498   tree qualifying_class = NULL_TREE;
3499
3500   /* Peek at the next token.  */
3501   token = cp_lexer_peek_token (parser->lexer);
3502   /* Some of the productions are determined by keywords.  */
3503   keyword = token->keyword;
3504   switch (keyword)
3505     {
3506     case RID_DYNCAST:
3507     case RID_STATCAST:
3508     case RID_REINTCAST:
3509     case RID_CONSTCAST:
3510       {
3511         tree type;
3512         tree expression;
3513         const char *saved_message;
3514
3515         /* All of these can be handled in the same way from the point
3516            of view of parsing.  Begin by consuming the token
3517            identifying the cast.  */
3518         cp_lexer_consume_token (parser->lexer);
3519
3520         /* New types cannot be defined in the cast.  */
3521         saved_message = parser->type_definition_forbidden_message;
3522         parser->type_definition_forbidden_message
3523           = "types may not be defined in casts";
3524
3525         /* Look for the opening `<'.  */
3526         cp_parser_require (parser, CPP_LESS, "`<'");
3527         /* Parse the type to which we are casting.  */
3528         type = cp_parser_type_id (parser);
3529         /* Look for the closing `>'.  */
3530         cp_parser_require (parser, CPP_GREATER, "`>'");
3531         /* Restore the old message.  */
3532         parser->type_definition_forbidden_message = saved_message;
3533
3534         /* And the expression which is being cast.  */
3535         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3536         expression = cp_parser_expression (parser);
3537         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3538
3539         /* Only type conversions to integral or enumeration types
3540            can be used in constant-expressions.  */
3541         if (parser->integral_constant_expression_p
3542             && !dependent_type_p (type)
3543             && !INTEGRAL_OR_ENUMERATION_TYPE_P (type)
3544             && (cp_parser_non_integral_constant_expression 
3545                 (parser,
3546                  "a cast to a type other than an integral or "
3547                  "enumeration type")))
3548           return error_mark_node;
3549
3550         switch (keyword)
3551           {
3552           case RID_DYNCAST:
3553             postfix_expression
3554               = build_dynamic_cast (type, expression);
3555             break;
3556           case RID_STATCAST:
3557             postfix_expression
3558               = build_static_cast (type, expression);
3559             break;
3560           case RID_REINTCAST:
3561             postfix_expression
3562               = build_reinterpret_cast (type, expression);
3563             break;
3564           case RID_CONSTCAST:
3565             postfix_expression
3566               = build_const_cast (type, expression);
3567             break;
3568           default:
3569             abort ();
3570           }
3571       }
3572       break;
3573
3574     case RID_TYPEID:
3575       {
3576         tree type;
3577         const char *saved_message;
3578         bool saved_in_type_id_in_expr_p;
3579
3580         /* Consume the `typeid' token.  */
3581         cp_lexer_consume_token (parser->lexer);
3582         /* Look for the `(' token.  */
3583         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3584         /* Types cannot be defined in a `typeid' expression.  */
3585         saved_message = parser->type_definition_forbidden_message;
3586         parser->type_definition_forbidden_message
3587           = "types may not be defined in a `typeid\' expression";
3588         /* We can't be sure yet whether we're looking at a type-id or an
3589            expression.  */
3590         cp_parser_parse_tentatively (parser);
3591         /* Try a type-id first.  */
3592         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
3593         parser->in_type_id_in_expr_p = true;
3594         type = cp_parser_type_id (parser);
3595         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
3596         /* Look for the `)' token.  Otherwise, we can't be sure that
3597            we're not looking at an expression: consider `typeid (int
3598            (3))', for example.  */
3599         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3600         /* If all went well, simply lookup the type-id.  */
3601         if (cp_parser_parse_definitely (parser))
3602           postfix_expression = get_typeid (type);
3603         /* Otherwise, fall back to the expression variant.  */
3604         else
3605           {
3606             tree expression;
3607
3608             /* Look for an expression.  */
3609             expression = cp_parser_expression (parser);
3610             /* Compute its typeid.  */
3611             postfix_expression = build_typeid (expression);
3612             /* Look for the `)' token.  */
3613             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3614           }
3615         /* `typeid' may not appear in an integral constant expression.  */
3616         if (cp_parser_non_integral_constant_expression(parser, 
3617                                                        "`typeid' operator"))
3618           return error_mark_node;
3619         /* Restore the saved message.  */
3620         parser->type_definition_forbidden_message = saved_message;
3621       }
3622       break;
3623
3624     case RID_TYPENAME:
3625       {
3626         bool template_p = false;
3627         tree id;
3628         tree type;
3629
3630         /* Consume the `typename' token.  */
3631         cp_lexer_consume_token (parser->lexer);
3632         /* Look for the optional `::' operator.  */
3633         cp_parser_global_scope_opt (parser,
3634                                     /*current_scope_valid_p=*/false);
3635         /* Look for the nested-name-specifier.  */
3636         cp_parser_nested_name_specifier (parser,
3637                                          /*typename_keyword_p=*/true,
3638                                          /*check_dependency_p=*/true,
3639                                          /*type_p=*/true,
3640                                          /*is_declaration=*/true);
3641         /* Look for the optional `template' keyword.  */
3642         template_p = cp_parser_optional_template_keyword (parser);
3643         /* We don't know whether we're looking at a template-id or an
3644            identifier.  */
3645         cp_parser_parse_tentatively (parser);
3646         /* Try a template-id.  */
3647         id = cp_parser_template_id (parser, template_p,
3648                                     /*check_dependency_p=*/true,
3649                                     /*is_declaration=*/true);
3650         /* If that didn't work, try an identifier.  */
3651         if (!cp_parser_parse_definitely (parser))
3652           id = cp_parser_identifier (parser);
3653         /* If we look up a template-id in a non-dependent qualifying
3654            scope, there's no need to create a dependent type.  */
3655         if (TREE_CODE (id) == TYPE_DECL
3656             && !dependent_type_p (parser->scope))
3657           type = TREE_TYPE (id);
3658         /* Create a TYPENAME_TYPE to represent the type to which the
3659            functional cast is being performed.  */
3660         else
3661           type = make_typename_type (parser->scope, id, 
3662                                      /*complain=*/1);
3663
3664         postfix_expression = cp_parser_functional_cast (parser, type);
3665       }
3666       break;
3667
3668     default:
3669       {
3670         tree type;
3671
3672         /* If the next thing is a simple-type-specifier, we may be
3673            looking at a functional cast.  We could also be looking at
3674            an id-expression.  So, we try the functional cast, and if
3675            that doesn't work we fall back to the primary-expression.  */
3676         cp_parser_parse_tentatively (parser);
3677         /* Look for the simple-type-specifier.  */
3678         type = cp_parser_simple_type_specifier (parser,
3679                                                 CP_PARSER_FLAGS_NONE,
3680                                                 /*identifier_p=*/false);
3681         /* Parse the cast itself.  */
3682         if (!cp_parser_error_occurred (parser))
3683           postfix_expression
3684             = cp_parser_functional_cast (parser, type);
3685         /* If that worked, we're done.  */
3686         if (cp_parser_parse_definitely (parser))
3687           break;
3688
3689         /* If the functional-cast didn't work out, try a
3690            compound-literal.  */
3691         if (cp_parser_allow_gnu_extensions_p (parser)
3692             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
3693           {
3694             tree initializer_list = NULL_TREE;
3695             bool saved_in_type_id_in_expr_p;
3696
3697             cp_parser_parse_tentatively (parser);
3698             /* Consume the `('.  */
3699             cp_lexer_consume_token (parser->lexer);
3700             /* Parse the type.  */
3701             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
3702             parser->in_type_id_in_expr_p = true;
3703             type = cp_parser_type_id (parser);
3704             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
3705             /* Look for the `)'.  */
3706             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3707             /* Look for the `{'.  */
3708             cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
3709             /* If things aren't going well, there's no need to
3710                keep going.  */
3711             if (!cp_parser_error_occurred (parser))
3712               {
3713                 bool non_constant_p;
3714                 /* Parse the initializer-list.  */
3715                 initializer_list
3716                   = cp_parser_initializer_list (parser, &non_constant_p);
3717                 /* Allow a trailing `,'.  */
3718                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
3719                   cp_lexer_consume_token (parser->lexer);
3720                 /* Look for the final `}'.  */
3721                 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
3722               }
3723             /* If that worked, we're definitely looking at a
3724                compound-literal expression.  */
3725             if (cp_parser_parse_definitely (parser))
3726               {
3727                 /* Warn the user that a compound literal is not
3728                    allowed in standard C++.  */
3729                 if (pedantic)
3730                   pedwarn ("ISO C++ forbids compound-literals");
3731                 /* Form the representation of the compound-literal.  */
3732                 postfix_expression
3733                   = finish_compound_literal (type, initializer_list);
3734                 break;
3735               }
3736           }
3737
3738         /* It must be a primary-expression.  */
3739         postfix_expression = cp_parser_primary_expression (parser,
3740                                                            &idk,
3741                                                            &qualifying_class);
3742       }
3743       break;
3744     }
3745
3746   /* If we were avoiding committing to the processing of a
3747      qualified-id until we knew whether or not we had a
3748      pointer-to-member, we now know.  */
3749   if (qualifying_class)
3750     {
3751       bool done;
3752
3753       /* Peek at the next token.  */
3754       token = cp_lexer_peek_token (parser->lexer);
3755       done = (token->type != CPP_OPEN_SQUARE
3756               && token->type != CPP_OPEN_PAREN
3757               && token->type != CPP_DOT
3758               && token->type != CPP_DEREF
3759               && token->type != CPP_PLUS_PLUS
3760               && token->type != CPP_MINUS_MINUS);
3761
3762       postfix_expression = finish_qualified_id_expr (qualifying_class,
3763                                                      postfix_expression,
3764                                                      done,
3765                                                      address_p);
3766       if (done)
3767         return postfix_expression;
3768     }
3769
3770   /* Keep looping until the postfix-expression is complete.  */
3771   while (true)
3772     {
3773       if (idk == CP_ID_KIND_UNQUALIFIED
3774           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
3775           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
3776         /* It is not a Koenig lookup function call.  */
3777         postfix_expression
3778           = unqualified_name_lookup_error (postfix_expression);
3779
3780       /* Peek at the next token.  */
3781       token = cp_lexer_peek_token (parser->lexer);
3782
3783       switch (token->type)
3784         {
3785         case CPP_OPEN_SQUARE:
3786           postfix_expression
3787             = cp_parser_postfix_open_square_expression (parser,
3788                                                         postfix_expression,
3789                                                         false);
3790           idk = CP_ID_KIND_NONE;
3791           break;
3792
3793         case CPP_OPEN_PAREN:
3794           /* postfix-expression ( expression-list [opt] ) */
3795           {
3796             bool koenig_p;
3797             tree args = (cp_parser_parenthesized_expression_list
3798                          (parser, false, /*non_constant_p=*/NULL));
3799
3800             if (args == error_mark_node)
3801               {
3802                 postfix_expression = error_mark_node;
3803                 break;
3804               }
3805
3806             /* Function calls are not permitted in
3807                constant-expressions.  */
3808             if (cp_parser_non_integral_constant_expression (parser,
3809                                                             "a function call"))
3810               {
3811                 postfix_expression = error_mark_node;
3812                 break;
3813               }
3814
3815             koenig_p = false;
3816             if (idk == CP_ID_KIND_UNQUALIFIED)
3817               {
3818                 /* We do not perform argument-dependent lookup if
3819                    normal lookup finds a non-function, in accordance
3820                    with the expected resolution of DR 218.  */
3821                 if (args
3822                     && (is_overloaded_fn (postfix_expression)
3823                         || TREE_CODE (postfix_expression) == IDENTIFIER_NODE))
3824                   {
3825                     koenig_p = true;
3826                     postfix_expression
3827                       = perform_koenig_lookup (postfix_expression, args);
3828                   }
3829                 else if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
3830                   postfix_expression
3831                     = unqualified_fn_lookup_error (postfix_expression);
3832               }
3833
3834             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
3835               {
3836                 tree instance = TREE_OPERAND (postfix_expression, 0);
3837                 tree fn = TREE_OPERAND (postfix_expression, 1);
3838
3839                 if (processing_template_decl
3840                     && (type_dependent_expression_p (instance)
3841                         || (!BASELINK_P (fn)
3842                             && TREE_CODE (fn) != FIELD_DECL)
3843                         || type_dependent_expression_p (fn)
3844                         || any_type_dependent_arguments_p (args)))
3845                   {
3846                     postfix_expression
3847                       = build_min_nt (CALL_EXPR, postfix_expression,
3848                                       args, NULL_TREE);
3849                     break;
3850                   }
3851
3852                 if (BASELINK_P (fn))
3853                   postfix_expression
3854                     = (build_new_method_call
3855                        (instance, fn, args, NULL_TREE,
3856                         (idk == CP_ID_KIND_QUALIFIED
3857                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL)));
3858                 else
3859                   postfix_expression
3860                     = finish_call_expr (postfix_expression, args,
3861                                         /*disallow_virtual=*/false,
3862                                         /*koenig_p=*/false);
3863               }
3864             else if (TREE_CODE (postfix_expression) == OFFSET_REF
3865                      || TREE_CODE (postfix_expression) == MEMBER_REF
3866                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
3867               postfix_expression = (build_offset_ref_call_from_tree
3868                                     (postfix_expression, args));
3869             else if (idk == CP_ID_KIND_QUALIFIED)
3870               /* A call to a static class member, or a namespace-scope
3871                  function.  */
3872               postfix_expression
3873                 = finish_call_expr (postfix_expression, args,
3874                                     /*disallow_virtual=*/true,
3875                                     koenig_p);
3876             else
3877               /* All other function calls.  */
3878               postfix_expression
3879                 = finish_call_expr (postfix_expression, args,
3880                                     /*disallow_virtual=*/false,
3881                                     koenig_p);
3882
3883             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
3884             idk = CP_ID_KIND_NONE;
3885           }
3886           break;
3887
3888         case CPP_DOT:
3889         case CPP_DEREF:
3890           /* postfix-expression . template [opt] id-expression
3891              postfix-expression . pseudo-destructor-name
3892              postfix-expression -> template [opt] id-expression
3893              postfix-expression -> pseudo-destructor-name */
3894         
3895           /* Consume the `.' or `->' operator.  */
3896           cp_lexer_consume_token (parser->lexer);
3897
3898           postfix_expression
3899             = cp_parser_postfix_dot_deref_expression (parser, token->type,
3900                                                       postfix_expression,
3901                                                       false, &idk);
3902           break;
3903
3904         case CPP_PLUS_PLUS:
3905           /* postfix-expression ++  */
3906           /* Consume the `++' token.  */
3907           cp_lexer_consume_token (parser->lexer);
3908           /* Generate a representation for the complete expression.  */
3909           postfix_expression
3910             = finish_increment_expr (postfix_expression,
3911                                      POSTINCREMENT_EXPR);
3912           /* Increments may not appear in constant-expressions.  */
3913           if (cp_parser_non_integral_constant_expression (parser,
3914                                                           "an increment"))
3915             postfix_expression = error_mark_node;
3916           idk = CP_ID_KIND_NONE;
3917           break;
3918
3919         case CPP_MINUS_MINUS:
3920           /* postfix-expression -- */
3921           /* Consume the `--' token.  */
3922           cp_lexer_consume_token (parser->lexer);
3923           /* Generate a representation for the complete expression.  */
3924           postfix_expression
3925             = finish_increment_expr (postfix_expression,
3926                                      POSTDECREMENT_EXPR);
3927           /* Decrements may not appear in constant-expressions.  */
3928           if (cp_parser_non_integral_constant_expression (parser,
3929                                                           "a decrement"))
3930             postfix_expression = error_mark_node;
3931           idk = CP_ID_KIND_NONE;
3932           break;
3933
3934         default:
3935           return postfix_expression;
3936         }
3937     }
3938
3939   /* We should never get here.  */
3940   abort ();
3941   return error_mark_node;
3942 }
3943
3944 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
3945    by cp_parser_builtin_offsetof.  We're looking for
3946
3947      postfix-expression [ expression ]
3948
3949    FOR_OFFSETOF is set if we're being called in that context, which
3950    changes how we deal with integer constant expressions.  */
3951
3952 static tree
3953 cp_parser_postfix_open_square_expression (cp_parser *parser,
3954                                           tree postfix_expression,
3955                                           bool for_offsetof)
3956 {
3957   tree index;
3958
3959   /* Consume the `[' token.  */
3960   cp_lexer_consume_token (parser->lexer);
3961
3962   /* Parse the index expression.  */
3963   /* ??? For offsetof, there is a question of what to allow here.  If
3964      offsetof is not being used in an integral constant expression context,
3965      then we *could* get the right answer by computing the value at runtime.
3966      If we are in an integral constant expression context, then we might
3967      could accept any constant expression; hard to say without analysis.
3968      Rather than open the barn door too wide right away, allow only integer
3969      constant expresions here.  */
3970   if (for_offsetof)
3971     index = cp_parser_constant_expression (parser, false, NULL);
3972   else
3973     index = cp_parser_expression (parser);
3974
3975   /* Look for the closing `]'.  */
3976   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
3977
3978   /* Build the ARRAY_REF.  */
3979   postfix_expression = grok_array_decl (postfix_expression, index);
3980
3981   /* When not doing offsetof, array references are not permitted in
3982      constant-expressions.  */
3983   if (!for_offsetof
3984       && (cp_parser_non_integral_constant_expression
3985           (parser, "an array reference")))
3986     postfix_expression = error_mark_node;
3987
3988   return postfix_expression;
3989 }
3990
3991 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
3992    by cp_parser_builtin_offsetof.  We're looking for
3993
3994      postfix-expression . template [opt] id-expression
3995      postfix-expression . pseudo-destructor-name
3996      postfix-expression -> template [opt] id-expression
3997      postfix-expression -> pseudo-destructor-name
3998
3999    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4000    limits what of the above we'll actually accept, but nevermind.
4001    TOKEN_TYPE is the "." or "->" token, which will already have been
4002    removed from the stream.  */
4003
4004 static tree
4005 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4006                                         enum cpp_ttype token_type,
4007                                         tree postfix_expression,
4008                                         bool for_offsetof, cp_id_kind *idk)
4009 {
4010   tree name;
4011   bool dependent_p;
4012   bool template_p;
4013   tree scope = NULL_TREE;
4014
4015   /* If this is a `->' operator, dereference the pointer.  */
4016   if (token_type == CPP_DEREF)
4017     postfix_expression = build_x_arrow (postfix_expression);
4018   /* Check to see whether or not the expression is type-dependent.  */
4019   dependent_p = type_dependent_expression_p (postfix_expression);
4020   /* The identifier following the `->' or `.' is not qualified.  */
4021   parser->scope = NULL_TREE;
4022   parser->qualifying_scope = NULL_TREE;
4023   parser->object_scope = NULL_TREE;
4024   *idk = CP_ID_KIND_NONE;
4025   /* Enter the scope corresponding to the type of the object
4026      given by the POSTFIX_EXPRESSION.  */
4027   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4028     {
4029       scope = TREE_TYPE (postfix_expression);
4030       /* According to the standard, no expression should ever have
4031          reference type.  Unfortunately, we do not currently match
4032          the standard in this respect in that our internal representation
4033          of an expression may have reference type even when the standard
4034          says it does not.  Therefore, we have to manually obtain the
4035          underlying type here.  */
4036       scope = non_reference (scope);
4037       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4038       scope = complete_type_or_else (scope, NULL_TREE);
4039       /* Let the name lookup machinery know that we are processing a
4040          class member access expression.  */
4041       parser->context->object_type = scope;
4042       /* If something went wrong, we want to be able to discern that case,
4043          as opposed to the case where there was no SCOPE due to the type
4044          of expression being dependent.  */
4045       if (!scope)
4046         scope = error_mark_node;
4047       /* If the SCOPE was erroneous, make the various semantic analysis
4048          functions exit quickly -- and without issuing additional error
4049          messages.  */
4050       if (scope == error_mark_node)
4051         postfix_expression = error_mark_node;
4052     }
4053
4054   /* If the SCOPE is not a scalar type, we are looking at an
4055      ordinary class member access expression, rather than a
4056      pseudo-destructor-name.  */
4057   if (!scope || !SCALAR_TYPE_P (scope))
4058     {
4059       template_p = cp_parser_optional_template_keyword (parser);
4060       /* Parse the id-expression.  */
4061       name = cp_parser_id_expression (parser, template_p,
4062                                       /*check_dependency_p=*/true,
4063                                       /*template_p=*/NULL,
4064                                       /*declarator_p=*/false);
4065       /* In general, build a SCOPE_REF if the member name is qualified.
4066          However, if the name was not dependent and has already been
4067          resolved; there is no need to build the SCOPE_REF.  For example;
4068
4069              struct X { void f(); };
4070              template <typename T> void f(T* t) { t->X::f(); }
4071
4072          Even though "t" is dependent, "X::f" is not and has been resolved
4073          to a BASELINK; there is no need to include scope information.  */
4074
4075       /* But we do need to remember that there was an explicit scope for
4076          virtual function calls.  */
4077       if (parser->scope)
4078         *idk = CP_ID_KIND_QUALIFIED;
4079
4080       if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4081         {
4082           name = build_nt (SCOPE_REF, parser->scope, name);
4083           parser->scope = NULL_TREE;
4084           parser->qualifying_scope = NULL_TREE;
4085           parser->object_scope = NULL_TREE;
4086         }
4087       if (scope && name && BASELINK_P (name))
4088         adjust_result_of_qualified_name_lookup 
4089           (name, BINFO_TYPE (BASELINK_BINFO (name)), scope);
4090       postfix_expression
4091         = finish_class_member_access_expr (postfix_expression, name);
4092     }
4093   /* Otherwise, try the pseudo-destructor-name production.  */
4094   else
4095     {
4096       tree s = NULL_TREE;
4097       tree type;
4098
4099       /* Parse the pseudo-destructor-name.  */
4100       cp_parser_pseudo_destructor_name (parser, &s, &type);
4101       /* Form the call.  */
4102       postfix_expression
4103         = finish_pseudo_destructor_expr (postfix_expression,
4104                                          s, TREE_TYPE (type));
4105     }
4106
4107   /* We no longer need to look up names in the scope of the object on
4108      the left-hand side of the `.' or `->' operator.  */
4109   parser->context->object_type = NULL_TREE;
4110
4111   /* Outside of offsetof, these operators may not appear in
4112      constant-expressions.  */
4113   if (!for_offsetof
4114       && (cp_parser_non_integral_constant_expression 
4115           (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4116     postfix_expression = error_mark_node;
4117
4118   return postfix_expression;
4119 }
4120
4121 /* Parse a parenthesized expression-list.
4122
4123    expression-list:
4124      assignment-expression
4125      expression-list, assignment-expression
4126
4127    attribute-list:
4128      expression-list
4129      identifier
4130      identifier, expression-list
4131
4132    Returns a TREE_LIST.  The TREE_VALUE of each node is a
4133    representation of an assignment-expression.  Note that a TREE_LIST
4134    is returned even if there is only a single expression in the list.
4135    error_mark_node is returned if the ( and or ) are
4136    missing. NULL_TREE is returned on no expressions. The parentheses
4137    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4138    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4139    indicates whether or not all of the expressions in the list were
4140    constant.  */
4141
4142 static tree
4143 cp_parser_parenthesized_expression_list (cp_parser* parser,
4144                                          bool is_attribute_list,
4145                                          bool *non_constant_p)
4146 {
4147   tree expression_list = NULL_TREE;
4148   tree identifier = NULL_TREE;
4149
4150   /* Assume all the expressions will be constant.  */
4151   if (non_constant_p)
4152     *non_constant_p = false;
4153
4154   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4155     return error_mark_node;
4156
4157   /* Consume expressions until there are no more.  */
4158   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4159     while (true)
4160       {
4161         tree expr;
4162
4163         /* At the beginning of attribute lists, check to see if the
4164            next token is an identifier.  */
4165         if (is_attribute_list
4166             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4167           {
4168             cp_token *token;
4169
4170             /* Consume the identifier.  */
4171             token = cp_lexer_consume_token (parser->lexer);
4172             /* Save the identifier.  */
4173             identifier = token->value;
4174           }
4175         else
4176           {
4177             /* Parse the next assignment-expression.  */
4178             if (non_constant_p)
4179               {
4180                 bool expr_non_constant_p;
4181                 expr = (cp_parser_constant_expression
4182                         (parser, /*allow_non_constant_p=*/true,
4183                          &expr_non_constant_p));
4184                 if (expr_non_constant_p)
4185                   *non_constant_p = true;
4186               }
4187             else
4188               expr = cp_parser_assignment_expression (parser);
4189
4190              /* Add it to the list.  We add error_mark_node
4191                 expressions to the list, so that we can still tell if
4192                 the correct form for a parenthesized expression-list
4193                 is found. That gives better errors.  */
4194             expression_list = tree_cons (NULL_TREE, expr, expression_list);
4195
4196             if (expr == error_mark_node)
4197               goto skip_comma;
4198           }
4199
4200         /* After the first item, attribute lists look the same as
4201            expression lists.  */
4202         is_attribute_list = false;
4203
4204       get_comma:;
4205         /* If the next token isn't a `,', then we are done.  */
4206         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4207           break;
4208
4209         /* Otherwise, consume the `,' and keep going.  */
4210         cp_lexer_consume_token (parser->lexer);
4211       }
4212
4213   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
4214     {
4215       int ending;
4216
4217     skip_comma:;
4218       /* We try and resync to an unnested comma, as that will give the
4219          user better diagnostics.  */
4220       ending = cp_parser_skip_to_closing_parenthesis (parser,
4221                                                       /*recovering=*/true,
4222                                                       /*or_comma=*/true,
4223                                                       /*consume_paren=*/true);
4224       if (ending < 0)
4225         goto get_comma;
4226       if (!ending)
4227         return error_mark_node;
4228     }
4229
4230   /* We built up the list in reverse order so we must reverse it now.  */
4231   expression_list = nreverse (expression_list);
4232   if (identifier)
4233     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
4234
4235   return expression_list;
4236 }
4237
4238 /* Parse a pseudo-destructor-name.
4239
4240    pseudo-destructor-name:
4241      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
4242      :: [opt] nested-name-specifier template template-id :: ~ type-name
4243      :: [opt] nested-name-specifier [opt] ~ type-name
4244
4245    If either of the first two productions is used, sets *SCOPE to the
4246    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
4247    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
4248    or ERROR_MARK_NODE if the parse fails.  */
4249
4250 static void
4251 cp_parser_pseudo_destructor_name (cp_parser* parser,
4252                                   tree* scope,
4253                                   tree* type)
4254 {
4255   bool nested_name_specifier_p;
4256
4257   /* Look for the optional `::' operator.  */
4258   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
4259   /* Look for the optional nested-name-specifier.  */
4260   nested_name_specifier_p
4261     = (cp_parser_nested_name_specifier_opt (parser,
4262                                             /*typename_keyword_p=*/false,
4263                                             /*check_dependency_p=*/true,
4264                                             /*type_p=*/false,
4265                                             /*is_declaration=*/true)
4266        != NULL_TREE);
4267   /* Now, if we saw a nested-name-specifier, we might be doing the
4268      second production.  */
4269   if (nested_name_specifier_p
4270       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
4271     {
4272       /* Consume the `template' keyword.  */
4273       cp_lexer_consume_token (parser->lexer);
4274       /* Parse the template-id.  */
4275       cp_parser_template_id (parser,
4276                              /*template_keyword_p=*/true,
4277                              /*check_dependency_p=*/false,
4278                              /*is_declaration=*/true);
4279       /* Look for the `::' token.  */
4280       cp_parser_require (parser, CPP_SCOPE, "`::'");
4281     }
4282   /* If the next token is not a `~', then there might be some
4283      additional qualification.  */
4284   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
4285     {
4286       /* Look for the type-name.  */
4287       *scope = TREE_TYPE (cp_parser_type_name (parser));
4288
4289       /* If we didn't get an aggregate type, or we don't have ::~,
4290          then something has gone wrong.  Since the only caller of this
4291          function is looking for something after `.' or `->' after a
4292          scalar type, most likely the program is trying to get a
4293          member of a non-aggregate type.  */
4294       if (*scope == error_mark_node
4295           || cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
4296           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
4297         {
4298           cp_parser_error (parser, "request for member of non-aggregate type");
4299           *type = error_mark_node;
4300           return;
4301         }
4302
4303       /* Look for the `::' token.  */
4304       cp_parser_require (parser, CPP_SCOPE, "`::'");
4305     }
4306   else
4307     *scope = NULL_TREE;
4308
4309   /* Look for the `~'.  */
4310   cp_parser_require (parser, CPP_COMPL, "`~'");
4311   /* Look for the type-name again.  We are not responsible for
4312      checking that it matches the first type-name.  */
4313   *type = cp_parser_type_name (parser);
4314 }
4315
4316 /* Parse a unary-expression.
4317
4318    unary-expression:
4319      postfix-expression
4320      ++ cast-expression
4321      -- cast-expression
4322      unary-operator cast-expression
4323      sizeof unary-expression
4324      sizeof ( type-id )
4325      new-expression
4326      delete-expression
4327
4328    GNU Extensions:
4329
4330    unary-expression:
4331      __extension__ cast-expression
4332      __alignof__ unary-expression
4333      __alignof__ ( type-id )
4334      __real__ cast-expression
4335      __imag__ cast-expression
4336      && identifier
4337
4338    ADDRESS_P is true iff the unary-expression is appearing as the
4339    operand of the `&' operator.
4340
4341    Returns a representation of the expression.  */
4342
4343 static tree
4344 cp_parser_unary_expression (cp_parser *parser, bool address_p)
4345 {
4346   cp_token *token;
4347   enum tree_code unary_operator;
4348
4349   /* Peek at the next token.  */
4350   token = cp_lexer_peek_token (parser->lexer);
4351   /* Some keywords give away the kind of expression.  */
4352   if (token->type == CPP_KEYWORD)
4353     {
4354       enum rid keyword = token->keyword;
4355
4356       switch (keyword)
4357         {
4358         case RID_ALIGNOF:
4359         case RID_SIZEOF:
4360           {
4361             tree operand;
4362             enum tree_code op;
4363
4364             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
4365             /* Consume the token.  */
4366             cp_lexer_consume_token (parser->lexer);
4367             /* Parse the operand.  */
4368             operand = cp_parser_sizeof_operand (parser, keyword);
4369
4370             if (TYPE_P (operand))
4371               return cxx_sizeof_or_alignof_type (operand, op, true);
4372             else
4373               return cxx_sizeof_or_alignof_expr (operand, op);
4374           }
4375
4376         case RID_NEW:
4377           return cp_parser_new_expression (parser);
4378
4379         case RID_DELETE:
4380           return cp_parser_delete_expression (parser);
4381
4382         case RID_EXTENSION:
4383           {
4384             /* The saved value of the PEDANTIC flag.  */
4385             int saved_pedantic;
4386             tree expr;
4387
4388             /* Save away the PEDANTIC flag.  */
4389             cp_parser_extension_opt (parser, &saved_pedantic);
4390             /* Parse the cast-expression.  */
4391             expr = cp_parser_simple_cast_expression (parser);
4392             /* Restore the PEDANTIC flag.  */
4393             pedantic = saved_pedantic;
4394
4395             return expr;
4396           }
4397
4398         case RID_REALPART:
4399         case RID_IMAGPART:
4400           {
4401             tree expression;
4402
4403             /* Consume the `__real__' or `__imag__' token.  */
4404             cp_lexer_consume_token (parser->lexer);
4405             /* Parse the cast-expression.  */
4406             expression = cp_parser_simple_cast_expression (parser);
4407             /* Create the complete representation.  */
4408             return build_x_unary_op ((keyword == RID_REALPART
4409                                       ? REALPART_EXPR : IMAGPART_EXPR),
4410                                      expression);
4411           }
4412           break;
4413
4414         default:
4415           break;
4416         }
4417     }
4418
4419   /* Look for the `:: new' and `:: delete', which also signal the
4420      beginning of a new-expression, or delete-expression,
4421      respectively.  If the next token is `::', then it might be one of
4422      these.  */
4423   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
4424     {
4425       enum rid keyword;
4426
4427       /* See if the token after the `::' is one of the keywords in
4428          which we're interested.  */
4429       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
4430       /* If it's `new', we have a new-expression.  */
4431       if (keyword == RID_NEW)
4432         return cp_parser_new_expression (parser);
4433       /* Similarly, for `delete'.  */
4434       else if (keyword == RID_DELETE)
4435         return cp_parser_delete_expression (parser);
4436     }
4437
4438   /* Look for a unary operator.  */
4439   unary_operator = cp_parser_unary_operator (token);
4440   /* The `++' and `--' operators can be handled similarly, even though
4441      they are not technically unary-operators in the grammar.  */
4442   if (unary_operator == ERROR_MARK)
4443     {
4444       if (token->type == CPP_PLUS_PLUS)
4445         unary_operator = PREINCREMENT_EXPR;
4446       else if (token->type == CPP_MINUS_MINUS)
4447         unary_operator = PREDECREMENT_EXPR;
4448       /* Handle the GNU address-of-label extension.  */
4449       else if (cp_parser_allow_gnu_extensions_p (parser)
4450                && token->type == CPP_AND_AND)
4451         {
4452           tree identifier;
4453
4454           /* Consume the '&&' token.  */
4455           cp_lexer_consume_token (parser->lexer);
4456           /* Look for the identifier.  */
4457           identifier = cp_parser_identifier (parser);
4458           /* Create an expression representing the address.  */
4459           return finish_label_address_expr (identifier);
4460         }
4461     }
4462   if (unary_operator != ERROR_MARK)
4463     {
4464       tree cast_expression;
4465       tree expression = error_mark_node;
4466       const char *non_constant_p = NULL;
4467
4468       /* Consume the operator token.  */
4469       token = cp_lexer_consume_token (parser->lexer);
4470       /* Parse the cast-expression.  */
4471       cast_expression
4472         = cp_parser_cast_expression (parser, unary_operator == ADDR_EXPR);
4473       /* Now, build an appropriate representation.  */
4474       switch (unary_operator)
4475         {
4476         case INDIRECT_REF:
4477           non_constant_p = "`*'";
4478           expression = build_x_indirect_ref (cast_expression, "unary *");
4479           break;
4480
4481         case ADDR_EXPR:
4482           non_constant_p = "`&'";
4483           /* Fall through.  */
4484         case BIT_NOT_EXPR:
4485           expression = build_x_unary_op (unary_operator, cast_expression);
4486           break;
4487
4488         case PREINCREMENT_EXPR:
4489         case PREDECREMENT_EXPR:
4490           non_constant_p = (unary_operator == PREINCREMENT_EXPR
4491                             ? "`++'" : "`--'");
4492           /* Fall through.  */
4493         case CONVERT_EXPR:
4494         case NEGATE_EXPR:
4495         case TRUTH_NOT_EXPR:
4496           expression = finish_unary_op_expr (unary_operator, cast_expression);
4497           break;
4498
4499         default:
4500           abort ();
4501         }
4502
4503       if (non_constant_p 
4504           && cp_parser_non_integral_constant_expression (parser,
4505                                                          non_constant_p))
4506         expression = error_mark_node;
4507
4508       return expression;
4509     }
4510
4511   return cp_parser_postfix_expression (parser, address_p);
4512 }
4513
4514 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
4515    unary-operator, the corresponding tree code is returned.  */
4516
4517 static enum tree_code
4518 cp_parser_unary_operator (cp_token* token)
4519 {
4520   switch (token->type)
4521     {
4522     case CPP_MULT:
4523       return INDIRECT_REF;
4524
4525     case CPP_AND:
4526       return ADDR_EXPR;
4527
4528     case CPP_PLUS:
4529       return CONVERT_EXPR;
4530
4531     case CPP_MINUS:
4532       return NEGATE_EXPR;
4533
4534     case CPP_NOT:
4535       return TRUTH_NOT_EXPR;
4536
4537     case CPP_COMPL:
4538       return BIT_NOT_EXPR;
4539
4540     default:
4541       return ERROR_MARK;
4542     }
4543 }
4544
4545 /* Parse a new-expression.
4546
4547    new-expression:
4548      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
4549      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
4550
4551    Returns a representation of the expression.  */
4552
4553 static tree
4554 cp_parser_new_expression (cp_parser* parser)
4555 {
4556   bool global_scope_p;
4557   tree placement;
4558   tree type;
4559   tree initializer;
4560
4561   /* Look for the optional `::' operator.  */
4562   global_scope_p
4563     = (cp_parser_global_scope_opt (parser,
4564                                    /*current_scope_valid_p=*/false)
4565        != NULL_TREE);
4566   /* Look for the `new' operator.  */
4567   cp_parser_require_keyword (parser, RID_NEW, "`new'");
4568   /* There's no easy way to tell a new-placement from the
4569      `( type-id )' construct.  */
4570   cp_parser_parse_tentatively (parser);
4571   /* Look for a new-placement.  */
4572   placement = cp_parser_new_placement (parser);
4573   /* If that didn't work out, there's no new-placement.  */
4574   if (!cp_parser_parse_definitely (parser))
4575     placement = NULL_TREE;
4576
4577   /* If the next token is a `(', then we have a parenthesized
4578      type-id.  */
4579   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4580     {
4581       /* Consume the `('.  */
4582       cp_lexer_consume_token (parser->lexer);
4583       /* Parse the type-id.  */
4584       type = cp_parser_type_id (parser);
4585       /* Look for the closing `)'.  */
4586       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4587       /* There should not be a direct-new-declarator in this production, 
4588          but GCC used to allowed this, so we check and emit a sensible error
4589          message for this case.  */
4590       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
4591         {
4592           error ("array bound forbidden after parenthesized type-id");
4593           inform ("try removing the parentheses around the type-id");
4594           cp_parser_direct_new_declarator (parser);
4595         }
4596     }
4597   /* Otherwise, there must be a new-type-id.  */
4598   else
4599     type = cp_parser_new_type_id (parser);
4600
4601   /* If the next token is a `(', then we have a new-initializer.  */
4602   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4603     initializer = cp_parser_new_initializer (parser);
4604   else
4605     initializer = NULL_TREE;
4606
4607   /* A new-expression may not appear in an integral constant
4608      expression.  */
4609   if (cp_parser_non_integral_constant_expression (parser, "`new'"))
4610     return error_mark_node;
4611
4612   /* Create a representation of the new-expression.  */
4613   return build_new (placement, type, initializer, global_scope_p);
4614 }
4615
4616 /* Parse a new-placement.
4617
4618    new-placement:
4619      ( expression-list )
4620
4621    Returns the same representation as for an expression-list.  */
4622
4623 static tree
4624 cp_parser_new_placement (cp_parser* parser)
4625 {
4626   tree expression_list;
4627
4628   /* Parse the expression-list.  */
4629   expression_list = (cp_parser_parenthesized_expression_list
4630                      (parser, false, /*non_constant_p=*/NULL));
4631
4632   return expression_list;
4633 }
4634
4635 /* Parse a new-type-id.
4636
4637    new-type-id:
4638      type-specifier-seq new-declarator [opt]
4639
4640    Returns a TREE_LIST whose TREE_PURPOSE is the type-specifier-seq,
4641    and whose TREE_VALUE is the new-declarator.  */
4642
4643 static tree
4644 cp_parser_new_type_id (cp_parser* parser)
4645 {
4646   tree type_specifier_seq;
4647   tree declarator;
4648   const char *saved_message;
4649
4650   /* The type-specifier sequence must not contain type definitions.
4651      (It cannot contain declarations of new types either, but if they
4652      are not definitions we will catch that because they are not
4653      complete.)  */
4654   saved_message = parser->type_definition_forbidden_message;
4655   parser->type_definition_forbidden_message
4656     = "types may not be defined in a new-type-id";
4657   /* Parse the type-specifier-seq.  */
4658   type_specifier_seq = cp_parser_type_specifier_seq (parser);
4659   /* Restore the old message.  */
4660   parser->type_definition_forbidden_message = saved_message;
4661   /* Parse the new-declarator.  */
4662   declarator = cp_parser_new_declarator_opt (parser);
4663
4664   return build_tree_list (type_specifier_seq, declarator);
4665 }
4666
4667 /* Parse an (optional) new-declarator.
4668
4669    new-declarator:
4670      ptr-operator new-declarator [opt]
4671      direct-new-declarator
4672
4673    Returns a representation of the declarator.  See
4674    cp_parser_declarator for the representations used.  */
4675
4676 static tree
4677 cp_parser_new_declarator_opt (cp_parser* parser)
4678 {
4679   enum tree_code code;
4680   tree type;
4681   tree cv_qualifier_seq;
4682
4683   /* We don't know if there's a ptr-operator next, or not.  */
4684   cp_parser_parse_tentatively (parser);
4685   /* Look for a ptr-operator.  */
4686   code = cp_parser_ptr_operator (parser, &type, &cv_qualifier_seq);
4687   /* If that worked, look for more new-declarators.  */
4688   if (cp_parser_parse_definitely (parser))
4689     {
4690       tree declarator;
4691
4692       /* Parse another optional declarator.  */
4693       declarator = cp_parser_new_declarator_opt (parser);
4694
4695       /* Create the representation of the declarator.  */
4696       if (code == INDIRECT_REF)
4697         declarator = make_pointer_declarator (cv_qualifier_seq,
4698                                               declarator);
4699       else
4700         declarator = make_reference_declarator (cv_qualifier_seq,
4701                                                 declarator);
4702
4703      /* Handle the pointer-to-member case.  */
4704      if (type)
4705        declarator = build_nt (SCOPE_REF, type, declarator);
4706
4707       return declarator;
4708     }
4709
4710   /* If the next token is a `[', there is a direct-new-declarator.  */
4711   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
4712     return cp_parser_direct_new_declarator (parser);
4713
4714   return NULL_TREE;
4715 }
4716
4717 /* Parse a direct-new-declarator.
4718
4719    direct-new-declarator:
4720      [ expression ]
4721      direct-new-declarator [constant-expression]
4722
4723    Returns an ARRAY_REF, following the same conventions as are
4724    documented for cp_parser_direct_declarator.  */
4725
4726 static tree
4727 cp_parser_direct_new_declarator (cp_parser* parser)
4728 {
4729   tree declarator = NULL_TREE;
4730
4731   while (true)
4732     {
4733       tree expression;
4734
4735       /* Look for the opening `['.  */
4736       cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
4737       /* The first expression is not required to be constant.  */
4738       if (!declarator)
4739         {
4740           expression = cp_parser_expression (parser);
4741           /* The standard requires that the expression have integral
4742              type.  DR 74 adds enumeration types.  We believe that the
4743              real intent is that these expressions be handled like the
4744              expression in a `switch' condition, which also allows
4745              classes with a single conversion to integral or
4746              enumeration type.  */
4747           if (!processing_template_decl)
4748             {
4749               expression
4750                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
4751                                               expression,
4752                                               /*complain=*/true);
4753               if (!expression)
4754                 {
4755                   error ("expression in new-declarator must have integral or enumeration type");
4756                   expression = error_mark_node;
4757                 }
4758             }
4759         }
4760       /* But all the other expressions must be.  */
4761       else
4762         expression
4763           = cp_parser_constant_expression (parser,
4764                                            /*allow_non_constant=*/false,
4765                                            NULL);
4766       /* Look for the closing `]'.  */
4767       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4768
4769       /* Add this bound to the declarator.  */
4770       declarator = build_nt (ARRAY_REF, declarator, expression);
4771
4772       /* If the next token is not a `[', then there are no more
4773          bounds.  */
4774       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
4775         break;
4776     }
4777
4778   return declarator;
4779 }
4780
4781 /* Parse a new-initializer.
4782
4783    new-initializer:
4784      ( expression-list [opt] )
4785
4786    Returns a representation of the expression-list.  If there is no
4787    expression-list, VOID_ZERO_NODE is returned.  */
4788
4789 static tree
4790 cp_parser_new_initializer (cp_parser* parser)
4791 {
4792   tree expression_list;
4793
4794   expression_list = (cp_parser_parenthesized_expression_list
4795                      (parser, false, /*non_constant_p=*/NULL));
4796   if (!expression_list)
4797     expression_list = void_zero_node;
4798
4799   return expression_list;
4800 }
4801
4802 /* Parse a delete-expression.
4803
4804    delete-expression:
4805      :: [opt] delete cast-expression
4806      :: [opt] delete [ ] cast-expression
4807
4808    Returns a representation of the expression.  */
4809
4810 static tree
4811 cp_parser_delete_expression (cp_parser* parser)
4812 {
4813   bool global_scope_p;
4814   bool array_p;
4815   tree expression;
4816
4817   /* Look for the optional `::' operator.  */
4818   global_scope_p
4819     = (cp_parser_global_scope_opt (parser,
4820                                    /*current_scope_valid_p=*/false)
4821        != NULL_TREE);
4822   /* Look for the `delete' keyword.  */
4823   cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
4824   /* See if the array syntax is in use.  */
4825   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
4826     {
4827       /* Consume the `[' token.  */
4828       cp_lexer_consume_token (parser->lexer);
4829       /* Look for the `]' token.  */
4830       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4831       /* Remember that this is the `[]' construct.  */
4832       array_p = true;
4833     }
4834   else
4835     array_p = false;
4836
4837   /* Parse the cast-expression.  */
4838   expression = cp_parser_simple_cast_expression (parser);
4839
4840   /* A delete-expression may not appear in an integral constant
4841      expression.  */
4842   if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
4843     return error_mark_node;
4844
4845   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
4846 }
4847
4848 /* Parse a cast-expression.
4849
4850    cast-expression:
4851      unary-expression
4852      ( type-id ) cast-expression
4853
4854    Returns a representation of the expression.  */
4855
4856 static tree
4857 cp_parser_cast_expression (cp_parser *parser, bool address_p)
4858 {
4859   /* If it's a `(', then we might be looking at a cast.  */
4860   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4861     {
4862       tree type = NULL_TREE;
4863       tree expr = NULL_TREE;
4864       bool compound_literal_p;
4865       const char *saved_message;
4866
4867       /* There's no way to know yet whether or not this is a cast.
4868          For example, `(int (3))' is a unary-expression, while `(int)
4869          3' is a cast.  So, we resort to parsing tentatively.  */
4870       cp_parser_parse_tentatively (parser);
4871       /* Types may not be defined in a cast.  */
4872       saved_message = parser->type_definition_forbidden_message;
4873       parser->type_definition_forbidden_message
4874         = "types may not be defined in casts";
4875       /* Consume the `('.  */
4876       cp_lexer_consume_token (parser->lexer);
4877       /* A very tricky bit is that `(struct S) { 3 }' is a
4878          compound-literal (which we permit in C++ as an extension).
4879          But, that construct is not a cast-expression -- it is a
4880          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
4881          is legal; if the compound-literal were a cast-expression,
4882          you'd need an extra set of parentheses.)  But, if we parse
4883          the type-id, and it happens to be a class-specifier, then we
4884          will commit to the parse at that point, because we cannot
4885          undo the action that is done when creating a new class.  So,
4886          then we cannot back up and do a postfix-expression.
4887
4888          Therefore, we scan ahead to the closing `)', and check to see
4889          if the token after the `)' is a `{'.  If so, we are not
4890          looking at a cast-expression.
4891
4892          Save tokens so that we can put them back.  */
4893       cp_lexer_save_tokens (parser->lexer);
4894       /* Skip tokens until the next token is a closing parenthesis.
4895          If we find the closing `)', and the next token is a `{', then
4896          we are looking at a compound-literal.  */
4897       compound_literal_p
4898         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
4899                                                   /*consume_paren=*/true)
4900            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
4901       /* Roll back the tokens we skipped.  */
4902       cp_lexer_rollback_tokens (parser->lexer);
4903       /* If we were looking at a compound-literal, simulate an error
4904          so that the call to cp_parser_parse_definitely below will
4905          fail.  */
4906       if (compound_literal_p)
4907         cp_parser_simulate_error (parser);
4908       else
4909         {
4910           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4911           parser->in_type_id_in_expr_p = true;
4912           /* Look for the type-id.  */
4913           type = cp_parser_type_id (parser);
4914           /* Look for the closing `)'.  */
4915           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4916           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4917         }
4918
4919       /* Restore the saved message.  */
4920       parser->type_definition_forbidden_message = saved_message;
4921
4922       /* If ok so far, parse the dependent expression. We cannot be
4923          sure it is a cast. Consider `(T ())'.  It is a parenthesized
4924          ctor of T, but looks like a cast to function returning T
4925          without a dependent expression.  */
4926       if (!cp_parser_error_occurred (parser))
4927         expr = cp_parser_simple_cast_expression (parser);
4928
4929       if (cp_parser_parse_definitely (parser))
4930         {
4931           /* Warn about old-style casts, if so requested.  */
4932           if (warn_old_style_cast
4933               && !in_system_header
4934               && !VOID_TYPE_P (type)
4935               && current_lang_name != lang_name_c)
4936             warning ("use of old-style cast");
4937
4938           /* Only type conversions to integral or enumeration types
4939              can be used in constant-expressions.  */
4940           if (parser->integral_constant_expression_p
4941               && !dependent_type_p (type)
4942               && !INTEGRAL_OR_ENUMERATION_TYPE_P (type)
4943               && (cp_parser_non_integral_constant_expression 
4944                   (parser,
4945                    "a cast to a type other than an integral or "
4946                    "enumeration type")))
4947             return error_mark_node;
4948
4949           /* Perform the cast.  */
4950           expr = build_c_cast (type, expr);
4951           return expr;
4952         }
4953     }
4954
4955   /* If we get here, then it's not a cast, so it must be a
4956      unary-expression.  */
4957   return cp_parser_unary_expression (parser, address_p);
4958 }
4959
4960 /* Parse a pm-expression.
4961
4962    pm-expression:
4963      cast-expression
4964      pm-expression .* cast-expression
4965      pm-expression ->* cast-expression
4966
4967      Returns a representation of the expression.  */
4968
4969 static tree
4970 cp_parser_pm_expression (cp_parser* parser)
4971 {
4972   static const cp_parser_token_tree_map map = {
4973     { CPP_DEREF_STAR, MEMBER_REF },
4974     { CPP_DOT_STAR, DOTSTAR_EXPR },
4975     { CPP_EOF, ERROR_MARK }
4976   };
4977
4978   return cp_parser_binary_expression (parser, map,
4979                                       cp_parser_simple_cast_expression);
4980 }
4981
4982 /* Parse a multiplicative-expression.
4983
4984    multiplicative-expression:
4985      pm-expression
4986      multiplicative-expression * pm-expression
4987      multiplicative-expression / pm-expression
4988      multiplicative-expression % pm-expression
4989
4990    Returns a representation of the expression.  */
4991
4992 static tree
4993 cp_parser_multiplicative_expression (cp_parser* parser)
4994 {
4995   static const cp_parser_token_tree_map map = {
4996     { CPP_MULT, MULT_EXPR },
4997     { CPP_DIV, TRUNC_DIV_EXPR },
4998     { CPP_MOD, TRUNC_MOD_EXPR },
4999     { CPP_EOF, ERROR_MARK }
5000   };
5001
5002   return cp_parser_binary_expression (parser,
5003                                       map,
5004                                       cp_parser_pm_expression);
5005 }
5006
5007 /* Parse an additive-expression.
5008
5009    additive-expression:
5010      multiplicative-expression
5011      additive-expression + multiplicative-expression
5012      additive-expression - multiplicative-expression
5013
5014    Returns a representation of the expression.  */
5015
5016 static tree
5017 cp_parser_additive_expression (cp_parser* parser)
5018 {
5019   static const cp_parser_token_tree_map map = {
5020     { CPP_PLUS, PLUS_EXPR },
5021     { CPP_MINUS, MINUS_EXPR },
5022     { CPP_EOF, ERROR_MARK }
5023   };
5024
5025   return cp_parser_binary_expression (parser,
5026                                       map,
5027                                       cp_parser_multiplicative_expression);
5028 }
5029
5030 /* Parse a shift-expression.
5031
5032    shift-expression:
5033      additive-expression
5034      shift-expression << additive-expression
5035      shift-expression >> additive-expression
5036
5037    Returns a representation of the expression.  */
5038
5039 static tree
5040 cp_parser_shift_expression (cp_parser* parser)
5041 {
5042   static const cp_parser_token_tree_map map = {
5043     { CPP_LSHIFT, LSHIFT_EXPR },
5044     { CPP_RSHIFT, RSHIFT_EXPR },
5045     { CPP_EOF, ERROR_MARK }
5046   };
5047
5048   return cp_parser_binary_expression (parser,
5049                                       map,
5050                                       cp_parser_additive_expression);
5051 }
5052
5053 /* Parse a relational-expression.
5054
5055    relational-expression:
5056      shift-expression
5057      relational-expression < shift-expression
5058      relational-expression > shift-expression
5059      relational-expression <= shift-expression
5060      relational-expression >= shift-expression
5061
5062    GNU Extension:
5063
5064    relational-expression:
5065      relational-expression <? shift-expression
5066      relational-expression >? shift-expression
5067
5068    Returns a representation of the expression.  */
5069
5070 static tree
5071 cp_parser_relational_expression (cp_parser* parser)
5072 {
5073   static const cp_parser_token_tree_map map = {
5074     { CPP_LESS, LT_EXPR },
5075     { CPP_GREATER, GT_EXPR },
5076     { CPP_LESS_EQ, LE_EXPR },
5077     { CPP_GREATER_EQ, GE_EXPR },
5078     { CPP_MIN, MIN_EXPR },
5079     { CPP_MAX, MAX_EXPR },
5080     { CPP_EOF, ERROR_MARK }
5081   };
5082
5083   return cp_parser_binary_expression (parser,
5084                                       map,
5085                                       cp_parser_shift_expression);
5086 }
5087
5088 /* Parse an equality-expression.
5089
5090    equality-expression:
5091      relational-expression
5092      equality-expression == relational-expression
5093      equality-expression != relational-expression
5094
5095    Returns a representation of the expression.  */
5096
5097 static tree
5098 cp_parser_equality_expression (cp_parser* parser)
5099 {
5100   static const cp_parser_token_tree_map map = {
5101     { CPP_EQ_EQ, EQ_EXPR },
5102     { CPP_NOT_EQ, NE_EXPR },
5103     { CPP_EOF, ERROR_MARK }
5104   };
5105
5106   return cp_parser_binary_expression (parser,
5107                                       map,
5108                                       cp_parser_relational_expression);
5109 }
5110
5111 /* Parse an and-expression.
5112
5113    and-expression:
5114      equality-expression
5115      and-expression & equality-expression
5116
5117    Returns a representation of the expression.  */
5118
5119 static tree
5120 cp_parser_and_expression (cp_parser* parser)
5121 {
5122   static const cp_parser_token_tree_map map = {
5123     { CPP_AND, BIT_AND_EXPR },
5124     { CPP_EOF, ERROR_MARK }
5125   };
5126
5127   return cp_parser_binary_expression (parser,
5128                                       map,
5129                                       cp_parser_equality_expression);
5130 }
5131
5132 /* Parse an exclusive-or-expression.
5133
5134    exclusive-or-expression:
5135      and-expression
5136      exclusive-or-expression ^ and-expression
5137
5138    Returns a representation of the expression.  */
5139
5140 static tree
5141 cp_parser_exclusive_or_expression (cp_parser* parser)
5142 {
5143   static const cp_parser_token_tree_map map = {
5144     { CPP_XOR, BIT_XOR_EXPR },
5145     { CPP_EOF, ERROR_MARK }
5146   };
5147
5148   return cp_parser_binary_expression (parser,
5149                                       map,
5150                                       cp_parser_and_expression);
5151 }
5152
5153
5154 /* Parse an inclusive-or-expression.
5155
5156    inclusive-or-expression:
5157      exclusive-or-expression
5158      inclusive-or-expression | exclusive-or-expression
5159
5160    Returns a representation of the expression.  */
5161
5162 static tree
5163 cp_parser_inclusive_or_expression (cp_parser* parser)
5164 {
5165   static const cp_parser_token_tree_map map = {
5166     { CPP_OR, BIT_IOR_EXPR },
5167     { CPP_EOF, ERROR_MARK }
5168   };
5169
5170   return cp_parser_binary_expression (parser,
5171                                       map,
5172                                       cp_parser_exclusive_or_expression);
5173 }
5174
5175 /* Parse a logical-and-expression.
5176
5177    logical-and-expression:
5178      inclusive-or-expression
5179      logical-and-expression && inclusive-or-expression
5180
5181    Returns a representation of the expression.  */
5182
5183 static tree
5184 cp_parser_logical_and_expression (cp_parser* parser)
5185 {
5186   static const cp_parser_token_tree_map map = {
5187     { CPP_AND_AND, TRUTH_ANDIF_EXPR },
5188     { CPP_EOF, ERROR_MARK }
5189   };
5190
5191   return cp_parser_binary_expression (parser,
5192                                       map,
5193                                       cp_parser_inclusive_or_expression);
5194 }
5195
5196 /* Parse a logical-or-expression.
5197
5198    logical-or-expression:
5199      logical-and-expression
5200      logical-or-expression || logical-and-expression
5201
5202    Returns a representation of the expression.  */
5203
5204 static tree
5205 cp_parser_logical_or_expression (cp_parser* parser)
5206 {
5207   static const cp_parser_token_tree_map map = {
5208     { CPP_OR_OR, TRUTH_ORIF_EXPR },
5209     { CPP_EOF, ERROR_MARK }
5210   };
5211
5212   return cp_parser_binary_expression (parser,
5213                                       map,
5214                                       cp_parser_logical_and_expression);
5215 }
5216
5217 /* Parse the `? expression : assignment-expression' part of a
5218    conditional-expression.  The LOGICAL_OR_EXPR is the
5219    logical-or-expression that started the conditional-expression.
5220    Returns a representation of the entire conditional-expression.
5221
5222    This routine is used by cp_parser_assignment_expression.
5223
5224      ? expression : assignment-expression
5225
5226    GNU Extensions:
5227
5228      ? : assignment-expression */
5229
5230 static tree
5231 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
5232 {
5233   tree expr;
5234   tree assignment_expr;
5235
5236   /* Consume the `?' token.  */
5237   cp_lexer_consume_token (parser->lexer);
5238   if (cp_parser_allow_gnu_extensions_p (parser)
5239       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
5240     /* Implicit true clause.  */
5241     expr = NULL_TREE;
5242   else
5243     /* Parse the expression.  */
5244     expr = cp_parser_expression (parser);
5245
5246   /* The next token should be a `:'.  */
5247   cp_parser_require (parser, CPP_COLON, "`:'");
5248   /* Parse the assignment-expression.  */
5249   assignment_expr = cp_parser_assignment_expression (parser);
5250
5251   /* Build the conditional-expression.  */
5252   return build_x_conditional_expr (logical_or_expr,
5253                                    expr,
5254                                    assignment_expr);
5255 }
5256
5257 /* Parse an assignment-expression.
5258
5259    assignment-expression:
5260      conditional-expression
5261      logical-or-expression assignment-operator assignment_expression
5262      throw-expression
5263
5264    Returns a representation for the expression.  */
5265
5266 static tree
5267 cp_parser_assignment_expression (cp_parser* parser)
5268 {
5269   tree expr;
5270
5271   /* If the next token is the `throw' keyword, then we're looking at
5272      a throw-expression.  */
5273   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
5274     expr = cp_parser_throw_expression (parser);
5275   /* Otherwise, it must be that we are looking at a
5276      logical-or-expression.  */
5277   else
5278     {
5279       /* Parse the logical-or-expression.  */
5280       expr = cp_parser_logical_or_expression (parser);
5281       /* If the next token is a `?' then we're actually looking at a
5282          conditional-expression.  */
5283       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
5284         return cp_parser_question_colon_clause (parser, expr);
5285       else
5286         {
5287           enum tree_code assignment_operator;
5288
5289           /* If it's an assignment-operator, we're using the second
5290              production.  */
5291           assignment_operator
5292             = cp_parser_assignment_operator_opt (parser);
5293           if (assignment_operator != ERROR_MARK)
5294             {
5295               tree rhs;
5296
5297               /* Parse the right-hand side of the assignment.  */
5298               rhs = cp_parser_assignment_expression (parser);
5299               /* An assignment may not appear in a
5300                  constant-expression.  */
5301               if (cp_parser_non_integral_constant_expression (parser,
5302                                                               "an assignment"))
5303                 return error_mark_node;
5304               /* Build the assignment expression.  */
5305               expr = build_x_modify_expr (expr,
5306                                           assignment_operator,
5307                                           rhs);
5308             }
5309         }
5310     }
5311
5312   return expr;
5313 }
5314
5315 /* Parse an (optional) assignment-operator.
5316
5317    assignment-operator: one of
5318      = *= /= %= += -= >>= <<= &= ^= |=
5319
5320    GNU Extension:
5321
5322    assignment-operator: one of
5323      <?= >?=
5324
5325    If the next token is an assignment operator, the corresponding tree
5326    code is returned, and the token is consumed.  For example, for
5327    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
5328    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
5329    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
5330    operator, ERROR_MARK is returned.  */
5331
5332 static enum tree_code
5333 cp_parser_assignment_operator_opt (cp_parser* parser)
5334 {
5335   enum tree_code op;
5336   cp_token *token;
5337
5338   /* Peek at the next toen.  */
5339   token = cp_lexer_peek_token (parser->lexer);
5340
5341   switch (token->type)
5342     {
5343     case CPP_EQ:
5344       op = NOP_EXPR;
5345       break;
5346
5347     case CPP_MULT_EQ:
5348       op = MULT_EXPR;
5349       break;
5350
5351     case CPP_DIV_EQ:
5352       op = TRUNC_DIV_EXPR;
5353       break;
5354
5355     case CPP_MOD_EQ:
5356       op = TRUNC_MOD_EXPR;
5357       break;
5358
5359     case CPP_PLUS_EQ:
5360       op = PLUS_EXPR;
5361       break;
5362
5363     case CPP_MINUS_EQ:
5364       op = MINUS_EXPR;
5365       break;
5366
5367     case CPP_RSHIFT_EQ:
5368       op = RSHIFT_EXPR;
5369       break;
5370
5371     case CPP_LSHIFT_EQ:
5372       op = LSHIFT_EXPR;
5373       break;
5374
5375     case CPP_AND_EQ:
5376       op = BIT_AND_EXPR;
5377       break;
5378
5379     case CPP_XOR_EQ:
5380       op = BIT_XOR_EXPR;
5381       break;
5382
5383     case CPP_OR_EQ:
5384       op = BIT_IOR_EXPR;
5385       break;
5386
5387     case CPP_MIN_EQ:
5388       op = MIN_EXPR;
5389       break;
5390
5391     case CPP_MAX_EQ:
5392       op = MAX_EXPR;
5393       break;
5394
5395     default:
5396       /* Nothing else is an assignment operator.  */
5397       op = ERROR_MARK;
5398     }
5399
5400   /* If it was an assignment operator, consume it.  */
5401   if (op != ERROR_MARK)
5402     cp_lexer_consume_token (parser->lexer);
5403
5404   return op;
5405 }
5406
5407 /* Parse an expression.
5408
5409    expression:
5410      assignment-expression
5411      expression , assignment-expression
5412
5413    Returns a representation of the expression.  */
5414
5415 static tree
5416 cp_parser_expression (cp_parser* parser)
5417 {
5418   tree expression = NULL_TREE;
5419
5420   while (true)
5421     {
5422       tree assignment_expression;
5423
5424       /* Parse the next assignment-expression.  */
5425       assignment_expression
5426         = cp_parser_assignment_expression (parser);
5427       /* If this is the first assignment-expression, we can just
5428          save it away.  */
5429       if (!expression)
5430         expression = assignment_expression;
5431       else
5432         expression = build_x_compound_expr (expression,
5433                                             assignment_expression);
5434       /* If the next token is not a comma, then we are done with the
5435          expression.  */
5436       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5437         break;
5438       /* Consume the `,'.  */
5439       cp_lexer_consume_token (parser->lexer);
5440       /* A comma operator cannot appear in a constant-expression.  */
5441       if (cp_parser_non_integral_constant_expression (parser,
5442                                                       "a comma operator"))
5443         expression = error_mark_node;
5444     }
5445
5446   return expression;
5447 }
5448
5449 /* Parse a constant-expression.
5450
5451    constant-expression:
5452      conditional-expression
5453
5454   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
5455   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
5456   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
5457   is false, NON_CONSTANT_P should be NULL.  */
5458
5459 static tree
5460 cp_parser_constant_expression (cp_parser* parser,
5461                                bool allow_non_constant_p,
5462                                bool *non_constant_p)
5463 {
5464   bool saved_integral_constant_expression_p;
5465   bool saved_allow_non_integral_constant_expression_p;
5466   bool saved_non_integral_constant_expression_p;
5467   tree expression;
5468
5469   /* It might seem that we could simply parse the
5470      conditional-expression, and then check to see if it were
5471      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
5472      one that the compiler can figure out is constant, possibly after
5473      doing some simplifications or optimizations.  The standard has a
5474      precise definition of constant-expression, and we must honor
5475      that, even though it is somewhat more restrictive.
5476
5477      For example:
5478
5479        int i[(2, 3)];
5480
5481      is not a legal declaration, because `(2, 3)' is not a
5482      constant-expression.  The `,' operator is forbidden in a
5483      constant-expression.  However, GCC's constant-folding machinery
5484      will fold this operation to an INTEGER_CST for `3'.  */
5485
5486   /* Save the old settings.  */
5487   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
5488   saved_allow_non_integral_constant_expression_p
5489     = parser->allow_non_integral_constant_expression_p;
5490   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
5491   /* We are now parsing a constant-expression.  */
5492   parser->integral_constant_expression_p = true;
5493   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
5494   parser->non_integral_constant_expression_p = false;
5495   /* Although the grammar says "conditional-expression", we parse an
5496      "assignment-expression", which also permits "throw-expression"
5497      and the use of assignment operators.  In the case that
5498      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
5499      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
5500      actually essential that we look for an assignment-expression.
5501      For example, cp_parser_initializer_clauses uses this function to
5502      determine whether a particular assignment-expression is in fact
5503      constant.  */
5504   expression = cp_parser_assignment_expression (parser);
5505   /* Restore the old settings.  */
5506   parser->integral_constant_expression_p = saved_integral_constant_expression_p;
5507   parser->allow_non_integral_constant_expression_p
5508     = saved_allow_non_integral_constant_expression_p;
5509   if (allow_non_constant_p)
5510     *non_constant_p = parser->non_integral_constant_expression_p;
5511   parser->non_integral_constant_expression_p = saved_non_integral_constant_expression_p;
5512
5513   return expression;
5514 }
5515
5516 /* Parse __builtin_offsetof.
5517
5518    offsetof-expression:
5519      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
5520
5521    offsetof-member-designator:
5522      id-expression
5523      | offsetof-member-designator "." id-expression
5524      | offsetof-member-designator "[" expression "]"
5525 */
5526
5527 static tree
5528 cp_parser_builtin_offsetof (cp_parser *parser)
5529 {
5530   int save_ice_p, save_non_ice_p;
5531   tree type, expr;
5532   cp_id_kind dummy;
5533
5534   /* We're about to accept non-integral-constant things, but will
5535      definitely yield an integral constant expression.  Save and
5536      restore these values around our local parsing.  */
5537   save_ice_p = parser->integral_constant_expression_p;
5538   save_non_ice_p = parser->non_integral_constant_expression_p;
5539
5540   /* Consume the "__builtin_offsetof" token.  */
5541   cp_lexer_consume_token (parser->lexer);
5542   /* Consume the opening `('.  */
5543   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
5544   /* Parse the type-id.  */
5545   type = cp_parser_type_id (parser);
5546   /* Look for the `,'.  */
5547   cp_parser_require (parser, CPP_COMMA, "`,'");
5548
5549   /* Build the (type *)null that begins the traditional offsetof macro.  */
5550   expr = build_static_cast (build_pointer_type (type), null_pointer_node);
5551
5552   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
5553   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
5554                                                  true, &dummy);
5555   while (true)
5556     {
5557       cp_token *token = cp_lexer_peek_token (parser->lexer);
5558       switch (token->type)
5559         {
5560         case CPP_OPEN_SQUARE:
5561           /* offsetof-member-designator "[" expression "]" */
5562           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
5563           break;
5564
5565         case CPP_DOT:
5566           /* offsetof-member-designator "." identifier */
5567           cp_lexer_consume_token (parser->lexer);
5568           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
5569                                                          true, &dummy);
5570           break;
5571
5572         case CPP_CLOSE_PAREN:
5573           /* Consume the ")" token.  */
5574           cp_lexer_consume_token (parser->lexer);
5575           goto success;
5576
5577         default:
5578           /* Error.  We know the following require will fail, but
5579              that gives the proper error message.  */
5580           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5581           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
5582           expr = error_mark_node;
5583           goto failure;
5584         }
5585     }
5586
5587  success:
5588   /* We've finished the parsing, now finish with the semantics.  At present
5589      we're just mirroring the traditional macro implementation.  Better
5590      would be to do the lowering of the ADDR_EXPR to flat pointer arithmetic
5591      here rather than in build_x_unary_op.  */
5592   expr = build_reinterpret_cast (build_reference_type (char_type_node), expr);
5593   expr = build_x_unary_op (ADDR_EXPR, expr);
5594   expr = build_reinterpret_cast (size_type_node, expr);
5595
5596  failure:
5597   parser->integral_constant_expression_p = save_ice_p;
5598   parser->non_integral_constant_expression_p = save_non_ice_p;
5599
5600   return expr;
5601 }
5602
5603 /* Statements [gram.stmt.stmt]  */
5604
5605 /* Parse a statement.
5606
5607    statement:
5608      labeled-statement
5609      expression-statement
5610      compound-statement
5611      selection-statement
5612      iteration-statement
5613      jump-statement
5614      declaration-statement
5615      try-block  */
5616
5617 static void
5618 cp_parser_statement (cp_parser* parser, tree in_statement_expr)
5619 {
5620   tree statement;
5621   cp_token *token;
5622   location_t statement_locus;
5623
5624   /* There is no statement yet.  */
5625   statement = NULL_TREE;
5626   /* Peek at the next token.  */
5627   token = cp_lexer_peek_token (parser->lexer);
5628   /* Remember the location of the first token in the statement.  */
5629   statement_locus = token->location;
5630   /* If this is a keyword, then that will often determine what kind of
5631      statement we have.  */
5632   if (token->type == CPP_KEYWORD)
5633     {
5634       enum rid keyword = token->keyword;
5635
5636       switch (keyword)
5637         {
5638         case RID_CASE:
5639         case RID_DEFAULT:
5640           statement = cp_parser_labeled_statement (parser,
5641                                                    in_statement_expr);
5642           break;
5643
5644         case RID_IF:
5645         case RID_SWITCH:
5646           statement = cp_parser_selection_statement (parser);
5647           break;
5648
5649         case RID_WHILE:
5650         case RID_DO:
5651         case RID_FOR:
5652           statement = cp_parser_iteration_statement (parser);
5653           break;
5654
5655         case RID_BREAK:
5656         case RID_CONTINUE:
5657         case RID_RETURN:
5658         case RID_GOTO:
5659           statement = cp_parser_jump_statement (parser);
5660           break;
5661
5662         case RID_TRY:
5663           statement = cp_parser_try_block (parser);
5664           break;
5665
5666         default:
5667           /* It might be a keyword like `int' that can start a
5668              declaration-statement.  */
5669           break;
5670         }
5671     }
5672   else if (token->type == CPP_NAME)
5673     {
5674       /* If the next token is a `:', then we are looking at a
5675          labeled-statement.  */
5676       token = cp_lexer_peek_nth_token (parser->lexer, 2);
5677       if (token->type == CPP_COLON)
5678         statement = cp_parser_labeled_statement (parser, in_statement_expr);
5679     }
5680   /* Anything that starts with a `{' must be a compound-statement.  */
5681   else if (token->type == CPP_OPEN_BRACE)
5682     statement = cp_parser_compound_statement (parser, NULL, false);
5683
5684   /* Everything else must be a declaration-statement or an
5685      expression-statement.  Try for the declaration-statement
5686      first, unless we are looking at a `;', in which case we know that
5687      we have an expression-statement.  */
5688   if (!statement)
5689     {
5690       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
5691         {
5692           cp_parser_parse_tentatively (parser);
5693           /* Try to parse the declaration-statement.  */
5694           cp_parser_declaration_statement (parser);
5695           /* If that worked, we're done.  */
5696           if (cp_parser_parse_definitely (parser))
5697             return;
5698         }
5699       /* Look for an expression-statement instead.  */
5700       statement = cp_parser_expression_statement (parser, in_statement_expr);
5701     }
5702
5703   /* Set the line number for the statement.  */
5704   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
5705     {
5706       SET_EXPR_LOCUS (statement, NULL);
5707       annotate_with_locus (statement, statement_locus);
5708     }
5709 }
5710
5711 /* Parse a labeled-statement.
5712
5713    labeled-statement:
5714      identifier : statement
5715      case constant-expression : statement
5716      default : statement
5717
5718    GNU Extension:
5719
5720    labeled-statement:
5721      case constant-expression ... constant-expression : statement
5722
5723    Returns the new CASE_LABEL_EXPR, for a `case' or `default' label.
5724    For an ordinary label, returns a LABEL_EXPR.  */
5725
5726 static tree
5727 cp_parser_labeled_statement (cp_parser* parser, tree in_statement_expr)
5728 {
5729   cp_token *token;
5730   tree statement = error_mark_node;
5731
5732   /* The next token should be an identifier.  */
5733   token = cp_lexer_peek_token (parser->lexer);
5734   if (token->type != CPP_NAME
5735       && token->type != CPP_KEYWORD)
5736     {
5737       cp_parser_error (parser, "expected labeled-statement");
5738       return error_mark_node;
5739     }
5740
5741   switch (token->keyword)
5742     {
5743     case RID_CASE:
5744       {
5745         tree expr, expr_hi;
5746         cp_token *ellipsis;
5747
5748         /* Consume the `case' token.  */
5749         cp_lexer_consume_token (parser->lexer);
5750         /* Parse the constant-expression.  */
5751         expr = cp_parser_constant_expression (parser,
5752                                               /*allow_non_constant_p=*/false,
5753                                               NULL);
5754
5755         ellipsis = cp_lexer_peek_token (parser->lexer);
5756         if (ellipsis->type == CPP_ELLIPSIS)
5757           {
5758             /* Consume the `...' token.  */
5759             cp_lexer_consume_token (parser->lexer);
5760             expr_hi =
5761               cp_parser_constant_expression (parser,
5762                                              /*allow_non_constant_p=*/false,
5763                                              NULL);
5764             /* We don't need to emit warnings here, as the common code
5765                will do this for us.  */
5766           }
5767         else
5768           expr_hi = NULL_TREE;
5769
5770         if (!parser->in_switch_statement_p)
5771           error ("case label `%E' not within a switch statement", expr);
5772         else
5773           statement = finish_case_label (expr, expr_hi);
5774       }
5775       break;
5776
5777     case RID_DEFAULT:
5778       /* Consume the `default' token.  */
5779       cp_lexer_consume_token (parser->lexer);
5780       if (!parser->in_switch_statement_p)
5781         error ("case label not within a switch statement");
5782       else
5783         statement = finish_case_label (NULL_TREE, NULL_TREE);
5784       break;
5785
5786     default:
5787       /* Anything else must be an ordinary label.  */
5788       statement = finish_label_stmt (cp_parser_identifier (parser));
5789       break;
5790     }
5791
5792   /* Require the `:' token.  */
5793   cp_parser_require (parser, CPP_COLON, "`:'");
5794   /* Parse the labeled statement.  */
5795   cp_parser_statement (parser, in_statement_expr);
5796
5797   /* Return the label, in the case of a `case' or `default' label.  */
5798   return statement;
5799 }
5800
5801 /* Parse an expression-statement.
5802
5803    expression-statement:
5804      expression [opt] ;
5805
5806    Returns the new EXPR_STMT -- or NULL_TREE if the expression
5807    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
5808    indicates whether this expression-statement is part of an
5809    expression statement.  */
5810
5811 static tree
5812 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
5813 {
5814   tree statement = NULL_TREE;
5815
5816   /* If the next token is a ';', then there is no expression
5817      statement.  */
5818   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
5819     statement = cp_parser_expression (parser);
5820
5821   /* Consume the final `;'.  */
5822   cp_parser_consume_semicolon_at_end_of_statement (parser);
5823
5824   if (in_statement_expr
5825       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
5826     {
5827       /* This is the final expression statement of a statement
5828          expression.  */
5829       statement = finish_stmt_expr_expr (statement, in_statement_expr);
5830     }
5831   else if (statement)
5832     statement = finish_expr_stmt (statement);
5833   else
5834     finish_stmt ();
5835
5836   return statement;
5837 }
5838
5839 /* Parse a compound-statement.
5840
5841    compound-statement:
5842      { statement-seq [opt] }
5843
5844    Returns a COMPOUND_STMT representing the statement.  */
5845
5846 static tree
5847 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
5848                               bool in_try)
5849 {
5850   tree compound_stmt;
5851
5852   /* Consume the `{'.  */
5853   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
5854     return error_mark_node;
5855   /* Begin the compound-statement.  */
5856   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
5857   /* Parse an (optional) statement-seq.  */
5858   cp_parser_statement_seq_opt (parser, in_statement_expr);
5859   /* Finish the compound-statement.  */
5860   finish_compound_stmt (compound_stmt);
5861   /* Consume the `}'.  */
5862   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
5863
5864   return compound_stmt;
5865 }
5866
5867 /* Parse an (optional) statement-seq.
5868
5869    statement-seq:
5870      statement
5871      statement-seq [opt] statement  */
5872
5873 static void
5874 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
5875 {
5876   /* Scan statements until there aren't any more.  */
5877   while (true)
5878     {
5879       /* If we're looking at a `}', then we've run out of statements.  */
5880       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE)
5881           || cp_lexer_next_token_is (parser->lexer, CPP_EOF))
5882         break;
5883
5884       /* Parse the statement.  */
5885       cp_parser_statement (parser, in_statement_expr);
5886     }
5887 }
5888
5889 /* Parse a selection-statement.
5890
5891    selection-statement:
5892      if ( condition ) statement
5893      if ( condition ) statement else statement
5894      switch ( condition ) statement
5895
5896    Returns the new IF_STMT or SWITCH_STMT.  */
5897
5898 static tree
5899 cp_parser_selection_statement (cp_parser* parser)
5900 {
5901   cp_token *token;
5902   enum rid keyword;
5903
5904   /* Peek at the next token.  */
5905   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
5906
5907   /* See what kind of keyword it is.  */
5908   keyword = token->keyword;
5909   switch (keyword)
5910     {
5911     case RID_IF:
5912     case RID_SWITCH:
5913       {
5914         tree statement;
5915         tree condition;
5916
5917         /* Look for the `('.  */
5918         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
5919           {
5920             cp_parser_skip_to_end_of_statement (parser);
5921             return error_mark_node;
5922           }
5923
5924         /* Begin the selection-statement.  */
5925         if (keyword == RID_IF)
5926           statement = begin_if_stmt ();
5927         else
5928           statement = begin_switch_stmt ();
5929
5930         /* Parse the condition.  */
5931         condition = cp_parser_condition (parser);
5932         /* Look for the `)'.  */
5933         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
5934           cp_parser_skip_to_closing_parenthesis (parser, true, false,
5935                                                  /*consume_paren=*/true);
5936
5937         if (keyword == RID_IF)
5938           {
5939             /* Add the condition.  */
5940             finish_if_stmt_cond (condition, statement);
5941
5942             /* Parse the then-clause.  */
5943             cp_parser_implicitly_scoped_statement (parser);
5944             finish_then_clause (statement);
5945
5946             /* If the next token is `else', parse the else-clause.  */
5947             if (cp_lexer_next_token_is_keyword (parser->lexer,
5948                                                 RID_ELSE))
5949               {
5950                 /* Consume the `else' keyword.  */
5951                 cp_lexer_consume_token (parser->lexer);
5952                 begin_else_clause (statement);
5953                 /* Parse the else-clause.  */
5954                 cp_parser_implicitly_scoped_statement (parser);
5955                 finish_else_clause (statement);
5956               }
5957
5958             /* Now we're all done with the if-statement.  */
5959             finish_if_stmt (statement);
5960           }
5961         else
5962           {
5963             bool in_switch_statement_p;
5964
5965             /* Add the condition.  */
5966             finish_switch_cond (condition, statement);
5967
5968             /* Parse the body of the switch-statement.  */
5969             in_switch_statement_p = parser->in_switch_statement_p;
5970             parser->in_switch_statement_p = true;
5971             cp_parser_implicitly_scoped_statement (parser);
5972             parser->in_switch_statement_p = in_switch_statement_p;
5973
5974             /* Now we're all done with the switch-statement.  */
5975             finish_switch_stmt (statement);
5976           }
5977
5978         return statement;
5979       }
5980       break;
5981
5982     default:
5983       cp_parser_error (parser, "expected selection-statement");
5984       return error_mark_node;
5985     }
5986 }
5987
5988 /* Parse a condition.
5989
5990    condition:
5991      expression
5992      type-specifier-seq declarator = assignment-expression
5993
5994    GNU Extension:
5995
5996    condition:
5997      type-specifier-seq declarator asm-specification [opt]
5998        attributes [opt] = assignment-expression
5999
6000    Returns the expression that should be tested.  */
6001
6002 static tree
6003 cp_parser_condition (cp_parser* parser)
6004 {
6005   tree type_specifiers;
6006   const char *saved_message;
6007
6008   /* Try the declaration first.  */
6009   cp_parser_parse_tentatively (parser);
6010   /* New types are not allowed in the type-specifier-seq for a
6011      condition.  */
6012   saved_message = parser->type_definition_forbidden_message;
6013   parser->type_definition_forbidden_message
6014     = "types may not be defined in conditions";
6015   /* Parse the type-specifier-seq.  */
6016   type_specifiers = cp_parser_type_specifier_seq (parser);
6017   /* Restore the saved message.  */
6018   parser->type_definition_forbidden_message = saved_message;
6019   /* If all is well, we might be looking at a declaration.  */
6020   if (!cp_parser_error_occurred (parser))
6021     {
6022       tree decl;
6023       tree asm_specification;
6024       tree attributes;
6025       tree declarator;
6026       tree initializer = NULL_TREE;
6027
6028       /* Parse the declarator.  */
6029       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6030                                          /*ctor_dtor_or_conv_p=*/NULL,
6031                                          /*parenthesized_p=*/NULL);
6032       /* Parse the attributes.  */
6033       attributes = cp_parser_attributes_opt (parser);
6034       /* Parse the asm-specification.  */
6035       asm_specification = cp_parser_asm_specification_opt (parser);
6036       /* If the next token is not an `=', then we might still be
6037          looking at an expression.  For example:
6038
6039            if (A(a).x)
6040
6041          looks like a decl-specifier-seq and a declarator -- but then
6042          there is no `=', so this is an expression.  */
6043       cp_parser_require (parser, CPP_EQ, "`='");
6044       /* If we did see an `=', then we are looking at a declaration
6045          for sure.  */
6046       if (cp_parser_parse_definitely (parser))
6047         {
6048           /* Create the declaration.  */
6049           decl = start_decl (declarator, type_specifiers,
6050                              /*initialized_p=*/true,
6051                              attributes, /*prefix_attributes=*/NULL_TREE);
6052           /* Parse the assignment-expression.  */
6053           initializer = cp_parser_assignment_expression (parser);
6054
6055           /* Process the initializer.  */
6056           cp_finish_decl (decl,
6057                           initializer,
6058                           asm_specification,
6059                           LOOKUP_ONLYCONVERTING);
6060
6061           return convert_from_reference (decl);
6062         }
6063     }
6064   /* If we didn't even get past the declarator successfully, we are
6065      definitely not looking at a declaration.  */
6066   else
6067     cp_parser_abort_tentative_parse (parser);
6068
6069   /* Otherwise, we are looking at an expression.  */
6070   return cp_parser_expression (parser);
6071 }
6072
6073 /* Parse an iteration-statement.
6074
6075    iteration-statement:
6076      while ( condition ) statement
6077      do statement while ( expression ) ;
6078      for ( for-init-statement condition [opt] ; expression [opt] )
6079        statement
6080
6081    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6082
6083 static tree
6084 cp_parser_iteration_statement (cp_parser* parser)
6085 {
6086   cp_token *token;
6087   enum rid keyword;
6088   tree statement;
6089   bool in_iteration_statement_p;
6090
6091
6092   /* Peek at the next token.  */
6093   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6094   if (!token)
6095     return error_mark_node;
6096
6097   /* Remember whether or not we are already within an iteration
6098      statement.  */
6099   in_iteration_statement_p = parser->in_iteration_statement_p;
6100
6101   /* See what kind of keyword it is.  */
6102   keyword = token->keyword;
6103   switch (keyword)
6104     {
6105     case RID_WHILE:
6106       {
6107         tree condition;
6108
6109         /* Begin the while-statement.  */
6110         statement = begin_while_stmt ();
6111         /* Look for the `('.  */
6112         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6113         /* Parse the condition.  */
6114         condition = cp_parser_condition (parser);
6115         finish_while_stmt_cond (condition, statement);
6116         /* Look for the `)'.  */
6117         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6118         /* Parse the dependent statement.  */
6119         parser->in_iteration_statement_p = true;
6120         cp_parser_already_scoped_statement (parser);
6121         parser->in_iteration_statement_p = in_iteration_statement_p;
6122         /* We're done with the while-statement.  */
6123         finish_while_stmt (statement);
6124       }
6125       break;
6126
6127     case RID_DO:
6128       {
6129         tree expression;
6130
6131         /* Begin the do-statement.  */
6132         statement = begin_do_stmt ();
6133         /* Parse the body of the do-statement.  */
6134         parser->in_iteration_statement_p = true;
6135         cp_parser_implicitly_scoped_statement (parser);
6136         parser->in_iteration_statement_p = in_iteration_statement_p;
6137         finish_do_body (statement);
6138         /* Look for the `while' keyword.  */
6139         cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6140         /* Look for the `('.  */
6141         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6142         /* Parse the expression.  */
6143         expression = cp_parser_expression (parser);
6144         /* We're done with the do-statement.  */
6145         finish_do_stmt (expression, statement);
6146         /* Look for the `)'.  */
6147         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6148         /* Look for the `;'.  */
6149         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6150       }
6151       break;
6152
6153     case RID_FOR:
6154       {
6155         tree condition = NULL_TREE;
6156         tree expression = NULL_TREE;
6157
6158         /* Begin the for-statement.  */
6159         statement = begin_for_stmt ();
6160         /* Look for the `('.  */
6161         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6162         /* Parse the initialization.  */
6163         cp_parser_for_init_statement (parser);
6164         finish_for_init_stmt (statement);
6165
6166         /* If there's a condition, process it.  */
6167         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6168           condition = cp_parser_condition (parser);
6169         finish_for_cond (condition, statement);
6170         /* Look for the `;'.  */
6171         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6172
6173         /* If there's an expression, process it.  */
6174         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6175           expression = cp_parser_expression (parser);
6176         finish_for_expr (expression, statement);
6177         /* Look for the `)'.  */
6178         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6179         
6180         /* Parse the body of the for-statement.  */
6181         parser->in_iteration_statement_p = true;
6182         cp_parser_already_scoped_statement (parser);
6183         parser->in_iteration_statement_p = in_iteration_statement_p;
6184
6185         /* We're done with the for-statement.  */
6186         finish_for_stmt (statement);
6187       }
6188       break;
6189
6190     default:
6191       cp_parser_error (parser, "expected iteration-statement");
6192       statement = error_mark_node;
6193       break;
6194     }
6195
6196   return statement;
6197 }
6198
6199 /* Parse a for-init-statement.
6200
6201    for-init-statement:
6202      expression-statement
6203      simple-declaration  */
6204
6205 static void
6206 cp_parser_for_init_statement (cp_parser* parser)
6207 {
6208   /* If the next token is a `;', then we have an empty
6209      expression-statement.  Grammatically, this is also a
6210      simple-declaration, but an invalid one, because it does not
6211      declare anything.  Therefore, if we did not handle this case
6212      specially, we would issue an error message about an invalid
6213      declaration.  */
6214   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6215     {
6216       /* We're going to speculatively look for a declaration, falling back
6217          to an expression, if necessary.  */
6218       cp_parser_parse_tentatively (parser);
6219       /* Parse the declaration.  */
6220       cp_parser_simple_declaration (parser,
6221                                     /*function_definition_allowed_p=*/false);
6222       /* If the tentative parse failed, then we shall need to look for an
6223          expression-statement.  */
6224       if (cp_parser_parse_definitely (parser))
6225         return;
6226     }
6227
6228   cp_parser_expression_statement (parser, false);
6229 }
6230
6231 /* Parse a jump-statement.
6232
6233    jump-statement:
6234      break ;
6235      continue ;
6236      return expression [opt] ;
6237      goto identifier ;
6238
6239    GNU extension:
6240
6241    jump-statement:
6242      goto * expression ;
6243
6244    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_STMT, or GOTO_EXPR.  */
6245
6246 static tree
6247 cp_parser_jump_statement (cp_parser* parser)
6248 {
6249   tree statement = error_mark_node;
6250   cp_token *token;
6251   enum rid keyword;
6252
6253   /* Peek at the next token.  */
6254   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6255   if (!token)
6256     return error_mark_node;
6257
6258   /* See what kind of keyword it is.  */
6259   keyword = token->keyword;
6260   switch (keyword)
6261     {
6262     case RID_BREAK:
6263       if (!parser->in_switch_statement_p
6264           && !parser->in_iteration_statement_p)
6265         {
6266           error ("break statement not within loop or switch");
6267           statement = error_mark_node;
6268         }
6269       else
6270         statement = finish_break_stmt ();
6271       cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6272       break;
6273
6274     case RID_CONTINUE:
6275       if (!parser->in_iteration_statement_p)
6276         {
6277           error ("continue statement not within a loop");
6278           statement = error_mark_node;
6279         }
6280       else
6281         statement = finish_continue_stmt ();
6282       cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6283       break;
6284
6285     case RID_RETURN:
6286       {
6287         tree expr;
6288
6289         /* If the next token is a `;', then there is no
6290            expression.  */
6291         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6292           expr = cp_parser_expression (parser);
6293         else
6294           expr = NULL_TREE;
6295         /* Build the return-statement.  */
6296         statement = finish_return_stmt (expr);
6297         /* Look for the final `;'.  */
6298         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6299       }
6300       break;
6301
6302     case RID_GOTO:
6303       /* Create the goto-statement.  */
6304       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
6305         {
6306           /* Issue a warning about this use of a GNU extension.  */
6307           if (pedantic)
6308             pedwarn ("ISO C++ forbids computed gotos");
6309           /* Consume the '*' token.  */
6310           cp_lexer_consume_token (parser->lexer);
6311           /* Parse the dependent expression.  */
6312           finish_goto_stmt (cp_parser_expression (parser));
6313         }
6314       else
6315         finish_goto_stmt (cp_parser_identifier (parser));
6316       /* Look for the final `;'.  */
6317       cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6318       break;
6319
6320     default:
6321       cp_parser_error (parser, "expected jump-statement");
6322       break;
6323     }
6324
6325   return statement;
6326 }
6327
6328 /* Parse a declaration-statement.
6329
6330    declaration-statement:
6331      block-declaration  */
6332
6333 static void
6334 cp_parser_declaration_statement (cp_parser* parser)
6335 {
6336   /* Parse the block-declaration.  */
6337   cp_parser_block_declaration (parser, /*statement_p=*/true);
6338
6339   /* Finish off the statement.  */
6340   finish_stmt ();
6341 }
6342
6343 /* Some dependent statements (like `if (cond) statement'), are
6344    implicitly in their own scope.  In other words, if the statement is
6345    a single statement (as opposed to a compound-statement), it is
6346    none-the-less treated as if it were enclosed in braces.  Any
6347    declarations appearing in the dependent statement are out of scope
6348    after control passes that point.  This function parses a statement,
6349    but ensures that is in its own scope, even if it is not a
6350    compound-statement.
6351
6352    Returns the new statement.  */
6353
6354 static tree
6355 cp_parser_implicitly_scoped_statement (cp_parser* parser)
6356 {
6357   tree statement;
6358
6359   /* If the token is not a `{', then we must take special action.  */
6360   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6361     {
6362       /* Create a compound-statement.  */
6363       statement = begin_compound_stmt (0);
6364       /* Parse the dependent-statement.  */
6365       cp_parser_statement (parser, false);
6366       /* Finish the dummy compound-statement.  */
6367       finish_compound_stmt (statement);
6368     }
6369   /* Otherwise, we simply parse the statement directly.  */
6370   else
6371     statement = cp_parser_compound_statement (parser, NULL, false);
6372
6373   /* Return the statement.  */
6374   return statement;
6375 }
6376
6377 /* For some dependent statements (like `while (cond) statement'), we
6378    have already created a scope.  Therefore, even if the dependent
6379    statement is a compound-statement, we do not want to create another
6380    scope.  */
6381
6382 static void
6383 cp_parser_already_scoped_statement (cp_parser* parser)
6384 {
6385   /* If the token is a `{', then we must take special action.  */
6386   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6387     cp_parser_statement (parser, false);
6388   else
6389     {
6390       /* Avoid calling cp_parser_compound_statement, so that we
6391          don't create a new scope.  Do everything else by hand.  */
6392       cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
6393       cp_parser_statement_seq_opt (parser, false);
6394       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6395     }
6396 }
6397
6398 /* Declarations [gram.dcl.dcl] */
6399
6400 /* Parse an optional declaration-sequence.
6401
6402    declaration-seq:
6403      declaration
6404      declaration-seq declaration  */
6405
6406 static void
6407 cp_parser_declaration_seq_opt (cp_parser* parser)
6408 {
6409   while (true)
6410     {
6411       cp_token *token;
6412
6413       token = cp_lexer_peek_token (parser->lexer);
6414
6415       if (token->type == CPP_CLOSE_BRACE
6416           || token->type == CPP_EOF)
6417         break;
6418
6419       if (token->type == CPP_SEMICOLON)
6420         {
6421           /* A declaration consisting of a single semicolon is
6422              invalid.  Allow it unless we're being pedantic.  */
6423           if (pedantic && !in_system_header)
6424             pedwarn ("extra `;'");
6425           cp_lexer_consume_token (parser->lexer);
6426           continue;
6427         }
6428
6429       /* The C lexer modifies PENDING_LANG_CHANGE when it wants the
6430          parser to enter or exit implicit `extern "C"' blocks.  */
6431       while (pending_lang_change > 0)
6432         {
6433           push_lang_context (lang_name_c);
6434           --pending_lang_change;
6435         }
6436       while (pending_lang_change < 0)
6437         {
6438           pop_lang_context ();
6439           ++pending_lang_change;
6440         }
6441
6442       /* Parse the declaration itself.  */
6443       cp_parser_declaration (parser);
6444     }
6445 }
6446
6447 /* Parse a declaration.
6448
6449    declaration:
6450      block-declaration
6451      function-definition
6452      template-declaration
6453      explicit-instantiation
6454      explicit-specialization
6455      linkage-specification
6456      namespace-definition
6457
6458    GNU extension:
6459
6460    declaration:
6461       __extension__ declaration */
6462
6463 static void
6464 cp_parser_declaration (cp_parser* parser)
6465 {
6466   cp_token token1;
6467   cp_token token2;
6468   int saved_pedantic;
6469
6470   /* Set this here since we can be called after
6471      pushing the linkage specification.  */
6472   c_lex_string_translate = 1;
6473
6474   /* Check for the `__extension__' keyword.  */
6475   if (cp_parser_extension_opt (parser, &saved_pedantic))
6476     {
6477       /* Parse the qualified declaration.  */
6478       cp_parser_declaration (parser);
6479       /* Restore the PEDANTIC flag.  */
6480       pedantic = saved_pedantic;
6481
6482       return;
6483     }
6484
6485   /* Try to figure out what kind of declaration is present.  */
6486   token1 = *cp_lexer_peek_token (parser->lexer);
6487
6488   /* Don't translate the CPP_STRING in extern "C".  */
6489   if (token1.keyword == RID_EXTERN)
6490     c_lex_string_translate = 0;
6491
6492   if (token1.type != CPP_EOF)
6493     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
6494
6495   c_lex_string_translate = 1;
6496
6497   /* If the next token is `extern' and the following token is a string
6498      literal, then we have a linkage specification.  */
6499   if (token1.keyword == RID_EXTERN
6500       && cp_parser_is_string_literal (&token2))
6501     cp_parser_linkage_specification (parser);
6502   /* If the next token is `template', then we have either a template
6503      declaration, an explicit instantiation, or an explicit
6504      specialization.  */
6505   else if (token1.keyword == RID_TEMPLATE)
6506     {
6507       /* `template <>' indicates a template specialization.  */
6508       if (token2.type == CPP_LESS
6509           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
6510         cp_parser_explicit_specialization (parser);
6511       /* `template <' indicates a template declaration.  */
6512       else if (token2.type == CPP_LESS)
6513         cp_parser_template_declaration (parser, /*member_p=*/false);
6514       /* Anything else must be an explicit instantiation.  */
6515       else
6516         cp_parser_explicit_instantiation (parser);
6517     }
6518   /* If the next token is `export', then we have a template
6519      declaration.  */
6520   else if (token1.keyword == RID_EXPORT)
6521     cp_parser_template_declaration (parser, /*member_p=*/false);
6522   /* If the next token is `extern', 'static' or 'inline' and the one
6523      after that is `template', we have a GNU extended explicit
6524      instantiation directive.  */
6525   else if (cp_parser_allow_gnu_extensions_p (parser)
6526            && (token1.keyword == RID_EXTERN
6527                || token1.keyword == RID_STATIC
6528                || token1.keyword == RID_INLINE)
6529            && token2.keyword == RID_TEMPLATE)
6530     cp_parser_explicit_instantiation (parser);
6531   /* If the next token is `namespace', check for a named or unnamed
6532      namespace definition.  */
6533   else if (token1.keyword == RID_NAMESPACE
6534            && (/* A named namespace definition.  */
6535                (token2.type == CPP_NAME
6536                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
6537                     == CPP_OPEN_BRACE))
6538                /* An unnamed namespace definition.  */
6539                || token2.type == CPP_OPEN_BRACE))
6540     cp_parser_namespace_definition (parser);
6541   /* We must have either a block declaration or a function
6542      definition.  */
6543   else
6544     /* Try to parse a block-declaration, or a function-definition.  */
6545     cp_parser_block_declaration (parser, /*statement_p=*/false);
6546 }
6547
6548 /* Parse a block-declaration.
6549
6550    block-declaration:
6551      simple-declaration
6552      asm-definition
6553      namespace-alias-definition
6554      using-declaration
6555      using-directive
6556
6557    GNU Extension:
6558
6559    block-declaration:
6560      __extension__ block-declaration
6561      label-declaration
6562
6563    If STATEMENT_P is TRUE, then this block-declaration is occurring as
6564    part of a declaration-statement.  */
6565
6566 static void
6567 cp_parser_block_declaration (cp_parser *parser,
6568                              bool      statement_p)
6569 {
6570   cp_token *token1;
6571   int saved_pedantic;
6572
6573   /* Check for the `__extension__' keyword.  */
6574   if (cp_parser_extension_opt (parser, &saved_pedantic))
6575     {
6576       /* Parse the qualified declaration.  */
6577       cp_parser_block_declaration (parser, statement_p);
6578       /* Restore the PEDANTIC flag.  */
6579       pedantic = saved_pedantic;
6580
6581       return;
6582     }
6583
6584   /* Peek at the next token to figure out which kind of declaration is
6585      present.  */
6586   token1 = cp_lexer_peek_token (parser->lexer);
6587
6588   /* If the next keyword is `asm', we have an asm-definition.  */
6589   if (token1->keyword == RID_ASM)
6590     {
6591       if (statement_p)
6592         cp_parser_commit_to_tentative_parse (parser);
6593       cp_parser_asm_definition (parser);
6594     }
6595   /* If the next keyword is `namespace', we have a
6596      namespace-alias-definition.  */
6597   else if (token1->keyword == RID_NAMESPACE)
6598     cp_parser_namespace_alias_definition (parser);
6599   /* If the next keyword is `using', we have either a
6600      using-declaration or a using-directive.  */
6601   else if (token1->keyword == RID_USING)
6602     {
6603       cp_token *token2;
6604
6605       if (statement_p)
6606         cp_parser_commit_to_tentative_parse (parser);
6607       /* If the token after `using' is `namespace', then we have a
6608          using-directive.  */
6609       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
6610       if (token2->keyword == RID_NAMESPACE)
6611         cp_parser_using_directive (parser);
6612       /* Otherwise, it's a using-declaration.  */
6613       else
6614         cp_parser_using_declaration (parser);
6615     }
6616   /* If the next keyword is `__label__' we have a label declaration.  */
6617   else if (token1->keyword == RID_LABEL)
6618     {
6619       if (statement_p)
6620         cp_parser_commit_to_tentative_parse (parser);
6621       cp_parser_label_declaration (parser);
6622     }
6623   /* Anything else must be a simple-declaration.  */
6624   else
6625     cp_parser_simple_declaration (parser, !statement_p);
6626 }
6627
6628 /* Parse a simple-declaration.
6629
6630    simple-declaration:
6631      decl-specifier-seq [opt] init-declarator-list [opt] ;
6632
6633    init-declarator-list:
6634      init-declarator
6635      init-declarator-list , init-declarator
6636
6637    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
6638    function-definition as a simple-declaration.  */
6639
6640 static void
6641 cp_parser_simple_declaration (cp_parser* parser,
6642                               bool function_definition_allowed_p)
6643 {
6644   tree decl_specifiers;
6645   tree attributes;
6646   int declares_class_or_enum;
6647   bool saw_declarator;
6648
6649   /* Defer access checks until we know what is being declared; the
6650      checks for names appearing in the decl-specifier-seq should be
6651      done as if we were in the scope of the thing being declared.  */
6652   push_deferring_access_checks (dk_deferred);
6653
6654   /* Parse the decl-specifier-seq.  We have to keep track of whether
6655      or not the decl-specifier-seq declares a named class or
6656      enumeration type, since that is the only case in which the
6657      init-declarator-list is allowed to be empty.
6658
6659      [dcl.dcl]
6660
6661      In a simple-declaration, the optional init-declarator-list can be
6662      omitted only when declaring a class or enumeration, that is when
6663      the decl-specifier-seq contains either a class-specifier, an
6664      elaborated-type-specifier, or an enum-specifier.  */
6665   decl_specifiers
6666     = cp_parser_decl_specifier_seq (parser,
6667                                     CP_PARSER_FLAGS_OPTIONAL,
6668                                     &attributes,
6669                                     &declares_class_or_enum);
6670   /* We no longer need to defer access checks.  */
6671   stop_deferring_access_checks ();
6672
6673   /* In a block scope, a valid declaration must always have a
6674      decl-specifier-seq.  By not trying to parse declarators, we can
6675      resolve the declaration/expression ambiguity more quickly.  */
6676   if (!function_definition_allowed_p && !decl_specifiers)
6677     {
6678       cp_parser_error (parser, "expected declaration");
6679       goto done;
6680     }
6681
6682   /* If the next two tokens are both identifiers, the code is
6683      erroneous. The usual cause of this situation is code like:
6684
6685        T t;
6686
6687      where "T" should name a type -- but does not.  */
6688   if (cp_parser_parse_and_diagnose_invalid_type_name (parser))
6689     {
6690       /* If parsing tentatively, we should commit; we really are
6691          looking at a declaration.  */
6692       cp_parser_commit_to_tentative_parse (parser);
6693       /* Give up.  */
6694       goto done;
6695     }
6696
6697   /* Keep going until we hit the `;' at the end of the simple
6698      declaration.  */
6699   saw_declarator = false;
6700   while (cp_lexer_next_token_is_not (parser->lexer,
6701                                      CPP_SEMICOLON))
6702     {
6703       cp_token *token;
6704       bool function_definition_p;
6705       tree decl;
6706
6707       saw_declarator = true;
6708       /* Parse the init-declarator.  */
6709       decl = cp_parser_init_declarator (parser, decl_specifiers, attributes,
6710                                         function_definition_allowed_p,
6711                                         /*member_p=*/false,
6712                                         declares_class_or_enum,
6713                                         &function_definition_p);
6714       /* If an error occurred while parsing tentatively, exit quickly.
6715          (That usually happens when in the body of a function; each
6716          statement is treated as a declaration-statement until proven
6717          otherwise.)  */
6718       if (cp_parser_error_occurred (parser))
6719         goto done;
6720       /* Handle function definitions specially.  */
6721       if (function_definition_p)
6722         {
6723           /* If the next token is a `,', then we are probably
6724              processing something like:
6725
6726                void f() {}, *p;
6727
6728              which is erroneous.  */
6729           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
6730             error ("mixing declarations and function-definitions is forbidden");
6731           /* Otherwise, we're done with the list of declarators.  */
6732           else
6733             {
6734               pop_deferring_access_checks ();
6735               return;
6736             }
6737         }
6738       /* The next token should be either a `,' or a `;'.  */
6739       token = cp_lexer_peek_token (parser->lexer);
6740       /* If it's a `,', there are more declarators to come.  */
6741       if (token->type == CPP_COMMA)
6742         cp_lexer_consume_token (parser->lexer);
6743       /* If it's a `;', we are done.  */
6744       else if (token->type == CPP_SEMICOLON)
6745         break;
6746       /* Anything else is an error.  */
6747       else
6748         {
6749           cp_parser_error (parser, "expected `,' or `;'");
6750           /* Skip tokens until we reach the end of the statement.  */
6751           cp_parser_skip_to_end_of_statement (parser);
6752           /* If the next token is now a `;', consume it.  */
6753           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
6754             cp_lexer_consume_token (parser->lexer);
6755           goto done;
6756         }
6757       /* After the first time around, a function-definition is not
6758          allowed -- even if it was OK at first.  For example:
6759
6760            int i, f() {}
6761
6762          is not valid.  */
6763       function_definition_allowed_p = false;
6764     }
6765
6766   /* Issue an error message if no declarators are present, and the
6767      decl-specifier-seq does not itself declare a class or
6768      enumeration.  */
6769   if (!saw_declarator)
6770     {
6771       if (cp_parser_declares_only_class_p (parser))
6772         shadow_tag (decl_specifiers);
6773       /* Perform any deferred access checks.  */
6774       perform_deferred_access_checks ();
6775     }
6776
6777   /* Consume the `;'.  */
6778   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6779
6780  done:
6781   pop_deferring_access_checks ();
6782 }
6783
6784 /* Parse a decl-specifier-seq.
6785
6786    decl-specifier-seq:
6787      decl-specifier-seq [opt] decl-specifier
6788
6789    decl-specifier:
6790      storage-class-specifier
6791      type-specifier
6792      function-specifier
6793      friend
6794      typedef
6795
6796    GNU Extension:
6797
6798    decl-specifier:
6799      attributes
6800
6801    Returns a TREE_LIST, giving the decl-specifiers in the order they
6802    appear in the source code.  The TREE_VALUE of each node is the
6803    decl-specifier.  For a keyword (such as `auto' or `friend'), the
6804    TREE_VALUE is simply the corresponding TREE_IDENTIFIER.  For the
6805    representation of a type-specifier, see cp_parser_type_specifier.
6806
6807    If there are attributes, they will be stored in *ATTRIBUTES,
6808    represented as described above cp_parser_attributes.
6809
6810    If FRIEND_IS_NOT_CLASS_P is non-NULL, and the `friend' specifier
6811    appears, and the entity that will be a friend is not going to be a
6812    class, then *FRIEND_IS_NOT_CLASS_P will be set to TRUE.  Note that
6813    even if *FRIEND_IS_NOT_CLASS_P is FALSE, the entity to which
6814    friendship is granted might not be a class.
6815
6816    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
6817    flags:
6818
6819      1: one of the decl-specifiers is an elaborated-type-specifier
6820         (i.e., a type declaration)
6821      2: one of the decl-specifiers is an enum-specifier or a
6822         class-specifier (i.e., a type definition)
6823
6824    */
6825
6826 static tree
6827 cp_parser_decl_specifier_seq (cp_parser* parser,
6828                               cp_parser_flags flags,
6829                               tree* attributes,
6830                               int* declares_class_or_enum)
6831 {
6832   tree decl_specs = NULL_TREE;
6833   bool friend_p = false;
6834   bool constructor_possible_p = !parser->in_declarator_p;
6835
6836   /* Assume no class or enumeration type is declared.  */
6837   *declares_class_or_enum = 0;
6838
6839   /* Assume there are no attributes.  */
6840   *attributes = NULL_TREE;
6841
6842   /* Keep reading specifiers until there are no more to read.  */
6843   while (true)
6844     {
6845       tree decl_spec = NULL_TREE;
6846       bool constructor_p;
6847       cp_token *token;
6848
6849       /* Peek at the next token.  */
6850       token = cp_lexer_peek_token (parser->lexer);
6851       /* Handle attributes.  */
6852       if (token->keyword == RID_ATTRIBUTE)
6853         {
6854           /* Parse the attributes.  */
6855           decl_spec = cp_parser_attributes_opt (parser);
6856           /* Add them to the list.  */
6857           *attributes = chainon (*attributes, decl_spec);
6858           continue;
6859         }
6860       /* If the next token is an appropriate keyword, we can simply
6861          add it to the list.  */
6862       switch (token->keyword)
6863         {
6864         case RID_FRIEND:
6865           /* decl-specifier:
6866                friend  */
6867           if (friend_p)
6868             error ("duplicate `friend'");
6869           else
6870             friend_p = true;
6871           /* The representation of the specifier is simply the
6872              appropriate TREE_IDENTIFIER node.  */
6873           decl_spec = token->value;
6874           /* Consume the token.  */
6875           cp_lexer_consume_token (parser->lexer);
6876           break;
6877
6878           /* function-specifier:
6879                inline
6880                virtual
6881                explicit  */
6882         case RID_INLINE:
6883         case RID_VIRTUAL:
6884         case RID_EXPLICIT:
6885           decl_spec = cp_parser_function_specifier_opt (parser);
6886           break;
6887
6888           /* decl-specifier:
6889                typedef  */
6890         case RID_TYPEDEF:
6891           /* The representation of the specifier is simply the
6892              appropriate TREE_IDENTIFIER node.  */
6893           decl_spec = token->value;
6894           /* Consume the token.  */
6895           cp_lexer_consume_token (parser->lexer);
6896           /* A constructor declarator cannot appear in a typedef.  */
6897           constructor_possible_p = false;
6898           /* The "typedef" keyword can only occur in a declaration; we
6899              may as well commit at this point.  */
6900           cp_parser_commit_to_tentative_parse (parser);
6901           break;
6902
6903           /* storage-class-specifier:
6904                auto
6905                register
6906                static
6907                extern
6908                mutable
6909
6910              GNU Extension:
6911                thread  */
6912         case RID_AUTO:
6913         case RID_REGISTER:
6914         case RID_STATIC:
6915         case RID_EXTERN:
6916         case RID_MUTABLE:
6917         case RID_THREAD:
6918           decl_spec = cp_parser_storage_class_specifier_opt (parser);
6919           break;
6920
6921         default:
6922           break;
6923         }
6924
6925       /* Constructors are a special case.  The `S' in `S()' is not a
6926          decl-specifier; it is the beginning of the declarator.  */
6927       constructor_p = (!decl_spec
6928                        && constructor_possible_p
6929                        && cp_parser_constructor_declarator_p (parser,
6930                                                               friend_p));
6931
6932       /* If we don't have a DECL_SPEC yet, then we must be looking at
6933          a type-specifier.  */
6934       if (!decl_spec && !constructor_p)
6935         {
6936           int decl_spec_declares_class_or_enum;
6937           bool is_cv_qualifier;
6938
6939           decl_spec
6940             = cp_parser_type_specifier (parser, flags,
6941                                         friend_p,
6942                                         /*is_declaration=*/true,
6943                                         &decl_spec_declares_class_or_enum,
6944                                         &is_cv_qualifier);
6945
6946           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
6947
6948           /* If this type-specifier referenced a user-defined type
6949              (a typedef, class-name, etc.), then we can't allow any
6950              more such type-specifiers henceforth.
6951
6952              [dcl.spec]
6953
6954              The longest sequence of decl-specifiers that could
6955              possibly be a type name is taken as the
6956              decl-specifier-seq of a declaration.  The sequence shall
6957              be self-consistent as described below.
6958
6959              [dcl.type]
6960
6961              As a general rule, at most one type-specifier is allowed
6962              in the complete decl-specifier-seq of a declaration.  The
6963              only exceptions are the following:
6964
6965              -- const or volatile can be combined with any other
6966                 type-specifier.
6967
6968              -- signed or unsigned can be combined with char, long,
6969                 short, or int.
6970
6971              -- ..
6972
6973              Example:
6974
6975                typedef char* Pc;
6976                void g (const int Pc);
6977
6978              Here, Pc is *not* part of the decl-specifier seq; it's
6979              the declarator.  Therefore, once we see a type-specifier
6980              (other than a cv-qualifier), we forbid any additional
6981              user-defined types.  We *do* still allow things like `int
6982              int' to be considered a decl-specifier-seq, and issue the
6983              error message later.  */
6984           if (decl_spec && !is_cv_qualifier)
6985             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
6986           /* A constructor declarator cannot follow a type-specifier.  */
6987           if (decl_spec)
6988             constructor_possible_p = false;
6989         }
6990
6991       /* If we still do not have a DECL_SPEC, then there are no more
6992          decl-specifiers.  */
6993       if (!decl_spec)
6994         {
6995           /* Issue an error message, unless the entire construct was
6996              optional.  */
6997           if (!(flags & CP_PARSER_FLAGS_OPTIONAL))
6998             {
6999               cp_parser_error (parser, "expected decl specifier");
7000               return error_mark_node;
7001             }
7002
7003           break;
7004         }
7005
7006       /* Add the DECL_SPEC to the list of specifiers.  */
7007       if (decl_specs == NULL || TREE_VALUE (decl_specs) != error_mark_node)
7008         decl_specs = tree_cons (NULL_TREE, decl_spec, decl_specs);
7009
7010       /* After we see one decl-specifier, further decl-specifiers are
7011          always optional.  */
7012       flags |= CP_PARSER_FLAGS_OPTIONAL;
7013     }
7014
7015   /* Don't allow a friend specifier with a class definition.  */
7016   if (friend_p && (*declares_class_or_enum & 2))
7017     error ("class definition may not be declared a friend");
7018
7019   /* We have built up the DECL_SPECS in reverse order.  Return them in
7020      the correct order.  */
7021   return nreverse (decl_specs);
7022 }
7023
7024 /* Parse an (optional) storage-class-specifier.
7025
7026    storage-class-specifier:
7027      auto
7028      register
7029      static
7030      extern
7031      mutable
7032
7033    GNU Extension:
7034
7035    storage-class-specifier:
7036      thread
7037
7038    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7039
7040 static tree
7041 cp_parser_storage_class_specifier_opt (cp_parser* parser)
7042 {
7043   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7044     {
7045     case RID_AUTO:
7046     case RID_REGISTER:
7047     case RID_STATIC:
7048     case RID_EXTERN:
7049     case RID_MUTABLE:
7050     case RID_THREAD:
7051       /* Consume the token.  */
7052       return cp_lexer_consume_token (parser->lexer)->value;
7053
7054     default:
7055       return NULL_TREE;
7056     }
7057 }
7058
7059 /* Parse an (optional) function-specifier.
7060
7061    function-specifier:
7062      inline
7063      virtual
7064      explicit
7065
7066    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7067
7068 static tree
7069 cp_parser_function_specifier_opt (cp_parser* parser)
7070 {
7071   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7072     {
7073     case RID_INLINE:
7074     case RID_VIRTUAL:
7075     case RID_EXPLICIT:
7076       /* Consume the token.  */
7077       return cp_lexer_consume_token (parser->lexer)->value;
7078
7079     default:
7080       return NULL_TREE;
7081     }
7082 }
7083
7084 /* Parse a linkage-specification.
7085
7086    linkage-specification:
7087      extern string-literal { declaration-seq [opt] }
7088      extern string-literal declaration  */
7089
7090 static void
7091 cp_parser_linkage_specification (cp_parser* parser)
7092 {
7093   cp_token *token;
7094   tree linkage;
7095
7096   /* Look for the `extern' keyword.  */
7097   cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7098
7099   /* Peek at the next token.  */
7100   token = cp_lexer_peek_token (parser->lexer);
7101   /* If it's not a string-literal, then there's a problem.  */
7102   if (!cp_parser_is_string_literal (token))
7103     {
7104       cp_parser_error (parser, "expected language-name");
7105       return;
7106     }
7107   /* Consume the token.  */
7108   cp_lexer_consume_token (parser->lexer);
7109
7110   /* Transform the literal into an identifier.  If the literal is a
7111      wide-character string, or contains embedded NULs, then we can't
7112      handle it as the user wants.  */
7113   if (token->type == CPP_WSTRING
7114       || (strlen (TREE_STRING_POINTER (token->value))
7115           != (size_t) (TREE_STRING_LENGTH (token->value) - 1)))
7116     {
7117       cp_parser_error (parser, "invalid linkage-specification");
7118       /* Assume C++ linkage.  */
7119       linkage = get_identifier ("c++");
7120     }
7121   /* If the string is chained to another string, take the latter,
7122      that's the untranslated string.  */
7123   else if (TREE_CHAIN (token->value))
7124     linkage = get_identifier (TREE_STRING_POINTER (TREE_CHAIN (token->value)));
7125   /* If it's a simple string constant, things are easier.  */
7126   else
7127     linkage = get_identifier (TREE_STRING_POINTER (token->value));
7128
7129   /* We're now using the new linkage.  */
7130   push_lang_context (linkage);
7131
7132   /* If the next token is a `{', then we're using the first
7133      production.  */
7134   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7135     {
7136       /* Consume the `{' token.  */
7137       cp_lexer_consume_token (parser->lexer);
7138       /* Parse the declarations.  */
7139       cp_parser_declaration_seq_opt (parser);
7140       /* Look for the closing `}'.  */
7141       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7142     }
7143   /* Otherwise, there's just one declaration.  */
7144   else
7145     {
7146       bool saved_in_unbraced_linkage_specification_p;
7147
7148       saved_in_unbraced_linkage_specification_p
7149         = parser->in_unbraced_linkage_specification_p;
7150       parser->in_unbraced_linkage_specification_p = true;
7151       have_extern_spec = true;
7152       cp_parser_declaration (parser);
7153       have_extern_spec = false;
7154       parser->in_unbraced_linkage_specification_p
7155         = saved_in_unbraced_linkage_specification_p;
7156     }
7157
7158   /* We're done with the linkage-specification.  */
7159   pop_lang_context ();
7160 }
7161
7162 /* Special member functions [gram.special] */
7163
7164 /* Parse a conversion-function-id.
7165
7166    conversion-function-id:
7167      operator conversion-type-id
7168
7169    Returns an IDENTIFIER_NODE representing the operator.  */
7170
7171 static tree
7172 cp_parser_conversion_function_id (cp_parser* parser)
7173 {
7174   tree type;
7175   tree saved_scope;
7176   tree saved_qualifying_scope;
7177   tree saved_object_scope;
7178   bool pop_p = false;
7179
7180   /* Look for the `operator' token.  */
7181   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7182     return error_mark_node;
7183   /* When we parse the conversion-type-id, the current scope will be
7184      reset.  However, we need that information in able to look up the
7185      conversion function later, so we save it here.  */
7186   saved_scope = parser->scope;
7187   saved_qualifying_scope = parser->qualifying_scope;
7188   saved_object_scope = parser->object_scope;
7189   /* We must enter the scope of the class so that the names of
7190      entities declared within the class are available in the
7191      conversion-type-id.  For example, consider:
7192
7193        struct S {
7194          typedef int I;
7195          operator I();
7196        };
7197
7198        S::operator I() { ... }
7199
7200      In order to see that `I' is a type-name in the definition, we
7201      must be in the scope of `S'.  */
7202   if (saved_scope)
7203     pop_p = push_scope (saved_scope);
7204   /* Parse the conversion-type-id.  */
7205   type = cp_parser_conversion_type_id (parser);
7206   /* Leave the scope of the class, if any.  */
7207   if (pop_p)
7208     pop_scope (saved_scope);
7209   /* Restore the saved scope.  */
7210   parser->scope = saved_scope;
7211   parser->qualifying_scope = saved_qualifying_scope;
7212   parser->object_scope = saved_object_scope;
7213   /* If the TYPE is invalid, indicate failure.  */
7214   if (type == error_mark_node)
7215     return error_mark_node;
7216   return mangle_conv_op_name_for_type (type);
7217 }
7218
7219 /* Parse a conversion-type-id:
7220
7221    conversion-type-id:
7222      type-specifier-seq conversion-declarator [opt]
7223
7224    Returns the TYPE specified.  */
7225
7226 static tree
7227 cp_parser_conversion_type_id (cp_parser* parser)
7228 {
7229   tree attributes;
7230   tree type_specifiers;
7231   tree declarator;
7232
7233   /* Parse the attributes.  */
7234   attributes = cp_parser_attributes_opt (parser);
7235   /* Parse the type-specifiers.  */
7236   type_specifiers = cp_parser_type_specifier_seq (parser);
7237   /* If that didn't work, stop.  */
7238   if (type_specifiers == error_mark_node)
7239     return error_mark_node;
7240   /* Parse the conversion-declarator.  */
7241   declarator = cp_parser_conversion_declarator_opt (parser);
7242
7243   return grokdeclarator (declarator, type_specifiers, TYPENAME,
7244                          /*initialized=*/0, &attributes);
7245 }
7246
7247 /* Parse an (optional) conversion-declarator.
7248
7249    conversion-declarator:
7250      ptr-operator conversion-declarator [opt]
7251
7252    Returns a representation of the declarator.  See
7253    cp_parser_declarator for details.  */
7254
7255 static tree
7256 cp_parser_conversion_declarator_opt (cp_parser* parser)
7257 {
7258   enum tree_code code;
7259   tree class_type;
7260   tree cv_qualifier_seq;
7261
7262   /* We don't know if there's a ptr-operator next, or not.  */
7263   cp_parser_parse_tentatively (parser);
7264   /* Try the ptr-operator.  */
7265   code = cp_parser_ptr_operator (parser, &class_type,
7266                                  &cv_qualifier_seq);
7267   /* If it worked, look for more conversion-declarators.  */
7268   if (cp_parser_parse_definitely (parser))
7269     {
7270      tree declarator;
7271
7272      /* Parse another optional declarator.  */
7273      declarator = cp_parser_conversion_declarator_opt (parser);
7274
7275      /* Create the representation of the declarator.  */
7276      if (code == INDIRECT_REF)
7277        declarator = make_pointer_declarator (cv_qualifier_seq,
7278                                              declarator);
7279      else
7280        declarator =  make_reference_declarator (cv_qualifier_seq,
7281                                                 declarator);
7282
7283      /* Handle the pointer-to-member case.  */
7284      if (class_type)
7285        declarator = build_nt (SCOPE_REF, class_type, declarator);
7286
7287      return declarator;
7288    }
7289
7290   return NULL_TREE;
7291 }
7292
7293 /* Parse an (optional) ctor-initializer.
7294
7295    ctor-initializer:
7296      : mem-initializer-list
7297
7298    Returns TRUE iff the ctor-initializer was actually present.  */
7299
7300 static bool
7301 cp_parser_ctor_initializer_opt (cp_parser* parser)
7302 {
7303   /* If the next token is not a `:', then there is no
7304      ctor-initializer.  */
7305   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
7306     {
7307       /* Do default initialization of any bases and members.  */
7308       if (DECL_CONSTRUCTOR_P (current_function_decl))
7309         finish_mem_initializers (NULL_TREE);
7310
7311       return false;
7312     }
7313
7314   /* Consume the `:' token.  */
7315   cp_lexer_consume_token (parser->lexer);
7316   /* And the mem-initializer-list.  */
7317   cp_parser_mem_initializer_list (parser);
7318
7319   return true;
7320 }
7321
7322 /* Parse a mem-initializer-list.
7323
7324    mem-initializer-list:
7325      mem-initializer
7326      mem-initializer , mem-initializer-list  */
7327
7328 static void
7329 cp_parser_mem_initializer_list (cp_parser* parser)
7330 {
7331   tree mem_initializer_list = NULL_TREE;
7332
7333   /* Let the semantic analysis code know that we are starting the
7334      mem-initializer-list.  */
7335   if (!DECL_CONSTRUCTOR_P (current_function_decl))
7336     error ("only constructors take base initializers");
7337
7338   /* Loop through the list.  */
7339   while (true)
7340     {
7341       tree mem_initializer;
7342
7343       /* Parse the mem-initializer.  */
7344       mem_initializer = cp_parser_mem_initializer (parser);
7345       /* Add it to the list, unless it was erroneous.  */
7346       if (mem_initializer)
7347         {
7348           TREE_CHAIN (mem_initializer) = mem_initializer_list;
7349           mem_initializer_list = mem_initializer;
7350         }
7351       /* If the next token is not a `,', we're done.  */
7352       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7353         break;
7354       /* Consume the `,' token.  */
7355       cp_lexer_consume_token (parser->lexer);
7356     }
7357
7358   /* Perform semantic analysis.  */
7359   if (DECL_CONSTRUCTOR_P (current_function_decl))
7360     finish_mem_initializers (mem_initializer_list);
7361 }
7362
7363 /* Parse a mem-initializer.
7364
7365    mem-initializer:
7366      mem-initializer-id ( expression-list [opt] )
7367
7368    GNU extension:
7369
7370    mem-initializer:
7371      ( expression-list [opt] )
7372
7373    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
7374    class) or FIELD_DECL (for a non-static data member) to initialize;
7375    the TREE_VALUE is the expression-list.  */
7376
7377 static tree
7378 cp_parser_mem_initializer (cp_parser* parser)
7379 {
7380   tree mem_initializer_id;
7381   tree expression_list;
7382   tree member;
7383
7384   /* Find out what is being initialized.  */
7385   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7386     {
7387       pedwarn ("anachronistic old-style base class initializer");
7388       mem_initializer_id = NULL_TREE;
7389     }
7390   else
7391     mem_initializer_id = cp_parser_mem_initializer_id (parser);
7392   member = expand_member_init (mem_initializer_id);
7393   if (member && !DECL_P (member))
7394     in_base_initializer = 1;
7395
7396   expression_list
7397     = cp_parser_parenthesized_expression_list (parser, false,
7398                                                /*non_constant_p=*/NULL);
7399   if (!expression_list)
7400     expression_list = void_type_node;
7401
7402   in_base_initializer = 0;
7403
7404   return member ? build_tree_list (member, expression_list) : NULL_TREE;
7405 }
7406
7407 /* Parse a mem-initializer-id.
7408
7409    mem-initializer-id:
7410      :: [opt] nested-name-specifier [opt] class-name
7411      identifier
7412
7413    Returns a TYPE indicating the class to be initializer for the first
7414    production.  Returns an IDENTIFIER_NODE indicating the data member
7415    to be initialized for the second production.  */
7416
7417 static tree
7418 cp_parser_mem_initializer_id (cp_parser* parser)
7419 {
7420   bool global_scope_p;
7421   bool nested_name_specifier_p;
7422   bool template_p = false;
7423   tree id;
7424
7425   /* `typename' is not allowed in this context ([temp.res]).  */
7426   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
7427     {
7428       error ("keyword `typename' not allowed in this context (a qualified "
7429              "member initializer is implicitly a type)");
7430       cp_lexer_consume_token (parser->lexer);
7431     }
7432   /* Look for the optional `::' operator.  */
7433   global_scope_p
7434     = (cp_parser_global_scope_opt (parser,
7435                                    /*current_scope_valid_p=*/false)
7436        != NULL_TREE);
7437   /* Look for the optional nested-name-specifier.  The simplest way to
7438      implement:
7439
7440        [temp.res]
7441
7442        The keyword `typename' is not permitted in a base-specifier or
7443        mem-initializer; in these contexts a qualified name that
7444        depends on a template-parameter is implicitly assumed to be a
7445        type name.
7446
7447      is to assume that we have seen the `typename' keyword at this
7448      point.  */
7449   nested_name_specifier_p
7450     = (cp_parser_nested_name_specifier_opt (parser,
7451                                             /*typename_keyword_p=*/true,
7452                                             /*check_dependency_p=*/true,
7453                                             /*type_p=*/true,
7454                                             /*is_declaration=*/true)
7455        != NULL_TREE);
7456   if (nested_name_specifier_p)
7457     template_p = cp_parser_optional_template_keyword (parser);
7458   /* If there is a `::' operator or a nested-name-specifier, then we
7459      are definitely looking for a class-name.  */
7460   if (global_scope_p || nested_name_specifier_p)
7461     return cp_parser_class_name (parser,
7462                                  /*typename_keyword_p=*/true,
7463                                  /*template_keyword_p=*/template_p,
7464                                  /*type_p=*/false,
7465                                  /*check_dependency_p=*/true,
7466                                  /*class_head_p=*/false,
7467                                  /*is_declaration=*/true);
7468   /* Otherwise, we could also be looking for an ordinary identifier.  */
7469   cp_parser_parse_tentatively (parser);
7470   /* Try a class-name.  */
7471   id = cp_parser_class_name (parser,
7472                              /*typename_keyword_p=*/true,
7473                              /*template_keyword_p=*/false,
7474                              /*type_p=*/false,
7475                              /*check_dependency_p=*/true,
7476                              /*class_head_p=*/false,
7477                              /*is_declaration=*/true);
7478   /* If we found one, we're done.  */
7479   if (cp_parser_parse_definitely (parser))
7480     return id;
7481   /* Otherwise, look for an ordinary identifier.  */
7482   return cp_parser_identifier (parser);
7483 }
7484
7485 /* Overloading [gram.over] */
7486
7487 /* Parse an operator-function-id.
7488
7489    operator-function-id:
7490      operator operator
7491
7492    Returns an IDENTIFIER_NODE for the operator which is a
7493    human-readable spelling of the identifier, e.g., `operator +'.  */
7494
7495 static tree
7496 cp_parser_operator_function_id (cp_parser* parser)
7497 {
7498   /* Look for the `operator' keyword.  */
7499   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7500     return error_mark_node;
7501   /* And then the name of the operator itself.  */
7502   return cp_parser_operator (parser);
7503 }
7504
7505 /* Parse an operator.
7506
7507    operator:
7508      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
7509      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
7510      || ++ -- , ->* -> () []
7511
7512    GNU Extensions:
7513
7514    operator:
7515      <? >? <?= >?=
7516
7517    Returns an IDENTIFIER_NODE for the operator which is a
7518    human-readable spelling of the identifier, e.g., `operator +'.  */
7519
7520 static tree
7521 cp_parser_operator (cp_parser* parser)
7522 {
7523   tree id = NULL_TREE;
7524   cp_token *token;
7525
7526   /* Peek at the next token.  */
7527   token = cp_lexer_peek_token (parser->lexer);
7528   /* Figure out which operator we have.  */
7529   switch (token->type)
7530     {
7531     case CPP_KEYWORD:
7532       {
7533         enum tree_code op;
7534
7535         /* The keyword should be either `new' or `delete'.  */
7536         if (token->keyword == RID_NEW)
7537           op = NEW_EXPR;
7538         else if (token->keyword == RID_DELETE)
7539           op = DELETE_EXPR;
7540         else
7541           break;
7542
7543         /* Consume the `new' or `delete' token.  */
7544         cp_lexer_consume_token (parser->lexer);
7545
7546         /* Peek at the next token.  */
7547         token = cp_lexer_peek_token (parser->lexer);
7548         /* If it's a `[' token then this is the array variant of the
7549            operator.  */
7550         if (token->type == CPP_OPEN_SQUARE)
7551           {
7552             /* Consume the `[' token.  */
7553             cp_lexer_consume_token (parser->lexer);
7554             /* Look for the `]' token.  */
7555             cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
7556             id = ansi_opname (op == NEW_EXPR
7557                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
7558           }
7559         /* Otherwise, we have the non-array variant.  */
7560         else
7561           id = ansi_opname (op);
7562
7563         return id;
7564       }
7565
7566     case CPP_PLUS:
7567       id = ansi_opname (PLUS_EXPR);
7568       break;
7569
7570     case CPP_MINUS:
7571       id = ansi_opname (MINUS_EXPR);
7572       break;
7573
7574     case CPP_MULT:
7575       id = ansi_opname (MULT_EXPR);
7576       break;
7577
7578     case CPP_DIV:
7579       id = ansi_opname (TRUNC_DIV_EXPR);
7580       break;
7581
7582     case CPP_MOD:
7583       id = ansi_opname (TRUNC_MOD_EXPR);
7584       break;
7585
7586     case CPP_XOR:
7587       id = ansi_opname (BIT_XOR_EXPR);
7588       break;
7589
7590     case CPP_AND:
7591       id = ansi_opname (BIT_AND_EXPR);
7592       break;
7593
7594     case CPP_OR:
7595       id = ansi_opname (BIT_IOR_EXPR);
7596       break;
7597
7598     case CPP_COMPL:
7599       id = ansi_opname (BIT_NOT_EXPR);
7600       break;
7601
7602     case CPP_NOT:
7603       id = ansi_opname (TRUTH_NOT_EXPR);
7604       break;
7605
7606     case CPP_EQ:
7607       id = ansi_assopname (NOP_EXPR);
7608       break;
7609
7610     case CPP_LESS:
7611       id = ansi_opname (LT_EXPR);
7612       break;
7613
7614     case CPP_GREATER:
7615       id = ansi_opname (GT_EXPR);
7616       break;
7617
7618     case CPP_PLUS_EQ:
7619       id = ansi_assopname (PLUS_EXPR);
7620       break;
7621
7622     case CPP_MINUS_EQ:
7623       id = ansi_assopname (MINUS_EXPR);
7624       break;
7625
7626     case CPP_MULT_EQ:
7627       id = ansi_assopname (MULT_EXPR);
7628       break;
7629
7630     case CPP_DIV_EQ:
7631       id = ansi_assopname (TRUNC_DIV_EXPR);
7632       break;
7633
7634     case CPP_MOD_EQ:
7635       id = ansi_assopname (TRUNC_MOD_EXPR);
7636       break;
7637
7638     case CPP_XOR_EQ:
7639       id = ansi_assopname (BIT_XOR_EXPR);
7640       break;
7641
7642     case CPP_AND_EQ:
7643       id = ansi_assopname (BIT_AND_EXPR);
7644       break;
7645
7646     case CPP_OR_EQ:
7647       id = ansi_assopname (BIT_IOR_EXPR);
7648       break;
7649
7650     case CPP_LSHIFT:
7651       id = ansi_opname (LSHIFT_EXPR);
7652       break;
7653
7654     case CPP_RSHIFT:
7655       id = ansi_opname (RSHIFT_EXPR);
7656       break;
7657
7658     case CPP_LSHIFT_EQ:
7659       id = ansi_assopname (LSHIFT_EXPR);
7660       break;
7661
7662     case CPP_RSHIFT_EQ:
7663       id = ansi_assopname (RSHIFT_EXPR);
7664       break;
7665
7666     case CPP_EQ_EQ:
7667       id = ansi_opname (EQ_EXPR);
7668       break;
7669
7670     case CPP_NOT_EQ:
7671       id = ansi_opname (NE_EXPR);
7672       break;
7673
7674     case CPP_LESS_EQ:
7675       id = ansi_opname (LE_EXPR);
7676       break;
7677
7678     case CPP_GREATER_EQ:
7679       id = ansi_opname (GE_EXPR);
7680       break;
7681
7682     case CPP_AND_AND:
7683       id = ansi_opname (TRUTH_ANDIF_EXPR);
7684       break;
7685
7686     case CPP_OR_OR:
7687       id = ansi_opname (TRUTH_ORIF_EXPR);
7688       break;
7689
7690     case CPP_PLUS_PLUS:
7691       id = ansi_opname (POSTINCREMENT_EXPR);
7692       break;
7693
7694     case CPP_MINUS_MINUS:
7695       id = ansi_opname (PREDECREMENT_EXPR);
7696       break;
7697
7698     case CPP_COMMA:
7699       id = ansi_opname (COMPOUND_EXPR);
7700       break;
7701
7702     case CPP_DEREF_STAR:
7703       id = ansi_opname (MEMBER_REF);
7704       break;
7705
7706     case CPP_DEREF:
7707       id = ansi_opname (COMPONENT_REF);
7708       break;
7709
7710     case CPP_OPEN_PAREN:
7711       /* Consume the `('.  */
7712       cp_lexer_consume_token (parser->lexer);
7713       /* Look for the matching `)'.  */
7714       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
7715       return ansi_opname (CALL_EXPR);
7716
7717     case CPP_OPEN_SQUARE:
7718       /* Consume the `['.  */
7719       cp_lexer_consume_token (parser->lexer);
7720       /* Look for the matching `]'.  */
7721       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
7722       return ansi_opname (ARRAY_REF);
7723
7724       /* Extensions.  */
7725     case CPP_MIN:
7726       id = ansi_opname (MIN_EXPR);
7727       break;
7728
7729     case CPP_MAX:
7730       id = ansi_opname (MAX_EXPR);
7731       break;
7732
7733     case CPP_MIN_EQ:
7734       id = ansi_assopname (MIN_EXPR);
7735       break;
7736
7737     case CPP_MAX_EQ:
7738       id = ansi_assopname (MAX_EXPR);
7739       break;
7740
7741     default:
7742       /* Anything else is an error.  */
7743       break;
7744     }
7745
7746   /* If we have selected an identifier, we need to consume the
7747      operator token.  */
7748   if (id)
7749     cp_lexer_consume_token (parser->lexer);
7750   /* Otherwise, no valid operator name was present.  */
7751   else
7752     {
7753       cp_parser_error (parser, "expected operator");
7754       id = error_mark_node;
7755     }
7756
7757   return id;
7758 }
7759
7760 /* Parse a template-declaration.
7761
7762    template-declaration:
7763      export [opt] template < template-parameter-list > declaration
7764
7765    If MEMBER_P is TRUE, this template-declaration occurs within a
7766    class-specifier.
7767
7768    The grammar rule given by the standard isn't correct.  What
7769    is really meant is:
7770
7771    template-declaration:
7772      export [opt] template-parameter-list-seq
7773        decl-specifier-seq [opt] init-declarator [opt] ;
7774      export [opt] template-parameter-list-seq
7775        function-definition
7776
7777    template-parameter-list-seq:
7778      template-parameter-list-seq [opt]
7779      template < template-parameter-list >  */
7780
7781 static void
7782 cp_parser_template_declaration (cp_parser* parser, bool member_p)
7783 {
7784   /* Check for `export'.  */
7785   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
7786     {
7787       /* Consume the `export' token.  */
7788       cp_lexer_consume_token (parser->lexer);
7789       /* Warn that we do not support `export'.  */
7790       warning ("keyword `export' not implemented, and will be ignored");
7791     }
7792
7793   cp_parser_template_declaration_after_export (parser, member_p);
7794 }
7795
7796 /* Parse a template-parameter-list.
7797
7798    template-parameter-list:
7799      template-parameter
7800      template-parameter-list , template-parameter
7801
7802    Returns a TREE_LIST.  Each node represents a template parameter.
7803    The nodes are connected via their TREE_CHAINs.  */
7804
7805 static tree
7806 cp_parser_template_parameter_list (cp_parser* parser)
7807 {
7808   tree parameter_list = NULL_TREE;
7809
7810   while (true)
7811     {
7812       tree parameter;
7813       cp_token *token;
7814
7815       /* Parse the template-parameter.  */
7816       parameter = cp_parser_template_parameter (parser);
7817       /* Add it to the list.  */
7818       parameter_list = process_template_parm (parameter_list,
7819                                               parameter);
7820
7821       /* Peek at the next token.  */
7822       token = cp_lexer_peek_token (parser->lexer);
7823       /* If it's not a `,', we're done.  */
7824       if (token->type != CPP_COMMA)
7825         break;
7826       /* Otherwise, consume the `,' token.  */
7827       cp_lexer_consume_token (parser->lexer);
7828     }
7829
7830   return parameter_list;
7831 }
7832
7833 /* Parse a template-parameter.
7834
7835    template-parameter:
7836      type-parameter
7837      parameter-declaration
7838
7839    Returns a TREE_LIST.  The TREE_VALUE represents the parameter.  The
7840    TREE_PURPOSE is the default value, if any.  */
7841
7842 static tree
7843 cp_parser_template_parameter (cp_parser* parser)
7844 {
7845   cp_token *token;
7846
7847   /* Peek at the next token.  */
7848   token = cp_lexer_peek_token (parser->lexer);
7849   /* If it is `class' or `template', we have a type-parameter.  */
7850   if (token->keyword == RID_TEMPLATE)
7851     return cp_parser_type_parameter (parser);
7852   /* If it is `class' or `typename' we do not know yet whether it is a
7853      type parameter or a non-type parameter.  Consider:
7854
7855        template <typename T, typename T::X X> ...
7856
7857      or:
7858
7859        template <class C, class D*> ...
7860
7861      Here, the first parameter is a type parameter, and the second is
7862      a non-type parameter.  We can tell by looking at the token after
7863      the identifier -- if it is a `,', `=', or `>' then we have a type
7864      parameter.  */
7865   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
7866     {
7867       /* Peek at the token after `class' or `typename'.  */
7868       token = cp_lexer_peek_nth_token (parser->lexer, 2);
7869       /* If it's an identifier, skip it.  */
7870       if (token->type == CPP_NAME)
7871         token = cp_lexer_peek_nth_token (parser->lexer, 3);
7872       /* Now, see if the token looks like the end of a template
7873          parameter.  */
7874       if (token->type == CPP_COMMA
7875           || token->type == CPP_EQ
7876           || token->type == CPP_GREATER)
7877         return cp_parser_type_parameter (parser);
7878     }
7879
7880   /* Otherwise, it is a non-type parameter.
7881
7882      [temp.param]
7883
7884      When parsing a default template-argument for a non-type
7885      template-parameter, the first non-nested `>' is taken as the end
7886      of the template parameter-list rather than a greater-than
7887      operator.  */
7888   return
7889     cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
7890                                      /*parenthesized_p=*/NULL);
7891 }
7892
7893 /* Parse a type-parameter.
7894
7895    type-parameter:
7896      class identifier [opt]
7897      class identifier [opt] = type-id
7898      typename identifier [opt]
7899      typename identifier [opt] = type-id
7900      template < template-parameter-list > class identifier [opt]
7901      template < template-parameter-list > class identifier [opt]
7902        = id-expression
7903
7904    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
7905    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
7906    the declaration of the parameter.  */
7907
7908 static tree
7909 cp_parser_type_parameter (cp_parser* parser)
7910 {
7911   cp_token *token;
7912   tree parameter;
7913
7914   /* Look for a keyword to tell us what kind of parameter this is.  */
7915   token = cp_parser_require (parser, CPP_KEYWORD,
7916                              "`class', `typename', or `template'");
7917   if (!token)
7918     return error_mark_node;
7919
7920   switch (token->keyword)
7921     {
7922     case RID_CLASS:
7923     case RID_TYPENAME:
7924       {
7925         tree identifier;
7926         tree default_argument;
7927
7928         /* If the next token is an identifier, then it names the
7929            parameter.  */
7930         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
7931           identifier = cp_parser_identifier (parser);
7932         else
7933           identifier = NULL_TREE;
7934
7935         /* Create the parameter.  */
7936         parameter = finish_template_type_parm (class_type_node, identifier);
7937
7938         /* If the next token is an `=', we have a default argument.  */
7939         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
7940           {
7941             /* Consume the `=' token.  */
7942             cp_lexer_consume_token (parser->lexer);
7943             /* Parse the default-argument.  */
7944             default_argument = cp_parser_type_id (parser);
7945           }
7946         else
7947           default_argument = NULL_TREE;
7948
7949         /* Create the combined representation of the parameter and the
7950            default argument.  */
7951         parameter = build_tree_list (default_argument, parameter);
7952       }
7953       break;
7954
7955     case RID_TEMPLATE:
7956       {
7957         tree parameter_list;
7958         tree identifier;
7959         tree default_argument;
7960
7961         /* Look for the `<'.  */
7962         cp_parser_require (parser, CPP_LESS, "`<'");
7963         /* Parse the template-parameter-list.  */
7964         begin_template_parm_list ();
7965         parameter_list
7966           = cp_parser_template_parameter_list (parser);
7967         parameter_list = end_template_parm_list (parameter_list);
7968         /* Look for the `>'.  */
7969         cp_parser_require (parser, CPP_GREATER, "`>'");
7970         /* Look for the `class' keyword.  */
7971         cp_parser_require_keyword (parser, RID_CLASS, "`class'");
7972         /* If the next token is an `=', then there is a
7973            default-argument.  If the next token is a `>', we are at
7974            the end of the parameter-list.  If the next token is a `,',
7975            then we are at the end of this parameter.  */
7976         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
7977             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
7978             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7979           identifier = cp_parser_identifier (parser);
7980         else
7981           identifier = NULL_TREE;
7982         /* Create the template parameter.  */
7983         parameter = finish_template_template_parm (class_type_node,
7984                                                    identifier);
7985
7986         /* If the next token is an `=', then there is a
7987            default-argument.  */
7988         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
7989           {
7990             bool is_template;
7991
7992             /* Consume the `='.  */
7993             cp_lexer_consume_token (parser->lexer);
7994             /* Parse the id-expression.  */
7995             default_argument
7996               = cp_parser_id_expression (parser,
7997                                          /*template_keyword_p=*/false,
7998                                          /*check_dependency_p=*/true,
7999                                          /*template_p=*/&is_template,
8000                                          /*declarator_p=*/false);
8001             if (TREE_CODE (default_argument) == TYPE_DECL)
8002               /* If the id-expression was a template-id that refers to
8003                  a template-class, we already have the declaration here,
8004                  so no further lookup is needed.  */
8005                  ;
8006             else
8007               /* Look up the name.  */
8008               default_argument
8009                 = cp_parser_lookup_name (parser, default_argument,
8010                                         /*is_type=*/false,
8011                                         /*is_template=*/is_template,
8012                                         /*is_namespace=*/false,
8013                                         /*check_dependency=*/true);
8014             /* See if the default argument is valid.  */
8015             default_argument
8016               = check_template_template_default_arg (default_argument);
8017           }
8018         else
8019           default_argument = NULL_TREE;
8020
8021         /* Create the combined representation of the parameter and the
8022            default argument.  */
8023         parameter =  build_tree_list (default_argument, parameter);
8024       }
8025       break;
8026
8027     default:
8028       /* Anything else is an error.  */
8029       cp_parser_error (parser,
8030                        "expected `class', `typename', or `template'");
8031       parameter = error_mark_node;
8032     }
8033
8034   return parameter;
8035 }
8036
8037 /* Parse a template-id.
8038
8039    template-id:
8040      template-name < template-argument-list [opt] >
8041
8042    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8043    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8044    returned.  Otherwise, if the template-name names a function, or set
8045    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8046    names a class, returns a TYPE_DECL for the specialization.
8047
8048    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8049    uninstantiated templates.  */
8050
8051 static tree
8052 cp_parser_template_id (cp_parser *parser,
8053                        bool template_keyword_p,
8054                        bool check_dependency_p,
8055                        bool is_declaration)
8056 {
8057   tree template;
8058   tree arguments;
8059   tree template_id;
8060   ptrdiff_t start_of_id;
8061   tree access_check = NULL_TREE;
8062   cp_token *next_token, *next_token_2;
8063   bool is_identifier;
8064
8065   /* If the next token corresponds to a template-id, there is no need
8066      to reparse it.  */
8067   next_token = cp_lexer_peek_token (parser->lexer);
8068   if (next_token->type == CPP_TEMPLATE_ID)
8069     {
8070       tree value;
8071       tree check;
8072
8073       /* Get the stored value.  */
8074       value = cp_lexer_consume_token (parser->lexer)->value;
8075       /* Perform any access checks that were deferred.  */
8076       for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
8077         perform_or_defer_access_check (TREE_PURPOSE (check),
8078                                        TREE_VALUE (check));
8079       /* Return the stored value.  */
8080       return TREE_VALUE (value);
8081     }
8082
8083   /* Avoid performing name lookup if there is no possibility of
8084      finding a template-id.  */
8085   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8086       || (next_token->type == CPP_NAME
8087           && !cp_parser_nth_token_starts_template_argument_list_p
8088                (parser, 2)))
8089     {
8090       cp_parser_error (parser, "expected template-id");
8091       return error_mark_node;
8092     }
8093
8094   /* Remember where the template-id starts.  */
8095   if (cp_parser_parsing_tentatively (parser)
8096       && !cp_parser_committed_to_tentative_parse (parser))
8097     {
8098       next_token = cp_lexer_peek_token (parser->lexer);
8099       start_of_id = cp_lexer_token_difference (parser->lexer,
8100                                                parser->lexer->first_token,
8101                                                next_token);
8102     }
8103   else
8104     start_of_id = -1;
8105
8106   push_deferring_access_checks (dk_deferred);
8107
8108   /* Parse the template-name.  */
8109   is_identifier = false;
8110   template = cp_parser_template_name (parser, template_keyword_p,
8111                                       check_dependency_p,
8112                                       is_declaration,
8113                                       &is_identifier);
8114   if (template == error_mark_node || is_identifier)
8115     {
8116       pop_deferring_access_checks ();
8117       return template;
8118     }
8119
8120   /* If we find the sequence `[:' after a template-name, it's probably
8121      a digraph-typo for `< ::'. Substitute the tokens and check if we can
8122      parse correctly the argument list.  */
8123   next_token = cp_lexer_peek_nth_token (parser->lexer, 1);
8124   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8125   if (next_token->type == CPP_OPEN_SQUARE
8126       && next_token->flags & DIGRAPH
8127       && next_token_2->type == CPP_COLON
8128       && !(next_token_2->flags & PREV_WHITE))
8129     {
8130       cp_parser_parse_tentatively (parser);
8131       /* Change `:' into `::'.  */
8132       next_token_2->type = CPP_SCOPE;
8133       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8134          CPP_LESS.  */
8135       cp_lexer_consume_token (parser->lexer);
8136       /* Parse the arguments.  */
8137       arguments = cp_parser_enclosed_template_argument_list (parser);
8138       if (!cp_parser_parse_definitely (parser))
8139         {
8140           /* If we couldn't parse an argument list, then we revert our changes
8141              and return simply an error. Maybe this is not a template-id
8142              after all.  */
8143           next_token_2->type = CPP_COLON;
8144           cp_parser_error (parser, "expected `<'");
8145           pop_deferring_access_checks ();
8146           return error_mark_node;
8147         }
8148       /* Otherwise, emit an error about the invalid digraph, but continue
8149          parsing because we got our argument list.  */
8150       pedwarn ("`<::' cannot begin a template-argument list");
8151       inform ("`<:' is an alternate spelling for `['. Insert whitespace "
8152               "between `<' and `::'");
8153       if (!flag_permissive)
8154         {
8155           static bool hint;
8156           if (!hint)
8157             {
8158               inform ("(if you use `-fpermissive' G++ will accept your code)");
8159               hint = true;
8160             }
8161         }
8162     }
8163   else
8164     {
8165       /* Look for the `<' that starts the template-argument-list.  */
8166       if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8167         {
8168           pop_deferring_access_checks ();
8169           return error_mark_node;
8170         }
8171       /* Parse the arguments.  */
8172       arguments = cp_parser_enclosed_template_argument_list (parser);
8173     }
8174
8175   /* Build a representation of the specialization.  */
8176   if (TREE_CODE (template) == IDENTIFIER_NODE)
8177     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8178   else if (DECL_CLASS_TEMPLATE_P (template)
8179            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8180     template_id
8181       = finish_template_type (template, arguments,
8182                               cp_lexer_next_token_is (parser->lexer,
8183                                                       CPP_SCOPE));
8184   else
8185     {
8186       /* If it's not a class-template or a template-template, it should be
8187          a function-template.  */
8188       my_friendly_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8189                            || TREE_CODE (template) == OVERLOAD
8190                            || BASELINK_P (template)),
8191                           20010716);
8192
8193       template_id = lookup_template_function (template, arguments);
8194     }
8195
8196   /* Retrieve any deferred checks.  Do not pop this access checks yet
8197      so the memory will not be reclaimed during token replacing below.  */
8198   access_check = get_deferred_access_checks ();
8199
8200   /* If parsing tentatively, replace the sequence of tokens that makes
8201      up the template-id with a CPP_TEMPLATE_ID token.  That way,
8202      should we re-parse the token stream, we will not have to repeat
8203      the effort required to do the parse, nor will we issue duplicate
8204      error messages about problems during instantiation of the
8205      template.  */
8206   if (start_of_id >= 0)
8207     {
8208       cp_token *token;
8209
8210       /* Find the token that corresponds to the start of the
8211          template-id.  */
8212       token = cp_lexer_advance_token (parser->lexer,
8213                                       parser->lexer->first_token,
8214                                       start_of_id);
8215
8216       /* Reset the contents of the START_OF_ID token.  */
8217       token->type = CPP_TEMPLATE_ID;
8218       token->value = build_tree_list (access_check, template_id);
8219       token->keyword = RID_MAX;
8220       /* Purge all subsequent tokens.  */
8221       cp_lexer_purge_tokens_after (parser->lexer, token);
8222     }
8223
8224   pop_deferring_access_checks ();
8225   return template_id;
8226 }
8227
8228 /* Parse a template-name.
8229
8230    template-name:
8231      identifier
8232
8233    The standard should actually say:
8234
8235    template-name:
8236      identifier
8237      operator-function-id
8238
8239    A defect report has been filed about this issue.
8240
8241    A conversion-function-id cannot be a template name because they cannot
8242    be part of a template-id. In fact, looking at this code:
8243
8244    a.operator K<int>()
8245
8246    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
8247    It is impossible to call a templated conversion-function-id with an
8248    explicit argument list, since the only allowed template parameter is
8249    the type to which it is converting.
8250
8251    If TEMPLATE_KEYWORD_P is true, then we have just seen the
8252    `template' keyword, in a construction like:
8253
8254      T::template f<3>()
8255
8256    In that case `f' is taken to be a template-name, even though there
8257    is no way of knowing for sure.
8258
8259    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
8260    name refers to a set of overloaded functions, at least one of which
8261    is a template, or an IDENTIFIER_NODE with the name of the template,
8262    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
8263    names are looked up inside uninstantiated templates.  */
8264
8265 static tree
8266 cp_parser_template_name (cp_parser* parser,
8267                          bool template_keyword_p,
8268                          bool check_dependency_p,
8269                          bool is_declaration,
8270                          bool *is_identifier)
8271 {
8272   tree identifier;
8273   tree decl;
8274   tree fns;
8275
8276   /* If the next token is `operator', then we have either an
8277      operator-function-id or a conversion-function-id.  */
8278   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
8279     {
8280       /* We don't know whether we're looking at an
8281          operator-function-id or a conversion-function-id.  */
8282       cp_parser_parse_tentatively (parser);
8283       /* Try an operator-function-id.  */
8284       identifier = cp_parser_operator_function_id (parser);
8285       /* If that didn't work, try a conversion-function-id.  */
8286       if (!cp_parser_parse_definitely (parser))
8287         {
8288           cp_parser_error (parser, "expected template-name");
8289           return error_mark_node;
8290         }
8291     }
8292   /* Look for the identifier.  */
8293   else
8294     identifier = cp_parser_identifier (parser);
8295
8296   /* If we didn't find an identifier, we don't have a template-id.  */
8297   if (identifier == error_mark_node)
8298     return error_mark_node;
8299
8300   /* If the name immediately followed the `template' keyword, then it
8301      is a template-name.  However, if the next token is not `<', then
8302      we do not treat it as a template-name, since it is not being used
8303      as part of a template-id.  This enables us to handle constructs
8304      like:
8305
8306        template <typename T> struct S { S(); };
8307        template <typename T> S<T>::S();
8308
8309      correctly.  We would treat `S' as a template -- if it were `S<T>'
8310      -- but we do not if there is no `<'.  */
8311
8312   if (processing_template_decl
8313       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
8314     {
8315       /* In a declaration, in a dependent context, we pretend that the
8316          "template" keyword was present in order to improve error
8317          recovery.  For example, given:
8318
8319            template <typename T> void f(T::X<int>);
8320
8321          we want to treat "X<int>" as a template-id.  */
8322       if (is_declaration
8323           && !template_keyword_p
8324           && parser->scope && TYPE_P (parser->scope)
8325           && dependent_type_p (parser->scope)
8326           /* Do not do this for dtors (or ctors), since they never
8327              need the template keyword before their name.  */
8328           && !constructor_name_p (identifier, parser->scope))
8329         {
8330           ptrdiff_t start;
8331           cp_token* token;
8332           /* Explain what went wrong.  */
8333           error ("non-template `%D' used as template", identifier);
8334           inform ("use `%T::template %D' to indicate that it is a template",
8335                   parser->scope, identifier);
8336           /* If parsing tentatively, find the location of the "<"
8337              token.  */
8338           if (cp_parser_parsing_tentatively (parser)
8339               && !cp_parser_committed_to_tentative_parse (parser))
8340             {
8341               cp_parser_simulate_error (parser);
8342               token = cp_lexer_peek_token (parser->lexer);
8343               token = cp_lexer_prev_token (parser->lexer, token);
8344               start = cp_lexer_token_difference (parser->lexer,
8345                                                  parser->lexer->first_token,
8346                                                  token);
8347             }
8348           else
8349             start = -1;
8350           /* Parse the template arguments so that we can issue error
8351              messages about them.  */
8352           cp_lexer_consume_token (parser->lexer);
8353           cp_parser_enclosed_template_argument_list (parser);
8354           /* Skip tokens until we find a good place from which to
8355              continue parsing.  */
8356           cp_parser_skip_to_closing_parenthesis (parser,
8357                                                  /*recovering=*/true,
8358                                                  /*or_comma=*/true,
8359                                                  /*consume_paren=*/false);
8360           /* If parsing tentatively, permanently remove the
8361              template argument list.  That will prevent duplicate
8362              error messages from being issued about the missing
8363              "template" keyword.  */
8364           if (start >= 0)
8365             {
8366               token = cp_lexer_advance_token (parser->lexer,
8367                                               parser->lexer->first_token,
8368                                               start);
8369               cp_lexer_purge_tokens_after (parser->lexer, token);
8370             }
8371           if (is_identifier)
8372             *is_identifier = true;
8373           return identifier;
8374         }
8375
8376       /* If the "template" keyword is present, then there is generally
8377          no point in doing name-lookup, so we just return IDENTIFIER.
8378          But, if the qualifying scope is non-dependent then we can
8379          (and must) do name-lookup normally.  */
8380       if (template_keyword_p
8381           && (!parser->scope
8382               || (TYPE_P (parser->scope) 
8383                   && dependent_type_p (parser->scope))))
8384         return identifier;
8385     }
8386
8387   /* Look up the name.  */
8388   decl = cp_parser_lookup_name (parser, identifier,
8389                                 /*is_type=*/false,
8390                                 /*is_template=*/false,
8391                                 /*is_namespace=*/false,
8392                                 check_dependency_p);
8393   decl = maybe_get_template_decl_from_type_decl (decl);
8394
8395   /* If DECL is a template, then the name was a template-name.  */
8396   if (TREE_CODE (decl) == TEMPLATE_DECL)
8397     ;
8398   else
8399     {
8400       /* The standard does not explicitly indicate whether a name that
8401          names a set of overloaded declarations, some of which are
8402          templates, is a template-name.  However, such a name should
8403          be a template-name; otherwise, there is no way to form a
8404          template-id for the overloaded templates.  */
8405       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
8406       if (TREE_CODE (fns) == OVERLOAD)
8407         {
8408           tree fn;
8409
8410           for (fn = fns; fn; fn = OVL_NEXT (fn))
8411             if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
8412               break;
8413         }
8414       else
8415         {
8416           /* Otherwise, the name does not name a template.  */
8417           cp_parser_error (parser, "expected template-name");
8418           return error_mark_node;
8419         }
8420     }
8421
8422   /* If DECL is dependent, and refers to a function, then just return
8423      its name; we will look it up again during template instantiation.  */
8424   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
8425     {
8426       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
8427       if (TYPE_P (scope) && dependent_type_p (scope))
8428         return identifier;
8429     }
8430
8431   return decl;
8432 }
8433
8434 /* Parse a template-argument-list.
8435
8436    template-argument-list:
8437      template-argument
8438      template-argument-list , template-argument
8439
8440    Returns a TREE_VEC containing the arguments.  */
8441
8442 static tree
8443 cp_parser_template_argument_list (cp_parser* parser)
8444 {
8445   tree fixed_args[10];
8446   unsigned n_args = 0;
8447   unsigned alloced = 10;
8448   tree *arg_ary = fixed_args;
8449   tree vec;
8450   bool saved_in_template_argument_list_p;
8451
8452   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
8453   parser->in_template_argument_list_p = true;
8454   do
8455     {
8456       tree argument;
8457
8458       if (n_args)
8459         /* Consume the comma.  */
8460         cp_lexer_consume_token (parser->lexer);
8461
8462       /* Parse the template-argument.  */
8463       argument = cp_parser_template_argument (parser);
8464       if (n_args == alloced)
8465         {
8466           alloced *= 2;
8467
8468           if (arg_ary == fixed_args)
8469             {
8470               arg_ary = xmalloc (sizeof (tree) * alloced);
8471               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
8472             }
8473           else
8474             arg_ary = xrealloc (arg_ary, sizeof (tree) * alloced);
8475         }
8476       arg_ary[n_args++] = argument;
8477     }
8478   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
8479
8480   vec = make_tree_vec (n_args);
8481
8482   while (n_args--)
8483     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
8484
8485   if (arg_ary != fixed_args)
8486     free (arg_ary);
8487   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
8488   return vec;
8489 }
8490
8491 /* Parse a template-argument.
8492
8493    template-argument:
8494      assignment-expression
8495      type-id
8496      id-expression
8497
8498    The representation is that of an assignment-expression, type-id, or
8499    id-expression -- except that the qualified id-expression is
8500    evaluated, so that the value returned is either a DECL or an
8501    OVERLOAD.
8502
8503    Although the standard says "assignment-expression", it forbids
8504    throw-expressions or assignments in the template argument.
8505    Therefore, we use "conditional-expression" instead.  */
8506
8507 static tree
8508 cp_parser_template_argument (cp_parser* parser)
8509 {
8510   tree argument;
8511   bool template_p;
8512   bool address_p;
8513   bool maybe_type_id = false;
8514   cp_token *token;
8515   cp_id_kind idk;
8516   tree qualifying_class;
8517
8518   /* There's really no way to know what we're looking at, so we just
8519      try each alternative in order.
8520
8521        [temp.arg]
8522
8523        In a template-argument, an ambiguity between a type-id and an
8524        expression is resolved to a type-id, regardless of the form of
8525        the corresponding template-parameter.
8526
8527      Therefore, we try a type-id first.  */
8528   cp_parser_parse_tentatively (parser);
8529   argument = cp_parser_type_id (parser);
8530   /* If there was no error parsing the type-id but the next token is a '>>',
8531      we probably found a typo for '> >'. But there are type-id which are
8532      also valid expressions. For instance:
8533
8534      struct X { int operator >> (int); };
8535      template <int V> struct Foo {};
8536      Foo<X () >> 5> r;
8537
8538      Here 'X()' is a valid type-id of a function type, but the user just
8539      wanted to write the expression "X() >> 5". Thus, we remember that we
8540      found a valid type-id, but we still try to parse the argument as an
8541      expression to see what happens.  */
8542   if (!cp_parser_error_occurred (parser)
8543       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
8544     {
8545       maybe_type_id = true;
8546       cp_parser_abort_tentative_parse (parser);
8547     }
8548   else
8549     {
8550       /* If the next token isn't a `,' or a `>', then this argument wasn't
8551       really finished. This means that the argument is not a valid
8552       type-id.  */
8553       if (!cp_parser_next_token_ends_template_argument_p (parser))
8554         cp_parser_error (parser, "expected template-argument");
8555       /* If that worked, we're done.  */
8556       if (cp_parser_parse_definitely (parser))
8557         return argument;
8558     }
8559   /* We're still not sure what the argument will be.  */
8560   cp_parser_parse_tentatively (parser);
8561   /* Try a template.  */
8562   argument = cp_parser_id_expression (parser,
8563                                       /*template_keyword_p=*/false,
8564                                       /*check_dependency_p=*/true,
8565                                       &template_p,
8566                                       /*declarator_p=*/false);
8567   /* If the next token isn't a `,' or a `>', then this argument wasn't
8568      really finished.  */
8569   if (!cp_parser_next_token_ends_template_argument_p (parser))
8570     cp_parser_error (parser, "expected template-argument");
8571   if (!cp_parser_error_occurred (parser))
8572     {
8573       /* Figure out what is being referred to.  If the id-expression
8574          was for a class template specialization, then we will have a
8575          TYPE_DECL at this point.  There is no need to do name lookup
8576          at this point in that case.  */
8577       if (TREE_CODE (argument) != TYPE_DECL)
8578         argument = cp_parser_lookup_name (parser, argument,
8579                                           /*is_type=*/false,
8580                                           /*is_template=*/template_p,
8581                                           /*is_namespace=*/false,
8582                                           /*check_dependency=*/true);
8583       if (TREE_CODE (argument) != TEMPLATE_DECL
8584           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
8585         cp_parser_error (parser, "expected template-name");
8586     }
8587   if (cp_parser_parse_definitely (parser))
8588     return argument;
8589   /* It must be a non-type argument.  There permitted cases are given
8590      in [temp.arg.nontype]:
8591
8592      -- an integral constant-expression of integral or enumeration
8593         type; or
8594
8595      -- the name of a non-type template-parameter; or
8596
8597      -- the name of an object or function with external linkage...
8598
8599      -- the address of an object or function with external linkage...
8600
8601      -- a pointer to member...  */
8602   /* Look for a non-type template parameter.  */
8603   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8604     {
8605       cp_parser_parse_tentatively (parser);
8606       argument = cp_parser_primary_expression (parser,
8607                                                &idk,
8608                                                &qualifying_class);
8609       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
8610           || !cp_parser_next_token_ends_template_argument_p (parser))
8611         cp_parser_simulate_error (parser);
8612       if (cp_parser_parse_definitely (parser))
8613         return argument;
8614     }
8615   /* If the next token is "&", the argument must be the address of an
8616      object or function with external linkage.  */
8617   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
8618   if (address_p)
8619     cp_lexer_consume_token (parser->lexer);
8620   /* See if we might have an id-expression.  */
8621   token = cp_lexer_peek_token (parser->lexer);
8622   if (token->type == CPP_NAME
8623       || token->keyword == RID_OPERATOR
8624       || token->type == CPP_SCOPE
8625       || token->type == CPP_TEMPLATE_ID
8626       || token->type == CPP_NESTED_NAME_SPECIFIER)
8627     {
8628       cp_parser_parse_tentatively (parser);
8629       argument = cp_parser_primary_expression (parser,
8630                                                &idk,
8631                                                &qualifying_class);
8632       if (cp_parser_error_occurred (parser)
8633           || !cp_parser_next_token_ends_template_argument_p (parser))
8634         cp_parser_abort_tentative_parse (parser);
8635       else
8636         {
8637           if (qualifying_class)
8638             argument = finish_qualified_id_expr (qualifying_class,
8639                                                  argument,
8640                                                  /*done=*/true,
8641                                                  address_p);
8642           if (TREE_CODE (argument) == VAR_DECL)
8643             {
8644               /* A variable without external linkage might still be a
8645                  valid constant-expression, so no error is issued here
8646                  if the external-linkage check fails.  */
8647               if (!DECL_EXTERNAL_LINKAGE_P (argument))
8648                 cp_parser_simulate_error (parser);
8649             }
8650           else if (is_overloaded_fn (argument))
8651             /* All overloaded functions are allowed; if the external
8652                linkage test does not pass, an error will be issued
8653                later.  */
8654             ;
8655           else if (address_p
8656                    && (TREE_CODE (argument) == OFFSET_REF
8657                        || TREE_CODE (argument) == SCOPE_REF))
8658             /* A pointer-to-member.  */
8659             ;
8660           else
8661             cp_parser_simulate_error (parser);
8662
8663           if (cp_parser_parse_definitely (parser))
8664             {
8665               if (address_p)
8666                 argument = build_x_unary_op (ADDR_EXPR, argument);
8667               return argument;
8668             }
8669         }
8670     }
8671   /* If the argument started with "&", there are no other valid
8672      alternatives at this point.  */
8673   if (address_p)
8674     {
8675       cp_parser_error (parser, "invalid non-type template argument");
8676       return error_mark_node;
8677     }
8678   /* If the argument wasn't successfully parsed as a type-id followed
8679      by '>>', the argument can only be a constant expression now.
8680      Otherwise, we try parsing the constant-expression tentatively,
8681      because the argument could really be a type-id.  */
8682   if (maybe_type_id)
8683     cp_parser_parse_tentatively (parser);
8684   argument = cp_parser_constant_expression (parser,
8685                                             /*allow_non_constant_p=*/false,
8686                                             /*non_constant_p=*/NULL);
8687   argument = fold_non_dependent_expr (argument);
8688   if (!maybe_type_id)
8689     return argument;
8690   if (!cp_parser_next_token_ends_template_argument_p (parser))
8691     cp_parser_error (parser, "expected template-argument");
8692   if (cp_parser_parse_definitely (parser))
8693     return argument;
8694   /* We did our best to parse the argument as a non type-id, but that
8695      was the only alternative that matched (albeit with a '>' after
8696      it). We can assume it's just a typo from the user, and a
8697      diagnostic will then be issued.  */
8698   return cp_parser_type_id (parser);
8699 }
8700
8701 /* Parse an explicit-instantiation.
8702
8703    explicit-instantiation:
8704      template declaration
8705
8706    Although the standard says `declaration', what it really means is:
8707
8708    explicit-instantiation:
8709      template decl-specifier-seq [opt] declarator [opt] ;
8710
8711    Things like `template int S<int>::i = 5, int S<double>::j;' are not
8712    supposed to be allowed.  A defect report has been filed about this
8713    issue.
8714
8715    GNU Extension:
8716
8717    explicit-instantiation:
8718      storage-class-specifier template
8719        decl-specifier-seq [opt] declarator [opt] ;
8720      function-specifier template
8721        decl-specifier-seq [opt] declarator [opt] ;  */
8722
8723 static void
8724 cp_parser_explicit_instantiation (cp_parser* parser)
8725 {
8726   int declares_class_or_enum;
8727   tree decl_specifiers;
8728   tree attributes;
8729   tree extension_specifier = NULL_TREE;
8730
8731   /* Look for an (optional) storage-class-specifier or
8732      function-specifier.  */
8733   if (cp_parser_allow_gnu_extensions_p (parser))
8734     {
8735       extension_specifier
8736         = cp_parser_storage_class_specifier_opt (parser);
8737       if (!extension_specifier)
8738         extension_specifier = cp_parser_function_specifier_opt (parser);
8739     }
8740
8741   /* Look for the `template' keyword.  */
8742   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
8743   /* Let the front end know that we are processing an explicit
8744      instantiation.  */
8745   begin_explicit_instantiation ();
8746   /* [temp.explicit] says that we are supposed to ignore access
8747      control while processing explicit instantiation directives.  */
8748   push_deferring_access_checks (dk_no_check);
8749   /* Parse a decl-specifier-seq.  */
8750   decl_specifiers
8751     = cp_parser_decl_specifier_seq (parser,
8752                                     CP_PARSER_FLAGS_OPTIONAL,
8753                                     &attributes,
8754                                     &declares_class_or_enum);
8755   /* If there was exactly one decl-specifier, and it declared a class,
8756      and there's no declarator, then we have an explicit type
8757      instantiation.  */
8758   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
8759     {
8760       tree type;
8761
8762       type = check_tag_decl (decl_specifiers);
8763       /* Turn access control back on for names used during
8764          template instantiation.  */
8765       pop_deferring_access_checks ();
8766       if (type)
8767         do_type_instantiation (type, extension_specifier, /*complain=*/1);
8768     }
8769   else
8770     {
8771       tree declarator;
8772       tree decl;
8773
8774       /* Parse the declarator.  */
8775       declarator
8776         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
8777                                 /*ctor_dtor_or_conv_p=*/NULL,
8778                                 /*parenthesized_p=*/NULL);
8779       cp_parser_check_for_definition_in_return_type (declarator,
8780                                                      declares_class_or_enum);
8781       if (declarator != error_mark_node)
8782         {
8783           decl = grokdeclarator (declarator, decl_specifiers,
8784                                  NORMAL, 0, NULL);
8785           /* Turn access control back on for names used during
8786              template instantiation.  */
8787           pop_deferring_access_checks ();
8788           /* Do the explicit instantiation.  */
8789           do_decl_instantiation (decl, extension_specifier);
8790         }
8791       else
8792         {
8793           pop_deferring_access_checks ();
8794           /* Skip the body of the explicit instantiation.  */
8795           cp_parser_skip_to_end_of_statement (parser);
8796         }
8797     }
8798   /* We're done with the instantiation.  */
8799   end_explicit_instantiation ();
8800
8801   cp_parser_consume_semicolon_at_end_of_statement (parser);
8802 }
8803
8804 /* Parse an explicit-specialization.
8805
8806    explicit-specialization:
8807      template < > declaration
8808
8809    Although the standard says `declaration', what it really means is:
8810
8811    explicit-specialization:
8812      template <> decl-specifier [opt] init-declarator [opt] ;
8813      template <> function-definition
8814      template <> explicit-specialization
8815      template <> template-declaration  */
8816
8817 static void
8818 cp_parser_explicit_specialization (cp_parser* parser)
8819 {
8820   /* Look for the `template' keyword.  */
8821   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
8822   /* Look for the `<'.  */
8823   cp_parser_require (parser, CPP_LESS, "`<'");
8824   /* Look for the `>'.  */
8825   cp_parser_require (parser, CPP_GREATER, "`>'");
8826   /* We have processed another parameter list.  */
8827   ++parser->num_template_parameter_lists;
8828   /* Let the front end know that we are beginning a specialization.  */
8829   begin_specialization ();
8830
8831   /* If the next keyword is `template', we need to figure out whether
8832      or not we're looking a template-declaration.  */
8833   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
8834     {
8835       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
8836           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
8837         cp_parser_template_declaration_after_export (parser,
8838                                                      /*member_p=*/false);
8839       else
8840         cp_parser_explicit_specialization (parser);
8841     }
8842   else
8843     /* Parse the dependent declaration.  */
8844     cp_parser_single_declaration (parser,
8845                                   /*member_p=*/false,
8846                                   /*friend_p=*/NULL);
8847
8848   /* We're done with the specialization.  */
8849   end_specialization ();
8850   /* We're done with this parameter list.  */
8851   --parser->num_template_parameter_lists;
8852 }
8853
8854 /* Parse a type-specifier.
8855
8856    type-specifier:
8857      simple-type-specifier
8858      class-specifier
8859      enum-specifier
8860      elaborated-type-specifier
8861      cv-qualifier
8862
8863    GNU Extension:
8864
8865    type-specifier:
8866      __complex__
8867
8868    Returns a representation of the type-specifier.  If the
8869    type-specifier is a keyword (like `int' or `const', or
8870    `__complex__') then the corresponding IDENTIFIER_NODE is returned.
8871    For a class-specifier, enum-specifier, or elaborated-type-specifier
8872    a TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
8873
8874    If IS_FRIEND is TRUE then this type-specifier is being declared a
8875    `friend'.  If IS_DECLARATION is TRUE, then this type-specifier is
8876    appearing in a decl-specifier-seq.
8877
8878    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
8879    class-specifier, enum-specifier, or elaborated-type-specifier, then
8880    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
8881    if a type is declared; 2 if it is defined.  Otherwise, it is set to
8882    zero.
8883
8884    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
8885    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
8886    is set to FALSE.  */
8887
8888 static tree
8889 cp_parser_type_specifier (cp_parser* parser,
8890                           cp_parser_flags flags,
8891                           bool is_friend,
8892                           bool is_declaration,
8893                           int* declares_class_or_enum,
8894                           bool* is_cv_qualifier)
8895 {
8896   tree type_spec = NULL_TREE;
8897   cp_token *token;
8898   enum rid keyword;
8899
8900   /* Assume this type-specifier does not declare a new type.  */
8901   if (declares_class_or_enum)
8902     *declares_class_or_enum = 0;
8903   /* And that it does not specify a cv-qualifier.  */
8904   if (is_cv_qualifier)
8905     *is_cv_qualifier = false;
8906   /* Peek at the next token.  */
8907   token = cp_lexer_peek_token (parser->lexer);
8908
8909   /* If we're looking at a keyword, we can use that to guide the
8910      production we choose.  */
8911   keyword = token->keyword;
8912   switch (keyword)
8913     {
8914       /* Any of these indicate either a class-specifier, or an
8915          elaborated-type-specifier.  */
8916     case RID_CLASS:
8917     case RID_STRUCT:
8918     case RID_UNION:
8919     case RID_ENUM:
8920       /* Parse tentatively so that we can back up if we don't find a
8921          class-specifier or enum-specifier.  */
8922       cp_parser_parse_tentatively (parser);
8923       /* Look for the class-specifier or enum-specifier.  */
8924       if (keyword == RID_ENUM)
8925         type_spec = cp_parser_enum_specifier (parser);
8926       else
8927         type_spec = cp_parser_class_specifier (parser);
8928
8929       /* If that worked, we're done.  */
8930       if (cp_parser_parse_definitely (parser))
8931         {
8932           if (declares_class_or_enum)
8933             *declares_class_or_enum = 2;
8934           return type_spec;
8935         }
8936
8937       /* Fall through.  */
8938
8939     case RID_TYPENAME:
8940       /* Look for an elaborated-type-specifier.  */
8941       type_spec = cp_parser_elaborated_type_specifier (parser,
8942                                                        is_friend,
8943                                                        is_declaration);
8944       /* We're declaring a class or enum -- unless we're using
8945          `typename'.  */
8946       if (declares_class_or_enum && keyword != RID_TYPENAME)
8947         *declares_class_or_enum = 1;
8948       return type_spec;
8949
8950     case RID_CONST:
8951     case RID_VOLATILE:
8952     case RID_RESTRICT:
8953       type_spec = cp_parser_cv_qualifier_opt (parser);
8954       /* Even though we call a routine that looks for an optional
8955          qualifier, we know that there should be one.  */
8956       my_friendly_assert (type_spec != NULL, 20000328);
8957       /* This type-specifier was a cv-qualified.  */
8958       if (is_cv_qualifier)
8959         *is_cv_qualifier = true;
8960
8961       return type_spec;
8962
8963     case RID_COMPLEX:
8964       /* The `__complex__' keyword is a GNU extension.  */
8965       return cp_lexer_consume_token (parser->lexer)->value;
8966
8967     default:
8968       break;
8969     }
8970
8971   /* If we do not already have a type-specifier, assume we are looking
8972      at a simple-type-specifier.  */
8973   type_spec = cp_parser_simple_type_specifier (parser, flags,
8974                                                /*identifier_p=*/true);
8975
8976   /* If we didn't find a type-specifier, and a type-specifier was not
8977      optional in this context, issue an error message.  */
8978   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
8979     {
8980       cp_parser_error (parser, "expected type specifier");
8981       return error_mark_node;
8982     }
8983
8984   return type_spec;
8985 }
8986
8987 /* Parse a simple-type-specifier.
8988
8989    simple-type-specifier:
8990      :: [opt] nested-name-specifier [opt] type-name
8991      :: [opt] nested-name-specifier template template-id
8992      char
8993      wchar_t
8994      bool
8995      short
8996      int
8997      long
8998      signed
8999      unsigned
9000      float
9001      double
9002      void
9003
9004    GNU Extension:
9005
9006    simple-type-specifier:
9007      __typeof__ unary-expression
9008      __typeof__ ( type-id )
9009
9010    For the various keywords, the value returned is simply the
9011    TREE_IDENTIFIER representing the keyword if IDENTIFIER_P is true.
9012    For the first two productions, and if IDENTIFIER_P is false, the
9013    value returned is the indicated TYPE_DECL.  */
9014
9015 static tree
9016 cp_parser_simple_type_specifier (cp_parser* parser, cp_parser_flags flags,
9017                                  bool identifier_p)
9018 {
9019   tree type = NULL_TREE;
9020   cp_token *token;
9021
9022   /* Peek at the next token.  */
9023   token = cp_lexer_peek_token (parser->lexer);
9024
9025   /* If we're looking at a keyword, things are easy.  */
9026   switch (token->keyword)
9027     {
9028     case RID_CHAR:
9029       type = char_type_node;
9030       break;
9031     case RID_WCHAR:
9032       type = wchar_type_node;
9033       break;
9034     case RID_BOOL:
9035       type = boolean_type_node;
9036       break;
9037     case RID_SHORT:
9038       type = short_integer_type_node;
9039       break;
9040     case RID_INT:
9041       type = integer_type_node;
9042       break;
9043     case RID_LONG:
9044       type = long_integer_type_node;
9045       break;
9046     case RID_SIGNED:
9047       type = integer_type_node;
9048       break;
9049     case RID_UNSIGNED:
9050       type = unsigned_type_node;
9051       break;
9052     case RID_FLOAT:
9053       type = float_type_node;
9054       break;
9055     case RID_DOUBLE:
9056       type = double_type_node;
9057       break;
9058     case RID_VOID:
9059       type = void_type_node;
9060       break;
9061
9062     case RID_TYPEOF:
9063       {
9064         tree operand;
9065
9066         /* Consume the `typeof' token.  */
9067         cp_lexer_consume_token (parser->lexer);
9068         /* Parse the operand to `typeof'.  */
9069         operand = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9070         /* If it is not already a TYPE, take its type.  */
9071         if (!TYPE_P (operand))
9072           operand = finish_typeof (operand);
9073
9074         return operand;
9075       }
9076
9077     default:
9078       break;
9079     }
9080
9081   /* If the type-specifier was for a built-in type, we're done.  */
9082   if (type)
9083     {
9084       tree id;
9085
9086       /* Consume the token.  */
9087       id = cp_lexer_consume_token (parser->lexer)->value;
9088
9089       /* There is no valid C++ program where a non-template type is
9090          followed by a "<".  That usually indicates that the user thought
9091          that the type was a template.  */
9092       cp_parser_check_for_invalid_template_id (parser, type);
9093
9094       return identifier_p ? id : TYPE_NAME (type);
9095     }
9096
9097   /* The type-specifier must be a user-defined type.  */
9098   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
9099     {
9100       bool qualified_p;
9101
9102       /* Don't gobble tokens or issue error messages if this is an
9103          optional type-specifier.  */
9104       if (flags & CP_PARSER_FLAGS_OPTIONAL)
9105         cp_parser_parse_tentatively (parser);
9106
9107       /* Look for the optional `::' operator.  */
9108       cp_parser_global_scope_opt (parser,
9109                                   /*current_scope_valid_p=*/false);
9110       /* Look for the nested-name specifier.  */
9111       qualified_p
9112         = (cp_parser_nested_name_specifier_opt (parser,
9113                                                 /*typename_keyword_p=*/false,
9114                                                 /*check_dependency_p=*/true,
9115                                                 /*type_p=*/false,
9116                                                 /*is_declaration=*/false)
9117            != NULL_TREE);
9118       /* If we have seen a nested-name-specifier, and the next token
9119          is `template', then we are using the template-id production.  */
9120       if (parser->scope
9121           && cp_parser_optional_template_keyword (parser))
9122         {
9123           /* Look for the template-id.  */
9124           type = cp_parser_template_id (parser,
9125                                         /*template_keyword_p=*/true,
9126                                         /*check_dependency_p=*/true,
9127                                         /*is_declaration=*/false);
9128           /* If the template-id did not name a type, we are out of
9129              luck.  */
9130           if (TREE_CODE (type) != TYPE_DECL)
9131             {
9132               cp_parser_error (parser, "expected template-id for type");
9133               type = NULL_TREE;
9134             }
9135         }
9136       /* Otherwise, look for a type-name.  */
9137       else
9138         type = cp_parser_type_name (parser);
9139       /* Keep track of all name-lookups performed in class scopes.  */
9140       if (type  
9141           && !qualified_p
9142           && TREE_CODE (type) == TYPE_DECL 
9143           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
9144         maybe_note_name_used_in_class (DECL_NAME (type), type);
9145       /* If it didn't work out, we don't have a TYPE.  */
9146       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
9147           && !cp_parser_parse_definitely (parser))
9148         type = NULL_TREE;
9149     }
9150
9151   /* If we didn't get a type-name, issue an error message.  */
9152   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9153     {
9154       cp_parser_error (parser, "expected type-name");
9155       return error_mark_node;
9156     }
9157
9158   /* There is no valid C++ program where a non-template type is
9159      followed by a "<".  That usually indicates that the user thought
9160      that the type was a template.  */
9161   if (type && type != error_mark_node)
9162     cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
9163
9164   return type;
9165 }
9166
9167 /* Parse a type-name.
9168
9169    type-name:
9170      class-name
9171      enum-name
9172      typedef-name
9173
9174    enum-name:
9175      identifier
9176
9177    typedef-name:
9178      identifier
9179
9180    Returns a TYPE_DECL for the the type.  */
9181
9182 static tree
9183 cp_parser_type_name (cp_parser* parser)
9184 {
9185   tree type_decl;
9186   tree identifier;
9187
9188   /* We can't know yet whether it is a class-name or not.  */
9189   cp_parser_parse_tentatively (parser);
9190   /* Try a class-name.  */
9191   type_decl = cp_parser_class_name (parser,
9192                                     /*typename_keyword_p=*/false,
9193                                     /*template_keyword_p=*/false,
9194                                     /*type_p=*/false,
9195                                     /*check_dependency_p=*/true,
9196                                     /*class_head_p=*/false,
9197                                     /*is_declaration=*/false);
9198   /* If it's not a class-name, keep looking.  */
9199   if (!cp_parser_parse_definitely (parser))
9200     {
9201       /* It must be a typedef-name or an enum-name.  */
9202       identifier = cp_parser_identifier (parser);
9203       if (identifier == error_mark_node)
9204         return error_mark_node;
9205
9206       /* Look up the type-name.  */
9207       type_decl = cp_parser_lookup_name_simple (parser, identifier);
9208       /* Issue an error if we did not find a type-name.  */
9209       if (TREE_CODE (type_decl) != TYPE_DECL)
9210         {
9211           if (!cp_parser_simulate_error (parser))
9212             cp_parser_name_lookup_error (parser, identifier, type_decl,
9213                                          "is not a type");
9214           type_decl = error_mark_node;
9215         }
9216       /* Remember that the name was used in the definition of the
9217          current class so that we can check later to see if the
9218          meaning would have been different after the class was
9219          entirely defined.  */
9220       else if (type_decl != error_mark_node
9221                && !parser->scope)
9222         maybe_note_name_used_in_class (identifier, type_decl);
9223     }
9224
9225   return type_decl;
9226 }
9227
9228
9229 /* Parse an elaborated-type-specifier.  Note that the grammar given
9230    here incorporates the resolution to DR68.
9231
9232    elaborated-type-specifier:
9233      class-key :: [opt] nested-name-specifier [opt] identifier
9234      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
9235      enum :: [opt] nested-name-specifier [opt] identifier
9236      typename :: [opt] nested-name-specifier identifier
9237      typename :: [opt] nested-name-specifier template [opt]
9238        template-id
9239
9240    GNU extension:
9241
9242    elaborated-type-specifier:
9243      class-key attributes :: [opt] nested-name-specifier [opt] identifier
9244      class-key attributes :: [opt] nested-name-specifier [opt]
9245                template [opt] template-id
9246      enum attributes :: [opt] nested-name-specifier [opt] identifier
9247
9248    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
9249    declared `friend'.  If IS_DECLARATION is TRUE, then this
9250    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
9251    something is being declared.
9252
9253    Returns the TYPE specified.  */
9254
9255 static tree
9256 cp_parser_elaborated_type_specifier (cp_parser* parser,
9257                                      bool is_friend,
9258                                      bool is_declaration)
9259 {
9260   enum tag_types tag_type;
9261   tree identifier;
9262   tree type = NULL_TREE;
9263   tree attributes = NULL_TREE;
9264
9265   /* See if we're looking at the `enum' keyword.  */
9266   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
9267     {
9268       /* Consume the `enum' token.  */
9269       cp_lexer_consume_token (parser->lexer);
9270       /* Remember that it's an enumeration type.  */
9271       tag_type = enum_type;
9272       /* Parse the attributes.  */
9273       attributes = cp_parser_attributes_opt (parser);
9274     }
9275   /* Or, it might be `typename'.  */
9276   else if (cp_lexer_next_token_is_keyword (parser->lexer,
9277                                            RID_TYPENAME))
9278     {
9279       /* Consume the `typename' token.  */
9280       cp_lexer_consume_token (parser->lexer);
9281       /* Remember that it's a `typename' type.  */
9282       tag_type = typename_type;
9283       /* The `typename' keyword is only allowed in templates.  */
9284       if (!processing_template_decl)
9285         pedwarn ("using `typename' outside of template");
9286     }
9287   /* Otherwise it must be a class-key.  */
9288   else
9289     {
9290       tag_type = cp_parser_class_key (parser);
9291       if (tag_type == none_type)
9292         return error_mark_node;
9293       /* Parse the attributes.  */
9294       attributes = cp_parser_attributes_opt (parser);
9295     }
9296
9297   /* Look for the `::' operator.  */
9298   cp_parser_global_scope_opt (parser,
9299                               /*current_scope_valid_p=*/false);
9300   /* Look for the nested-name-specifier.  */
9301   if (tag_type == typename_type)
9302     {
9303       if (cp_parser_nested_name_specifier (parser,
9304                                            /*typename_keyword_p=*/true,
9305                                            /*check_dependency_p=*/true,
9306                                            /*type_p=*/true,
9307                                            is_declaration)
9308           == error_mark_node)
9309         return error_mark_node;
9310     }
9311   else
9312     /* Even though `typename' is not present, the proposed resolution
9313        to Core Issue 180 says that in `class A<T>::B', `B' should be
9314        considered a type-name, even if `A<T>' is dependent.  */
9315     cp_parser_nested_name_specifier_opt (parser,
9316                                          /*typename_keyword_p=*/true,
9317                                          /*check_dependency_p=*/true,
9318                                          /*type_p=*/true,
9319                                          is_declaration);
9320   /* For everything but enumeration types, consider a template-id.  */
9321   if (tag_type != enum_type)
9322     {
9323       bool template_p = false;
9324       tree decl;
9325
9326       /* Allow the `template' keyword.  */
9327       template_p = cp_parser_optional_template_keyword (parser);
9328       /* If we didn't see `template', we don't know if there's a
9329          template-id or not.  */
9330       if (!template_p)
9331         cp_parser_parse_tentatively (parser);
9332       /* Parse the template-id.  */
9333       decl = cp_parser_template_id (parser, template_p,
9334                                     /*check_dependency_p=*/true,
9335                                     is_declaration);
9336       /* If we didn't find a template-id, look for an ordinary
9337          identifier.  */
9338       if (!template_p && !cp_parser_parse_definitely (parser))
9339         ;
9340       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
9341          in effect, then we must assume that, upon instantiation, the
9342          template will correspond to a class.  */
9343       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
9344                && tag_type == typename_type)
9345         type = make_typename_type (parser->scope, decl,
9346                                    /*complain=*/1);
9347       else
9348         type = TREE_TYPE (decl);
9349     }
9350
9351   /* For an enumeration type, consider only a plain identifier.  */
9352   if (!type)
9353     {
9354       identifier = cp_parser_identifier (parser);
9355
9356       if (identifier == error_mark_node)
9357         {
9358           parser->scope = NULL_TREE;
9359           return error_mark_node;
9360         }
9361
9362       /* For a `typename', we needn't call xref_tag.  */
9363       if (tag_type == typename_type)
9364         return cp_parser_make_typename_type (parser, parser->scope,
9365                                              identifier);
9366       /* Look up a qualified name in the usual way.  */
9367       if (parser->scope)
9368         {
9369           tree decl;
9370
9371           /* In an elaborated-type-specifier, names are assumed to name
9372              types, so we set IS_TYPE to TRUE when calling
9373              cp_parser_lookup_name.  */
9374           decl = cp_parser_lookup_name (parser, identifier,
9375                                         /*is_type=*/true,
9376                                         /*is_template=*/false,
9377                                         /*is_namespace=*/false,
9378                                         /*check_dependency=*/true);
9379
9380           /* If we are parsing friend declaration, DECL may be a
9381              TEMPLATE_DECL tree node here.  However, we need to check
9382              whether this TEMPLATE_DECL results in valid code.  Consider
9383              the following example:
9384
9385                namespace N {
9386                  template <class T> class C {};
9387                }
9388                class X {
9389                  template <class T> friend class N::C; // #1, valid code
9390                };
9391                template <class T> class Y {
9392                  friend class N::C;                    // #2, invalid code
9393                };
9394
9395              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
9396              name lookup of `N::C'.  We see that friend declaration must
9397              be template for the code to be valid.  Note that
9398              processing_template_decl does not work here since it is
9399              always 1 for the above two cases.  */
9400
9401           decl = (cp_parser_maybe_treat_template_as_class
9402                   (decl, /*tag_name_p=*/is_friend
9403                          && parser->num_template_parameter_lists));
9404
9405           if (TREE_CODE (decl) != TYPE_DECL)
9406             {
9407               error ("expected type-name");
9408               return error_mark_node;
9409             }
9410
9411           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
9412             check_elaborated_type_specifier
9413               (tag_type, decl,
9414                (parser->num_template_parameter_lists
9415                 || DECL_SELF_REFERENCE_P (decl)));
9416
9417           type = TREE_TYPE (decl);
9418         }
9419       else
9420         {
9421           /* An elaborated-type-specifier sometimes introduces a new type and
9422              sometimes names an existing type.  Normally, the rule is that it
9423              introduces a new type only if there is not an existing type of
9424              the same name already in scope.  For example, given:
9425
9426                struct S {};
9427                void f() { struct S s; }
9428
9429              the `struct S' in the body of `f' is the same `struct S' as in
9430              the global scope; the existing definition is used.  However, if
9431              there were no global declaration, this would introduce a new
9432              local class named `S'.
9433
9434              An exception to this rule applies to the following code:
9435
9436                namespace N { struct S; }
9437
9438              Here, the elaborated-type-specifier names a new type
9439              unconditionally; even if there is already an `S' in the
9440              containing scope this declaration names a new type.
9441              This exception only applies if the elaborated-type-specifier
9442              forms the complete declaration:
9443
9444                [class.name]
9445
9446                A declaration consisting solely of `class-key identifier ;' is
9447                either a redeclaration of the name in the current scope or a
9448                forward declaration of the identifier as a class name.  It
9449                introduces the name into the current scope.
9450
9451              We are in this situation precisely when the next token is a `;'.
9452
9453              An exception to the exception is that a `friend' declaration does
9454              *not* name a new type; i.e., given:
9455
9456                struct S { friend struct T; };
9457
9458              `T' is not a new type in the scope of `S'.
9459
9460              Also, `new struct S' or `sizeof (struct S)' never results in the
9461              definition of a new type; a new type can only be declared in a
9462              declaration context.  */
9463
9464           /* Warn about attributes. They are ignored.  */
9465           if (attributes)
9466             warning ("type attributes are honored only at type definition");
9467
9468           type = xref_tag (tag_type, identifier,
9469                            (is_friend
9470                             || !is_declaration
9471                             || cp_lexer_next_token_is_not (parser->lexer,
9472                                                            CPP_SEMICOLON)),
9473                            parser->num_template_parameter_lists);
9474         }
9475     }
9476   if (tag_type != enum_type)
9477     cp_parser_check_class_key (tag_type, type);
9478
9479   /* A "<" cannot follow an elaborated type specifier.  If that
9480      happens, the user was probably trying to form a template-id.  */
9481   cp_parser_check_for_invalid_template_id (parser, type);
9482
9483   return type;
9484 }
9485
9486 /* Parse an enum-specifier.
9487
9488    enum-specifier:
9489      enum identifier [opt] { enumerator-list [opt] }
9490
9491    Returns an ENUM_TYPE representing the enumeration.  */
9492
9493 static tree
9494 cp_parser_enum_specifier (cp_parser* parser)
9495 {
9496   cp_token *token;
9497   tree identifier = NULL_TREE;
9498   tree type;
9499
9500   /* Look for the `enum' keyword.  */
9501   if (!cp_parser_require_keyword (parser, RID_ENUM, "`enum'"))
9502     return error_mark_node;
9503   /* Peek at the next token.  */
9504   token = cp_lexer_peek_token (parser->lexer);
9505
9506   /* See if it is an identifier.  */
9507   if (token->type == CPP_NAME)
9508     identifier = cp_parser_identifier (parser);
9509
9510   /* Look for the `{'.  */
9511   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
9512     return error_mark_node;
9513
9514   /* At this point, we're going ahead with the enum-specifier, even
9515      if some other problem occurs.  */
9516   cp_parser_commit_to_tentative_parse (parser);
9517
9518   /* Issue an error message if type-definitions are forbidden here.  */
9519   cp_parser_check_type_definition (parser);
9520
9521   /* Create the new type.  */
9522   type = start_enum (identifier ? identifier : make_anon_name ());
9523
9524   /* Peek at the next token.  */
9525   token = cp_lexer_peek_token (parser->lexer);
9526   /* If it's not a `}', then there are some enumerators.  */
9527   if (token->type != CPP_CLOSE_BRACE)
9528     cp_parser_enumerator_list (parser, type);
9529   /* Look for the `}'.  */
9530   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
9531
9532   /* Finish up the enumeration.  */
9533   finish_enum (type);
9534
9535   return type;
9536 }
9537
9538 /* Parse an enumerator-list.  The enumerators all have the indicated
9539    TYPE.
9540
9541    enumerator-list:
9542      enumerator-definition
9543      enumerator-list , enumerator-definition  */
9544
9545 static void
9546 cp_parser_enumerator_list (cp_parser* parser, tree type)
9547 {
9548   while (true)
9549     {
9550       cp_token *token;
9551
9552       /* Parse an enumerator-definition.  */
9553       cp_parser_enumerator_definition (parser, type);
9554       /* Peek at the next token.  */
9555       token = cp_lexer_peek_token (parser->lexer);
9556       /* If it's not a `,', then we've reached the end of the
9557          list.  */
9558       if (token->type != CPP_COMMA)
9559         break;
9560       /* Otherwise, consume the `,' and keep going.  */
9561       cp_lexer_consume_token (parser->lexer);
9562       /* If the next token is a `}', there is a trailing comma.  */
9563       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
9564         {
9565           if (pedantic && !in_system_header)
9566             pedwarn ("comma at end of enumerator list");
9567           break;
9568         }
9569     }
9570 }
9571
9572 /* Parse an enumerator-definition.  The enumerator has the indicated
9573    TYPE.
9574
9575    enumerator-definition:
9576      enumerator
9577      enumerator = constant-expression
9578
9579    enumerator:
9580      identifier  */
9581
9582 static void
9583 cp_parser_enumerator_definition (cp_parser* parser, tree type)
9584 {
9585   cp_token *token;
9586   tree identifier;
9587   tree value;
9588
9589   /* Look for the identifier.  */
9590   identifier = cp_parser_identifier (parser);
9591   if (identifier == error_mark_node)
9592     return;
9593
9594   /* Peek at the next token.  */
9595   token = cp_lexer_peek_token (parser->lexer);
9596   /* If it's an `=', then there's an explicit value.  */
9597   if (token->type == CPP_EQ)
9598     {
9599       /* Consume the `=' token.  */
9600       cp_lexer_consume_token (parser->lexer);
9601       /* Parse the value.  */
9602       value = cp_parser_constant_expression (parser,
9603                                              /*allow_non_constant_p=*/false,
9604                                              NULL);
9605     }
9606   else
9607     value = NULL_TREE;
9608
9609   /* Create the enumerator.  */
9610   build_enumerator (identifier, value, type);
9611 }
9612
9613 /* Parse a namespace-name.
9614
9615    namespace-name:
9616      original-namespace-name
9617      namespace-alias
9618
9619    Returns the NAMESPACE_DECL for the namespace.  */
9620
9621 static tree
9622 cp_parser_namespace_name (cp_parser* parser)
9623 {
9624   tree identifier;
9625   tree namespace_decl;
9626
9627   /* Get the name of the namespace.  */
9628   identifier = cp_parser_identifier (parser);
9629   if (identifier == error_mark_node)
9630     return error_mark_node;
9631
9632   /* Look up the identifier in the currently active scope.  Look only
9633      for namespaces, due to:
9634
9635        [basic.lookup.udir]
9636
9637        When looking up a namespace-name in a using-directive or alias
9638        definition, only namespace names are considered.
9639
9640      And:
9641
9642        [basic.lookup.qual]
9643
9644        During the lookup of a name preceding the :: scope resolution
9645        operator, object, function, and enumerator names are ignored.
9646
9647      (Note that cp_parser_class_or_namespace_name only calls this
9648      function if the token after the name is the scope resolution
9649      operator.)  */
9650   namespace_decl = cp_parser_lookup_name (parser, identifier,
9651                                           /*is_type=*/false,
9652                                           /*is_template=*/false,
9653                                           /*is_namespace=*/true,
9654                                           /*check_dependency=*/true);
9655   /* If it's not a namespace, issue an error.  */
9656   if (namespace_decl == error_mark_node
9657       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
9658     {
9659       cp_parser_error (parser, "expected namespace-name");
9660       namespace_decl = error_mark_node;
9661     }
9662
9663   return namespace_decl;
9664 }
9665
9666 /* Parse a namespace-definition.
9667
9668    namespace-definition:
9669      named-namespace-definition
9670      unnamed-namespace-definition
9671
9672    named-namespace-definition:
9673      original-namespace-definition
9674      extension-namespace-definition
9675
9676    original-namespace-definition:
9677      namespace identifier { namespace-body }
9678
9679    extension-namespace-definition:
9680      namespace original-namespace-name { namespace-body }
9681
9682    unnamed-namespace-definition:
9683      namespace { namespace-body } */
9684
9685 static void
9686 cp_parser_namespace_definition (cp_parser* parser)
9687 {
9688   tree identifier;
9689
9690   /* Look for the `namespace' keyword.  */
9691   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
9692
9693   /* Get the name of the namespace.  We do not attempt to distinguish
9694      between an original-namespace-definition and an
9695      extension-namespace-definition at this point.  The semantic
9696      analysis routines are responsible for that.  */
9697   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9698     identifier = cp_parser_identifier (parser);
9699   else
9700     identifier = NULL_TREE;
9701
9702   /* Look for the `{' to start the namespace.  */
9703   cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
9704   /* Start the namespace.  */
9705   push_namespace (identifier);
9706   /* Parse the body of the namespace.  */
9707   cp_parser_namespace_body (parser);
9708   /* Finish the namespace.  */
9709   pop_namespace ();
9710   /* Look for the final `}'.  */
9711   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
9712 }
9713
9714 /* Parse a namespace-body.
9715
9716    namespace-body:
9717      declaration-seq [opt]  */
9718
9719 static void
9720 cp_parser_namespace_body (cp_parser* parser)
9721 {
9722   cp_parser_declaration_seq_opt (parser);
9723 }
9724
9725 /* Parse a namespace-alias-definition.
9726
9727    namespace-alias-definition:
9728      namespace identifier = qualified-namespace-specifier ;  */
9729
9730 static void
9731 cp_parser_namespace_alias_definition (cp_parser* parser)
9732 {
9733   tree identifier;
9734   tree namespace_specifier;
9735
9736   /* Look for the `namespace' keyword.  */
9737   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
9738   /* Look for the identifier.  */
9739   identifier = cp_parser_identifier (parser);
9740   if (identifier == error_mark_node)
9741     return;
9742   /* Look for the `=' token.  */
9743   cp_parser_require (parser, CPP_EQ, "`='");
9744   /* Look for the qualified-namespace-specifier.  */
9745   namespace_specifier
9746     = cp_parser_qualified_namespace_specifier (parser);
9747   /* Look for the `;' token.  */
9748   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
9749
9750   /* Register the alias in the symbol table.  */
9751   do_namespace_alias (identifier, namespace_specifier);
9752 }
9753
9754 /* Parse a qualified-namespace-specifier.
9755
9756    qualified-namespace-specifier:
9757      :: [opt] nested-name-specifier [opt] namespace-name
9758
9759    Returns a NAMESPACE_DECL corresponding to the specified
9760    namespace.  */
9761
9762 static tree
9763 cp_parser_qualified_namespace_specifier (cp_parser* parser)
9764 {
9765   /* Look for the optional `::'.  */
9766   cp_parser_global_scope_opt (parser,
9767                               /*current_scope_valid_p=*/false);
9768
9769   /* Look for the optional nested-name-specifier.  */
9770   cp_parser_nested_name_specifier_opt (parser,
9771                                        /*typename_keyword_p=*/false,
9772                                        /*check_dependency_p=*/true,
9773                                        /*type_p=*/false,
9774                                        /*is_declaration=*/true);
9775
9776   return cp_parser_namespace_name (parser);
9777 }
9778
9779 /* Parse a using-declaration.
9780
9781    using-declaration:
9782      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
9783      using :: unqualified-id ;  */
9784
9785 static void
9786 cp_parser_using_declaration (cp_parser* parser)
9787 {
9788   cp_token *token;
9789   bool typename_p = false;
9790   bool global_scope_p;
9791   tree decl;
9792   tree identifier;
9793   tree scope;
9794   tree qscope;
9795
9796   /* Look for the `using' keyword.  */
9797   cp_parser_require_keyword (parser, RID_USING, "`using'");
9798
9799   /* Peek at the next token.  */
9800   token = cp_lexer_peek_token (parser->lexer);
9801   /* See if it's `typename'.  */
9802   if (token->keyword == RID_TYPENAME)
9803     {
9804       /* Remember that we've seen it.  */
9805       typename_p = true;
9806       /* Consume the `typename' token.  */
9807       cp_lexer_consume_token (parser->lexer);
9808     }
9809
9810   /* Look for the optional global scope qualification.  */
9811   global_scope_p
9812     = (cp_parser_global_scope_opt (parser,
9813                                    /*current_scope_valid_p=*/false)
9814        != NULL_TREE);
9815
9816   /* If we saw `typename', or didn't see `::', then there must be a
9817      nested-name-specifier present.  */
9818   if (typename_p || !global_scope_p)
9819     qscope = cp_parser_nested_name_specifier (parser, typename_p,
9820                                               /*check_dependency_p=*/true,
9821                                               /*type_p=*/false,
9822                                               /*is_declaration=*/true);
9823   /* Otherwise, we could be in either of the two productions.  In that
9824      case, treat the nested-name-specifier as optional.  */
9825   else
9826     qscope = cp_parser_nested_name_specifier_opt (parser,
9827                                                   /*typename_keyword_p=*/false,
9828                                                   /*check_dependency_p=*/true,
9829                                                   /*type_p=*/false,
9830                                                   /*is_declaration=*/true);
9831   if (!qscope)
9832     qscope = global_namespace;
9833
9834   /* Parse the unqualified-id.  */
9835   identifier = cp_parser_unqualified_id (parser,
9836                                          /*template_keyword_p=*/false,
9837                                          /*check_dependency_p=*/true,
9838                                          /*declarator_p=*/true);
9839
9840   /* The function we call to handle a using-declaration is different
9841      depending on what scope we are in.  */
9842   if (identifier == error_mark_node)
9843     ;
9844   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
9845            && TREE_CODE (identifier) != BIT_NOT_EXPR)
9846     /* [namespace.udecl]
9847
9848        A using declaration shall not name a template-id.  */
9849     error ("a template-id may not appear in a using-declaration");
9850   else
9851     {
9852       scope = current_scope ();
9853       if (scope && TYPE_P (scope))
9854         {
9855           /* Create the USING_DECL.  */
9856           decl = do_class_using_decl (build_nt (SCOPE_REF,
9857                                                 parser->scope,
9858                                                 identifier));
9859           /* Add it to the list of members in this class.  */
9860           finish_member_declaration (decl);
9861         }
9862       else
9863         {
9864           decl = cp_parser_lookup_name_simple (parser, identifier);
9865           if (decl == error_mark_node)
9866             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
9867           else if (scope)
9868             do_local_using_decl (decl, qscope, identifier);
9869           else
9870             do_toplevel_using_decl (decl, qscope, identifier);
9871         }
9872     }
9873
9874   /* Look for the final `;'.  */
9875   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
9876 }
9877
9878 /* Parse a using-directive.
9879
9880    using-directive:
9881      using namespace :: [opt] nested-name-specifier [opt]
9882        namespace-name ;  */
9883
9884 static void
9885 cp_parser_using_directive (cp_parser* parser)
9886 {
9887   tree namespace_decl;
9888   tree attribs;
9889
9890   /* Look for the `using' keyword.  */
9891   cp_parser_require_keyword (parser, RID_USING, "`using'");
9892   /* And the `namespace' keyword.  */
9893   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
9894   /* Look for the optional `::' operator.  */
9895   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
9896   /* And the optional nested-name-specifier.  */
9897   cp_parser_nested_name_specifier_opt (parser,
9898                                        /*typename_keyword_p=*/false,
9899                                        /*check_dependency_p=*/true,
9900                                        /*type_p=*/false,
9901                                        /*is_declaration=*/true);
9902   /* Get the namespace being used.  */
9903   namespace_decl = cp_parser_namespace_name (parser);
9904   /* And any specified attributes.  */
9905   attribs = cp_parser_attributes_opt (parser);
9906   /* Update the symbol table.  */
9907   parse_using_directive (namespace_decl, attribs);
9908   /* Look for the final `;'.  */
9909   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
9910 }
9911
9912 /* Parse an asm-definition.
9913
9914    asm-definition:
9915      asm ( string-literal ) ;
9916
9917    GNU Extension:
9918
9919    asm-definition:
9920      asm volatile [opt] ( string-literal ) ;
9921      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
9922      asm volatile [opt] ( string-literal : asm-operand-list [opt]
9923                           : asm-operand-list [opt] ) ;
9924      asm volatile [opt] ( string-literal : asm-operand-list [opt]
9925                           : asm-operand-list [opt]
9926                           : asm-operand-list [opt] ) ;  */
9927
9928 static void
9929 cp_parser_asm_definition (cp_parser* parser)
9930 {
9931   cp_token *token;
9932   tree string;
9933   tree outputs = NULL_TREE;
9934   tree inputs = NULL_TREE;
9935   tree clobbers = NULL_TREE;
9936   tree asm_stmt;
9937   bool volatile_p = false;
9938   bool extended_p = false;
9939
9940   /* Look for the `asm' keyword.  */
9941   cp_parser_require_keyword (parser, RID_ASM, "`asm'");
9942   /* See if the next token is `volatile'.  */
9943   if (cp_parser_allow_gnu_extensions_p (parser)
9944       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
9945     {
9946       /* Remember that we saw the `volatile' keyword.  */
9947       volatile_p = true;
9948       /* Consume the token.  */
9949       cp_lexer_consume_token (parser->lexer);
9950     }
9951   /* Look for the opening `('.  */
9952   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
9953   /* Look for the string.  */
9954   c_lex_string_translate = 0;
9955   token = cp_parser_require (parser, CPP_STRING, "asm body");
9956   if (!token)
9957     goto finish;
9958   string = token->value;
9959   /* If we're allowing GNU extensions, check for the extended assembly
9960      syntax.  Unfortunately, the `:' tokens need not be separated by
9961      a space in C, and so, for compatibility, we tolerate that here
9962      too.  Doing that means that we have to treat the `::' operator as
9963      two `:' tokens.  */
9964   if (cp_parser_allow_gnu_extensions_p (parser)
9965       && at_function_scope_p ()
9966       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
9967           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
9968     {
9969       bool inputs_p = false;
9970       bool clobbers_p = false;
9971
9972       /* The extended syntax was used.  */
9973       extended_p = true;
9974
9975       /* Look for outputs.  */
9976       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
9977         {
9978           /* Consume the `:'.  */
9979           cp_lexer_consume_token (parser->lexer);
9980           /* Parse the output-operands.  */
9981           if (cp_lexer_next_token_is_not (parser->lexer,
9982                                           CPP_COLON)
9983               && cp_lexer_next_token_is_not (parser->lexer,
9984                                              CPP_SCOPE)
9985               && cp_lexer_next_token_is_not (parser->lexer,
9986                                              CPP_CLOSE_PAREN))
9987             outputs = cp_parser_asm_operand_list (parser);
9988         }
9989       /* If the next token is `::', there are no outputs, and the
9990          next token is the beginning of the inputs.  */
9991       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
9992         {
9993           /* Consume the `::' token.  */
9994           cp_lexer_consume_token (parser->lexer);
9995           /* The inputs are coming next.  */
9996           inputs_p = true;
9997         }
9998
9999       /* Look for inputs.  */
10000       if (inputs_p
10001           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10002         {
10003           if (!inputs_p)
10004             /* Consume the `:'.  */
10005             cp_lexer_consume_token (parser->lexer);
10006           /* Parse the output-operands.  */
10007           if (cp_lexer_next_token_is_not (parser->lexer,
10008                                           CPP_COLON)
10009               && cp_lexer_next_token_is_not (parser->lexer,
10010                                              CPP_SCOPE)
10011               && cp_lexer_next_token_is_not (parser->lexer,
10012                                              CPP_CLOSE_PAREN))
10013             inputs = cp_parser_asm_operand_list (parser);
10014         }
10015       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10016         /* The clobbers are coming next.  */
10017         clobbers_p = true;
10018
10019       /* Look for clobbers.  */
10020       if (clobbers_p
10021           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10022         {
10023           if (!clobbers_p)
10024             /* Consume the `:'.  */
10025             cp_lexer_consume_token (parser->lexer);
10026           /* Parse the clobbers.  */
10027           if (cp_lexer_next_token_is_not (parser->lexer,
10028                                           CPP_CLOSE_PAREN))
10029             clobbers = cp_parser_asm_clobber_list (parser);
10030         }
10031     }
10032   /* Look for the closing `)'.  */
10033   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
10034     cp_parser_skip_to_closing_parenthesis (parser, true, false,
10035                                            /*consume_paren=*/true);
10036   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10037
10038   /* Create the ASM_EXPR.  */
10039   if (at_function_scope_p ())
10040     {
10041       asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
10042                                   inputs, clobbers);
10043       /* If the extended syntax was not used, mark the ASM_EXPR.  */
10044       if (!extended_p)
10045         ASM_INPUT_P (asm_stmt) = 1;
10046     }
10047   else
10048     assemble_asm (string);
10049
10050  finish:
10051   c_lex_string_translate = 1;
10052 }
10053
10054 /* Declarators [gram.dcl.decl] */
10055
10056 /* Parse an init-declarator.
10057
10058    init-declarator:
10059      declarator initializer [opt]
10060
10061    GNU Extension:
10062
10063    init-declarator:
10064      declarator asm-specification [opt] attributes [opt] initializer [opt]
10065
10066    function-definition:
10067      decl-specifier-seq [opt] declarator ctor-initializer [opt]
10068        function-body
10069      decl-specifier-seq [opt] declarator function-try-block
10070
10071    GNU Extension:
10072
10073    function-definition:
10074      __extension__ function-definition
10075
10076    The DECL_SPECIFIERS and PREFIX_ATTRIBUTES apply to this declarator.
10077    Returns a representation of the entity declared.  If MEMBER_P is TRUE,
10078    then this declarator appears in a class scope.  The new DECL created
10079    by this declarator is returned.
10080
10081    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
10082    for a function-definition here as well.  If the declarator is a
10083    declarator for a function-definition, *FUNCTION_DEFINITION_P will
10084    be TRUE upon return.  By that point, the function-definition will
10085    have been completely parsed.
10086
10087    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
10088    is FALSE.  */
10089
10090 static tree
10091 cp_parser_init_declarator (cp_parser* parser,
10092                            tree decl_specifiers,
10093                            tree prefix_attributes,
10094                            bool function_definition_allowed_p,
10095                            bool member_p,
10096                            int declares_class_or_enum,
10097                            bool* function_definition_p)
10098 {
10099   cp_token *token;
10100   tree declarator;
10101   tree attributes;
10102   tree asm_specification;
10103   tree initializer;
10104   tree decl = NULL_TREE;
10105   tree scope;
10106   bool is_initialized;
10107   bool is_parenthesized_init;
10108   bool is_non_constant_init;
10109   int ctor_dtor_or_conv_p;
10110   bool friend_p;
10111   bool pop_p = false;
10112
10113   /* Assume that this is not the declarator for a function
10114      definition.  */
10115   if (function_definition_p)
10116     *function_definition_p = false;
10117
10118   /* Defer access checks while parsing the declarator; we cannot know
10119      what names are accessible until we know what is being
10120      declared.  */
10121   resume_deferring_access_checks ();
10122
10123   /* Parse the declarator.  */
10124   declarator
10125     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10126                             &ctor_dtor_or_conv_p,
10127                             /*parenthesized_p=*/NULL);
10128   /* Gather up the deferred checks.  */
10129   stop_deferring_access_checks ();
10130
10131   /* If the DECLARATOR was erroneous, there's no need to go
10132      further.  */
10133   if (declarator == error_mark_node)
10134     return error_mark_node;
10135
10136   cp_parser_check_for_definition_in_return_type (declarator,
10137                                                  declares_class_or_enum);
10138
10139   /* Figure out what scope the entity declared by the DECLARATOR is
10140      located in.  `grokdeclarator' sometimes changes the scope, so
10141      we compute it now.  */
10142   scope = get_scope_of_declarator (declarator);
10143
10144   /* If we're allowing GNU extensions, look for an asm-specification
10145      and attributes.  */
10146   if (cp_parser_allow_gnu_extensions_p (parser))
10147     {
10148       /* Look for an asm-specification.  */
10149       asm_specification = cp_parser_asm_specification_opt (parser);
10150       /* And attributes.  */
10151       attributes = cp_parser_attributes_opt (parser);
10152     }
10153   else
10154     {
10155       asm_specification = NULL_TREE;
10156       attributes = NULL_TREE;
10157     }
10158
10159   /* Peek at the next token.  */
10160   token = cp_lexer_peek_token (parser->lexer);
10161   /* Check to see if the token indicates the start of a
10162      function-definition.  */
10163   if (cp_parser_token_starts_function_definition_p (token))
10164     {
10165       if (!function_definition_allowed_p)
10166         {
10167           /* If a function-definition should not appear here, issue an
10168              error message.  */
10169           cp_parser_error (parser,
10170                            "a function-definition is not allowed here");
10171           return error_mark_node;
10172         }
10173       else
10174         {
10175           /* Neither attributes nor an asm-specification are allowed
10176              on a function-definition.  */
10177           if (asm_specification)
10178             error ("an asm-specification is not allowed on a function-definition");
10179           if (attributes)
10180             error ("attributes are not allowed on a function-definition");
10181           /* This is a function-definition.  */
10182           *function_definition_p = true;
10183
10184           /* Parse the function definition.  */
10185           if (member_p)
10186             decl = cp_parser_save_member_function_body (parser,
10187                                                         decl_specifiers,
10188                                                         declarator,
10189                                                         prefix_attributes);
10190           else
10191             decl
10192               = (cp_parser_function_definition_from_specifiers_and_declarator
10193                  (parser, decl_specifiers, prefix_attributes, declarator));
10194
10195           return decl;
10196         }
10197     }
10198
10199   /* [dcl.dcl]
10200
10201      Only in function declarations for constructors, destructors, and
10202      type conversions can the decl-specifier-seq be omitted.
10203
10204      We explicitly postpone this check past the point where we handle
10205      function-definitions because we tolerate function-definitions
10206      that are missing their return types in some modes.  */
10207   if (!decl_specifiers && ctor_dtor_or_conv_p <= 0)
10208     {
10209       cp_parser_error (parser,
10210                        "expected constructor, destructor, or type conversion");
10211       return error_mark_node;
10212     }
10213
10214   /* An `=' or an `(' indicates an initializer.  */
10215   is_initialized = (token->type == CPP_EQ
10216                      || token->type == CPP_OPEN_PAREN);
10217   /* If the init-declarator isn't initialized and isn't followed by a
10218      `,' or `;', it's not a valid init-declarator.  */
10219   if (!is_initialized
10220       && token->type != CPP_COMMA
10221       && token->type != CPP_SEMICOLON)
10222     {
10223       cp_parser_error (parser, "expected init-declarator");
10224       return error_mark_node;
10225     }
10226
10227   /* Because start_decl has side-effects, we should only call it if we
10228      know we're going ahead.  By this point, we know that we cannot
10229      possibly be looking at any other construct.  */
10230   cp_parser_commit_to_tentative_parse (parser);
10231
10232   /* If the decl specifiers were bad, issue an error now that we're
10233      sure this was intended to be a declarator.  Then continue
10234      declaring the variable(s), as int, to try to cut down on further
10235      errors.  */
10236   if (decl_specifiers != NULL
10237       && TREE_VALUE (decl_specifiers) == error_mark_node)
10238     {
10239       cp_parser_error (parser, "invalid type in declaration");
10240       TREE_VALUE (decl_specifiers) = integer_type_node;
10241     }
10242
10243   /* Check to see whether or not this declaration is a friend.  */
10244   friend_p = cp_parser_friend_p (decl_specifiers);
10245
10246   /* Check that the number of template-parameter-lists is OK.  */
10247   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
10248     return error_mark_node;
10249
10250   /* Enter the newly declared entry in the symbol table.  If we're
10251      processing a declaration in a class-specifier, we wait until
10252      after processing the initializer.  */
10253   if (!member_p)
10254     {
10255       if (parser->in_unbraced_linkage_specification_p)
10256         {
10257           decl_specifiers = tree_cons (error_mark_node,
10258                                        get_identifier ("extern"),
10259                                        decl_specifiers);
10260           have_extern_spec = false;
10261         }
10262       decl = start_decl (declarator, decl_specifiers,
10263                          is_initialized, attributes, prefix_attributes);
10264     }
10265
10266   /* Enter the SCOPE.  That way unqualified names appearing in the
10267      initializer will be looked up in SCOPE.  */
10268   if (scope)
10269     pop_p = push_scope (scope);
10270
10271   /* Perform deferred access control checks, now that we know in which
10272      SCOPE the declared entity resides.  */
10273   if (!member_p && decl)
10274     {
10275       tree saved_current_function_decl = NULL_TREE;
10276
10277       /* If the entity being declared is a function, pretend that we
10278          are in its scope.  If it is a `friend', it may have access to
10279          things that would not otherwise be accessible.  */
10280       if (TREE_CODE (decl) == FUNCTION_DECL)
10281         {
10282           saved_current_function_decl = current_function_decl;
10283           current_function_decl = decl;
10284         }
10285
10286       /* Perform the access control checks for the declarator and the
10287          the decl-specifiers.  */
10288       perform_deferred_access_checks ();
10289
10290       /* Restore the saved value.  */
10291       if (TREE_CODE (decl) == FUNCTION_DECL)
10292         current_function_decl = saved_current_function_decl;
10293     }
10294
10295   /* Parse the initializer.  */
10296   if (is_initialized)
10297     initializer = cp_parser_initializer (parser,
10298                                          &is_parenthesized_init,
10299                                          &is_non_constant_init);
10300   else
10301     {
10302       initializer = NULL_TREE;
10303       is_parenthesized_init = false;
10304       is_non_constant_init = true;
10305     }
10306
10307   /* The old parser allows attributes to appear after a parenthesized
10308      initializer.  Mark Mitchell proposed removing this functionality
10309      on the GCC mailing lists on 2002-08-13.  This parser accepts the
10310      attributes -- but ignores them.  */
10311   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
10312     if (cp_parser_attributes_opt (parser))
10313       warning ("attributes after parenthesized initializer ignored");
10314
10315   /* Leave the SCOPE, now that we have processed the initializer.  It
10316      is important to do this before calling cp_finish_decl because it
10317      makes decisions about whether to create DECL_STMTs or not based
10318      on the current scope.  */
10319   if (pop_p)
10320     pop_scope (scope);
10321
10322   /* For an in-class declaration, use `grokfield' to create the
10323      declaration.  */
10324   if (member_p)
10325     {
10326       decl = grokfield (declarator, decl_specifiers,
10327                         initializer, /*asmspec=*/NULL_TREE,
10328                         /*attributes=*/NULL_TREE);
10329       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
10330         cp_parser_save_default_args (parser, decl);
10331     }
10332
10333   /* Finish processing the declaration.  But, skip friend
10334      declarations.  */
10335   if (!friend_p && decl)
10336     cp_finish_decl (decl,
10337                     initializer,
10338                     asm_specification,
10339                     /* If the initializer is in parentheses, then this is
10340                        a direct-initialization, which means that an
10341                        `explicit' constructor is OK.  Otherwise, an
10342                        `explicit' constructor cannot be used.  */
10343                     ((is_parenthesized_init || !is_initialized)
10344                      ? 0 : LOOKUP_ONLYCONVERTING));
10345
10346   /* Remember whether or not variables were initialized by
10347      constant-expressions.  */
10348   if (decl && TREE_CODE (decl) == VAR_DECL
10349       && is_initialized && !is_non_constant_init)
10350     DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
10351
10352   return decl;
10353 }
10354
10355 /* Parse a declarator.
10356
10357    declarator:
10358      direct-declarator
10359      ptr-operator declarator
10360
10361    abstract-declarator:
10362      ptr-operator abstract-declarator [opt]
10363      direct-abstract-declarator
10364
10365    GNU Extensions:
10366
10367    declarator:
10368      attributes [opt] direct-declarator
10369      attributes [opt] ptr-operator declarator
10370
10371    abstract-declarator:
10372      attributes [opt] ptr-operator abstract-declarator [opt]
10373      attributes [opt] direct-abstract-declarator
10374
10375    Returns a representation of the declarator.  If the declarator has
10376    the form `* declarator', then an INDIRECT_REF is returned, whose
10377    only operand is the sub-declarator.  Analogously, `& declarator' is
10378    represented as an ADDR_EXPR.  For `X::* declarator', a SCOPE_REF is
10379    used.  The first operand is the TYPE for `X'.  The second operand
10380    is an INDIRECT_REF whose operand is the sub-declarator.
10381
10382    Otherwise, the representation is as for a direct-declarator.
10383
10384    (It would be better to define a structure type to represent
10385    declarators, rather than abusing `tree' nodes to represent
10386    declarators.  That would be much clearer and save some memory.
10387    There is no reason for declarators to be garbage-collected, for
10388    example; they are created during parser and no longer needed after
10389    `grokdeclarator' has been called.)
10390
10391    For a ptr-operator that has the optional cv-qualifier-seq,
10392    cv-qualifiers will be stored in the TREE_TYPE of the INDIRECT_REF
10393    node.
10394
10395    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
10396    detect constructor, destructor or conversion operators. It is set
10397    to -1 if the declarator is a name, and +1 if it is a
10398    function. Otherwise it is set to zero. Usually you just want to
10399    test for >0, but internally the negative value is used.
10400
10401    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
10402    a decl-specifier-seq unless it declares a constructor, destructor,
10403    or conversion.  It might seem that we could check this condition in
10404    semantic analysis, rather than parsing, but that makes it difficult
10405    to handle something like `f()'.  We want to notice that there are
10406    no decl-specifiers, and therefore realize that this is an
10407    expression, not a declaration.)
10408
10409    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
10410    the declarator is a direct-declarator of the form "(...)".  */
10411
10412 static tree
10413 cp_parser_declarator (cp_parser* parser,
10414                       cp_parser_declarator_kind dcl_kind,
10415                       int* ctor_dtor_or_conv_p,
10416                       bool* parenthesized_p)
10417 {
10418   cp_token *token;
10419   tree declarator;
10420   enum tree_code code;
10421   tree cv_qualifier_seq;
10422   tree class_type;
10423   tree attributes = NULL_TREE;
10424
10425   /* Assume this is not a constructor, destructor, or type-conversion
10426      operator.  */
10427   if (ctor_dtor_or_conv_p)
10428     *ctor_dtor_or_conv_p = 0;
10429
10430   if (cp_parser_allow_gnu_extensions_p (parser))
10431     attributes = cp_parser_attributes_opt (parser);
10432
10433   /* Peek at the next token.  */
10434   token = cp_lexer_peek_token (parser->lexer);
10435
10436   /* Check for the ptr-operator production.  */
10437   cp_parser_parse_tentatively (parser);
10438   /* Parse the ptr-operator.  */
10439   code = cp_parser_ptr_operator (parser,
10440                                  &class_type,
10441                                  &cv_qualifier_seq);
10442   /* If that worked, then we have a ptr-operator.  */
10443   if (cp_parser_parse_definitely (parser))
10444     {
10445       /* If a ptr-operator was found, then this declarator was not
10446          parenthesized.  */
10447       if (parenthesized_p)
10448         *parenthesized_p = true;
10449       /* The dependent declarator is optional if we are parsing an
10450          abstract-declarator.  */
10451       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
10452         cp_parser_parse_tentatively (parser);
10453
10454       /* Parse the dependent declarator.  */
10455       declarator = cp_parser_declarator (parser, dcl_kind,
10456                                          /*ctor_dtor_or_conv_p=*/NULL,
10457                                          /*parenthesized_p=*/NULL);
10458
10459       /* If we are parsing an abstract-declarator, we must handle the
10460          case where the dependent declarator is absent.  */
10461       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
10462           && !cp_parser_parse_definitely (parser))
10463         declarator = NULL_TREE;
10464
10465       /* Build the representation of the ptr-operator.  */
10466       if (code == INDIRECT_REF)
10467         declarator = make_pointer_declarator (cv_qualifier_seq,
10468                                               declarator);
10469       else
10470         declarator = make_reference_declarator (cv_qualifier_seq,
10471                                                 declarator);
10472       /* Handle the pointer-to-member case.  */
10473       if (class_type)
10474         declarator = build_nt (SCOPE_REF, class_type, declarator);
10475     }
10476   /* Everything else is a direct-declarator.  */
10477   else
10478     {
10479       if (parenthesized_p)
10480         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
10481                                                    CPP_OPEN_PAREN);
10482       declarator = cp_parser_direct_declarator (parser, dcl_kind,
10483                                                 ctor_dtor_or_conv_p);
10484     }
10485
10486   if (attributes && declarator != error_mark_node)
10487     declarator = tree_cons (attributes, declarator, NULL_TREE);
10488
10489   return declarator;
10490 }
10491
10492 /* Parse a direct-declarator or direct-abstract-declarator.
10493
10494    direct-declarator:
10495      declarator-id
10496      direct-declarator ( parameter-declaration-clause )
10497        cv-qualifier-seq [opt]
10498        exception-specification [opt]
10499      direct-declarator [ constant-expression [opt] ]
10500      ( declarator )
10501
10502    direct-abstract-declarator:
10503      direct-abstract-declarator [opt]
10504        ( parameter-declaration-clause )
10505        cv-qualifier-seq [opt]
10506        exception-specification [opt]
10507      direct-abstract-declarator [opt] [ constant-expression [opt] ]
10508      ( abstract-declarator )
10509
10510    Returns a representation of the declarator.  DCL_KIND is
10511    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
10512    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
10513    we are parsing a direct-declarator.  It is
10514    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
10515    of ambiguity we prefer an abstract declarator, as per
10516    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P is as for
10517    cp_parser_declarator.
10518
10519    For the declarator-id production, the representation is as for an
10520    id-expression, except that a qualified name is represented as a
10521    SCOPE_REF.  A function-declarator is represented as a CALL_EXPR;
10522    see the documentation of the FUNCTION_DECLARATOR_* macros for
10523    information about how to find the various declarator components.
10524    An array-declarator is represented as an ARRAY_REF.  The
10525    direct-declarator is the first operand; the constant-expression
10526    indicating the size of the array is the second operand.  */
10527
10528 static tree
10529 cp_parser_direct_declarator (cp_parser* parser,
10530                              cp_parser_declarator_kind dcl_kind,
10531                              int* ctor_dtor_or_conv_p)
10532 {
10533   cp_token *token;
10534   tree declarator = NULL_TREE;
10535   tree scope = NULL_TREE;
10536   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
10537   bool saved_in_declarator_p = parser->in_declarator_p;
10538   bool first = true;
10539   bool pop_p = false;
10540
10541   while (true)
10542     {
10543       /* Peek at the next token.  */
10544       token = cp_lexer_peek_token (parser->lexer);
10545       if (token->type == CPP_OPEN_PAREN)
10546         {
10547           /* This is either a parameter-declaration-clause, or a
10548              parenthesized declarator. When we know we are parsing a
10549              named declarator, it must be a parenthesized declarator
10550              if FIRST is true. For instance, `(int)' is a
10551              parameter-declaration-clause, with an omitted
10552              direct-abstract-declarator. But `((*))', is a
10553              parenthesized abstract declarator. Finally, when T is a
10554              template parameter `(T)' is a
10555              parameter-declaration-clause, and not a parenthesized
10556              named declarator.
10557
10558              We first try and parse a parameter-declaration-clause,
10559              and then try a nested declarator (if FIRST is true).
10560
10561              It is not an error for it not to be a
10562              parameter-declaration-clause, even when FIRST is
10563              false. Consider,
10564
10565                int i (int);
10566                int i (3);
10567
10568              The first is the declaration of a function while the
10569              second is a the definition of a variable, including its
10570              initializer.
10571
10572              Having seen only the parenthesis, we cannot know which of
10573              these two alternatives should be selected.  Even more
10574              complex are examples like:
10575
10576                int i (int (a));
10577                int i (int (3));
10578
10579              The former is a function-declaration; the latter is a
10580              variable initialization.
10581
10582              Thus again, we try a parameter-declaration-clause, and if
10583              that fails, we back out and return.  */
10584
10585           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
10586             {
10587               tree params;
10588               unsigned saved_num_template_parameter_lists;
10589
10590               cp_parser_parse_tentatively (parser);
10591
10592               /* Consume the `('.  */
10593               cp_lexer_consume_token (parser->lexer);
10594               if (first)
10595                 {
10596                   /* If this is going to be an abstract declarator, we're
10597                      in a declarator and we can't have default args.  */
10598                   parser->default_arg_ok_p = false;
10599                   parser->in_declarator_p = true;
10600                 }
10601
10602               /* Inside the function parameter list, surrounding
10603                  template-parameter-lists do not apply.  */
10604               saved_num_template_parameter_lists
10605                 = parser->num_template_parameter_lists;
10606               parser->num_template_parameter_lists = 0;
10607
10608               /* Parse the parameter-declaration-clause.  */
10609               params = cp_parser_parameter_declaration_clause (parser);
10610
10611               parser->num_template_parameter_lists
10612                 = saved_num_template_parameter_lists;
10613
10614               /* If all went well, parse the cv-qualifier-seq and the
10615                  exception-specification.  */
10616               if (cp_parser_parse_definitely (parser))
10617                 {
10618                   tree cv_qualifiers;
10619                   tree exception_specification;
10620
10621                   if (ctor_dtor_or_conv_p)
10622                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
10623                   first = false;
10624                   /* Consume the `)'.  */
10625                   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
10626
10627                   /* Parse the cv-qualifier-seq.  */
10628                   cv_qualifiers = cp_parser_cv_qualifier_seq_opt (parser);
10629                   /* And the exception-specification.  */
10630                   exception_specification
10631                     = cp_parser_exception_specification_opt (parser);
10632
10633                   /* Create the function-declarator.  */
10634                   declarator = make_call_declarator (declarator,
10635                                                      params,
10636                                                      cv_qualifiers,
10637                                                      exception_specification);
10638                   /* Any subsequent parameter lists are to do with
10639                      return type, so are not those of the declared
10640                      function.  */
10641                   parser->default_arg_ok_p = false;
10642
10643                   /* Repeat the main loop.  */
10644                   continue;
10645                 }
10646             }
10647
10648           /* If this is the first, we can try a parenthesized
10649              declarator.  */
10650           if (first)
10651             {
10652               bool saved_in_type_id_in_expr_p;
10653
10654               parser->default_arg_ok_p = saved_default_arg_ok_p;
10655               parser->in_declarator_p = saved_in_declarator_p;
10656
10657               /* Consume the `('.  */
10658               cp_lexer_consume_token (parser->lexer);
10659               /* Parse the nested declarator.  */
10660               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
10661               parser->in_type_id_in_expr_p = true;
10662               declarator
10663                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
10664                                         /*parenthesized_p=*/NULL);
10665               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
10666               first = false;
10667               /* Expect a `)'.  */
10668               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
10669                 declarator = error_mark_node;
10670               if (declarator == error_mark_node)
10671                 break;
10672
10673               goto handle_declarator;
10674             }
10675           /* Otherwise, we must be done.  */
10676           else
10677             break;
10678         }
10679       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
10680                && token->type == CPP_OPEN_SQUARE)
10681         {
10682           /* Parse an array-declarator.  */
10683           tree bounds;
10684
10685           if (ctor_dtor_or_conv_p)
10686             *ctor_dtor_or_conv_p = 0;
10687
10688           first = false;
10689           parser->default_arg_ok_p = false;
10690           parser->in_declarator_p = true;
10691           /* Consume the `['.  */
10692           cp_lexer_consume_token (parser->lexer);
10693           /* Peek at the next token.  */
10694           token = cp_lexer_peek_token (parser->lexer);
10695           /* If the next token is `]', then there is no
10696              constant-expression.  */
10697           if (token->type != CPP_CLOSE_SQUARE)
10698             {
10699               bool non_constant_p;
10700
10701               bounds
10702                 = cp_parser_constant_expression (parser,
10703                                                  /*allow_non_constant=*/true,
10704                                                  &non_constant_p);
10705               if (!non_constant_p)
10706                 bounds = fold_non_dependent_expr (bounds);
10707             }
10708           else
10709             bounds = NULL_TREE;
10710           /* Look for the closing `]'.  */
10711           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
10712             {
10713               declarator = error_mark_node;
10714               break;
10715             }
10716
10717           declarator = build_nt (ARRAY_REF, declarator, bounds);
10718         }
10719       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
10720         {
10721           /* Parse a declarator-id */
10722           if (dcl_kind == CP_PARSER_DECLARATOR_EITHER)
10723             cp_parser_parse_tentatively (parser);
10724           declarator = cp_parser_declarator_id (parser);
10725           if (dcl_kind == CP_PARSER_DECLARATOR_EITHER)
10726             {
10727               if (!cp_parser_parse_definitely (parser))
10728                 declarator = error_mark_node;
10729               else if (TREE_CODE (declarator) != IDENTIFIER_NODE)
10730                 {
10731                   cp_parser_error (parser, "expected unqualified-id");
10732                   declarator = error_mark_node;
10733                 }
10734             }
10735
10736           if (declarator == error_mark_node)
10737             break;
10738
10739           if (TREE_CODE (declarator) == SCOPE_REF
10740               && !current_scope ())
10741             {
10742               tree scope = TREE_OPERAND (declarator, 0);
10743
10744               /* In the declaration of a member of a template class
10745                  outside of the class itself, the SCOPE will sometimes
10746                  be a TYPENAME_TYPE.  For example, given:
10747
10748                  template <typename T>
10749                  int S<T>::R::i = 3;
10750
10751                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
10752                  this context, we must resolve S<T>::R to an ordinary
10753                  type, rather than a typename type.
10754
10755                  The reason we normally avoid resolving TYPENAME_TYPEs
10756                  is that a specialization of `S' might render
10757                  `S<T>::R' not a type.  However, if `S' is
10758                  specialized, then this `i' will not be used, so there
10759                  is no harm in resolving the types here.  */
10760               if (TREE_CODE (scope) == TYPENAME_TYPE)
10761                 {
10762                   tree type;
10763
10764                   /* Resolve the TYPENAME_TYPE.  */
10765                   type = resolve_typename_type (scope,
10766                                                  /*only_current_p=*/false);
10767                   /* If that failed, the declarator is invalid.  */
10768                   if (type == error_mark_node)
10769                     error ("`%T::%D' is not a type",
10770                            TYPE_CONTEXT (scope),
10771                            TYPE_IDENTIFIER (scope));
10772                   /* Build a new DECLARATOR.  */
10773                   declarator = build_nt (SCOPE_REF,
10774                                          type,
10775                                          TREE_OPERAND (declarator, 1));
10776                 }
10777             }
10778
10779           /* Check to see whether the declarator-id names a constructor,
10780              destructor, or conversion.  */
10781           if (declarator && ctor_dtor_or_conv_p
10782               && ((TREE_CODE (declarator) == SCOPE_REF
10783                    && CLASS_TYPE_P (TREE_OPERAND (declarator, 0)))
10784                   || (TREE_CODE (declarator) != SCOPE_REF
10785                       && at_class_scope_p ())))
10786             {
10787               tree unqualified_name;
10788               tree class_type;
10789
10790               /* Get the unqualified part of the name.  */
10791               if (TREE_CODE (declarator) == SCOPE_REF)
10792                 {
10793                   class_type = TREE_OPERAND (declarator, 0);
10794                   unqualified_name = TREE_OPERAND (declarator, 1);
10795                 }
10796               else
10797                 {
10798                   class_type = current_class_type;
10799                   unqualified_name = declarator;
10800                 }
10801
10802               /* See if it names ctor, dtor or conv.  */
10803               if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR
10804                   || IDENTIFIER_TYPENAME_P (unqualified_name)
10805                   || constructor_name_p (unqualified_name, class_type)
10806                   || (TREE_CODE (unqualified_name) == TYPE_DECL
10807                       && same_type_p (TREE_TYPE (unqualified_name),
10808                                       class_type)))
10809                 *ctor_dtor_or_conv_p = -1;
10810                 if (TREE_CODE (declarator) == SCOPE_REF
10811                     && TREE_CODE (unqualified_name) == TYPE_DECL 
10812                     && CLASSTYPE_USE_TEMPLATE (TREE_TYPE (unqualified_name)))
10813                   {
10814                     error ("invalid use of constructor as a template");
10815                     inform ("use `%T::%D' instead of `%T::%T' to name the "
10816                             "constructor in a qualified name", class_type, 
10817                             DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
10818                             class_type, class_type);
10819                   }
10820             }
10821
10822         handle_declarator:;
10823           scope = get_scope_of_declarator (declarator);
10824           if (scope)
10825             /* Any names that appear after the declarator-id for a
10826                member are looked up in the containing scope.  */
10827             pop_p = push_scope (scope);
10828           parser->in_declarator_p = true;
10829           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
10830               || (declarator
10831                   && (TREE_CODE (declarator) == SCOPE_REF
10832                       || TREE_CODE (declarator) == IDENTIFIER_NODE)))
10833             /* Default args are only allowed on function
10834                declarations.  */
10835             parser->default_arg_ok_p = saved_default_arg_ok_p;
10836           else
10837             parser->default_arg_ok_p = false;
10838
10839           first = false;
10840         }
10841       /* We're done.  */
10842       else
10843         break;
10844     }
10845
10846   /* For an abstract declarator, we might wind up with nothing at this
10847      point.  That's an error; the declarator is not optional.  */
10848   if (!declarator)
10849     cp_parser_error (parser, "expected declarator");
10850
10851   /* If we entered a scope, we must exit it now.  */
10852   if (pop_p)
10853     pop_scope (scope);
10854
10855   parser->default_arg_ok_p = saved_default_arg_ok_p;
10856   parser->in_declarator_p = saved_in_declarator_p;
10857
10858   return declarator;
10859 }
10860
10861 /* Parse a ptr-operator.
10862
10863    ptr-operator:
10864      * cv-qualifier-seq [opt]
10865      &
10866      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
10867
10868    GNU Extension:
10869
10870    ptr-operator:
10871      & cv-qualifier-seq [opt]
10872
10873    Returns INDIRECT_REF if a pointer, or pointer-to-member, was
10874    used.  Returns ADDR_EXPR if a reference was used.  In the
10875    case of a pointer-to-member, *TYPE is filled in with the
10876    TYPE containing the member.  *CV_QUALIFIER_SEQ is filled in
10877    with the cv-qualifier-seq, or NULL_TREE, if there are no
10878    cv-qualifiers.  Returns ERROR_MARK if an error occurred.  */
10879
10880 static enum tree_code
10881 cp_parser_ptr_operator (cp_parser* parser,
10882                         tree* type,
10883                         tree* cv_qualifier_seq)
10884 {
10885   enum tree_code code = ERROR_MARK;
10886   cp_token *token;
10887
10888   /* Assume that it's not a pointer-to-member.  */
10889   *type = NULL_TREE;
10890   /* And that there are no cv-qualifiers.  */
10891   *cv_qualifier_seq = NULL_TREE;
10892
10893   /* Peek at the next token.  */
10894   token = cp_lexer_peek_token (parser->lexer);
10895   /* If it's a `*' or `&' we have a pointer or reference.  */
10896   if (token->type == CPP_MULT || token->type == CPP_AND)
10897     {
10898       /* Remember which ptr-operator we were processing.  */
10899       code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
10900
10901       /* Consume the `*' or `&'.  */
10902       cp_lexer_consume_token (parser->lexer);
10903
10904       /* A `*' can be followed by a cv-qualifier-seq, and so can a
10905          `&', if we are allowing GNU extensions.  (The only qualifier
10906          that can legally appear after `&' is `restrict', but that is
10907          enforced during semantic analysis.  */
10908       if (code == INDIRECT_REF
10909           || cp_parser_allow_gnu_extensions_p (parser))
10910         *cv_qualifier_seq = cp_parser_cv_qualifier_seq_opt (parser);
10911     }
10912   else
10913     {
10914       /* Try the pointer-to-member case.  */
10915       cp_parser_parse_tentatively (parser);
10916       /* Look for the optional `::' operator.  */
10917       cp_parser_global_scope_opt (parser,
10918                                   /*current_scope_valid_p=*/false);
10919       /* Look for the nested-name specifier.  */
10920       cp_parser_nested_name_specifier (parser,
10921                                        /*typename_keyword_p=*/false,
10922                                        /*check_dependency_p=*/true,
10923                                        /*type_p=*/false,
10924                                        /*is_declaration=*/false);
10925       /* If we found it, and the next token is a `*', then we are
10926          indeed looking at a pointer-to-member operator.  */
10927       if (!cp_parser_error_occurred (parser)
10928           && cp_parser_require (parser, CPP_MULT, "`*'"))
10929         {
10930           /* The type of which the member is a member is given by the
10931              current SCOPE.  */
10932           *type = parser->scope;
10933           /* The next name will not be qualified.  */
10934           parser->scope = NULL_TREE;
10935           parser->qualifying_scope = NULL_TREE;
10936           parser->object_scope = NULL_TREE;
10937           /* Indicate that the `*' operator was used.  */
10938           code = INDIRECT_REF;
10939           /* Look for the optional cv-qualifier-seq.  */
10940           *cv_qualifier_seq = cp_parser_cv_qualifier_seq_opt (parser);
10941         }
10942       /* If that didn't work we don't have a ptr-operator.  */
10943       if (!cp_parser_parse_definitely (parser))
10944         cp_parser_error (parser, "expected ptr-operator");
10945     }
10946
10947   return code;
10948 }
10949
10950 /* Parse an (optional) cv-qualifier-seq.
10951
10952    cv-qualifier-seq:
10953      cv-qualifier cv-qualifier-seq [opt]
10954
10955    Returns a TREE_LIST.  The TREE_VALUE of each node is the
10956    representation of a cv-qualifier.  */
10957
10958 static tree
10959 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
10960 {
10961   tree cv_qualifiers = NULL_TREE;
10962
10963   while (true)
10964     {
10965       tree cv_qualifier;
10966
10967       /* Look for the next cv-qualifier.  */
10968       cv_qualifier = cp_parser_cv_qualifier_opt (parser);
10969       /* If we didn't find one, we're done.  */
10970       if (!cv_qualifier)
10971         break;
10972
10973       /* Add this cv-qualifier to the list.  */
10974       cv_qualifiers
10975         = tree_cons (NULL_TREE, cv_qualifier, cv_qualifiers);
10976     }
10977
10978   /* We built up the list in reverse order.  */
10979   return nreverse (cv_qualifiers);
10980 }
10981
10982 /* Parse an (optional) cv-qualifier.
10983
10984    cv-qualifier:
10985      const
10986      volatile
10987
10988    GNU Extension:
10989
10990    cv-qualifier:
10991      __restrict__ */
10992
10993 static tree
10994 cp_parser_cv_qualifier_opt (cp_parser* parser)
10995 {
10996   cp_token *token;
10997   tree cv_qualifier = NULL_TREE;
10998
10999   /* Peek at the next token.  */
11000   token = cp_lexer_peek_token (parser->lexer);
11001   /* See if it's a cv-qualifier.  */
11002   switch (token->keyword)
11003     {
11004     case RID_CONST:
11005     case RID_VOLATILE:
11006     case RID_RESTRICT:
11007       /* Save the value of the token.  */
11008       cv_qualifier = token->value;
11009       /* Consume the token.  */
11010       cp_lexer_consume_token (parser->lexer);
11011       break;
11012
11013     default:
11014       break;
11015     }
11016
11017   return cv_qualifier;
11018 }
11019
11020 /* Parse a declarator-id.
11021
11022    declarator-id:
11023      id-expression
11024      :: [opt] nested-name-specifier [opt] type-name
11025
11026    In the `id-expression' case, the value returned is as for
11027    cp_parser_id_expression if the id-expression was an unqualified-id.
11028    If the id-expression was a qualified-id, then a SCOPE_REF is
11029    returned.  The first operand is the scope (either a NAMESPACE_DECL
11030    or TREE_TYPE), but the second is still just a representation of an
11031    unqualified-id.  */
11032
11033 static tree
11034 cp_parser_declarator_id (cp_parser* parser)
11035 {
11036   tree id_expression;
11037
11038   /* The expression must be an id-expression.  Assume that qualified
11039      names are the names of types so that:
11040
11041        template <class T>
11042        int S<T>::R::i = 3;
11043
11044      will work; we must treat `S<T>::R' as the name of a type.
11045      Similarly, assume that qualified names are templates, where
11046      required, so that:
11047
11048        template <class T>
11049        int S<T>::R<T>::i = 3;
11050
11051      will work, too.  */
11052   id_expression = cp_parser_id_expression (parser,
11053                                            /*template_keyword_p=*/false,
11054                                            /*check_dependency_p=*/false,
11055                                            /*template_p=*/NULL,
11056                                            /*declarator_p=*/true);
11057   /* If the name was qualified, create a SCOPE_REF to represent
11058      that.  */
11059   if (parser->scope)
11060     {
11061       id_expression = build_nt (SCOPE_REF, parser->scope, id_expression);
11062       parser->scope = NULL_TREE;
11063     }
11064
11065   return id_expression;
11066 }
11067
11068 /* Parse a type-id.
11069
11070    type-id:
11071      type-specifier-seq abstract-declarator [opt]
11072
11073    Returns the TYPE specified.  */
11074
11075 static tree
11076 cp_parser_type_id (cp_parser* parser)
11077 {
11078   tree type_specifier_seq;
11079   tree abstract_declarator;
11080
11081   /* Parse the type-specifier-seq.  */
11082   type_specifier_seq
11083     = cp_parser_type_specifier_seq (parser);
11084   if (type_specifier_seq == error_mark_node)
11085     return error_mark_node;
11086
11087   /* There might or might not be an abstract declarator.  */
11088   cp_parser_parse_tentatively (parser);
11089   /* Look for the declarator.  */
11090   abstract_declarator
11091     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
11092                             /*parenthesized_p=*/NULL);
11093   /* Check to see if there really was a declarator.  */
11094   if (!cp_parser_parse_definitely (parser))
11095     abstract_declarator = NULL_TREE;
11096
11097   return groktypename (build_tree_list (type_specifier_seq,
11098                                         abstract_declarator));
11099 }
11100
11101 /* Parse a type-specifier-seq.
11102
11103    type-specifier-seq:
11104      type-specifier type-specifier-seq [opt]
11105
11106    GNU extension:
11107
11108    type-specifier-seq:
11109      attributes type-specifier-seq [opt]
11110
11111    Returns a TREE_LIST.  Either the TREE_VALUE of each node is a
11112    type-specifier, or the TREE_PURPOSE is a list of attributes.  */
11113
11114 static tree
11115 cp_parser_type_specifier_seq (cp_parser* parser)
11116 {
11117   bool seen_type_specifier = false;
11118   tree type_specifier_seq = NULL_TREE;
11119
11120   /* Parse the type-specifiers and attributes.  */
11121   while (true)
11122     {
11123       tree type_specifier;
11124
11125       /* Check for attributes first.  */
11126       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
11127         {
11128           type_specifier_seq = tree_cons (cp_parser_attributes_opt (parser),
11129                                           NULL_TREE,
11130                                           type_specifier_seq);
11131           continue;
11132         }
11133
11134       /* After the first type-specifier, others are optional.  */
11135       if (seen_type_specifier)
11136         cp_parser_parse_tentatively (parser);
11137       /* Look for the type-specifier.  */
11138       type_specifier = cp_parser_type_specifier (parser,
11139                                                  CP_PARSER_FLAGS_NONE,
11140                                                  /*is_friend=*/false,
11141                                                  /*is_declaration=*/false,
11142                                                  NULL,
11143                                                  NULL);
11144       /* If the first type-specifier could not be found, this is not a
11145          type-specifier-seq at all.  */
11146       if (!seen_type_specifier && type_specifier == error_mark_node)
11147         return error_mark_node;
11148       /* If subsequent type-specifiers could not be found, the
11149          type-specifier-seq is complete.  */
11150       else if (seen_type_specifier && !cp_parser_parse_definitely (parser))
11151         break;
11152
11153       /* Add the new type-specifier to the list.  */
11154       type_specifier_seq
11155         = tree_cons (NULL_TREE, type_specifier, type_specifier_seq);
11156       seen_type_specifier = true;
11157     }
11158
11159   /* We built up the list in reverse order.  */
11160   return nreverse (type_specifier_seq);
11161 }
11162
11163 /* Parse a parameter-declaration-clause.
11164
11165    parameter-declaration-clause:
11166      parameter-declaration-list [opt] ... [opt]
11167      parameter-declaration-list , ...
11168
11169    Returns a representation for the parameter declarations.  Each node
11170    is a TREE_LIST.  (See cp_parser_parameter_declaration for the exact
11171    representation.)  If the parameter-declaration-clause ends with an
11172    ellipsis, PARMLIST_ELLIPSIS_P will hold of the first node in the
11173    list.  A return value of NULL_TREE indicates a
11174    parameter-declaration-clause consisting only of an ellipsis.  */
11175
11176 static tree
11177 cp_parser_parameter_declaration_clause (cp_parser* parser)
11178 {
11179   tree parameters;
11180   cp_token *token;
11181   bool ellipsis_p;
11182
11183   /* Peek at the next token.  */
11184   token = cp_lexer_peek_token (parser->lexer);
11185   /* Check for trivial parameter-declaration-clauses.  */
11186   if (token->type == CPP_ELLIPSIS)
11187     {
11188       /* Consume the `...' token.  */
11189       cp_lexer_consume_token (parser->lexer);
11190       return NULL_TREE;
11191     }
11192   else if (token->type == CPP_CLOSE_PAREN)
11193     /* There are no parameters.  */
11194     {
11195 #ifndef NO_IMPLICIT_EXTERN_C
11196       if (in_system_header && current_class_type == NULL
11197           && current_lang_name == lang_name_c)
11198         return NULL_TREE;
11199       else
11200 #endif
11201         return void_list_node;
11202     }
11203   /* Check for `(void)', too, which is a special case.  */
11204   else if (token->keyword == RID_VOID
11205            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
11206                == CPP_CLOSE_PAREN))
11207     {
11208       /* Consume the `void' token.  */
11209       cp_lexer_consume_token (parser->lexer);
11210       /* There are no parameters.  */
11211       return void_list_node;
11212     }
11213
11214   /* Parse the parameter-declaration-list.  */
11215   parameters = cp_parser_parameter_declaration_list (parser);
11216   /* If a parse error occurred while parsing the
11217      parameter-declaration-list, then the entire
11218      parameter-declaration-clause is erroneous.  */
11219   if (parameters == error_mark_node)
11220     return error_mark_node;
11221
11222   /* Peek at the next token.  */
11223   token = cp_lexer_peek_token (parser->lexer);
11224   /* If it's a `,', the clause should terminate with an ellipsis.  */
11225   if (token->type == CPP_COMMA)
11226     {
11227       /* Consume the `,'.  */
11228       cp_lexer_consume_token (parser->lexer);
11229       /* Expect an ellipsis.  */
11230       ellipsis_p
11231         = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
11232     }
11233   /* It might also be `...' if the optional trailing `,' was
11234      omitted.  */
11235   else if (token->type == CPP_ELLIPSIS)
11236     {
11237       /* Consume the `...' token.  */
11238       cp_lexer_consume_token (parser->lexer);
11239       /* And remember that we saw it.  */
11240       ellipsis_p = true;
11241     }
11242   else
11243     ellipsis_p = false;
11244
11245   /* Finish the parameter list.  */
11246   return finish_parmlist (parameters, ellipsis_p);
11247 }
11248
11249 /* Parse a parameter-declaration-list.
11250
11251    parameter-declaration-list:
11252      parameter-declaration
11253      parameter-declaration-list , parameter-declaration
11254
11255    Returns a representation of the parameter-declaration-list, as for
11256    cp_parser_parameter_declaration_clause.  However, the
11257    `void_list_node' is never appended to the list.  */
11258
11259 static tree
11260 cp_parser_parameter_declaration_list (cp_parser* parser)
11261 {
11262   tree parameters = NULL_TREE;
11263
11264   /* Look for more parameters.  */
11265   while (true)
11266     {
11267       tree parameter;
11268       bool parenthesized_p;
11269       /* Parse the parameter.  */
11270       parameter
11271         = cp_parser_parameter_declaration (parser,
11272                                            /*template_parm_p=*/false,
11273                                            &parenthesized_p);
11274
11275       /* If a parse error occurred parsing the parameter declaration,
11276          then the entire parameter-declaration-list is erroneous.  */
11277       if (parameter == error_mark_node)
11278         {
11279           parameters = error_mark_node;
11280           break;
11281         }
11282       /* Add the new parameter to the list.  */
11283       TREE_CHAIN (parameter) = parameters;
11284       parameters = parameter;
11285
11286       /* Peek at the next token.  */
11287       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
11288           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11289         /* The parameter-declaration-list is complete.  */
11290         break;
11291       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
11292         {
11293           cp_token *token;
11294
11295           /* Peek at the next token.  */
11296           token = cp_lexer_peek_nth_token (parser->lexer, 2);
11297           /* If it's an ellipsis, then the list is complete.  */
11298           if (token->type == CPP_ELLIPSIS)
11299             break;
11300           /* Otherwise, there must be more parameters.  Consume the
11301              `,'.  */
11302           cp_lexer_consume_token (parser->lexer);
11303           /* When parsing something like:
11304
11305                 int i(float f, double d)
11306
11307              we can tell after seeing the declaration for "f" that we
11308              are not looking at an initialization of a variable "i",
11309              but rather at the declaration of a function "i".
11310
11311              Due to the fact that the parsing of template arguments
11312              (as specified to a template-id) requires backtracking we
11313              cannot use this technique when inside a template argument
11314              list.  */
11315           if (!parser->in_template_argument_list_p
11316               && !parser->in_type_id_in_expr_p
11317               && cp_parser_parsing_tentatively (parser)
11318               && !cp_parser_committed_to_tentative_parse (parser)
11319               /* However, a parameter-declaration of the form
11320                  "foat(f)" (which is a valid declaration of a
11321                  parameter "f") can also be interpreted as an
11322                  expression (the conversion of "f" to "float").  */
11323               && !parenthesized_p)
11324             cp_parser_commit_to_tentative_parse (parser);
11325         }
11326       else
11327         {
11328           cp_parser_error (parser, "expected `,' or `...'");
11329           if (!cp_parser_parsing_tentatively (parser)
11330               || cp_parser_committed_to_tentative_parse (parser))
11331             cp_parser_skip_to_closing_parenthesis (parser,
11332                                                    /*recovering=*/true,
11333                                                    /*or_comma=*/false,
11334                                                    /*consume_paren=*/false);
11335           break;
11336         }
11337     }
11338
11339   /* We built up the list in reverse order; straighten it out now.  */
11340   return nreverse (parameters);
11341 }
11342
11343 /* Parse a parameter declaration.
11344
11345    parameter-declaration:
11346      decl-specifier-seq declarator
11347      decl-specifier-seq declarator = assignment-expression
11348      decl-specifier-seq abstract-declarator [opt]
11349      decl-specifier-seq abstract-declarator [opt] = assignment-expression
11350
11351    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
11352    declares a template parameter.  (In that case, a non-nested `>'
11353    token encountered during the parsing of the assignment-expression
11354    is not interpreted as a greater-than operator.)
11355
11356    Returns a TREE_LIST representing the parameter-declaration.  The
11357    TREE_PURPOSE is the default argument expression, or NULL_TREE if
11358    there is no default argument.  The TREE_VALUE is a representation
11359    of the decl-specifier-seq and declarator.  In particular, the
11360    TREE_VALUE will be a TREE_LIST whose TREE_PURPOSE represents the
11361    decl-specifier-seq and whose TREE_VALUE represents the declarator.
11362    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
11363    the declarator is of the form "(p)".  */
11364
11365 static tree
11366 cp_parser_parameter_declaration (cp_parser *parser,
11367                                  bool template_parm_p,
11368                                  bool *parenthesized_p)
11369 {
11370   int declares_class_or_enum;
11371   bool greater_than_is_operator_p;
11372   tree decl_specifiers;
11373   tree attributes;
11374   tree declarator;
11375   tree default_argument;
11376   tree parameter;
11377   cp_token *token;
11378   const char *saved_message;
11379
11380   /* In a template parameter, `>' is not an operator.
11381
11382      [temp.param]
11383
11384      When parsing a default template-argument for a non-type
11385      template-parameter, the first non-nested `>' is taken as the end
11386      of the template parameter-list rather than a greater-than
11387      operator.  */
11388   greater_than_is_operator_p = !template_parm_p;
11389
11390   /* Type definitions may not appear in parameter types.  */
11391   saved_message = parser->type_definition_forbidden_message;
11392   parser->type_definition_forbidden_message
11393     = "types may not be defined in parameter types";
11394
11395   /* Parse the declaration-specifiers.  */
11396   decl_specifiers
11397     = cp_parser_decl_specifier_seq (parser,
11398                                     CP_PARSER_FLAGS_NONE,
11399                                     &attributes,
11400                                     &declares_class_or_enum);
11401   /* If an error occurred, there's no reason to attempt to parse the
11402      rest of the declaration.  */
11403   if (cp_parser_error_occurred (parser))
11404     {
11405       parser->type_definition_forbidden_message = saved_message;
11406       return error_mark_node;
11407     }
11408
11409   /* Peek at the next token.  */
11410   token = cp_lexer_peek_token (parser->lexer);
11411   /* If the next token is a `)', `,', `=', `>', or `...', then there
11412      is no declarator.  */
11413   if (token->type == CPP_CLOSE_PAREN
11414       || token->type == CPP_COMMA
11415       || token->type == CPP_EQ
11416       || token->type == CPP_ELLIPSIS
11417       || token->type == CPP_GREATER)
11418     {
11419       declarator = NULL_TREE;
11420       if (parenthesized_p)
11421         *parenthesized_p = false;
11422     }
11423   /* Otherwise, there should be a declarator.  */
11424   else
11425     {
11426       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11427       parser->default_arg_ok_p = false;
11428
11429       /* After seeing a decl-specifier-seq, if the next token is not a
11430          "(", there is no possibility that the code is a valid
11431          expression.  Therefore, if parsing tentatively, we commit at
11432          this point.  */
11433       if (!parser->in_template_argument_list_p
11434           /* In an expression context, having seen:
11435
11436                (int((char ...
11437
11438              we cannot be sure whether we are looking at a
11439              function-type (taking a "char" as a parameter) or a cast
11440              of some object of type "char" to "int".  */
11441           && !parser->in_type_id_in_expr_p
11442           && cp_parser_parsing_tentatively (parser)
11443           && !cp_parser_committed_to_tentative_parse (parser)
11444           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
11445         cp_parser_commit_to_tentative_parse (parser);
11446       /* Parse the declarator.  */
11447       declarator = cp_parser_declarator (parser,
11448                                          CP_PARSER_DECLARATOR_EITHER,
11449                                          /*ctor_dtor_or_conv_p=*/NULL,
11450                                          parenthesized_p);
11451       parser->default_arg_ok_p = saved_default_arg_ok_p;
11452       /* After the declarator, allow more attributes.  */
11453       attributes = chainon (attributes, cp_parser_attributes_opt (parser));
11454     }
11455
11456   /* The restriction on defining new types applies only to the type
11457      of the parameter, not to the default argument.  */
11458   parser->type_definition_forbidden_message = saved_message;
11459
11460   /* If the next token is `=', then process a default argument.  */
11461   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11462     {
11463       bool saved_greater_than_is_operator_p;
11464       /* Consume the `='.  */
11465       cp_lexer_consume_token (parser->lexer);
11466
11467       /* If we are defining a class, then the tokens that make up the
11468          default argument must be saved and processed later.  */
11469       if (!template_parm_p && at_class_scope_p ()
11470           && TYPE_BEING_DEFINED (current_class_type))
11471         {
11472           unsigned depth = 0;
11473
11474           /* Create a DEFAULT_ARG to represented the unparsed default
11475              argument.  */
11476           default_argument = make_node (DEFAULT_ARG);
11477           DEFARG_TOKENS (default_argument) = cp_token_cache_new ();
11478
11479           /* Add tokens until we have processed the entire default
11480              argument.  */
11481           while (true)
11482             {
11483               bool done = false;
11484               cp_token *token;
11485
11486               /* Peek at the next token.  */
11487               token = cp_lexer_peek_token (parser->lexer);
11488               /* What we do depends on what token we have.  */
11489               switch (token->type)
11490                 {
11491                   /* In valid code, a default argument must be
11492                      immediately followed by a `,' `)', or `...'.  */
11493                 case CPP_COMMA:
11494                 case CPP_CLOSE_PAREN:
11495                 case CPP_ELLIPSIS:
11496                   /* If we run into a non-nested `;', `}', or `]',
11497                      then the code is invalid -- but the default
11498                      argument is certainly over.  */
11499                 case CPP_SEMICOLON:
11500                 case CPP_CLOSE_BRACE:
11501                 case CPP_CLOSE_SQUARE:
11502                   if (depth == 0)
11503                     done = true;
11504                   /* Update DEPTH, if necessary.  */
11505                   else if (token->type == CPP_CLOSE_PAREN
11506                            || token->type == CPP_CLOSE_BRACE
11507                            || token->type == CPP_CLOSE_SQUARE)
11508                     --depth;
11509                   break;
11510
11511                 case CPP_OPEN_PAREN:
11512                 case CPP_OPEN_SQUARE:
11513                 case CPP_OPEN_BRACE:
11514                   ++depth;
11515                   break;
11516
11517                 case CPP_GREATER:
11518                   /* If we see a non-nested `>', and `>' is not an
11519                      operator, then it marks the end of the default
11520                      argument.  */
11521                   if (!depth && !greater_than_is_operator_p)
11522                     done = true;
11523                   break;
11524
11525                   /* If we run out of tokens, issue an error message.  */
11526                 case CPP_EOF:
11527                   error ("file ends in default argument");
11528                   done = true;
11529                   break;
11530
11531                 case CPP_NAME:
11532                 case CPP_SCOPE:
11533                   /* In these cases, we should look for template-ids.
11534                      For example, if the default argument is
11535                      `X<int, double>()', we need to do name lookup to
11536                      figure out whether or not `X' is a template; if
11537                      so, the `,' does not end the default argument.
11538
11539                      That is not yet done.  */
11540                   break;
11541
11542                 default:
11543                   break;
11544                 }
11545
11546               /* If we've reached the end, stop.  */
11547               if (done)
11548                 break;
11549
11550               /* Add the token to the token block.  */
11551               token = cp_lexer_consume_token (parser->lexer);
11552               cp_token_cache_push_token (DEFARG_TOKENS (default_argument),
11553                                          token);
11554             }
11555         }
11556       /* Outside of a class definition, we can just parse the
11557          assignment-expression.  */
11558       else
11559         {
11560           bool saved_local_variables_forbidden_p;
11561
11562           /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
11563              set correctly.  */
11564           saved_greater_than_is_operator_p
11565             = parser->greater_than_is_operator_p;
11566           parser->greater_than_is_operator_p = greater_than_is_operator_p;
11567           /* Local variable names (and the `this' keyword) may not
11568              appear in a default argument.  */
11569           saved_local_variables_forbidden_p
11570             = parser->local_variables_forbidden_p;
11571           parser->local_variables_forbidden_p = true;
11572           /* Parse the assignment-expression.  */
11573           default_argument = cp_parser_assignment_expression (parser);
11574           /* Restore saved state.  */
11575           parser->greater_than_is_operator_p
11576             = saved_greater_than_is_operator_p;
11577           parser->local_variables_forbidden_p
11578             = saved_local_variables_forbidden_p;
11579         }
11580       if (!parser->default_arg_ok_p)
11581         {
11582           if (!flag_pedantic_errors)
11583             warning ("deprecated use of default argument for parameter of non-function");
11584           else
11585             {
11586               error ("default arguments are only permitted for function parameters");
11587               default_argument = NULL_TREE;
11588             }
11589         }
11590     }
11591   else
11592     default_argument = NULL_TREE;
11593
11594   /* Create the representation of the parameter.  */
11595   if (attributes)
11596     decl_specifiers = tree_cons (attributes, NULL_TREE, decl_specifiers);
11597   parameter = build_tree_list (default_argument,
11598                                build_tree_list (decl_specifiers,
11599                                                 declarator));
11600
11601   return parameter;
11602 }
11603
11604 /* Parse a function-body.
11605
11606    function-body:
11607      compound_statement  */
11608
11609 static void
11610 cp_parser_function_body (cp_parser *parser)
11611 {
11612   cp_parser_compound_statement (parser, NULL, false);
11613 }
11614
11615 /* Parse a ctor-initializer-opt followed by a function-body.  Return
11616    true if a ctor-initializer was present.  */
11617
11618 static bool
11619 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
11620 {
11621   tree body;
11622   bool ctor_initializer_p;
11623
11624   /* Begin the function body.  */
11625   body = begin_function_body ();
11626   /* Parse the optional ctor-initializer.  */
11627   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
11628   /* Parse the function-body.  */
11629   cp_parser_function_body (parser);
11630   /* Finish the function body.  */
11631   finish_function_body (body);
11632
11633   return ctor_initializer_p;
11634 }
11635
11636 /* Parse an initializer.
11637
11638    initializer:
11639      = initializer-clause
11640      ( expression-list )
11641
11642    Returns a expression representing the initializer.  If no
11643    initializer is present, NULL_TREE is returned.
11644
11645    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
11646    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
11647    set to FALSE if there is no initializer present.  If there is an
11648    initializer, and it is not a constant-expression, *NON_CONSTANT_P
11649    is set to true; otherwise it is set to false.  */
11650
11651 static tree
11652 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
11653                        bool* non_constant_p)
11654 {
11655   cp_token *token;
11656   tree init;
11657
11658   /* Peek at the next token.  */
11659   token = cp_lexer_peek_token (parser->lexer);
11660
11661   /* Let our caller know whether or not this initializer was
11662      parenthesized.  */
11663   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
11664   /* Assume that the initializer is constant.  */
11665   *non_constant_p = false;
11666
11667   if (token->type == CPP_EQ)
11668     {
11669       /* Consume the `='.  */
11670       cp_lexer_consume_token (parser->lexer);
11671       /* Parse the initializer-clause.  */
11672       init = cp_parser_initializer_clause (parser, non_constant_p);
11673     }
11674   else if (token->type == CPP_OPEN_PAREN)
11675     init = cp_parser_parenthesized_expression_list (parser, false,
11676                                                     non_constant_p);
11677   else
11678     {
11679       /* Anything else is an error.  */
11680       cp_parser_error (parser, "expected initializer");
11681       init = error_mark_node;
11682     }
11683
11684   return init;
11685 }
11686
11687 /* Parse an initializer-clause.
11688
11689    initializer-clause:
11690      assignment-expression
11691      { initializer-list , [opt] }
11692      { }
11693
11694    Returns an expression representing the initializer.
11695
11696    If the `assignment-expression' production is used the value
11697    returned is simply a representation for the expression.
11698
11699    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
11700    the elements of the initializer-list (or NULL_TREE, if the last
11701    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
11702    NULL_TREE.  There is no way to detect whether or not the optional
11703    trailing `,' was provided.  NON_CONSTANT_P is as for
11704    cp_parser_initializer.  */
11705
11706 static tree
11707 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
11708 {
11709   tree initializer;
11710
11711   /* If it is not a `{', then we are looking at an
11712      assignment-expression.  */
11713   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
11714     {
11715       initializer 
11716         = cp_parser_constant_expression (parser,
11717                                         /*allow_non_constant_p=*/true,
11718                                         non_constant_p);
11719       if (!*non_constant_p)
11720         initializer = fold_non_dependent_expr (initializer);
11721     }
11722   else
11723     {
11724       /* Consume the `{' token.  */
11725       cp_lexer_consume_token (parser->lexer);
11726       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
11727       initializer = make_node (CONSTRUCTOR);
11728       /* If it's not a `}', then there is a non-trivial initializer.  */
11729       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
11730         {
11731           /* Parse the initializer list.  */
11732           CONSTRUCTOR_ELTS (initializer)
11733             = cp_parser_initializer_list (parser, non_constant_p);
11734           /* A trailing `,' token is allowed.  */
11735           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
11736             cp_lexer_consume_token (parser->lexer);
11737         }
11738       /* Now, there should be a trailing `}'.  */
11739       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
11740     }
11741
11742   return initializer;
11743 }
11744
11745 /* Parse an initializer-list.
11746
11747    initializer-list:
11748      initializer-clause
11749      initializer-list , initializer-clause
11750
11751    GNU Extension:
11752
11753    initializer-list:
11754      identifier : initializer-clause
11755      initializer-list, identifier : initializer-clause
11756
11757    Returns a TREE_LIST.  The TREE_VALUE of each node is an expression
11758    for the initializer.  If the TREE_PURPOSE is non-NULL, it is the
11759    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
11760    as for cp_parser_initializer.  */
11761
11762 static tree
11763 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
11764 {
11765   tree initializers = NULL_TREE;
11766
11767   /* Assume all of the expressions are constant.  */
11768   *non_constant_p = false;
11769
11770   /* Parse the rest of the list.  */
11771   while (true)
11772     {
11773       cp_token *token;
11774       tree identifier;
11775       tree initializer;
11776       bool clause_non_constant_p;
11777
11778       /* If the next token is an identifier and the following one is a
11779          colon, we are looking at the GNU designated-initializer
11780          syntax.  */
11781       if (cp_parser_allow_gnu_extensions_p (parser)
11782           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
11783           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
11784         {
11785           /* Consume the identifier.  */
11786           identifier = cp_lexer_consume_token (parser->lexer)->value;
11787           /* Consume the `:'.  */
11788           cp_lexer_consume_token (parser->lexer);
11789         }
11790       else
11791         identifier = NULL_TREE;
11792
11793       /* Parse the initializer.  */
11794       initializer = cp_parser_initializer_clause (parser,
11795                                                   &clause_non_constant_p);
11796       /* If any clause is non-constant, so is the entire initializer.  */
11797       if (clause_non_constant_p)
11798         *non_constant_p = true;
11799       /* Add it to the list.  */
11800       initializers = tree_cons (identifier, initializer, initializers);
11801
11802       /* If the next token is not a comma, we have reached the end of
11803          the list.  */
11804       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11805         break;
11806
11807       /* Peek at the next token.  */
11808       token = cp_lexer_peek_nth_token (parser->lexer, 2);
11809       /* If the next token is a `}', then we're still done.  An
11810          initializer-clause can have a trailing `,' after the
11811          initializer-list and before the closing `}'.  */
11812       if (token->type == CPP_CLOSE_BRACE)
11813         break;
11814
11815       /* Consume the `,' token.  */
11816       cp_lexer_consume_token (parser->lexer);
11817     }
11818
11819   /* The initializers were built up in reverse order, so we need to
11820      reverse them now.  */
11821   return nreverse (initializers);
11822 }
11823
11824 /* Classes [gram.class] */
11825
11826 /* Parse a class-name.
11827
11828    class-name:
11829      identifier
11830      template-id
11831
11832    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
11833    to indicate that names looked up in dependent types should be
11834    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
11835    keyword has been used to indicate that the name that appears next
11836    is a template.  TYPE_P is true iff the next name should be treated
11837    as class-name, even if it is declared to be some other kind of name
11838    as well.  If CHECK_DEPENDENCY_P is FALSE, names are looked up in
11839    dependent scopes.  If CLASS_HEAD_P is TRUE, this class is the class
11840    being defined in a class-head.
11841
11842    Returns the TYPE_DECL representing the class.  */
11843
11844 static tree
11845 cp_parser_class_name (cp_parser *parser,
11846                       bool typename_keyword_p,
11847                       bool template_keyword_p,
11848                       bool type_p,
11849                       bool check_dependency_p,
11850                       bool class_head_p,
11851                       bool is_declaration)
11852 {
11853   tree decl;
11854   tree scope;
11855   bool typename_p;
11856   cp_token *token;
11857
11858   /* All class-names start with an identifier.  */
11859   token = cp_lexer_peek_token (parser->lexer);
11860   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
11861     {
11862       cp_parser_error (parser, "expected class-name");
11863       return error_mark_node;
11864     }
11865
11866   /* PARSER->SCOPE can be cleared when parsing the template-arguments
11867      to a template-id, so we save it here.  */
11868   scope = parser->scope;
11869   if (scope == error_mark_node)
11870     return error_mark_node;
11871
11872   /* Any name names a type if we're following the `typename' keyword
11873      in a qualified name where the enclosing scope is type-dependent.  */
11874   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
11875                 && dependent_type_p (scope));
11876   /* Handle the common case (an identifier, but not a template-id)
11877      efficiently.  */
11878   if (token->type == CPP_NAME
11879       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
11880     {
11881       tree identifier;
11882
11883       /* Look for the identifier.  */
11884       identifier = cp_parser_identifier (parser);
11885       /* If the next token isn't an identifier, we are certainly not
11886          looking at a class-name.  */
11887       if (identifier == error_mark_node)
11888         decl = error_mark_node;
11889       /* If we know this is a type-name, there's no need to look it
11890          up.  */
11891       else if (typename_p)
11892         decl = identifier;
11893       else
11894         {
11895           /* If the next token is a `::', then the name must be a type
11896              name.
11897
11898              [basic.lookup.qual]
11899
11900              During the lookup for a name preceding the :: scope
11901              resolution operator, object, function, and enumerator
11902              names are ignored.  */
11903           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
11904             type_p = true;
11905           /* Look up the name.  */
11906           decl = cp_parser_lookup_name (parser, identifier,
11907                                         type_p,
11908                                         /*is_template=*/false,
11909                                         /*is_namespace=*/false,
11910                                         check_dependency_p);
11911         }
11912     }
11913   else
11914     {
11915       /* Try a template-id.  */
11916       decl = cp_parser_template_id (parser, template_keyword_p,
11917                                     check_dependency_p,
11918                                     is_declaration);
11919       if (decl == error_mark_node)
11920         return error_mark_node;
11921     }
11922
11923   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
11924
11925   /* If this is a typename, create a TYPENAME_TYPE.  */
11926   if (typename_p && decl != error_mark_node)
11927     {
11928       decl = make_typename_type (scope, decl, /*complain=*/1);
11929       if (decl != error_mark_node)
11930         decl = TYPE_NAME (decl);
11931     }
11932
11933   /* Check to see that it is really the name of a class.  */
11934   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
11935       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
11936       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
11937     /* Situations like this:
11938
11939          template <typename T> struct A {
11940            typename T::template X<int>::I i;
11941          };
11942
11943        are problematic.  Is `T::template X<int>' a class-name?  The
11944        standard does not seem to be definitive, but there is no other
11945        valid interpretation of the following `::'.  Therefore, those
11946        names are considered class-names.  */
11947     decl = TYPE_NAME (make_typename_type (scope, decl, tf_error));
11948   else if (decl == error_mark_node
11949            || TREE_CODE (decl) != TYPE_DECL
11950            || !IS_AGGR_TYPE (TREE_TYPE (decl)))
11951     {
11952       cp_parser_error (parser, "expected class-name");
11953       return error_mark_node;
11954     }
11955
11956   return decl;
11957 }
11958
11959 /* Parse a class-specifier.
11960
11961    class-specifier:
11962      class-head { member-specification [opt] }
11963
11964    Returns the TREE_TYPE representing the class.  */
11965
11966 static tree
11967 cp_parser_class_specifier (cp_parser* parser)
11968 {
11969   cp_token *token;
11970   tree type;
11971   tree attributes = NULL_TREE;
11972   int has_trailing_semicolon;
11973   bool nested_name_specifier_p;
11974   unsigned saved_num_template_parameter_lists;
11975   bool pop_p = false;
11976
11977   push_deferring_access_checks (dk_no_deferred);
11978
11979   /* Parse the class-head.  */
11980   type = cp_parser_class_head (parser,
11981                                &nested_name_specifier_p,
11982                                &attributes);
11983   /* If the class-head was a semantic disaster, skip the entire body
11984      of the class.  */
11985   if (!type)
11986     {
11987       cp_parser_skip_to_end_of_block_or_statement (parser);
11988       pop_deferring_access_checks ();
11989       return error_mark_node;
11990     }
11991
11992   /* Look for the `{'.  */
11993   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
11994     {
11995       pop_deferring_access_checks ();
11996       return error_mark_node;
11997     }
11998
11999   /* Issue an error message if type-definitions are forbidden here.  */
12000   cp_parser_check_type_definition (parser);
12001   /* Remember that we are defining one more class.  */
12002   ++parser->num_classes_being_defined;
12003   /* Inside the class, surrounding template-parameter-lists do not
12004      apply.  */
12005   saved_num_template_parameter_lists
12006     = parser->num_template_parameter_lists;
12007   parser->num_template_parameter_lists = 0;
12008
12009   /* Start the class.  */
12010   if (nested_name_specifier_p)
12011     pop_p = push_scope (CP_DECL_CONTEXT (TYPE_MAIN_DECL (type)));
12012   type = begin_class_definition (type);
12013   if (type == error_mark_node)
12014     /* If the type is erroneous, skip the entire body of the class.  */
12015     cp_parser_skip_to_closing_brace (parser);
12016   else
12017     /* Parse the member-specification.  */
12018     cp_parser_member_specification_opt (parser);
12019   /* Look for the trailing `}'.  */
12020   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12021   /* We get better error messages by noticing a common problem: a
12022      missing trailing `;'.  */
12023   token = cp_lexer_peek_token (parser->lexer);
12024   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
12025   /* Look for trailing attributes to apply to this class.  */
12026   if (cp_parser_allow_gnu_extensions_p (parser))
12027     {
12028       tree sub_attr = cp_parser_attributes_opt (parser);
12029       attributes = chainon (attributes, sub_attr);
12030     }
12031   if (type != error_mark_node)
12032     type = finish_struct (type, attributes);
12033   if (pop_p)
12034     pop_scope (CP_DECL_CONTEXT (TYPE_MAIN_DECL (type)));
12035   /* If this class is not itself within the scope of another class,
12036      then we need to parse the bodies of all of the queued function
12037      definitions.  Note that the queued functions defined in a class
12038      are not always processed immediately following the
12039      class-specifier for that class.  Consider:
12040
12041        struct A {
12042          struct B { void f() { sizeof (A); } };
12043        };
12044
12045      If `f' were processed before the processing of `A' were
12046      completed, there would be no way to compute the size of `A'.
12047      Note that the nesting we are interested in here is lexical --
12048      not the semantic nesting given by TYPE_CONTEXT.  In particular,
12049      for:
12050
12051        struct A { struct B; };
12052        struct A::B { void f() { } };
12053
12054      there is no need to delay the parsing of `A::B::f'.  */
12055   if (--parser->num_classes_being_defined == 0)
12056     {
12057       tree queue_entry;
12058       tree fn;
12059
12060       /* In a first pass, parse default arguments to the functions.
12061          Then, in a second pass, parse the bodies of the functions.
12062          This two-phased approach handles cases like:
12063
12064             struct S {
12065               void f() { g(); }
12066               void g(int i = 3);
12067             };
12068
12069          */
12070       for (TREE_PURPOSE (parser->unparsed_functions_queues)
12071              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
12072            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
12073            TREE_PURPOSE (parser->unparsed_functions_queues)
12074              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
12075         {
12076           fn = TREE_VALUE (queue_entry);
12077           /* Make sure that any template parameters are in scope.  */
12078           maybe_begin_member_template_processing (fn);
12079           /* If there are default arguments that have not yet been processed,
12080              take care of them now.  */
12081           cp_parser_late_parsing_default_args (parser, fn);
12082           /* Remove any template parameters from the symbol table.  */
12083           maybe_end_member_template_processing ();
12084         }
12085       /* Now parse the body of the functions.  */
12086       for (TREE_VALUE (parser->unparsed_functions_queues)
12087              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
12088            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
12089            TREE_VALUE (parser->unparsed_functions_queues)
12090              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
12091         {
12092           /* Figure out which function we need to process.  */
12093           fn = TREE_VALUE (queue_entry);
12094
12095           /* A hack to prevent garbage collection.  */
12096           function_depth++;
12097
12098           /* Parse the function.  */
12099           cp_parser_late_parsing_for_member (parser, fn);
12100           function_depth--;
12101         }
12102
12103     }
12104
12105   /* Put back any saved access checks.  */
12106   pop_deferring_access_checks ();
12107
12108   /* Restore the count of active template-parameter-lists.  */
12109   parser->num_template_parameter_lists
12110     = saved_num_template_parameter_lists;
12111
12112   return type;
12113 }
12114
12115 /* Parse a class-head.
12116
12117    class-head:
12118      class-key identifier [opt] base-clause [opt]
12119      class-key nested-name-specifier identifier base-clause [opt]
12120      class-key nested-name-specifier [opt] template-id
12121        base-clause [opt]
12122
12123    GNU Extensions:
12124      class-key attributes identifier [opt] base-clause [opt]
12125      class-key attributes nested-name-specifier identifier base-clause [opt]
12126      class-key attributes nested-name-specifier [opt] template-id
12127        base-clause [opt]
12128
12129    Returns the TYPE of the indicated class.  Sets
12130    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
12131    involving a nested-name-specifier was used, and FALSE otherwise.
12132
12133    Returns NULL_TREE if the class-head is syntactically valid, but
12134    semantically invalid in a way that means we should skip the entire
12135    body of the class.  */
12136
12137 static tree
12138 cp_parser_class_head (cp_parser* parser,
12139                       bool* nested_name_specifier_p,
12140                       tree *attributes_p)
12141 {
12142   cp_token *token;
12143   tree nested_name_specifier;
12144   enum tag_types class_key;
12145   tree id = NULL_TREE;
12146   tree type = NULL_TREE;
12147   tree attributes;
12148   bool template_id_p = false;
12149   bool qualified_p = false;
12150   bool invalid_nested_name_p = false;
12151   bool invalid_explicit_specialization_p = false;
12152   bool pop_p = false;
12153   unsigned num_templates;
12154
12155   /* Assume no nested-name-specifier will be present.  */
12156   *nested_name_specifier_p = false;
12157   /* Assume no template parameter lists will be used in defining the
12158      type.  */
12159   num_templates = 0;
12160
12161   /* Look for the class-key.  */
12162   class_key = cp_parser_class_key (parser);
12163   if (class_key == none_type)
12164     return error_mark_node;
12165
12166   /* Parse the attributes.  */
12167   attributes = cp_parser_attributes_opt (parser);
12168
12169   /* If the next token is `::', that is invalid -- but sometimes
12170      people do try to write:
12171
12172        struct ::S {};
12173
12174      Handle this gracefully by accepting the extra qualifier, and then
12175      issuing an error about it later if this really is a
12176      class-head.  If it turns out just to be an elaborated type
12177      specifier, remain silent.  */
12178   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
12179     qualified_p = true;
12180
12181   push_deferring_access_checks (dk_no_check);
12182
12183   /* Determine the name of the class.  Begin by looking for an
12184      optional nested-name-specifier.  */
12185   nested_name_specifier
12186     = cp_parser_nested_name_specifier_opt (parser,
12187                                            /*typename_keyword_p=*/false,
12188                                            /*check_dependency_p=*/false,
12189                                            /*type_p=*/false,
12190                                            /*is_declaration=*/false);
12191   /* If there was a nested-name-specifier, then there *must* be an
12192      identifier.  */
12193   if (nested_name_specifier)
12194     {
12195       /* Although the grammar says `identifier', it really means
12196          `class-name' or `template-name'.  You are only allowed to
12197          define a class that has already been declared with this
12198          syntax.
12199
12200          The proposed resolution for Core Issue 180 says that whever
12201          you see `class T::X' you should treat `X' as a type-name.
12202
12203          It is OK to define an inaccessible class; for example:
12204
12205            class A { class B; };
12206            class A::B {};
12207
12208          We do not know if we will see a class-name, or a
12209          template-name.  We look for a class-name first, in case the
12210          class-name is a template-id; if we looked for the
12211          template-name first we would stop after the template-name.  */
12212       cp_parser_parse_tentatively (parser);
12213       type = cp_parser_class_name (parser,
12214                                    /*typename_keyword_p=*/false,
12215                                    /*template_keyword_p=*/false,
12216                                    /*type_p=*/true,
12217                                    /*check_dependency_p=*/false,
12218                                    /*class_head_p=*/true,
12219                                    /*is_declaration=*/false);
12220       /* If that didn't work, ignore the nested-name-specifier.  */
12221       if (!cp_parser_parse_definitely (parser))
12222         {
12223           invalid_nested_name_p = true;
12224           id = cp_parser_identifier (parser);
12225           if (id == error_mark_node)
12226             id = NULL_TREE;
12227         }
12228       /* If we could not find a corresponding TYPE, treat this
12229          declaration like an unqualified declaration.  */
12230       if (type == error_mark_node)
12231         nested_name_specifier = NULL_TREE;
12232       /* Otherwise, count the number of templates used in TYPE and its
12233          containing scopes.  */
12234       else
12235         {
12236           tree scope;
12237
12238           for (scope = TREE_TYPE (type);
12239                scope && TREE_CODE (scope) != NAMESPACE_DECL;
12240                scope = (TYPE_P (scope)
12241                         ? TYPE_CONTEXT (scope)
12242                         : DECL_CONTEXT (scope)))
12243             if (TYPE_P (scope)
12244                 && CLASS_TYPE_P (scope)
12245                 && CLASSTYPE_TEMPLATE_INFO (scope)
12246                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
12247                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
12248               ++num_templates;
12249         }
12250     }
12251   /* Otherwise, the identifier is optional.  */
12252   else
12253     {
12254       /* We don't know whether what comes next is a template-id,
12255          an identifier, or nothing at all.  */
12256       cp_parser_parse_tentatively (parser);
12257       /* Check for a template-id.  */
12258       id = cp_parser_template_id (parser,
12259                                   /*template_keyword_p=*/false,
12260                                   /*check_dependency_p=*/true,
12261                                   /*is_declaration=*/true);
12262       /* If that didn't work, it could still be an identifier.  */
12263       if (!cp_parser_parse_definitely (parser))
12264         {
12265           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12266             id = cp_parser_identifier (parser);
12267           else
12268             id = NULL_TREE;
12269         }
12270       else
12271         {
12272           template_id_p = true;
12273           ++num_templates;
12274         }
12275     }
12276
12277   pop_deferring_access_checks ();
12278
12279   if (id)
12280     cp_parser_check_for_invalid_template_id (parser, id);
12281
12282   /* If it's not a `:' or a `{' then we can't really be looking at a
12283      class-head, since a class-head only appears as part of a
12284      class-specifier.  We have to detect this situation before calling
12285      xref_tag, since that has irreversible side-effects.  */
12286   if (!cp_parser_next_token_starts_class_definition_p (parser))
12287     {
12288       cp_parser_error (parser, "expected `{' or `:'");
12289       return error_mark_node;
12290     }
12291
12292   /* At this point, we're going ahead with the class-specifier, even
12293      if some other problem occurs.  */
12294   cp_parser_commit_to_tentative_parse (parser);
12295   /* Issue the error about the overly-qualified name now.  */
12296   if (qualified_p)
12297     cp_parser_error (parser,
12298                      "global qualification of class name is invalid");
12299   else if (invalid_nested_name_p)
12300     cp_parser_error (parser,
12301                      "qualified name does not name a class");
12302   else if (nested_name_specifier)
12303     {
12304       tree scope;
12305       /* Figure out in what scope the declaration is being placed.  */
12306       scope = current_scope ();
12307       if (!scope)
12308         scope = current_namespace;
12309       /* If that scope does not contain the scope in which the
12310          class was originally declared, the program is invalid.  */
12311       if (scope && !is_ancestor (scope, nested_name_specifier))
12312         {
12313           error ("declaration of `%D' in `%D' which does not "
12314                  "enclose `%D'", type, scope, nested_name_specifier);
12315           type = NULL_TREE;
12316           goto done;
12317         }
12318       /* [dcl.meaning]
12319
12320          A declarator-id shall not be qualified exception of the
12321          definition of a ... nested class outside of its class
12322          ... [or] a the definition or explicit instantiation of a
12323          class member of a namespace outside of its namespace.  */
12324       if (scope == nested_name_specifier)
12325         {
12326           pedwarn ("extra qualification ignored");
12327           nested_name_specifier = NULL_TREE;
12328           num_templates = 0;
12329         }
12330     }
12331   /* An explicit-specialization must be preceded by "template <>".  If
12332      it is not, try to recover gracefully.  */
12333   if (at_namespace_scope_p ()
12334       && parser->num_template_parameter_lists == 0
12335       && template_id_p)
12336     {
12337       error ("an explicit specialization must be preceded by 'template <>'");
12338       invalid_explicit_specialization_p = true;
12339       /* Take the same action that would have been taken by
12340          cp_parser_explicit_specialization.  */
12341       ++parser->num_template_parameter_lists;
12342       begin_specialization ();
12343     }
12344   /* There must be no "return" statements between this point and the
12345      end of this function; set "type "to the correct return value and
12346      use "goto done;" to return.  */
12347   /* Make sure that the right number of template parameters were
12348      present.  */
12349   if (!cp_parser_check_template_parameters (parser, num_templates))
12350     {
12351       /* If something went wrong, there is no point in even trying to
12352          process the class-definition.  */
12353       type = NULL_TREE;
12354       goto done;
12355     }
12356
12357   /* Look up the type.  */
12358   if (template_id_p)
12359     {
12360       type = TREE_TYPE (id);
12361       maybe_process_partial_specialization (type);
12362     }
12363   else if (!nested_name_specifier)
12364     {
12365       /* If the class was unnamed, create a dummy name.  */
12366       if (!id)
12367         id = make_anon_name ();
12368       type = xref_tag (class_key, id, /*globalize=*/false,
12369                        parser->num_template_parameter_lists);
12370     }
12371   else
12372     {
12373       tree class_type;
12374       bool pop_p = false;
12375
12376       /* Given:
12377
12378             template <typename T> struct S { struct T };
12379             template <typename T> struct S<T>::T { };
12380
12381          we will get a TYPENAME_TYPE when processing the definition of
12382          `S::T'.  We need to resolve it to the actual type before we
12383          try to define it.  */
12384       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
12385         {
12386           class_type = resolve_typename_type (TREE_TYPE (type),
12387                                               /*only_current_p=*/false);
12388           if (class_type != error_mark_node)
12389             type = TYPE_NAME (class_type);
12390           else
12391             {
12392               cp_parser_error (parser, "could not resolve typename type");
12393               type = error_mark_node;
12394             }
12395         }
12396
12397       maybe_process_partial_specialization (TREE_TYPE (type));
12398       class_type = current_class_type;
12399       /* Enter the scope indicated by the nested-name-specifier.  */
12400       if (nested_name_specifier)
12401         pop_p = push_scope (nested_name_specifier);
12402       /* Get the canonical version of this type.  */
12403       type = TYPE_MAIN_DECL (TREE_TYPE (type));
12404       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
12405           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
12406         type = push_template_decl (type);
12407       type = TREE_TYPE (type);
12408       if (nested_name_specifier)
12409         {
12410           *nested_name_specifier_p = true;
12411           if (pop_p)
12412             pop_scope (nested_name_specifier);
12413         }
12414     }
12415   /* Indicate whether this class was declared as a `class' or as a
12416      `struct'.  */
12417   if (TREE_CODE (type) == RECORD_TYPE)
12418     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
12419   cp_parser_check_class_key (class_key, type);
12420
12421   /* Enter the scope containing the class; the names of base classes
12422      should be looked up in that context.  For example, given:
12423
12424        struct A { struct B {}; struct C; };
12425        struct A::C : B {};
12426
12427      is valid.  */
12428   if (nested_name_specifier)
12429     pop_p = push_scope (nested_name_specifier);
12430   /* Now, look for the base-clause.  */
12431   token = cp_lexer_peek_token (parser->lexer);
12432   if (token->type == CPP_COLON)
12433     {
12434       tree bases;
12435
12436       /* Get the list of base-classes.  */
12437       bases = cp_parser_base_clause (parser);
12438       /* Process them.  */
12439       xref_basetypes (type, bases);
12440     }
12441   /* Leave the scope given by the nested-name-specifier.  We will
12442      enter the class scope itself while processing the members.  */
12443   if (pop_p)
12444     pop_scope (nested_name_specifier);
12445
12446  done:
12447   if (invalid_explicit_specialization_p)
12448     {
12449       end_specialization ();
12450       --parser->num_template_parameter_lists;
12451     }
12452   *attributes_p = attributes;
12453   return type;
12454 }
12455
12456 /* Parse a class-key.
12457
12458    class-key:
12459      class
12460      struct
12461      union
12462
12463    Returns the kind of class-key specified, or none_type to indicate
12464    error.  */
12465
12466 static enum tag_types
12467 cp_parser_class_key (cp_parser* parser)
12468 {
12469   cp_token *token;
12470   enum tag_types tag_type;
12471
12472   /* Look for the class-key.  */
12473   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
12474   if (!token)
12475     return none_type;
12476
12477   /* Check to see if the TOKEN is a class-key.  */
12478   tag_type = cp_parser_token_is_class_key (token);
12479   if (!tag_type)
12480     cp_parser_error (parser, "expected class-key");
12481   return tag_type;
12482 }
12483
12484 /* Parse an (optional) member-specification.
12485
12486    member-specification:
12487      member-declaration member-specification [opt]
12488      access-specifier : member-specification [opt]  */
12489
12490 static void
12491 cp_parser_member_specification_opt (cp_parser* parser)
12492 {
12493   while (true)
12494     {
12495       cp_token *token;
12496       enum rid keyword;
12497
12498       /* Peek at the next token.  */
12499       token = cp_lexer_peek_token (parser->lexer);
12500       /* If it's a `}', or EOF then we've seen all the members.  */
12501       if (token->type == CPP_CLOSE_BRACE || token->type == CPP_EOF)
12502         break;
12503
12504       /* See if this token is a keyword.  */
12505       keyword = token->keyword;
12506       switch (keyword)
12507         {
12508         case RID_PUBLIC:
12509         case RID_PROTECTED:
12510         case RID_PRIVATE:
12511           /* Consume the access-specifier.  */
12512           cp_lexer_consume_token (parser->lexer);
12513           /* Remember which access-specifier is active.  */
12514           current_access_specifier = token->value;
12515           /* Look for the `:'.  */
12516           cp_parser_require (parser, CPP_COLON, "`:'");
12517           break;
12518
12519         default:
12520           /* Otherwise, the next construction must be a
12521              member-declaration.  */
12522           cp_parser_member_declaration (parser);
12523         }
12524     }
12525 }
12526
12527 /* Parse a member-declaration.
12528
12529    member-declaration:
12530      decl-specifier-seq [opt] member-declarator-list [opt] ;
12531      function-definition ; [opt]
12532      :: [opt] nested-name-specifier template [opt] unqualified-id ;
12533      using-declaration
12534      template-declaration
12535
12536    member-declarator-list:
12537      member-declarator
12538      member-declarator-list , member-declarator
12539
12540    member-declarator:
12541      declarator pure-specifier [opt]
12542      declarator constant-initializer [opt]
12543      identifier [opt] : constant-expression
12544
12545    GNU Extensions:
12546
12547    member-declaration:
12548      __extension__ member-declaration
12549
12550    member-declarator:
12551      declarator attributes [opt] pure-specifier [opt]
12552      declarator attributes [opt] constant-initializer [opt]
12553      identifier [opt] attributes [opt] : constant-expression  */
12554
12555 static void
12556 cp_parser_member_declaration (cp_parser* parser)
12557 {
12558   tree decl_specifiers;
12559   tree prefix_attributes;
12560   tree decl;
12561   int declares_class_or_enum;
12562   bool friend_p;
12563   cp_token *token;
12564   int saved_pedantic;
12565
12566   /* Check for the `__extension__' keyword.  */
12567   if (cp_parser_extension_opt (parser, &saved_pedantic))
12568     {
12569       /* Recurse.  */
12570       cp_parser_member_declaration (parser);
12571       /* Restore the old value of the PEDANTIC flag.  */
12572       pedantic = saved_pedantic;
12573
12574       return;
12575     }
12576
12577   /* Check for a template-declaration.  */
12578   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
12579     {
12580       /* Parse the template-declaration.  */
12581       cp_parser_template_declaration (parser, /*member_p=*/true);
12582
12583       return;
12584     }
12585
12586   /* Check for a using-declaration.  */
12587   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
12588     {
12589       /* Parse the using-declaration.  */
12590       cp_parser_using_declaration (parser);
12591
12592       return;
12593     }
12594
12595   /* Parse the decl-specifier-seq.  */
12596   decl_specifiers
12597     = cp_parser_decl_specifier_seq (parser,
12598                                     CP_PARSER_FLAGS_OPTIONAL,
12599                                     &prefix_attributes,
12600                                     &declares_class_or_enum);
12601   /* Check for an invalid type-name.  */
12602   if (cp_parser_parse_and_diagnose_invalid_type_name (parser))
12603     return;
12604   /* If there is no declarator, then the decl-specifier-seq should
12605      specify a type.  */
12606   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
12607     {
12608       /* If there was no decl-specifier-seq, and the next token is a
12609          `;', then we have something like:
12610
12611            struct S { ; };
12612
12613          [class.mem]
12614
12615          Each member-declaration shall declare at least one member
12616          name of the class.  */
12617       if (!decl_specifiers)
12618         {
12619           if (pedantic)
12620             pedwarn ("extra semicolon");
12621         }
12622       else
12623         {
12624           tree type;
12625
12626           /* See if this declaration is a friend.  */
12627           friend_p = cp_parser_friend_p (decl_specifiers);
12628           /* If there were decl-specifiers, check to see if there was
12629              a class-declaration.  */
12630           type = check_tag_decl (decl_specifiers);
12631           /* Nested classes have already been added to the class, but
12632              a `friend' needs to be explicitly registered.  */
12633           if (friend_p)
12634             {
12635               /* If the `friend' keyword was present, the friend must
12636                  be introduced with a class-key.  */
12637                if (!declares_class_or_enum)
12638                  error ("a class-key must be used when declaring a friend");
12639                /* In this case:
12640
12641                     template <typename T> struct A {
12642                       friend struct A<T>::B;
12643                     };
12644
12645                   A<T>::B will be represented by a TYPENAME_TYPE, and
12646                   therefore not recognized by check_tag_decl.  */
12647                if (!type)
12648                  {
12649                    tree specifier;
12650
12651                    for (specifier = decl_specifiers;
12652                         specifier;
12653                         specifier = TREE_CHAIN (specifier))
12654                      {
12655                        tree s = TREE_VALUE (specifier);
12656
12657                        if (TREE_CODE (s) == IDENTIFIER_NODE)
12658                          get_global_value_if_present (s, &type);
12659                        if (TREE_CODE (s) == TYPE_DECL)
12660                          s = TREE_TYPE (s);
12661                        if (TYPE_P (s))
12662                          {
12663                            type = s;
12664                            break;
12665                          }
12666                      }
12667                  }
12668                if (!type || !TYPE_P (type))
12669                  error ("friend declaration does not name a class or "
12670                         "function");
12671                else
12672                  make_friend_class (current_class_type, type,
12673                                     /*complain=*/true);
12674             }
12675           /* If there is no TYPE, an error message will already have
12676              been issued.  */
12677           else if (!type)
12678             ;
12679           /* An anonymous aggregate has to be handled specially; such
12680              a declaration really declares a data member (with a
12681              particular type), as opposed to a nested class.  */
12682           else if (ANON_AGGR_TYPE_P (type))
12683             {
12684               /* Remove constructors and such from TYPE, now that we
12685                  know it is an anonymous aggregate.  */
12686               fixup_anonymous_aggr (type);
12687               /* And make the corresponding data member.  */
12688               decl = build_decl (FIELD_DECL, NULL_TREE, type);
12689               /* Add it to the class.  */
12690               finish_member_declaration (decl);
12691             }
12692           else
12693             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
12694         }
12695     }
12696   else
12697     {
12698       /* See if these declarations will be friends.  */
12699       friend_p = cp_parser_friend_p (decl_specifiers);
12700
12701       /* Keep going until we hit the `;' at the end of the
12702          declaration.  */
12703       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
12704         {
12705           tree attributes = NULL_TREE;
12706           tree first_attribute;
12707
12708           /* Peek at the next token.  */
12709           token = cp_lexer_peek_token (parser->lexer);
12710
12711           /* Check for a bitfield declaration.  */
12712           if (token->type == CPP_COLON
12713               || (token->type == CPP_NAME
12714                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
12715                   == CPP_COLON))
12716             {
12717               tree identifier;
12718               tree width;
12719
12720               /* Get the name of the bitfield.  Note that we cannot just
12721                  check TOKEN here because it may have been invalidated by
12722                  the call to cp_lexer_peek_nth_token above.  */
12723               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
12724                 identifier = cp_parser_identifier (parser);
12725               else
12726                 identifier = NULL_TREE;
12727
12728               /* Consume the `:' token.  */
12729               cp_lexer_consume_token (parser->lexer);
12730               /* Get the width of the bitfield.  */
12731               width
12732                 = cp_parser_constant_expression (parser,
12733                                                  /*allow_non_constant=*/false,
12734                                                  NULL);
12735
12736               /* Look for attributes that apply to the bitfield.  */
12737               attributes = cp_parser_attributes_opt (parser);
12738               /* Remember which attributes are prefix attributes and
12739                  which are not.  */
12740               first_attribute = attributes;
12741               /* Combine the attributes.  */
12742               attributes = chainon (prefix_attributes, attributes);
12743
12744               /* Create the bitfield declaration.  */
12745               decl = grokbitfield (identifier,
12746                                    decl_specifiers,
12747                                    width);
12748               /* Apply the attributes.  */
12749               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
12750             }
12751           else
12752             {
12753               tree declarator;
12754               tree initializer;
12755               tree asm_specification;
12756               int ctor_dtor_or_conv_p;
12757
12758               /* Parse the declarator.  */
12759               declarator
12760                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
12761                                         &ctor_dtor_or_conv_p,
12762                                         /*parenthesized_p=*/NULL);
12763
12764               /* If something went wrong parsing the declarator, make sure
12765                  that we at least consume some tokens.  */
12766               if (declarator == error_mark_node)
12767                 {
12768                   /* Skip to the end of the statement.  */
12769                   cp_parser_skip_to_end_of_statement (parser);
12770                   /* If the next token is not a semicolon, that is
12771                      probably because we just skipped over the body of
12772                      a function.  So, we consume a semicolon if
12773                      present, but do not issue an error message if it
12774                      is not present.  */
12775                   if (cp_lexer_next_token_is (parser->lexer,
12776                                               CPP_SEMICOLON))
12777                     cp_lexer_consume_token (parser->lexer);
12778                   return;
12779                 }
12780
12781               cp_parser_check_for_definition_in_return_type
12782                 (declarator, declares_class_or_enum);
12783
12784               /* Look for an asm-specification.  */
12785               asm_specification = cp_parser_asm_specification_opt (parser);
12786               /* Look for attributes that apply to the declaration.  */
12787               attributes = cp_parser_attributes_opt (parser);
12788               /* Remember which attributes are prefix attributes and
12789                  which are not.  */
12790               first_attribute = attributes;
12791               /* Combine the attributes.  */
12792               attributes = chainon (prefix_attributes, attributes);
12793
12794               /* If it's an `=', then we have a constant-initializer or a
12795                  pure-specifier.  It is not correct to parse the
12796                  initializer before registering the member declaration
12797                  since the member declaration should be in scope while
12798                  its initializer is processed.  However, the rest of the
12799                  front end does not yet provide an interface that allows
12800                  us to handle this correctly.  */
12801               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12802                 {
12803                   /* In [class.mem]:
12804
12805                      A pure-specifier shall be used only in the declaration of
12806                      a virtual function.
12807
12808                      A member-declarator can contain a constant-initializer
12809                      only if it declares a static member of integral or
12810                      enumeration type.
12811
12812                      Therefore, if the DECLARATOR is for a function, we look
12813                      for a pure-specifier; otherwise, we look for a
12814                      constant-initializer.  When we call `grokfield', it will
12815                      perform more stringent semantics checks.  */
12816                   if (TREE_CODE (declarator) == CALL_EXPR)
12817                     initializer = cp_parser_pure_specifier (parser);
12818                   else
12819                     /* Parse the initializer.  */
12820                     initializer = cp_parser_constant_initializer (parser);
12821                 }
12822               /* Otherwise, there is no initializer.  */
12823               else
12824                 initializer = NULL_TREE;
12825
12826               /* See if we are probably looking at a function
12827                  definition.  We are certainly not looking at at a
12828                  member-declarator.  Calling `grokfield' has
12829                  side-effects, so we must not do it unless we are sure
12830                  that we are looking at a member-declarator.  */
12831               if (cp_parser_token_starts_function_definition_p
12832                   (cp_lexer_peek_token (parser->lexer)))
12833                 {
12834                   /* The grammar does not allow a pure-specifier to be
12835                      used when a member function is defined.  (It is
12836                      possible that this fact is an oversight in the
12837                      standard, since a pure function may be defined
12838                      outside of the class-specifier.  */
12839                   if (initializer)
12840                     error ("pure-specifier on function-definition");
12841                   decl = cp_parser_save_member_function_body (parser,
12842                                                               decl_specifiers,
12843                                                               declarator,
12844                                                               attributes);
12845                   /* If the member was not a friend, declare it here.  */
12846                   if (!friend_p)
12847                     finish_member_declaration (decl);
12848                   /* Peek at the next token.  */
12849                   token = cp_lexer_peek_token (parser->lexer);
12850                   /* If the next token is a semicolon, consume it.  */
12851                   if (token->type == CPP_SEMICOLON)
12852                     cp_lexer_consume_token (parser->lexer);
12853                   return;
12854                 }
12855               else
12856                 {
12857                   /* Create the declaration.  */
12858                   decl = grokfield (declarator, decl_specifiers,
12859                                     initializer, asm_specification,
12860                                     attributes);
12861                   /* Any initialization must have been from a
12862                      constant-expression.  */
12863                   if (decl && TREE_CODE (decl) == VAR_DECL && initializer)
12864                     DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
12865                 }
12866             }
12867
12868           /* Reset PREFIX_ATTRIBUTES.  */
12869           while (attributes && TREE_CHAIN (attributes) != first_attribute)
12870             attributes = TREE_CHAIN (attributes);
12871           if (attributes)
12872             TREE_CHAIN (attributes) = NULL_TREE;
12873
12874           /* If there is any qualification still in effect, clear it
12875              now; we will be starting fresh with the next declarator.  */
12876           parser->scope = NULL_TREE;
12877           parser->qualifying_scope = NULL_TREE;
12878           parser->object_scope = NULL_TREE;
12879           /* If it's a `,', then there are more declarators.  */
12880           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12881             cp_lexer_consume_token (parser->lexer);
12882           /* If the next token isn't a `;', then we have a parse error.  */
12883           else if (cp_lexer_next_token_is_not (parser->lexer,
12884                                                CPP_SEMICOLON))
12885             {
12886               cp_parser_error (parser, "expected `;'");
12887               /* Skip tokens until we find a `;'.  */
12888               cp_parser_skip_to_end_of_statement (parser);
12889
12890               break;
12891             }
12892
12893           if (decl)
12894             {
12895               /* Add DECL to the list of members.  */
12896               if (!friend_p)
12897                 finish_member_declaration (decl);
12898
12899               if (TREE_CODE (decl) == FUNCTION_DECL)
12900                 cp_parser_save_default_args (parser, decl);
12901             }
12902         }
12903     }
12904
12905   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
12906 }
12907
12908 /* Parse a pure-specifier.
12909
12910    pure-specifier:
12911      = 0
12912
12913    Returns INTEGER_ZERO_NODE if a pure specifier is found.
12914    Otherwise, ERROR_MARK_NODE is returned.  */
12915
12916 static tree
12917 cp_parser_pure_specifier (cp_parser* parser)
12918 {
12919   cp_token *token;
12920
12921   /* Look for the `=' token.  */
12922   if (!cp_parser_require (parser, CPP_EQ, "`='"))
12923     return error_mark_node;
12924   /* Look for the `0' token.  */
12925   token = cp_parser_require (parser, CPP_NUMBER, "`0'");
12926   /* Unfortunately, this will accept `0L' and `0x00' as well.  We need
12927      to get information from the lexer about how the number was
12928      spelled in order to fix this problem.  */
12929   if (!token || !integer_zerop (token->value))
12930     return error_mark_node;
12931
12932   return integer_zero_node;
12933 }
12934
12935 /* Parse a constant-initializer.
12936
12937    constant-initializer:
12938      = constant-expression
12939
12940    Returns a representation of the constant-expression.  */
12941
12942 static tree
12943 cp_parser_constant_initializer (cp_parser* parser)
12944 {
12945   /* Look for the `=' token.  */
12946   if (!cp_parser_require (parser, CPP_EQ, "`='"))
12947     return error_mark_node;
12948
12949   /* It is invalid to write:
12950
12951        struct S { static const int i = { 7 }; };
12952
12953      */
12954   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
12955     {
12956       cp_parser_error (parser,
12957                        "a brace-enclosed initializer is not allowed here");
12958       /* Consume the opening brace.  */
12959       cp_lexer_consume_token (parser->lexer);
12960       /* Skip the initializer.  */
12961       cp_parser_skip_to_closing_brace (parser);
12962       /* Look for the trailing `}'.  */
12963       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12964
12965       return error_mark_node;
12966     }
12967
12968   return cp_parser_constant_expression (parser,
12969                                         /*allow_non_constant=*/false,
12970                                         NULL);
12971 }
12972
12973 /* Derived classes [gram.class.derived] */
12974
12975 /* Parse a base-clause.
12976
12977    base-clause:
12978      : base-specifier-list
12979
12980    base-specifier-list:
12981      base-specifier
12982      base-specifier-list , base-specifier
12983
12984    Returns a TREE_LIST representing the base-classes, in the order in
12985    which they were declared.  The representation of each node is as
12986    described by cp_parser_base_specifier.
12987
12988    In the case that no bases are specified, this function will return
12989    NULL_TREE, not ERROR_MARK_NODE.  */
12990
12991 static tree
12992 cp_parser_base_clause (cp_parser* parser)
12993 {
12994   tree bases = NULL_TREE;
12995
12996   /* Look for the `:' that begins the list.  */
12997   cp_parser_require (parser, CPP_COLON, "`:'");
12998
12999   /* Scan the base-specifier-list.  */
13000   while (true)
13001     {
13002       cp_token *token;
13003       tree base;
13004
13005       /* Look for the base-specifier.  */
13006       base = cp_parser_base_specifier (parser);
13007       /* Add BASE to the front of the list.  */
13008       if (base != error_mark_node)
13009         {
13010           TREE_CHAIN (base) = bases;
13011           bases = base;
13012         }
13013       /* Peek at the next token.  */
13014       token = cp_lexer_peek_token (parser->lexer);
13015       /* If it's not a comma, then the list is complete.  */
13016       if (token->type != CPP_COMMA)
13017         break;
13018       /* Consume the `,'.  */
13019       cp_lexer_consume_token (parser->lexer);
13020     }
13021
13022   /* PARSER->SCOPE may still be non-NULL at this point, if the last
13023      base class had a qualified name.  However, the next name that
13024      appears is certainly not qualified.  */
13025   parser->scope = NULL_TREE;
13026   parser->qualifying_scope = NULL_TREE;
13027   parser->object_scope = NULL_TREE;
13028
13029   return nreverse (bases);
13030 }
13031
13032 /* Parse a base-specifier.
13033
13034    base-specifier:
13035      :: [opt] nested-name-specifier [opt] class-name
13036      virtual access-specifier [opt] :: [opt] nested-name-specifier
13037        [opt] class-name
13038      access-specifier virtual [opt] :: [opt] nested-name-specifier
13039        [opt] class-name
13040
13041    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
13042    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
13043    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
13044    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
13045
13046 static tree
13047 cp_parser_base_specifier (cp_parser* parser)
13048 {
13049   cp_token *token;
13050   bool done = false;
13051   bool virtual_p = false;
13052   bool duplicate_virtual_error_issued_p = false;
13053   bool duplicate_access_error_issued_p = false;
13054   bool class_scope_p, template_p;
13055   tree access = access_default_node;
13056   tree type;
13057
13058   /* Process the optional `virtual' and `access-specifier'.  */
13059   while (!done)
13060     {
13061       /* Peek at the next token.  */
13062       token = cp_lexer_peek_token (parser->lexer);
13063       /* Process `virtual'.  */
13064       switch (token->keyword)
13065         {
13066         case RID_VIRTUAL:
13067           /* If `virtual' appears more than once, issue an error.  */
13068           if (virtual_p && !duplicate_virtual_error_issued_p)
13069             {
13070               cp_parser_error (parser,
13071                                "`virtual' specified more than once in base-specified");
13072               duplicate_virtual_error_issued_p = true;
13073             }
13074
13075           virtual_p = true;
13076
13077           /* Consume the `virtual' token.  */
13078           cp_lexer_consume_token (parser->lexer);
13079
13080           break;
13081
13082         case RID_PUBLIC:
13083         case RID_PROTECTED:
13084         case RID_PRIVATE:
13085           /* If more than one access specifier appears, issue an
13086              error.  */
13087           if (access != access_default_node
13088               && !duplicate_access_error_issued_p)
13089             {
13090               cp_parser_error (parser,
13091                                "more than one access specifier in base-specified");
13092               duplicate_access_error_issued_p = true;
13093             }
13094
13095           access = ridpointers[(int) token->keyword];
13096
13097           /* Consume the access-specifier.  */
13098           cp_lexer_consume_token (parser->lexer);
13099
13100           break;
13101
13102         default:
13103           done = true;
13104           break;
13105         }
13106     }
13107   /* It is not uncommon to see programs mechanically, erroneously, use
13108      the 'typename' keyword to denote (dependent) qualified types
13109      as base classes.  */
13110   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
13111     {
13112       if (!processing_template_decl)
13113         error ("keyword `typename' not allowed outside of templates");
13114       else
13115         error ("keyword `typename' not allowed in this context "
13116                "(the base class is implicitly a type)");
13117       cp_lexer_consume_token (parser->lexer);
13118     }
13119
13120   /* Look for the optional `::' operator.  */
13121   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
13122   /* Look for the nested-name-specifier.  The simplest way to
13123      implement:
13124
13125        [temp.res]
13126
13127        The keyword `typename' is not permitted in a base-specifier or
13128        mem-initializer; in these contexts a qualified name that
13129        depends on a template-parameter is implicitly assumed to be a
13130        type name.
13131
13132      is to pretend that we have seen the `typename' keyword at this
13133      point.  */
13134   cp_parser_nested_name_specifier_opt (parser,
13135                                        /*typename_keyword_p=*/true,
13136                                        /*check_dependency_p=*/true,
13137                                        /*type_p=*/true,
13138                                        /*is_declaration=*/true);
13139   /* If the base class is given by a qualified name, assume that names
13140      we see are type names or templates, as appropriate.  */
13141   class_scope_p = (parser->scope && TYPE_P (parser->scope));
13142   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
13143
13144   /* Finally, look for the class-name.  */
13145   type = cp_parser_class_name (parser,
13146                                class_scope_p,
13147                                template_p,
13148                                /*type_p=*/true,
13149                                /*check_dependency_p=*/true,
13150                                /*class_head_p=*/false,
13151                                /*is_declaration=*/true);
13152
13153   if (type == error_mark_node)
13154     return error_mark_node;
13155
13156   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
13157 }
13158
13159 /* Exception handling [gram.exception] */
13160
13161 /* Parse an (optional) exception-specification.
13162
13163    exception-specification:
13164      throw ( type-id-list [opt] )
13165
13166    Returns a TREE_LIST representing the exception-specification.  The
13167    TREE_VALUE of each node is a type.  */
13168
13169 static tree
13170 cp_parser_exception_specification_opt (cp_parser* parser)
13171 {
13172   cp_token *token;
13173   tree type_id_list;
13174
13175   /* Peek at the next token.  */
13176   token = cp_lexer_peek_token (parser->lexer);
13177   /* If it's not `throw', then there's no exception-specification.  */
13178   if (!cp_parser_is_keyword (token, RID_THROW))
13179     return NULL_TREE;
13180
13181   /* Consume the `throw'.  */
13182   cp_lexer_consume_token (parser->lexer);
13183
13184   /* Look for the `('.  */
13185   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13186
13187   /* Peek at the next token.  */
13188   token = cp_lexer_peek_token (parser->lexer);
13189   /* If it's not a `)', then there is a type-id-list.  */
13190   if (token->type != CPP_CLOSE_PAREN)
13191     {
13192       const char *saved_message;
13193
13194       /* Types may not be defined in an exception-specification.  */
13195       saved_message = parser->type_definition_forbidden_message;
13196       parser->type_definition_forbidden_message
13197         = "types may not be defined in an exception-specification";
13198       /* Parse the type-id-list.  */
13199       type_id_list = cp_parser_type_id_list (parser);
13200       /* Restore the saved message.  */
13201       parser->type_definition_forbidden_message = saved_message;
13202     }
13203   else
13204     type_id_list = empty_except_spec;
13205
13206   /* Look for the `)'.  */
13207   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13208
13209   return type_id_list;
13210 }
13211
13212 /* Parse an (optional) type-id-list.
13213
13214    type-id-list:
13215      type-id
13216      type-id-list , type-id
13217
13218    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
13219    in the order that the types were presented.  */
13220
13221 static tree
13222 cp_parser_type_id_list (cp_parser* parser)
13223 {
13224   tree types = NULL_TREE;
13225
13226   while (true)
13227     {
13228       cp_token *token;
13229       tree type;
13230
13231       /* Get the next type-id.  */
13232       type = cp_parser_type_id (parser);
13233       /* Add it to the list.  */
13234       types = add_exception_specifier (types, type, /*complain=*/1);
13235       /* Peek at the next token.  */
13236       token = cp_lexer_peek_token (parser->lexer);
13237       /* If it is not a `,', we are done.  */
13238       if (token->type != CPP_COMMA)
13239         break;
13240       /* Consume the `,'.  */
13241       cp_lexer_consume_token (parser->lexer);
13242     }
13243
13244   return nreverse (types);
13245 }
13246
13247 /* Parse a try-block.
13248
13249    try-block:
13250      try compound-statement handler-seq  */
13251
13252 static tree
13253 cp_parser_try_block (cp_parser* parser)
13254 {
13255   tree try_block;
13256
13257   cp_parser_require_keyword (parser, RID_TRY, "`try'");
13258   try_block = begin_try_block ();
13259   cp_parser_compound_statement (parser, NULL, true);
13260   finish_try_block (try_block);
13261   cp_parser_handler_seq (parser);
13262   finish_handler_sequence (try_block);
13263
13264   return try_block;
13265 }
13266
13267 /* Parse a function-try-block.
13268
13269    function-try-block:
13270      try ctor-initializer [opt] function-body handler-seq  */
13271
13272 static bool
13273 cp_parser_function_try_block (cp_parser* parser)
13274 {
13275   tree try_block;
13276   bool ctor_initializer_p;
13277
13278   /* Look for the `try' keyword.  */
13279   if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
13280     return false;
13281   /* Let the rest of the front-end know where we are.  */
13282   try_block = begin_function_try_block ();
13283   /* Parse the function-body.  */
13284   ctor_initializer_p
13285     = cp_parser_ctor_initializer_opt_and_function_body (parser);
13286   /* We're done with the `try' part.  */
13287   finish_function_try_block (try_block);
13288   /* Parse the handlers.  */
13289   cp_parser_handler_seq (parser);
13290   /* We're done with the handlers.  */
13291   finish_function_handler_sequence (try_block);
13292
13293   return ctor_initializer_p;
13294 }
13295
13296 /* Parse a handler-seq.
13297
13298    handler-seq:
13299      handler handler-seq [opt]  */
13300
13301 static void
13302 cp_parser_handler_seq (cp_parser* parser)
13303 {
13304   while (true)
13305     {
13306       cp_token *token;
13307
13308       /* Parse the handler.  */
13309       cp_parser_handler (parser);
13310       /* Peek at the next token.  */
13311       token = cp_lexer_peek_token (parser->lexer);
13312       /* If it's not `catch' then there are no more handlers.  */
13313       if (!cp_parser_is_keyword (token, RID_CATCH))
13314         break;
13315     }
13316 }
13317
13318 /* Parse a handler.
13319
13320    handler:
13321      catch ( exception-declaration ) compound-statement  */
13322
13323 static void
13324 cp_parser_handler (cp_parser* parser)
13325 {
13326   tree handler;
13327   tree declaration;
13328
13329   cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
13330   handler = begin_handler ();
13331   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13332   declaration = cp_parser_exception_declaration (parser);
13333   finish_handler_parms (declaration, handler);
13334   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13335   cp_parser_compound_statement (parser, NULL, false);
13336   finish_handler (handler);
13337 }
13338
13339 /* Parse an exception-declaration.
13340
13341    exception-declaration:
13342      type-specifier-seq declarator
13343      type-specifier-seq abstract-declarator
13344      type-specifier-seq
13345      ...
13346
13347    Returns a VAR_DECL for the declaration, or NULL_TREE if the
13348    ellipsis variant is used.  */
13349
13350 static tree
13351 cp_parser_exception_declaration (cp_parser* parser)
13352 {
13353   tree type_specifiers;
13354   tree declarator;
13355   const char *saved_message;
13356
13357   /* If it's an ellipsis, it's easy to handle.  */
13358   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
13359     {
13360       /* Consume the `...' token.  */
13361       cp_lexer_consume_token (parser->lexer);
13362       return NULL_TREE;
13363     }
13364
13365   /* Types may not be defined in exception-declarations.  */
13366   saved_message = parser->type_definition_forbidden_message;
13367   parser->type_definition_forbidden_message
13368     = "types may not be defined in exception-declarations";
13369
13370   /* Parse the type-specifier-seq.  */
13371   type_specifiers = cp_parser_type_specifier_seq (parser);
13372   /* If it's a `)', then there is no declarator.  */
13373   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
13374     declarator = NULL_TREE;
13375   else
13376     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
13377                                        /*ctor_dtor_or_conv_p=*/NULL,
13378                                        /*parenthesized_p=*/NULL);
13379
13380   /* Restore the saved message.  */
13381   parser->type_definition_forbidden_message = saved_message;
13382
13383   return start_handler_parms (type_specifiers, declarator);
13384 }
13385
13386 /* Parse a throw-expression.
13387
13388    throw-expression:
13389      throw assignment-expression [opt]
13390
13391    Returns a THROW_EXPR representing the throw-expression.  */
13392
13393 static tree
13394 cp_parser_throw_expression (cp_parser* parser)
13395 {
13396   tree expression;
13397   cp_token* token;
13398
13399   cp_parser_require_keyword (parser, RID_THROW, "`throw'");
13400   token = cp_lexer_peek_token (parser->lexer);
13401   /* Figure out whether or not there is an assignment-expression
13402      following the "throw" keyword.  */
13403   if (token->type == CPP_COMMA
13404       || token->type == CPP_SEMICOLON
13405       || token->type == CPP_CLOSE_PAREN
13406       || token->type == CPP_CLOSE_SQUARE
13407       || token->type == CPP_CLOSE_BRACE
13408       || token->type == CPP_COLON)
13409     expression = NULL_TREE;
13410   else
13411     expression = cp_parser_assignment_expression (parser);
13412
13413   return build_throw (expression);
13414 }
13415
13416 /* GNU Extensions */
13417
13418 /* Parse an (optional) asm-specification.
13419
13420    asm-specification:
13421      asm ( string-literal )
13422
13423    If the asm-specification is present, returns a STRING_CST
13424    corresponding to the string-literal.  Otherwise, returns
13425    NULL_TREE.  */
13426
13427 static tree
13428 cp_parser_asm_specification_opt (cp_parser* parser)
13429 {
13430   cp_token *token;
13431   tree asm_specification;
13432
13433   /* Peek at the next token.  */
13434   token = cp_lexer_peek_token (parser->lexer);
13435   /* If the next token isn't the `asm' keyword, then there's no
13436      asm-specification.  */
13437   if (!cp_parser_is_keyword (token, RID_ASM))
13438     return NULL_TREE;
13439
13440   /* Consume the `asm' token.  */
13441   cp_lexer_consume_token (parser->lexer);
13442   /* Look for the `('.  */
13443   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13444
13445   /* Look for the string-literal.  */
13446   token = cp_parser_require (parser, CPP_STRING, "string-literal");
13447   if (token)
13448     asm_specification = token->value;
13449   else
13450     asm_specification = NULL_TREE;
13451
13452   /* Look for the `)'.  */
13453   cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
13454
13455   return asm_specification;
13456 }
13457
13458 /* Parse an asm-operand-list.
13459
13460    asm-operand-list:
13461      asm-operand
13462      asm-operand-list , asm-operand
13463
13464    asm-operand:
13465      string-literal ( expression )
13466      [ string-literal ] string-literal ( expression )
13467
13468    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
13469    each node is the expression.  The TREE_PURPOSE is itself a
13470    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
13471    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
13472    is a STRING_CST for the string literal before the parenthesis.  */
13473
13474 static tree
13475 cp_parser_asm_operand_list (cp_parser* parser)
13476 {
13477   tree asm_operands = NULL_TREE;
13478
13479   while (true)
13480     {
13481       tree string_literal;
13482       tree expression;
13483       tree name;
13484       cp_token *token;
13485
13486       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
13487         {
13488           /* Consume the `[' token.  */
13489           cp_lexer_consume_token (parser->lexer);
13490           /* Read the operand name.  */
13491           name = cp_parser_identifier (parser);
13492           if (name != error_mark_node)
13493             name = build_string (IDENTIFIER_LENGTH (name),
13494                                  IDENTIFIER_POINTER (name));
13495           /* Look for the closing `]'.  */
13496           cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
13497         }
13498       else
13499         name = NULL_TREE;
13500       /* Look for the string-literal.  */
13501       token = cp_parser_require (parser, CPP_STRING, "string-literal");
13502       string_literal = token ? token->value : error_mark_node;
13503       c_lex_string_translate = 1;
13504       /* Look for the `('.  */
13505       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13506       /* Parse the expression.  */
13507       expression = cp_parser_expression (parser);
13508       /* Look for the `)'.  */
13509       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13510       c_lex_string_translate = 0;
13511       /* Add this operand to the list.  */
13512       asm_operands = tree_cons (build_tree_list (name, string_literal),
13513                                 expression,
13514                                 asm_operands);
13515       /* If the next token is not a `,', there are no more
13516          operands.  */
13517       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13518         break;
13519       /* Consume the `,'.  */
13520       cp_lexer_consume_token (parser->lexer);
13521     }
13522
13523   return nreverse (asm_operands);
13524 }
13525
13526 /* Parse an asm-clobber-list.
13527
13528    asm-clobber-list:
13529      string-literal
13530      asm-clobber-list , string-literal
13531
13532    Returns a TREE_LIST, indicating the clobbers in the order that they
13533    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
13534
13535 static tree
13536 cp_parser_asm_clobber_list (cp_parser* parser)
13537 {
13538   tree clobbers = NULL_TREE;
13539
13540   while (true)
13541     {
13542       cp_token *token;
13543       tree string_literal;
13544
13545       /* Look for the string literal.  */
13546       token = cp_parser_require (parser, CPP_STRING, "string-literal");
13547       string_literal = token ? token->value : error_mark_node;
13548       /* Add it to the list.  */
13549       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
13550       /* If the next token is not a `,', then the list is
13551          complete.  */
13552       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13553         break;
13554       /* Consume the `,' token.  */
13555       cp_lexer_consume_token (parser->lexer);
13556     }
13557
13558   return clobbers;
13559 }
13560
13561 /* Parse an (optional) series of attributes.
13562
13563    attributes:
13564      attributes attribute
13565
13566    attribute:
13567      __attribute__ (( attribute-list [opt] ))
13568
13569    The return value is as for cp_parser_attribute_list.  */
13570
13571 static tree
13572 cp_parser_attributes_opt (cp_parser* parser)
13573 {
13574   tree attributes = NULL_TREE;
13575
13576   while (true)
13577     {
13578       cp_token *token;
13579       tree attribute_list;
13580
13581       /* Peek at the next token.  */
13582       token = cp_lexer_peek_token (parser->lexer);
13583       /* If it's not `__attribute__', then we're done.  */
13584       if (token->keyword != RID_ATTRIBUTE)
13585         break;
13586
13587       /* Consume the `__attribute__' keyword.  */
13588       cp_lexer_consume_token (parser->lexer);
13589       /* Look for the two `(' tokens.  */
13590       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13591       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13592
13593       /* Peek at the next token.  */
13594       token = cp_lexer_peek_token (parser->lexer);
13595       if (token->type != CPP_CLOSE_PAREN)
13596         /* Parse the attribute-list.  */
13597         attribute_list = cp_parser_attribute_list (parser);
13598       else
13599         /* If the next token is a `)', then there is no attribute
13600            list.  */
13601         attribute_list = NULL;
13602
13603       /* Look for the two `)' tokens.  */
13604       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13605       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13606
13607       /* Add these new attributes to the list.  */
13608       attributes = chainon (attributes, attribute_list);
13609     }
13610
13611   return attributes;
13612 }
13613
13614 /* Parse an attribute-list.
13615
13616    attribute-list:
13617      attribute
13618      attribute-list , attribute
13619
13620    attribute:
13621      identifier
13622      identifier ( identifier )
13623      identifier ( identifier , expression-list )
13624      identifier ( expression-list )
13625
13626    Returns a TREE_LIST.  Each node corresponds to an attribute.  THe
13627    TREE_PURPOSE of each node is the identifier indicating which
13628    attribute is in use.  The TREE_VALUE represents the arguments, if
13629    any.  */
13630
13631 static tree
13632 cp_parser_attribute_list (cp_parser* parser)
13633 {
13634   tree attribute_list = NULL_TREE;
13635
13636   c_lex_string_translate = 0;
13637   while (true)
13638     {
13639       cp_token *token;
13640       tree identifier;
13641       tree attribute;
13642
13643       /* Look for the identifier.  We also allow keywords here; for
13644          example `__attribute__ ((const))' is legal.  */
13645       token = cp_lexer_peek_token (parser->lexer);
13646       if (token->type != CPP_NAME
13647           && token->type != CPP_KEYWORD)
13648         return error_mark_node;
13649       /* Consume the token.  */
13650       token = cp_lexer_consume_token (parser->lexer);
13651
13652       /* Save away the identifier that indicates which attribute this is.  */
13653       identifier = token->value;
13654       attribute = build_tree_list (identifier, NULL_TREE);
13655
13656       /* Peek at the next token.  */
13657       token = cp_lexer_peek_token (parser->lexer);
13658       /* If it's an `(', then parse the attribute arguments.  */
13659       if (token->type == CPP_OPEN_PAREN)
13660         {
13661           tree arguments;
13662
13663           arguments = (cp_parser_parenthesized_expression_list
13664                        (parser, true, /*non_constant_p=*/NULL));
13665           /* Save the identifier and arguments away.  */
13666           TREE_VALUE (attribute) = arguments;
13667         }
13668
13669       /* Add this attribute to the list.  */
13670       TREE_CHAIN (attribute) = attribute_list;
13671       attribute_list = attribute;
13672
13673       /* Now, look for more attributes.  */
13674       token = cp_lexer_peek_token (parser->lexer);
13675       /* If the next token isn't a `,', we're done.  */
13676       if (token->type != CPP_COMMA)
13677         break;
13678
13679       /* Consume the comma and keep going.  */
13680       cp_lexer_consume_token (parser->lexer);
13681     }
13682   c_lex_string_translate = 1;
13683
13684   /* We built up the list in reverse order.  */
13685   return nreverse (attribute_list);
13686 }
13687
13688 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
13689    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
13690    current value of the PEDANTIC flag, regardless of whether or not
13691    the `__extension__' keyword is present.  The caller is responsible
13692    for restoring the value of the PEDANTIC flag.  */
13693
13694 static bool
13695 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
13696 {
13697   /* Save the old value of the PEDANTIC flag.  */
13698   *saved_pedantic = pedantic;
13699
13700   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
13701     {
13702       /* Consume the `__extension__' token.  */
13703       cp_lexer_consume_token (parser->lexer);
13704       /* We're not being pedantic while the `__extension__' keyword is
13705          in effect.  */
13706       pedantic = 0;
13707
13708       return true;
13709     }
13710
13711   return false;
13712 }
13713
13714 /* Parse a label declaration.
13715
13716    label-declaration:
13717      __label__ label-declarator-seq ;
13718
13719    label-declarator-seq:
13720      identifier , label-declarator-seq
13721      identifier  */
13722
13723 static void
13724 cp_parser_label_declaration (cp_parser* parser)
13725 {
13726   /* Look for the `__label__' keyword.  */
13727   cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
13728
13729   while (true)
13730     {
13731       tree identifier;
13732
13733       /* Look for an identifier.  */
13734       identifier = cp_parser_identifier (parser);
13735       /* Declare it as a lobel.  */
13736       finish_label_decl (identifier);
13737       /* If the next token is a `;', stop.  */
13738       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13739         break;
13740       /* Look for the `,' separating the label declarations.  */
13741       cp_parser_require (parser, CPP_COMMA, "`,'");
13742     }
13743
13744   /* Look for the final `;'.  */
13745   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
13746 }
13747
13748 /* Support Functions */
13749
13750 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
13751    NAME should have one of the representations used for an
13752    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
13753    is returned.  If PARSER->SCOPE is a dependent type, then a
13754    SCOPE_REF is returned.
13755
13756    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
13757    returned; the name was already resolved when the TEMPLATE_ID_EXPR
13758    was formed.  Abstractly, such entities should not be passed to this
13759    function, because they do not need to be looked up, but it is
13760    simpler to check for this special case here, rather than at the
13761    call-sites.
13762
13763    In cases not explicitly covered above, this function returns a
13764    DECL, OVERLOAD, or baselink representing the result of the lookup.
13765    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
13766    is returned.
13767
13768    If IS_TYPE is TRUE, bindings that do not refer to types are
13769    ignored.
13770
13771    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
13772    ignored.
13773
13774    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
13775    are ignored.
13776
13777    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
13778    types.  */
13779
13780 static tree
13781 cp_parser_lookup_name (cp_parser *parser, tree name,
13782                        bool is_type, bool is_template, bool is_namespace,
13783                        bool check_dependency)
13784 {
13785   tree decl;
13786   tree object_type = parser->context->object_type;
13787
13788   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
13789      no longer valid.  Note that if we are parsing tentatively, and
13790      the parse fails, OBJECT_TYPE will be automatically restored.  */
13791   parser->context->object_type = NULL_TREE;
13792
13793   if (name == error_mark_node)
13794     return error_mark_node;
13795
13796   /* A template-id has already been resolved; there is no lookup to
13797      do.  */
13798   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
13799     return name;
13800   if (BASELINK_P (name))
13801     {
13802       my_friendly_assert ((TREE_CODE (BASELINK_FUNCTIONS (name))
13803                            == TEMPLATE_ID_EXPR),
13804                           20020909);
13805       return name;
13806     }
13807
13808   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
13809      it should already have been checked to make sure that the name
13810      used matches the type being destroyed.  */
13811   if (TREE_CODE (name) == BIT_NOT_EXPR)
13812     {
13813       tree type;
13814
13815       /* Figure out to which type this destructor applies.  */
13816       if (parser->scope)
13817         type = parser->scope;
13818       else if (object_type)
13819         type = object_type;
13820       else
13821         type = current_class_type;
13822       /* If that's not a class type, there is no destructor.  */
13823       if (!type || !CLASS_TYPE_P (type))
13824         return error_mark_node;
13825       if (!CLASSTYPE_DESTRUCTORS (type))
13826           return error_mark_node;
13827       /* If it was a class type, return the destructor.  */
13828       return CLASSTYPE_DESTRUCTORS (type);
13829     }
13830
13831   /* By this point, the NAME should be an ordinary identifier.  If
13832      the id-expression was a qualified name, the qualifying scope is
13833      stored in PARSER->SCOPE at this point.  */
13834   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE,
13835                       20000619);
13836
13837   /* Perform the lookup.  */
13838   if (parser->scope)
13839     {
13840       bool dependent_p;
13841
13842       if (parser->scope == error_mark_node)
13843         return error_mark_node;
13844
13845       /* If the SCOPE is dependent, the lookup must be deferred until
13846          the template is instantiated -- unless we are explicitly
13847          looking up names in uninstantiated templates.  Even then, we
13848          cannot look up the name if the scope is not a class type; it
13849          might, for example, be a template type parameter.  */
13850       dependent_p = (TYPE_P (parser->scope)
13851                      && !(parser->in_declarator_p
13852                           && currently_open_class (parser->scope))
13853                      && dependent_type_p (parser->scope));
13854       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
13855            && dependent_p)
13856         {
13857           if (is_type)
13858             /* The resolution to Core Issue 180 says that `struct A::B'
13859                should be considered a type-name, even if `A' is
13860                dependent.  */
13861             decl = TYPE_NAME (make_typename_type (parser->scope,
13862                                                   name,
13863                                                   /*complain=*/1));
13864           else if (is_template)
13865             decl = make_unbound_class_template (parser->scope,
13866                                                 name,
13867                                                 /*complain=*/1);
13868           else
13869             decl = build_nt (SCOPE_REF, parser->scope, name);
13870         }
13871       else
13872         {
13873           bool pop_p = false;
13874
13875           /* If PARSER->SCOPE is a dependent type, then it must be a
13876              class type, and we must not be checking dependencies;
13877              otherwise, we would have processed this lookup above.  So
13878              that PARSER->SCOPE is not considered a dependent base by
13879              lookup_member, we must enter the scope here.  */
13880           if (dependent_p)
13881             pop_p = push_scope (parser->scope);
13882           /* If the PARSER->SCOPE is a a template specialization, it
13883              may be instantiated during name lookup.  In that case,
13884              errors may be issued.  Even if we rollback the current
13885              tentative parse, those errors are valid.  */
13886           decl = lookup_qualified_name (parser->scope, name, is_type,
13887                                         /*complain=*/true);
13888           if (pop_p)
13889             pop_scope (parser->scope);
13890         }
13891       parser->qualifying_scope = parser->scope;
13892       parser->object_scope = NULL_TREE;
13893     }
13894   else if (object_type)
13895     {
13896       tree object_decl = NULL_TREE;
13897       /* Look up the name in the scope of the OBJECT_TYPE, unless the
13898          OBJECT_TYPE is not a class.  */
13899       if (CLASS_TYPE_P (object_type))
13900         /* If the OBJECT_TYPE is a template specialization, it may
13901            be instantiated during name lookup.  In that case, errors
13902            may be issued.  Even if we rollback the current tentative
13903            parse, those errors are valid.  */
13904         object_decl = lookup_member (object_type,
13905                                      name,
13906                                      /*protect=*/0, is_type);
13907       /* Look it up in the enclosing context, too.  */
13908       decl = lookup_name_real (name, is_type, /*nonclass=*/0,
13909                                is_namespace,
13910                                /*flags=*/0);
13911       parser->object_scope = object_type;
13912       parser->qualifying_scope = NULL_TREE;
13913       if (object_decl)
13914         decl = object_decl;
13915     }
13916   else
13917     {
13918       decl = lookup_name_real (name, is_type, /*nonclass=*/0,
13919                                is_namespace,
13920                                /*flags=*/0);
13921       parser->qualifying_scope = NULL_TREE;
13922       parser->object_scope = NULL_TREE;
13923     }
13924
13925   /* If the lookup failed, let our caller know.  */
13926   if (!decl
13927       || decl == error_mark_node
13928       || (TREE_CODE (decl) == FUNCTION_DECL
13929           && DECL_ANTICIPATED (decl)))
13930     return error_mark_node;
13931
13932   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
13933   if (TREE_CODE (decl) == TREE_LIST)
13934     {
13935       /* The error message we have to print is too complicated for
13936          cp_parser_error, so we incorporate its actions directly.  */
13937       if (!cp_parser_simulate_error (parser))
13938         {
13939           error ("reference to `%D' is ambiguous", name);
13940           print_candidates (decl);
13941         }
13942       return error_mark_node;
13943     }
13944
13945   my_friendly_assert (DECL_P (decl)
13946                       || TREE_CODE (decl) == OVERLOAD
13947                       || TREE_CODE (decl) == SCOPE_REF
13948                       || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
13949                       || BASELINK_P (decl),
13950                       20000619);
13951
13952   /* If we have resolved the name of a member declaration, check to
13953      see if the declaration is accessible.  When the name resolves to
13954      set of overloaded functions, accessibility is checked when
13955      overload resolution is done.
13956
13957      During an explicit instantiation, access is not checked at all,
13958      as per [temp.explicit].  */
13959   if (DECL_P (decl))
13960     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
13961
13962   return decl;
13963 }
13964
13965 /* Like cp_parser_lookup_name, but for use in the typical case where
13966    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
13967    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
13968
13969 static tree
13970 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
13971 {
13972   return cp_parser_lookup_name (parser, name,
13973                                 /*is_type=*/false,
13974                                 /*is_template=*/false,
13975                                 /*is_namespace=*/false,
13976                                 /*check_dependency=*/true);
13977 }
13978
13979 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
13980    the current context, return the TYPE_DECL.  If TAG_NAME_P is
13981    true, the DECL indicates the class being defined in a class-head,
13982    or declared in an elaborated-type-specifier.
13983
13984    Otherwise, return DECL.  */
13985
13986 static tree
13987 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
13988 {
13989   /* If the TEMPLATE_DECL is being declared as part of a class-head,
13990      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
13991
13992        struct A {
13993          template <typename T> struct B;
13994        };
13995
13996        template <typename T> struct A::B {};
13997
13998      Similarly, in a elaborated-type-specifier:
13999
14000        namespace N { struct X{}; }
14001
14002        struct A {
14003          template <typename T> friend struct N::X;
14004        };
14005
14006      However, if the DECL refers to a class type, and we are in
14007      the scope of the class, then the name lookup automatically
14008      finds the TYPE_DECL created by build_self_reference rather
14009      than a TEMPLATE_DECL.  For example, in:
14010
14011        template <class T> struct S {
14012          S s;
14013        };
14014
14015      there is no need to handle such case.  */
14016
14017   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
14018     return DECL_TEMPLATE_RESULT (decl);
14019
14020   return decl;
14021 }
14022
14023 /* If too many, or too few, template-parameter lists apply to the
14024    declarator, issue an error message.  Returns TRUE if all went well,
14025    and FALSE otherwise.  */
14026
14027 static bool
14028 cp_parser_check_declarator_template_parameters (cp_parser* parser,
14029                                                 tree declarator)
14030 {
14031   unsigned num_templates;
14032
14033   /* We haven't seen any classes that involve template parameters yet.  */
14034   num_templates = 0;
14035
14036   switch (TREE_CODE (declarator))
14037     {
14038     case CALL_EXPR:
14039     case ARRAY_REF:
14040     case INDIRECT_REF:
14041     case ADDR_EXPR:
14042       {
14043         tree main_declarator = TREE_OPERAND (declarator, 0);
14044         return
14045           cp_parser_check_declarator_template_parameters (parser,
14046                                                           main_declarator);
14047       }
14048
14049     case SCOPE_REF:
14050       {
14051         tree scope;
14052         tree member;
14053
14054         scope = TREE_OPERAND (declarator, 0);
14055         member = TREE_OPERAND (declarator, 1);
14056
14057         /* If this is a pointer-to-member, then we are not interested
14058            in the SCOPE, because it does not qualify the thing that is
14059            being declared.  */
14060         if (TREE_CODE (member) == INDIRECT_REF)
14061           return (cp_parser_check_declarator_template_parameters
14062                   (parser, member));
14063
14064         while (scope && CLASS_TYPE_P (scope))
14065           {
14066             /* You're supposed to have one `template <...>'
14067                for every template class, but you don't need one
14068                for a full specialization.  For example:
14069
14070                template <class T> struct S{};
14071                template <> struct S<int> { void f(); };
14072                void S<int>::f () {}
14073
14074                is correct; there shouldn't be a `template <>' for
14075                the definition of `S<int>::f'.  */
14076             if (CLASSTYPE_TEMPLATE_INFO (scope)
14077                 && (CLASSTYPE_TEMPLATE_INSTANTIATION (scope)
14078                     || uses_template_parms (CLASSTYPE_TI_ARGS (scope)))
14079                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
14080               ++num_templates;
14081
14082             scope = TYPE_CONTEXT (scope);
14083           }
14084       }
14085
14086       /* Fall through.  */
14087
14088     default:
14089       /* If the DECLARATOR has the form `X<y>' then it uses one
14090          additional level of template parameters.  */
14091       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
14092         ++num_templates;
14093
14094       return cp_parser_check_template_parameters (parser,
14095                                                   num_templates);
14096     }
14097 }
14098
14099 /* NUM_TEMPLATES were used in the current declaration.  If that is
14100    invalid, return FALSE and issue an error messages.  Otherwise,
14101    return TRUE.  */
14102
14103 static bool
14104 cp_parser_check_template_parameters (cp_parser* parser,
14105                                      unsigned num_templates)
14106 {
14107   /* If there are more template classes than parameter lists, we have
14108      something like:
14109
14110        template <class T> void S<T>::R<T>::f ();  */
14111   if (parser->num_template_parameter_lists < num_templates)
14112     {
14113       error ("too few template-parameter-lists");
14114       return false;
14115     }
14116   /* If there are the same number of template classes and parameter
14117      lists, that's OK.  */
14118   if (parser->num_template_parameter_lists == num_templates)
14119     return true;
14120   /* If there are more, but only one more, then we are referring to a
14121      member template.  That's OK too.  */
14122   if (parser->num_template_parameter_lists == num_templates + 1)
14123       return true;
14124   /* Otherwise, there are too many template parameter lists.  We have
14125      something like:
14126
14127      template <class T> template <class U> void S::f();  */
14128   error ("too many template-parameter-lists");
14129   return false;
14130 }
14131
14132 /* Parse a binary-expression of the general form:
14133
14134    binary-expression:
14135      <expr>
14136      binary-expression <token> <expr>
14137
14138    The TOKEN_TREE_MAP maps <token> types to <expr> codes.  FN is used
14139    to parser the <expr>s.  If the first production is used, then the
14140    value returned by FN is returned directly.  Otherwise, a node with
14141    the indicated EXPR_TYPE is returned, with operands corresponding to
14142    the two sub-expressions.  */
14143
14144 static tree
14145 cp_parser_binary_expression (cp_parser* parser,
14146                              const cp_parser_token_tree_map token_tree_map,
14147                              cp_parser_expression_fn fn)
14148 {
14149   tree lhs;
14150
14151   /* Parse the first expression.  */
14152   lhs = (*fn) (parser);
14153   /* Now, look for more expressions.  */
14154   while (true)
14155     {
14156       cp_token *token;
14157       const cp_parser_token_tree_map_node *map_node;
14158       tree rhs;
14159
14160       /* Peek at the next token.  */
14161       token = cp_lexer_peek_token (parser->lexer);
14162       /* If the token is `>', and that's not an operator at the
14163          moment, then we're done.  */
14164       if (token->type == CPP_GREATER
14165           && !parser->greater_than_is_operator_p)
14166         break;
14167       /* If we find one of the tokens we want, build the corresponding
14168          tree representation.  */
14169       for (map_node = token_tree_map;
14170            map_node->token_type != CPP_EOF;
14171            ++map_node)
14172         if (map_node->token_type == token->type)
14173           {
14174             /* Assume that an overloaded operator will not be used.  */
14175             bool overloaded_p = false;
14176
14177             /* Consume the operator token.  */
14178             cp_lexer_consume_token (parser->lexer);
14179             /* Parse the right-hand side of the expression.  */
14180             rhs = (*fn) (parser);
14181             /* Build the binary tree node.  */
14182             lhs = build_x_binary_op (map_node->tree_type, lhs, rhs, 
14183                                      &overloaded_p);
14184             /* If the binary operator required the use of an
14185                overloaded operator, then this expression cannot be an
14186                integral constant-expression.  An overloaded operator
14187                can be used even if both operands are otherwise
14188                permissible in an integral constant-expression if at
14189                least one of the operands is of enumeration type.  */
14190             if (overloaded_p
14191                 && (cp_parser_non_integral_constant_expression 
14192                     (parser, "calls to overloaded operators")))
14193               lhs = error_mark_node;
14194             break;
14195           }
14196
14197       /* If the token wasn't one of the ones we want, we're done.  */
14198       if (map_node->token_type == CPP_EOF)
14199         break;
14200     }
14201
14202   return lhs;
14203 }
14204
14205 /* Parse an optional `::' token indicating that the following name is
14206    from the global namespace.  If so, PARSER->SCOPE is set to the
14207    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
14208    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
14209    Returns the new value of PARSER->SCOPE, if the `::' token is
14210    present, and NULL_TREE otherwise.  */
14211
14212 static tree
14213 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
14214 {
14215   cp_token *token;
14216
14217   /* Peek at the next token.  */
14218   token = cp_lexer_peek_token (parser->lexer);
14219   /* If we're looking at a `::' token then we're starting from the
14220      global namespace, not our current location.  */
14221   if (token->type == CPP_SCOPE)
14222     {
14223       /* Consume the `::' token.  */
14224       cp_lexer_consume_token (parser->lexer);
14225       /* Set the SCOPE so that we know where to start the lookup.  */
14226       parser->scope = global_namespace;
14227       parser->qualifying_scope = global_namespace;
14228       parser->object_scope = NULL_TREE;
14229
14230       return parser->scope;
14231     }
14232   else if (!current_scope_valid_p)
14233     {
14234       parser->scope = NULL_TREE;
14235       parser->qualifying_scope = NULL_TREE;
14236       parser->object_scope = NULL_TREE;
14237     }
14238
14239   return NULL_TREE;
14240 }
14241
14242 /* Returns TRUE if the upcoming token sequence is the start of a
14243    constructor declarator.  If FRIEND_P is true, the declarator is
14244    preceded by the `friend' specifier.  */
14245
14246 static bool
14247 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
14248 {
14249   bool constructor_p;
14250   tree type_decl = NULL_TREE;
14251   bool nested_name_p;
14252   cp_token *next_token;
14253
14254   /* The common case is that this is not a constructor declarator, so
14255      try to avoid doing lots of work if at all possible.  It's not
14256      valid declare a constructor at function scope.  */
14257   if (at_function_scope_p ())
14258     return false;
14259   /* And only certain tokens can begin a constructor declarator.  */
14260   next_token = cp_lexer_peek_token (parser->lexer);
14261   if (next_token->type != CPP_NAME
14262       && next_token->type != CPP_SCOPE
14263       && next_token->type != CPP_NESTED_NAME_SPECIFIER
14264       && next_token->type != CPP_TEMPLATE_ID)
14265     return false;
14266
14267   /* Parse tentatively; we are going to roll back all of the tokens
14268      consumed here.  */
14269   cp_parser_parse_tentatively (parser);
14270   /* Assume that we are looking at a constructor declarator.  */
14271   constructor_p = true;
14272
14273   /* Look for the optional `::' operator.  */
14274   cp_parser_global_scope_opt (parser,
14275                               /*current_scope_valid_p=*/false);
14276   /* Look for the nested-name-specifier.  */
14277   nested_name_p
14278     = (cp_parser_nested_name_specifier_opt (parser,
14279                                             /*typename_keyword_p=*/false,
14280                                             /*check_dependency_p=*/false,
14281                                             /*type_p=*/false,
14282                                             /*is_declaration=*/false)
14283        != NULL_TREE);
14284   /* Outside of a class-specifier, there must be a
14285      nested-name-specifier.  */
14286   if (!nested_name_p &&
14287       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
14288        || friend_p))
14289     constructor_p = false;
14290   /* If we still think that this might be a constructor-declarator,
14291      look for a class-name.  */
14292   if (constructor_p)
14293     {
14294       /* If we have:
14295
14296            template <typename T> struct S { S(); };
14297            template <typename T> S<T>::S ();
14298
14299          we must recognize that the nested `S' names a class.
14300          Similarly, for:
14301
14302            template <typename T> S<T>::S<T> ();
14303
14304          we must recognize that the nested `S' names a template.  */
14305       type_decl = cp_parser_class_name (parser,
14306                                         /*typename_keyword_p=*/false,
14307                                         /*template_keyword_p=*/false,
14308                                         /*type_p=*/false,
14309                                         /*check_dependency_p=*/false,
14310                                         /*class_head_p=*/false,
14311                                         /*is_declaration=*/false);
14312       /* If there was no class-name, then this is not a constructor.  */
14313       constructor_p = !cp_parser_error_occurred (parser);
14314     }
14315
14316   /* If we're still considering a constructor, we have to see a `(',
14317      to begin the parameter-declaration-clause, followed by either a
14318      `)', an `...', or a decl-specifier.  We need to check for a
14319      type-specifier to avoid being fooled into thinking that:
14320
14321        S::S (f) (int);
14322
14323      is a constructor.  (It is actually a function named `f' that
14324      takes one parameter (of type `int') and returns a value of type
14325      `S::S'.  */
14326   if (constructor_p
14327       && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
14328     {
14329       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
14330           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
14331           /* A parameter declaration begins with a decl-specifier,
14332              which is either the "attribute" keyword, a storage class
14333              specifier, or (usually) a type-specifier.  */
14334           && !cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE)
14335           && !cp_parser_storage_class_specifier_opt (parser))
14336         {
14337           tree type;
14338           bool pop_p = false;
14339           unsigned saved_num_template_parameter_lists;
14340
14341           /* Names appearing in the type-specifier should be looked up
14342              in the scope of the class.  */
14343           if (current_class_type)
14344             type = NULL_TREE;
14345           else
14346             {
14347               type = TREE_TYPE (type_decl);
14348               if (TREE_CODE (type) == TYPENAME_TYPE)
14349                 {
14350                   type = resolve_typename_type (type,
14351                                                 /*only_current_p=*/false);
14352                   if (type == error_mark_node)
14353                     {
14354                       cp_parser_abort_tentative_parse (parser);
14355                       return false;
14356                     }
14357                 }
14358               pop_p = push_scope (type);
14359             }
14360
14361           /* Inside the constructor parameter list, surrounding
14362              template-parameter-lists do not apply.  */
14363           saved_num_template_parameter_lists
14364             = parser->num_template_parameter_lists;
14365           parser->num_template_parameter_lists = 0;
14366
14367           /* Look for the type-specifier.  */
14368           cp_parser_type_specifier (parser,
14369                                     CP_PARSER_FLAGS_NONE,
14370                                     /*is_friend=*/false,
14371                                     /*is_declarator=*/true,
14372                                     /*declares_class_or_enum=*/NULL,
14373                                     /*is_cv_qualifier=*/NULL);
14374
14375           parser->num_template_parameter_lists
14376             = saved_num_template_parameter_lists;
14377
14378           /* Leave the scope of the class.  */
14379           if (pop_p)
14380             pop_scope (type);
14381
14382           constructor_p = !cp_parser_error_occurred (parser);
14383         }
14384     }
14385   else
14386     constructor_p = false;
14387   /* We did not really want to consume any tokens.  */
14388   cp_parser_abort_tentative_parse (parser);
14389
14390   return constructor_p;
14391 }
14392
14393 /* Parse the definition of the function given by the DECL_SPECIFIERS,
14394    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
14395    they must be performed once we are in the scope of the function.
14396
14397    Returns the function defined.  */
14398
14399 static tree
14400 cp_parser_function_definition_from_specifiers_and_declarator
14401   (cp_parser* parser,
14402    tree decl_specifiers,
14403    tree attributes,
14404    tree declarator)
14405 {
14406   tree fn;
14407   bool success_p;
14408
14409   /* Begin the function-definition.  */
14410   success_p = begin_function_definition (decl_specifiers,
14411                                          attributes,
14412                                          declarator);
14413
14414   /* If there were names looked up in the decl-specifier-seq that we
14415      did not check, check them now.  We must wait until we are in the
14416      scope of the function to perform the checks, since the function
14417      might be a friend.  */
14418   perform_deferred_access_checks ();
14419
14420   if (!success_p)
14421     {
14422       /* If begin_function_definition didn't like the definition, skip
14423          the entire function.  */
14424       error ("invalid function declaration");
14425       cp_parser_skip_to_end_of_block_or_statement (parser);
14426       fn = error_mark_node;
14427     }
14428   else
14429     fn = cp_parser_function_definition_after_declarator (parser,
14430                                                          /*inline_p=*/false);
14431
14432   return fn;
14433 }
14434
14435 /* Parse the part of a function-definition that follows the
14436    declarator.  INLINE_P is TRUE iff this function is an inline
14437    function defined with a class-specifier.
14438
14439    Returns the function defined.  */
14440
14441 static tree
14442 cp_parser_function_definition_after_declarator (cp_parser* parser,
14443                                                 bool inline_p)
14444 {
14445   tree fn;
14446   bool ctor_initializer_p = false;
14447   bool saved_in_unbraced_linkage_specification_p;
14448   unsigned saved_num_template_parameter_lists;
14449
14450   /* If the next token is `return', then the code may be trying to
14451      make use of the "named return value" extension that G++ used to
14452      support.  */
14453   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
14454     {
14455       /* Consume the `return' keyword.  */
14456       cp_lexer_consume_token (parser->lexer);
14457       /* Look for the identifier that indicates what value is to be
14458          returned.  */
14459       cp_parser_identifier (parser);
14460       /* Issue an error message.  */
14461       error ("named return values are no longer supported");
14462       /* Skip tokens until we reach the start of the function body.  */
14463       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
14464              && cp_lexer_next_token_is_not (parser->lexer, CPP_EOF))
14465         cp_lexer_consume_token (parser->lexer);
14466     }
14467   /* The `extern' in `extern "C" void f () { ... }' does not apply to
14468      anything declared inside `f'.  */
14469   saved_in_unbraced_linkage_specification_p
14470     = parser->in_unbraced_linkage_specification_p;
14471   parser->in_unbraced_linkage_specification_p = false;
14472   /* Inside the function, surrounding template-parameter-lists do not
14473      apply.  */
14474   saved_num_template_parameter_lists
14475     = parser->num_template_parameter_lists;
14476   parser->num_template_parameter_lists = 0;
14477   /* If the next token is `try', then we are looking at a
14478      function-try-block.  */
14479   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
14480     ctor_initializer_p = cp_parser_function_try_block (parser);
14481   /* A function-try-block includes the function-body, so we only do
14482      this next part if we're not processing a function-try-block.  */
14483   else
14484     ctor_initializer_p
14485       = cp_parser_ctor_initializer_opt_and_function_body (parser);
14486
14487   /* Finish the function.  */
14488   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
14489                         (inline_p ? 2 : 0));
14490   /* Generate code for it, if necessary.  */
14491   expand_or_defer_fn (fn);
14492   /* Restore the saved values.  */
14493   parser->in_unbraced_linkage_specification_p
14494     = saved_in_unbraced_linkage_specification_p;
14495   parser->num_template_parameter_lists
14496     = saved_num_template_parameter_lists;
14497
14498   return fn;
14499 }
14500
14501 /* Parse a template-declaration, assuming that the `export' (and
14502    `extern') keywords, if present, has already been scanned.  MEMBER_P
14503    is as for cp_parser_template_declaration.  */
14504
14505 static void
14506 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
14507 {
14508   tree decl = NULL_TREE;
14509   tree parameter_list;
14510   bool friend_p = false;
14511
14512   /* Look for the `template' keyword.  */
14513   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
14514     return;
14515
14516   /* And the `<'.  */
14517   if (!cp_parser_require (parser, CPP_LESS, "`<'"))
14518     return;
14519
14520   /* If the next token is `>', then we have an invalid
14521      specialization.  Rather than complain about an invalid template
14522      parameter, issue an error message here.  */
14523   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
14524     {
14525       cp_parser_error (parser, "invalid explicit specialization");
14526       begin_specialization ();
14527       parameter_list = NULL_TREE;
14528     }
14529   else
14530     {
14531       /* Parse the template parameters.  */
14532       begin_template_parm_list ();
14533       parameter_list = cp_parser_template_parameter_list (parser);
14534       parameter_list = end_template_parm_list (parameter_list);
14535     }
14536
14537   /* Look for the `>'.  */
14538   cp_parser_skip_until_found (parser, CPP_GREATER, "`>'");
14539   /* We just processed one more parameter list.  */
14540   ++parser->num_template_parameter_lists;
14541   /* If the next token is `template', there are more template
14542      parameters.  */
14543   if (cp_lexer_next_token_is_keyword (parser->lexer,
14544                                       RID_TEMPLATE))
14545     cp_parser_template_declaration_after_export (parser, member_p);
14546   else
14547     {
14548       decl = cp_parser_single_declaration (parser,
14549                                            member_p,
14550                                            &friend_p);
14551
14552       /* If this is a member template declaration, let the front
14553          end know.  */
14554       if (member_p && !friend_p && decl)
14555         {
14556           if (TREE_CODE (decl) == TYPE_DECL)
14557             cp_parser_check_access_in_redeclaration (decl);
14558
14559           decl = finish_member_template_decl (decl);
14560         }
14561       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
14562         make_friend_class (current_class_type, TREE_TYPE (decl),
14563                            /*complain=*/true);
14564     }
14565   /* We are done with the current parameter list.  */
14566   --parser->num_template_parameter_lists;
14567
14568   /* Finish up.  */
14569   finish_template_decl (parameter_list);
14570
14571   /* Register member declarations.  */
14572   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
14573     finish_member_declaration (decl);
14574
14575   /* If DECL is a function template, we must return to parse it later.
14576      (Even though there is no definition, there might be default
14577      arguments that need handling.)  */
14578   if (member_p && decl
14579       && (TREE_CODE (decl) == FUNCTION_DECL
14580           || DECL_FUNCTION_TEMPLATE_P (decl)))
14581     TREE_VALUE (parser->unparsed_functions_queues)
14582       = tree_cons (NULL_TREE, decl,
14583                    TREE_VALUE (parser->unparsed_functions_queues));
14584 }
14585
14586 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
14587    `function-definition' sequence.  MEMBER_P is true, this declaration
14588    appears in a class scope.
14589
14590    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
14591    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
14592
14593 static tree
14594 cp_parser_single_declaration (cp_parser* parser,
14595                               bool member_p,
14596                               bool* friend_p)
14597 {
14598   int declares_class_or_enum;
14599   tree decl = NULL_TREE;
14600   tree decl_specifiers;
14601   tree attributes;
14602   bool function_definition_p = false;
14603
14604   /* Defer access checks until we know what is being declared.  */
14605   push_deferring_access_checks (dk_deferred);
14606
14607   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
14608      alternative.  */
14609   decl_specifiers
14610     = cp_parser_decl_specifier_seq (parser,
14611                                     CP_PARSER_FLAGS_OPTIONAL,
14612                                     &attributes,
14613                                     &declares_class_or_enum);
14614   if (friend_p)
14615     *friend_p = cp_parser_friend_p (decl_specifiers);
14616   /* Gather up the access checks that occurred the
14617      decl-specifier-seq.  */
14618   stop_deferring_access_checks ();
14619
14620   /* Check for the declaration of a template class.  */
14621   if (declares_class_or_enum)
14622     {
14623       if (cp_parser_declares_only_class_p (parser))
14624         {
14625           decl = shadow_tag (decl_specifiers);
14626           if (decl)
14627             decl = TYPE_NAME (decl);
14628           else
14629             decl = error_mark_node;
14630         }
14631     }
14632   else
14633     decl = NULL_TREE;
14634   /* If it's not a template class, try for a template function.  If
14635      the next token is a `;', then this declaration does not declare
14636      anything.  But, if there were errors in the decl-specifiers, then
14637      the error might well have come from an attempted class-specifier.
14638      In that case, there's no need to warn about a missing declarator.  */
14639   if (!decl
14640       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
14641           || !value_member (error_mark_node, decl_specifiers)))
14642     decl = cp_parser_init_declarator (parser,
14643                                       decl_specifiers,
14644                                       attributes,
14645                                       /*function_definition_allowed_p=*/true,
14646                                       member_p,
14647                                       declares_class_or_enum,
14648                                       &function_definition_p);
14649
14650   pop_deferring_access_checks ();
14651
14652   /* Clear any current qualification; whatever comes next is the start
14653      of something new.  */
14654   parser->scope = NULL_TREE;
14655   parser->qualifying_scope = NULL_TREE;
14656   parser->object_scope = NULL_TREE;
14657   /* Look for a trailing `;' after the declaration.  */
14658   if (!function_definition_p
14659       && !cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
14660     cp_parser_skip_to_end_of_block_or_statement (parser);
14661
14662   return decl;
14663 }
14664
14665 /* Parse a cast-expression that is not the operand of a unary "&".  */
14666
14667 static tree
14668 cp_parser_simple_cast_expression (cp_parser *parser)
14669 {
14670   return cp_parser_cast_expression (parser, /*address_p=*/false);
14671 }
14672
14673 /* Parse a functional cast to TYPE.  Returns an expression
14674    representing the cast.  */
14675
14676 static tree
14677 cp_parser_functional_cast (cp_parser* parser, tree type)
14678 {
14679   tree expression_list;
14680   tree cast;
14681
14682   expression_list
14683     = cp_parser_parenthesized_expression_list (parser, false,
14684                                                /*non_constant_p=*/NULL);
14685
14686   cast = build_functional_cast (type, expression_list);
14687   /* [expr.const]/1: In an integral constant expression "only type
14688      conversions to integral or enumeration type can be used".  */
14689   if (cast != error_mark_node && !type_dependent_expression_p (type) 
14690       && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (type)))
14691     {
14692       if (cp_parser_non_integral_constant_expression 
14693           (parser, "a call to a constructor"))
14694         return error_mark_node;
14695     }
14696   return cast;
14697 }
14698
14699 /* Save the tokens that make up the body of a member function defined
14700    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
14701    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
14702    specifiers applied to the declaration.  Returns the FUNCTION_DECL
14703    for the member function.  */
14704
14705 static tree
14706 cp_parser_save_member_function_body (cp_parser* parser,
14707                                      tree decl_specifiers,
14708                                      tree declarator,
14709                                      tree attributes)
14710 {
14711   cp_token_cache *cache;
14712   tree fn;
14713
14714   /* Create the function-declaration.  */
14715   fn = start_method (decl_specifiers, declarator, attributes);
14716   /* If something went badly wrong, bail out now.  */
14717   if (fn == error_mark_node)
14718     {
14719       /* If there's a function-body, skip it.  */
14720       if (cp_parser_token_starts_function_definition_p
14721           (cp_lexer_peek_token (parser->lexer)))
14722         cp_parser_skip_to_end_of_block_or_statement (parser);
14723       return error_mark_node;
14724     }
14725
14726   /* Remember it, if there default args to post process.  */
14727   cp_parser_save_default_args (parser, fn);
14728
14729   /* Create a token cache.  */
14730   cache = cp_token_cache_new ();
14731   /* Save away the tokens that make up the body of the
14732      function.  */
14733   cp_parser_cache_group (parser, cache, CPP_CLOSE_BRACE, /*depth=*/0);
14734   /* Handle function try blocks.  */
14735   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
14736     cp_parser_cache_group (parser, cache, CPP_CLOSE_BRACE, /*depth=*/0);
14737
14738   /* Save away the inline definition; we will process it when the
14739      class is complete.  */
14740   DECL_PENDING_INLINE_INFO (fn) = cache;
14741   DECL_PENDING_INLINE_P (fn) = 1;
14742
14743   /* We need to know that this was defined in the class, so that
14744      friend templates are handled correctly.  */
14745   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
14746
14747   /* We're done with the inline definition.  */
14748   finish_method (fn);
14749
14750   /* Add FN to the queue of functions to be parsed later.  */
14751   TREE_VALUE (parser->unparsed_functions_queues)
14752     = tree_cons (NULL_TREE, fn,
14753                  TREE_VALUE (parser->unparsed_functions_queues));
14754
14755   return fn;
14756 }
14757
14758 /* Parse a template-argument-list, as well as the trailing ">" (but
14759    not the opening ">").  See cp_parser_template_argument_list for the
14760    return value.  */
14761
14762 static tree
14763 cp_parser_enclosed_template_argument_list (cp_parser* parser)
14764 {
14765   tree arguments;
14766   tree saved_scope;
14767   tree saved_qualifying_scope;
14768   tree saved_object_scope;
14769   bool saved_greater_than_is_operator_p;
14770
14771   /* [temp.names]
14772
14773      When parsing a template-id, the first non-nested `>' is taken as
14774      the end of the template-argument-list rather than a greater-than
14775      operator.  */
14776   saved_greater_than_is_operator_p
14777     = parser->greater_than_is_operator_p;
14778   parser->greater_than_is_operator_p = false;
14779   /* Parsing the argument list may modify SCOPE, so we save it
14780      here.  */
14781   saved_scope = parser->scope;
14782   saved_qualifying_scope = parser->qualifying_scope;
14783   saved_object_scope = parser->object_scope;
14784   /* Parse the template-argument-list itself.  */
14785   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
14786     arguments = NULL_TREE;
14787   else
14788     arguments = cp_parser_template_argument_list (parser);
14789   /* Look for the `>' that ends the template-argument-list. If we find
14790      a '>>' instead, it's probably just a typo.  */
14791   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
14792     {
14793       if (!saved_greater_than_is_operator_p)
14794         {
14795           /* If we're in a nested template argument list, the '>>' has to be
14796             a typo for '> >'. We emit the error message, but we continue
14797             parsing and we push a '>' as next token, so that the argument
14798             list will be parsed correctly..  */
14799           cp_token* token;
14800           error ("`>>' should be `> >' within a nested template argument list");
14801           token = cp_lexer_peek_token (parser->lexer);
14802           token->type = CPP_GREATER;
14803         }
14804       else
14805         {
14806           /* If this is not a nested template argument list, the '>>' is
14807             a typo for '>'. Emit an error message and continue.  */
14808           error ("spurious `>>', use `>' to terminate a template argument list");
14809           cp_lexer_consume_token (parser->lexer);
14810         }
14811     }
14812   else if (!cp_parser_require (parser, CPP_GREATER, "`>'"))
14813     error ("missing `>' to terminate the template argument list");
14814   /* The `>' token might be a greater-than operator again now.  */
14815   parser->greater_than_is_operator_p
14816     = saved_greater_than_is_operator_p;
14817   /* Restore the SAVED_SCOPE.  */
14818   parser->scope = saved_scope;
14819   parser->qualifying_scope = saved_qualifying_scope;
14820   parser->object_scope = saved_object_scope;
14821
14822   return arguments;
14823 }
14824
14825 /* MEMBER_FUNCTION is a member function, or a friend.  If default
14826    arguments, or the body of the function have not yet been parsed,
14827    parse them now.  */
14828
14829 static void
14830 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
14831 {
14832   cp_lexer *saved_lexer;
14833
14834   /* If this member is a template, get the underlying
14835      FUNCTION_DECL.  */
14836   if (DECL_FUNCTION_TEMPLATE_P (member_function))
14837     member_function = DECL_TEMPLATE_RESULT (member_function);
14838
14839   /* There should not be any class definitions in progress at this
14840      point; the bodies of members are only parsed outside of all class
14841      definitions.  */
14842   my_friendly_assert (parser->num_classes_being_defined == 0, 20010816);
14843   /* While we're parsing the member functions we might encounter more
14844      classes.  We want to handle them right away, but we don't want
14845      them getting mixed up with functions that are currently in the
14846      queue.  */
14847   parser->unparsed_functions_queues
14848     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
14849
14850   /* Make sure that any template parameters are in scope.  */
14851   maybe_begin_member_template_processing (member_function);
14852
14853   /* If the body of the function has not yet been parsed, parse it
14854      now.  */
14855   if (DECL_PENDING_INLINE_P (member_function))
14856     {
14857       tree function_scope;
14858       cp_token_cache *tokens;
14859
14860       /* The function is no longer pending; we are processing it.  */
14861       tokens = DECL_PENDING_INLINE_INFO (member_function);
14862       DECL_PENDING_INLINE_INFO (member_function) = NULL;
14863       DECL_PENDING_INLINE_P (member_function) = 0;
14864       /* If this was an inline function in a local class, enter the scope
14865          of the containing function.  */
14866       function_scope = decl_function_context (member_function);
14867       if (function_scope)
14868         push_function_context_to (function_scope);
14869
14870       /* Save away the current lexer.  */
14871       saved_lexer = parser->lexer;
14872       /* Make a new lexer to feed us the tokens saved for this function.  */
14873       parser->lexer = cp_lexer_new_from_tokens (tokens);
14874       parser->lexer->next = saved_lexer;
14875
14876       /* Set the current source position to be the location of the first
14877          token in the saved inline body.  */
14878       cp_lexer_peek_token (parser->lexer);
14879
14880       /* Let the front end know that we going to be defining this
14881          function.  */
14882       start_function (NULL_TREE, member_function, NULL_TREE,
14883                       SF_PRE_PARSED | SF_INCLASS_INLINE);
14884
14885       /* Now, parse the body of the function.  */
14886       cp_parser_function_definition_after_declarator (parser,
14887                                                       /*inline_p=*/true);
14888
14889       /* Leave the scope of the containing function.  */
14890       if (function_scope)
14891         pop_function_context_from (function_scope);
14892       /* Restore the lexer.  */
14893       parser->lexer = saved_lexer;
14894     }
14895
14896   /* Remove any template parameters from the symbol table.  */
14897   maybe_end_member_template_processing ();
14898
14899   /* Restore the queue.  */
14900   parser->unparsed_functions_queues
14901     = TREE_CHAIN (parser->unparsed_functions_queues);
14902 }
14903
14904 /* If DECL contains any default args, remember it on the unparsed
14905    functions queue.  */
14906
14907 static void
14908 cp_parser_save_default_args (cp_parser* parser, tree decl)
14909 {
14910   tree probe;
14911
14912   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
14913        probe;
14914        probe = TREE_CHAIN (probe))
14915     if (TREE_PURPOSE (probe))
14916       {
14917         TREE_PURPOSE (parser->unparsed_functions_queues)
14918           = tree_cons (NULL_TREE, decl,
14919                        TREE_PURPOSE (parser->unparsed_functions_queues));
14920         break;
14921       }
14922   return;
14923 }
14924
14925 /* FN is a FUNCTION_DECL which may contains a parameter with an
14926    unparsed DEFAULT_ARG.  Parse the default args now.  */
14927
14928 static void
14929 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
14930 {
14931   cp_lexer *saved_lexer;
14932   cp_token_cache *tokens;
14933   bool saved_local_variables_forbidden_p;
14934   tree parameters;
14935
14936   /* While we're parsing the default args, we might (due to the
14937      statement expression extension) encounter more classes.  We want
14938      to handle them right away, but we don't want them getting mixed
14939      up with default args that are currently in the queue.  */
14940   parser->unparsed_functions_queues
14941     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
14942
14943   for (parameters = TYPE_ARG_TYPES (TREE_TYPE (fn));
14944        parameters;
14945        parameters = TREE_CHAIN (parameters))
14946     {
14947       if (!TREE_PURPOSE (parameters)
14948           || TREE_CODE (TREE_PURPOSE (parameters)) != DEFAULT_ARG)
14949         continue;
14950
14951        /* Save away the current lexer.  */
14952       saved_lexer = parser->lexer;
14953        /* Create a new one, using the tokens we have saved.  */
14954       tokens =  DEFARG_TOKENS (TREE_PURPOSE (parameters));
14955       parser->lexer = cp_lexer_new_from_tokens (tokens);
14956
14957        /* Set the current source position to be the location of the
14958           first token in the default argument.  */
14959       cp_lexer_peek_token (parser->lexer);
14960
14961        /* Local variable names (and the `this' keyword) may not appear
14962           in a default argument.  */
14963       saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
14964       parser->local_variables_forbidden_p = true;
14965        /* Parse the assignment-expression.  */
14966       if (DECL_CLASS_SCOPE_P (fn))
14967         push_nested_class (DECL_CONTEXT (fn));
14968       TREE_PURPOSE (parameters) = cp_parser_assignment_expression (parser);
14969       if (DECL_CLASS_SCOPE_P (fn))
14970         pop_nested_class ();
14971
14972       /* If the token stream has not been completely used up, then
14973          there was extra junk after the end of the default
14974          argument.  */
14975       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
14976         cp_parser_error (parser, "expected `,'");
14977
14978        /* Restore saved state.  */
14979       parser->lexer = saved_lexer;
14980       parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
14981     }
14982
14983   /* Restore the queue.  */
14984   parser->unparsed_functions_queues
14985     = TREE_CHAIN (parser->unparsed_functions_queues);
14986 }
14987
14988 /* Parse the operand of `sizeof' (or a similar operator).  Returns
14989    either a TYPE or an expression, depending on the form of the
14990    input.  The KEYWORD indicates which kind of expression we have
14991    encountered.  */
14992
14993 static tree
14994 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
14995 {
14996   static const char *format;
14997   tree expr = NULL_TREE;
14998   const char *saved_message;
14999   bool saved_integral_constant_expression_p;
15000
15001   /* Initialize FORMAT the first time we get here.  */
15002   if (!format)
15003     format = "types may not be defined in `%s' expressions";
15004
15005   /* Types cannot be defined in a `sizeof' expression.  Save away the
15006      old message.  */
15007   saved_message = parser->type_definition_forbidden_message;
15008   /* And create the new one.  */
15009   parser->type_definition_forbidden_message
15010     = xmalloc (strlen (format)
15011                + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
15012                + 1 /* `\0' */);
15013   sprintf ((char *) parser->type_definition_forbidden_message,
15014            format, IDENTIFIER_POINTER (ridpointers[keyword]));
15015
15016   /* The restrictions on constant-expressions do not apply inside
15017      sizeof expressions.  */
15018   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
15019   parser->integral_constant_expression_p = false;
15020
15021   /* Do not actually evaluate the expression.  */
15022   ++skip_evaluation;
15023   /* If it's a `(', then we might be looking at the type-id
15024      construction.  */
15025   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
15026     {
15027       tree type;
15028       bool saved_in_type_id_in_expr_p;
15029
15030       /* We can't be sure yet whether we're looking at a type-id or an
15031          expression.  */
15032       cp_parser_parse_tentatively (parser);
15033       /* Consume the `('.  */
15034       cp_lexer_consume_token (parser->lexer);
15035       /* Parse the type-id.  */
15036       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
15037       parser->in_type_id_in_expr_p = true;
15038       type = cp_parser_type_id (parser);
15039       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
15040       /* Now, look for the trailing `)'.  */
15041       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
15042       /* If all went well, then we're done.  */
15043       if (cp_parser_parse_definitely (parser))
15044         {
15045           /* Build a list of decl-specifiers; right now, we have only
15046              a single type-specifier.  */
15047           type = build_tree_list (NULL_TREE,
15048                                   type);
15049
15050           /* Call grokdeclarator to figure out what type this is.  */
15051           expr = grokdeclarator (NULL_TREE,
15052                                  type,
15053                                  TYPENAME,
15054                                  /*initialized=*/0,
15055                                  /*attrlist=*/NULL);
15056         }
15057     }
15058
15059   /* If the type-id production did not work out, then we must be
15060      looking at the unary-expression production.  */
15061   if (!expr)
15062     expr = cp_parser_unary_expression (parser, /*address_p=*/false);
15063   /* Go back to evaluating expressions.  */
15064   --skip_evaluation;
15065
15066   /* Free the message we created.  */
15067   free ((char *) parser->type_definition_forbidden_message);
15068   /* And restore the old one.  */
15069   parser->type_definition_forbidden_message = saved_message;
15070   parser->integral_constant_expression_p = saved_integral_constant_expression_p;
15071
15072   return expr;
15073 }
15074
15075 /* If the current declaration has no declarator, return true.  */
15076
15077 static bool
15078 cp_parser_declares_only_class_p (cp_parser *parser)
15079 {
15080   /* If the next token is a `;' or a `,' then there is no
15081      declarator.  */
15082   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
15083           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
15084 }
15085
15086 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
15087    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
15088
15089 static bool
15090 cp_parser_friend_p (tree decl_specifiers)
15091 {
15092   while (decl_specifiers)
15093     {
15094       /* See if this decl-specifier is `friend'.  */
15095       if (TREE_CODE (TREE_VALUE (decl_specifiers)) == IDENTIFIER_NODE
15096           && C_RID_CODE (TREE_VALUE (decl_specifiers)) == RID_FRIEND)
15097         return true;
15098
15099       /* Go on to the next decl-specifier.  */
15100       decl_specifiers = TREE_CHAIN (decl_specifiers);
15101     }
15102
15103   return false;
15104 }
15105
15106 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
15107    issue an error message indicating that TOKEN_DESC was expected.
15108
15109    Returns the token consumed, if the token had the appropriate type.
15110    Otherwise, returns NULL.  */
15111
15112 static cp_token *
15113 cp_parser_require (cp_parser* parser,
15114                    enum cpp_ttype type,
15115                    const char* token_desc)
15116 {
15117   if (cp_lexer_next_token_is (parser->lexer, type))
15118     return cp_lexer_consume_token (parser->lexer);
15119   else
15120     {
15121       /* Output the MESSAGE -- unless we're parsing tentatively.  */
15122       if (!cp_parser_simulate_error (parser))
15123         {
15124           char *message = concat ("expected ", token_desc, NULL);
15125           cp_parser_error (parser, message);
15126           free (message);
15127         }
15128       return NULL;
15129     }
15130 }
15131
15132 /* Like cp_parser_require, except that tokens will be skipped until
15133    the desired token is found.  An error message is still produced if
15134    the next token is not as expected.  */
15135
15136 static void
15137 cp_parser_skip_until_found (cp_parser* parser,
15138                             enum cpp_ttype type,
15139                             const char* token_desc)
15140 {
15141   cp_token *token;
15142   unsigned nesting_depth = 0;
15143
15144   if (cp_parser_require (parser, type, token_desc))
15145     return;
15146
15147   /* Skip tokens until the desired token is found.  */
15148   while (true)
15149     {
15150       /* Peek at the next token.  */
15151       token = cp_lexer_peek_token (parser->lexer);
15152       /* If we've reached the token we want, consume it and
15153          stop.  */
15154       if (token->type == type && !nesting_depth)
15155         {
15156           cp_lexer_consume_token (parser->lexer);
15157           return;
15158         }
15159       /* If we've run out of tokens, stop.  */
15160       if (token->type == CPP_EOF)
15161         return;
15162       if (token->type == CPP_OPEN_BRACE
15163           || token->type == CPP_OPEN_PAREN
15164           || token->type == CPP_OPEN_SQUARE)
15165         ++nesting_depth;
15166       else if (token->type == CPP_CLOSE_BRACE
15167                || token->type == CPP_CLOSE_PAREN
15168                || token->type == CPP_CLOSE_SQUARE)
15169         {
15170           if (nesting_depth-- == 0)
15171             return;
15172         }
15173       /* Consume this token.  */
15174       cp_lexer_consume_token (parser->lexer);
15175     }
15176 }
15177
15178 /* If the next token is the indicated keyword, consume it.  Otherwise,
15179    issue an error message indicating that TOKEN_DESC was expected.
15180
15181    Returns the token consumed, if the token had the appropriate type.
15182    Otherwise, returns NULL.  */
15183
15184 static cp_token *
15185 cp_parser_require_keyword (cp_parser* parser,
15186                            enum rid keyword,
15187                            const char* token_desc)
15188 {
15189   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
15190
15191   if (token && token->keyword != keyword)
15192     {
15193       dyn_string_t error_msg;
15194
15195       /* Format the error message.  */
15196       error_msg = dyn_string_new (0);
15197       dyn_string_append_cstr (error_msg, "expected ");
15198       dyn_string_append_cstr (error_msg, token_desc);
15199       cp_parser_error (parser, error_msg->s);
15200       dyn_string_delete (error_msg);
15201       return NULL;
15202     }
15203
15204   return token;
15205 }
15206
15207 /* Returns TRUE iff TOKEN is a token that can begin the body of a
15208    function-definition.  */
15209
15210 static bool
15211 cp_parser_token_starts_function_definition_p (cp_token* token)
15212 {
15213   return (/* An ordinary function-body begins with an `{'.  */
15214           token->type == CPP_OPEN_BRACE
15215           /* A ctor-initializer begins with a `:'.  */
15216           || token->type == CPP_COLON
15217           /* A function-try-block begins with `try'.  */
15218           || token->keyword == RID_TRY
15219           /* The named return value extension begins with `return'.  */
15220           || token->keyword == RID_RETURN);
15221 }
15222
15223 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
15224    definition.  */
15225
15226 static bool
15227 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
15228 {
15229   cp_token *token;
15230
15231   token = cp_lexer_peek_token (parser->lexer);
15232   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
15233 }
15234
15235 /* Returns TRUE iff the next token is the "," or ">" ending a
15236    template-argument. ">>" is also accepted (after the full
15237    argument was parsed) because it's probably a typo for "> >",
15238    and there is a specific diagnostic for this.  */
15239
15240 static bool
15241 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
15242 {
15243   cp_token *token;
15244
15245   token = cp_lexer_peek_token (parser->lexer);
15246   return (token->type == CPP_COMMA || token->type == CPP_GREATER
15247           || token->type == CPP_RSHIFT);
15248 }
15249
15250 /* Returns TRUE iff the n-th token is a ">", or the n-th is a "[" and the
15251    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
15252
15253 static bool
15254 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
15255                                                      size_t n)
15256 {
15257   cp_token *token;
15258
15259   token = cp_lexer_peek_nth_token (parser->lexer, n);
15260   if (token->type == CPP_LESS)
15261     return true;
15262   /* Check for the sequence `<::' in the original code. It would be lexed as
15263      `[:', where `[' is a digraph, and there is no whitespace before
15264      `:'.  */
15265   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
15266     {
15267       cp_token *token2;
15268       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
15269       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
15270         return true;
15271     }
15272   return false;
15273 }
15274
15275 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
15276    or none_type otherwise.  */
15277
15278 static enum tag_types
15279 cp_parser_token_is_class_key (cp_token* token)
15280 {
15281   switch (token->keyword)
15282     {
15283     case RID_CLASS:
15284       return class_type;
15285     case RID_STRUCT:
15286       return record_type;
15287     case RID_UNION:
15288       return union_type;
15289
15290     default:
15291       return none_type;
15292     }
15293 }
15294
15295 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
15296
15297 static void
15298 cp_parser_check_class_key (enum tag_types class_key, tree type)
15299 {
15300   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
15301     pedwarn ("`%s' tag used in naming `%#T'",
15302             class_key == union_type ? "union"
15303              : class_key == record_type ? "struct" : "class",
15304              type);
15305 }
15306
15307 /* Issue an error message if DECL is redeclared with different
15308    access than its original declaration [class.access.spec/3].
15309    This applies to nested classes and nested class templates.
15310    [class.mem/1].  */
15311
15312 static void cp_parser_check_access_in_redeclaration (tree decl)
15313 {
15314   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
15315     return;
15316
15317   if ((TREE_PRIVATE (decl)
15318        != (current_access_specifier == access_private_node))
15319       || (TREE_PROTECTED (decl)
15320           != (current_access_specifier == access_protected_node)))
15321     error ("%D redeclared with different access", decl);
15322 }
15323
15324 /* Look for the `template' keyword, as a syntactic disambiguator.
15325    Return TRUE iff it is present, in which case it will be
15326    consumed.  */
15327
15328 static bool
15329 cp_parser_optional_template_keyword (cp_parser *parser)
15330 {
15331   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
15332     {
15333       /* The `template' keyword can only be used within templates;
15334          outside templates the parser can always figure out what is a
15335          template and what is not.  */
15336       if (!processing_template_decl)
15337         {
15338           error ("`template' (as a disambiguator) is only allowed "
15339                  "within templates");
15340           /* If this part of the token stream is rescanned, the same
15341              error message would be generated.  So, we purge the token
15342              from the stream.  */
15343           cp_lexer_purge_token (parser->lexer);
15344           return false;
15345         }
15346       else
15347         {
15348           /* Consume the `template' keyword.  */
15349           cp_lexer_consume_token (parser->lexer);
15350           return true;
15351         }
15352     }
15353
15354   return false;
15355 }
15356
15357 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
15358    set PARSER->SCOPE, and perform other related actions.  */
15359
15360 static void
15361 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
15362 {
15363   tree value;
15364   tree check;
15365
15366   /* Get the stored value.  */
15367   value = cp_lexer_consume_token (parser->lexer)->value;
15368   /* Perform any access checks that were deferred.  */
15369   for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
15370     perform_or_defer_access_check (TREE_PURPOSE (check), TREE_VALUE (check));
15371   /* Set the scope from the stored value.  */
15372   parser->scope = TREE_VALUE (value);
15373   parser->qualifying_scope = TREE_TYPE (value);
15374   parser->object_scope = NULL_TREE;
15375 }
15376
15377 /* Add tokens to CACHE until a non-nested END token appears.  */
15378
15379 static void
15380 cp_parser_cache_group_1 (cp_parser *parser,
15381                          cp_token_cache *cache,
15382                          enum cpp_ttype end,
15383                          unsigned depth)
15384 {
15385   while (true)
15386     {
15387       cp_token *token;
15388
15389       /* Abort a parenthesized expression if we encounter a brace.  */
15390       if ((end == CPP_CLOSE_PAREN || depth == 0)
15391           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15392         return;
15393       /* If we've reached the end of the file, stop.  */
15394       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
15395         return;
15396       /* Consume the next token.  */
15397       token = cp_lexer_consume_token (parser->lexer);
15398       /* Add this token to the tokens we are saving.  */
15399       cp_token_cache_push_token (cache, token);
15400       /* See if it starts a new group.  */
15401       if (token->type == CPP_OPEN_BRACE)
15402         {
15403           cp_parser_cache_group_1 (parser, cache, CPP_CLOSE_BRACE, depth + 1);
15404           if (depth == 0)
15405             return;
15406         }
15407       else if (token->type == CPP_OPEN_PAREN)
15408         cp_parser_cache_group_1 (parser, cache, CPP_CLOSE_PAREN, depth + 1);
15409       else if (token->type == end)
15410         return;
15411     }
15412 }
15413
15414 /* Convenient interface for cp_parser_cache_group_1 that makes sure we
15415    preserve string tokens in both translated and untranslated
15416    forms.  */
15417
15418 static void
15419 cp_parser_cache_group (cp_parser *parser,
15420                          cp_token_cache *cache,
15421                          enum cpp_ttype end,
15422                          unsigned depth)
15423 {
15424   int saved_c_lex_string_translate;
15425
15426   saved_c_lex_string_translate = c_lex_string_translate;
15427   c_lex_string_translate = -1;
15428
15429   cp_parser_cache_group_1 (parser, cache, end, depth);
15430   
15431   c_lex_string_translate = saved_c_lex_string_translate;
15432 }
15433
15434
15435 /* Begin parsing tentatively.  We always save tokens while parsing
15436    tentatively so that if the tentative parsing fails we can restore the
15437    tokens.  */
15438
15439 static void
15440 cp_parser_parse_tentatively (cp_parser* parser)
15441 {
15442   /* Enter a new parsing context.  */
15443   parser->context = cp_parser_context_new (parser->context);
15444   /* Begin saving tokens.  */
15445   cp_lexer_save_tokens (parser->lexer);
15446   /* In order to avoid repetitive access control error messages,
15447      access checks are queued up until we are no longer parsing
15448      tentatively.  */
15449   push_deferring_access_checks (dk_deferred);
15450 }
15451
15452 /* Commit to the currently active tentative parse.  */
15453
15454 static void
15455 cp_parser_commit_to_tentative_parse (cp_parser* parser)
15456 {
15457   cp_parser_context *context;
15458   cp_lexer *lexer;
15459
15460   /* Mark all of the levels as committed.  */
15461   lexer = parser->lexer;
15462   for (context = parser->context; context->next; context = context->next)
15463     {
15464       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
15465         break;
15466       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
15467       while (!cp_lexer_saving_tokens (lexer))
15468         lexer = lexer->next;
15469       cp_lexer_commit_tokens (lexer);
15470     }
15471 }
15472
15473 /* Abort the currently active tentative parse.  All consumed tokens
15474    will be rolled back, and no diagnostics will be issued.  */
15475
15476 static void
15477 cp_parser_abort_tentative_parse (cp_parser* parser)
15478 {
15479   cp_parser_simulate_error (parser);
15480   /* Now, pretend that we want to see if the construct was
15481      successfully parsed.  */
15482   cp_parser_parse_definitely (parser);
15483 }
15484
15485 /* Stop parsing tentatively.  If a parse error has occurred, restore the
15486    token stream.  Otherwise, commit to the tokens we have consumed.
15487    Returns true if no error occurred; false otherwise.  */
15488
15489 static bool
15490 cp_parser_parse_definitely (cp_parser* parser)
15491 {
15492   bool error_occurred;
15493   cp_parser_context *context;
15494
15495   /* Remember whether or not an error occurred, since we are about to
15496      destroy that information.  */
15497   error_occurred = cp_parser_error_occurred (parser);
15498   /* Remove the topmost context from the stack.  */
15499   context = parser->context;
15500   parser->context = context->next;
15501   /* If no parse errors occurred, commit to the tentative parse.  */
15502   if (!error_occurred)
15503     {
15504       /* Commit to the tokens read tentatively, unless that was
15505          already done.  */
15506       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
15507         cp_lexer_commit_tokens (parser->lexer);
15508
15509       pop_to_parent_deferring_access_checks ();
15510     }
15511   /* Otherwise, if errors occurred, roll back our state so that things
15512      are just as they were before we began the tentative parse.  */
15513   else
15514     {
15515       cp_lexer_rollback_tokens (parser->lexer);
15516       pop_deferring_access_checks ();
15517     }
15518   /* Add the context to the front of the free list.  */
15519   context->next = cp_parser_context_free_list;
15520   cp_parser_context_free_list = context;
15521
15522   return !error_occurred;
15523 }
15524
15525 /* Returns true if we are parsing tentatively -- but have decided that
15526    we will stick with this tentative parse, even if errors occur.  */
15527
15528 static bool
15529 cp_parser_committed_to_tentative_parse (cp_parser* parser)
15530 {
15531   return (cp_parser_parsing_tentatively (parser)
15532           && parser->context->status == CP_PARSER_STATUS_KIND_COMMITTED);
15533 }
15534
15535 /* Returns nonzero iff an error has occurred during the most recent
15536    tentative parse.  */
15537
15538 static bool
15539 cp_parser_error_occurred (cp_parser* parser)
15540 {
15541   return (cp_parser_parsing_tentatively (parser)
15542           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
15543 }
15544
15545 /* Returns nonzero if GNU extensions are allowed.  */
15546
15547 static bool
15548 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
15549 {
15550   return parser->allow_gnu_extensions_p;
15551 }
15552
15553 \f
15554 /* The parser.  */
15555
15556 static GTY (()) cp_parser *the_parser;
15557
15558 /* External interface.  */
15559
15560 /* Parse one entire translation unit.  */
15561
15562 void
15563 c_parse_file (void)
15564 {
15565   bool error_occurred;
15566   static bool already_called = false;
15567
15568   if (already_called)
15569     {
15570       sorry ("inter-module optimizations not implemented for C++");
15571       return;
15572     }
15573   already_called = true;
15574
15575   the_parser = cp_parser_new ();
15576   push_deferring_access_checks (flag_access_control
15577                                 ? dk_no_deferred : dk_no_check);
15578   error_occurred = cp_parser_translation_unit (the_parser);
15579   the_parser = NULL;
15580 }
15581
15582 /* This variable must be provided by every front end.  */
15583
15584 int yydebug;
15585
15586 #include "gt-cp-parser.h"