OSDN Git Service

* cp-tree.h (struct cp_declarator): New id_loc field.
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005  Free Software Foundation, Inc.
4    Written by Mark Mitchell <mark@codesourcery.com>.
5
6    This file is part of GCC.
7
8    GCC is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2, or (at your option)
11    any later version.
12
13    GCC is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with GCC; see the file COPYING.  If not, write to the Free
20    Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21    02111-1307, USA.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "dyn-string.h"
28 #include "varray.h"
29 #include "cpplib.h"
30 #include "tree.h"
31 #include "cp-tree.h"
32 #include "c-pragma.h"
33 #include "decl.h"
34 #include "flags.h"
35 #include "diagnostic.h"
36 #include "toplev.h"
37 #include "output.h"
38 #include "target.h"
39
40 \f
41 /* The lexer.  */
42
43 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
44    and c-lex.c) and the C++ parser.  */
45
46 /* A C++ token.  */
47
48 typedef struct cp_token GTY (())
49 {
50   /* The kind of token.  */
51   ENUM_BITFIELD (cpp_ttype) type : 8;
52   /* If this token is a keyword, this value indicates which keyword.
53      Otherwise, this value is RID_MAX.  */
54   ENUM_BITFIELD (rid) keyword : 8;
55   /* Token flags.  */
56   unsigned char flags;
57   /* True if this token is from a system header.  */
58   BOOL_BITFIELD in_system_header : 1;
59   /* True if this token is from a context where it is implicitly extern "C" */
60   BOOL_BITFIELD implicit_extern_c : 1;
61   /* The value associated with this token, if any.  */
62   tree value;
63   /* The location at which this token was found.  */
64   location_t location;
65 } cp_token;
66
67 /* We use a stack of token pointer for saving token sets.  */
68 typedef struct cp_token *cp_token_position;
69 DEF_VEC_MALLOC_P (cp_token_position);
70
71 static const cp_token eof_token =
72 {
73   CPP_EOF, RID_MAX, 0, 0, 0, NULL_TREE,
74 #if USE_MAPPED_LOCATION
75   0
76 #else
77   {0, 0}
78 #endif
79 };
80
81 /* The cp_lexer structure represents the C++ lexer.  It is responsible
82    for managing the token stream from the preprocessor and supplying
83    it to the parser.  Tokens are never added to the cp_lexer after
84    it is created.  */
85
86 typedef struct cp_lexer GTY (())
87 {
88   /* The memory allocated for the buffer.  NULL if this lexer does not
89      own the token buffer.  */
90   cp_token * GTY ((length ("%h.buffer_length"))) buffer;
91   /* If the lexer owns the buffer, this is the number of tokens in the
92      buffer.  */
93   size_t buffer_length;
94   
95   /* A pointer just past the last available token.  The tokens
96      in this lexer are [buffer, last_token).  */
97   cp_token_position GTY ((skip)) last_token;
98
99   /* The next available token.  If NEXT_TOKEN is &eof_token, then there are
100      no more available tokens.  */
101   cp_token_position GTY ((skip)) next_token;
102
103   /* A stack indicating positions at which cp_lexer_save_tokens was
104      called.  The top entry is the most recent position at which we
105      began saving tokens.  If the stack is non-empty, we are saving
106      tokens.  */
107   VEC (cp_token_position) *GTY ((skip)) saved_tokens;
108
109   /* True if we should output debugging information.  */
110   bool debugging_p;
111
112   /* The next lexer in a linked list of lexers.  */
113   struct cp_lexer *next;
114 } cp_lexer;
115
116 /* cp_token_cache is a range of tokens.  There is no need to represent
117    allocate heap memory for it, since tokens are never removed from the
118    lexer's array.  There is also no need for the GC to walk through
119    a cp_token_cache, since everything in here is referenced through
120    a lexer.  */
121
122 typedef struct cp_token_cache GTY(())
123 {
124   /* The beginning of the token range.  */
125   cp_token * GTY((skip)) first;
126
127   /* Points immediately after the last token in the range.  */
128   cp_token * GTY ((skip)) last;
129 } cp_token_cache;
130
131 /* Prototypes.  */
132
133 static cp_lexer *cp_lexer_new_main
134   (void);
135 static cp_lexer *cp_lexer_new_from_tokens
136   (cp_token_cache *tokens);
137 static void cp_lexer_destroy
138   (cp_lexer *);
139 static int cp_lexer_saving_tokens
140   (const cp_lexer *);
141 static cp_token_position cp_lexer_token_position
142   (cp_lexer *, bool);
143 static cp_token *cp_lexer_token_at
144   (cp_lexer *, cp_token_position);
145 static void cp_lexer_get_preprocessor_token
146   (cp_lexer *, cp_token *);
147 static inline cp_token *cp_lexer_peek_token
148   (cp_lexer *);
149 static cp_token *cp_lexer_peek_nth_token
150   (cp_lexer *, size_t);
151 static inline bool cp_lexer_next_token_is
152   (cp_lexer *, enum cpp_ttype);
153 static bool cp_lexer_next_token_is_not
154   (cp_lexer *, enum cpp_ttype);
155 static bool cp_lexer_next_token_is_keyword
156   (cp_lexer *, enum rid);
157 static cp_token *cp_lexer_consume_token
158   (cp_lexer *);
159 static void cp_lexer_purge_token
160   (cp_lexer *);
161 static void cp_lexer_purge_tokens_after
162   (cp_lexer *, cp_token_position);
163 static void cp_lexer_handle_pragma
164   (cp_lexer *);
165 static void cp_lexer_save_tokens
166   (cp_lexer *);
167 static void cp_lexer_commit_tokens
168   (cp_lexer *);
169 static void cp_lexer_rollback_tokens
170   (cp_lexer *);
171 #ifdef ENABLE_CHECKING
172 static void cp_lexer_print_token
173   (FILE *, cp_token *);
174 static inline bool cp_lexer_debugging_p
175   (cp_lexer *);
176 static void cp_lexer_start_debugging
177   (cp_lexer *) ATTRIBUTE_UNUSED;
178 static void cp_lexer_stop_debugging
179   (cp_lexer *) ATTRIBUTE_UNUSED;
180 #else
181 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
182    about passing NULL to functions that require non-NULL arguments
183    (fputs, fprintf).  It will never be used, so all we need is a value
184    of the right type that's guaranteed not to be NULL.  */
185 #define cp_lexer_debug_stream stdout
186 #define cp_lexer_print_token(str, tok) (void) 0
187 #define cp_lexer_debugging_p(lexer) 0
188 #endif /* ENABLE_CHECKING */
189
190 static cp_token_cache *cp_token_cache_new
191   (cp_token *, cp_token *);
192
193 /* Manifest constants.  */
194 #define CP_LEXER_BUFFER_SIZE 10000
195 #define CP_SAVED_TOKEN_STACK 5
196
197 /* A token type for keywords, as opposed to ordinary identifiers.  */
198 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
199
200 /* A token type for template-ids.  If a template-id is processed while
201    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
202    the value of the CPP_TEMPLATE_ID is whatever was returned by
203    cp_parser_template_id.  */
204 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
205
206 /* A token type for nested-name-specifiers.  If a
207    nested-name-specifier is processed while parsing tentatively, it is
208    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
209    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
210    cp_parser_nested_name_specifier_opt.  */
211 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
212
213 /* A token type for tokens that are not tokens at all; these are used
214    to represent slots in the array where there used to be a token
215    that has now been deleted.  */
216 #define CPP_PURGED ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
217
218 /* The number of token types, including C++-specific ones.  */
219 #define N_CP_TTYPES ((int) (CPP_PURGED + 1))
220
221 /* Variables.  */
222
223 #ifdef ENABLE_CHECKING
224 /* The stream to which debugging output should be written.  */
225 static FILE *cp_lexer_debug_stream;
226 #endif /* ENABLE_CHECKING */
227
228 /* Create a new main C++ lexer, the lexer that gets tokens from the
229    preprocessor.  */
230
231 static cp_lexer *
232 cp_lexer_new_main (void)
233 {
234   cp_token first_token;
235   cp_lexer *lexer;
236   cp_token *pos;
237   size_t alloc;
238   size_t space;
239   cp_token *buffer;
240
241   /* It's possible that lexing the first token will load a PCH file,
242      which is a GC collection point.  So we have to grab the first
243      token before allocating any memory.  Pragmas must not be deferred
244      as -fpch-preprocess can generate a pragma to load the PCH file in
245      the preprocessed output used by -save-temps.  */
246   cp_lexer_get_preprocessor_token (NULL, &first_token);
247
248   /* Tell cpplib we want CPP_PRAGMA tokens.  */
249   cpp_get_options (parse_in)->defer_pragmas = true;
250
251   /* Tell c_lex not to merge string constants.  */
252   c_lex_return_raw_strings = true;
253
254   c_common_no_more_pch ();
255
256   /* Allocate the memory.  */
257   lexer = GGC_CNEW (cp_lexer);
258
259 #ifdef ENABLE_CHECKING  
260   /* Initially we are not debugging.  */
261   lexer->debugging_p = false;
262 #endif /* ENABLE_CHECKING */
263   lexer->saved_tokens = VEC_alloc (cp_token_position, CP_SAVED_TOKEN_STACK);
264          
265   /* Create the buffer.  */
266   alloc = CP_LEXER_BUFFER_SIZE;
267   buffer = ggc_alloc (alloc * sizeof (cp_token));
268
269   /* Put the first token in the buffer.  */
270   space = alloc;
271   pos = buffer;
272   *pos = first_token;
273   
274   /* Get the remaining tokens from the preprocessor.  */
275   while (pos->type != CPP_EOF)
276     {
277       pos++;
278       if (!--space)
279         {
280           space = alloc;
281           alloc *= 2;
282           buffer = ggc_realloc (buffer, alloc * sizeof (cp_token));
283           pos = buffer + space;
284         }
285       cp_lexer_get_preprocessor_token (lexer, pos);
286     }
287   lexer->buffer = buffer;
288   lexer->buffer_length = alloc - space;
289   lexer->last_token = pos;
290   lexer->next_token = lexer->buffer_length ? buffer : (cp_token *)&eof_token;
291
292   /* Pragma processing (via cpp_handle_deferred_pragma) may result in
293      direct calls to c_lex.  Those callers all expect c_lex to do
294      string constant concatenation.  */
295   c_lex_return_raw_strings = false;
296
297   gcc_assert (lexer->next_token->type != CPP_PURGED);
298   return lexer;
299 }
300
301 /* Create a new lexer whose token stream is primed with the tokens in
302    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
303
304 static cp_lexer *
305 cp_lexer_new_from_tokens (cp_token_cache *cache)
306 {
307   cp_token *first = cache->first;
308   cp_token *last = cache->last;
309   cp_lexer *lexer = GGC_CNEW (cp_lexer);
310
311   /* We do not own the buffer.  */
312   lexer->buffer = NULL;
313   lexer->buffer_length = 0;
314   lexer->next_token = first == last ? (cp_token *)&eof_token : first;
315   lexer->last_token = last;
316   
317   lexer->saved_tokens = VEC_alloc (cp_token_position, CP_SAVED_TOKEN_STACK);
318
319 #ifdef ENABLE_CHECKING
320   /* Initially we are not debugging.  */
321   lexer->debugging_p = false;
322 #endif
323
324   gcc_assert (lexer->next_token->type != CPP_PURGED);
325   return lexer;
326 }
327
328 /* Frees all resources associated with LEXER.  */
329
330 static void
331 cp_lexer_destroy (cp_lexer *lexer)
332 {
333   if (lexer->buffer)
334     ggc_free (lexer->buffer);
335   VEC_free (cp_token_position, lexer->saved_tokens);
336   ggc_free (lexer);
337 }
338
339 /* Returns nonzero if debugging information should be output.  */
340
341 #ifdef ENABLE_CHECKING
342
343 static inline bool
344 cp_lexer_debugging_p (cp_lexer *lexer)
345 {
346   return lexer->debugging_p;
347 }
348
349 #endif /* ENABLE_CHECKING */
350
351 static inline cp_token_position
352 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
353 {
354   gcc_assert (!previous_p || lexer->next_token != &eof_token);
355   
356   return lexer->next_token - previous_p;
357 }
358
359 static inline cp_token *
360 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
361 {
362   return pos;
363 }
364
365 /* nonzero if we are presently saving tokens.  */
366
367 static inline int
368 cp_lexer_saving_tokens (const cp_lexer* lexer)
369 {
370   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
371 }
372
373 /* Store the next token from the preprocessor in *TOKEN.  Return true
374    if we reach EOF.  */
375
376 static void
377 cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
378                                  cp_token *token)
379 {
380   static int is_extern_c = 0;
381
382    /* Get a new token from the preprocessor.  */
383   token->type
384     = c_lex_with_flags (&token->value, &token->location, &token->flags);
385   token->in_system_header = in_system_header;
386
387   /* On some systems, some header files are surrounded by an 
388      implicit extern "C" block.  Set a flag in the token if it
389      comes from such a header.  */
390   is_extern_c += pending_lang_change;
391   pending_lang_change = 0;
392   token->implicit_extern_c = is_extern_c > 0;
393
394   /* Check to see if this token is a keyword.  */
395   if (token->type == CPP_NAME
396       && C_IS_RESERVED_WORD (token->value))
397     {
398       /* Mark this token as a keyword.  */
399       token->type = CPP_KEYWORD;
400       /* Record which keyword.  */
401       token->keyword = C_RID_CODE (token->value);
402       /* Update the value.  Some keywords are mapped to particular
403          entities, rather than simply having the value of the
404          corresponding IDENTIFIER_NODE.  For example, `__const' is
405          mapped to `const'.  */
406       token->value = ridpointers[token->keyword];
407     }
408   else
409     token->keyword = RID_MAX;
410 }
411
412 /* Update the globals input_location and in_system_header from TOKEN.  */
413 static inline void
414 cp_lexer_set_source_position_from_token (cp_token *token)
415 {
416   if (token->type != CPP_EOF)
417     {
418       input_location = token->location;
419       in_system_header = token->in_system_header;
420     }
421 }
422
423 /* Return a pointer to the next token in the token stream, but do not
424    consume it.  */
425
426 static inline cp_token *
427 cp_lexer_peek_token (cp_lexer *lexer)
428 {
429   if (cp_lexer_debugging_p (lexer))
430     {
431       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
432       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
433       putc ('\n', cp_lexer_debug_stream);
434     }
435   return lexer->next_token;
436 }
437
438 /* Return true if the next token has the indicated TYPE.  */
439
440 static inline bool
441 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
442 {
443   return cp_lexer_peek_token (lexer)->type == type;
444 }
445
446 /* Return true if the next token does not have the indicated TYPE.  */
447
448 static inline bool
449 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
450 {
451   return !cp_lexer_next_token_is (lexer, type);
452 }
453
454 /* Return true if the next token is the indicated KEYWORD.  */
455
456 static inline bool
457 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
458 {
459   cp_token *token;
460
461   /* Peek at the next token.  */
462   token = cp_lexer_peek_token (lexer);
463   /* Check to see if it is the indicated keyword.  */
464   return token->keyword == keyword;
465 }
466
467 /* Return a pointer to the Nth token in the token stream.  If N is 1,
468    then this is precisely equivalent to cp_lexer_peek_token (except
469    that it is not inline).  One would like to disallow that case, but
470    there is one case (cp_parser_nth_token_starts_template_id) where
471    the caller passes a variable for N and it might be 1.  */
472
473 static cp_token *
474 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
475 {
476   cp_token *token;
477
478   /* N is 1-based, not zero-based.  */
479   gcc_assert (n > 0 && lexer->next_token != &eof_token);
480
481   if (cp_lexer_debugging_p (lexer))
482     fprintf (cp_lexer_debug_stream,
483              "cp_lexer: peeking ahead %ld at token: ", (long)n);
484
485   --n;
486   token = lexer->next_token;
487   while (n != 0)
488     {
489       ++token;
490       if (token == lexer->last_token)
491         {
492           token = (cp_token *)&eof_token;
493           break;
494         }
495       
496       if (token->type != CPP_PURGED)
497         --n;
498     }
499
500   if (cp_lexer_debugging_p (lexer))
501     {
502       cp_lexer_print_token (cp_lexer_debug_stream, token);
503       putc ('\n', cp_lexer_debug_stream);
504     }
505
506   return token;
507 }
508
509 /* Return the next token, and advance the lexer's next_token pointer
510    to point to the next non-purged token.  */
511
512 static cp_token *
513 cp_lexer_consume_token (cp_lexer* lexer)
514 {
515   cp_token *token = lexer->next_token;
516
517   gcc_assert (token != &eof_token);
518   
519   do
520     {
521       lexer->next_token++;
522       if (lexer->next_token == lexer->last_token)
523         {
524           lexer->next_token = (cp_token *)&eof_token;
525           break;
526         }
527       
528     }
529   while (lexer->next_token->type == CPP_PURGED);
530   
531   cp_lexer_set_source_position_from_token (token);
532   
533   /* Provide debugging output.  */
534   if (cp_lexer_debugging_p (lexer))
535     {
536       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
537       cp_lexer_print_token (cp_lexer_debug_stream, token);
538       putc ('\n', cp_lexer_debug_stream);
539     }
540   
541   return token;
542 }
543
544 /* Permanently remove the next token from the token stream, and
545    advance the next_token pointer to refer to the next non-purged
546    token.  */
547
548 static void
549 cp_lexer_purge_token (cp_lexer *lexer)
550 {
551   cp_token *tok = lexer->next_token;
552   
553   gcc_assert (tok != &eof_token);
554   tok->type = CPP_PURGED;
555   tok->location = UNKNOWN_LOCATION;
556   tok->value = NULL_TREE;
557   tok->keyword = RID_MAX;
558
559   do
560     {
561       tok++;
562       if (tok == lexer->last_token)
563         {
564           tok = (cp_token *)&eof_token;
565           break;
566         }
567     }
568   while (tok->type == CPP_PURGED);
569   lexer->next_token = tok;
570 }
571
572 /* Permanently remove all tokens after TOK, up to, but not
573    including, the token that will be returned next by
574    cp_lexer_peek_token.  */
575
576 static void
577 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
578 {
579   cp_token *peek = lexer->next_token;
580
581   if (peek == &eof_token)
582     peek = lexer->last_token;
583   
584   gcc_assert (tok < peek);
585
586   for ( tok += 1; tok != peek; tok += 1)
587     {
588       tok->type = CPP_PURGED;
589       tok->location = UNKNOWN_LOCATION;
590       tok->value = NULL_TREE;
591       tok->keyword = RID_MAX;
592     }
593 }
594
595 /* Consume and handle a pragma token.  */
596 static void
597 cp_lexer_handle_pragma (cp_lexer *lexer)
598 {
599   cpp_string s;
600   cp_token *token = cp_lexer_consume_token (lexer);
601   gcc_assert (token->type == CPP_PRAGMA);
602   gcc_assert (token->value);
603
604   s.len = TREE_STRING_LENGTH (token->value);
605   s.text = (const unsigned char *) TREE_STRING_POINTER (token->value);
606
607   cpp_handle_deferred_pragma (parse_in, &s);
608
609   /* Clearing token->value here means that we will get an ICE if we
610      try to process this #pragma again (which should be impossible).  */
611   token->value = NULL;
612 }
613
614 /* Begin saving tokens.  All tokens consumed after this point will be
615    preserved.  */
616
617 static void
618 cp_lexer_save_tokens (cp_lexer* lexer)
619 {
620   /* Provide debugging output.  */
621   if (cp_lexer_debugging_p (lexer))
622     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
623
624   VEC_safe_push (cp_token_position, lexer->saved_tokens, lexer->next_token);
625 }
626
627 /* Commit to the portion of the token stream most recently saved.  */
628
629 static void
630 cp_lexer_commit_tokens (cp_lexer* lexer)
631 {
632   /* Provide debugging output.  */
633   if (cp_lexer_debugging_p (lexer))
634     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
635
636   VEC_pop (cp_token_position, lexer->saved_tokens);
637 }
638
639 /* Return all tokens saved since the last call to cp_lexer_save_tokens
640    to the token stream.  Stop saving tokens.  */
641
642 static void
643 cp_lexer_rollback_tokens (cp_lexer* lexer)
644 {
645   /* Provide debugging output.  */
646   if (cp_lexer_debugging_p (lexer))
647     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
648
649   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
650 }
651
652 /* Print a representation of the TOKEN on the STREAM.  */
653
654 #ifdef ENABLE_CHECKING
655
656 static void
657 cp_lexer_print_token (FILE * stream, cp_token *token)
658 {
659   /* We don't use cpp_type2name here because the parser defines
660      a few tokens of its own.  */
661   static const char *const token_names[] = {
662     /* cpplib-defined token types */
663 #define OP(e, s) #e,
664 #define TK(e, s) #e,
665     TTYPE_TABLE
666 #undef OP
667 #undef TK
668     /* C++ parser token types - see "Manifest constants", above.  */
669     "KEYWORD",
670     "TEMPLATE_ID",
671     "NESTED_NAME_SPECIFIER",
672     "PURGED"
673   };
674   
675   /* If we have a name for the token, print it out.  Otherwise, we
676      simply give the numeric code.  */
677   gcc_assert (token->type < ARRAY_SIZE(token_names));
678   fputs (token_names[token->type], stream);
679
680   /* For some tokens, print the associated data.  */
681   switch (token->type)
682     {
683     case CPP_KEYWORD:
684       /* Some keywords have a value that is not an IDENTIFIER_NODE.
685          For example, `struct' is mapped to an INTEGER_CST.  */
686       if (TREE_CODE (token->value) != IDENTIFIER_NODE)
687         break;
688       /* else fall through */
689     case CPP_NAME:
690       fputs (IDENTIFIER_POINTER (token->value), stream);
691       break;
692
693     case CPP_STRING:
694     case CPP_WSTRING:
695     case CPP_PRAGMA:
696       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->value));
697       break;
698
699     default:
700       break;
701     }
702 }
703
704 /* Start emitting debugging information.  */
705
706 static void
707 cp_lexer_start_debugging (cp_lexer* lexer)
708 {
709   lexer->debugging_p = true;
710 }
711
712 /* Stop emitting debugging information.  */
713
714 static void
715 cp_lexer_stop_debugging (cp_lexer* lexer)
716 {
717   lexer->debugging_p = false;
718 }
719
720 #endif /* ENABLE_CHECKING */
721
722 /* Create a new cp_token_cache, representing a range of tokens.  */
723
724 static cp_token_cache *
725 cp_token_cache_new (cp_token *first, cp_token *last)
726 {
727   cp_token_cache *cache = GGC_NEW (cp_token_cache);
728   cache->first = first;
729   cache->last = last;
730   return cache;
731 }
732
733 \f
734 /* Decl-specifiers.  */
735
736 static void clear_decl_specs
737   (cp_decl_specifier_seq *);
738
739 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
740
741 static void
742 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
743 {
744   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
745 }
746
747 /* Declarators.  */
748
749 /* Nothing other than the parser should be creating declarators;
750    declarators are a semi-syntactic representation of C++ entities.
751    Other parts of the front end that need to create entities (like
752    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
753
754 static cp_declarator *make_call_declarator
755   (cp_declarator *, cp_parameter_declarator *, cp_cv_quals, tree);
756 static cp_declarator *make_array_declarator
757   (cp_declarator *, tree);
758 static cp_declarator *make_pointer_declarator
759   (cp_cv_quals, cp_declarator *);
760 static cp_declarator *make_reference_declarator
761   (cp_cv_quals, cp_declarator *);
762 static cp_parameter_declarator *make_parameter_declarator
763   (cp_decl_specifier_seq *, cp_declarator *, tree);
764 static cp_declarator *make_ptrmem_declarator
765   (cp_cv_quals, tree, cp_declarator *);
766
767 cp_declarator *cp_error_declarator;
768
769 /* The obstack on which declarators and related data structures are
770    allocated.  */
771 static struct obstack declarator_obstack;
772
773 /* Alloc BYTES from the declarator memory pool.  */
774
775 static inline void *
776 alloc_declarator (size_t bytes)
777 {
778   return obstack_alloc (&declarator_obstack, bytes);
779 }
780
781 /* Allocate a declarator of the indicated KIND.  Clear fields that are
782    common to all declarators.  */
783
784 static cp_declarator *
785 make_declarator (cp_declarator_kind kind)
786 {
787   cp_declarator *declarator;
788
789   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
790   declarator->kind = kind;
791   declarator->attributes = NULL_TREE;
792   declarator->declarator = NULL;
793
794   return declarator;
795 }
796
797 /* Make a declarator for a generalized identifier.  If non-NULL, the
798    identifier is QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is
799    just UNQUALIFIED_NAME.  */
800
801 static cp_declarator *
802 make_id_declarator (tree qualifying_scope, tree unqualified_name)
803 {
804   cp_declarator *declarator;
805
806   /* It is valid to write:
807
808        class C { void f(); };
809        typedef C D;
810        void D::f();
811
812      The standard is not clear about whether `typedef const C D' is
813      legal; as of 2002-09-15 the committee is considering that
814      question.  EDG 3.0 allows that syntax.  Therefore, we do as
815      well.  */
816   if (qualifying_scope && TYPE_P (qualifying_scope))
817     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
818
819   declarator = make_declarator (cdk_id);
820   declarator->u.id.qualifying_scope = qualifying_scope;
821   declarator->u.id.unqualified_name = unqualified_name;
822   declarator->u.id.sfk = sfk_none;
823
824   return declarator;
825 }
826
827 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
828    of modifiers such as const or volatile to apply to the pointer
829    type, represented as identifiers.  */
830
831 cp_declarator *
832 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
833 {
834   cp_declarator *declarator;
835
836   declarator = make_declarator (cdk_pointer);
837   declarator->declarator = target;
838   declarator->u.pointer.qualifiers = cv_qualifiers;
839   declarator->u.pointer.class_type = NULL_TREE;
840
841   return declarator;
842 }
843
844 /* Like make_pointer_declarator -- but for references.  */
845
846 cp_declarator *
847 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
848 {
849   cp_declarator *declarator;
850
851   declarator = make_declarator (cdk_reference);
852   declarator->declarator = target;
853   declarator->u.pointer.qualifiers = cv_qualifiers;
854   declarator->u.pointer.class_type = NULL_TREE;
855
856   return declarator;
857 }
858
859 /* Like make_pointer_declarator -- but for a pointer to a non-static
860    member of CLASS_TYPE.  */
861
862 cp_declarator *
863 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
864                         cp_declarator *pointee)
865 {
866   cp_declarator *declarator;
867
868   declarator = make_declarator (cdk_ptrmem);
869   declarator->declarator = pointee;
870   declarator->u.pointer.qualifiers = cv_qualifiers;
871   declarator->u.pointer.class_type = class_type;
872
873   return declarator;
874 }
875
876 /* Make a declarator for the function given by TARGET, with the
877    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
878    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
879    indicates what exceptions can be thrown.  */
880
881 cp_declarator *
882 make_call_declarator (cp_declarator *target,
883                       cp_parameter_declarator *parms,
884                       cp_cv_quals cv_qualifiers,
885                       tree exception_specification)
886 {
887   cp_declarator *declarator;
888
889   declarator = make_declarator (cdk_function);
890   declarator->declarator = target;
891   declarator->u.function.parameters = parms;
892   declarator->u.function.qualifiers = cv_qualifiers;
893   declarator->u.function.exception_specification = exception_specification;
894
895   return declarator;
896 }
897
898 /* Make a declarator for an array of BOUNDS elements, each of which is
899    defined by ELEMENT.  */
900
901 cp_declarator *
902 make_array_declarator (cp_declarator *element, tree bounds)
903 {
904   cp_declarator *declarator;
905
906   declarator = make_declarator (cdk_array);
907   declarator->declarator = element;
908   declarator->u.array.bounds = bounds;
909
910   return declarator;
911 }
912
913 cp_parameter_declarator *no_parameters;
914
915 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
916    DECLARATOR and DEFAULT_ARGUMENT.  */
917
918 cp_parameter_declarator *
919 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
920                            cp_declarator *declarator,
921                            tree default_argument)
922 {
923   cp_parameter_declarator *parameter;
924
925   parameter = ((cp_parameter_declarator *)
926                alloc_declarator (sizeof (cp_parameter_declarator)));
927   parameter->next = NULL;
928   if (decl_specifiers)
929     parameter->decl_specifiers = *decl_specifiers;
930   else
931     clear_decl_specs (&parameter->decl_specifiers);
932   parameter->declarator = declarator;
933   parameter->default_argument = default_argument;
934   parameter->ellipsis_p = false;
935
936   return parameter;
937 }
938
939 /* The parser.  */
940
941 /* Overview
942    --------
943
944    A cp_parser parses the token stream as specified by the C++
945    grammar.  Its job is purely parsing, not semantic analysis.  For
946    example, the parser breaks the token stream into declarators,
947    expressions, statements, and other similar syntactic constructs.
948    It does not check that the types of the expressions on either side
949    of an assignment-statement are compatible, or that a function is
950    not declared with a parameter of type `void'.
951
952    The parser invokes routines elsewhere in the compiler to perform
953    semantic analysis and to build up the abstract syntax tree for the
954    code processed.
955
956    The parser (and the template instantiation code, which is, in a
957    way, a close relative of parsing) are the only parts of the
958    compiler that should be calling push_scope and pop_scope, or
959    related functions.  The parser (and template instantiation code)
960    keeps track of what scope is presently active; everything else
961    should simply honor that.  (The code that generates static
962    initializers may also need to set the scope, in order to check
963    access control correctly when emitting the initializers.)
964
965    Methodology
966    -----------
967
968    The parser is of the standard recursive-descent variety.  Upcoming
969    tokens in the token stream are examined in order to determine which
970    production to use when parsing a non-terminal.  Some C++ constructs
971    require arbitrary look ahead to disambiguate.  For example, it is
972    impossible, in the general case, to tell whether a statement is an
973    expression or declaration without scanning the entire statement.
974    Therefore, the parser is capable of "parsing tentatively."  When the
975    parser is not sure what construct comes next, it enters this mode.
976    Then, while we attempt to parse the construct, the parser queues up
977    error messages, rather than issuing them immediately, and saves the
978    tokens it consumes.  If the construct is parsed successfully, the
979    parser "commits", i.e., it issues any queued error messages and
980    the tokens that were being preserved are permanently discarded.
981    If, however, the construct is not parsed successfully, the parser
982    rolls back its state completely so that it can resume parsing using
983    a different alternative.
984
985    Future Improvements
986    -------------------
987
988    The performance of the parser could probably be improved substantially.
989    We could often eliminate the need to parse tentatively by looking ahead
990    a little bit.  In some places, this approach might not entirely eliminate
991    the need to parse tentatively, but it might still speed up the average
992    case.  */
993
994 /* Flags that are passed to some parsing functions.  These values can
995    be bitwise-ored together.  */
996
997 typedef enum cp_parser_flags
998 {
999   /* No flags.  */
1000   CP_PARSER_FLAGS_NONE = 0x0,
1001   /* The construct is optional.  If it is not present, then no error
1002      should be issued.  */
1003   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1004   /* When parsing a type-specifier, do not allow user-defined types.  */
1005   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1006 } cp_parser_flags;
1007
1008 /* The different kinds of declarators we want to parse.  */
1009
1010 typedef enum cp_parser_declarator_kind
1011 {
1012   /* We want an abstract declarator.  */
1013   CP_PARSER_DECLARATOR_ABSTRACT,
1014   /* We want a named declarator.  */
1015   CP_PARSER_DECLARATOR_NAMED,
1016   /* We don't mind, but the name must be an unqualified-id.  */
1017   CP_PARSER_DECLARATOR_EITHER
1018 } cp_parser_declarator_kind;
1019
1020 /* The precedence values used to parse binary expressions.  The minimum value
1021    of PREC must be 1, because zero is reserved to quickly discriminate
1022    binary operators from other tokens.  */
1023
1024 enum cp_parser_prec
1025 {
1026   PREC_NOT_OPERATOR,
1027   PREC_LOGICAL_OR_EXPRESSION,
1028   PREC_LOGICAL_AND_EXPRESSION,
1029   PREC_INCLUSIVE_OR_EXPRESSION,
1030   PREC_EXCLUSIVE_OR_EXPRESSION,
1031   PREC_AND_EXPRESSION,
1032   PREC_EQUALITY_EXPRESSION,
1033   PREC_RELATIONAL_EXPRESSION,
1034   PREC_SHIFT_EXPRESSION,
1035   PREC_ADDITIVE_EXPRESSION,
1036   PREC_MULTIPLICATIVE_EXPRESSION,
1037   PREC_PM_EXPRESSION,
1038   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1039 };
1040
1041 /* A mapping from a token type to a corresponding tree node type, with a
1042    precedence value.  */
1043
1044 typedef struct cp_parser_binary_operations_map_node
1045 {
1046   /* The token type.  */
1047   enum cpp_ttype token_type;
1048   /* The corresponding tree code.  */
1049   enum tree_code tree_type;
1050   /* The precedence of this operator.  */
1051   enum cp_parser_prec prec;
1052 } cp_parser_binary_operations_map_node;
1053
1054 /* The status of a tentative parse.  */
1055
1056 typedef enum cp_parser_status_kind
1057 {
1058   /* No errors have occurred.  */
1059   CP_PARSER_STATUS_KIND_NO_ERROR,
1060   /* An error has occurred.  */
1061   CP_PARSER_STATUS_KIND_ERROR,
1062   /* We are committed to this tentative parse, whether or not an error
1063      has occurred.  */
1064   CP_PARSER_STATUS_KIND_COMMITTED
1065 } cp_parser_status_kind;
1066
1067 typedef struct cp_parser_expression_stack_entry
1068 {
1069   tree lhs;
1070   enum tree_code tree_type;
1071   int prec;
1072 } cp_parser_expression_stack_entry;
1073
1074 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1075    entries because precedence levels on the stack are monotonically
1076    increasing.  */
1077 typedef struct cp_parser_expression_stack_entry
1078   cp_parser_expression_stack[NUM_PREC_VALUES];
1079
1080 /* Context that is saved and restored when parsing tentatively.  */
1081 typedef struct cp_parser_context GTY (())
1082 {
1083   /* If this is a tentative parsing context, the status of the
1084      tentative parse.  */
1085   enum cp_parser_status_kind status;
1086   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1087      that are looked up in this context must be looked up both in the
1088      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1089      the context of the containing expression.  */
1090   tree object_type;
1091
1092   /* The next parsing context in the stack.  */
1093   struct cp_parser_context *next;
1094 } cp_parser_context;
1095
1096 /* Prototypes.  */
1097
1098 /* Constructors and destructors.  */
1099
1100 static cp_parser_context *cp_parser_context_new
1101   (cp_parser_context *);
1102
1103 /* Class variables.  */
1104
1105 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1106
1107 /* The operator-precedence table used by cp_parser_binary_expression.
1108    Transformed into an associative array (binops_by_token) by
1109    cp_parser_new.  */
1110
1111 static const cp_parser_binary_operations_map_node binops[] = {
1112   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1113   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1114
1115   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1116   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1117   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1118
1119   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1120   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1121
1122   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1123   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1124
1125   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1126   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1127   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1128   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1129   { CPP_MIN, MIN_EXPR, PREC_RELATIONAL_EXPRESSION },
1130   { CPP_MAX, MAX_EXPR, PREC_RELATIONAL_EXPRESSION },
1131
1132   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1133   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1134
1135   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1136
1137   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1138
1139   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1140
1141   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1142
1143   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1144 };
1145
1146 /* The same as binops, but initialized by cp_parser_new so that
1147    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1148    for speed.  */
1149 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1150
1151 /* Constructors and destructors.  */
1152
1153 /* Construct a new context.  The context below this one on the stack
1154    is given by NEXT.  */
1155
1156 static cp_parser_context *
1157 cp_parser_context_new (cp_parser_context* next)
1158 {
1159   cp_parser_context *context;
1160
1161   /* Allocate the storage.  */
1162   if (cp_parser_context_free_list != NULL)
1163     {
1164       /* Pull the first entry from the free list.  */
1165       context = cp_parser_context_free_list;
1166       cp_parser_context_free_list = context->next;
1167       memset (context, 0, sizeof (*context));
1168     }
1169   else
1170     context = GGC_CNEW (cp_parser_context);
1171
1172   /* No errors have occurred yet in this context.  */
1173   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1174   /* If this is not the bottomost context, copy information that we
1175      need from the previous context.  */
1176   if (next)
1177     {
1178       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1179          expression, then we are parsing one in this context, too.  */
1180       context->object_type = next->object_type;
1181       /* Thread the stack.  */
1182       context->next = next;
1183     }
1184
1185   return context;
1186 }
1187
1188 /* The cp_parser structure represents the C++ parser.  */
1189
1190 typedef struct cp_parser GTY(())
1191 {
1192   /* The lexer from which we are obtaining tokens.  */
1193   cp_lexer *lexer;
1194
1195   /* The scope in which names should be looked up.  If NULL_TREE, then
1196      we look up names in the scope that is currently open in the
1197      source program.  If non-NULL, this is either a TYPE or
1198      NAMESPACE_DECL for the scope in which we should look.
1199
1200      This value is not cleared automatically after a name is looked
1201      up, so we must be careful to clear it before starting a new look
1202      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1203      will look up `Z' in the scope of `X', rather than the current
1204      scope.)  Unfortunately, it is difficult to tell when name lookup
1205      is complete, because we sometimes peek at a token, look it up,
1206      and then decide not to consume it.  */
1207   tree scope;
1208
1209   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1210      last lookup took place.  OBJECT_SCOPE is used if an expression
1211      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1212      respectively.  QUALIFYING_SCOPE is used for an expression of the
1213      form "X::Y"; it refers to X.  */
1214   tree object_scope;
1215   tree qualifying_scope;
1216
1217   /* A stack of parsing contexts.  All but the bottom entry on the
1218      stack will be tentative contexts.
1219
1220      We parse tentatively in order to determine which construct is in
1221      use in some situations.  For example, in order to determine
1222      whether a statement is an expression-statement or a
1223      declaration-statement we parse it tentatively as a
1224      declaration-statement.  If that fails, we then reparse the same
1225      token stream as an expression-statement.  */
1226   cp_parser_context *context;
1227
1228   /* True if we are parsing GNU C++.  If this flag is not set, then
1229      GNU extensions are not recognized.  */
1230   bool allow_gnu_extensions_p;
1231
1232   /* TRUE if the `>' token should be interpreted as the greater-than
1233      operator.  FALSE if it is the end of a template-id or
1234      template-parameter-list.  */
1235   bool greater_than_is_operator_p;
1236
1237   /* TRUE if default arguments are allowed within a parameter list
1238      that starts at this point. FALSE if only a gnu extension makes
1239      them permissible.  */
1240   bool default_arg_ok_p;
1241
1242   /* TRUE if we are parsing an integral constant-expression.  See
1243      [expr.const] for a precise definition.  */
1244   bool integral_constant_expression_p;
1245
1246   /* TRUE if we are parsing an integral constant-expression -- but a
1247      non-constant expression should be permitted as well.  This flag
1248      is used when parsing an array bound so that GNU variable-length
1249      arrays are tolerated.  */
1250   bool allow_non_integral_constant_expression_p;
1251
1252   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1253      been seen that makes the expression non-constant.  */
1254   bool non_integral_constant_expression_p;
1255
1256   /* TRUE if local variable names and `this' are forbidden in the
1257      current context.  */
1258   bool local_variables_forbidden_p;
1259
1260   /* TRUE if the declaration we are parsing is part of a
1261      linkage-specification of the form `extern string-literal
1262      declaration'.  */
1263   bool in_unbraced_linkage_specification_p;
1264
1265   /* TRUE if we are presently parsing a declarator, after the
1266      direct-declarator.  */
1267   bool in_declarator_p;
1268
1269   /* TRUE if we are presently parsing a template-argument-list.  */
1270   bool in_template_argument_list_p;
1271
1272   /* TRUE if we are presently parsing the body of an
1273      iteration-statement.  */
1274   bool in_iteration_statement_p;
1275
1276   /* TRUE if we are presently parsing the body of a switch
1277      statement.  */
1278   bool in_switch_statement_p;
1279
1280   /* TRUE if we are parsing a type-id in an expression context.  In
1281      such a situation, both "type (expr)" and "type (type)" are valid
1282      alternatives.  */
1283   bool in_type_id_in_expr_p;
1284
1285   /* TRUE if we are currently in a header file where declarations are
1286      implicitly extern "C".  */
1287   bool implicit_extern_c;
1288
1289   /* TRUE if strings in expressions should be translated to the execution
1290      character set.  */
1291   bool translate_strings_p;
1292
1293   /* If non-NULL, then we are parsing a construct where new type
1294      definitions are not permitted.  The string stored here will be
1295      issued as an error message if a type is defined.  */
1296   const char *type_definition_forbidden_message;
1297
1298   /* A list of lists. The outer list is a stack, used for member
1299      functions of local classes. At each level there are two sub-list,
1300      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1301      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1302      TREE_VALUE's. The functions are chained in reverse declaration
1303      order.
1304
1305      The TREE_PURPOSE sublist contains those functions with default
1306      arguments that need post processing, and the TREE_VALUE sublist
1307      contains those functions with definitions that need post
1308      processing.
1309
1310      These lists can only be processed once the outermost class being
1311      defined is complete.  */
1312   tree unparsed_functions_queues;
1313
1314   /* The number of classes whose definitions are currently in
1315      progress.  */
1316   unsigned num_classes_being_defined;
1317
1318   /* The number of template parameter lists that apply directly to the
1319      current declaration.  */
1320   unsigned num_template_parameter_lists;
1321 } cp_parser;
1322
1323 /* The type of a function that parses some kind of expression.  */
1324 typedef tree (*cp_parser_expression_fn) (cp_parser *);
1325
1326 /* Prototypes.  */
1327
1328 /* Constructors and destructors.  */
1329
1330 static cp_parser *cp_parser_new
1331   (void);
1332
1333 /* Routines to parse various constructs.
1334
1335    Those that return `tree' will return the error_mark_node (rather
1336    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1337    Sometimes, they will return an ordinary node if error-recovery was
1338    attempted, even though a parse error occurred.  So, to check
1339    whether or not a parse error occurred, you should always use
1340    cp_parser_error_occurred.  If the construct is optional (indicated
1341    either by an `_opt' in the name of the function that does the
1342    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1343    the construct is not present.  */
1344
1345 /* Lexical conventions [gram.lex]  */
1346
1347 static tree cp_parser_identifier
1348   (cp_parser *);
1349 static tree cp_parser_string_literal
1350   (cp_parser *, bool, bool);
1351
1352 /* Basic concepts [gram.basic]  */
1353
1354 static bool cp_parser_translation_unit
1355   (cp_parser *);
1356
1357 /* Expressions [gram.expr]  */
1358
1359 static tree cp_parser_primary_expression
1360   (cp_parser *, bool, cp_id_kind *, tree *);
1361 static tree cp_parser_id_expression
1362   (cp_parser *, bool, bool, bool *, bool);
1363 static tree cp_parser_unqualified_id
1364   (cp_parser *, bool, bool, bool);
1365 static tree cp_parser_nested_name_specifier_opt
1366   (cp_parser *, bool, bool, bool, bool);
1367 static tree cp_parser_nested_name_specifier
1368   (cp_parser *, bool, bool, bool, bool);
1369 static tree cp_parser_class_or_namespace_name
1370   (cp_parser *, bool, bool, bool, bool, bool);
1371 static tree cp_parser_postfix_expression
1372   (cp_parser *, bool, bool);
1373 static tree cp_parser_postfix_open_square_expression
1374   (cp_parser *, tree, bool);
1375 static tree cp_parser_postfix_dot_deref_expression
1376   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1377 static tree cp_parser_parenthesized_expression_list
1378   (cp_parser *, bool, bool, bool *);
1379 static void cp_parser_pseudo_destructor_name
1380   (cp_parser *, tree *, tree *);
1381 static tree cp_parser_unary_expression
1382   (cp_parser *, bool, bool);
1383 static enum tree_code cp_parser_unary_operator
1384   (cp_token *);
1385 static tree cp_parser_new_expression
1386   (cp_parser *);
1387 static tree cp_parser_new_placement
1388   (cp_parser *);
1389 static tree cp_parser_new_type_id
1390   (cp_parser *, tree *);
1391 static cp_declarator *cp_parser_new_declarator_opt
1392   (cp_parser *);
1393 static cp_declarator *cp_parser_direct_new_declarator
1394   (cp_parser *);
1395 static tree cp_parser_new_initializer
1396   (cp_parser *);
1397 static tree cp_parser_delete_expression
1398   (cp_parser *);
1399 static tree cp_parser_cast_expression
1400   (cp_parser *, bool, bool);
1401 static tree cp_parser_binary_expression
1402   (cp_parser *, bool);
1403 static tree cp_parser_question_colon_clause
1404   (cp_parser *, tree);
1405 static tree cp_parser_assignment_expression
1406   (cp_parser *, bool);
1407 static enum tree_code cp_parser_assignment_operator_opt
1408   (cp_parser *);
1409 static tree cp_parser_expression
1410   (cp_parser *, bool);
1411 static tree cp_parser_constant_expression
1412   (cp_parser *, bool, bool *);
1413 static tree cp_parser_builtin_offsetof
1414   (cp_parser *);
1415
1416 /* Statements [gram.stmt.stmt]  */
1417
1418 static void cp_parser_statement
1419   (cp_parser *, tree);
1420 static tree cp_parser_labeled_statement
1421   (cp_parser *, tree);
1422 static tree cp_parser_expression_statement
1423   (cp_parser *, tree);
1424 static tree cp_parser_compound_statement
1425   (cp_parser *, tree, bool);
1426 static void cp_parser_statement_seq_opt
1427   (cp_parser *, tree);
1428 static tree cp_parser_selection_statement
1429   (cp_parser *);
1430 static tree cp_parser_condition
1431   (cp_parser *);
1432 static tree cp_parser_iteration_statement
1433   (cp_parser *);
1434 static void cp_parser_for_init_statement
1435   (cp_parser *);
1436 static tree cp_parser_jump_statement
1437   (cp_parser *);
1438 static void cp_parser_declaration_statement
1439   (cp_parser *);
1440
1441 static tree cp_parser_implicitly_scoped_statement
1442   (cp_parser *);
1443 static void cp_parser_already_scoped_statement
1444   (cp_parser *);
1445
1446 /* Declarations [gram.dcl.dcl] */
1447
1448 static void cp_parser_declaration_seq_opt
1449   (cp_parser *);
1450 static void cp_parser_declaration
1451   (cp_parser *);
1452 static void cp_parser_block_declaration
1453   (cp_parser *, bool);
1454 static void cp_parser_simple_declaration
1455   (cp_parser *, bool);
1456 static void cp_parser_decl_specifier_seq
1457   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1458 static tree cp_parser_storage_class_specifier_opt
1459   (cp_parser *);
1460 static tree cp_parser_function_specifier_opt
1461   (cp_parser *, cp_decl_specifier_seq *);
1462 static tree cp_parser_type_specifier
1463   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1464    int *, bool *);
1465 static tree cp_parser_simple_type_specifier
1466   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1467 static tree cp_parser_type_name
1468   (cp_parser *);
1469 static tree cp_parser_elaborated_type_specifier
1470   (cp_parser *, bool, bool);
1471 static tree cp_parser_enum_specifier
1472   (cp_parser *);
1473 static void cp_parser_enumerator_list
1474   (cp_parser *, tree);
1475 static void cp_parser_enumerator_definition
1476   (cp_parser *, tree);
1477 static tree cp_parser_namespace_name
1478   (cp_parser *);
1479 static void cp_parser_namespace_definition
1480   (cp_parser *);
1481 static void cp_parser_namespace_body
1482   (cp_parser *);
1483 static tree cp_parser_qualified_namespace_specifier
1484   (cp_parser *);
1485 static void cp_parser_namespace_alias_definition
1486   (cp_parser *);
1487 static void cp_parser_using_declaration
1488   (cp_parser *);
1489 static void cp_parser_using_directive
1490   (cp_parser *);
1491 static void cp_parser_asm_definition
1492   (cp_parser *);
1493 static void cp_parser_linkage_specification
1494   (cp_parser *);
1495
1496 /* Declarators [gram.dcl.decl] */
1497
1498 static tree cp_parser_init_declarator
1499   (cp_parser *, cp_decl_specifier_seq *, bool, bool, int, bool *);
1500 static cp_declarator *cp_parser_declarator
1501   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1502 static cp_declarator *cp_parser_direct_declarator
1503   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1504 static enum tree_code cp_parser_ptr_operator
1505   (cp_parser *, tree *, cp_cv_quals *);
1506 static cp_cv_quals cp_parser_cv_qualifier_seq_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 void cp_parser_type_specifier_seq
1513   (cp_parser *, cp_decl_specifier_seq *);
1514 static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1515   (cp_parser *);
1516 static cp_parameter_declarator *cp_parser_parameter_declaration_list
1517   (cp_parser *, bool *);
1518 static cp_parameter_declarator *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, enum tag_types, 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 cp_declarator *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 *, bool *);
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, enum tag_types, 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 *, cp_declarator *);
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_global_scope_opt
1656   (cp_parser *, bool);
1657 static bool cp_parser_constructor_declarator_p
1658   (cp_parser *, bool);
1659 static tree cp_parser_function_definition_from_specifiers_and_declarator
1660   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1661 static tree cp_parser_function_definition_after_declarator
1662   (cp_parser *, bool);
1663 static void cp_parser_template_declaration_after_export
1664   (cp_parser *, bool);
1665 static tree cp_parser_single_declaration
1666   (cp_parser *, bool, bool *);
1667 static tree cp_parser_functional_cast
1668   (cp_parser *, tree);
1669 static tree cp_parser_save_member_function_body
1670   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1671 static tree cp_parser_enclosed_template_argument_list
1672   (cp_parser *);
1673 static void cp_parser_save_default_args
1674   (cp_parser *, tree);
1675 static void cp_parser_late_parsing_for_member
1676   (cp_parser *, tree);
1677 static void cp_parser_late_parsing_default_args
1678   (cp_parser *, tree);
1679 static tree cp_parser_sizeof_operand
1680   (cp_parser *, enum rid);
1681 static bool cp_parser_declares_only_class_p
1682   (cp_parser *);
1683 static void cp_parser_set_storage_class
1684   (cp_decl_specifier_seq *, cp_storage_class);
1685 static void cp_parser_set_decl_spec_type
1686   (cp_decl_specifier_seq *, tree, bool);
1687 static bool cp_parser_friend_p
1688   (const cp_decl_specifier_seq *);
1689 static cp_token *cp_parser_require
1690   (cp_parser *, enum cpp_ttype, const char *);
1691 static cp_token *cp_parser_require_keyword
1692   (cp_parser *, enum rid, const char *);
1693 static bool cp_parser_token_starts_function_definition_p
1694   (cp_token *);
1695 static bool cp_parser_next_token_starts_class_definition_p
1696   (cp_parser *);
1697 static bool cp_parser_next_token_ends_template_argument_p
1698   (cp_parser *);
1699 static bool cp_parser_nth_token_starts_template_argument_list_p
1700   (cp_parser *, size_t);
1701 static enum tag_types cp_parser_token_is_class_key
1702   (cp_token *);
1703 static void cp_parser_check_class_key
1704   (enum tag_types, tree type);
1705 static void cp_parser_check_access_in_redeclaration
1706   (tree type);
1707 static bool cp_parser_optional_template_keyword
1708   (cp_parser *);
1709 static void cp_parser_pre_parsed_nested_name_specifier
1710   (cp_parser *);
1711 static void cp_parser_cache_group
1712   (cp_parser *, enum cpp_ttype, unsigned);
1713 static void cp_parser_parse_tentatively
1714   (cp_parser *);
1715 static void cp_parser_commit_to_tentative_parse
1716   (cp_parser *);
1717 static void cp_parser_abort_tentative_parse
1718   (cp_parser *);
1719 static bool cp_parser_parse_definitely
1720   (cp_parser *);
1721 static inline bool cp_parser_parsing_tentatively
1722   (cp_parser *);
1723 static bool cp_parser_uncommitted_to_tentative_parse_p
1724   (cp_parser *);
1725 static void cp_parser_error
1726   (cp_parser *, const char *);
1727 static void cp_parser_name_lookup_error
1728   (cp_parser *, tree, tree, const char *);
1729 static bool cp_parser_simulate_error
1730   (cp_parser *);
1731 static void cp_parser_check_type_definition
1732   (cp_parser *);
1733 static void cp_parser_check_for_definition_in_return_type
1734   (cp_declarator *, tree);
1735 static void cp_parser_check_for_invalid_template_id
1736   (cp_parser *, tree);
1737 static bool cp_parser_non_integral_constant_expression
1738   (cp_parser *, const char *);
1739 static void cp_parser_diagnose_invalid_type_name
1740   (cp_parser *, tree, tree);
1741 static bool cp_parser_parse_and_diagnose_invalid_type_name
1742   (cp_parser *);
1743 static int cp_parser_skip_to_closing_parenthesis
1744   (cp_parser *, bool, bool, bool);
1745 static void cp_parser_skip_to_end_of_statement
1746   (cp_parser *);
1747 static void cp_parser_consume_semicolon_at_end_of_statement
1748   (cp_parser *);
1749 static void cp_parser_skip_to_end_of_block_or_statement
1750   (cp_parser *);
1751 static void cp_parser_skip_to_closing_brace
1752   (cp_parser *);
1753 static void cp_parser_skip_until_found
1754   (cp_parser *, enum cpp_ttype, const char *);
1755 static bool cp_parser_error_occurred
1756   (cp_parser *);
1757 static bool cp_parser_allow_gnu_extensions_p
1758   (cp_parser *);
1759 static bool cp_parser_is_string_literal
1760   (cp_token *);
1761 static bool cp_parser_is_keyword
1762   (cp_token *, enum rid);
1763 static tree cp_parser_make_typename_type
1764   (cp_parser *, tree, tree);
1765
1766 /* Returns nonzero if we are parsing tentatively.  */
1767
1768 static inline bool
1769 cp_parser_parsing_tentatively (cp_parser* parser)
1770 {
1771   return parser->context->next != NULL;
1772 }
1773
1774 /* Returns nonzero if TOKEN is a string literal.  */
1775
1776 static bool
1777 cp_parser_is_string_literal (cp_token* token)
1778 {
1779   return (token->type == CPP_STRING || token->type == CPP_WSTRING);
1780 }
1781
1782 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
1783
1784 static bool
1785 cp_parser_is_keyword (cp_token* token, enum rid keyword)
1786 {
1787   return token->keyword == keyword;
1788 }
1789
1790 /* If not parsing tentatively, issue a diagnostic of the form
1791       FILE:LINE: MESSAGE before TOKEN
1792    where TOKEN is the next token in the input stream.  MESSAGE
1793    (specified by the caller) is usually of the form "expected
1794    OTHER-TOKEN".  */
1795
1796 static void
1797 cp_parser_error (cp_parser* parser, const char* message)
1798 {
1799   if (!cp_parser_simulate_error (parser))
1800     {
1801       cp_token *token = cp_lexer_peek_token (parser->lexer);
1802       /* This diagnostic makes more sense if it is tagged to the line
1803          of the token we just peeked at.  */
1804       cp_lexer_set_source_position_from_token (token);
1805       if (token->type == CPP_PRAGMA)
1806         {
1807           error ("%<#pragma%> is not allowed here"); 
1808           cp_lexer_purge_token (parser->lexer);
1809           return;
1810         }
1811       c_parse_error (message,
1812                      /* Because c_parser_error does not understand
1813                         CPP_KEYWORD, keywords are treated like
1814                         identifiers.  */
1815                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
1816                      token->value);
1817     }
1818 }
1819
1820 /* Issue an error about name-lookup failing.  NAME is the
1821    IDENTIFIER_NODE DECL is the result of
1822    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
1823    the thing that we hoped to find.  */
1824
1825 static void
1826 cp_parser_name_lookup_error (cp_parser* parser,
1827                              tree name,
1828                              tree decl,
1829                              const char* desired)
1830 {
1831   /* If name lookup completely failed, tell the user that NAME was not
1832      declared.  */
1833   if (decl == error_mark_node)
1834     {
1835       if (parser->scope && parser->scope != global_namespace)
1836         error ("%<%D::%D%> has not been declared",
1837                parser->scope, name);
1838       else if (parser->scope == global_namespace)
1839         error ("%<::%D%> has not been declared", name);
1840       else if (parser->object_scope 
1841                && !CLASS_TYPE_P (parser->object_scope))
1842         error ("request for member %qD in non-class type %qT",
1843                name, parser->object_scope);
1844       else if (parser->object_scope)
1845         error ("%<%T::%D%> has not been declared", 
1846                parser->object_scope, name);
1847       else
1848         error ("%qD has not been declared", name);
1849     }
1850   else if (parser->scope && parser->scope != global_namespace)
1851     error ("%<%D::%D%> %s", parser->scope, name, desired);
1852   else if (parser->scope == global_namespace)
1853     error ("%<::%D%> %s", name, desired);
1854   else
1855     error ("%qD %s", name, desired);
1856 }
1857
1858 /* If we are parsing tentatively, remember that an error has occurred
1859    during this tentative parse.  Returns true if the error was
1860    simulated; false if a message should be issued by the caller.  */
1861
1862 static bool
1863 cp_parser_simulate_error (cp_parser* parser)
1864 {
1865   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
1866     {
1867       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
1868       return true;
1869     }
1870   return false;
1871 }
1872
1873 /* This function is called when a type is defined.  If type
1874    definitions are forbidden at this point, an error message is
1875    issued.  */
1876
1877 static void
1878 cp_parser_check_type_definition (cp_parser* parser)
1879 {
1880   /* If types are forbidden here, issue a message.  */
1881   if (parser->type_definition_forbidden_message)
1882     /* Use `%s' to print the string in case there are any escape
1883        characters in the message.  */
1884     error ("%s", parser->type_definition_forbidden_message);
1885 }
1886
1887 /* This function is called when the DECLARATOR is processed.  The TYPE
1888    was a type defined in the decl-specifiers.  If it is invalid to
1889    define a type in the decl-specifiers for DECLARATOR, an error is
1890    issued.  */
1891
1892 static void
1893 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
1894                                                tree type)
1895 {
1896   /* [dcl.fct] forbids type definitions in return types.
1897      Unfortunately, it's not easy to know whether or not we are
1898      processing a return type until after the fact.  */
1899   while (declarator
1900          && (declarator->kind == cdk_pointer
1901              || declarator->kind == cdk_reference
1902              || declarator->kind == cdk_ptrmem))
1903     declarator = declarator->declarator;
1904   if (declarator
1905       && declarator->kind == cdk_function)
1906     {
1907       error ("new types may not be defined in a return type");
1908       inform ("(perhaps a semicolon is missing after the definition of %qT)",
1909               type);
1910     }
1911 }
1912
1913 /* A type-specifier (TYPE) has been parsed which cannot be followed by
1914    "<" in any valid C++ program.  If the next token is indeed "<",
1915    issue a message warning the user about what appears to be an
1916    invalid attempt to form a template-id.  */
1917
1918 static void
1919 cp_parser_check_for_invalid_template_id (cp_parser* parser,
1920                                          tree type)
1921 {
1922   cp_token_position start = 0;
1923
1924   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
1925     {
1926       if (TYPE_P (type))
1927         error ("%qT is not a template", type);
1928       else if (TREE_CODE (type) == IDENTIFIER_NODE)
1929         error ("%qE is not a template", type);
1930       else
1931         error ("invalid template-id");
1932       /* Remember the location of the invalid "<".  */
1933       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
1934         start = cp_lexer_token_position (parser->lexer, true);
1935       /* Consume the "<".  */
1936       cp_lexer_consume_token (parser->lexer);
1937       /* Parse the template arguments.  */
1938       cp_parser_enclosed_template_argument_list (parser);
1939       /* Permanently remove the invalid template arguments so that
1940          this error message is not issued again.  */
1941       if (start)
1942         cp_lexer_purge_tokens_after (parser->lexer, start);
1943     }
1944 }
1945
1946 /* If parsing an integral constant-expression, issue an error message
1947    about the fact that THING appeared and return true.  Otherwise,
1948    return false.  In either case, set
1949    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */ 
1950
1951 static bool
1952 cp_parser_non_integral_constant_expression (cp_parser  *parser,
1953                                             const char *thing)
1954 {
1955   parser->non_integral_constant_expression_p = true;
1956   if (parser->integral_constant_expression_p)
1957     {
1958       if (!parser->allow_non_integral_constant_expression_p)
1959         {
1960           error ("%s cannot appear in a constant-expression", thing);
1961           return true;
1962         }
1963     }
1964   return false;
1965 }
1966
1967 /* Emit a diagnostic for an invalid type name.  SCOPE is the
1968    qualifying scope (or NULL, if none) for ID.  This function commits
1969    to the current active tentative parse, if any.  (Otherwise, the
1970    problematic construct might be encountered again later, resulting
1971    in duplicate error messages.)  */
1972
1973 static void
1974 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
1975 {
1976   tree decl, old_scope;
1977   /* Try to lookup the identifier.  */
1978   old_scope = parser->scope;
1979   parser->scope = scope;
1980   decl = cp_parser_lookup_name_simple (parser, id);
1981   parser->scope = old_scope;
1982   /* If the lookup found a template-name, it means that the user forgot
1983   to specify an argument list. Emit an useful error message.  */
1984   if (TREE_CODE (decl) == TEMPLATE_DECL)
1985     error ("invalid use of template-name %qE without an argument list",
1986       decl);
1987   else if (!parser->scope)
1988     {
1989       /* Issue an error message.  */
1990       error ("%qE does not name a type", id);
1991       /* If we're in a template class, it's possible that the user was
1992          referring to a type from a base class.  For example:
1993
1994            template <typename T> struct A { typedef T X; };
1995            template <typename T> struct B : public A<T> { X x; };
1996
1997          The user should have said "typename A<T>::X".  */
1998       if (processing_template_decl && current_class_type)
1999         {
2000           tree b;
2001
2002           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2003                b;
2004                b = TREE_CHAIN (b))
2005             {
2006               tree base_type = BINFO_TYPE (b);
2007               if (CLASS_TYPE_P (base_type)
2008                   && dependent_type_p (base_type))
2009                 {
2010                   tree field;
2011                   /* Go from a particular instantiation of the
2012                      template (which will have an empty TYPE_FIELDs),
2013                      to the main version.  */
2014                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2015                   for (field = TYPE_FIELDS (base_type);
2016                        field;
2017                        field = TREE_CHAIN (field))
2018                     if (TREE_CODE (field) == TYPE_DECL
2019                         && DECL_NAME (field) == id)
2020                       {
2021                         inform ("(perhaps %<typename %T::%E%> was intended)",
2022                                 BINFO_TYPE (b), id);
2023                         break;
2024                       }
2025                   if (field)
2026                     break;
2027                 }
2028             }
2029         }
2030     }
2031   /* Here we diagnose qualified-ids where the scope is actually correct,
2032      but the identifier does not resolve to a valid type name.  */
2033   else
2034     {
2035       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2036         error ("%qE in namespace %qE does not name a type",
2037                id, parser->scope);
2038       else if (TYPE_P (parser->scope))
2039         error ("%qE in class %qT does not name a type", id, parser->scope);
2040       else
2041         gcc_unreachable ();
2042     }
2043   cp_parser_commit_to_tentative_parse (parser);
2044 }
2045
2046 /* Check for a common situation where a type-name should be present,
2047    but is not, and issue a sensible error message.  Returns true if an
2048    invalid type-name was detected.
2049
2050    The situation handled by this function are variable declarations of the
2051    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2052    Usually, `ID' should name a type, but if we got here it means that it
2053    does not. We try to emit the best possible error message depending on
2054    how exactly the id-expression looks like.
2055 */
2056
2057 static bool
2058 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2059 {
2060   tree id;
2061
2062   cp_parser_parse_tentatively (parser);
2063   id = cp_parser_id_expression (parser,
2064                                 /*template_keyword_p=*/false,
2065                                 /*check_dependency_p=*/true,
2066                                 /*template_p=*/NULL,
2067                                 /*declarator_p=*/true);
2068   /* After the id-expression, there should be a plain identifier,
2069      otherwise this is not a simple variable declaration. Also, if
2070      the scope is dependent, we cannot do much.  */
2071   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2072       || (parser->scope && TYPE_P (parser->scope)
2073           && dependent_type_p (parser->scope)))
2074     {
2075       cp_parser_abort_tentative_parse (parser);
2076       return false;
2077     }
2078   if (!cp_parser_parse_definitely (parser)
2079       || TREE_CODE (id) != IDENTIFIER_NODE)
2080     return false;
2081
2082   /* Emit a diagnostic for the invalid type.  */
2083   cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2084   /* Skip to the end of the declaration; there's no point in
2085      trying to process it.  */
2086   cp_parser_skip_to_end_of_block_or_statement (parser);
2087   return true;
2088 }
2089
2090 /* Consume tokens up to, and including, the next non-nested closing `)'.
2091    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2092    are doing error recovery. Returns -1 if OR_COMMA is true and we
2093    found an unnested comma.  */
2094
2095 static int
2096 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2097                                        bool recovering,
2098                                        bool or_comma,
2099                                        bool consume_paren)
2100 {
2101   unsigned paren_depth = 0;
2102   unsigned brace_depth = 0;
2103   int result;
2104
2105   if (recovering && !or_comma
2106       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2107     return 0;
2108
2109   while (true)
2110     {
2111       cp_token *token;
2112
2113       /* If we've run out of tokens, then there is no closing `)'.  */
2114       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2115         {
2116           result = 0;
2117           break;
2118         }
2119
2120       token = cp_lexer_peek_token (parser->lexer);
2121
2122       /* This matches the processing in skip_to_end_of_statement.  */
2123       if (token->type == CPP_SEMICOLON && !brace_depth)
2124         {
2125           result = 0;
2126           break;
2127         }
2128       if (token->type == CPP_OPEN_BRACE)
2129         ++brace_depth;
2130       if (token->type == CPP_CLOSE_BRACE)
2131         {
2132           if (!brace_depth--)
2133             {
2134               result = 0;
2135               break;
2136             }
2137         }
2138       if (recovering && or_comma && token->type == CPP_COMMA
2139           && !brace_depth && !paren_depth)
2140         {
2141           result = -1;
2142           break;
2143         }
2144
2145       if (!brace_depth)
2146         {
2147           /* If it is an `(', we have entered another level of nesting.  */
2148           if (token->type == CPP_OPEN_PAREN)
2149             ++paren_depth;
2150           /* If it is a `)', then we might be done.  */
2151           else if (token->type == CPP_CLOSE_PAREN && !paren_depth--)
2152             {
2153               if (consume_paren)
2154                 cp_lexer_consume_token (parser->lexer);
2155               {
2156                 result = 1;
2157                 break;
2158               }
2159             }
2160         }
2161
2162       /* Consume the token.  */
2163       cp_lexer_consume_token (parser->lexer);
2164     }
2165
2166   return result;
2167 }
2168
2169 /* Consume tokens until we reach the end of the current statement.
2170    Normally, that will be just before consuming a `;'.  However, if a
2171    non-nested `}' comes first, then we stop before consuming that.  */
2172
2173 static void
2174 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2175 {
2176   unsigned nesting_depth = 0;
2177
2178   while (true)
2179     {
2180       cp_token *token;
2181
2182       /* Peek at the next token.  */
2183       token = cp_lexer_peek_token (parser->lexer);
2184       /* If we've run out of tokens, stop.  */
2185       if (token->type == CPP_EOF)
2186         break;
2187       /* If the next token is a `;', we have reached the end of the
2188          statement.  */
2189       if (token->type == CPP_SEMICOLON && !nesting_depth)
2190         break;
2191       /* If the next token is a non-nested `}', then we have reached
2192          the end of the current block.  */
2193       if (token->type == CPP_CLOSE_BRACE)
2194         {
2195           /* If this is a non-nested `}', stop before consuming it.
2196              That way, when confronted with something like:
2197
2198                { 3 + }
2199
2200              we stop before consuming the closing `}', even though we
2201              have not yet reached a `;'.  */
2202           if (nesting_depth == 0)
2203             break;
2204           /* If it is the closing `}' for a block that we have
2205              scanned, stop -- but only after consuming the token.
2206              That way given:
2207
2208                 void f g () { ... }
2209                 typedef int I;
2210
2211              we will stop after the body of the erroneously declared
2212              function, but before consuming the following `typedef'
2213              declaration.  */
2214           if (--nesting_depth == 0)
2215             {
2216               cp_lexer_consume_token (parser->lexer);
2217               break;
2218             }
2219         }
2220       /* If it the next token is a `{', then we are entering a new
2221          block.  Consume the entire block.  */
2222       else if (token->type == CPP_OPEN_BRACE)
2223         ++nesting_depth;
2224       /* Consume the token.  */
2225       cp_lexer_consume_token (parser->lexer);
2226     }
2227 }
2228
2229 /* This function is called at the end of a statement or declaration.
2230    If the next token is a semicolon, it is consumed; otherwise, error
2231    recovery is attempted.  */
2232
2233 static void
2234 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2235 {
2236   /* Look for the trailing `;'.  */
2237   if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2238     {
2239       /* If there is additional (erroneous) input, skip to the end of
2240          the statement.  */
2241       cp_parser_skip_to_end_of_statement (parser);
2242       /* If the next token is now a `;', consume it.  */
2243       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2244         cp_lexer_consume_token (parser->lexer);
2245     }
2246 }
2247
2248 /* Skip tokens until we have consumed an entire block, or until we
2249    have consumed a non-nested `;'.  */
2250
2251 static void
2252 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2253 {
2254   unsigned nesting_depth = 0;
2255
2256   while (true)
2257     {
2258       cp_token *token;
2259
2260       /* Peek at the next token.  */
2261       token = cp_lexer_peek_token (parser->lexer);
2262       /* If we've run out of tokens, stop.  */
2263       if (token->type == CPP_EOF)
2264         break;
2265       /* If the next token is a `;', we have reached the end of the
2266          statement.  */
2267       if (token->type == CPP_SEMICOLON && !nesting_depth)
2268         {
2269           /* Consume the `;'.  */
2270           cp_lexer_consume_token (parser->lexer);
2271           break;
2272         }
2273       /* Consume the token.  */
2274       token = cp_lexer_consume_token (parser->lexer);
2275       /* If the next token is a non-nested `}', then we have reached
2276          the end of the current block.  */
2277       if (token->type == CPP_CLOSE_BRACE
2278           && (nesting_depth == 0 || --nesting_depth == 0))
2279         break;
2280       /* If it the next token is a `{', then we are entering a new
2281          block.  Consume the entire block.  */
2282       if (token->type == CPP_OPEN_BRACE)
2283         ++nesting_depth;
2284     }
2285 }
2286
2287 /* Skip tokens until a non-nested closing curly brace is the next
2288    token.  */
2289
2290 static void
2291 cp_parser_skip_to_closing_brace (cp_parser *parser)
2292 {
2293   unsigned nesting_depth = 0;
2294
2295   while (true)
2296     {
2297       cp_token *token;
2298
2299       /* Peek at the next token.  */
2300       token = cp_lexer_peek_token (parser->lexer);
2301       /* If we've run out of tokens, stop.  */
2302       if (token->type == CPP_EOF)
2303         break;
2304       /* If the next token is a non-nested `}', then we have reached
2305          the end of the current block.  */
2306       if (token->type == CPP_CLOSE_BRACE && nesting_depth-- == 0)
2307         break;
2308       /* If it the next token is a `{', then we are entering a new
2309          block.  Consume the entire block.  */
2310       else if (token->type == CPP_OPEN_BRACE)
2311         ++nesting_depth;
2312       /* Consume the token.  */
2313       cp_lexer_consume_token (parser->lexer);
2314     }
2315 }
2316
2317 /* This is a simple wrapper around make_typename_type. When the id is
2318    an unresolved identifier node, we can provide a superior diagnostic
2319    using cp_parser_diagnose_invalid_type_name.  */
2320
2321 static tree
2322 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2323 {
2324   tree result;
2325   if (TREE_CODE (id) == IDENTIFIER_NODE)
2326     {
2327       result = make_typename_type (scope, id, typename_type,
2328                                    /*complain=*/0);
2329       if (result == error_mark_node)
2330         cp_parser_diagnose_invalid_type_name (parser, scope, id);
2331       return result;
2332     }
2333   return make_typename_type (scope, id, typename_type, tf_error);
2334 }
2335
2336
2337 /* Create a new C++ parser.  */
2338
2339 static cp_parser *
2340 cp_parser_new (void)
2341 {
2342   cp_parser *parser;
2343   cp_lexer *lexer;
2344   unsigned i;
2345
2346   /* cp_lexer_new_main is called before calling ggc_alloc because
2347      cp_lexer_new_main might load a PCH file.  */
2348   lexer = cp_lexer_new_main ();
2349
2350   /* Initialize the binops_by_token so that we can get the tree
2351      directly from the token.  */
2352   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2353     binops_by_token[binops[i].token_type] = binops[i];
2354
2355   parser = GGC_CNEW (cp_parser);
2356   parser->lexer = lexer;
2357   parser->context = cp_parser_context_new (NULL);
2358
2359   /* For now, we always accept GNU extensions.  */
2360   parser->allow_gnu_extensions_p = 1;
2361
2362   /* The `>' token is a greater-than operator, not the end of a
2363      template-id.  */
2364   parser->greater_than_is_operator_p = true;
2365
2366   parser->default_arg_ok_p = true;
2367
2368   /* We are not parsing a constant-expression.  */
2369   parser->integral_constant_expression_p = false;
2370   parser->allow_non_integral_constant_expression_p = false;
2371   parser->non_integral_constant_expression_p = false;
2372
2373   /* Local variable names are not forbidden.  */
2374   parser->local_variables_forbidden_p = false;
2375
2376   /* We are not processing an `extern "C"' declaration.  */
2377   parser->in_unbraced_linkage_specification_p = false;
2378
2379   /* We are not processing a declarator.  */
2380   parser->in_declarator_p = false;
2381
2382   /* We are not processing a template-argument-list.  */
2383   parser->in_template_argument_list_p = false;
2384
2385   /* We are not in an iteration statement.  */
2386   parser->in_iteration_statement_p = false;
2387
2388   /* We are not in a switch statement.  */
2389   parser->in_switch_statement_p = false;
2390
2391   /* We are not parsing a type-id inside an expression.  */
2392   parser->in_type_id_in_expr_p = false;
2393
2394   /* Declarations aren't implicitly extern "C".  */
2395   parser->implicit_extern_c = false;
2396
2397   /* String literals should be translated to the execution character set.  */
2398   parser->translate_strings_p = true;
2399
2400   /* The unparsed function queue is empty.  */
2401   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2402
2403   /* There are no classes being defined.  */
2404   parser->num_classes_being_defined = 0;
2405
2406   /* No template parameters apply.  */
2407   parser->num_template_parameter_lists = 0;
2408
2409   return parser;
2410 }
2411
2412 /* Create a cp_lexer structure which will emit the tokens in CACHE
2413    and push it onto the parser's lexer stack.  This is used for delayed
2414    parsing of in-class method bodies and default arguments, and should
2415    not be confused with tentative parsing.  */
2416 static void
2417 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2418 {
2419   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2420   lexer->next = parser->lexer;
2421   parser->lexer = lexer;
2422
2423   /* Move the current source position to that of the first token in the
2424      new lexer.  */
2425   cp_lexer_set_source_position_from_token (lexer->next_token);
2426 }
2427
2428 /* Pop the top lexer off the parser stack.  This is never used for the
2429    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2430 static void
2431 cp_parser_pop_lexer (cp_parser *parser)
2432 {
2433   cp_lexer *lexer = parser->lexer;
2434   parser->lexer = lexer->next;
2435   cp_lexer_destroy (lexer);
2436
2437   /* Put the current source position back where it was before this
2438      lexer was pushed.  */
2439   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2440 }
2441
2442 /* Lexical conventions [gram.lex]  */
2443
2444 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2445    identifier.  */
2446
2447 static tree
2448 cp_parser_identifier (cp_parser* parser)
2449 {
2450   cp_token *token;
2451
2452   /* Look for the identifier.  */
2453   token = cp_parser_require (parser, CPP_NAME, "identifier");
2454   /* Return the value.  */
2455   return token ? token->value : error_mark_node;
2456 }
2457
2458 /* Parse a sequence of adjacent string constants.  Returns a
2459    TREE_STRING representing the combined, nul-terminated string
2460    constant.  If TRANSLATE is true, translate the string to the
2461    execution character set.  If WIDE_OK is true, a wide string is
2462    invalid here.
2463
2464    C++98 [lex.string] says that if a narrow string literal token is
2465    adjacent to a wide string literal token, the behavior is undefined.
2466    However, C99 6.4.5p4 says that this results in a wide string literal.
2467    We follow C99 here, for consistency with the C front end.
2468
2469    This code is largely lifted from lex_string() in c-lex.c.
2470
2471    FUTURE: ObjC++ will need to handle @-strings here.  */
2472 static tree
2473 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2474 {
2475   tree value;
2476   bool wide = false;
2477   size_t count;
2478   struct obstack str_ob;
2479   cpp_string str, istr, *strs;
2480   cp_token *tok;
2481
2482   tok = cp_lexer_peek_token (parser->lexer);
2483   if (!cp_parser_is_string_literal (tok))
2484     {
2485       cp_parser_error (parser, "expected string-literal");
2486       return error_mark_node;
2487     }
2488
2489   /* Try to avoid the overhead of creating and destroying an obstack
2490      for the common case of just one string.  */
2491   if (!cp_parser_is_string_literal
2492       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2493     {
2494       cp_lexer_consume_token (parser->lexer);
2495
2496       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->value);
2497       str.len = TREE_STRING_LENGTH (tok->value);
2498       count = 1;
2499       if (tok->type == CPP_WSTRING)
2500         wide = true;
2501
2502       strs = &str;
2503     }
2504   else
2505     {
2506       gcc_obstack_init (&str_ob);
2507       count = 0;
2508
2509       do
2510         {
2511           cp_lexer_consume_token (parser->lexer);
2512           count++;
2513           str.text = (unsigned char *)TREE_STRING_POINTER (tok->value);
2514           str.len = TREE_STRING_LENGTH (tok->value);
2515           if (tok->type == CPP_WSTRING)
2516             wide = true;
2517
2518           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2519
2520           tok = cp_lexer_peek_token (parser->lexer);
2521         }
2522       while (cp_parser_is_string_literal (tok));
2523
2524       strs = (cpp_string *) obstack_finish (&str_ob);
2525     }
2526
2527   if (wide && !wide_ok)
2528     {
2529       cp_parser_error (parser, "a wide string is invalid in this context");
2530       wide = false;
2531     }
2532
2533   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2534       (parse_in, strs, count, &istr, wide))
2535     {
2536       value = build_string (istr.len, (char *)istr.text);
2537       free ((void *)istr.text);
2538
2539       TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
2540       value = fix_string_type (value);
2541     }
2542   else
2543     /* cpp_interpret_string has issued an error.  */
2544     value = error_mark_node;
2545
2546   if (count > 1)
2547     obstack_free (&str_ob, 0);
2548
2549   return value;
2550 }
2551
2552
2553 /* Basic concepts [gram.basic]  */
2554
2555 /* Parse a translation-unit.
2556
2557    translation-unit:
2558      declaration-seq [opt]
2559
2560    Returns TRUE if all went well.  */
2561
2562 static bool
2563 cp_parser_translation_unit (cp_parser* parser)
2564 {
2565   /* The address of the first non-permanent object on the declarator
2566      obstack.  */
2567   static void *declarator_obstack_base;
2568
2569   bool success;
2570
2571   /* Create the declarator obstack, if necessary.  */
2572   if (!cp_error_declarator)
2573     {
2574       gcc_obstack_init (&declarator_obstack);
2575       /* Create the error declarator.  */
2576       cp_error_declarator = make_declarator (cdk_error);
2577       /* Create the empty parameter list.  */
2578       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
2579       /* Remember where the base of the declarator obstack lies.  */
2580       declarator_obstack_base = obstack_next_free (&declarator_obstack);
2581     }
2582
2583   while (true)
2584     {
2585       cp_parser_declaration_seq_opt (parser);
2586
2587       /* If there are no tokens left then all went well.  */
2588       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2589         {
2590           /* Get rid of the token array; we don't need it any more.  */
2591           cp_lexer_destroy (parser->lexer);
2592           parser->lexer = NULL;
2593
2594           /* This file might have been a context that's implicitly extern
2595              "C".  If so, pop the lang context.  (Only relevant for PCH.) */
2596           if (parser->implicit_extern_c)
2597             {
2598               pop_lang_context ();
2599               parser->implicit_extern_c = false;
2600             }
2601
2602           /* Finish up.  */
2603           finish_translation_unit ();
2604
2605           success = true;
2606           break;
2607         }
2608       else
2609         {
2610           cp_parser_error (parser, "expected declaration");
2611           success = false;
2612           break;
2613         }
2614     }
2615
2616   /* Make sure the declarator obstack was fully cleaned up.  */
2617   gcc_assert (obstack_next_free (&declarator_obstack)
2618               == declarator_obstack_base);
2619
2620   /* All went well.  */
2621   return success;
2622 }
2623
2624 /* Expressions [gram.expr] */
2625
2626 /* Parse a primary-expression.
2627
2628    primary-expression:
2629      literal
2630      this
2631      ( expression )
2632      id-expression
2633
2634    GNU Extensions:
2635
2636    primary-expression:
2637      ( compound-statement )
2638      __builtin_va_arg ( assignment-expression , type-id )
2639
2640    literal:
2641      __null
2642
2643    CAST_P is true if this primary expression is the target of a cast.
2644
2645    Returns a representation of the expression.
2646
2647    *IDK indicates what kind of id-expression (if any) was present.
2648
2649    *QUALIFYING_CLASS is set to a non-NULL value if the id-expression can be
2650    used as the operand of a pointer-to-member.  In that case,
2651    *QUALIFYING_CLASS gives the class that is used as the qualifying
2652    class in the pointer-to-member.  */
2653
2654 static tree
2655 cp_parser_primary_expression (cp_parser *parser,
2656                               bool cast_p,
2657                               cp_id_kind *idk,
2658                               tree *qualifying_class)
2659 {
2660   cp_token *token;
2661
2662   /* Assume the primary expression is not an id-expression.  */
2663   *idk = CP_ID_KIND_NONE;
2664   /* And that it cannot be used as pointer-to-member.  */
2665   *qualifying_class = NULL_TREE;
2666
2667   /* Peek at the next token.  */
2668   token = cp_lexer_peek_token (parser->lexer);
2669   switch (token->type)
2670     {
2671       /* literal:
2672            integer-literal
2673            character-literal
2674            floating-literal
2675            string-literal
2676            boolean-literal  */
2677     case CPP_CHAR:
2678     case CPP_WCHAR:
2679     case CPP_NUMBER:
2680       token = cp_lexer_consume_token (parser->lexer);
2681       /* Floating-point literals are only allowed in an integral
2682          constant expression if they are cast to an integral or
2683          enumeration type.  */
2684       if (TREE_CODE (token->value) == REAL_CST
2685           && parser->integral_constant_expression_p
2686           && pedantic)
2687         {
2688           /* CAST_P will be set even in invalid code like "int(2.7 +
2689              ...)".   Therefore, we have to check that the next token
2690              is sure to end the cast.  */
2691           if (cast_p)
2692             {
2693               cp_token *next_token;
2694
2695               next_token = cp_lexer_peek_token (parser->lexer);
2696               if (/* The comma at the end of an
2697                      enumerator-definition.  */
2698                   next_token->type != CPP_COMMA
2699                   /* The curly brace at the end of an enum-specifier.  */
2700                   && next_token->type != CPP_CLOSE_BRACE
2701                   /* The end of a statement.  */
2702                   && next_token->type != CPP_SEMICOLON
2703                   /* The end of the cast-expression.  */
2704                   && next_token->type != CPP_CLOSE_PAREN
2705                   /* The end of an array bound.  */
2706                   && next_token->type != CPP_CLOSE_SQUARE)
2707                 cast_p = false;
2708             }
2709
2710           /* If we are within a cast, then the constraint that the
2711              cast is to an integral or enumeration type will be
2712              checked at that point.  If we are not within a cast, then
2713              this code is invalid.  */
2714           if (!cast_p)
2715             cp_parser_non_integral_constant_expression 
2716               (parser, "floating-point literal");
2717         }
2718       return token->value;
2719
2720     case CPP_STRING:
2721     case CPP_WSTRING:
2722       /* ??? Should wide strings be allowed when parser->translate_strings_p
2723          is false (i.e. in attributes)?  If not, we can kill the third
2724          argument to cp_parser_string_literal.  */
2725       return cp_parser_string_literal (parser,
2726                                        parser->translate_strings_p,
2727                                        true);
2728
2729     case CPP_OPEN_PAREN:
2730       {
2731         tree expr;
2732         bool saved_greater_than_is_operator_p;
2733
2734         /* Consume the `('.  */
2735         cp_lexer_consume_token (parser->lexer);
2736         /* Within a parenthesized expression, a `>' token is always
2737            the greater-than operator.  */
2738         saved_greater_than_is_operator_p
2739           = parser->greater_than_is_operator_p;
2740         parser->greater_than_is_operator_p = true;
2741         /* If we see `( { ' then we are looking at the beginning of
2742            a GNU statement-expression.  */
2743         if (cp_parser_allow_gnu_extensions_p (parser)
2744             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
2745           {
2746             /* Statement-expressions are not allowed by the standard.  */
2747             if (pedantic)
2748               pedwarn ("ISO C++ forbids braced-groups within expressions");
2749
2750             /* And they're not allowed outside of a function-body; you
2751                cannot, for example, write:
2752
2753                  int i = ({ int j = 3; j + 1; });
2754
2755                at class or namespace scope.  */
2756             if (!at_function_scope_p ())
2757               error ("statement-expressions are allowed only inside functions");
2758             /* Start the statement-expression.  */
2759             expr = begin_stmt_expr ();
2760             /* Parse the compound-statement.  */
2761             cp_parser_compound_statement (parser, expr, false);
2762             /* Finish up.  */
2763             expr = finish_stmt_expr (expr, false);
2764           }
2765         else
2766           {
2767             /* Parse the parenthesized expression.  */
2768             expr = cp_parser_expression (parser, cast_p);
2769             /* Let the front end know that this expression was
2770                enclosed in parentheses. This matters in case, for
2771                example, the expression is of the form `A::B', since
2772                `&A::B' might be a pointer-to-member, but `&(A::B)' is
2773                not.  */
2774             finish_parenthesized_expr (expr);
2775           }
2776         /* The `>' token might be the end of a template-id or
2777            template-parameter-list now.  */
2778         parser->greater_than_is_operator_p
2779           = saved_greater_than_is_operator_p;
2780         /* Consume the `)'.  */
2781         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
2782           cp_parser_skip_to_end_of_statement (parser);
2783
2784         return expr;
2785       }
2786
2787     case CPP_KEYWORD:
2788       switch (token->keyword)
2789         {
2790           /* These two are the boolean literals.  */
2791         case RID_TRUE:
2792           cp_lexer_consume_token (parser->lexer);
2793           return boolean_true_node;
2794         case RID_FALSE:
2795           cp_lexer_consume_token (parser->lexer);
2796           return boolean_false_node;
2797
2798           /* The `__null' literal.  */
2799         case RID_NULL:
2800           cp_lexer_consume_token (parser->lexer);
2801           return null_node;
2802
2803           /* Recognize the `this' keyword.  */
2804         case RID_THIS:
2805           cp_lexer_consume_token (parser->lexer);
2806           if (parser->local_variables_forbidden_p)
2807             {
2808               error ("%<this%> may not be used in this context");
2809               return error_mark_node;
2810             }
2811           /* Pointers cannot appear in constant-expressions.  */
2812           if (cp_parser_non_integral_constant_expression (parser,
2813                                                           "`this'"))
2814             return error_mark_node;
2815           return finish_this_expr ();
2816
2817           /* The `operator' keyword can be the beginning of an
2818              id-expression.  */
2819         case RID_OPERATOR:
2820           goto id_expression;
2821
2822         case RID_FUNCTION_NAME:
2823         case RID_PRETTY_FUNCTION_NAME:
2824         case RID_C99_FUNCTION_NAME:
2825           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
2826              __func__ are the names of variables -- but they are
2827              treated specially.  Therefore, they are handled here,
2828              rather than relying on the generic id-expression logic
2829              below.  Grammatically, these names are id-expressions.
2830
2831              Consume the token.  */
2832           token = cp_lexer_consume_token (parser->lexer);
2833           /* Look up the name.  */
2834           return finish_fname (token->value);
2835
2836         case RID_VA_ARG:
2837           {
2838             tree expression;
2839             tree type;
2840
2841             /* The `__builtin_va_arg' construct is used to handle
2842                `va_arg'.  Consume the `__builtin_va_arg' token.  */
2843             cp_lexer_consume_token (parser->lexer);
2844             /* Look for the opening `('.  */
2845             cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
2846             /* Now, parse the assignment-expression.  */
2847             expression = cp_parser_assignment_expression (parser,
2848                                                           /*cast_p=*/false);
2849             /* Look for the `,'.  */
2850             cp_parser_require (parser, CPP_COMMA, "`,'");
2851             /* Parse the type-id.  */
2852             type = cp_parser_type_id (parser);
2853             /* Look for the closing `)'.  */
2854             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
2855             /* Using `va_arg' in a constant-expression is not
2856                allowed.  */
2857             if (cp_parser_non_integral_constant_expression (parser,
2858                                                             "`va_arg'"))
2859               return error_mark_node;
2860             return build_x_va_arg (expression, type);
2861           }
2862
2863         case RID_OFFSETOF:
2864           return cp_parser_builtin_offsetof (parser);
2865
2866         default:
2867           cp_parser_error (parser, "expected primary-expression");
2868           return error_mark_node;
2869         }
2870
2871       /* An id-expression can start with either an identifier, a
2872          `::' as the beginning of a qualified-id, or the "operator"
2873          keyword.  */
2874     case CPP_NAME:
2875     case CPP_SCOPE:
2876     case CPP_TEMPLATE_ID:
2877     case CPP_NESTED_NAME_SPECIFIER:
2878       {
2879         tree id_expression;
2880         tree decl;
2881         const char *error_msg;
2882
2883       id_expression:
2884         /* Parse the id-expression.  */
2885         id_expression
2886           = cp_parser_id_expression (parser,
2887                                      /*template_keyword_p=*/false,
2888                                      /*check_dependency_p=*/true,
2889                                      /*template_p=*/NULL,
2890                                      /*declarator_p=*/false);
2891         if (id_expression == error_mark_node)
2892           return error_mark_node;
2893         /* If we have a template-id, then no further lookup is
2894            required.  If the template-id was for a template-class, we
2895            will sometimes have a TYPE_DECL at this point.  */
2896         else if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
2897             || TREE_CODE (id_expression) == TYPE_DECL)
2898           decl = id_expression;
2899         /* Look up the name.  */
2900         else
2901           {
2902             bool ambiguous_p;
2903
2904             decl = cp_parser_lookup_name (parser, id_expression,
2905                                           none_type,
2906                                           /*is_template=*/false,
2907                                           /*is_namespace=*/false,
2908                                           /*check_dependency=*/true,
2909                                           &ambiguous_p);
2910             /* If the lookup was ambiguous, an error will already have
2911                been issued.  */
2912             if (ambiguous_p)
2913               return error_mark_node;
2914             /* If name lookup gives us a SCOPE_REF, then the
2915                qualifying scope was dependent.  Just propagate the
2916                name.  */
2917             if (TREE_CODE (decl) == SCOPE_REF)
2918               {
2919                 if (TYPE_P (TREE_OPERAND (decl, 0)))
2920                   *qualifying_class = TREE_OPERAND (decl, 0);
2921                 return decl;
2922               }
2923             /* Check to see if DECL is a local variable in a context
2924                where that is forbidden.  */
2925             if (parser->local_variables_forbidden_p
2926                 && local_variable_p (decl))
2927               {
2928                 /* It might be that we only found DECL because we are
2929                    trying to be generous with pre-ISO scoping rules.
2930                    For example, consider:
2931
2932                      int i;
2933                      void g() {
2934                        for (int i = 0; i < 10; ++i) {}
2935                        extern void f(int j = i);
2936                      }
2937
2938                    Here, name look up will originally find the out
2939                    of scope `i'.  We need to issue a warning message,
2940                    but then use the global `i'.  */
2941                 decl = check_for_out_of_scope_variable (decl);
2942                 if (local_variable_p (decl))
2943                   {
2944                     error ("local variable %qD may not appear in this context",
2945                            decl);
2946                     return error_mark_node;
2947                   }
2948               }
2949           }
2950
2951         decl = finish_id_expression (id_expression, decl, parser->scope,
2952                                      idk, qualifying_class,
2953                                      parser->integral_constant_expression_p,
2954                                      parser->allow_non_integral_constant_expression_p,
2955                                      &parser->non_integral_constant_expression_p,
2956                                      &error_msg);
2957         if (error_msg)
2958           cp_parser_error (parser, error_msg);
2959         return decl;
2960       }
2961
2962       /* Anything else is an error.  */
2963     default:
2964       cp_parser_error (parser, "expected primary-expression");
2965       return error_mark_node;
2966     }
2967 }
2968
2969 /* Parse an id-expression.
2970
2971    id-expression:
2972      unqualified-id
2973      qualified-id
2974
2975    qualified-id:
2976      :: [opt] nested-name-specifier template [opt] unqualified-id
2977      :: identifier
2978      :: operator-function-id
2979      :: template-id
2980
2981    Return a representation of the unqualified portion of the
2982    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
2983    a `::' or nested-name-specifier.
2984
2985    Often, if the id-expression was a qualified-id, the caller will
2986    want to make a SCOPE_REF to represent the qualified-id.  This
2987    function does not do this in order to avoid wastefully creating
2988    SCOPE_REFs when they are not required.
2989
2990    If TEMPLATE_KEYWORD_P is true, then we have just seen the
2991    `template' keyword.
2992
2993    If CHECK_DEPENDENCY_P is false, then names are looked up inside
2994    uninstantiated templates.
2995
2996    If *TEMPLATE_P is non-NULL, it is set to true iff the
2997    `template' keyword is used to explicitly indicate that the entity
2998    named is a template.
2999
3000    If DECLARATOR_P is true, the id-expression is appearing as part of
3001    a declarator, rather than as part of an expression.  */
3002
3003 static tree
3004 cp_parser_id_expression (cp_parser *parser,
3005                          bool template_keyword_p,
3006                          bool check_dependency_p,
3007                          bool *template_p,
3008                          bool declarator_p)
3009 {
3010   bool global_scope_p;
3011   bool nested_name_specifier_p;
3012
3013   /* Assume the `template' keyword was not used.  */
3014   if (template_p)
3015     *template_p = false;
3016
3017   /* Look for the optional `::' operator.  */
3018   global_scope_p
3019     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3020        != NULL_TREE);
3021   /* Look for the optional nested-name-specifier.  */
3022   nested_name_specifier_p
3023     = (cp_parser_nested_name_specifier_opt (parser,
3024                                             /*typename_keyword_p=*/false,
3025                                             check_dependency_p,
3026                                             /*type_p=*/false,
3027                                             declarator_p)
3028        != NULL_TREE);
3029   /* If there is a nested-name-specifier, then we are looking at
3030      the first qualified-id production.  */
3031   if (nested_name_specifier_p)
3032     {
3033       tree saved_scope;
3034       tree saved_object_scope;
3035       tree saved_qualifying_scope;
3036       tree unqualified_id;
3037       bool is_template;
3038
3039       /* See if the next token is the `template' keyword.  */
3040       if (!template_p)
3041         template_p = &is_template;
3042       *template_p = cp_parser_optional_template_keyword (parser);
3043       /* Name lookup we do during the processing of the
3044          unqualified-id might obliterate SCOPE.  */
3045       saved_scope = parser->scope;
3046       saved_object_scope = parser->object_scope;
3047       saved_qualifying_scope = parser->qualifying_scope;
3048       /* Process the final unqualified-id.  */
3049       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3050                                                  check_dependency_p,
3051                                                  declarator_p);
3052       /* Restore the SAVED_SCOPE for our caller.  */
3053       parser->scope = saved_scope;
3054       parser->object_scope = saved_object_scope;
3055       parser->qualifying_scope = saved_qualifying_scope;
3056
3057       return unqualified_id;
3058     }
3059   /* Otherwise, if we are in global scope, then we are looking at one
3060      of the other qualified-id productions.  */
3061   else if (global_scope_p)
3062     {
3063       cp_token *token;
3064       tree id;
3065
3066       /* Peek at the next token.  */
3067       token = cp_lexer_peek_token (parser->lexer);
3068
3069       /* If it's an identifier, and the next token is not a "<", then
3070          we can avoid the template-id case.  This is an optimization
3071          for this common case.  */
3072       if (token->type == CPP_NAME
3073           && !cp_parser_nth_token_starts_template_argument_list_p
3074                (parser, 2))
3075         return cp_parser_identifier (parser);
3076
3077       cp_parser_parse_tentatively (parser);
3078       /* Try a template-id.  */
3079       id = cp_parser_template_id (parser,
3080                                   /*template_keyword_p=*/false,
3081                                   /*check_dependency_p=*/true,
3082                                   declarator_p);
3083       /* If that worked, we're done.  */
3084       if (cp_parser_parse_definitely (parser))
3085         return id;
3086
3087       /* Peek at the next token.  (Changes in the token buffer may
3088          have invalidated the pointer obtained above.)  */
3089       token = cp_lexer_peek_token (parser->lexer);
3090
3091       switch (token->type)
3092         {
3093         case CPP_NAME:
3094           return cp_parser_identifier (parser);
3095
3096         case CPP_KEYWORD:
3097           if (token->keyword == RID_OPERATOR)
3098             return cp_parser_operator_function_id (parser);
3099           /* Fall through.  */
3100
3101         default:
3102           cp_parser_error (parser, "expected id-expression");
3103           return error_mark_node;
3104         }
3105     }
3106   else
3107     return cp_parser_unqualified_id (parser, template_keyword_p,
3108                                      /*check_dependency_p=*/true,
3109                                      declarator_p);
3110 }
3111
3112 /* Parse an unqualified-id.
3113
3114    unqualified-id:
3115      identifier
3116      operator-function-id
3117      conversion-function-id
3118      ~ class-name
3119      template-id
3120
3121    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3122    keyword, in a construct like `A::template ...'.
3123
3124    Returns a representation of unqualified-id.  For the `identifier'
3125    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3126    production a BIT_NOT_EXPR is returned; the operand of the
3127    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3128    other productions, see the documentation accompanying the
3129    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3130    names are looked up in uninstantiated templates.  If DECLARATOR_P
3131    is true, the unqualified-id is appearing as part of a declarator,
3132    rather than as part of an expression.  */
3133
3134 static tree
3135 cp_parser_unqualified_id (cp_parser* parser,
3136                           bool template_keyword_p,
3137                           bool check_dependency_p,
3138                           bool declarator_p)
3139 {
3140   cp_token *token;
3141
3142   /* Peek at the next token.  */
3143   token = cp_lexer_peek_token (parser->lexer);
3144
3145   switch (token->type)
3146     {
3147     case CPP_NAME:
3148       {
3149         tree id;
3150
3151         /* We don't know yet whether or not this will be a
3152            template-id.  */
3153         cp_parser_parse_tentatively (parser);
3154         /* Try a template-id.  */
3155         id = cp_parser_template_id (parser, template_keyword_p,
3156                                     check_dependency_p,
3157                                     declarator_p);
3158         /* If it worked, we're done.  */
3159         if (cp_parser_parse_definitely (parser))
3160           return id;
3161         /* Otherwise, it's an ordinary identifier.  */
3162         return cp_parser_identifier (parser);
3163       }
3164
3165     case CPP_TEMPLATE_ID:
3166       return cp_parser_template_id (parser, template_keyword_p,
3167                                     check_dependency_p,
3168                                     declarator_p);
3169
3170     case CPP_COMPL:
3171       {
3172         tree type_decl;
3173         tree qualifying_scope;
3174         tree object_scope;
3175         tree scope;
3176         bool done;
3177
3178         /* Consume the `~' token.  */
3179         cp_lexer_consume_token (parser->lexer);
3180         /* Parse the class-name.  The standard, as written, seems to
3181            say that:
3182
3183              template <typename T> struct S { ~S (); };
3184              template <typename T> S<T>::~S() {}
3185
3186            is invalid, since `~' must be followed by a class-name, but
3187            `S<T>' is dependent, and so not known to be a class.
3188            That's not right; we need to look in uninstantiated
3189            templates.  A further complication arises from:
3190
3191              template <typename T> void f(T t) {
3192                t.T::~T();
3193              }
3194
3195            Here, it is not possible to look up `T' in the scope of `T'
3196            itself.  We must look in both the current scope, and the
3197            scope of the containing complete expression.
3198
3199            Yet another issue is:
3200
3201              struct S {
3202                int S;
3203                ~S();
3204              };
3205
3206              S::~S() {}
3207
3208            The standard does not seem to say that the `S' in `~S'
3209            should refer to the type `S' and not the data member
3210            `S::S'.  */
3211
3212         /* DR 244 says that we look up the name after the "~" in the
3213            same scope as we looked up the qualifying name.  That idea
3214            isn't fully worked out; it's more complicated than that.  */
3215         scope = parser->scope;
3216         object_scope = parser->object_scope;
3217         qualifying_scope = parser->qualifying_scope;
3218
3219         /* If the name is of the form "X::~X" it's OK.  */
3220         if (scope && TYPE_P (scope)
3221             && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3222             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3223                 == CPP_OPEN_PAREN)
3224             && (cp_lexer_peek_token (parser->lexer)->value
3225                 == TYPE_IDENTIFIER (scope)))
3226           {
3227             cp_lexer_consume_token (parser->lexer);
3228             return build_nt (BIT_NOT_EXPR, scope);
3229           }
3230
3231         /* If there was an explicit qualification (S::~T), first look
3232            in the scope given by the qualification (i.e., S).  */
3233         done = false;
3234         type_decl = NULL_TREE;
3235         if (scope)
3236           {
3237             cp_parser_parse_tentatively (parser);
3238             type_decl = cp_parser_class_name (parser,
3239                                               /*typename_keyword_p=*/false,
3240                                               /*template_keyword_p=*/false,
3241                                               none_type,
3242                                               /*check_dependency=*/false,
3243                                               /*class_head_p=*/false,
3244                                               declarator_p);
3245             if (cp_parser_parse_definitely (parser))
3246               done = true;
3247           }
3248         /* In "N::S::~S", look in "N" as well.  */
3249         if (!done && scope && qualifying_scope)
3250           {
3251             cp_parser_parse_tentatively (parser);
3252             parser->scope = qualifying_scope;
3253             parser->object_scope = NULL_TREE;
3254             parser->qualifying_scope = NULL_TREE;
3255             type_decl
3256               = cp_parser_class_name (parser,
3257                                       /*typename_keyword_p=*/false,
3258                                       /*template_keyword_p=*/false,
3259                                       none_type,
3260                                       /*check_dependency=*/false,
3261                                       /*class_head_p=*/false,
3262                                       declarator_p);
3263             if (cp_parser_parse_definitely (parser))
3264               done = true;
3265           }
3266         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3267         else if (!done && object_scope)
3268           {
3269             cp_parser_parse_tentatively (parser);
3270             parser->scope = object_scope;
3271             parser->object_scope = NULL_TREE;
3272             parser->qualifying_scope = NULL_TREE;
3273             type_decl
3274               = cp_parser_class_name (parser,
3275                                       /*typename_keyword_p=*/false,
3276                                       /*template_keyword_p=*/false,
3277                                       none_type,
3278                                       /*check_dependency=*/false,
3279                                       /*class_head_p=*/false,
3280                                       declarator_p);
3281             if (cp_parser_parse_definitely (parser))
3282               done = true;
3283           }
3284         /* Look in the surrounding context.  */
3285         if (!done)
3286           {
3287             parser->scope = NULL_TREE;
3288             parser->object_scope = NULL_TREE;
3289             parser->qualifying_scope = NULL_TREE;
3290             type_decl
3291               = cp_parser_class_name (parser,
3292                                       /*typename_keyword_p=*/false,
3293                                       /*template_keyword_p=*/false,
3294                                       none_type,
3295                                       /*check_dependency=*/false,
3296                                       /*class_head_p=*/false,
3297                                       declarator_p);
3298           }
3299         /* If an error occurred, assume that the name of the
3300            destructor is the same as the name of the qualifying
3301            class.  That allows us to keep parsing after running
3302            into ill-formed destructor names.  */
3303         if (type_decl == error_mark_node && scope && TYPE_P (scope))
3304           return build_nt (BIT_NOT_EXPR, scope);
3305         else if (type_decl == error_mark_node)
3306           return error_mark_node;
3307
3308         /* [class.dtor]
3309
3310            A typedef-name that names a class shall not be used as the
3311            identifier in the declarator for a destructor declaration.  */
3312         if (declarator_p
3313             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3314             && !DECL_SELF_REFERENCE_P (type_decl)
3315             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3316           error ("typedef-name %qD used as destructor declarator",
3317                  type_decl);
3318
3319         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3320       }
3321
3322     case CPP_KEYWORD:
3323       if (token->keyword == RID_OPERATOR)
3324         {
3325           tree id;
3326
3327           /* This could be a template-id, so we try that first.  */
3328           cp_parser_parse_tentatively (parser);
3329           /* Try a template-id.  */
3330           id = cp_parser_template_id (parser, template_keyword_p,
3331                                       /*check_dependency_p=*/true,
3332                                       declarator_p);
3333           /* If that worked, we're done.  */
3334           if (cp_parser_parse_definitely (parser))
3335             return id;
3336           /* We still don't know whether we're looking at an
3337              operator-function-id or a conversion-function-id.  */
3338           cp_parser_parse_tentatively (parser);
3339           /* Try an operator-function-id.  */
3340           id = cp_parser_operator_function_id (parser);
3341           /* If that didn't work, try a conversion-function-id.  */
3342           if (!cp_parser_parse_definitely (parser))
3343             id = cp_parser_conversion_function_id (parser);
3344
3345           return id;
3346         }
3347       /* Fall through.  */
3348
3349     default:
3350       cp_parser_error (parser, "expected unqualified-id");
3351       return error_mark_node;
3352     }
3353 }
3354
3355 /* Parse an (optional) nested-name-specifier.
3356
3357    nested-name-specifier:
3358      class-or-namespace-name :: nested-name-specifier [opt]
3359      class-or-namespace-name :: template nested-name-specifier [opt]
3360
3361    PARSER->SCOPE should be set appropriately before this function is
3362    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3363    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3364    in name lookups.
3365
3366    Sets PARSER->SCOPE to the class (TYPE) or namespace
3367    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3368    it unchanged if there is no nested-name-specifier.  Returns the new
3369    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3370
3371    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3372    part of a declaration and/or decl-specifier.  */
3373
3374 static tree
3375 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3376                                      bool typename_keyword_p,
3377                                      bool check_dependency_p,
3378                                      bool type_p,
3379                                      bool is_declaration)
3380 {
3381   bool success = false;
3382   tree access_check = NULL_TREE;
3383   cp_token_position start = 0;
3384   cp_token *token;
3385
3386   /* If the next token corresponds to a nested name specifier, there
3387      is no need to reparse it.  However, if CHECK_DEPENDENCY_P is
3388      false, it may have been true before, in which case something
3389      like `A<X>::B<Y>::C' may have resulted in a nested-name-specifier
3390      of `A<X>::', where it should now be `A<X>::B<Y>::'.  So, when
3391      CHECK_DEPENDENCY_P is false, we have to fall through into the
3392      main loop.  */
3393   if (check_dependency_p
3394       && cp_lexer_next_token_is (parser->lexer, CPP_NESTED_NAME_SPECIFIER))
3395     {
3396       cp_parser_pre_parsed_nested_name_specifier (parser);
3397       return parser->scope;
3398     }
3399
3400   /* Remember where the nested-name-specifier starts.  */
3401   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3402     start = cp_lexer_token_position (parser->lexer, false);
3403
3404   push_deferring_access_checks (dk_deferred);
3405
3406   while (true)
3407     {
3408       tree new_scope;
3409       tree old_scope;
3410       tree saved_qualifying_scope;
3411       bool template_keyword_p;
3412
3413       /* Spot cases that cannot be the beginning of a
3414          nested-name-specifier.  */
3415       token = cp_lexer_peek_token (parser->lexer);
3416
3417       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3418          the already parsed nested-name-specifier.  */
3419       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3420         {
3421           /* Grab the nested-name-specifier and continue the loop.  */
3422           cp_parser_pre_parsed_nested_name_specifier (parser);
3423           success = true;
3424           continue;
3425         }
3426
3427       /* Spot cases that cannot be the beginning of a
3428          nested-name-specifier.  On the second and subsequent times
3429          through the loop, we look for the `template' keyword.  */
3430       if (success && token->keyword == RID_TEMPLATE)
3431         ;
3432       /* A template-id can start a nested-name-specifier.  */
3433       else if (token->type == CPP_TEMPLATE_ID)
3434         ;
3435       else
3436         {
3437           /* If the next token is not an identifier, then it is
3438              definitely not a class-or-namespace-name.  */
3439           if (token->type != CPP_NAME)
3440             break;
3441           /* If the following token is neither a `<' (to begin a
3442              template-id), nor a `::', then we are not looking at a
3443              nested-name-specifier.  */
3444           token = cp_lexer_peek_nth_token (parser->lexer, 2);
3445           if (token->type != CPP_SCOPE
3446               && !cp_parser_nth_token_starts_template_argument_list_p
3447                   (parser, 2))
3448             break;
3449         }
3450
3451       /* The nested-name-specifier is optional, so we parse
3452          tentatively.  */
3453       cp_parser_parse_tentatively (parser);
3454
3455       /* Look for the optional `template' keyword, if this isn't the
3456          first time through the loop.  */
3457       if (success)
3458         template_keyword_p = cp_parser_optional_template_keyword (parser);
3459       else
3460         template_keyword_p = false;
3461
3462       /* Save the old scope since the name lookup we are about to do
3463          might destroy it.  */
3464       old_scope = parser->scope;
3465       saved_qualifying_scope = parser->qualifying_scope;
3466       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
3467          look up names in "X<T>::I" in order to determine that "Y" is
3468          a template.  So, if we have a typename at this point, we make
3469          an effort to look through it.  */
3470       if (is_declaration 
3471           && !typename_keyword_p
3472           && parser->scope 
3473           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3474         parser->scope = resolve_typename_type (parser->scope, 
3475                                                /*only_current_p=*/false);
3476       /* Parse the qualifying entity.  */
3477       new_scope
3478         = cp_parser_class_or_namespace_name (parser,
3479                                              typename_keyword_p,
3480                                              template_keyword_p,
3481                                              check_dependency_p,
3482                                              type_p,
3483                                              is_declaration);
3484       /* Look for the `::' token.  */
3485       cp_parser_require (parser, CPP_SCOPE, "`::'");
3486
3487       /* If we found what we wanted, we keep going; otherwise, we're
3488          done.  */
3489       if (!cp_parser_parse_definitely (parser))
3490         {
3491           bool error_p = false;
3492
3493           /* Restore the OLD_SCOPE since it was valid before the
3494              failed attempt at finding the last
3495              class-or-namespace-name.  */
3496           parser->scope = old_scope;
3497           parser->qualifying_scope = saved_qualifying_scope;
3498           /* If the next token is an identifier, and the one after
3499              that is a `::', then any valid interpretation would have
3500              found a class-or-namespace-name.  */
3501           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3502                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3503                      == CPP_SCOPE)
3504                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3505                      != CPP_COMPL))
3506             {
3507               token = cp_lexer_consume_token (parser->lexer);
3508               if (!error_p)
3509                 {
3510                   tree decl;
3511
3512                   decl = cp_parser_lookup_name_simple (parser, token->value);
3513                   if (TREE_CODE (decl) == TEMPLATE_DECL)
3514                     error ("%qD used without template parameters", decl);
3515                   else
3516                     cp_parser_name_lookup_error
3517                       (parser, token->value, decl,
3518                        "is not a class or namespace");
3519                   parser->scope = NULL_TREE;
3520                   error_p = true;
3521                   /* Treat this as a successful nested-name-specifier
3522                      due to:
3523
3524                      [basic.lookup.qual]
3525
3526                      If the name found is not a class-name (clause
3527                      _class_) or namespace-name (_namespace.def_), the
3528                      program is ill-formed.  */
3529                   success = true;
3530                 }
3531               cp_lexer_consume_token (parser->lexer);
3532             }
3533           break;
3534         }
3535
3536       /* We've found one valid nested-name-specifier.  */
3537       success = true;
3538       /* Make sure we look in the right scope the next time through
3539          the loop.  */
3540       parser->scope = (TREE_CODE (new_scope) == TYPE_DECL
3541                        ? TREE_TYPE (new_scope)
3542                        : new_scope);
3543       /* If it is a class scope, try to complete it; we are about to
3544          be looking up names inside the class.  */
3545       if (TYPE_P (parser->scope)
3546           /* Since checking types for dependency can be expensive,
3547              avoid doing it if the type is already complete.  */
3548           && !COMPLETE_TYPE_P (parser->scope)
3549           /* Do not try to complete dependent types.  */
3550           && !dependent_type_p (parser->scope))
3551         complete_type (parser->scope);
3552     }
3553
3554   /* Retrieve any deferred checks.  Do not pop this access checks yet
3555      so the memory will not be reclaimed during token replacing below.  */
3556   access_check = get_deferred_access_checks ();
3557
3558   /* If parsing tentatively, replace the sequence of tokens that makes
3559      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
3560      token.  That way, should we re-parse the token stream, we will
3561      not have to repeat the effort required to do the parse, nor will
3562      we issue duplicate error messages.  */
3563   if (success && start)
3564     {
3565       cp_token *token = cp_lexer_token_at (parser->lexer, start);
3566       
3567       /* Reset the contents of the START token.  */
3568       token->type = CPP_NESTED_NAME_SPECIFIER;
3569       token->value = build_tree_list (access_check, parser->scope);
3570       TREE_TYPE (token->value) = parser->qualifying_scope;
3571       token->keyword = RID_MAX;
3572       
3573       /* Purge all subsequent tokens.  */
3574       cp_lexer_purge_tokens_after (parser->lexer, start);
3575     }
3576
3577   pop_deferring_access_checks ();
3578   return success ? parser->scope : NULL_TREE;
3579 }
3580
3581 /* Parse a nested-name-specifier.  See
3582    cp_parser_nested_name_specifier_opt for details.  This function
3583    behaves identically, except that it will an issue an error if no
3584    nested-name-specifier is present, and it will return
3585    ERROR_MARK_NODE, rather than NULL_TREE, if no nested-name-specifier
3586    is present.  */
3587
3588 static tree
3589 cp_parser_nested_name_specifier (cp_parser *parser,
3590                                  bool typename_keyword_p,
3591                                  bool check_dependency_p,
3592                                  bool type_p,
3593                                  bool is_declaration)
3594 {
3595   tree scope;
3596
3597   /* Look for the nested-name-specifier.  */
3598   scope = cp_parser_nested_name_specifier_opt (parser,
3599                                                typename_keyword_p,
3600                                                check_dependency_p,
3601                                                type_p,
3602                                                is_declaration);
3603   /* If it was not present, issue an error message.  */
3604   if (!scope)
3605     {
3606       cp_parser_error (parser, "expected nested-name-specifier");
3607       parser->scope = NULL_TREE;
3608       return error_mark_node;
3609     }
3610
3611   return scope;
3612 }
3613
3614 /* Parse a class-or-namespace-name.
3615
3616    class-or-namespace-name:
3617      class-name
3618      namespace-name
3619
3620    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
3621    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
3622    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
3623    TYPE_P is TRUE iff the next name should be taken as a class-name,
3624    even the same name is declared to be another entity in the same
3625    scope.
3626
3627    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
3628    specified by the class-or-namespace-name.  If neither is found the
3629    ERROR_MARK_NODE is returned.  */
3630
3631 static tree
3632 cp_parser_class_or_namespace_name (cp_parser *parser,
3633                                    bool typename_keyword_p,
3634                                    bool template_keyword_p,
3635                                    bool check_dependency_p,
3636                                    bool type_p,
3637                                    bool is_declaration)
3638 {
3639   tree saved_scope;
3640   tree saved_qualifying_scope;
3641   tree saved_object_scope;
3642   tree scope;
3643   bool only_class_p;
3644
3645   /* Before we try to parse the class-name, we must save away the
3646      current PARSER->SCOPE since cp_parser_class_name will destroy
3647      it.  */
3648   saved_scope = parser->scope;
3649   saved_qualifying_scope = parser->qualifying_scope;
3650   saved_object_scope = parser->object_scope;
3651   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
3652      there is no need to look for a namespace-name.  */
3653   only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
3654   if (!only_class_p)
3655     cp_parser_parse_tentatively (parser);
3656   scope = cp_parser_class_name (parser,
3657                                 typename_keyword_p,
3658                                 template_keyword_p,
3659                                 type_p ? class_type : none_type,
3660                                 check_dependency_p,
3661                                 /*class_head_p=*/false,
3662                                 is_declaration);
3663   /* If that didn't work, try for a namespace-name.  */
3664   if (!only_class_p && !cp_parser_parse_definitely (parser))
3665     {
3666       /* Restore the saved scope.  */
3667       parser->scope = saved_scope;
3668       parser->qualifying_scope = saved_qualifying_scope;
3669       parser->object_scope = saved_object_scope;
3670       /* If we are not looking at an identifier followed by the scope
3671          resolution operator, then this is not part of a
3672          nested-name-specifier.  (Note that this function is only used
3673          to parse the components of a nested-name-specifier.)  */
3674       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
3675           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
3676         return error_mark_node;
3677       scope = cp_parser_namespace_name (parser);
3678     }
3679
3680   return scope;
3681 }
3682
3683 /* Parse a postfix-expression.
3684
3685    postfix-expression:
3686      primary-expression
3687      postfix-expression [ expression ]
3688      postfix-expression ( expression-list [opt] )
3689      simple-type-specifier ( expression-list [opt] )
3690      typename :: [opt] nested-name-specifier identifier
3691        ( expression-list [opt] )
3692      typename :: [opt] nested-name-specifier template [opt] template-id
3693        ( expression-list [opt] )
3694      postfix-expression . template [opt] id-expression
3695      postfix-expression -> template [opt] id-expression
3696      postfix-expression . pseudo-destructor-name
3697      postfix-expression -> pseudo-destructor-name
3698      postfix-expression ++
3699      postfix-expression --
3700      dynamic_cast < type-id > ( expression )
3701      static_cast < type-id > ( expression )
3702      reinterpret_cast < type-id > ( expression )
3703      const_cast < type-id > ( expression )
3704      typeid ( expression )
3705      typeid ( type-id )
3706
3707    GNU Extension:
3708
3709    postfix-expression:
3710      ( type-id ) { initializer-list , [opt] }
3711
3712    This extension is a GNU version of the C99 compound-literal
3713    construct.  (The C99 grammar uses `type-name' instead of `type-id',
3714    but they are essentially the same concept.)
3715
3716    If ADDRESS_P is true, the postfix expression is the operand of the
3717    `&' operator.  CAST_P is true if this expression is the target of a
3718    cast. 
3719
3720    Returns a representation of the expression.  */
3721
3722 static tree
3723 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
3724 {
3725   cp_token *token;
3726   enum rid keyword;
3727   cp_id_kind idk = CP_ID_KIND_NONE;
3728   tree postfix_expression = NULL_TREE;
3729   /* Non-NULL only if the current postfix-expression can be used to
3730      form a pointer-to-member.  In that case, QUALIFYING_CLASS is the
3731      class used to qualify the member.  */
3732   tree qualifying_class = NULL_TREE;
3733
3734   /* Peek at the next token.  */
3735   token = cp_lexer_peek_token (parser->lexer);
3736   /* Some of the productions are determined by keywords.  */
3737   keyword = token->keyword;
3738   switch (keyword)
3739     {
3740     case RID_DYNCAST:
3741     case RID_STATCAST:
3742     case RID_REINTCAST:
3743     case RID_CONSTCAST:
3744       {
3745         tree type;
3746         tree expression;
3747         const char *saved_message;
3748
3749         /* All of these can be handled in the same way from the point
3750            of view of parsing.  Begin by consuming the token
3751            identifying the cast.  */
3752         cp_lexer_consume_token (parser->lexer);
3753
3754         /* New types cannot be defined in the cast.  */
3755         saved_message = parser->type_definition_forbidden_message;
3756         parser->type_definition_forbidden_message
3757           = "types may not be defined in casts";
3758
3759         /* Look for the opening `<'.  */
3760         cp_parser_require (parser, CPP_LESS, "`<'");
3761         /* Parse the type to which we are casting.  */
3762         type = cp_parser_type_id (parser);
3763         /* Look for the closing `>'.  */
3764         cp_parser_require (parser, CPP_GREATER, "`>'");
3765         /* Restore the old message.  */
3766         parser->type_definition_forbidden_message = saved_message;
3767
3768         /* And the expression which is being cast.  */
3769         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3770         expression = cp_parser_expression (parser, /*cast_p=*/true);
3771         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3772
3773         /* Only type conversions to integral or enumeration types
3774            can be used in constant-expressions.  */
3775         if (parser->integral_constant_expression_p
3776             && !dependent_type_p (type)
3777             && !INTEGRAL_OR_ENUMERATION_TYPE_P (type)
3778             && (cp_parser_non_integral_constant_expression
3779                 (parser,
3780                  "a cast to a type other than an integral or "
3781                  "enumeration type")))
3782           return error_mark_node;
3783
3784         switch (keyword)
3785           {
3786           case RID_DYNCAST:
3787             postfix_expression
3788               = build_dynamic_cast (type, expression);
3789             break;
3790           case RID_STATCAST:
3791             postfix_expression
3792               = build_static_cast (type, expression);
3793             break;
3794           case RID_REINTCAST:
3795             postfix_expression
3796               = build_reinterpret_cast (type, expression);
3797             break;
3798           case RID_CONSTCAST:
3799             postfix_expression
3800               = build_const_cast (type, expression);
3801             break;
3802           default:
3803             gcc_unreachable ();
3804           }
3805       }
3806       break;
3807
3808     case RID_TYPEID:
3809       {
3810         tree type;
3811         const char *saved_message;
3812         bool saved_in_type_id_in_expr_p;
3813
3814         /* Consume the `typeid' token.  */
3815         cp_lexer_consume_token (parser->lexer);
3816         /* Look for the `(' token.  */
3817         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3818         /* Types cannot be defined in a `typeid' expression.  */
3819         saved_message = parser->type_definition_forbidden_message;
3820         parser->type_definition_forbidden_message
3821           = "types may not be defined in a `typeid\' expression";
3822         /* We can't be sure yet whether we're looking at a type-id or an
3823            expression.  */
3824         cp_parser_parse_tentatively (parser);
3825         /* Try a type-id first.  */
3826         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
3827         parser->in_type_id_in_expr_p = true;
3828         type = cp_parser_type_id (parser);
3829         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
3830         /* Look for the `)' token.  Otherwise, we can't be sure that
3831            we're not looking at an expression: consider `typeid (int
3832            (3))', for example.  */
3833         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3834         /* If all went well, simply lookup the type-id.  */
3835         if (cp_parser_parse_definitely (parser))
3836           postfix_expression = get_typeid (type);
3837         /* Otherwise, fall back to the expression variant.  */
3838         else
3839           {
3840             tree expression;
3841
3842             /* Look for an expression.  */
3843             expression = cp_parser_expression (parser, /*cast_p=*/false);
3844             /* Compute its typeid.  */
3845             postfix_expression = build_typeid (expression);
3846             /* Look for the `)' token.  */
3847             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3848           }
3849         /* `typeid' may not appear in an integral constant expression.  */
3850         if (cp_parser_non_integral_constant_expression(parser,
3851                                                        "`typeid' operator"))
3852           return error_mark_node;
3853         /* Restore the saved message.  */
3854         parser->type_definition_forbidden_message = saved_message;
3855       }
3856       break;
3857
3858     case RID_TYPENAME:
3859       {
3860         bool template_p = false;
3861         tree id;
3862         tree type;
3863
3864         /* Consume the `typename' token.  */
3865         cp_lexer_consume_token (parser->lexer);
3866         /* Look for the optional `::' operator.  */
3867         cp_parser_global_scope_opt (parser,
3868                                     /*current_scope_valid_p=*/false);
3869         /* Look for the nested-name-specifier.  */
3870         cp_parser_nested_name_specifier (parser,
3871                                          /*typename_keyword_p=*/true,
3872                                          /*check_dependency_p=*/true,
3873                                          /*type_p=*/true,
3874                                          /*is_declaration=*/true);
3875         /* Look for the optional `template' keyword.  */
3876         template_p = cp_parser_optional_template_keyword (parser);
3877         /* We don't know whether we're looking at a template-id or an
3878            identifier.  */
3879         cp_parser_parse_tentatively (parser);
3880         /* Try a template-id.  */
3881         id = cp_parser_template_id (parser, template_p,
3882                                     /*check_dependency_p=*/true,
3883                                     /*is_declaration=*/true);
3884         /* If that didn't work, try an identifier.  */
3885         if (!cp_parser_parse_definitely (parser))
3886           id = cp_parser_identifier (parser);
3887         /* If we look up a template-id in a non-dependent qualifying
3888            scope, there's no need to create a dependent type.  */
3889         if (TREE_CODE (id) == TYPE_DECL
3890             && !dependent_type_p (parser->scope))
3891           type = TREE_TYPE (id);
3892         /* Create a TYPENAME_TYPE to represent the type to which the
3893            functional cast is being performed.  */
3894         else
3895           type = make_typename_type (parser->scope, id,
3896                                      typename_type,
3897                                      /*complain=*/1);
3898
3899         postfix_expression = cp_parser_functional_cast (parser, type);
3900       }
3901       break;
3902
3903     default:
3904       {
3905         tree type;
3906
3907         /* If the next thing is a simple-type-specifier, we may be
3908            looking at a functional cast.  We could also be looking at
3909            an id-expression.  So, we try the functional cast, and if
3910            that doesn't work we fall back to the primary-expression.  */
3911         cp_parser_parse_tentatively (parser);
3912         /* Look for the simple-type-specifier.  */
3913         type = cp_parser_simple_type_specifier (parser,
3914                                                 /*decl_specs=*/NULL,
3915                                                 CP_PARSER_FLAGS_NONE);
3916         /* Parse the cast itself.  */
3917         if (!cp_parser_error_occurred (parser))
3918           postfix_expression
3919             = cp_parser_functional_cast (parser, type);
3920         /* If that worked, we're done.  */
3921         if (cp_parser_parse_definitely (parser))
3922           break;
3923
3924         /* If the functional-cast didn't work out, try a
3925            compound-literal.  */
3926         if (cp_parser_allow_gnu_extensions_p (parser)
3927             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
3928           {
3929             tree initializer_list = NULL_TREE;
3930             bool saved_in_type_id_in_expr_p;
3931
3932             cp_parser_parse_tentatively (parser);
3933             /* Consume the `('.  */
3934             cp_lexer_consume_token (parser->lexer);
3935             /* Parse the type.  */
3936             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
3937             parser->in_type_id_in_expr_p = true;
3938             type = cp_parser_type_id (parser);
3939             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
3940             /* Look for the `)'.  */
3941             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3942             /* Look for the `{'.  */
3943             cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
3944             /* If things aren't going well, there's no need to
3945                keep going.  */
3946             if (!cp_parser_error_occurred (parser))
3947               {
3948                 bool non_constant_p;
3949                 /* Parse the initializer-list.  */
3950                 initializer_list
3951                   = cp_parser_initializer_list (parser, &non_constant_p);
3952                 /* Allow a trailing `,'.  */
3953                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
3954                   cp_lexer_consume_token (parser->lexer);
3955                 /* Look for the final `}'.  */
3956                 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
3957               }
3958             /* If that worked, we're definitely looking at a
3959                compound-literal expression.  */
3960             if (cp_parser_parse_definitely (parser))
3961               {
3962                 /* Warn the user that a compound literal is not
3963                    allowed in standard C++.  */
3964                 if (pedantic)
3965                   pedwarn ("ISO C++ forbids compound-literals");
3966                 /* Form the representation of the compound-literal.  */
3967                 postfix_expression
3968                   = finish_compound_literal (type, initializer_list);
3969                 break;
3970               }
3971           }
3972
3973         /* It must be a primary-expression.  */
3974         postfix_expression = cp_parser_primary_expression (parser,
3975                                                            cast_p,
3976                                                            &idk,
3977                                                            &qualifying_class);
3978       }
3979       break;
3980     }
3981
3982   /* If we were avoiding committing to the processing of a
3983      qualified-id until we knew whether or not we had a
3984      pointer-to-member, we now know.  */
3985   if (qualifying_class)
3986     {
3987       bool done;
3988
3989       /* Peek at the next token.  */
3990       token = cp_lexer_peek_token (parser->lexer);
3991       done = (token->type != CPP_OPEN_SQUARE
3992               && token->type != CPP_OPEN_PAREN
3993               && token->type != CPP_DOT
3994               && token->type != CPP_DEREF
3995               && token->type != CPP_PLUS_PLUS
3996               && token->type != CPP_MINUS_MINUS);
3997
3998       postfix_expression = finish_qualified_id_expr (qualifying_class,
3999                                                      postfix_expression,
4000                                                      done,
4001                                                      address_p);
4002       if (done)
4003         return postfix_expression;
4004     }
4005
4006   /* Keep looping until the postfix-expression is complete.  */
4007   while (true)
4008     {
4009       if (idk == CP_ID_KIND_UNQUALIFIED
4010           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4011           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4012         /* It is not a Koenig lookup function call.  */
4013         postfix_expression
4014           = unqualified_name_lookup_error (postfix_expression);
4015
4016       /* Peek at the next token.  */
4017       token = cp_lexer_peek_token (parser->lexer);
4018
4019       switch (token->type)
4020         {
4021         case CPP_OPEN_SQUARE:
4022           postfix_expression
4023             = cp_parser_postfix_open_square_expression (parser,
4024                                                         postfix_expression,
4025                                                         false);
4026           idk = CP_ID_KIND_NONE;
4027           break;
4028
4029         case CPP_OPEN_PAREN:
4030           /* postfix-expression ( expression-list [opt] ) */
4031           {
4032             bool koenig_p;
4033             tree args = (cp_parser_parenthesized_expression_list
4034                          (parser, false, 
4035                           /*cast_p=*/false,
4036                           /*non_constant_p=*/NULL));
4037
4038             if (args == error_mark_node)
4039               {
4040                 postfix_expression = error_mark_node;
4041                 break;
4042               }
4043
4044             /* Function calls are not permitted in
4045                constant-expressions.  */
4046             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4047                 && cp_parser_non_integral_constant_expression (parser,
4048                                                                "a function call"))
4049               {
4050                 postfix_expression = error_mark_node;
4051                 break;
4052               }
4053
4054             koenig_p = false;
4055             if (idk == CP_ID_KIND_UNQUALIFIED)
4056               {
4057                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4058                   {
4059                     if (args)
4060                       {
4061                         koenig_p = true;
4062                         postfix_expression
4063                           = perform_koenig_lookup (postfix_expression, args);
4064                       }
4065                     else
4066                       postfix_expression
4067                         = unqualified_fn_lookup_error (postfix_expression);
4068                   }
4069                 /* We do not perform argument-dependent lookup if
4070                    normal lookup finds a non-function, in accordance
4071                    with the expected resolution of DR 218.  */
4072                 else if (args && is_overloaded_fn (postfix_expression))
4073                   {
4074                     tree fn = get_first_fn (postfix_expression);
4075
4076                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4077                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4078
4079                     /* Only do argument dependent lookup if regular
4080                        lookup does not find a set of member functions.
4081                        [basic.lookup.koenig]/2a  */
4082                     if (!DECL_FUNCTION_MEMBER_P (fn))
4083                       {
4084                         koenig_p = true;
4085                         postfix_expression
4086                           = perform_koenig_lookup (postfix_expression, args);
4087                       }
4088                   }
4089               }
4090
4091             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4092               {
4093                 tree instance = TREE_OPERAND (postfix_expression, 0);
4094                 tree fn = TREE_OPERAND (postfix_expression, 1);
4095
4096                 if (processing_template_decl
4097                     && (type_dependent_expression_p (instance)
4098                         || (!BASELINK_P (fn)
4099                             && TREE_CODE (fn) != FIELD_DECL)
4100                         || type_dependent_expression_p (fn)
4101                         || any_type_dependent_arguments_p (args)))
4102                   {
4103                     postfix_expression
4104                       = build_min_nt (CALL_EXPR, postfix_expression,
4105                                       args, NULL_TREE);
4106                     break;
4107                   }
4108
4109                 if (BASELINK_P (fn))
4110                   postfix_expression
4111                     = (build_new_method_call
4112                        (instance, fn, args, NULL_TREE,
4113                         (idk == CP_ID_KIND_QUALIFIED
4114                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL)));
4115                 else
4116                   postfix_expression
4117                     = finish_call_expr (postfix_expression, args,
4118                                         /*disallow_virtual=*/false,
4119                                         /*koenig_p=*/false);
4120               }
4121             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4122                      || TREE_CODE (postfix_expression) == MEMBER_REF
4123                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4124               postfix_expression = (build_offset_ref_call_from_tree
4125                                     (postfix_expression, args));
4126             else if (idk == CP_ID_KIND_QUALIFIED)
4127               /* A call to a static class member, or a namespace-scope
4128                  function.  */
4129               postfix_expression
4130                 = finish_call_expr (postfix_expression, args,
4131                                     /*disallow_virtual=*/true,
4132                                     koenig_p);
4133             else
4134               /* All other function calls.  */
4135               postfix_expression
4136                 = finish_call_expr (postfix_expression, args,
4137                                     /*disallow_virtual=*/false,
4138                                     koenig_p);
4139
4140             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4141             idk = CP_ID_KIND_NONE;
4142           }
4143           break;
4144
4145         case CPP_DOT:
4146         case CPP_DEREF:
4147           /* postfix-expression . template [opt] id-expression
4148              postfix-expression . pseudo-destructor-name
4149              postfix-expression -> template [opt] id-expression
4150              postfix-expression -> pseudo-destructor-name */
4151
4152           /* Consume the `.' or `->' operator.  */
4153           cp_lexer_consume_token (parser->lexer);
4154
4155           postfix_expression
4156             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4157                                                       postfix_expression,
4158                                                       false, &idk);
4159           break;
4160
4161         case CPP_PLUS_PLUS:
4162           /* postfix-expression ++  */
4163           /* Consume the `++' token.  */
4164           cp_lexer_consume_token (parser->lexer);
4165           /* Generate a representation for the complete expression.  */
4166           postfix_expression
4167             = finish_increment_expr (postfix_expression,
4168                                      POSTINCREMENT_EXPR);
4169           /* Increments may not appear in constant-expressions.  */
4170           if (cp_parser_non_integral_constant_expression (parser,
4171                                                           "an increment"))
4172             postfix_expression = error_mark_node;
4173           idk = CP_ID_KIND_NONE;
4174           break;
4175
4176         case CPP_MINUS_MINUS:
4177           /* postfix-expression -- */
4178           /* Consume the `--' token.  */
4179           cp_lexer_consume_token (parser->lexer);
4180           /* Generate a representation for the complete expression.  */
4181           postfix_expression
4182             = finish_increment_expr (postfix_expression,
4183                                      POSTDECREMENT_EXPR);
4184           /* Decrements may not appear in constant-expressions.  */
4185           if (cp_parser_non_integral_constant_expression (parser,
4186                                                           "a decrement"))
4187             postfix_expression = error_mark_node;
4188           idk = CP_ID_KIND_NONE;
4189           break;
4190
4191         default:
4192           return postfix_expression;
4193         }
4194     }
4195
4196   /* We should never get here.  */
4197   gcc_unreachable ();
4198   return error_mark_node;
4199 }
4200
4201 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4202    by cp_parser_builtin_offsetof.  We're looking for
4203
4204      postfix-expression [ expression ]
4205
4206    FOR_OFFSETOF is set if we're being called in that context, which
4207    changes how we deal with integer constant expressions.  */
4208
4209 static tree
4210 cp_parser_postfix_open_square_expression (cp_parser *parser,
4211                                           tree postfix_expression,
4212                                           bool for_offsetof)
4213 {
4214   tree index;
4215
4216   /* Consume the `[' token.  */
4217   cp_lexer_consume_token (parser->lexer);
4218
4219   /* Parse the index expression.  */
4220   /* ??? For offsetof, there is a question of what to allow here.  If
4221      offsetof is not being used in an integral constant expression context,
4222      then we *could* get the right answer by computing the value at runtime.
4223      If we are in an integral constant expression context, then we might
4224      could accept any constant expression; hard to say without analysis.
4225      Rather than open the barn door too wide right away, allow only integer
4226      constant expressions here.  */
4227   if (for_offsetof)
4228     index = cp_parser_constant_expression (parser, false, NULL);
4229   else
4230     index = cp_parser_expression (parser, /*cast_p=*/false);
4231
4232   /* Look for the closing `]'.  */
4233   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4234
4235   /* Build the ARRAY_REF.  */
4236   postfix_expression = grok_array_decl (postfix_expression, index);
4237
4238   /* When not doing offsetof, array references are not permitted in
4239      constant-expressions.  */
4240   if (!for_offsetof
4241       && (cp_parser_non_integral_constant_expression
4242           (parser, "an array reference")))
4243     postfix_expression = error_mark_node;
4244
4245   return postfix_expression;
4246 }
4247
4248 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4249    by cp_parser_builtin_offsetof.  We're looking for
4250
4251      postfix-expression . template [opt] id-expression
4252      postfix-expression . pseudo-destructor-name
4253      postfix-expression -> template [opt] id-expression
4254      postfix-expression -> pseudo-destructor-name
4255
4256    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4257    limits what of the above we'll actually accept, but nevermind.
4258    TOKEN_TYPE is the "." or "->" token, which will already have been
4259    removed from the stream.  */
4260
4261 static tree
4262 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4263                                         enum cpp_ttype token_type,
4264                                         tree postfix_expression,
4265                                         bool for_offsetof, cp_id_kind *idk)
4266 {
4267   tree name;
4268   bool dependent_p;
4269   bool template_p;
4270   bool pseudo_destructor_p;
4271   tree scope = NULL_TREE;
4272
4273   /* If this is a `->' operator, dereference the pointer.  */
4274   if (token_type == CPP_DEREF)
4275     postfix_expression = build_x_arrow (postfix_expression);
4276   /* Check to see whether or not the expression is type-dependent.  */
4277   dependent_p = type_dependent_expression_p (postfix_expression);
4278   /* The identifier following the `->' or `.' is not qualified.  */
4279   parser->scope = NULL_TREE;
4280   parser->qualifying_scope = NULL_TREE;
4281   parser->object_scope = NULL_TREE;
4282   *idk = CP_ID_KIND_NONE;
4283   /* Enter the scope corresponding to the type of the object
4284      given by the POSTFIX_EXPRESSION.  */
4285   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4286     {
4287       scope = TREE_TYPE (postfix_expression);
4288       /* According to the standard, no expression should ever have
4289          reference type.  Unfortunately, we do not currently match
4290          the standard in this respect in that our internal representation
4291          of an expression may have reference type even when the standard
4292          says it does not.  Therefore, we have to manually obtain the
4293          underlying type here.  */
4294       scope = non_reference (scope);
4295       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4296       scope = complete_type_or_else (scope, NULL_TREE);
4297       /* Let the name lookup machinery know that we are processing a
4298          class member access expression.  */
4299       parser->context->object_type = scope;
4300       /* If something went wrong, we want to be able to discern that case,
4301          as opposed to the case where there was no SCOPE due to the type
4302          of expression being dependent.  */
4303       if (!scope)
4304         scope = error_mark_node;
4305       /* If the SCOPE was erroneous, make the various semantic analysis
4306          functions exit quickly -- and without issuing additional error
4307          messages.  */
4308       if (scope == error_mark_node)
4309         postfix_expression = error_mark_node;
4310     }
4311
4312   /* Assume this expression is not a pseudo-destructor access.  */
4313   pseudo_destructor_p = false;
4314
4315   /* If the SCOPE is a scalar type, then, if this is a valid program,
4316      we must be looking at a pseudo-destructor-name.  */
4317   if (scope && SCALAR_TYPE_P (scope))
4318     {
4319       tree s;
4320       tree type;
4321
4322       cp_parser_parse_tentatively (parser);
4323       /* Parse the pseudo-destructor-name.  */
4324       s = NULL_TREE;
4325       cp_parser_pseudo_destructor_name (parser, &s, &type);
4326       if (cp_parser_parse_definitely (parser))
4327         {
4328           pseudo_destructor_p = true;
4329           postfix_expression
4330             = finish_pseudo_destructor_expr (postfix_expression,
4331                                              s, TREE_TYPE (type));
4332         }
4333     }
4334
4335   if (!pseudo_destructor_p)
4336     {
4337       /* If the SCOPE is not a scalar type, we are looking at an
4338          ordinary class member access expression, rather than a
4339          pseudo-destructor-name.  */
4340       template_p = cp_parser_optional_template_keyword (parser);
4341       /* Parse the id-expression.  */
4342       name = cp_parser_id_expression (parser, template_p,
4343                                       /*check_dependency_p=*/true,
4344                                       /*template_p=*/NULL,
4345                                       /*declarator_p=*/false);
4346       /* In general, build a SCOPE_REF if the member name is qualified.
4347          However, if the name was not dependent and has already been
4348          resolved; there is no need to build the SCOPE_REF.  For example;
4349
4350              struct X { void f(); };
4351              template <typename T> void f(T* t) { t->X::f(); }
4352
4353          Even though "t" is dependent, "X::f" is not and has been resolved
4354          to a BASELINK; there is no need to include scope information.  */
4355
4356       /* But we do need to remember that there was an explicit scope for
4357          virtual function calls.  */
4358       if (parser->scope)
4359         *idk = CP_ID_KIND_QUALIFIED;
4360
4361       /* If the name is a template-id that names a type, we will get a
4362          TYPE_DECL here.  That is invalid code.  */
4363       if (TREE_CODE (name) == TYPE_DECL)
4364         {
4365           error ("invalid use of %qD", name);
4366           postfix_expression = error_mark_node;
4367         }
4368       else
4369         {
4370           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4371             {
4372               name = build_nt (SCOPE_REF, parser->scope, name);
4373               parser->scope = NULL_TREE;
4374               parser->qualifying_scope = NULL_TREE;
4375               parser->object_scope = NULL_TREE;
4376             }
4377           if (scope && name && BASELINK_P (name))
4378             adjust_result_of_qualified_name_lookup
4379               (name, BINFO_TYPE (BASELINK_BINFO (name)), scope);
4380           postfix_expression
4381             = finish_class_member_access_expr (postfix_expression, name);
4382         }
4383     }
4384
4385   /* We no longer need to look up names in the scope of the object on
4386      the left-hand side of the `.' or `->' operator.  */
4387   parser->context->object_type = NULL_TREE;
4388
4389   /* Outside of offsetof, these operators may not appear in
4390      constant-expressions.  */
4391   if (!for_offsetof
4392       && (cp_parser_non_integral_constant_expression
4393           (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4394     postfix_expression = error_mark_node;
4395
4396   return postfix_expression;
4397 }
4398
4399 /* Parse a parenthesized expression-list.
4400
4401    expression-list:
4402      assignment-expression
4403      expression-list, assignment-expression
4404
4405    attribute-list:
4406      expression-list
4407      identifier
4408      identifier, expression-list
4409
4410    CAST_P is true if this expression is the target of a cast.
4411
4412    Returns a TREE_LIST.  The TREE_VALUE of each node is a
4413    representation of an assignment-expression.  Note that a TREE_LIST
4414    is returned even if there is only a single expression in the list.
4415    error_mark_node is returned if the ( and or ) are
4416    missing. NULL_TREE is returned on no expressions. The parentheses
4417    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4418    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4419    indicates whether or not all of the expressions in the list were
4420    constant.  */
4421
4422 static tree
4423 cp_parser_parenthesized_expression_list (cp_parser* parser,
4424                                          bool is_attribute_list,
4425                                          bool cast_p,
4426                                          bool *non_constant_p)
4427 {
4428   tree expression_list = NULL_TREE;
4429   bool fold_expr_p = is_attribute_list;
4430   tree identifier = NULL_TREE;
4431
4432   /* Assume all the expressions will be constant.  */
4433   if (non_constant_p)
4434     *non_constant_p = false;
4435
4436   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4437     return error_mark_node;
4438
4439   /* Consume expressions until there are no more.  */
4440   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4441     while (true)
4442       {
4443         tree expr;
4444
4445         /* At the beginning of attribute lists, check to see if the
4446            next token is an identifier.  */
4447         if (is_attribute_list
4448             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4449           {
4450             cp_token *token;
4451
4452             /* Consume the identifier.  */
4453             token = cp_lexer_consume_token (parser->lexer);
4454             /* Save the identifier.  */
4455             identifier = token->value;
4456           }
4457         else
4458           {
4459             /* Parse the next assignment-expression.  */
4460             if (non_constant_p)
4461               {
4462                 bool expr_non_constant_p;
4463                 expr = (cp_parser_constant_expression
4464                         (parser, /*allow_non_constant_p=*/true,
4465                          &expr_non_constant_p));
4466                 if (expr_non_constant_p)
4467                   *non_constant_p = true;
4468               }
4469             else
4470               expr = cp_parser_assignment_expression (parser, cast_p);
4471
4472             if (fold_expr_p)
4473               expr = fold_non_dependent_expr (expr);
4474
4475              /* Add it to the list.  We add error_mark_node
4476                 expressions to the list, so that we can still tell if
4477                 the correct form for a parenthesized expression-list
4478                 is found. That gives better errors.  */
4479             expression_list = tree_cons (NULL_TREE, expr, expression_list);
4480
4481             if (expr == error_mark_node)
4482               goto skip_comma;
4483           }
4484
4485         /* After the first item, attribute lists look the same as
4486            expression lists.  */
4487         is_attribute_list = false;
4488
4489       get_comma:;
4490         /* If the next token isn't a `,', then we are done.  */
4491         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4492           break;
4493
4494         /* Otherwise, consume the `,' and keep going.  */
4495         cp_lexer_consume_token (parser->lexer);
4496       }
4497
4498   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
4499     {
4500       int ending;
4501
4502     skip_comma:;
4503       /* We try and resync to an unnested comma, as that will give the
4504          user better diagnostics.  */
4505       ending = cp_parser_skip_to_closing_parenthesis (parser,
4506                                                       /*recovering=*/true,
4507                                                       /*or_comma=*/true,
4508                                                       /*consume_paren=*/true);
4509       if (ending < 0)
4510         goto get_comma;
4511       if (!ending)
4512         return error_mark_node;
4513     }
4514
4515   /* We built up the list in reverse order so we must reverse it now.  */
4516   expression_list = nreverse (expression_list);
4517   if (identifier)
4518     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
4519
4520   return expression_list;
4521 }
4522
4523 /* Parse a pseudo-destructor-name.
4524
4525    pseudo-destructor-name:
4526      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
4527      :: [opt] nested-name-specifier template template-id :: ~ type-name
4528      :: [opt] nested-name-specifier [opt] ~ type-name
4529
4530    If either of the first two productions is used, sets *SCOPE to the
4531    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
4532    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
4533    or ERROR_MARK_NODE if the parse fails.  */
4534
4535 static void
4536 cp_parser_pseudo_destructor_name (cp_parser* parser,
4537                                   tree* scope,
4538                                   tree* type)
4539 {
4540   bool nested_name_specifier_p;
4541
4542   /* Assume that things will not work out.  */
4543   *type = error_mark_node;
4544
4545   /* Look for the optional `::' operator.  */
4546   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
4547   /* Look for the optional nested-name-specifier.  */
4548   nested_name_specifier_p
4549     = (cp_parser_nested_name_specifier_opt (parser,
4550                                             /*typename_keyword_p=*/false,
4551                                             /*check_dependency_p=*/true,
4552                                             /*type_p=*/false,
4553                                             /*is_declaration=*/true)
4554        != NULL_TREE);
4555   /* Now, if we saw a nested-name-specifier, we might be doing the
4556      second production.  */
4557   if (nested_name_specifier_p
4558       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
4559     {
4560       /* Consume the `template' keyword.  */
4561       cp_lexer_consume_token (parser->lexer);
4562       /* Parse the template-id.  */
4563       cp_parser_template_id (parser,
4564                              /*template_keyword_p=*/true,
4565                              /*check_dependency_p=*/false,
4566                              /*is_declaration=*/true);
4567       /* Look for the `::' token.  */
4568       cp_parser_require (parser, CPP_SCOPE, "`::'");
4569     }
4570   /* If the next token is not a `~', then there might be some
4571      additional qualification.  */
4572   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
4573     {
4574       /* Look for the type-name.  */
4575       *scope = TREE_TYPE (cp_parser_type_name (parser));
4576
4577       if (*scope == error_mark_node)
4578         return;
4579
4580       /* If we don't have ::~, then something has gone wrong.  Since
4581          the only caller of this function is looking for something
4582          after `.' or `->' after a scalar type, most likely the
4583          program is trying to get a member of a non-aggregate
4584          type.  */
4585       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
4586           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
4587         {
4588           cp_parser_error (parser, "request for member of non-aggregate type");
4589           return;
4590         }
4591
4592       /* Look for the `::' token.  */
4593       cp_parser_require (parser, CPP_SCOPE, "`::'");
4594     }
4595   else
4596     *scope = NULL_TREE;
4597
4598   /* Look for the `~'.  */
4599   cp_parser_require (parser, CPP_COMPL, "`~'");
4600   /* Look for the type-name again.  We are not responsible for
4601      checking that it matches the first type-name.  */
4602   *type = cp_parser_type_name (parser);
4603 }
4604
4605 /* Parse a unary-expression.
4606
4607    unary-expression:
4608      postfix-expression
4609      ++ cast-expression
4610      -- cast-expression
4611      unary-operator cast-expression
4612      sizeof unary-expression
4613      sizeof ( type-id )
4614      new-expression
4615      delete-expression
4616
4617    GNU Extensions:
4618
4619    unary-expression:
4620      __extension__ cast-expression
4621      __alignof__ unary-expression
4622      __alignof__ ( type-id )
4623      __real__ cast-expression
4624      __imag__ cast-expression
4625      && identifier
4626
4627    ADDRESS_P is true iff the unary-expression is appearing as the
4628    operand of the `&' operator.   CAST_P is true if this expression is
4629    the target of a cast.
4630
4631    Returns a representation of the expression.  */
4632
4633 static tree
4634 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
4635 {
4636   cp_token *token;
4637   enum tree_code unary_operator;
4638
4639   /* Peek at the next token.  */
4640   token = cp_lexer_peek_token (parser->lexer);
4641   /* Some keywords give away the kind of expression.  */
4642   if (token->type == CPP_KEYWORD)
4643     {
4644       enum rid keyword = token->keyword;
4645
4646       switch (keyword)
4647         {
4648         case RID_ALIGNOF:
4649         case RID_SIZEOF:
4650           {
4651             tree operand;
4652             enum tree_code op;
4653
4654             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
4655             /* Consume the token.  */
4656             cp_lexer_consume_token (parser->lexer);
4657             /* Parse the operand.  */
4658             operand = cp_parser_sizeof_operand (parser, keyword);
4659
4660             if (TYPE_P (operand))
4661               return cxx_sizeof_or_alignof_type (operand, op, true);
4662             else
4663               return cxx_sizeof_or_alignof_expr (operand, op);
4664           }
4665
4666         case RID_NEW:
4667           return cp_parser_new_expression (parser);
4668
4669         case RID_DELETE:
4670           return cp_parser_delete_expression (parser);
4671
4672         case RID_EXTENSION:
4673           {
4674             /* The saved value of the PEDANTIC flag.  */
4675             int saved_pedantic;
4676             tree expr;
4677
4678             /* Save away the PEDANTIC flag.  */
4679             cp_parser_extension_opt (parser, &saved_pedantic);
4680             /* Parse the cast-expression.  */
4681             expr = cp_parser_simple_cast_expression (parser);
4682             /* Restore the PEDANTIC flag.  */
4683             pedantic = saved_pedantic;
4684
4685             return expr;
4686           }
4687
4688         case RID_REALPART:
4689         case RID_IMAGPART:
4690           {
4691             tree expression;
4692
4693             /* Consume the `__real__' or `__imag__' token.  */
4694             cp_lexer_consume_token (parser->lexer);
4695             /* Parse the cast-expression.  */
4696             expression = cp_parser_simple_cast_expression (parser);
4697             /* Create the complete representation.  */
4698             return build_x_unary_op ((keyword == RID_REALPART
4699                                       ? REALPART_EXPR : IMAGPART_EXPR),
4700                                      expression);
4701           }
4702           break;
4703
4704         default:
4705           break;
4706         }
4707     }
4708
4709   /* Look for the `:: new' and `:: delete', which also signal the
4710      beginning of a new-expression, or delete-expression,
4711      respectively.  If the next token is `::', then it might be one of
4712      these.  */
4713   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
4714     {
4715       enum rid keyword;
4716
4717       /* See if the token after the `::' is one of the keywords in
4718          which we're interested.  */
4719       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
4720       /* If it's `new', we have a new-expression.  */
4721       if (keyword == RID_NEW)
4722         return cp_parser_new_expression (parser);
4723       /* Similarly, for `delete'.  */
4724       else if (keyword == RID_DELETE)
4725         return cp_parser_delete_expression (parser);
4726     }
4727
4728   /* Look for a unary operator.  */
4729   unary_operator = cp_parser_unary_operator (token);
4730   /* The `++' and `--' operators can be handled similarly, even though
4731      they are not technically unary-operators in the grammar.  */
4732   if (unary_operator == ERROR_MARK)
4733     {
4734       if (token->type == CPP_PLUS_PLUS)
4735         unary_operator = PREINCREMENT_EXPR;
4736       else if (token->type == CPP_MINUS_MINUS)
4737         unary_operator = PREDECREMENT_EXPR;
4738       /* Handle the GNU address-of-label extension.  */
4739       else if (cp_parser_allow_gnu_extensions_p (parser)
4740                && token->type == CPP_AND_AND)
4741         {
4742           tree identifier;
4743
4744           /* Consume the '&&' token.  */
4745           cp_lexer_consume_token (parser->lexer);
4746           /* Look for the identifier.  */
4747           identifier = cp_parser_identifier (parser);
4748           /* Create an expression representing the address.  */
4749           return finish_label_address_expr (identifier);
4750         }
4751     }
4752   if (unary_operator != ERROR_MARK)
4753     {
4754       tree cast_expression;
4755       tree expression = error_mark_node;
4756       const char *non_constant_p = NULL;
4757
4758       /* Consume the operator token.  */
4759       token = cp_lexer_consume_token (parser->lexer);
4760       /* Parse the cast-expression.  */
4761       cast_expression
4762         = cp_parser_cast_expression (parser, 
4763                                      unary_operator == ADDR_EXPR,
4764                                      /*cast_p=*/false);
4765       /* Now, build an appropriate representation.  */
4766       switch (unary_operator)
4767         {
4768         case INDIRECT_REF:
4769           non_constant_p = "`*'";
4770           expression = build_x_indirect_ref (cast_expression, "unary *");
4771           break;
4772
4773         case ADDR_EXPR:
4774           non_constant_p = "`&'";
4775           /* Fall through.  */
4776         case BIT_NOT_EXPR:
4777           expression = build_x_unary_op (unary_operator, cast_expression);
4778           break;
4779
4780         case PREINCREMENT_EXPR:
4781         case PREDECREMENT_EXPR:
4782           non_constant_p = (unary_operator == PREINCREMENT_EXPR
4783                             ? "`++'" : "`--'");
4784           /* Fall through.  */
4785         case CONVERT_EXPR:
4786         case NEGATE_EXPR:
4787         case TRUTH_NOT_EXPR:
4788           expression = finish_unary_op_expr (unary_operator, cast_expression);
4789           break;
4790
4791         default:
4792           gcc_unreachable ();
4793         }
4794
4795       if (non_constant_p
4796           && cp_parser_non_integral_constant_expression (parser,
4797                                                          non_constant_p))
4798         expression = error_mark_node;
4799
4800       return expression;
4801     }
4802
4803   return cp_parser_postfix_expression (parser, address_p, cast_p);
4804 }
4805
4806 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
4807    unary-operator, the corresponding tree code is returned.  */
4808
4809 static enum tree_code
4810 cp_parser_unary_operator (cp_token* token)
4811 {
4812   switch (token->type)
4813     {
4814     case CPP_MULT:
4815       return INDIRECT_REF;
4816
4817     case CPP_AND:
4818       return ADDR_EXPR;
4819
4820     case CPP_PLUS:
4821       return CONVERT_EXPR;
4822
4823     case CPP_MINUS:
4824       return NEGATE_EXPR;
4825
4826     case CPP_NOT:
4827       return TRUTH_NOT_EXPR;
4828
4829     case CPP_COMPL:
4830       return BIT_NOT_EXPR;
4831
4832     default:
4833       return ERROR_MARK;
4834     }
4835 }
4836
4837 /* Parse a new-expression.
4838
4839    new-expression:
4840      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
4841      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
4842
4843    Returns a representation of the expression.  */
4844
4845 static tree
4846 cp_parser_new_expression (cp_parser* parser)
4847 {
4848   bool global_scope_p;
4849   tree placement;
4850   tree type;
4851   tree initializer;
4852   tree nelts;
4853
4854   /* Look for the optional `::' operator.  */
4855   global_scope_p
4856     = (cp_parser_global_scope_opt (parser,
4857                                    /*current_scope_valid_p=*/false)
4858        != NULL_TREE);
4859   /* Look for the `new' operator.  */
4860   cp_parser_require_keyword (parser, RID_NEW, "`new'");
4861   /* There's no easy way to tell a new-placement from the
4862      `( type-id )' construct.  */
4863   cp_parser_parse_tentatively (parser);
4864   /* Look for a new-placement.  */
4865   placement = cp_parser_new_placement (parser);
4866   /* If that didn't work out, there's no new-placement.  */
4867   if (!cp_parser_parse_definitely (parser))
4868     placement = NULL_TREE;
4869
4870   /* If the next token is a `(', then we have a parenthesized
4871      type-id.  */
4872   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4873     {
4874       /* Consume the `('.  */
4875       cp_lexer_consume_token (parser->lexer);
4876       /* Parse the type-id.  */
4877       type = cp_parser_type_id (parser);
4878       /* Look for the closing `)'.  */
4879       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4880       /* There should not be a direct-new-declarator in this production,
4881          but GCC used to allowed this, so we check and emit a sensible error
4882          message for this case.  */
4883       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
4884         {
4885           error ("array bound forbidden after parenthesized type-id");
4886           inform ("try removing the parentheses around the type-id");
4887           cp_parser_direct_new_declarator (parser);
4888         }
4889       nelts = NULL_TREE;
4890     }
4891   /* Otherwise, there must be a new-type-id.  */
4892   else
4893     type = cp_parser_new_type_id (parser, &nelts);
4894
4895   /* If the next token is a `(', then we have a new-initializer.  */
4896   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4897     initializer = cp_parser_new_initializer (parser);
4898   else
4899     initializer = NULL_TREE;
4900
4901   /* A new-expression may not appear in an integral constant
4902      expression.  */
4903   if (cp_parser_non_integral_constant_expression (parser, "`new'"))
4904     return error_mark_node;
4905
4906   /* Create a representation of the new-expression.  */
4907   return build_new (placement, type, nelts, initializer, global_scope_p);
4908 }
4909
4910 /* Parse a new-placement.
4911
4912    new-placement:
4913      ( expression-list )
4914
4915    Returns the same representation as for an expression-list.  */
4916
4917 static tree
4918 cp_parser_new_placement (cp_parser* parser)
4919 {
4920   tree expression_list;
4921
4922   /* Parse the expression-list.  */
4923   expression_list = (cp_parser_parenthesized_expression_list
4924                      (parser, false, /*cast_p=*/false,
4925                       /*non_constant_p=*/NULL));
4926
4927   return expression_list;
4928 }
4929
4930 /* Parse a new-type-id.
4931
4932    new-type-id:
4933      type-specifier-seq new-declarator [opt]
4934
4935    Returns the TYPE allocated.  If the new-type-id indicates an array
4936    type, *NELTS is set to the number of elements in the last array
4937    bound; the TYPE will not include the last array bound.  */
4938
4939 static tree
4940 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
4941 {
4942   cp_decl_specifier_seq type_specifier_seq;
4943   cp_declarator *new_declarator;
4944   cp_declarator *declarator;
4945   cp_declarator *outer_declarator;
4946   const char *saved_message;
4947   tree type;
4948
4949   /* The type-specifier sequence must not contain type definitions.
4950      (It cannot contain declarations of new types either, but if they
4951      are not definitions we will catch that because they are not
4952      complete.)  */
4953   saved_message = parser->type_definition_forbidden_message;
4954   parser->type_definition_forbidden_message
4955     = "types may not be defined in a new-type-id";
4956   /* Parse the type-specifier-seq.  */
4957   cp_parser_type_specifier_seq (parser, &type_specifier_seq);
4958   /* Restore the old message.  */
4959   parser->type_definition_forbidden_message = saved_message;
4960   /* Parse the new-declarator.  */
4961   new_declarator = cp_parser_new_declarator_opt (parser);
4962
4963   /* Determine the number of elements in the last array dimension, if
4964      any.  */
4965   *nelts = NULL_TREE;
4966   /* Skip down to the last array dimension.  */
4967   declarator = new_declarator;
4968   outer_declarator = NULL;
4969   while (declarator && (declarator->kind == cdk_pointer
4970                         || declarator->kind == cdk_ptrmem))
4971     {
4972       outer_declarator = declarator;
4973       declarator = declarator->declarator;
4974     }
4975   while (declarator
4976          && declarator->kind == cdk_array
4977          && declarator->declarator
4978          && declarator->declarator->kind == cdk_array)
4979     {
4980       outer_declarator = declarator;
4981       declarator = declarator->declarator;
4982     }
4983
4984   if (declarator && declarator->kind == cdk_array)
4985     {
4986       *nelts = declarator->u.array.bounds;
4987       if (*nelts == error_mark_node)
4988         *nelts = integer_one_node;
4989       
4990       if (outer_declarator)
4991         outer_declarator->declarator = declarator->declarator;
4992       else
4993         new_declarator = NULL;
4994     }
4995
4996   type = groktypename (&type_specifier_seq, new_declarator);
4997   if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
4998     {
4999       *nelts = array_type_nelts_top (type);
5000       type = TREE_TYPE (type);
5001     }
5002   return type;
5003 }
5004
5005 /* Parse an (optional) new-declarator.
5006
5007    new-declarator:
5008      ptr-operator new-declarator [opt]
5009      direct-new-declarator
5010
5011    Returns the declarator.  */
5012
5013 static cp_declarator *
5014 cp_parser_new_declarator_opt (cp_parser* parser)
5015 {
5016   enum tree_code code;
5017   tree type;
5018   cp_cv_quals cv_quals;
5019
5020   /* We don't know if there's a ptr-operator next, or not.  */
5021   cp_parser_parse_tentatively (parser);
5022   /* Look for a ptr-operator.  */
5023   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5024   /* If that worked, look for more new-declarators.  */
5025   if (cp_parser_parse_definitely (parser))
5026     {
5027       cp_declarator *declarator;
5028
5029       /* Parse another optional declarator.  */
5030       declarator = cp_parser_new_declarator_opt (parser);
5031
5032       /* Create the representation of the declarator.  */
5033       if (type)
5034         declarator = make_ptrmem_declarator (cv_quals, type, declarator);
5035       else if (code == INDIRECT_REF)
5036         declarator = make_pointer_declarator (cv_quals, declarator);
5037       else
5038         declarator = make_reference_declarator (cv_quals, declarator);
5039
5040       return declarator;
5041     }
5042
5043   /* If the next token is a `[', there is a direct-new-declarator.  */
5044   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5045     return cp_parser_direct_new_declarator (parser);
5046
5047   return NULL;
5048 }
5049
5050 /* Parse a direct-new-declarator.
5051
5052    direct-new-declarator:
5053      [ expression ]
5054      direct-new-declarator [constant-expression]
5055
5056    */
5057
5058 static cp_declarator *
5059 cp_parser_direct_new_declarator (cp_parser* parser)
5060 {
5061   cp_declarator *declarator = NULL;
5062
5063   while (true)
5064     {
5065       tree expression;
5066
5067       /* Look for the opening `['.  */
5068       cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
5069       /* The first expression is not required to be constant.  */
5070       if (!declarator)
5071         {
5072           expression = cp_parser_expression (parser, /*cast_p=*/false);
5073           /* The standard requires that the expression have integral
5074              type.  DR 74 adds enumeration types.  We believe that the
5075              real intent is that these expressions be handled like the
5076              expression in a `switch' condition, which also allows
5077              classes with a single conversion to integral or
5078              enumeration type.  */
5079           if (!processing_template_decl)
5080             {
5081               expression
5082                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5083                                               expression,
5084                                               /*complain=*/true);
5085               if (!expression)
5086                 {
5087                   error ("expression in new-declarator must have integral "
5088                          "or enumeration type");
5089                   expression = error_mark_node;
5090                 }
5091             }
5092         }
5093       /* But all the other expressions must be.  */
5094       else
5095         expression
5096           = cp_parser_constant_expression (parser,
5097                                            /*allow_non_constant=*/false,
5098                                            NULL);
5099       /* Look for the closing `]'.  */
5100       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5101
5102       /* Add this bound to the declarator.  */
5103       declarator = make_array_declarator (declarator, expression);
5104
5105       /* If the next token is not a `[', then there are no more
5106          bounds.  */
5107       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5108         break;
5109     }
5110
5111   return declarator;
5112 }
5113
5114 /* Parse a new-initializer.
5115
5116    new-initializer:
5117      ( expression-list [opt] )
5118
5119    Returns a representation of the expression-list.  If there is no
5120    expression-list, VOID_ZERO_NODE is returned.  */
5121
5122 static tree
5123 cp_parser_new_initializer (cp_parser* parser)
5124 {
5125   tree expression_list;
5126
5127   expression_list = (cp_parser_parenthesized_expression_list
5128                      (parser, false, /*cast_p=*/false,
5129                       /*non_constant_p=*/NULL));
5130   if (!expression_list)
5131     expression_list = void_zero_node;
5132
5133   return expression_list;
5134 }
5135
5136 /* Parse a delete-expression.
5137
5138    delete-expression:
5139      :: [opt] delete cast-expression
5140      :: [opt] delete [ ] cast-expression
5141
5142    Returns a representation of the expression.  */
5143
5144 static tree
5145 cp_parser_delete_expression (cp_parser* parser)
5146 {
5147   bool global_scope_p;
5148   bool array_p;
5149   tree expression;
5150
5151   /* Look for the optional `::' operator.  */
5152   global_scope_p
5153     = (cp_parser_global_scope_opt (parser,
5154                                    /*current_scope_valid_p=*/false)
5155        != NULL_TREE);
5156   /* Look for the `delete' keyword.  */
5157   cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
5158   /* See if the array syntax is in use.  */
5159   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5160     {
5161       /* Consume the `[' token.  */
5162       cp_lexer_consume_token (parser->lexer);
5163       /* Look for the `]' token.  */
5164       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5165       /* Remember that this is the `[]' construct.  */
5166       array_p = true;
5167     }
5168   else
5169     array_p = false;
5170
5171   /* Parse the cast-expression.  */
5172   expression = cp_parser_simple_cast_expression (parser);
5173
5174   /* A delete-expression may not appear in an integral constant
5175      expression.  */
5176   if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
5177     return error_mark_node;
5178
5179   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5180 }
5181
5182 /* Parse a cast-expression.
5183
5184    cast-expression:
5185      unary-expression
5186      ( type-id ) cast-expression
5187
5188    ADDRESS_P is true iff the unary-expression is appearing as the
5189    operand of the `&' operator.   CAST_P is true if this expression is
5190    the target of a cast.
5191
5192    Returns a representation of the expression.  */
5193
5194 static tree
5195 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5196 {
5197   /* If it's a `(', then we might be looking at a cast.  */
5198   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5199     {
5200       tree type = NULL_TREE;
5201       tree expr = NULL_TREE;
5202       bool compound_literal_p;
5203       const char *saved_message;
5204
5205       /* There's no way to know yet whether or not this is a cast.
5206          For example, `(int (3))' is a unary-expression, while `(int)
5207          3' is a cast.  So, we resort to parsing tentatively.  */
5208       cp_parser_parse_tentatively (parser);
5209       /* Types may not be defined in a cast.  */
5210       saved_message = parser->type_definition_forbidden_message;
5211       parser->type_definition_forbidden_message
5212         = "types may not be defined in casts";
5213       /* Consume the `('.  */
5214       cp_lexer_consume_token (parser->lexer);
5215       /* A very tricky bit is that `(struct S) { 3 }' is a
5216          compound-literal (which we permit in C++ as an extension).
5217          But, that construct is not a cast-expression -- it is a
5218          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5219          is legal; if the compound-literal were a cast-expression,
5220          you'd need an extra set of parentheses.)  But, if we parse
5221          the type-id, and it happens to be a class-specifier, then we
5222          will commit to the parse at that point, because we cannot
5223          undo the action that is done when creating a new class.  So,
5224          then we cannot back up and do a postfix-expression.
5225
5226          Therefore, we scan ahead to the closing `)', and check to see
5227          if the token after the `)' is a `{'.  If so, we are not
5228          looking at a cast-expression.
5229
5230          Save tokens so that we can put them back.  */
5231       cp_lexer_save_tokens (parser->lexer);
5232       /* Skip tokens until the next token is a closing parenthesis.
5233          If we find the closing `)', and the next token is a `{', then
5234          we are looking at a compound-literal.  */
5235       compound_literal_p
5236         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5237                                                   /*consume_paren=*/true)
5238            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5239       /* Roll back the tokens we skipped.  */
5240       cp_lexer_rollback_tokens (parser->lexer);
5241       /* If we were looking at a compound-literal, simulate an error
5242          so that the call to cp_parser_parse_definitely below will
5243          fail.  */
5244       if (compound_literal_p)
5245         cp_parser_simulate_error (parser);
5246       else
5247         {
5248           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5249           parser->in_type_id_in_expr_p = true;
5250           /* Look for the type-id.  */
5251           type = cp_parser_type_id (parser);
5252           /* Look for the closing `)'.  */
5253           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5254           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5255         }
5256
5257       /* Restore the saved message.  */
5258       parser->type_definition_forbidden_message = saved_message;
5259
5260       /* If ok so far, parse the dependent expression. We cannot be
5261          sure it is a cast. Consider `(T ())'.  It is a parenthesized
5262          ctor of T, but looks like a cast to function returning T
5263          without a dependent expression.  */
5264       if (!cp_parser_error_occurred (parser))
5265         expr = cp_parser_cast_expression (parser, 
5266                                           /*address_p=*/false,
5267                                           /*cast_p=*/true);
5268
5269       if (cp_parser_parse_definitely (parser))
5270         {
5271           /* Warn about old-style casts, if so requested.  */
5272           if (warn_old_style_cast
5273               && !in_system_header
5274               && !VOID_TYPE_P (type)
5275               && current_lang_name != lang_name_c)
5276             warning ("use of old-style cast");
5277
5278           /* Only type conversions to integral or enumeration types
5279              can be used in constant-expressions.  */
5280           if (parser->integral_constant_expression_p
5281               && !dependent_type_p (type)
5282               && !INTEGRAL_OR_ENUMERATION_TYPE_P (type)
5283               && (cp_parser_non_integral_constant_expression
5284                   (parser,
5285                    "a cast to a type other than an integral or "
5286                    "enumeration type")))
5287             return error_mark_node;
5288
5289           /* Perform the cast.  */
5290           expr = build_c_cast (type, expr);
5291           return expr;
5292         }
5293     }
5294
5295   /* If we get here, then it's not a cast, so it must be a
5296      unary-expression.  */
5297   return cp_parser_unary_expression (parser, address_p, cast_p);
5298 }
5299
5300 /* Parse a binary expression of the general form:
5301
5302    pm-expression:
5303      cast-expression
5304      pm-expression .* cast-expression
5305      pm-expression ->* cast-expression
5306
5307    multiplicative-expression:
5308      pm-expression
5309      multiplicative-expression * pm-expression
5310      multiplicative-expression / pm-expression
5311      multiplicative-expression % pm-expression
5312
5313    additive-expression:
5314      multiplicative-expression
5315      additive-expression + multiplicative-expression
5316      additive-expression - multiplicative-expression
5317
5318    shift-expression:
5319      additive-expression
5320      shift-expression << additive-expression
5321      shift-expression >> additive-expression
5322
5323    relational-expression:
5324      shift-expression
5325      relational-expression < shift-expression
5326      relational-expression > shift-expression
5327      relational-expression <= shift-expression
5328      relational-expression >= shift-expression
5329
5330   GNU Extension:
5331   
5332    relational-expression:
5333      relational-expression <? shift-expression
5334      relational-expression >? shift-expression
5335
5336    equality-expression:
5337      relational-expression
5338      equality-expression == relational-expression
5339      equality-expression != relational-expression
5340
5341    and-expression:
5342      equality-expression
5343      and-expression & equality-expression
5344
5345    exclusive-or-expression:
5346      and-expression
5347      exclusive-or-expression ^ and-expression
5348
5349    inclusive-or-expression:
5350      exclusive-or-expression
5351      inclusive-or-expression | exclusive-or-expression
5352
5353    logical-and-expression:
5354      inclusive-or-expression
5355      logical-and-expression && inclusive-or-expression
5356
5357    logical-or-expression:
5358      logical-and-expression
5359      logical-or-expression || logical-and-expression
5360
5361    All these are implemented with a single function like:
5362
5363    binary-expression:
5364      simple-cast-expression
5365      binary-expression <token> binary-expression
5366
5367    CAST_P is true if this expression is the target of a cast.
5368
5369    The binops_by_token map is used to get the tree codes for each <token> type.
5370    binary-expressions are associated according to a precedence table.  */
5371
5372 #define TOKEN_PRECEDENCE(token) \
5373   ((token->type == CPP_GREATER && !parser->greater_than_is_operator_p) \
5374    ? PREC_NOT_OPERATOR \
5375    : binops_by_token[token->type].prec)
5376
5377 static tree
5378 cp_parser_binary_expression (cp_parser* parser, bool cast_p)
5379 {
5380   cp_parser_expression_stack stack;
5381   cp_parser_expression_stack_entry *sp = &stack[0];
5382   tree lhs, rhs;
5383   cp_token *token;
5384   enum tree_code tree_type;
5385   enum cp_parser_prec prec = PREC_NOT_OPERATOR, new_prec, lookahead_prec;
5386   bool overloaded_p;
5387
5388   /* Parse the first expression.  */
5389   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
5390
5391   for (;;)
5392     {
5393       /* Get an operator token.  */
5394       token = cp_lexer_peek_token (parser->lexer);
5395       new_prec = TOKEN_PRECEDENCE (token);
5396
5397       /* Popping an entry off the stack means we completed a subexpression:
5398          - either we found a token which is not an operator (`>' where it is not
5399            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
5400            will happen repeatedly;
5401          - or, we found an operator which has lower priority.  This is the case 
5402            where the recursive descent *ascends*, as in `3 * 4 + 5' after
5403            parsing `3 * 4'.  */
5404       if (new_prec <= prec)
5405         {
5406           if (sp == stack)
5407             break;
5408           else
5409             goto pop;
5410         }
5411
5412      get_rhs:
5413       tree_type = binops_by_token[token->type].tree_type;
5414
5415       /* We used the operator token.  */
5416       cp_lexer_consume_token (parser->lexer);
5417
5418       /* Extract another operand.  It may be the RHS of this expression
5419          or the LHS of a new, higher priority expression.  */
5420       rhs = cp_parser_simple_cast_expression (parser);
5421
5422       /* Get another operator token.  Look up its precedence to avoid
5423          building a useless (immediately popped) stack entry for common
5424          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
5425       token = cp_lexer_peek_token (parser->lexer);
5426       lookahead_prec = TOKEN_PRECEDENCE (token);
5427       if (lookahead_prec > new_prec)
5428         {
5429           /* ... and prepare to parse the RHS of the new, higher priority
5430              expression.  Since precedence levels on the stack are
5431              monotonically increasing, we do not have to care about
5432              stack overflows.  */
5433           sp->prec = prec;
5434           sp->tree_type = tree_type;
5435           sp->lhs = lhs;
5436           sp++;
5437           lhs = rhs;
5438           prec = new_prec;
5439           new_prec = lookahead_prec;
5440           goto get_rhs;
5441
5442          pop:
5443           /* If the stack is not empty, we have parsed into LHS the right side
5444              (`4' in the example above) of an expression we had suspended.
5445              We can use the information on the stack to recover the LHS (`3') 
5446              from the stack together with the tree code (`MULT_EXPR'), and
5447              the precedence of the higher level subexpression
5448              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
5449              which will be used to actually build the additive expression.  */
5450           --sp;
5451           prec = sp->prec;
5452           tree_type = sp->tree_type;
5453           rhs = lhs;
5454           lhs = sp->lhs;
5455         }
5456
5457       overloaded_p = false;
5458       lhs = build_x_binary_op (tree_type, lhs, rhs, &overloaded_p);
5459
5460       /* If the binary operator required the use of an overloaded operator,
5461          then this expression cannot be an integral constant-expression.
5462          An overloaded operator can be used even if both operands are
5463          otherwise permissible in an integral constant-expression if at
5464          least one of the operands is of enumeration type.  */
5465
5466       if (overloaded_p
5467           && (cp_parser_non_integral_constant_expression 
5468               (parser, "calls to overloaded operators")))
5469         return error_mark_node;
5470     }
5471
5472   return lhs;
5473 }
5474
5475
5476 /* Parse the `? expression : assignment-expression' part of a
5477    conditional-expression.  The LOGICAL_OR_EXPR is the
5478    logical-or-expression that started the conditional-expression.
5479    Returns a representation of the entire conditional-expression.
5480
5481    This routine is used by cp_parser_assignment_expression.
5482
5483      ? expression : assignment-expression
5484
5485    GNU Extensions:
5486
5487      ? : assignment-expression */
5488
5489 static tree
5490 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
5491 {
5492   tree expr;
5493   tree assignment_expr;
5494
5495   /* Consume the `?' token.  */
5496   cp_lexer_consume_token (parser->lexer);
5497   if (cp_parser_allow_gnu_extensions_p (parser)
5498       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
5499     /* Implicit true clause.  */
5500     expr = NULL_TREE;
5501   else
5502     /* Parse the expression.  */
5503     expr = cp_parser_expression (parser, /*cast_p=*/false);
5504
5505   /* The next token should be a `:'.  */
5506   cp_parser_require (parser, CPP_COLON, "`:'");
5507   /* Parse the assignment-expression.  */
5508   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5509
5510   /* Build the conditional-expression.  */
5511   return build_x_conditional_expr (logical_or_expr,
5512                                    expr,
5513                                    assignment_expr);
5514 }
5515
5516 /* Parse an assignment-expression.
5517
5518    assignment-expression:
5519      conditional-expression
5520      logical-or-expression assignment-operator assignment_expression
5521      throw-expression
5522
5523    CAST_P is true if this expression is the target of a cast.
5524
5525    Returns a representation for the expression.  */
5526
5527 static tree
5528 cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
5529 {
5530   tree expr;
5531
5532   /* If the next token is the `throw' keyword, then we're looking at
5533      a throw-expression.  */
5534   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
5535     expr = cp_parser_throw_expression (parser);
5536   /* Otherwise, it must be that we are looking at a
5537      logical-or-expression.  */
5538   else
5539     {
5540       /* Parse the binary expressions (logical-or-expression).  */
5541       expr = cp_parser_binary_expression (parser, cast_p);
5542       /* If the next token is a `?' then we're actually looking at a
5543          conditional-expression.  */
5544       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
5545         return cp_parser_question_colon_clause (parser, expr);
5546       else
5547         {
5548           enum tree_code assignment_operator;
5549
5550           /* If it's an assignment-operator, we're using the second
5551              production.  */
5552           assignment_operator
5553             = cp_parser_assignment_operator_opt (parser);
5554           if (assignment_operator != ERROR_MARK)
5555             {
5556               tree rhs;
5557
5558               /* Parse the right-hand side of the assignment.  */
5559               rhs = cp_parser_assignment_expression (parser, cast_p);
5560               /* An assignment may not appear in a
5561                  constant-expression.  */
5562               if (cp_parser_non_integral_constant_expression (parser,
5563                                                               "an assignment"))
5564                 return error_mark_node;
5565               /* Build the assignment expression.  */
5566               expr = build_x_modify_expr (expr,
5567                                           assignment_operator,
5568                                           rhs);
5569             }
5570         }
5571     }
5572
5573   return expr;
5574 }
5575
5576 /* Parse an (optional) assignment-operator.
5577
5578    assignment-operator: one of
5579      = *= /= %= += -= >>= <<= &= ^= |=
5580
5581    GNU Extension:
5582
5583    assignment-operator: one of
5584      <?= >?=
5585
5586    If the next token is an assignment operator, the corresponding tree
5587    code is returned, and the token is consumed.  For example, for
5588    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
5589    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
5590    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
5591    operator, ERROR_MARK is returned.  */
5592
5593 static enum tree_code
5594 cp_parser_assignment_operator_opt (cp_parser* parser)
5595 {
5596   enum tree_code op;
5597   cp_token *token;
5598
5599   /* Peek at the next toen.  */
5600   token = cp_lexer_peek_token (parser->lexer);
5601
5602   switch (token->type)
5603     {
5604     case CPP_EQ:
5605       op = NOP_EXPR;
5606       break;
5607
5608     case CPP_MULT_EQ:
5609       op = MULT_EXPR;
5610       break;
5611
5612     case CPP_DIV_EQ:
5613       op = TRUNC_DIV_EXPR;
5614       break;
5615
5616     case CPP_MOD_EQ:
5617       op = TRUNC_MOD_EXPR;
5618       break;
5619
5620     case CPP_PLUS_EQ:
5621       op = PLUS_EXPR;
5622       break;
5623
5624     case CPP_MINUS_EQ:
5625       op = MINUS_EXPR;
5626       break;
5627
5628     case CPP_RSHIFT_EQ:
5629       op = RSHIFT_EXPR;
5630       break;
5631
5632     case CPP_LSHIFT_EQ:
5633       op = LSHIFT_EXPR;
5634       break;
5635
5636     case CPP_AND_EQ:
5637       op = BIT_AND_EXPR;
5638       break;
5639
5640     case CPP_XOR_EQ:
5641       op = BIT_XOR_EXPR;
5642       break;
5643
5644     case CPP_OR_EQ:
5645       op = BIT_IOR_EXPR;
5646       break;
5647
5648     case CPP_MIN_EQ:
5649       op = MIN_EXPR;
5650       break;
5651
5652     case CPP_MAX_EQ:
5653       op = MAX_EXPR;
5654       break;
5655
5656     default:
5657       /* Nothing else is an assignment operator.  */
5658       op = ERROR_MARK;
5659     }
5660
5661   /* If it was an assignment operator, consume it.  */
5662   if (op != ERROR_MARK)
5663     cp_lexer_consume_token (parser->lexer);
5664
5665   return op;
5666 }
5667
5668 /* Parse an expression.
5669
5670    expression:
5671      assignment-expression
5672      expression , assignment-expression
5673
5674    CAST_P is true if this expression is the target of a cast.
5675
5676    Returns a representation of the expression.  */
5677
5678 static tree
5679 cp_parser_expression (cp_parser* parser, bool cast_p)
5680 {
5681   tree expression = NULL_TREE;
5682
5683   while (true)
5684     {
5685       tree assignment_expression;
5686
5687       /* Parse the next assignment-expression.  */
5688       assignment_expression
5689         = cp_parser_assignment_expression (parser, cast_p);
5690       /* If this is the first assignment-expression, we can just
5691          save it away.  */
5692       if (!expression)
5693         expression = assignment_expression;
5694       else
5695         expression = build_x_compound_expr (expression,
5696                                             assignment_expression);
5697       /* If the next token is not a comma, then we are done with the
5698          expression.  */
5699       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5700         break;
5701       /* Consume the `,'.  */
5702       cp_lexer_consume_token (parser->lexer);
5703       /* A comma operator cannot appear in a constant-expression.  */
5704       if (cp_parser_non_integral_constant_expression (parser,
5705                                                       "a comma operator"))
5706         expression = error_mark_node;
5707     }
5708
5709   return expression;
5710 }
5711
5712 /* Parse a constant-expression.
5713
5714    constant-expression:
5715      conditional-expression
5716
5717   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
5718   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
5719   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
5720   is false, NON_CONSTANT_P should be NULL.  */
5721
5722 static tree
5723 cp_parser_constant_expression (cp_parser* parser,
5724                                bool allow_non_constant_p,
5725                                bool *non_constant_p)
5726 {
5727   bool saved_integral_constant_expression_p;
5728   bool saved_allow_non_integral_constant_expression_p;
5729   bool saved_non_integral_constant_expression_p;
5730   tree expression;
5731
5732   /* It might seem that we could simply parse the
5733      conditional-expression, and then check to see if it were
5734      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
5735      one that the compiler can figure out is constant, possibly after
5736      doing some simplifications or optimizations.  The standard has a
5737      precise definition of constant-expression, and we must honor
5738      that, even though it is somewhat more restrictive.
5739
5740      For example:
5741
5742        int i[(2, 3)];
5743
5744      is not a legal declaration, because `(2, 3)' is not a
5745      constant-expression.  The `,' operator is forbidden in a
5746      constant-expression.  However, GCC's constant-folding machinery
5747      will fold this operation to an INTEGER_CST for `3'.  */
5748
5749   /* Save the old settings.  */
5750   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
5751   saved_allow_non_integral_constant_expression_p
5752     = parser->allow_non_integral_constant_expression_p;
5753   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
5754   /* We are now parsing a constant-expression.  */
5755   parser->integral_constant_expression_p = true;
5756   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
5757   parser->non_integral_constant_expression_p = false;
5758   /* Although the grammar says "conditional-expression", we parse an
5759      "assignment-expression", which also permits "throw-expression"
5760      and the use of assignment operators.  In the case that
5761      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
5762      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
5763      actually essential that we look for an assignment-expression.
5764      For example, cp_parser_initializer_clauses uses this function to
5765      determine whether a particular assignment-expression is in fact
5766      constant.  */
5767   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5768   /* Restore the old settings.  */
5769   parser->integral_constant_expression_p 
5770     = saved_integral_constant_expression_p;
5771   parser->allow_non_integral_constant_expression_p
5772     = saved_allow_non_integral_constant_expression_p;
5773   if (allow_non_constant_p)
5774     *non_constant_p = parser->non_integral_constant_expression_p;
5775   else if (parser->non_integral_constant_expression_p)
5776     expression = error_mark_node;
5777   parser->non_integral_constant_expression_p 
5778     = saved_non_integral_constant_expression_p;
5779
5780   return expression;
5781 }
5782
5783 /* Parse __builtin_offsetof.
5784
5785    offsetof-expression:
5786      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
5787
5788    offsetof-member-designator:
5789      id-expression
5790      | offsetof-member-designator "." id-expression
5791      | offsetof-member-designator "[" expression "]"
5792 */
5793
5794 static tree
5795 cp_parser_builtin_offsetof (cp_parser *parser)
5796 {
5797   int save_ice_p, save_non_ice_p;
5798   tree type, expr;
5799   cp_id_kind dummy;
5800
5801   /* We're about to accept non-integral-constant things, but will
5802      definitely yield an integral constant expression.  Save and
5803      restore these values around our local parsing.  */
5804   save_ice_p = parser->integral_constant_expression_p;
5805   save_non_ice_p = parser->non_integral_constant_expression_p;
5806
5807   /* Consume the "__builtin_offsetof" token.  */
5808   cp_lexer_consume_token (parser->lexer);
5809   /* Consume the opening `('.  */
5810   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
5811   /* Parse the type-id.  */
5812   type = cp_parser_type_id (parser);
5813   /* Look for the `,'.  */
5814   cp_parser_require (parser, CPP_COMMA, "`,'");
5815
5816   /* Build the (type *)null that begins the traditional offsetof macro.  */
5817   expr = build_static_cast (build_pointer_type (type), null_pointer_node);
5818
5819   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
5820   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
5821                                                  true, &dummy);
5822   while (true)
5823     {
5824       cp_token *token = cp_lexer_peek_token (parser->lexer);
5825       switch (token->type)
5826         {
5827         case CPP_OPEN_SQUARE:
5828           /* offsetof-member-designator "[" expression "]" */
5829           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
5830           break;
5831
5832         case CPP_DOT:
5833           /* offsetof-member-designator "." identifier */
5834           cp_lexer_consume_token (parser->lexer);
5835           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
5836                                                          true, &dummy);
5837           break;
5838
5839         case CPP_CLOSE_PAREN:
5840           /* Consume the ")" token.  */
5841           cp_lexer_consume_token (parser->lexer);
5842           goto success;
5843
5844         default:
5845           /* Error.  We know the following require will fail, but
5846              that gives the proper error message.  */
5847           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5848           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
5849           expr = error_mark_node;
5850           goto failure;
5851         }
5852     }
5853
5854  success:
5855   /* If we're processing a template, we can't finish the semantics yet.
5856      Otherwise we can fold the entire expression now.  */
5857   if (processing_template_decl)
5858     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
5859   else
5860     expr = fold_offsetof (expr);
5861
5862  failure:
5863   parser->integral_constant_expression_p = save_ice_p;
5864   parser->non_integral_constant_expression_p = save_non_ice_p;
5865
5866   return expr;
5867 }
5868
5869 /* Statements [gram.stmt.stmt]  */
5870
5871 /* Parse a statement.
5872
5873    statement:
5874      labeled-statement
5875      expression-statement
5876      compound-statement
5877      selection-statement
5878      iteration-statement
5879      jump-statement
5880      declaration-statement
5881      try-block  */
5882
5883 static void
5884 cp_parser_statement (cp_parser* parser, tree in_statement_expr)
5885 {
5886   tree statement;
5887   cp_token *token;
5888   location_t statement_location;
5889
5890   /* There is no statement yet.  */
5891   statement = NULL_TREE;
5892   /* Peek at the next token.  */
5893   token = cp_lexer_peek_token (parser->lexer);
5894   /* Remember the location of the first token in the statement.  */
5895   statement_location = token->location;
5896   /* If this is a keyword, then that will often determine what kind of
5897      statement we have.  */
5898   if (token->type == CPP_KEYWORD)
5899     {
5900       enum rid keyword = token->keyword;
5901
5902       switch (keyword)
5903         {
5904         case RID_CASE:
5905         case RID_DEFAULT:
5906           statement = cp_parser_labeled_statement (parser,
5907                                                    in_statement_expr);
5908           break;
5909
5910         case RID_IF:
5911         case RID_SWITCH:
5912           statement = cp_parser_selection_statement (parser);
5913           break;
5914
5915         case RID_WHILE:
5916         case RID_DO:
5917         case RID_FOR:
5918           statement = cp_parser_iteration_statement (parser);
5919           break;
5920
5921         case RID_BREAK:
5922         case RID_CONTINUE:
5923         case RID_RETURN:
5924         case RID_GOTO:
5925           statement = cp_parser_jump_statement (parser);
5926           break;
5927
5928         case RID_TRY:
5929           statement = cp_parser_try_block (parser);
5930           break;
5931
5932         default:
5933           /* It might be a keyword like `int' that can start a
5934              declaration-statement.  */
5935           break;
5936         }
5937     }
5938   else if (token->type == CPP_NAME)
5939     {
5940       /* If the next token is a `:', then we are looking at a
5941          labeled-statement.  */
5942       token = cp_lexer_peek_nth_token (parser->lexer, 2);
5943       if (token->type == CPP_COLON)
5944         statement = cp_parser_labeled_statement (parser, in_statement_expr);
5945     }
5946   /* Anything that starts with a `{' must be a compound-statement.  */
5947   else if (token->type == CPP_OPEN_BRACE)
5948     statement = cp_parser_compound_statement (parser, NULL, false);
5949   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
5950      a statement all its own.  */
5951   else if (token->type == CPP_PRAGMA)
5952     {
5953       cp_lexer_handle_pragma (parser->lexer);
5954       return;
5955     }
5956
5957   /* Everything else must be a declaration-statement or an
5958      expression-statement.  Try for the declaration-statement
5959      first, unless we are looking at a `;', in which case we know that
5960      we have an expression-statement.  */
5961   if (!statement)
5962     {
5963       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
5964         {
5965           cp_parser_parse_tentatively (parser);
5966           /* Try to parse the declaration-statement.  */
5967           cp_parser_declaration_statement (parser);
5968           /* If that worked, we're done.  */
5969           if (cp_parser_parse_definitely (parser))
5970             return;
5971         }
5972       /* Look for an expression-statement instead.  */
5973       statement = cp_parser_expression_statement (parser, in_statement_expr);
5974     }
5975
5976   /* Set the line number for the statement.  */
5977   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
5978     SET_EXPR_LOCATION (statement, statement_location);
5979 }
5980
5981 /* Parse a labeled-statement.
5982
5983    labeled-statement:
5984      identifier : statement
5985      case constant-expression : statement
5986      default : statement
5987
5988    GNU Extension:
5989
5990    labeled-statement:
5991      case constant-expression ... constant-expression : statement
5992
5993    Returns the new CASE_LABEL_EXPR, for a `case' or `default' label.
5994    For an ordinary label, returns a LABEL_EXPR.  */
5995
5996 static tree
5997 cp_parser_labeled_statement (cp_parser* parser, tree in_statement_expr)
5998 {
5999   cp_token *token;
6000   tree statement = error_mark_node;
6001
6002   /* The next token should be an identifier.  */
6003   token = cp_lexer_peek_token (parser->lexer);
6004   if (token->type != CPP_NAME
6005       && token->type != CPP_KEYWORD)
6006     {
6007       cp_parser_error (parser, "expected labeled-statement");
6008       return error_mark_node;
6009     }
6010
6011   switch (token->keyword)
6012     {
6013     case RID_CASE:
6014       {
6015         tree expr, expr_hi;
6016         cp_token *ellipsis;
6017
6018         /* Consume the `case' token.  */
6019         cp_lexer_consume_token (parser->lexer);
6020         /* Parse the constant-expression.  */
6021         expr = cp_parser_constant_expression (parser,
6022                                               /*allow_non_constant_p=*/false,
6023                                               NULL);
6024
6025         ellipsis = cp_lexer_peek_token (parser->lexer);
6026         if (ellipsis->type == CPP_ELLIPSIS)
6027           {
6028             /* Consume the `...' token.  */
6029             cp_lexer_consume_token (parser->lexer);
6030             expr_hi =
6031               cp_parser_constant_expression (parser,
6032                                              /*allow_non_constant_p=*/false,
6033                                              NULL);
6034             /* We don't need to emit warnings here, as the common code
6035                will do this for us.  */
6036           }
6037         else
6038           expr_hi = NULL_TREE;
6039
6040         if (!parser->in_switch_statement_p)
6041           error ("case label %qE not within a switch statement", expr);
6042         else
6043           statement = finish_case_label (expr, expr_hi);
6044       }
6045       break;
6046
6047     case RID_DEFAULT:
6048       /* Consume the `default' token.  */
6049       cp_lexer_consume_token (parser->lexer);
6050       if (!parser->in_switch_statement_p)
6051         error ("case label not within a switch statement");
6052       else
6053         statement = finish_case_label (NULL_TREE, NULL_TREE);
6054       break;
6055
6056     default:
6057       /* Anything else must be an ordinary label.  */
6058       statement = finish_label_stmt (cp_parser_identifier (parser));
6059       break;
6060     }
6061
6062   /* Require the `:' token.  */
6063   cp_parser_require (parser, CPP_COLON, "`:'");
6064   /* Parse the labeled statement.  */
6065   cp_parser_statement (parser, in_statement_expr);
6066
6067   /* Return the label, in the case of a `case' or `default' label.  */
6068   return statement;
6069 }
6070
6071 /* Parse an expression-statement.
6072
6073    expression-statement:
6074      expression [opt] ;
6075
6076    Returns the new EXPR_STMT -- or NULL_TREE if the expression
6077    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6078    indicates whether this expression-statement is part of an
6079    expression statement.  */
6080
6081 static tree
6082 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6083 {
6084   tree statement = NULL_TREE;
6085
6086   /* If the next token is a ';', then there is no expression
6087      statement.  */
6088   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6089     statement = cp_parser_expression (parser, /*cast_p=*/false);
6090
6091   /* Consume the final `;'.  */
6092   cp_parser_consume_semicolon_at_end_of_statement (parser);
6093
6094   if (in_statement_expr
6095       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6096     /* This is the final expression statement of a statement
6097        expression.  */
6098     statement = finish_stmt_expr_expr (statement, in_statement_expr);
6099   else if (statement)
6100     statement = finish_expr_stmt (statement);
6101   else
6102     finish_stmt ();
6103
6104   return statement;
6105 }
6106
6107 /* Parse a compound-statement.
6108
6109    compound-statement:
6110      { statement-seq [opt] }
6111
6112    Returns a tree representing the statement.  */
6113
6114 static tree
6115 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6116                               bool in_try)
6117 {
6118   tree compound_stmt;
6119
6120   /* Consume the `{'.  */
6121   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6122     return error_mark_node;
6123   /* Begin the compound-statement.  */
6124   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6125   /* Parse an (optional) statement-seq.  */
6126   cp_parser_statement_seq_opt (parser, in_statement_expr);
6127   /* Finish the compound-statement.  */
6128   finish_compound_stmt (compound_stmt);
6129   /* Consume the `}'.  */
6130   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6131
6132   return compound_stmt;
6133 }
6134
6135 /* Parse an (optional) statement-seq.
6136
6137    statement-seq:
6138      statement
6139      statement-seq [opt] statement  */
6140
6141 static void
6142 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6143 {
6144   /* Scan statements until there aren't any more.  */
6145   while (true)
6146     {
6147       /* If we're looking at a `}', then we've run out of statements.  */
6148       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE)
6149           || cp_lexer_next_token_is (parser->lexer, CPP_EOF))
6150         break;
6151
6152       /* Parse the statement.  */
6153       cp_parser_statement (parser, in_statement_expr);
6154     }
6155 }
6156
6157 /* Parse a selection-statement.
6158
6159    selection-statement:
6160      if ( condition ) statement
6161      if ( condition ) statement else statement
6162      switch ( condition ) statement
6163
6164    Returns the new IF_STMT or SWITCH_STMT.  */
6165
6166 static tree
6167 cp_parser_selection_statement (cp_parser* parser)
6168 {
6169   cp_token *token;
6170   enum rid keyword;
6171
6172   /* Peek at the next token.  */
6173   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6174
6175   /* See what kind of keyword it is.  */
6176   keyword = token->keyword;
6177   switch (keyword)
6178     {
6179     case RID_IF:
6180     case RID_SWITCH:
6181       {
6182         tree statement;
6183         tree condition;
6184
6185         /* Look for the `('.  */
6186         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6187           {
6188             cp_parser_skip_to_end_of_statement (parser);
6189             return error_mark_node;
6190           }
6191
6192         /* Begin the selection-statement.  */
6193         if (keyword == RID_IF)
6194           statement = begin_if_stmt ();
6195         else
6196           statement = begin_switch_stmt ();
6197
6198         /* Parse the condition.  */
6199         condition = cp_parser_condition (parser);
6200         /* Look for the `)'.  */
6201         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6202           cp_parser_skip_to_closing_parenthesis (parser, true, false,
6203                                                  /*consume_paren=*/true);
6204
6205         if (keyword == RID_IF)
6206           {
6207             /* Add the condition.  */
6208             finish_if_stmt_cond (condition, statement);
6209
6210             /* Parse the then-clause.  */
6211             cp_parser_implicitly_scoped_statement (parser);
6212             finish_then_clause (statement);
6213
6214             /* If the next token is `else', parse the else-clause.  */
6215             if (cp_lexer_next_token_is_keyword (parser->lexer,
6216                                                 RID_ELSE))
6217               {
6218                 /* Consume the `else' keyword.  */
6219                 cp_lexer_consume_token (parser->lexer);
6220                 begin_else_clause (statement);
6221                 /* Parse the else-clause.  */
6222                 cp_parser_implicitly_scoped_statement (parser);
6223                 finish_else_clause (statement);
6224               }
6225
6226             /* Now we're all done with the if-statement.  */
6227             finish_if_stmt (statement);
6228           }
6229         else
6230           {
6231             bool in_switch_statement_p;
6232
6233             /* Add the condition.  */
6234             finish_switch_cond (condition, statement);
6235
6236             /* Parse the body of the switch-statement.  */
6237             in_switch_statement_p = parser->in_switch_statement_p;
6238             parser->in_switch_statement_p = true;
6239             cp_parser_implicitly_scoped_statement (parser);
6240             parser->in_switch_statement_p = in_switch_statement_p;
6241
6242             /* Now we're all done with the switch-statement.  */
6243             finish_switch_stmt (statement);
6244           }
6245
6246         return statement;
6247       }
6248       break;
6249
6250     default:
6251       cp_parser_error (parser, "expected selection-statement");
6252       return error_mark_node;
6253     }
6254 }
6255
6256 /* Parse a condition.
6257
6258    condition:
6259      expression
6260      type-specifier-seq declarator = assignment-expression
6261
6262    GNU Extension:
6263
6264    condition:
6265      type-specifier-seq declarator asm-specification [opt]
6266        attributes [opt] = assignment-expression
6267
6268    Returns the expression that should be tested.  */
6269
6270 static tree
6271 cp_parser_condition (cp_parser* parser)
6272 {
6273   cp_decl_specifier_seq type_specifiers;
6274   const char *saved_message;
6275
6276   /* Try the declaration first.  */
6277   cp_parser_parse_tentatively (parser);
6278   /* New types are not allowed in the type-specifier-seq for a
6279      condition.  */
6280   saved_message = parser->type_definition_forbidden_message;
6281   parser->type_definition_forbidden_message
6282     = "types may not be defined in conditions";
6283   /* Parse the type-specifier-seq.  */
6284   cp_parser_type_specifier_seq (parser, &type_specifiers);
6285   /* Restore the saved message.  */
6286   parser->type_definition_forbidden_message = saved_message;
6287   /* If all is well, we might be looking at a declaration.  */
6288   if (!cp_parser_error_occurred (parser))
6289     {
6290       tree decl;
6291       tree asm_specification;
6292       tree attributes;
6293       cp_declarator *declarator;
6294       tree initializer = NULL_TREE;
6295
6296       /* Parse the declarator.  */
6297       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6298                                          /*ctor_dtor_or_conv_p=*/NULL,
6299                                          /*parenthesized_p=*/NULL,
6300                                          /*member_p=*/false);
6301       /* Parse the attributes.  */
6302       attributes = cp_parser_attributes_opt (parser);
6303       /* Parse the asm-specification.  */
6304       asm_specification = cp_parser_asm_specification_opt (parser);
6305       /* If the next token is not an `=', then we might still be
6306          looking at an expression.  For example:
6307
6308            if (A(a).x)
6309
6310          looks like a decl-specifier-seq and a declarator -- but then
6311          there is no `=', so this is an expression.  */
6312       cp_parser_require (parser, CPP_EQ, "`='");
6313       /* If we did see an `=', then we are looking at a declaration
6314          for sure.  */
6315       if (cp_parser_parse_definitely (parser))
6316         {
6317           tree pushed_scope;    
6318
6319           /* Create the declaration.  */
6320           decl = start_decl (declarator, &type_specifiers,
6321                              /*initialized_p=*/true,
6322                              attributes, /*prefix_attributes=*/NULL_TREE,
6323                              &pushed_scope);
6324           /* Parse the assignment-expression.  */
6325           initializer = cp_parser_assignment_expression (parser,
6326                                                          /*cast_p=*/false);
6327
6328           /* Process the initializer.  */
6329           cp_finish_decl (decl,
6330                           initializer,
6331                           asm_specification,
6332                           LOOKUP_ONLYCONVERTING);
6333
6334           if (pushed_scope)
6335             pop_scope (pushed_scope);
6336
6337           return convert_from_reference (decl);
6338         }
6339     }
6340   /* If we didn't even get past the declarator successfully, we are
6341      definitely not looking at a declaration.  */
6342   else
6343     cp_parser_abort_tentative_parse (parser);
6344
6345   /* Otherwise, we are looking at an expression.  */
6346   return cp_parser_expression (parser, /*cast_p=*/false);
6347 }
6348
6349 /* Parse an iteration-statement.
6350
6351    iteration-statement:
6352      while ( condition ) statement
6353      do statement while ( expression ) ;
6354      for ( for-init-statement condition [opt] ; expression [opt] )
6355        statement
6356
6357    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6358
6359 static tree
6360 cp_parser_iteration_statement (cp_parser* parser)
6361 {
6362   cp_token *token;
6363   enum rid keyword;
6364   tree statement;
6365   bool in_iteration_statement_p;
6366
6367
6368   /* Peek at the next token.  */
6369   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6370   if (!token)
6371     return error_mark_node;
6372
6373   /* Remember whether or not we are already within an iteration
6374      statement.  */
6375   in_iteration_statement_p = parser->in_iteration_statement_p;
6376
6377   /* See what kind of keyword it is.  */
6378   keyword = token->keyword;
6379   switch (keyword)
6380     {
6381     case RID_WHILE:
6382       {
6383         tree condition;
6384
6385         /* Begin the while-statement.  */
6386         statement = begin_while_stmt ();
6387         /* Look for the `('.  */
6388         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6389         /* Parse the condition.  */
6390         condition = cp_parser_condition (parser);
6391         finish_while_stmt_cond (condition, statement);
6392         /* Look for the `)'.  */
6393         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6394         /* Parse the dependent statement.  */
6395         parser->in_iteration_statement_p = true;
6396         cp_parser_already_scoped_statement (parser);
6397         parser->in_iteration_statement_p = in_iteration_statement_p;
6398         /* We're done with the while-statement.  */
6399         finish_while_stmt (statement);
6400       }
6401       break;
6402
6403     case RID_DO:
6404       {
6405         tree expression;
6406
6407         /* Begin the do-statement.  */
6408         statement = begin_do_stmt ();
6409         /* Parse the body of the do-statement.  */
6410         parser->in_iteration_statement_p = true;
6411         cp_parser_implicitly_scoped_statement (parser);
6412         parser->in_iteration_statement_p = in_iteration_statement_p;
6413         finish_do_body (statement);
6414         /* Look for the `while' keyword.  */
6415         cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6416         /* Look for the `('.  */
6417         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6418         /* Parse the expression.  */
6419         expression = cp_parser_expression (parser, /*cast_p=*/false);
6420         /* We're done with the do-statement.  */
6421         finish_do_stmt (expression, statement);
6422         /* Look for the `)'.  */
6423         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6424         /* Look for the `;'.  */
6425         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6426       }
6427       break;
6428
6429     case RID_FOR:
6430       {
6431         tree condition = NULL_TREE;
6432         tree expression = NULL_TREE;
6433
6434         /* Begin the for-statement.  */
6435         statement = begin_for_stmt ();
6436         /* Look for the `('.  */
6437         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6438         /* Parse the initialization.  */
6439         cp_parser_for_init_statement (parser);
6440         finish_for_init_stmt (statement);
6441
6442         /* If there's a condition, process it.  */
6443         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6444           condition = cp_parser_condition (parser);
6445         finish_for_cond (condition, statement);
6446         /* Look for the `;'.  */
6447         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6448
6449         /* If there's an expression, process it.  */
6450         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6451           expression = cp_parser_expression (parser, /*cast_p=*/false);
6452         finish_for_expr (expression, statement);
6453         /* Look for the `)'.  */
6454         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6455
6456         /* Parse the body of the for-statement.  */
6457         parser->in_iteration_statement_p = true;
6458         cp_parser_already_scoped_statement (parser);
6459         parser->in_iteration_statement_p = in_iteration_statement_p;
6460
6461         /* We're done with the for-statement.  */
6462         finish_for_stmt (statement);
6463       }
6464       break;
6465
6466     default:
6467       cp_parser_error (parser, "expected iteration-statement");
6468       statement = error_mark_node;
6469       break;
6470     }
6471
6472   return statement;
6473 }
6474
6475 /* Parse a for-init-statement.
6476
6477    for-init-statement:
6478      expression-statement
6479      simple-declaration  */
6480
6481 static void
6482 cp_parser_for_init_statement (cp_parser* parser)
6483 {
6484   /* If the next token is a `;', then we have an empty
6485      expression-statement.  Grammatically, this is also a
6486      simple-declaration, but an invalid one, because it does not
6487      declare anything.  Therefore, if we did not handle this case
6488      specially, we would issue an error message about an invalid
6489      declaration.  */
6490   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6491     {
6492       /* We're going to speculatively look for a declaration, falling back
6493          to an expression, if necessary.  */
6494       cp_parser_parse_tentatively (parser);
6495       /* Parse the declaration.  */
6496       cp_parser_simple_declaration (parser,
6497                                     /*function_definition_allowed_p=*/false);
6498       /* If the tentative parse failed, then we shall need to look for an
6499          expression-statement.  */
6500       if (cp_parser_parse_definitely (parser))
6501         return;
6502     }
6503
6504   cp_parser_expression_statement (parser, false);
6505 }
6506
6507 /* Parse a jump-statement.
6508
6509    jump-statement:
6510      break ;
6511      continue ;
6512      return expression [opt] ;
6513      goto identifier ;
6514
6515    GNU extension:
6516
6517    jump-statement:
6518      goto * expression ;
6519
6520    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
6521
6522 static tree
6523 cp_parser_jump_statement (cp_parser* parser)
6524 {
6525   tree statement = error_mark_node;
6526   cp_token *token;
6527   enum rid keyword;
6528
6529   /* Peek at the next token.  */
6530   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6531   if (!token)
6532     return error_mark_node;
6533
6534   /* See what kind of keyword it is.  */
6535   keyword = token->keyword;
6536   switch (keyword)
6537     {
6538     case RID_BREAK:
6539       if (!parser->in_switch_statement_p
6540           && !parser->in_iteration_statement_p)
6541         {
6542           error ("break statement not within loop or switch");
6543           statement = error_mark_node;
6544         }
6545       else
6546         statement = finish_break_stmt ();
6547       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6548       break;
6549
6550     case RID_CONTINUE:
6551       if (!parser->in_iteration_statement_p)
6552         {
6553           error ("continue statement not within a loop");
6554           statement = error_mark_node;
6555         }
6556       else
6557         statement = finish_continue_stmt ();
6558       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6559       break;
6560
6561     case RID_RETURN:
6562       {
6563         tree expr;
6564
6565         /* If the next token is a `;', then there is no
6566            expression.  */
6567         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6568           expr = cp_parser_expression (parser, /*cast_p=*/false);
6569         else
6570           expr = NULL_TREE;
6571         /* Build the return-statement.  */
6572         statement = finish_return_stmt (expr);
6573         /* Look for the final `;'.  */
6574         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6575       }
6576       break;
6577
6578     case RID_GOTO:
6579       /* Create the goto-statement.  */
6580       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
6581         {
6582           /* Issue a warning about this use of a GNU extension.  */
6583           if (pedantic)
6584             pedwarn ("ISO C++ forbids computed gotos");
6585           /* Consume the '*' token.  */
6586           cp_lexer_consume_token (parser->lexer);
6587           /* Parse the dependent expression.  */
6588           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
6589         }
6590       else
6591         finish_goto_stmt (cp_parser_identifier (parser));
6592       /* Look for the final `;'.  */
6593       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6594       break;
6595
6596     default:
6597       cp_parser_error (parser, "expected jump-statement");
6598       break;
6599     }
6600
6601   return statement;
6602 }
6603
6604 /* Parse a declaration-statement.
6605
6606    declaration-statement:
6607      block-declaration  */
6608
6609 static void
6610 cp_parser_declaration_statement (cp_parser* parser)
6611 {
6612   void *p;
6613
6614   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
6615   p = obstack_alloc (&declarator_obstack, 0);
6616
6617  /* Parse the block-declaration.  */
6618   cp_parser_block_declaration (parser, /*statement_p=*/true);
6619
6620   /* Free any declarators allocated.  */
6621   obstack_free (&declarator_obstack, p);
6622
6623   /* Finish off the statement.  */
6624   finish_stmt ();
6625 }
6626
6627 /* Some dependent statements (like `if (cond) statement'), are
6628    implicitly in their own scope.  In other words, if the statement is
6629    a single statement (as opposed to a compound-statement), it is
6630    none-the-less treated as if it were enclosed in braces.  Any
6631    declarations appearing in the dependent statement are out of scope
6632    after control passes that point.  This function parses a statement,
6633    but ensures that is in its own scope, even if it is not a
6634    compound-statement.
6635
6636    Returns the new statement.  */
6637
6638 static tree
6639 cp_parser_implicitly_scoped_statement (cp_parser* parser)
6640 {
6641   tree statement;
6642
6643   /* If the token is not a `{', then we must take special action.  */
6644   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6645     {
6646       /* Create a compound-statement.  */
6647       statement = begin_compound_stmt (0);
6648       /* Parse the dependent-statement.  */
6649       cp_parser_statement (parser, false);
6650       /* Finish the dummy compound-statement.  */
6651       finish_compound_stmt (statement);
6652     }
6653   /* Otherwise, we simply parse the statement directly.  */
6654   else
6655     statement = cp_parser_compound_statement (parser, NULL, false);
6656
6657   /* Return the statement.  */
6658   return statement;
6659 }
6660
6661 /* For some dependent statements (like `while (cond) statement'), we
6662    have already created a scope.  Therefore, even if the dependent
6663    statement is a compound-statement, we do not want to create another
6664    scope.  */
6665
6666 static void
6667 cp_parser_already_scoped_statement (cp_parser* parser)
6668 {
6669   /* If the token is a `{', then we must take special action.  */
6670   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6671     cp_parser_statement (parser, false);
6672   else
6673     {
6674       /* Avoid calling cp_parser_compound_statement, so that we
6675          don't create a new scope.  Do everything else by hand.  */
6676       cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
6677       cp_parser_statement_seq_opt (parser, false);
6678       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6679     }
6680 }
6681
6682 /* Declarations [gram.dcl.dcl] */
6683
6684 /* Parse an optional declaration-sequence.
6685
6686    declaration-seq:
6687      declaration
6688      declaration-seq declaration  */
6689
6690 static void
6691 cp_parser_declaration_seq_opt (cp_parser* parser)
6692 {
6693   while (true)
6694     {
6695       cp_token *token;
6696
6697       token = cp_lexer_peek_token (parser->lexer);
6698
6699       if (token->type == CPP_CLOSE_BRACE
6700           || token->type == CPP_EOF)
6701         break;
6702
6703       if (token->type == CPP_SEMICOLON)
6704         {
6705           /* A declaration consisting of a single semicolon is
6706              invalid.  Allow it unless we're being pedantic.  */
6707           cp_lexer_consume_token (parser->lexer);
6708           if (pedantic && !in_system_header)
6709             pedwarn ("extra %<;%>");
6710           continue;
6711         }
6712
6713       /* If we're entering or exiting a region that's implicitly
6714          extern "C", modify the lang context appropriately.  */
6715       if (!parser->implicit_extern_c && token->implicit_extern_c)
6716         {
6717           push_lang_context (lang_name_c);
6718           parser->implicit_extern_c = true;
6719         }
6720       else if (parser->implicit_extern_c && !token->implicit_extern_c)
6721         {
6722           pop_lang_context ();
6723           parser->implicit_extern_c = false;
6724         }
6725
6726       if (token->type == CPP_PRAGMA)
6727         {
6728           /* A top-level declaration can consist solely of a #pragma.
6729              A nested declaration cannot, so this is done here and not
6730              in cp_parser_declaration.  (A #pragma at block scope is
6731              handled in cp_parser_statement.)  */
6732           cp_lexer_handle_pragma (parser->lexer);
6733           continue;
6734         }
6735
6736       /* Parse the declaration itself.  */
6737       cp_parser_declaration (parser);
6738     }
6739 }
6740
6741 /* Parse a declaration.
6742
6743    declaration:
6744      block-declaration
6745      function-definition
6746      template-declaration
6747      explicit-instantiation
6748      explicit-specialization
6749      linkage-specification
6750      namespace-definition
6751
6752    GNU extension:
6753
6754    declaration:
6755       __extension__ declaration */
6756
6757 static void
6758 cp_parser_declaration (cp_parser* parser)
6759 {
6760   cp_token token1;
6761   cp_token token2;
6762   int saved_pedantic;
6763   void *p;
6764
6765   /* Check for the `__extension__' keyword.  */
6766   if (cp_parser_extension_opt (parser, &saved_pedantic))
6767     {
6768       /* Parse the qualified declaration.  */
6769       cp_parser_declaration (parser);
6770       /* Restore the PEDANTIC flag.  */
6771       pedantic = saved_pedantic;
6772
6773       return;
6774     }
6775
6776   /* Try to figure out what kind of declaration is present.  */
6777   token1 = *cp_lexer_peek_token (parser->lexer);
6778
6779   if (token1.type != CPP_EOF)
6780     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
6781
6782   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
6783   p = obstack_alloc (&declarator_obstack, 0);
6784
6785   /* If the next token is `extern' and the following token is a string
6786      literal, then we have a linkage specification.  */
6787   if (token1.keyword == RID_EXTERN
6788       && cp_parser_is_string_literal (&token2))
6789     cp_parser_linkage_specification (parser);
6790   /* If the next token is `template', then we have either a template
6791      declaration, an explicit instantiation, or an explicit
6792      specialization.  */
6793   else if (token1.keyword == RID_TEMPLATE)
6794     {
6795       /* `template <>' indicates a template specialization.  */
6796       if (token2.type == CPP_LESS
6797           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
6798         cp_parser_explicit_specialization (parser);
6799       /* `template <' indicates a template declaration.  */
6800       else if (token2.type == CPP_LESS)
6801         cp_parser_template_declaration (parser, /*member_p=*/false);
6802       /* Anything else must be an explicit instantiation.  */
6803       else
6804         cp_parser_explicit_instantiation (parser);
6805     }
6806   /* If the next token is `export', then we have a template
6807      declaration.  */
6808   else if (token1.keyword == RID_EXPORT)
6809     cp_parser_template_declaration (parser, /*member_p=*/false);
6810   /* If the next token is `extern', 'static' or 'inline' and the one
6811      after that is `template', we have a GNU extended explicit
6812      instantiation directive.  */
6813   else if (cp_parser_allow_gnu_extensions_p (parser)
6814            && (token1.keyword == RID_EXTERN
6815                || token1.keyword == RID_STATIC
6816                || token1.keyword == RID_INLINE)
6817            && token2.keyword == RID_TEMPLATE)
6818     cp_parser_explicit_instantiation (parser);
6819   /* If the next token is `namespace', check for a named or unnamed
6820      namespace definition.  */
6821   else if (token1.keyword == RID_NAMESPACE
6822            && (/* A named namespace definition.  */
6823                (token2.type == CPP_NAME
6824                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
6825                     == CPP_OPEN_BRACE))
6826                /* An unnamed namespace definition.  */
6827                || token2.type == CPP_OPEN_BRACE))
6828     cp_parser_namespace_definition (parser);
6829   /* We must have either a block declaration or a function
6830      definition.  */
6831   else
6832     /* Try to parse a block-declaration, or a function-definition.  */
6833     cp_parser_block_declaration (parser, /*statement_p=*/false);
6834
6835   /* Free any declarators allocated.  */
6836   obstack_free (&declarator_obstack, p);
6837 }
6838
6839 /* Parse a block-declaration.
6840
6841    block-declaration:
6842      simple-declaration
6843      asm-definition
6844      namespace-alias-definition
6845      using-declaration
6846      using-directive
6847
6848    GNU Extension:
6849
6850    block-declaration:
6851      __extension__ block-declaration
6852      label-declaration
6853
6854    If STATEMENT_P is TRUE, then this block-declaration is occurring as
6855    part of a declaration-statement.  */
6856
6857 static void
6858 cp_parser_block_declaration (cp_parser *parser,
6859                              bool      statement_p)
6860 {
6861   cp_token *token1;
6862   int saved_pedantic;
6863
6864   /* Check for the `__extension__' keyword.  */
6865   if (cp_parser_extension_opt (parser, &saved_pedantic))
6866     {
6867       /* Parse the qualified declaration.  */
6868       cp_parser_block_declaration (parser, statement_p);
6869       /* Restore the PEDANTIC flag.  */
6870       pedantic = saved_pedantic;
6871
6872       return;
6873     }
6874
6875   /* Peek at the next token to figure out which kind of declaration is
6876      present.  */
6877   token1 = cp_lexer_peek_token (parser->lexer);
6878
6879   /* If the next keyword is `asm', we have an asm-definition.  */
6880   if (token1->keyword == RID_ASM)
6881     {
6882       if (statement_p)
6883         cp_parser_commit_to_tentative_parse (parser);
6884       cp_parser_asm_definition (parser);
6885     }
6886   /* If the next keyword is `namespace', we have a
6887      namespace-alias-definition.  */
6888   else if (token1->keyword == RID_NAMESPACE)
6889     cp_parser_namespace_alias_definition (parser);
6890   /* If the next keyword is `using', we have either a
6891      using-declaration or a using-directive.  */
6892   else if (token1->keyword == RID_USING)
6893     {
6894       cp_token *token2;
6895
6896       if (statement_p)
6897         cp_parser_commit_to_tentative_parse (parser);
6898       /* If the token after `using' is `namespace', then we have a
6899          using-directive.  */
6900       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
6901       if (token2->keyword == RID_NAMESPACE)
6902         cp_parser_using_directive (parser);
6903       /* Otherwise, it's a using-declaration.  */
6904       else
6905         cp_parser_using_declaration (parser);
6906     }
6907   /* If the next keyword is `__label__' we have a label declaration.  */
6908   else if (token1->keyword == RID_LABEL)
6909     {
6910       if (statement_p)
6911         cp_parser_commit_to_tentative_parse (parser);
6912       cp_parser_label_declaration (parser);
6913     }
6914   /* Anything else must be a simple-declaration.  */
6915   else
6916     cp_parser_simple_declaration (parser, !statement_p);
6917 }
6918
6919 /* Parse a simple-declaration.
6920
6921    simple-declaration:
6922      decl-specifier-seq [opt] init-declarator-list [opt] ;
6923
6924    init-declarator-list:
6925      init-declarator
6926      init-declarator-list , init-declarator
6927
6928    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
6929    function-definition as a simple-declaration.  */
6930
6931 static void
6932 cp_parser_simple_declaration (cp_parser* parser,
6933                               bool function_definition_allowed_p)
6934 {
6935   cp_decl_specifier_seq decl_specifiers;
6936   int declares_class_or_enum;
6937   bool saw_declarator;
6938
6939   /* Defer access checks until we know what is being declared; the
6940      checks for names appearing in the decl-specifier-seq should be
6941      done as if we were in the scope of the thing being declared.  */
6942   push_deferring_access_checks (dk_deferred);
6943
6944   /* Parse the decl-specifier-seq.  We have to keep track of whether
6945      or not the decl-specifier-seq declares a named class or
6946      enumeration type, since that is the only case in which the
6947      init-declarator-list is allowed to be empty.
6948
6949      [dcl.dcl]
6950
6951      In a simple-declaration, the optional init-declarator-list can be
6952      omitted only when declaring a class or enumeration, that is when
6953      the decl-specifier-seq contains either a class-specifier, an
6954      elaborated-type-specifier, or an enum-specifier.  */
6955   cp_parser_decl_specifier_seq (parser,
6956                                 CP_PARSER_FLAGS_OPTIONAL,
6957                                 &decl_specifiers,
6958                                 &declares_class_or_enum);
6959   /* We no longer need to defer access checks.  */
6960   stop_deferring_access_checks ();
6961
6962   /* In a block scope, a valid declaration must always have a
6963      decl-specifier-seq.  By not trying to parse declarators, we can
6964      resolve the declaration/expression ambiguity more quickly.  */
6965   if (!function_definition_allowed_p
6966       && !decl_specifiers.any_specifiers_p)
6967     {
6968       cp_parser_error (parser, "expected declaration");
6969       goto done;
6970     }
6971
6972   /* If the next two tokens are both identifiers, the code is
6973      erroneous. The usual cause of this situation is code like:
6974
6975        T t;
6976
6977      where "T" should name a type -- but does not.  */
6978   if (!decl_specifiers.type
6979       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
6980     {
6981       /* If parsing tentatively, we should commit; we really are
6982          looking at a declaration.  */
6983       cp_parser_commit_to_tentative_parse (parser);
6984       /* Give up.  */
6985       goto done;
6986     }
6987   
6988   /* If we have seen at least one decl-specifier, and the next token
6989      is not a parenthesis, then we must be looking at a declaration.
6990      (After "int (" we might be looking at a functional cast.)  */
6991   if (decl_specifiers.any_specifiers_p 
6992       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
6993     cp_parser_commit_to_tentative_parse (parser);
6994
6995   /* Keep going until we hit the `;' at the end of the simple
6996      declaration.  */
6997   saw_declarator = false;
6998   while (cp_lexer_next_token_is_not (parser->lexer,
6999                                      CPP_SEMICOLON))
7000     {
7001       cp_token *token;
7002       bool function_definition_p;
7003       tree decl;
7004
7005       saw_declarator = true;
7006       /* Parse the init-declarator.  */
7007       decl = cp_parser_init_declarator (parser, &decl_specifiers,
7008                                         function_definition_allowed_p,
7009                                         /*member_p=*/false,
7010                                         declares_class_or_enum,
7011                                         &function_definition_p);
7012       /* If an error occurred while parsing tentatively, exit quickly.
7013          (That usually happens when in the body of a function; each
7014          statement is treated as a declaration-statement until proven
7015          otherwise.)  */
7016       if (cp_parser_error_occurred (parser))
7017         goto done;
7018       /* Handle function definitions specially.  */
7019       if (function_definition_p)
7020         {
7021           /* If the next token is a `,', then we are probably
7022              processing something like:
7023
7024                void f() {}, *p;
7025
7026              which is erroneous.  */
7027           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7028             error ("mixing declarations and function-definitions is forbidden");
7029           /* Otherwise, we're done with the list of declarators.  */
7030           else
7031             {
7032               pop_deferring_access_checks ();
7033               return;
7034             }
7035         }
7036       /* The next token should be either a `,' or a `;'.  */
7037       token = cp_lexer_peek_token (parser->lexer);
7038       /* If it's a `,', there are more declarators to come.  */
7039       if (token->type == CPP_COMMA)
7040         cp_lexer_consume_token (parser->lexer);
7041       /* If it's a `;', we are done.  */
7042       else if (token->type == CPP_SEMICOLON)
7043         break;
7044       /* Anything else is an error.  */
7045       else
7046         {
7047           /* If we have already issued an error message we don't need
7048              to issue another one.  */
7049           if (decl != error_mark_node
7050               || cp_parser_uncommitted_to_tentative_parse_p (parser))
7051             cp_parser_error (parser, "expected %<,%> or %<;%>");
7052           /* Skip tokens until we reach the end of the statement.  */
7053           cp_parser_skip_to_end_of_statement (parser);
7054           /* If the next token is now a `;', consume it.  */
7055           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7056             cp_lexer_consume_token (parser->lexer);
7057           goto done;
7058         }
7059       /* After the first time around, a function-definition is not
7060          allowed -- even if it was OK at first.  For example:
7061
7062            int i, f() {}
7063
7064          is not valid.  */
7065       function_definition_allowed_p = false;
7066     }
7067
7068   /* Issue an error message if no declarators are present, and the
7069      decl-specifier-seq does not itself declare a class or
7070      enumeration.  */
7071   if (!saw_declarator)
7072     {
7073       if (cp_parser_declares_only_class_p (parser))
7074         shadow_tag (&decl_specifiers);
7075       /* Perform any deferred access checks.  */
7076       perform_deferred_access_checks ();
7077     }
7078
7079   /* Consume the `;'.  */
7080   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7081
7082  done:
7083   pop_deferring_access_checks ();
7084 }
7085
7086 /* Parse a decl-specifier-seq.
7087
7088    decl-specifier-seq:
7089      decl-specifier-seq [opt] decl-specifier
7090
7091    decl-specifier:
7092      storage-class-specifier
7093      type-specifier
7094      function-specifier
7095      friend
7096      typedef
7097
7098    GNU Extension:
7099
7100    decl-specifier:
7101      attributes
7102
7103    Set *DECL_SPECS to a representation of the decl-specifier-seq.
7104
7105    The parser flags FLAGS is used to control type-specifier parsing.
7106
7107    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7108    flags:
7109
7110      1: one of the decl-specifiers is an elaborated-type-specifier
7111         (i.e., a type declaration)
7112      2: one of the decl-specifiers is an enum-specifier or a
7113         class-specifier (i.e., a type definition)
7114
7115    */
7116
7117 static void
7118 cp_parser_decl_specifier_seq (cp_parser* parser,
7119                               cp_parser_flags flags,
7120                               cp_decl_specifier_seq *decl_specs,
7121                               int* declares_class_or_enum)
7122 {
7123   bool constructor_possible_p = !parser->in_declarator_p;
7124
7125   /* Clear DECL_SPECS.  */
7126   clear_decl_specs (decl_specs);
7127
7128   /* Assume no class or enumeration type is declared.  */
7129   *declares_class_or_enum = 0;
7130
7131   /* Keep reading specifiers until there are no more to read.  */
7132   while (true)
7133     {
7134       bool constructor_p;
7135       bool found_decl_spec;
7136       cp_token *token;
7137
7138       /* Peek at the next token.  */
7139       token = cp_lexer_peek_token (parser->lexer);
7140       /* Handle attributes.  */
7141       if (token->keyword == RID_ATTRIBUTE)
7142         {
7143           /* Parse the attributes.  */
7144           decl_specs->attributes
7145             = chainon (decl_specs->attributes,
7146                        cp_parser_attributes_opt (parser));
7147           continue;
7148         }
7149       /* Assume we will find a decl-specifier keyword.  */
7150       found_decl_spec = true;
7151       /* If the next token is an appropriate keyword, we can simply
7152          add it to the list.  */
7153       switch (token->keyword)
7154         {
7155           /* decl-specifier:
7156                friend  */
7157         case RID_FRIEND:
7158           if (decl_specs->specs[(int) ds_friend]++)
7159             error ("duplicate %<friend%>");
7160           /* Consume the token.  */
7161           cp_lexer_consume_token (parser->lexer);
7162           break;
7163
7164           /* function-specifier:
7165                inline
7166                virtual
7167                explicit  */
7168         case RID_INLINE:
7169         case RID_VIRTUAL:
7170         case RID_EXPLICIT:
7171           cp_parser_function_specifier_opt (parser, decl_specs);
7172           break;
7173
7174           /* decl-specifier:
7175                typedef  */
7176         case RID_TYPEDEF:
7177           ++decl_specs->specs[(int) ds_typedef];
7178           /* Consume the token.  */
7179           cp_lexer_consume_token (parser->lexer);
7180           /* A constructor declarator cannot appear in a typedef.  */
7181           constructor_possible_p = false;
7182           /* The "typedef" keyword can only occur in a declaration; we
7183              may as well commit at this point.  */
7184           cp_parser_commit_to_tentative_parse (parser);
7185           break;
7186
7187           /* storage-class-specifier:
7188                auto
7189                register
7190                static
7191                extern
7192                mutable
7193
7194              GNU Extension:
7195                thread  */
7196         case RID_AUTO:
7197           /* Consume the token.  */
7198           cp_lexer_consume_token (parser->lexer);
7199           cp_parser_set_storage_class (decl_specs, sc_auto);
7200           break;
7201         case RID_REGISTER:
7202           /* Consume the token.  */
7203           cp_lexer_consume_token (parser->lexer);
7204           cp_parser_set_storage_class (decl_specs, sc_register);
7205           break;
7206         case RID_STATIC:
7207           /* Consume the token.  */
7208           cp_lexer_consume_token (parser->lexer);
7209           if (decl_specs->specs[(int) ds_thread])
7210             {
7211               error ("%<__thread%> before %<static%>");
7212               decl_specs->specs[(int) ds_thread] = 0;
7213             }
7214           cp_parser_set_storage_class (decl_specs, sc_static);
7215           break;
7216         case RID_EXTERN:
7217           /* Consume the token.  */
7218           cp_lexer_consume_token (parser->lexer);
7219           if (decl_specs->specs[(int) ds_thread])
7220             {
7221               error ("%<__thread%> before %<extern%>");
7222               decl_specs->specs[(int) ds_thread] = 0;
7223             }
7224           cp_parser_set_storage_class (decl_specs, sc_extern);
7225           break;
7226         case RID_MUTABLE:
7227           /* Consume the token.  */
7228           cp_lexer_consume_token (parser->lexer);
7229           cp_parser_set_storage_class (decl_specs, sc_mutable);
7230           break;
7231         case RID_THREAD:
7232           /* Consume the token.  */
7233           cp_lexer_consume_token (parser->lexer);
7234           ++decl_specs->specs[(int) ds_thread];
7235           break;
7236
7237         default:
7238           /* We did not yet find a decl-specifier yet.  */
7239           found_decl_spec = false;
7240           break;
7241         }
7242
7243       /* Constructors are a special case.  The `S' in `S()' is not a
7244          decl-specifier; it is the beginning of the declarator.  */
7245       constructor_p
7246         = (!found_decl_spec
7247            && constructor_possible_p
7248            && (cp_parser_constructor_declarator_p
7249                (parser, decl_specs->specs[(int) ds_friend] != 0)));
7250
7251       /* If we don't have a DECL_SPEC yet, then we must be looking at
7252          a type-specifier.  */
7253       if (!found_decl_spec && !constructor_p)
7254         {
7255           int decl_spec_declares_class_or_enum;
7256           bool is_cv_qualifier;
7257           tree type_spec;
7258
7259           type_spec
7260             = cp_parser_type_specifier (parser, flags,
7261                                         decl_specs,
7262                                         /*is_declaration=*/true,
7263                                         &decl_spec_declares_class_or_enum,
7264                                         &is_cv_qualifier);
7265
7266           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
7267
7268           /* If this type-specifier referenced a user-defined type
7269              (a typedef, class-name, etc.), then we can't allow any
7270              more such type-specifiers henceforth.
7271
7272              [dcl.spec]
7273
7274              The longest sequence of decl-specifiers that could
7275              possibly be a type name is taken as the
7276              decl-specifier-seq of a declaration.  The sequence shall
7277              be self-consistent as described below.
7278
7279              [dcl.type]
7280
7281              As a general rule, at most one type-specifier is allowed
7282              in the complete decl-specifier-seq of a declaration.  The
7283              only exceptions are the following:
7284
7285              -- const or volatile can be combined with any other
7286                 type-specifier.
7287
7288              -- signed or unsigned can be combined with char, long,
7289                 short, or int.
7290
7291              -- ..
7292
7293              Example:
7294
7295                typedef char* Pc;
7296                void g (const int Pc);
7297
7298              Here, Pc is *not* part of the decl-specifier seq; it's
7299              the declarator.  Therefore, once we see a type-specifier
7300              (other than a cv-qualifier), we forbid any additional
7301              user-defined types.  We *do* still allow things like `int
7302              int' to be considered a decl-specifier-seq, and issue the
7303              error message later.  */
7304           if (type_spec && !is_cv_qualifier)
7305             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
7306           /* A constructor declarator cannot follow a type-specifier.  */
7307           if (type_spec)
7308             {
7309               constructor_possible_p = false;
7310               found_decl_spec = true;
7311             }
7312         }
7313
7314       /* If we still do not have a DECL_SPEC, then there are no more
7315          decl-specifiers.  */
7316       if (!found_decl_spec)
7317         break;
7318
7319       decl_specs->any_specifiers_p = true;
7320       /* After we see one decl-specifier, further decl-specifiers are
7321          always optional.  */
7322       flags |= CP_PARSER_FLAGS_OPTIONAL;
7323     }
7324
7325   /* Don't allow a friend specifier with a class definition.  */
7326   if (decl_specs->specs[(int) ds_friend] != 0
7327       && (*declares_class_or_enum & 2))
7328     error ("class definition may not be declared a friend");
7329 }
7330
7331 /* Parse an (optional) storage-class-specifier.
7332
7333    storage-class-specifier:
7334      auto
7335      register
7336      static
7337      extern
7338      mutable
7339
7340    GNU Extension:
7341
7342    storage-class-specifier:
7343      thread
7344
7345    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7346
7347 static tree
7348 cp_parser_storage_class_specifier_opt (cp_parser* parser)
7349 {
7350   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7351     {
7352     case RID_AUTO:
7353     case RID_REGISTER:
7354     case RID_STATIC:
7355     case RID_EXTERN:
7356     case RID_MUTABLE:
7357     case RID_THREAD:
7358       /* Consume the token.  */
7359       return cp_lexer_consume_token (parser->lexer)->value;
7360
7361     default:
7362       return NULL_TREE;
7363     }
7364 }
7365
7366 /* Parse an (optional) function-specifier.
7367
7368    function-specifier:
7369      inline
7370      virtual
7371      explicit
7372
7373    Returns an IDENTIFIER_NODE corresponding to the keyword used.
7374    Updates DECL_SPECS, if it is non-NULL.  */
7375
7376 static tree
7377 cp_parser_function_specifier_opt (cp_parser* parser,
7378                                   cp_decl_specifier_seq *decl_specs)
7379 {
7380   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7381     {
7382     case RID_INLINE:
7383       if (decl_specs)
7384         ++decl_specs->specs[(int) ds_inline];
7385       break;
7386
7387     case RID_VIRTUAL:
7388       if (decl_specs)
7389         ++decl_specs->specs[(int) ds_virtual];
7390       break;
7391
7392     case RID_EXPLICIT:
7393       if (decl_specs)
7394         ++decl_specs->specs[(int) ds_explicit];
7395       break;
7396
7397     default:
7398       return NULL_TREE;
7399     }
7400
7401   /* Consume the token.  */
7402   return cp_lexer_consume_token (parser->lexer)->value;
7403 }
7404
7405 /* Parse a linkage-specification.
7406
7407    linkage-specification:
7408      extern string-literal { declaration-seq [opt] }
7409      extern string-literal declaration  */
7410
7411 static void
7412 cp_parser_linkage_specification (cp_parser* parser)
7413 {
7414   tree linkage;
7415
7416   /* Look for the `extern' keyword.  */
7417   cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7418
7419   /* Look for the string-literal.  */
7420   linkage = cp_parser_string_literal (parser, false, false);
7421
7422   /* Transform the literal into an identifier.  If the literal is a
7423      wide-character string, or contains embedded NULs, then we can't
7424      handle it as the user wants.  */
7425   if (strlen (TREE_STRING_POINTER (linkage))
7426       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
7427     {
7428       cp_parser_error (parser, "invalid linkage-specification");
7429       /* Assume C++ linkage.  */
7430       linkage = lang_name_cplusplus;
7431     }
7432   else
7433     linkage = get_identifier (TREE_STRING_POINTER (linkage));
7434
7435   /* We're now using the new linkage.  */
7436   push_lang_context (linkage);
7437
7438   /* If the next token is a `{', then we're using the first
7439      production.  */
7440   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7441     {
7442       /* Consume the `{' token.  */
7443       cp_lexer_consume_token (parser->lexer);
7444       /* Parse the declarations.  */
7445       cp_parser_declaration_seq_opt (parser);
7446       /* Look for the closing `}'.  */
7447       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7448     }
7449   /* Otherwise, there's just one declaration.  */
7450   else
7451     {
7452       bool saved_in_unbraced_linkage_specification_p;
7453
7454       saved_in_unbraced_linkage_specification_p
7455         = parser->in_unbraced_linkage_specification_p;
7456       parser->in_unbraced_linkage_specification_p = true;
7457       have_extern_spec = true;
7458       cp_parser_declaration (parser);
7459       have_extern_spec = false;
7460       parser->in_unbraced_linkage_specification_p
7461         = saved_in_unbraced_linkage_specification_p;
7462     }
7463
7464   /* We're done with the linkage-specification.  */
7465   pop_lang_context ();
7466 }
7467
7468 /* Special member functions [gram.special] */
7469
7470 /* Parse a conversion-function-id.
7471
7472    conversion-function-id:
7473      operator conversion-type-id
7474
7475    Returns an IDENTIFIER_NODE representing the operator.  */
7476
7477 static tree
7478 cp_parser_conversion_function_id (cp_parser* parser)
7479 {
7480   tree type;
7481   tree saved_scope;
7482   tree saved_qualifying_scope;
7483   tree saved_object_scope;
7484   tree pushed_scope = NULL_TREE;
7485
7486   /* Look for the `operator' token.  */
7487   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7488     return error_mark_node;
7489   /* When we parse the conversion-type-id, the current scope will be
7490      reset.  However, we need that information in able to look up the
7491      conversion function later, so we save it here.  */
7492   saved_scope = parser->scope;
7493   saved_qualifying_scope = parser->qualifying_scope;
7494   saved_object_scope = parser->object_scope;
7495   /* We must enter the scope of the class so that the names of
7496      entities declared within the class are available in the
7497      conversion-type-id.  For example, consider:
7498
7499        struct S {
7500          typedef int I;
7501          operator I();
7502        };
7503
7504        S::operator I() { ... }
7505
7506      In order to see that `I' is a type-name in the definition, we
7507      must be in the scope of `S'.  */
7508   if (saved_scope)
7509     pushed_scope = push_scope (saved_scope);
7510   /* Parse the conversion-type-id.  */
7511   type = cp_parser_conversion_type_id (parser);
7512   /* Leave the scope of the class, if any.  */
7513   if (pushed_scope)
7514     pop_scope (pushed_scope);
7515   /* Restore the saved scope.  */
7516   parser->scope = saved_scope;
7517   parser->qualifying_scope = saved_qualifying_scope;
7518   parser->object_scope = saved_object_scope;
7519   /* If the TYPE is invalid, indicate failure.  */
7520   if (type == error_mark_node)
7521     return error_mark_node;
7522   return mangle_conv_op_name_for_type (type);
7523 }
7524
7525 /* Parse a conversion-type-id:
7526
7527    conversion-type-id:
7528      type-specifier-seq conversion-declarator [opt]
7529
7530    Returns the TYPE specified.  */
7531
7532 static tree
7533 cp_parser_conversion_type_id (cp_parser* parser)
7534 {
7535   tree attributes;
7536   cp_decl_specifier_seq type_specifiers;
7537   cp_declarator *declarator;
7538   tree type_specified;
7539
7540   /* Parse the attributes.  */
7541   attributes = cp_parser_attributes_opt (parser);
7542   /* Parse the type-specifiers.  */
7543   cp_parser_type_specifier_seq (parser, &type_specifiers);
7544   /* If that didn't work, stop.  */
7545   if (type_specifiers.type == error_mark_node)
7546     return error_mark_node;
7547   /* Parse the conversion-declarator.  */
7548   declarator = cp_parser_conversion_declarator_opt (parser);
7549
7550   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
7551                                     /*initialized=*/0, &attributes);
7552   if (attributes)
7553     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
7554   return type_specified;
7555 }
7556
7557 /* Parse an (optional) conversion-declarator.
7558
7559    conversion-declarator:
7560      ptr-operator conversion-declarator [opt]
7561
7562    */
7563
7564 static cp_declarator *
7565 cp_parser_conversion_declarator_opt (cp_parser* parser)
7566 {
7567   enum tree_code code;
7568   tree class_type;
7569   cp_cv_quals cv_quals;
7570
7571   /* We don't know if there's a ptr-operator next, or not.  */
7572   cp_parser_parse_tentatively (parser);
7573   /* Try the ptr-operator.  */
7574   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
7575   /* If it worked, look for more conversion-declarators.  */
7576   if (cp_parser_parse_definitely (parser))
7577     {
7578       cp_declarator *declarator;
7579
7580       /* Parse another optional declarator.  */
7581       declarator = cp_parser_conversion_declarator_opt (parser);
7582
7583       /* Create the representation of the declarator.  */
7584       if (class_type)
7585         declarator = make_ptrmem_declarator (cv_quals, class_type,
7586                                              declarator);
7587       else if (code == INDIRECT_REF)
7588         declarator = make_pointer_declarator (cv_quals, declarator);
7589       else
7590         declarator = make_reference_declarator (cv_quals, declarator);
7591
7592       return declarator;
7593    }
7594
7595   return NULL;
7596 }
7597
7598 /* Parse an (optional) ctor-initializer.
7599
7600    ctor-initializer:
7601      : mem-initializer-list
7602
7603    Returns TRUE iff the ctor-initializer was actually present.  */
7604
7605 static bool
7606 cp_parser_ctor_initializer_opt (cp_parser* parser)
7607 {
7608   /* If the next token is not a `:', then there is no
7609      ctor-initializer.  */
7610   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
7611     {
7612       /* Do default initialization of any bases and members.  */
7613       if (DECL_CONSTRUCTOR_P (current_function_decl))
7614         finish_mem_initializers (NULL_TREE);
7615
7616       return false;
7617     }
7618
7619   /* Consume the `:' token.  */
7620   cp_lexer_consume_token (parser->lexer);
7621   /* And the mem-initializer-list.  */
7622   cp_parser_mem_initializer_list (parser);
7623
7624   return true;
7625 }
7626
7627 /* Parse a mem-initializer-list.
7628
7629    mem-initializer-list:
7630      mem-initializer
7631      mem-initializer , mem-initializer-list  */
7632
7633 static void
7634 cp_parser_mem_initializer_list (cp_parser* parser)
7635 {
7636   tree mem_initializer_list = NULL_TREE;
7637
7638   /* Let the semantic analysis code know that we are starting the
7639      mem-initializer-list.  */
7640   if (!DECL_CONSTRUCTOR_P (current_function_decl))
7641     error ("only constructors take base initializers");
7642
7643   /* Loop through the list.  */
7644   while (true)
7645     {
7646       tree mem_initializer;
7647
7648       /* Parse the mem-initializer.  */
7649       mem_initializer = cp_parser_mem_initializer (parser);
7650       /* Add it to the list, unless it was erroneous.  */
7651       if (mem_initializer)
7652         {
7653           TREE_CHAIN (mem_initializer) = mem_initializer_list;
7654           mem_initializer_list = mem_initializer;
7655         }
7656       /* If the next token is not a `,', we're done.  */
7657       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7658         break;
7659       /* Consume the `,' token.  */
7660       cp_lexer_consume_token (parser->lexer);
7661     }
7662
7663   /* Perform semantic analysis.  */
7664   if (DECL_CONSTRUCTOR_P (current_function_decl))
7665     finish_mem_initializers (mem_initializer_list);
7666 }
7667
7668 /* Parse a mem-initializer.
7669
7670    mem-initializer:
7671      mem-initializer-id ( expression-list [opt] )
7672
7673    GNU extension:
7674
7675    mem-initializer:
7676      ( expression-list [opt] )
7677
7678    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
7679    class) or FIELD_DECL (for a non-static data member) to initialize;
7680    the TREE_VALUE is the expression-list.  */
7681
7682 static tree
7683 cp_parser_mem_initializer (cp_parser* parser)
7684 {
7685   tree mem_initializer_id;
7686   tree expression_list;
7687   tree member;
7688
7689   /* Find out what is being initialized.  */
7690   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7691     {
7692       pedwarn ("anachronistic old-style base class initializer");
7693       mem_initializer_id = NULL_TREE;
7694     }
7695   else
7696     mem_initializer_id = cp_parser_mem_initializer_id (parser);
7697   member = expand_member_init (mem_initializer_id);
7698   if (member && !DECL_P (member))
7699     in_base_initializer = 1;
7700
7701   expression_list
7702     = cp_parser_parenthesized_expression_list (parser, false,
7703                                                /*cast_p=*/false,
7704                                                /*non_constant_p=*/NULL);
7705   if (!expression_list)
7706     expression_list = void_type_node;
7707
7708   in_base_initializer = 0;
7709
7710   return member ? build_tree_list (member, expression_list) : NULL_TREE;
7711 }
7712
7713 /* Parse a mem-initializer-id.
7714
7715    mem-initializer-id:
7716      :: [opt] nested-name-specifier [opt] class-name
7717      identifier
7718
7719    Returns a TYPE indicating the class to be initializer for the first
7720    production.  Returns an IDENTIFIER_NODE indicating the data member
7721    to be initialized for the second production.  */
7722
7723 static tree
7724 cp_parser_mem_initializer_id (cp_parser* parser)
7725 {
7726   bool global_scope_p;
7727   bool nested_name_specifier_p;
7728   bool template_p = false;
7729   tree id;
7730
7731   /* `typename' is not allowed in this context ([temp.res]).  */
7732   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
7733     {
7734       error ("keyword %<typename%> not allowed in this context (a qualified "
7735              "member initializer is implicitly a type)");
7736       cp_lexer_consume_token (parser->lexer);
7737     }
7738   /* Look for the optional `::' operator.  */
7739   global_scope_p
7740     = (cp_parser_global_scope_opt (parser,
7741                                    /*current_scope_valid_p=*/false)
7742        != NULL_TREE);
7743   /* Look for the optional nested-name-specifier.  The simplest way to
7744      implement:
7745
7746        [temp.res]
7747
7748        The keyword `typename' is not permitted in a base-specifier or
7749        mem-initializer; in these contexts a qualified name that
7750        depends on a template-parameter is implicitly assumed to be a
7751        type name.
7752
7753      is to assume that we have seen the `typename' keyword at this
7754      point.  */
7755   nested_name_specifier_p
7756     = (cp_parser_nested_name_specifier_opt (parser,
7757                                             /*typename_keyword_p=*/true,
7758                                             /*check_dependency_p=*/true,
7759                                             /*type_p=*/true,
7760                                             /*is_declaration=*/true)
7761        != NULL_TREE);
7762   if (nested_name_specifier_p)
7763     template_p = cp_parser_optional_template_keyword (parser);
7764   /* If there is a `::' operator or a nested-name-specifier, then we
7765      are definitely looking for a class-name.  */
7766   if (global_scope_p || nested_name_specifier_p)
7767     return cp_parser_class_name (parser,
7768                                  /*typename_keyword_p=*/true,
7769                                  /*template_keyword_p=*/template_p,
7770                                  none_type,
7771                                  /*check_dependency_p=*/true,
7772                                  /*class_head_p=*/false,
7773                                  /*is_declaration=*/true);
7774   /* Otherwise, we could also be looking for an ordinary identifier.  */
7775   cp_parser_parse_tentatively (parser);
7776   /* Try a class-name.  */
7777   id = cp_parser_class_name (parser,
7778                              /*typename_keyword_p=*/true,
7779                              /*template_keyword_p=*/false,
7780                              none_type,
7781                              /*check_dependency_p=*/true,
7782                              /*class_head_p=*/false,
7783                              /*is_declaration=*/true);
7784   /* If we found one, we're done.  */
7785   if (cp_parser_parse_definitely (parser))
7786     return id;
7787   /* Otherwise, look for an ordinary identifier.  */
7788   return cp_parser_identifier (parser);
7789 }
7790
7791 /* Overloading [gram.over] */
7792
7793 /* Parse an operator-function-id.
7794
7795    operator-function-id:
7796      operator operator
7797
7798    Returns an IDENTIFIER_NODE for the operator which is a
7799    human-readable spelling of the identifier, e.g., `operator +'.  */
7800
7801 static tree
7802 cp_parser_operator_function_id (cp_parser* parser)
7803 {
7804   /* Look for the `operator' keyword.  */
7805   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7806     return error_mark_node;
7807   /* And then the name of the operator itself.  */
7808   return cp_parser_operator (parser);
7809 }
7810
7811 /* Parse an operator.
7812
7813    operator:
7814      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
7815      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
7816      || ++ -- , ->* -> () []
7817
7818    GNU Extensions:
7819
7820    operator:
7821      <? >? <?= >?=
7822
7823    Returns an IDENTIFIER_NODE for the operator which is a
7824    human-readable spelling of the identifier, e.g., `operator +'.  */
7825
7826 static tree
7827 cp_parser_operator (cp_parser* parser)
7828 {
7829   tree id = NULL_TREE;
7830   cp_token *token;
7831
7832   /* Peek at the next token.  */
7833   token = cp_lexer_peek_token (parser->lexer);
7834   /* Figure out which operator we have.  */
7835   switch (token->type)
7836     {
7837     case CPP_KEYWORD:
7838       {
7839         enum tree_code op;
7840
7841         /* The keyword should be either `new' or `delete'.  */
7842         if (token->keyword == RID_NEW)
7843           op = NEW_EXPR;
7844         else if (token->keyword == RID_DELETE)
7845           op = DELETE_EXPR;
7846         else
7847           break;
7848
7849         /* Consume the `new' or `delete' token.  */
7850         cp_lexer_consume_token (parser->lexer);
7851
7852         /* Peek at the next token.  */
7853         token = cp_lexer_peek_token (parser->lexer);
7854         /* If it's a `[' token then this is the array variant of the
7855            operator.  */
7856         if (token->type == CPP_OPEN_SQUARE)
7857           {
7858             /* Consume the `[' token.  */
7859             cp_lexer_consume_token (parser->lexer);
7860             /* Look for the `]' token.  */
7861             cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
7862             id = ansi_opname (op == NEW_EXPR
7863                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
7864           }
7865         /* Otherwise, we have the non-array variant.  */
7866         else
7867           id = ansi_opname (op);
7868
7869         return id;
7870       }
7871
7872     case CPP_PLUS:
7873       id = ansi_opname (PLUS_EXPR);
7874       break;
7875
7876     case CPP_MINUS:
7877       id = ansi_opname (MINUS_EXPR);
7878       break;
7879
7880     case CPP_MULT:
7881       id = ansi_opname (MULT_EXPR);
7882       break;
7883
7884     case CPP_DIV:
7885       id = ansi_opname (TRUNC_DIV_EXPR);
7886       break;
7887
7888     case CPP_MOD:
7889       id = ansi_opname (TRUNC_MOD_EXPR);
7890       break;
7891
7892     case CPP_XOR:
7893       id = ansi_opname (BIT_XOR_EXPR);
7894       break;
7895
7896     case CPP_AND:
7897       id = ansi_opname (BIT_AND_EXPR);
7898       break;
7899
7900     case CPP_OR:
7901       id = ansi_opname (BIT_IOR_EXPR);
7902       break;
7903
7904     case CPP_COMPL:
7905       id = ansi_opname (BIT_NOT_EXPR);
7906       break;
7907
7908     case CPP_NOT:
7909       id = ansi_opname (TRUTH_NOT_EXPR);
7910       break;
7911
7912     case CPP_EQ:
7913       id = ansi_assopname (NOP_EXPR);
7914       break;
7915
7916     case CPP_LESS:
7917       id = ansi_opname (LT_EXPR);
7918       break;
7919
7920     case CPP_GREATER:
7921       id = ansi_opname (GT_EXPR);
7922       break;
7923
7924     case CPP_PLUS_EQ:
7925       id = ansi_assopname (PLUS_EXPR);
7926       break;
7927
7928     case CPP_MINUS_EQ:
7929       id = ansi_assopname (MINUS_EXPR);
7930       break;
7931
7932     case CPP_MULT_EQ:
7933       id = ansi_assopname (MULT_EXPR);
7934       break;
7935
7936     case CPP_DIV_EQ:
7937       id = ansi_assopname (TRUNC_DIV_EXPR);
7938       break;
7939
7940     case CPP_MOD_EQ:
7941       id = ansi_assopname (TRUNC_MOD_EXPR);
7942       break;
7943
7944     case CPP_XOR_EQ:
7945       id = ansi_assopname (BIT_XOR_EXPR);
7946       break;
7947
7948     case CPP_AND_EQ:
7949       id = ansi_assopname (BIT_AND_EXPR);
7950       break;
7951
7952     case CPP_OR_EQ:
7953       id = ansi_assopname (BIT_IOR_EXPR);
7954       break;
7955
7956     case CPP_LSHIFT:
7957       id = ansi_opname (LSHIFT_EXPR);
7958       break;
7959
7960     case CPP_RSHIFT:
7961       id = ansi_opname (RSHIFT_EXPR);
7962       break;
7963
7964     case CPP_LSHIFT_EQ:
7965       id = ansi_assopname (LSHIFT_EXPR);
7966       break;
7967
7968     case CPP_RSHIFT_EQ:
7969       id = ansi_assopname (RSHIFT_EXPR);
7970       break;
7971
7972     case CPP_EQ_EQ:
7973       id = ansi_opname (EQ_EXPR);
7974       break;
7975
7976     case CPP_NOT_EQ:
7977       id = ansi_opname (NE_EXPR);
7978       break;
7979
7980     case CPP_LESS_EQ:
7981       id = ansi_opname (LE_EXPR);
7982       break;
7983
7984     case CPP_GREATER_EQ:
7985       id = ansi_opname (GE_EXPR);
7986       break;
7987
7988     case CPP_AND_AND:
7989       id = ansi_opname (TRUTH_ANDIF_EXPR);
7990       break;
7991
7992     case CPP_OR_OR:
7993       id = ansi_opname (TRUTH_ORIF_EXPR);
7994       break;
7995
7996     case CPP_PLUS_PLUS:
7997       id = ansi_opname (POSTINCREMENT_EXPR);
7998       break;
7999
8000     case CPP_MINUS_MINUS:
8001       id = ansi_opname (PREDECREMENT_EXPR);
8002       break;
8003
8004     case CPP_COMMA:
8005       id = ansi_opname (COMPOUND_EXPR);
8006       break;
8007
8008     case CPP_DEREF_STAR:
8009       id = ansi_opname (MEMBER_REF);
8010       break;
8011
8012     case CPP_DEREF:
8013       id = ansi_opname (COMPONENT_REF);
8014       break;
8015
8016     case CPP_OPEN_PAREN:
8017       /* Consume the `('.  */
8018       cp_lexer_consume_token (parser->lexer);
8019       /* Look for the matching `)'.  */
8020       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8021       return ansi_opname (CALL_EXPR);
8022
8023     case CPP_OPEN_SQUARE:
8024       /* Consume the `['.  */
8025       cp_lexer_consume_token (parser->lexer);
8026       /* Look for the matching `]'.  */
8027       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8028       return ansi_opname (ARRAY_REF);
8029
8030       /* Extensions.  */
8031     case CPP_MIN:
8032       id = ansi_opname (MIN_EXPR);
8033       break;
8034
8035     case CPP_MAX:
8036       id = ansi_opname (MAX_EXPR);
8037       break;
8038
8039     case CPP_MIN_EQ:
8040       id = ansi_assopname (MIN_EXPR);
8041       break;
8042
8043     case CPP_MAX_EQ:
8044       id = ansi_assopname (MAX_EXPR);
8045       break;
8046
8047     default:
8048       /* Anything else is an error.  */
8049       break;
8050     }
8051
8052   /* If we have selected an identifier, we need to consume the
8053      operator token.  */
8054   if (id)
8055     cp_lexer_consume_token (parser->lexer);
8056   /* Otherwise, no valid operator name was present.  */
8057   else
8058     {
8059       cp_parser_error (parser, "expected operator");
8060       id = error_mark_node;
8061     }
8062
8063   return id;
8064 }
8065
8066 /* Parse a template-declaration.
8067
8068    template-declaration:
8069      export [opt] template < template-parameter-list > declaration
8070
8071    If MEMBER_P is TRUE, this template-declaration occurs within a
8072    class-specifier.
8073
8074    The grammar rule given by the standard isn't correct.  What
8075    is really meant is:
8076
8077    template-declaration:
8078      export [opt] template-parameter-list-seq
8079        decl-specifier-seq [opt] init-declarator [opt] ;
8080      export [opt] template-parameter-list-seq
8081        function-definition
8082
8083    template-parameter-list-seq:
8084      template-parameter-list-seq [opt]
8085      template < template-parameter-list >  */
8086
8087 static void
8088 cp_parser_template_declaration (cp_parser* parser, bool member_p)
8089 {
8090   /* Check for `export'.  */
8091   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8092     {
8093       /* Consume the `export' token.  */
8094       cp_lexer_consume_token (parser->lexer);
8095       /* Warn that we do not support `export'.  */
8096       warning ("keyword %<export%> not implemented, and will be ignored");
8097     }
8098
8099   cp_parser_template_declaration_after_export (parser, member_p);
8100 }
8101
8102 /* Parse a template-parameter-list.
8103
8104    template-parameter-list:
8105      template-parameter
8106      template-parameter-list , template-parameter
8107
8108    Returns a TREE_LIST.  Each node represents a template parameter.
8109    The nodes are connected via their TREE_CHAINs.  */
8110
8111 static tree
8112 cp_parser_template_parameter_list (cp_parser* parser)
8113 {
8114   tree parameter_list = NULL_TREE;
8115
8116   while (true)
8117     {
8118       tree parameter;
8119       cp_token *token;
8120       bool is_non_type;
8121
8122       /* Parse the template-parameter.  */
8123       parameter = cp_parser_template_parameter (parser, &is_non_type);
8124       /* Add it to the list.  */
8125       if (parameter != error_mark_node)
8126         parameter_list = process_template_parm (parameter_list,
8127                                                 parameter,
8128                                                 is_non_type);
8129       /* Peek at the next token.  */
8130       token = cp_lexer_peek_token (parser->lexer);
8131       /* If it's not a `,', we're done.  */
8132       if (token->type != CPP_COMMA)
8133         break;
8134       /* Otherwise, consume the `,' token.  */
8135       cp_lexer_consume_token (parser->lexer);
8136     }
8137
8138   return parameter_list;
8139 }
8140
8141 /* Parse a template-parameter.
8142
8143    template-parameter:
8144      type-parameter
8145      parameter-declaration
8146
8147    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
8148    the parameter.  The TREE_PURPOSE is the default value, if any.
8149    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
8150    iff this parameter is a non-type parameter.  */
8151
8152 static tree
8153 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
8154 {
8155   cp_token *token;
8156   cp_parameter_declarator *parameter_declarator;
8157   tree parm;
8158
8159   /* Assume it is a type parameter or a template parameter.  */
8160   *is_non_type = false;
8161   /* Peek at the next token.  */
8162   token = cp_lexer_peek_token (parser->lexer);
8163   /* If it is `class' or `template', we have a type-parameter.  */
8164   if (token->keyword == RID_TEMPLATE)
8165     return cp_parser_type_parameter (parser);
8166   /* If it is `class' or `typename' we do not know yet whether it is a
8167      type parameter or a non-type parameter.  Consider:
8168
8169        template <typename T, typename T::X X> ...
8170
8171      or:
8172
8173        template <class C, class D*> ...
8174
8175      Here, the first parameter is a type parameter, and the second is
8176      a non-type parameter.  We can tell by looking at the token after
8177      the identifier -- if it is a `,', `=', or `>' then we have a type
8178      parameter.  */
8179   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
8180     {
8181       /* Peek at the token after `class' or `typename'.  */
8182       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8183       /* If it's an identifier, skip it.  */
8184       if (token->type == CPP_NAME)
8185         token = cp_lexer_peek_nth_token (parser->lexer, 3);
8186       /* Now, see if the token looks like the end of a template
8187          parameter.  */
8188       if (token->type == CPP_COMMA
8189           || token->type == CPP_EQ
8190           || token->type == CPP_GREATER)
8191         return cp_parser_type_parameter (parser);
8192     }
8193
8194   /* Otherwise, it is a non-type parameter.
8195
8196      [temp.param]
8197
8198      When parsing a default template-argument for a non-type
8199      template-parameter, the first non-nested `>' is taken as the end
8200      of the template parameter-list rather than a greater-than
8201      operator.  */
8202   *is_non_type = true;
8203   parameter_declarator
8204      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
8205                                         /*parenthesized_p=*/NULL);
8206   parm = grokdeclarator (parameter_declarator->declarator,
8207                          &parameter_declarator->decl_specifiers,
8208                          PARM, /*initialized=*/0,
8209                          /*attrlist=*/NULL);
8210   if (parm == error_mark_node)
8211     return error_mark_node;
8212   return build_tree_list (parameter_declarator->default_argument, parm);
8213 }
8214
8215 /* Parse a type-parameter.
8216
8217    type-parameter:
8218      class identifier [opt]
8219      class identifier [opt] = type-id
8220      typename identifier [opt]
8221      typename identifier [opt] = type-id
8222      template < template-parameter-list > class identifier [opt]
8223      template < template-parameter-list > class identifier [opt]
8224        = id-expression
8225
8226    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
8227    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
8228    the declaration of the parameter.  */
8229
8230 static tree
8231 cp_parser_type_parameter (cp_parser* parser)
8232 {
8233   cp_token *token;
8234   tree parameter;
8235
8236   /* Look for a keyword to tell us what kind of parameter this is.  */
8237   token = cp_parser_require (parser, CPP_KEYWORD,
8238                              "`class', `typename', or `template'");
8239   if (!token)
8240     return error_mark_node;
8241
8242   switch (token->keyword)
8243     {
8244     case RID_CLASS:
8245     case RID_TYPENAME:
8246       {
8247         tree identifier;
8248         tree default_argument;
8249
8250         /* If the next token is an identifier, then it names the
8251            parameter.  */
8252         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8253           identifier = cp_parser_identifier (parser);
8254         else
8255           identifier = NULL_TREE;
8256
8257         /* Create the parameter.  */
8258         parameter = finish_template_type_parm (class_type_node, identifier);
8259
8260         /* If the next token is an `=', we have a default argument.  */
8261         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8262           {
8263             /* Consume the `=' token.  */
8264             cp_lexer_consume_token (parser->lexer);
8265             /* Parse the default-argument.  */
8266             default_argument = cp_parser_type_id (parser);
8267           }
8268         else
8269           default_argument = NULL_TREE;
8270
8271         /* Create the combined representation of the parameter and the
8272            default argument.  */
8273         parameter = build_tree_list (default_argument, parameter);
8274       }
8275       break;
8276
8277     case RID_TEMPLATE:
8278       {
8279         tree parameter_list;
8280         tree identifier;
8281         tree default_argument;
8282
8283         /* Look for the `<'.  */
8284         cp_parser_require (parser, CPP_LESS, "`<'");
8285         /* Parse the template-parameter-list.  */
8286         begin_template_parm_list ();
8287         parameter_list
8288           = cp_parser_template_parameter_list (parser);
8289         parameter_list = end_template_parm_list (parameter_list);
8290         /* Look for the `>'.  */
8291         cp_parser_require (parser, CPP_GREATER, "`>'");
8292         /* Look for the `class' keyword.  */
8293         cp_parser_require_keyword (parser, RID_CLASS, "`class'");
8294         /* If the next token is an `=', then there is a
8295            default-argument.  If the next token is a `>', we are at
8296            the end of the parameter-list.  If the next token is a `,',
8297            then we are at the end of this parameter.  */
8298         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8299             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
8300             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8301           {
8302             identifier = cp_parser_identifier (parser);
8303             /* Treat invalid names as if the parameter were nameless.  */
8304             if (identifier == error_mark_node)
8305               identifier = NULL_TREE;
8306           }
8307         else
8308           identifier = NULL_TREE;
8309
8310         /* Create the template parameter.  */
8311         parameter = finish_template_template_parm (class_type_node,
8312                                                    identifier);
8313
8314         /* If the next token is an `=', then there is a
8315            default-argument.  */
8316         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8317           {
8318             bool is_template;
8319
8320             /* Consume the `='.  */
8321             cp_lexer_consume_token (parser->lexer);
8322             /* Parse the id-expression.  */
8323             default_argument
8324               = cp_parser_id_expression (parser,
8325                                          /*template_keyword_p=*/false,
8326                                          /*check_dependency_p=*/true,
8327                                          /*template_p=*/&is_template,
8328                                          /*declarator_p=*/false);
8329             if (TREE_CODE (default_argument) == TYPE_DECL)
8330               /* If the id-expression was a template-id that refers to
8331                  a template-class, we already have the declaration here,
8332                  so no further lookup is needed.  */
8333                  ;
8334             else
8335               /* Look up the name.  */
8336               default_argument
8337                 = cp_parser_lookup_name (parser, default_argument,
8338                                          none_type,
8339                                          /*is_template=*/is_template,
8340                                          /*is_namespace=*/false,
8341                                          /*check_dependency=*/true,
8342                                          /*ambiguous_p=*/NULL);
8343             /* See if the default argument is valid.  */
8344             default_argument
8345               = check_template_template_default_arg (default_argument);
8346           }
8347         else
8348           default_argument = NULL_TREE;
8349
8350         /* Create the combined representation of the parameter and the
8351            default argument.  */
8352         parameter = build_tree_list (default_argument, parameter);
8353       }
8354       break;
8355
8356     default:
8357       gcc_unreachable ();
8358       break;
8359     }
8360
8361   return parameter;
8362 }
8363
8364 /* Parse a template-id.
8365
8366    template-id:
8367      template-name < template-argument-list [opt] >
8368
8369    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8370    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8371    returned.  Otherwise, if the template-name names a function, or set
8372    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8373    names a class, returns a TYPE_DECL for the specialization.
8374
8375    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8376    uninstantiated templates.  */
8377
8378 static tree
8379 cp_parser_template_id (cp_parser *parser,
8380                        bool template_keyword_p,
8381                        bool check_dependency_p,
8382                        bool is_declaration)
8383 {
8384   tree template;
8385   tree arguments;
8386   tree template_id;
8387   cp_token_position start_of_id = 0;
8388   tree access_check = NULL_TREE;
8389   cp_token *next_token, *next_token_2;
8390   bool is_identifier;
8391
8392   /* If the next token corresponds to a template-id, there is no need
8393      to reparse it.  */
8394   next_token = cp_lexer_peek_token (parser->lexer);
8395   if (next_token->type == CPP_TEMPLATE_ID)
8396     {
8397       tree value;
8398       tree check;
8399
8400       /* Get the stored value.  */
8401       value = cp_lexer_consume_token (parser->lexer)->value;
8402       /* Perform any access checks that were deferred.  */
8403       for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
8404         perform_or_defer_access_check (TREE_PURPOSE (check),
8405                                        TREE_VALUE (check));
8406       /* Return the stored value.  */
8407       return TREE_VALUE (value);
8408     }
8409
8410   /* Avoid performing name lookup if there is no possibility of
8411      finding a template-id.  */
8412   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8413       || (next_token->type == CPP_NAME
8414           && !cp_parser_nth_token_starts_template_argument_list_p
8415                (parser, 2)))
8416     {
8417       cp_parser_error (parser, "expected template-id");
8418       return error_mark_node;
8419     }
8420
8421   /* Remember where the template-id starts.  */
8422   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
8423     start_of_id = cp_lexer_token_position (parser->lexer, false);
8424
8425   push_deferring_access_checks (dk_deferred);
8426
8427   /* Parse the template-name.  */
8428   is_identifier = false;
8429   template = cp_parser_template_name (parser, template_keyword_p,
8430                                       check_dependency_p,
8431                                       is_declaration,
8432                                       &is_identifier);
8433   if (template == error_mark_node || is_identifier)
8434     {
8435       pop_deferring_access_checks ();
8436       return template;
8437     }
8438
8439   /* If we find the sequence `[:' after a template-name, it's probably
8440      a digraph-typo for `< ::'. Substitute the tokens and check if we can
8441      parse correctly the argument list.  */
8442   next_token = cp_lexer_peek_token (parser->lexer);
8443   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8444   if (next_token->type == CPP_OPEN_SQUARE
8445       && next_token->flags & DIGRAPH
8446       && next_token_2->type == CPP_COLON
8447       && !(next_token_2->flags & PREV_WHITE))
8448     {
8449       cp_parser_parse_tentatively (parser);
8450       /* Change `:' into `::'.  */
8451       next_token_2->type = CPP_SCOPE;
8452       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8453          CPP_LESS.  */
8454       cp_lexer_consume_token (parser->lexer);
8455       /* Parse the arguments.  */
8456       arguments = cp_parser_enclosed_template_argument_list (parser);
8457       if (!cp_parser_parse_definitely (parser))
8458         {
8459           /* If we couldn't parse an argument list, then we revert our changes
8460              and return simply an error. Maybe this is not a template-id
8461              after all.  */
8462           next_token_2->type = CPP_COLON;
8463           cp_parser_error (parser, "expected %<<%>");
8464           pop_deferring_access_checks ();
8465           return error_mark_node;
8466         }
8467       /* Otherwise, emit an error about the invalid digraph, but continue
8468          parsing because we got our argument list.  */
8469       pedwarn ("%<<::%> cannot begin a template-argument list");
8470       inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
8471               "between %<<%> and %<::%>");
8472       if (!flag_permissive)
8473         {
8474           static bool hint;
8475           if (!hint)
8476             {
8477               inform ("(if you use -fpermissive G++ will accept your code)");
8478               hint = true;
8479             }
8480         }
8481     }
8482   else
8483     {
8484       /* Look for the `<' that starts the template-argument-list.  */
8485       if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8486         {
8487           pop_deferring_access_checks ();
8488           return error_mark_node;
8489         }
8490       /* Parse the arguments.  */
8491       arguments = cp_parser_enclosed_template_argument_list (parser);
8492     }
8493
8494   /* Build a representation of the specialization.  */
8495   if (TREE_CODE (template) == IDENTIFIER_NODE)
8496     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8497   else if (DECL_CLASS_TEMPLATE_P (template)
8498            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8499     template_id
8500       = finish_template_type (template, arguments,
8501                               cp_lexer_next_token_is (parser->lexer,
8502                                                       CPP_SCOPE));
8503   else
8504     {
8505       /* If it's not a class-template or a template-template, it should be
8506          a function-template.  */
8507       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8508                    || TREE_CODE (template) == OVERLOAD
8509                    || BASELINK_P (template)));
8510
8511       template_id = lookup_template_function (template, arguments);
8512     }
8513
8514   /* Retrieve any deferred checks.  Do not pop this access checks yet
8515      so the memory will not be reclaimed during token replacing below.  */
8516   access_check = get_deferred_access_checks ();
8517
8518   /* If parsing tentatively, replace the sequence of tokens that makes
8519      up the template-id with a CPP_TEMPLATE_ID token.  That way,
8520      should we re-parse the token stream, we will not have to repeat
8521      the effort required to do the parse, nor will we issue duplicate
8522      error messages about problems during instantiation of the
8523      template.  */
8524   if (start_of_id)
8525     {
8526       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
8527       
8528       /* Reset the contents of the START_OF_ID token.  */
8529       token->type = CPP_TEMPLATE_ID;
8530       token->value = build_tree_list (access_check, template_id);
8531       token->keyword = RID_MAX;
8532       
8533       /* Purge all subsequent tokens.  */
8534       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
8535
8536       /* ??? Can we actually assume that, if template_id ==
8537          error_mark_node, we will have issued a diagnostic to the
8538          user, as opposed to simply marking the tentative parse as
8539          failed?  */
8540       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
8541         error ("parse error in template argument list");
8542     }
8543
8544   pop_deferring_access_checks ();
8545   return template_id;
8546 }
8547
8548 /* Parse a template-name.
8549
8550    template-name:
8551      identifier
8552
8553    The standard should actually say:
8554
8555    template-name:
8556      identifier
8557      operator-function-id
8558
8559    A defect report has been filed about this issue.
8560
8561    A conversion-function-id cannot be a template name because they cannot
8562    be part of a template-id. In fact, looking at this code:
8563
8564    a.operator K<int>()
8565
8566    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
8567    It is impossible to call a templated conversion-function-id with an
8568    explicit argument list, since the only allowed template parameter is
8569    the type to which it is converting.
8570
8571    If TEMPLATE_KEYWORD_P is true, then we have just seen the
8572    `template' keyword, in a construction like:
8573
8574      T::template f<3>()
8575
8576    In that case `f' is taken to be a template-name, even though there
8577    is no way of knowing for sure.
8578
8579    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
8580    name refers to a set of overloaded functions, at least one of which
8581    is a template, or an IDENTIFIER_NODE with the name of the template,
8582    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
8583    names are looked up inside uninstantiated templates.  */
8584
8585 static tree
8586 cp_parser_template_name (cp_parser* parser,
8587                          bool template_keyword_p,
8588                          bool check_dependency_p,
8589                          bool is_declaration,
8590                          bool *is_identifier)
8591 {
8592   tree identifier;
8593   tree decl;
8594   tree fns;
8595
8596   /* If the next token is `operator', then we have either an
8597      operator-function-id or a conversion-function-id.  */
8598   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
8599     {
8600       /* We don't know whether we're looking at an
8601          operator-function-id or a conversion-function-id.  */
8602       cp_parser_parse_tentatively (parser);
8603       /* Try an operator-function-id.  */
8604       identifier = cp_parser_operator_function_id (parser);
8605       /* If that didn't work, try a conversion-function-id.  */
8606       if (!cp_parser_parse_definitely (parser))
8607         {
8608           cp_parser_error (parser, "expected template-name");
8609           return error_mark_node;
8610         }
8611     }
8612   /* Look for the identifier.  */
8613   else
8614     identifier = cp_parser_identifier (parser);
8615
8616   /* If we didn't find an identifier, we don't have a template-id.  */
8617   if (identifier == error_mark_node)
8618     return error_mark_node;
8619
8620   /* If the name immediately followed the `template' keyword, then it
8621      is a template-name.  However, if the next token is not `<', then
8622      we do not treat it as a template-name, since it is not being used
8623      as part of a template-id.  This enables us to handle constructs
8624      like:
8625
8626        template <typename T> struct S { S(); };
8627        template <typename T> S<T>::S();
8628
8629      correctly.  We would treat `S' as a template -- if it were `S<T>'
8630      -- but we do not if there is no `<'.  */
8631
8632   if (processing_template_decl
8633       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
8634     {
8635       /* In a declaration, in a dependent context, we pretend that the
8636          "template" keyword was present in order to improve error
8637          recovery.  For example, given:
8638
8639            template <typename T> void f(T::X<int>);
8640
8641          we want to treat "X<int>" as a template-id.  */
8642       if (is_declaration
8643           && !template_keyword_p
8644           && parser->scope && TYPE_P (parser->scope)
8645           && check_dependency_p
8646           && dependent_type_p (parser->scope)
8647           /* Do not do this for dtors (or ctors), since they never
8648              need the template keyword before their name.  */
8649           && !constructor_name_p (identifier, parser->scope))
8650         {
8651           cp_token_position start = 0;
8652           
8653           /* Explain what went wrong.  */
8654           error ("non-template %qD used as template", identifier);
8655           inform ("use %<%T::template %D%> to indicate that it is a template",
8656                   parser->scope, identifier);
8657           /* If parsing tentatively, find the location of the "<" token.  */
8658           if (cp_parser_simulate_error (parser))
8659             start = cp_lexer_token_position (parser->lexer, true);
8660           /* Parse the template arguments so that we can issue error
8661              messages about them.  */
8662           cp_lexer_consume_token (parser->lexer);
8663           cp_parser_enclosed_template_argument_list (parser);
8664           /* Skip tokens until we find a good place from which to
8665              continue parsing.  */
8666           cp_parser_skip_to_closing_parenthesis (parser,
8667                                                  /*recovering=*/true,
8668                                                  /*or_comma=*/true,
8669                                                  /*consume_paren=*/false);
8670           /* If parsing tentatively, permanently remove the
8671              template argument list.  That will prevent duplicate
8672              error messages from being issued about the missing
8673              "template" keyword.  */
8674           if (start)
8675             cp_lexer_purge_tokens_after (parser->lexer, start);
8676           if (is_identifier)
8677             *is_identifier = true;
8678           return identifier;
8679         }
8680
8681       /* If the "template" keyword is present, then there is generally
8682          no point in doing name-lookup, so we just return IDENTIFIER.
8683          But, if the qualifying scope is non-dependent then we can
8684          (and must) do name-lookup normally.  */
8685       if (template_keyword_p
8686           && (!parser->scope
8687               || (TYPE_P (parser->scope)
8688                   && dependent_type_p (parser->scope))))
8689         return identifier;
8690     }
8691
8692   /* Look up the name.  */
8693   decl = cp_parser_lookup_name (parser, identifier,
8694                                 none_type,
8695                                 /*is_template=*/false,
8696                                 /*is_namespace=*/false,
8697                                 check_dependency_p,
8698                                 /*ambiguous_p=*/NULL);
8699   decl = maybe_get_template_decl_from_type_decl (decl);
8700
8701   /* If DECL is a template, then the name was a template-name.  */
8702   if (TREE_CODE (decl) == TEMPLATE_DECL)
8703     ;
8704   else
8705     {
8706       /* The standard does not explicitly indicate whether a name that
8707          names a set of overloaded declarations, some of which are
8708          templates, is a template-name.  However, such a name should
8709          be a template-name; otherwise, there is no way to form a
8710          template-id for the overloaded templates.  */
8711       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
8712       if (TREE_CODE (fns) == OVERLOAD)
8713         {
8714           tree fn;
8715
8716           for (fn = fns; fn; fn = OVL_NEXT (fn))
8717             if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
8718               break;
8719         }
8720       else
8721         {
8722           /* Otherwise, the name does not name a template.  */
8723           cp_parser_error (parser, "expected template-name");
8724           return error_mark_node;
8725         }
8726     }
8727
8728   /* If DECL is dependent, and refers to a function, then just return
8729      its name; we will look it up again during template instantiation.  */
8730   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
8731     {
8732       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
8733       if (TYPE_P (scope) && dependent_type_p (scope))
8734         return identifier;
8735     }
8736
8737   return decl;
8738 }
8739
8740 /* Parse a template-argument-list.
8741
8742    template-argument-list:
8743      template-argument
8744      template-argument-list , template-argument
8745
8746    Returns a TREE_VEC containing the arguments.  */
8747
8748 static tree
8749 cp_parser_template_argument_list (cp_parser* parser)
8750 {
8751   tree fixed_args[10];
8752   unsigned n_args = 0;
8753   unsigned alloced = 10;
8754   tree *arg_ary = fixed_args;
8755   tree vec;
8756   bool saved_in_template_argument_list_p;
8757
8758   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
8759   parser->in_template_argument_list_p = true;
8760   do
8761     {
8762       tree argument;
8763
8764       if (n_args)
8765         /* Consume the comma.  */
8766         cp_lexer_consume_token (parser->lexer);
8767
8768       /* Parse the template-argument.  */
8769       argument = cp_parser_template_argument (parser);
8770       if (n_args == alloced)
8771         {
8772           alloced *= 2;
8773
8774           if (arg_ary == fixed_args)
8775             {
8776               arg_ary = xmalloc (sizeof (tree) * alloced);
8777               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
8778             }
8779           else
8780             arg_ary = xrealloc (arg_ary, sizeof (tree) * alloced);
8781         }
8782       arg_ary[n_args++] = argument;
8783     }
8784   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
8785
8786   vec = make_tree_vec (n_args);
8787
8788   while (n_args--)
8789     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
8790
8791   if (arg_ary != fixed_args)
8792     free (arg_ary);
8793   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
8794   return vec;
8795 }
8796
8797 /* Parse a template-argument.
8798
8799    template-argument:
8800      assignment-expression
8801      type-id
8802      id-expression
8803
8804    The representation is that of an assignment-expression, type-id, or
8805    id-expression -- except that the qualified id-expression is
8806    evaluated, so that the value returned is either a DECL or an
8807    OVERLOAD.
8808
8809    Although the standard says "assignment-expression", it forbids
8810    throw-expressions or assignments in the template argument.
8811    Therefore, we use "conditional-expression" instead.  */
8812
8813 static tree
8814 cp_parser_template_argument (cp_parser* parser)
8815 {
8816   tree argument;
8817   bool template_p;
8818   bool address_p;
8819   bool maybe_type_id = false;
8820   cp_token *token;
8821   cp_id_kind idk;
8822   tree qualifying_class;
8823
8824   /* There's really no way to know what we're looking at, so we just
8825      try each alternative in order.
8826
8827        [temp.arg]
8828
8829        In a template-argument, an ambiguity between a type-id and an
8830        expression is resolved to a type-id, regardless of the form of
8831        the corresponding template-parameter.
8832
8833      Therefore, we try a type-id first.  */
8834   cp_parser_parse_tentatively (parser);
8835   argument = cp_parser_type_id (parser);
8836   /* If there was no error parsing the type-id but the next token is a '>>',
8837      we probably found a typo for '> >'. But there are type-id which are
8838      also valid expressions. For instance:
8839
8840      struct X { int operator >> (int); };
8841      template <int V> struct Foo {};
8842      Foo<X () >> 5> r;
8843
8844      Here 'X()' is a valid type-id of a function type, but the user just
8845      wanted to write the expression "X() >> 5". Thus, we remember that we
8846      found a valid type-id, but we still try to parse the argument as an
8847      expression to see what happens.  */
8848   if (!cp_parser_error_occurred (parser)
8849       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
8850     {
8851       maybe_type_id = true;
8852       cp_parser_abort_tentative_parse (parser);
8853     }
8854   else
8855     {
8856       /* If the next token isn't a `,' or a `>', then this argument wasn't
8857       really finished. This means that the argument is not a valid
8858       type-id.  */
8859       if (!cp_parser_next_token_ends_template_argument_p (parser))
8860         cp_parser_error (parser, "expected template-argument");
8861       /* If that worked, we're done.  */
8862       if (cp_parser_parse_definitely (parser))
8863         return argument;
8864     }
8865   /* We're still not sure what the argument will be.  */
8866   cp_parser_parse_tentatively (parser);
8867   /* Try a template.  */
8868   argument = cp_parser_id_expression (parser,
8869                                       /*template_keyword_p=*/false,
8870                                       /*check_dependency_p=*/true,
8871                                       &template_p,
8872                                       /*declarator_p=*/false);
8873   /* If the next token isn't a `,' or a `>', then this argument wasn't
8874      really finished.  */
8875   if (!cp_parser_next_token_ends_template_argument_p (parser))
8876     cp_parser_error (parser, "expected template-argument");
8877   if (!cp_parser_error_occurred (parser))
8878     {
8879       /* Figure out what is being referred to.  If the id-expression
8880          was for a class template specialization, then we will have a
8881          TYPE_DECL at this point.  There is no need to do name lookup
8882          at this point in that case.  */
8883       if (TREE_CODE (argument) != TYPE_DECL)
8884         argument = cp_parser_lookup_name (parser, argument,
8885                                           none_type,
8886                                           /*is_template=*/template_p,
8887                                           /*is_namespace=*/false,
8888                                           /*check_dependency=*/true,
8889                                           /*ambiguous_p=*/NULL);
8890       if (TREE_CODE (argument) != TEMPLATE_DECL
8891           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
8892         cp_parser_error (parser, "expected template-name");
8893     }
8894   if (cp_parser_parse_definitely (parser))
8895     return argument;
8896   /* It must be a non-type argument.  There permitted cases are given
8897      in [temp.arg.nontype]:
8898
8899      -- an integral constant-expression of integral or enumeration
8900         type; or
8901
8902      -- the name of a non-type template-parameter; or
8903
8904      -- the name of an object or function with external linkage...
8905
8906      -- the address of an object or function with external linkage...
8907
8908      -- a pointer to member...  */
8909   /* Look for a non-type template parameter.  */
8910   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8911     {
8912       cp_parser_parse_tentatively (parser);
8913       argument = cp_parser_primary_expression (parser,
8914                                                /*cast_p=*/false,
8915                                                &idk,
8916                                                &qualifying_class);
8917       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
8918           || !cp_parser_next_token_ends_template_argument_p (parser))
8919         cp_parser_simulate_error (parser);
8920       if (cp_parser_parse_definitely (parser))
8921         return argument;
8922     }
8923
8924   /* If the next token is "&", the argument must be the address of an
8925      object or function with external linkage.  */
8926   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
8927   if (address_p)
8928     cp_lexer_consume_token (parser->lexer);
8929   /* See if we might have an id-expression.  */
8930   token = cp_lexer_peek_token (parser->lexer);
8931   if (token->type == CPP_NAME
8932       || token->keyword == RID_OPERATOR
8933       || token->type == CPP_SCOPE
8934       || token->type == CPP_TEMPLATE_ID
8935       || token->type == CPP_NESTED_NAME_SPECIFIER)
8936     {
8937       cp_parser_parse_tentatively (parser);
8938       argument = cp_parser_primary_expression (parser,
8939                                                /*cast_p=*/false,
8940                                                &idk,
8941                                                &qualifying_class);
8942       if (cp_parser_error_occurred (parser)
8943           || !cp_parser_next_token_ends_template_argument_p (parser))
8944         cp_parser_abort_tentative_parse (parser);
8945       else
8946         {
8947           if (TREE_CODE (argument) == INDIRECT_REF)
8948             {
8949               gcc_assert (REFERENCE_REF_P (argument));
8950               argument = TREE_OPERAND (argument, 0);
8951             }
8952           
8953           if (qualifying_class)
8954             argument = finish_qualified_id_expr (qualifying_class,
8955                                                  argument,
8956                                                  /*done=*/true,
8957                                                  address_p);
8958           if (TREE_CODE (argument) == VAR_DECL)
8959             {
8960               /* A variable without external linkage might still be a
8961                  valid constant-expression, so no error is issued here
8962                  if the external-linkage check fails.  */
8963               if (!DECL_EXTERNAL_LINKAGE_P (argument))
8964                 cp_parser_simulate_error (parser);
8965             }
8966           else if (is_overloaded_fn (argument))
8967             /* All overloaded functions are allowed; if the external
8968                linkage test does not pass, an error will be issued
8969                later.  */
8970             ;
8971           else if (address_p
8972                    && (TREE_CODE (argument) == OFFSET_REF
8973                        || TREE_CODE (argument) == SCOPE_REF))
8974             /* A pointer-to-member.  */
8975             ;
8976           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
8977             ;
8978           else
8979             cp_parser_simulate_error (parser);
8980
8981           if (cp_parser_parse_definitely (parser))
8982             {
8983               if (address_p)
8984                 argument = build_x_unary_op (ADDR_EXPR, argument);
8985               return argument;
8986             }
8987         }
8988     }
8989   /* If the argument started with "&", there are no other valid
8990      alternatives at this point.  */
8991   if (address_p)
8992     {
8993       cp_parser_error (parser, "invalid non-type template argument");
8994       return error_mark_node;
8995     }
8996
8997   /* If the argument wasn't successfully parsed as a type-id followed
8998      by '>>', the argument can only be a constant expression now.
8999      Otherwise, we try parsing the constant-expression tentatively,
9000      because the argument could really be a type-id.  */
9001   if (maybe_type_id)
9002     cp_parser_parse_tentatively (parser);
9003   argument = cp_parser_constant_expression (parser,
9004                                             /*allow_non_constant_p=*/false,
9005                                             /*non_constant_p=*/NULL);
9006   argument = fold_non_dependent_expr (argument);
9007   if (!maybe_type_id)
9008     return argument;
9009   if (!cp_parser_next_token_ends_template_argument_p (parser))
9010     cp_parser_error (parser, "expected template-argument");
9011   if (cp_parser_parse_definitely (parser))
9012     return argument;
9013   /* We did our best to parse the argument as a non type-id, but that
9014      was the only alternative that matched (albeit with a '>' after
9015      it). We can assume it's just a typo from the user, and a
9016      diagnostic will then be issued.  */
9017   return cp_parser_type_id (parser);
9018 }
9019
9020 /* Parse an explicit-instantiation.
9021
9022    explicit-instantiation:
9023      template declaration
9024
9025    Although the standard says `declaration', what it really means is:
9026
9027    explicit-instantiation:
9028      template decl-specifier-seq [opt] declarator [opt] ;
9029
9030    Things like `template int S<int>::i = 5, int S<double>::j;' are not
9031    supposed to be allowed.  A defect report has been filed about this
9032    issue.
9033
9034    GNU Extension:
9035
9036    explicit-instantiation:
9037      storage-class-specifier template
9038        decl-specifier-seq [opt] declarator [opt] ;
9039      function-specifier template
9040        decl-specifier-seq [opt] declarator [opt] ;  */
9041
9042 static void
9043 cp_parser_explicit_instantiation (cp_parser* parser)
9044 {
9045   int declares_class_or_enum;
9046   cp_decl_specifier_seq decl_specifiers;
9047   tree extension_specifier = NULL_TREE;
9048
9049   /* Look for an (optional) storage-class-specifier or
9050      function-specifier.  */
9051   if (cp_parser_allow_gnu_extensions_p (parser))
9052     {
9053       extension_specifier
9054         = cp_parser_storage_class_specifier_opt (parser);
9055       if (!extension_specifier)
9056         extension_specifier
9057           = cp_parser_function_specifier_opt (parser,
9058                                               /*decl_specs=*/NULL);
9059     }
9060
9061   /* Look for the `template' keyword.  */
9062   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9063   /* Let the front end know that we are processing an explicit
9064      instantiation.  */
9065   begin_explicit_instantiation ();
9066   /* [temp.explicit] says that we are supposed to ignore access
9067      control while processing explicit instantiation directives.  */
9068   push_deferring_access_checks (dk_no_check);
9069   /* Parse a decl-specifier-seq.  */
9070   cp_parser_decl_specifier_seq (parser,
9071                                 CP_PARSER_FLAGS_OPTIONAL,
9072                                 &decl_specifiers,
9073                                 &declares_class_or_enum);
9074   /* If there was exactly one decl-specifier, and it declared a class,
9075      and there's no declarator, then we have an explicit type
9076      instantiation.  */
9077   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
9078     {
9079       tree type;
9080
9081       type = check_tag_decl (&decl_specifiers);
9082       /* Turn access control back on for names used during
9083          template instantiation.  */
9084       pop_deferring_access_checks ();
9085       if (type)
9086         do_type_instantiation (type, extension_specifier, /*complain=*/1);
9087     }
9088   else
9089     {
9090       cp_declarator *declarator;
9091       tree decl;
9092
9093       /* Parse the declarator.  */
9094       declarator
9095         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9096                                 /*ctor_dtor_or_conv_p=*/NULL,
9097                                 /*parenthesized_p=*/NULL,
9098                                 /*member_p=*/false);
9099       if (declares_class_or_enum & 2)
9100         cp_parser_check_for_definition_in_return_type (declarator,
9101                                                        decl_specifiers.type);
9102       if (declarator != cp_error_declarator)
9103         {
9104           decl = grokdeclarator (declarator, &decl_specifiers,
9105                                  NORMAL, 0, NULL);
9106           /* Turn access control back on for names used during
9107              template instantiation.  */
9108           pop_deferring_access_checks ();
9109           /* Do the explicit instantiation.  */
9110           do_decl_instantiation (decl, extension_specifier);
9111         }
9112       else
9113         {
9114           pop_deferring_access_checks ();
9115           /* Skip the body of the explicit instantiation.  */
9116           cp_parser_skip_to_end_of_statement (parser);
9117         }
9118     }
9119   /* We're done with the instantiation.  */
9120   end_explicit_instantiation ();
9121
9122   cp_parser_consume_semicolon_at_end_of_statement (parser);
9123 }
9124
9125 /* Parse an explicit-specialization.
9126
9127    explicit-specialization:
9128      template < > declaration
9129
9130    Although the standard says `declaration', what it really means is:
9131
9132    explicit-specialization:
9133      template <> decl-specifier [opt] init-declarator [opt] ;
9134      template <> function-definition
9135      template <> explicit-specialization
9136      template <> template-declaration  */
9137
9138 static void
9139 cp_parser_explicit_specialization (cp_parser* parser)
9140 {
9141   /* Look for the `template' keyword.  */
9142   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9143   /* Look for the `<'.  */
9144   cp_parser_require (parser, CPP_LESS, "`<'");
9145   /* Look for the `>'.  */
9146   cp_parser_require (parser, CPP_GREATER, "`>'");
9147   /* We have processed another parameter list.  */
9148   ++parser->num_template_parameter_lists;
9149   /* Let the front end know that we are beginning a specialization.  */
9150   begin_specialization ();
9151
9152   /* If the next keyword is `template', we need to figure out whether
9153      or not we're looking a template-declaration.  */
9154   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
9155     {
9156       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
9157           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
9158         cp_parser_template_declaration_after_export (parser,
9159                                                      /*member_p=*/false);
9160       else
9161         cp_parser_explicit_specialization (parser);
9162     }
9163   else
9164     /* Parse the dependent declaration.  */
9165     cp_parser_single_declaration (parser,
9166                                   /*member_p=*/false,
9167                                   /*friend_p=*/NULL);
9168
9169   /* We're done with the specialization.  */
9170   end_specialization ();
9171   /* We're done with this parameter list.  */
9172   --parser->num_template_parameter_lists;
9173 }
9174
9175 /* Parse a type-specifier.
9176
9177    type-specifier:
9178      simple-type-specifier
9179      class-specifier
9180      enum-specifier
9181      elaborated-type-specifier
9182      cv-qualifier
9183
9184    GNU Extension:
9185
9186    type-specifier:
9187      __complex__
9188
9189    Returns a representation of the type-specifier.  For a
9190    class-specifier, enum-specifier, or elaborated-type-specifier, a
9191    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
9192
9193    The parser flags FLAGS is used to control type-specifier parsing.
9194
9195    If IS_DECLARATION is TRUE, then this type-specifier is appearing
9196    in a decl-specifier-seq.
9197
9198    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
9199    class-specifier, enum-specifier, or elaborated-type-specifier, then
9200    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
9201    if a type is declared; 2 if it is defined.  Otherwise, it is set to
9202    zero.
9203
9204    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
9205    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
9206    is set to FALSE.  */
9207
9208 static tree
9209 cp_parser_type_specifier (cp_parser* parser,
9210                           cp_parser_flags flags,
9211                           cp_decl_specifier_seq *decl_specs,
9212                           bool is_declaration,
9213                           int* declares_class_or_enum,
9214                           bool* is_cv_qualifier)
9215 {
9216   tree type_spec = NULL_TREE;
9217   cp_token *token;
9218   enum rid keyword;
9219   cp_decl_spec ds = ds_last;
9220
9221   /* Assume this type-specifier does not declare a new type.  */
9222   if (declares_class_or_enum)
9223     *declares_class_or_enum = 0;
9224   /* And that it does not specify a cv-qualifier.  */
9225   if (is_cv_qualifier)
9226     *is_cv_qualifier = false;
9227   /* Peek at the next token.  */
9228   token = cp_lexer_peek_token (parser->lexer);
9229
9230   /* If we're looking at a keyword, we can use that to guide the
9231      production we choose.  */
9232   keyword = token->keyword;
9233   switch (keyword)
9234     {
9235     case RID_ENUM:
9236       /* 'enum' [identifier] '{' introduces an enum-specifier;
9237          'enum' <anything else> introduces an elaborated-type-specifier.  */
9238       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_OPEN_BRACE
9239           || (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME
9240               && cp_lexer_peek_nth_token (parser->lexer, 3)->type
9241                  == CPP_OPEN_BRACE))
9242         {
9243           if (parser->num_template_parameter_lists)
9244             {
9245               error ("template declaration of %qs", "enum");
9246               cp_parser_skip_to_end_of_block_or_statement (parser);
9247               type_spec = error_mark_node;
9248             }
9249           else
9250             type_spec = cp_parser_enum_specifier (parser);
9251
9252           if (declares_class_or_enum)
9253             *declares_class_or_enum = 2;
9254           if (decl_specs)
9255             cp_parser_set_decl_spec_type (decl_specs,
9256                                           type_spec,
9257                                           /*user_defined_p=*/true);
9258           return type_spec;
9259         }
9260       else
9261         goto elaborated_type_specifier;
9262
9263       /* Any of these indicate either a class-specifier, or an
9264          elaborated-type-specifier.  */
9265     case RID_CLASS:
9266     case RID_STRUCT:
9267     case RID_UNION:
9268       /* Parse tentatively so that we can back up if we don't find a
9269          class-specifier.  */
9270       cp_parser_parse_tentatively (parser);
9271       /* Look for the class-specifier.  */
9272       type_spec = cp_parser_class_specifier (parser);
9273       /* If that worked, we're done.  */
9274       if (cp_parser_parse_definitely (parser))
9275         {
9276           if (declares_class_or_enum)
9277             *declares_class_or_enum = 2;
9278           if (decl_specs)
9279             cp_parser_set_decl_spec_type (decl_specs,
9280                                           type_spec,
9281                                           /*user_defined_p=*/true);
9282           return type_spec;
9283         }
9284
9285       /* Fall through.  */
9286     elaborated_type_specifier:
9287       /* We're declaring (not defining) a class or enum.  */
9288       if (declares_class_or_enum)
9289         *declares_class_or_enum = 1;
9290
9291       /* Fall through.  */
9292     case RID_TYPENAME:
9293       /* Look for an elaborated-type-specifier.  */
9294       type_spec
9295         = (cp_parser_elaborated_type_specifier
9296            (parser,
9297             decl_specs && decl_specs->specs[(int) ds_friend],
9298             is_declaration));
9299       if (decl_specs)
9300         cp_parser_set_decl_spec_type (decl_specs,
9301                                       type_spec,
9302                                       /*user_defined_p=*/true);
9303       return type_spec;
9304
9305     case RID_CONST:
9306       ds = ds_const;
9307       if (is_cv_qualifier)
9308         *is_cv_qualifier = true;
9309       break;
9310
9311     case RID_VOLATILE:
9312       ds = ds_volatile;
9313       if (is_cv_qualifier)
9314         *is_cv_qualifier = true;
9315       break;
9316
9317     case RID_RESTRICT:
9318       ds = ds_restrict;
9319       if (is_cv_qualifier)
9320         *is_cv_qualifier = true;
9321       break;
9322
9323     case RID_COMPLEX:
9324       /* The `__complex__' keyword is a GNU extension.  */
9325       ds = ds_complex;
9326       break;
9327
9328     default:
9329       break;
9330     }
9331
9332   /* Handle simple keywords.  */
9333   if (ds != ds_last)
9334     {
9335       if (decl_specs)
9336         {
9337           ++decl_specs->specs[(int)ds];
9338           decl_specs->any_specifiers_p = true;
9339         }
9340       return cp_lexer_consume_token (parser->lexer)->value;
9341     }
9342
9343   /* If we do not already have a type-specifier, assume we are looking
9344      at a simple-type-specifier.  */
9345   type_spec = cp_parser_simple_type_specifier (parser,
9346                                                decl_specs,
9347                                                flags);
9348
9349   /* If we didn't find a type-specifier, and a type-specifier was not
9350      optional in this context, issue an error message.  */
9351   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9352     {
9353       cp_parser_error (parser, "expected type specifier");
9354       return error_mark_node;
9355     }
9356
9357   return type_spec;
9358 }
9359
9360 /* Parse a simple-type-specifier.
9361
9362    simple-type-specifier:
9363      :: [opt] nested-name-specifier [opt] type-name
9364      :: [opt] nested-name-specifier template template-id
9365      char
9366      wchar_t
9367      bool
9368      short
9369      int
9370      long
9371      signed
9372      unsigned
9373      float
9374      double
9375      void
9376
9377    GNU Extension:
9378
9379    simple-type-specifier:
9380      __typeof__ unary-expression
9381      __typeof__ ( type-id )
9382
9383    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
9384    appropriately updated.  */
9385
9386 static tree
9387 cp_parser_simple_type_specifier (cp_parser* parser,
9388                                  cp_decl_specifier_seq *decl_specs,
9389                                  cp_parser_flags flags)
9390 {
9391   tree type = NULL_TREE;
9392   cp_token *token;
9393
9394   /* Peek at the next token.  */
9395   token = cp_lexer_peek_token (parser->lexer);
9396
9397   /* If we're looking at a keyword, things are easy.  */
9398   switch (token->keyword)
9399     {
9400     case RID_CHAR:
9401       if (decl_specs)
9402         decl_specs->explicit_char_p = true;
9403       type = char_type_node;
9404       break;
9405     case RID_WCHAR:
9406       type = wchar_type_node;
9407       break;
9408     case RID_BOOL:
9409       type = boolean_type_node;
9410       break;
9411     case RID_SHORT:
9412       if (decl_specs)
9413         ++decl_specs->specs[(int) ds_short];
9414       type = short_integer_type_node;
9415       break;
9416     case RID_INT:
9417       if (decl_specs)
9418         decl_specs->explicit_int_p = true;
9419       type = integer_type_node;
9420       break;
9421     case RID_LONG:
9422       if (decl_specs)
9423         ++decl_specs->specs[(int) ds_long];
9424       type = long_integer_type_node;
9425       break;
9426     case RID_SIGNED:
9427       if (decl_specs)
9428         ++decl_specs->specs[(int) ds_signed];
9429       type = integer_type_node;
9430       break;
9431     case RID_UNSIGNED:
9432       if (decl_specs)
9433         ++decl_specs->specs[(int) ds_unsigned];
9434       type = unsigned_type_node;
9435       break;
9436     case RID_FLOAT:
9437       type = float_type_node;
9438       break;
9439     case RID_DOUBLE:
9440       type = double_type_node;
9441       break;
9442     case RID_VOID:
9443       type = void_type_node;
9444       break;
9445
9446     case RID_TYPEOF:
9447       /* Consume the `typeof' token.  */
9448       cp_lexer_consume_token (parser->lexer);
9449       /* Parse the operand to `typeof'.  */
9450       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9451       /* If it is not already a TYPE, take its type.  */
9452       if (!TYPE_P (type))
9453         type = finish_typeof (type);
9454
9455       if (decl_specs)
9456         cp_parser_set_decl_spec_type (decl_specs, type,
9457                                       /*user_defined_p=*/true);
9458
9459       return type;
9460
9461     default:
9462       break;
9463     }
9464
9465   /* If the type-specifier was for a built-in type, we're done.  */
9466   if (type)
9467     {
9468       tree id;
9469
9470       /* Record the type.  */
9471       if (decl_specs
9472           && (token->keyword != RID_SIGNED
9473               && token->keyword != RID_UNSIGNED
9474               && token->keyword != RID_SHORT
9475               && token->keyword != RID_LONG))
9476         cp_parser_set_decl_spec_type (decl_specs,
9477                                       type,
9478                                       /*user_defined=*/false);
9479       if (decl_specs)
9480         decl_specs->any_specifiers_p = true;
9481
9482       /* Consume the token.  */
9483       id = cp_lexer_consume_token (parser->lexer)->value;
9484
9485       /* There is no valid C++ program where a non-template type is
9486          followed by a "<".  That usually indicates that the user thought
9487          that the type was a template.  */
9488       cp_parser_check_for_invalid_template_id (parser, type);
9489
9490       return TYPE_NAME (type);
9491     }
9492
9493   /* The type-specifier must be a user-defined type.  */
9494   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
9495     {
9496       bool qualified_p;
9497       bool global_p;
9498
9499       /* Don't gobble tokens or issue error messages if this is an
9500          optional type-specifier.  */
9501       if (flags & CP_PARSER_FLAGS_OPTIONAL)
9502         cp_parser_parse_tentatively (parser);
9503
9504       /* Look for the optional `::' operator.  */
9505       global_p
9506         = (cp_parser_global_scope_opt (parser,
9507                                        /*current_scope_valid_p=*/false)
9508            != NULL_TREE);
9509       /* Look for the nested-name specifier.  */
9510       qualified_p
9511         = (cp_parser_nested_name_specifier_opt (parser,
9512                                                 /*typename_keyword_p=*/false,
9513                                                 /*check_dependency_p=*/true,
9514                                                 /*type_p=*/false,
9515                                                 /*is_declaration=*/false)
9516            != NULL_TREE);
9517       /* If we have seen a nested-name-specifier, and the next token
9518          is `template', then we are using the template-id production.  */
9519       if (parser->scope
9520           && cp_parser_optional_template_keyword (parser))
9521         {
9522           /* Look for the template-id.  */
9523           type = cp_parser_template_id (parser,
9524                                         /*template_keyword_p=*/true,
9525                                         /*check_dependency_p=*/true,
9526                                         /*is_declaration=*/false);
9527           /* If the template-id did not name a type, we are out of
9528              luck.  */
9529           if (TREE_CODE (type) != TYPE_DECL)
9530             {
9531               cp_parser_error (parser, "expected template-id for type");
9532               type = NULL_TREE;
9533             }
9534         }
9535       /* Otherwise, look for a type-name.  */
9536       else
9537         type = cp_parser_type_name (parser);
9538       /* Keep track of all name-lookups performed in class scopes.  */
9539       if (type
9540           && !global_p
9541           && !qualified_p
9542           && TREE_CODE (type) == TYPE_DECL
9543           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
9544         maybe_note_name_used_in_class (DECL_NAME (type), type);
9545       /* If it didn't work out, we don't have a TYPE.  */
9546       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
9547           && !cp_parser_parse_definitely (parser))
9548         type = NULL_TREE;
9549       if (type && decl_specs)
9550         cp_parser_set_decl_spec_type (decl_specs, type,
9551                                       /*user_defined=*/true);
9552     }
9553
9554   /* If we didn't get a type-name, issue an error message.  */
9555   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9556     {
9557       cp_parser_error (parser, "expected type-name");
9558       return error_mark_node;
9559     }
9560
9561   /* There is no valid C++ program where a non-template type is
9562      followed by a "<".  That usually indicates that the user thought
9563      that the type was a template.  */
9564   if (type && type != error_mark_node)
9565     cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
9566
9567   return type;
9568 }
9569
9570 /* Parse a type-name.
9571
9572    type-name:
9573      class-name
9574      enum-name
9575      typedef-name
9576
9577    enum-name:
9578      identifier
9579
9580    typedef-name:
9581      identifier
9582
9583    Returns a TYPE_DECL for the type.  */
9584
9585 static tree
9586 cp_parser_type_name (cp_parser* parser)
9587 {
9588   tree type_decl;
9589   tree identifier;
9590
9591   /* We can't know yet whether it is a class-name or not.  */
9592   cp_parser_parse_tentatively (parser);
9593   /* Try a class-name.  */
9594   type_decl = cp_parser_class_name (parser,
9595                                     /*typename_keyword_p=*/false,
9596                                     /*template_keyword_p=*/false,
9597                                     none_type,
9598                                     /*check_dependency_p=*/true,
9599                                     /*class_head_p=*/false,
9600                                     /*is_declaration=*/false);
9601   /* If it's not a class-name, keep looking.  */
9602   if (!cp_parser_parse_definitely (parser))
9603     {
9604       /* It must be a typedef-name or an enum-name.  */
9605       identifier = cp_parser_identifier (parser);
9606       if (identifier == error_mark_node)
9607         return error_mark_node;
9608
9609       /* Look up the type-name.  */
9610       type_decl = cp_parser_lookup_name_simple (parser, identifier);
9611       /* Issue an error if we did not find a type-name.  */
9612       if (TREE_CODE (type_decl) != TYPE_DECL)
9613         {
9614           if (!cp_parser_simulate_error (parser))
9615             cp_parser_name_lookup_error (parser, identifier, type_decl,
9616                                          "is not a type");
9617           type_decl = error_mark_node;
9618         }
9619       /* Remember that the name was used in the definition of the
9620          current class so that we can check later to see if the
9621          meaning would have been different after the class was
9622          entirely defined.  */
9623       else if (type_decl != error_mark_node
9624                && !parser->scope)
9625         maybe_note_name_used_in_class (identifier, type_decl);
9626     }
9627
9628   return type_decl;
9629 }
9630
9631
9632 /* Parse an elaborated-type-specifier.  Note that the grammar given
9633    here incorporates the resolution to DR68.
9634
9635    elaborated-type-specifier:
9636      class-key :: [opt] nested-name-specifier [opt] identifier
9637      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
9638      enum :: [opt] nested-name-specifier [opt] identifier
9639      typename :: [opt] nested-name-specifier identifier
9640      typename :: [opt] nested-name-specifier template [opt]
9641        template-id
9642
9643    GNU extension:
9644
9645    elaborated-type-specifier:
9646      class-key attributes :: [opt] nested-name-specifier [opt] identifier
9647      class-key attributes :: [opt] nested-name-specifier [opt]
9648                template [opt] template-id
9649      enum attributes :: [opt] nested-name-specifier [opt] identifier
9650
9651    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
9652    declared `friend'.  If IS_DECLARATION is TRUE, then this
9653    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
9654    something is being declared.
9655
9656    Returns the TYPE specified.  */
9657
9658 static tree
9659 cp_parser_elaborated_type_specifier (cp_parser* parser,
9660                                      bool is_friend,
9661                                      bool is_declaration)
9662 {
9663   enum tag_types tag_type;
9664   tree identifier;
9665   tree type = NULL_TREE;
9666   tree attributes = NULL_TREE;
9667
9668   /* See if we're looking at the `enum' keyword.  */
9669   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
9670     {
9671       /* Consume the `enum' token.  */
9672       cp_lexer_consume_token (parser->lexer);
9673       /* Remember that it's an enumeration type.  */
9674       tag_type = enum_type;
9675       /* Parse the attributes.  */
9676       attributes = cp_parser_attributes_opt (parser);
9677     }
9678   /* Or, it might be `typename'.  */
9679   else if (cp_lexer_next_token_is_keyword (parser->lexer,
9680                                            RID_TYPENAME))
9681     {
9682       /* Consume the `typename' token.  */
9683       cp_lexer_consume_token (parser->lexer);
9684       /* Remember that it's a `typename' type.  */
9685       tag_type = typename_type;
9686       /* The `typename' keyword is only allowed in templates.  */
9687       if (!processing_template_decl)
9688         pedwarn ("using %<typename%> outside of template");
9689     }
9690   /* Otherwise it must be a class-key.  */
9691   else
9692     {
9693       tag_type = cp_parser_class_key (parser);
9694       if (tag_type == none_type)
9695         return error_mark_node;
9696       /* Parse the attributes.  */
9697       attributes = cp_parser_attributes_opt (parser);
9698     }
9699
9700   /* Look for the `::' operator.  */
9701   cp_parser_global_scope_opt (parser,
9702                               /*current_scope_valid_p=*/false);
9703   /* Look for the nested-name-specifier.  */
9704   if (tag_type == typename_type)
9705     {
9706       if (cp_parser_nested_name_specifier (parser,
9707                                            /*typename_keyword_p=*/true,
9708                                            /*check_dependency_p=*/true,
9709                                            /*type_p=*/true,
9710                                            is_declaration)
9711           == error_mark_node)
9712         return error_mark_node;
9713     }
9714   else
9715     /* Even though `typename' is not present, the proposed resolution
9716        to Core Issue 180 says that in `class A<T>::B', `B' should be
9717        considered a type-name, even if `A<T>' is dependent.  */
9718     cp_parser_nested_name_specifier_opt (parser,
9719                                          /*typename_keyword_p=*/true,
9720                                          /*check_dependency_p=*/true,
9721                                          /*type_p=*/true,
9722                                          is_declaration);
9723   /* For everything but enumeration types, consider a template-id.  */
9724   if (tag_type != enum_type)
9725     {
9726       bool template_p = false;
9727       tree decl;
9728
9729       /* Allow the `template' keyword.  */
9730       template_p = cp_parser_optional_template_keyword (parser);
9731       /* If we didn't see `template', we don't know if there's a
9732          template-id or not.  */
9733       if (!template_p)
9734         cp_parser_parse_tentatively (parser);
9735       /* Parse the template-id.  */
9736       decl = cp_parser_template_id (parser, template_p,
9737                                     /*check_dependency_p=*/true,
9738                                     is_declaration);
9739       /* If we didn't find a template-id, look for an ordinary
9740          identifier.  */
9741       if (!template_p && !cp_parser_parse_definitely (parser))
9742         ;
9743       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
9744          in effect, then we must assume that, upon instantiation, the
9745          template will correspond to a class.  */
9746       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
9747                && tag_type == typename_type)
9748         type = make_typename_type (parser->scope, decl,
9749                                    typename_type,
9750                                    /*complain=*/1);
9751       else
9752         type = TREE_TYPE (decl);
9753     }
9754
9755   /* For an enumeration type, consider only a plain identifier.  */
9756   if (!type)
9757     {
9758       identifier = cp_parser_identifier (parser);
9759
9760       if (identifier == error_mark_node)
9761         {
9762           parser->scope = NULL_TREE;
9763           return error_mark_node;
9764         }
9765
9766       /* For a `typename', we needn't call xref_tag.  */
9767       if (tag_type == typename_type 
9768           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
9769         return cp_parser_make_typename_type (parser, parser->scope,
9770                                              identifier);
9771       /* Look up a qualified name in the usual way.  */
9772       if (parser->scope)
9773         {
9774           tree decl;
9775
9776           decl = cp_parser_lookup_name (parser, identifier,
9777                                         tag_type,
9778                                         /*is_template=*/false,
9779                                         /*is_namespace=*/false,
9780                                         /*check_dependency=*/true,
9781                                         /*ambiguous_p=*/NULL);
9782
9783           /* If we are parsing friend declaration, DECL may be a
9784              TEMPLATE_DECL tree node here.  However, we need to check
9785              whether this TEMPLATE_DECL results in valid code.  Consider
9786              the following example:
9787
9788                namespace N {
9789                  template <class T> class C {};
9790                }
9791                class X {
9792                  template <class T> friend class N::C; // #1, valid code
9793                };
9794                template <class T> class Y {
9795                  friend class N::C;                    // #2, invalid code
9796                };
9797
9798              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
9799              name lookup of `N::C'.  We see that friend declaration must
9800              be template for the code to be valid.  Note that
9801              processing_template_decl does not work here since it is
9802              always 1 for the above two cases.  */
9803
9804           decl = (cp_parser_maybe_treat_template_as_class
9805                   (decl, /*tag_name_p=*/is_friend
9806                          && parser->num_template_parameter_lists));
9807
9808           if (TREE_CODE (decl) != TYPE_DECL)
9809             {
9810               cp_parser_diagnose_invalid_type_name (parser, 
9811                                                     parser->scope,
9812                                                     identifier);
9813               return error_mark_node;
9814             }
9815
9816           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
9817             check_elaborated_type_specifier
9818               (tag_type, decl,
9819                (parser->num_template_parameter_lists
9820                 || DECL_SELF_REFERENCE_P (decl)));
9821
9822           type = TREE_TYPE (decl);
9823         }
9824       else
9825         {
9826           /* An elaborated-type-specifier sometimes introduces a new type and
9827              sometimes names an existing type.  Normally, the rule is that it
9828              introduces a new type only if there is not an existing type of
9829              the same name already in scope.  For example, given:
9830
9831                struct S {};
9832                void f() { struct S s; }
9833
9834              the `struct S' in the body of `f' is the same `struct S' as in
9835              the global scope; the existing definition is used.  However, if
9836              there were no global declaration, this would introduce a new
9837              local class named `S'.
9838
9839              An exception to this rule applies to the following code:
9840
9841                namespace N { struct S; }
9842
9843              Here, the elaborated-type-specifier names a new type
9844              unconditionally; even if there is already an `S' in the
9845              containing scope this declaration names a new type.
9846              This exception only applies if the elaborated-type-specifier
9847              forms the complete declaration:
9848
9849                [class.name]
9850
9851                A declaration consisting solely of `class-key identifier ;' is
9852                either a redeclaration of the name in the current scope or a
9853                forward declaration of the identifier as a class name.  It
9854                introduces the name into the current scope.
9855
9856              We are in this situation precisely when the next token is a `;'.
9857
9858              An exception to the exception is that a `friend' declaration does
9859              *not* name a new type; i.e., given:
9860
9861                struct S { friend struct T; };
9862
9863              `T' is not a new type in the scope of `S'.
9864
9865              Also, `new struct S' or `sizeof (struct S)' never results in the
9866              definition of a new type; a new type can only be declared in a
9867              declaration context.  */
9868
9869           tag_scope ts;
9870           if (is_friend)
9871             /* Friends have special name lookup rules.  */
9872             ts = ts_within_enclosing_non_class;
9873           else if (is_declaration
9874                    && cp_lexer_next_token_is (parser->lexer,
9875                                               CPP_SEMICOLON))
9876             /* This is a `class-key identifier ;' */
9877             ts = ts_current;
9878           else
9879             ts = ts_global;
9880
9881           /* Warn about attributes. They are ignored.  */
9882           if (attributes)
9883             warning ("type attributes are honored only at type definition");
9884
9885           type = xref_tag (tag_type, identifier, ts,
9886                            parser->num_template_parameter_lists);
9887         }
9888     }
9889   if (tag_type != enum_type)
9890     cp_parser_check_class_key (tag_type, type);
9891
9892   /* A "<" cannot follow an elaborated type specifier.  If that
9893      happens, the user was probably trying to form a template-id.  */
9894   cp_parser_check_for_invalid_template_id (parser, type);
9895
9896   return type;
9897 }
9898
9899 /* Parse an enum-specifier.
9900
9901    enum-specifier:
9902      enum identifier [opt] { enumerator-list [opt] }
9903
9904    GNU Extensions:
9905      enum identifier [opt] { enumerator-list [opt] } attributes
9906
9907    Returns an ENUM_TYPE representing the enumeration.  */
9908
9909 static tree
9910 cp_parser_enum_specifier (cp_parser* parser)
9911 {
9912   tree identifier;
9913   tree type;
9914
9915   /* Caller guarantees that the current token is 'enum', an identifier
9916      possibly follows, and the token after that is an opening brace.
9917      If we don't have an identifier, fabricate an anonymous name for
9918      the enumeration being defined.  */
9919   cp_lexer_consume_token (parser->lexer);
9920
9921   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9922     identifier = cp_parser_identifier (parser);
9923   else
9924     identifier = make_anon_name ();
9925
9926   /* Issue an error message if type-definitions are forbidden here.  */
9927   cp_parser_check_type_definition (parser);
9928
9929   /* Create the new type.  We do this before consuming the opening brace
9930      so the enum will be recorded as being on the line of its tag (or the
9931      'enum' keyword, if there is no tag).  */
9932   type = start_enum (identifier);
9933
9934   /* Consume the opening brace.  */
9935   cp_lexer_consume_token (parser->lexer);
9936
9937   /* If the next token is not '}', then there are some enumerators.  */
9938   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
9939     cp_parser_enumerator_list (parser, type);
9940
9941   /* Consume the final '}'.  */
9942   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
9943
9944   /* Look for trailing attributes to apply to this enumeration, and
9945      apply them if appropriate.  */
9946   if (cp_parser_allow_gnu_extensions_p (parser))
9947     {
9948       tree trailing_attr = cp_parser_attributes_opt (parser);
9949       cplus_decl_attributes (&type,
9950                              trailing_attr,
9951                              (int) ATTR_FLAG_TYPE_IN_PLACE);
9952     }
9953
9954   /* Finish up the enumeration.  */
9955   finish_enum (type);
9956
9957   return type;
9958 }
9959
9960 /* Parse an enumerator-list.  The enumerators all have the indicated
9961    TYPE.
9962
9963    enumerator-list:
9964      enumerator-definition
9965      enumerator-list , enumerator-definition  */
9966
9967 static void
9968 cp_parser_enumerator_list (cp_parser* parser, tree type)
9969 {
9970   while (true)
9971     {
9972       /* Parse an enumerator-definition.  */
9973       cp_parser_enumerator_definition (parser, type);
9974
9975       /* If the next token is not a ',', we've reached the end of
9976          the list.  */
9977       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9978         break;
9979       /* Otherwise, consume the `,' and keep going.  */
9980       cp_lexer_consume_token (parser->lexer);
9981       /* If the next token is a `}', there is a trailing comma.  */
9982       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
9983         {
9984           if (pedantic && !in_system_header)
9985             pedwarn ("comma at end of enumerator list");
9986           break;
9987         }
9988     }
9989 }
9990
9991 /* Parse an enumerator-definition.  The enumerator has the indicated
9992    TYPE.
9993
9994    enumerator-definition:
9995      enumerator
9996      enumerator = constant-expression
9997
9998    enumerator:
9999      identifier  */
10000
10001 static void
10002 cp_parser_enumerator_definition (cp_parser* parser, tree type)
10003 {
10004   tree identifier;
10005   tree value;
10006
10007   /* Look for the identifier.  */
10008   identifier = cp_parser_identifier (parser);
10009   if (identifier == error_mark_node)
10010     return;
10011
10012   /* If the next token is an '=', then there is an explicit value.  */
10013   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10014     {
10015       /* Consume the `=' token.  */
10016       cp_lexer_consume_token (parser->lexer);
10017       /* Parse the value.  */
10018       value = cp_parser_constant_expression (parser,
10019                                              /*allow_non_constant_p=*/false,
10020                                              NULL);
10021     }
10022   else
10023     value = NULL_TREE;
10024
10025   /* Create the enumerator.  */
10026   build_enumerator (identifier, value, type);
10027 }
10028
10029 /* Parse a namespace-name.
10030
10031    namespace-name:
10032      original-namespace-name
10033      namespace-alias
10034
10035    Returns the NAMESPACE_DECL for the namespace.  */
10036
10037 static tree
10038 cp_parser_namespace_name (cp_parser* parser)
10039 {
10040   tree identifier;
10041   tree namespace_decl;
10042
10043   /* Get the name of the namespace.  */
10044   identifier = cp_parser_identifier (parser);
10045   if (identifier == error_mark_node)
10046     return error_mark_node;
10047
10048   /* Look up the identifier in the currently active scope.  Look only
10049      for namespaces, due to:
10050
10051        [basic.lookup.udir]
10052
10053        When looking up a namespace-name in a using-directive or alias
10054        definition, only namespace names are considered.
10055
10056      And:
10057
10058        [basic.lookup.qual]
10059
10060        During the lookup of a name preceding the :: scope resolution
10061        operator, object, function, and enumerator names are ignored.
10062
10063      (Note that cp_parser_class_or_namespace_name only calls this
10064      function if the token after the name is the scope resolution
10065      operator.)  */
10066   namespace_decl = cp_parser_lookup_name (parser, identifier,
10067                                           none_type,
10068                                           /*is_template=*/false,
10069                                           /*is_namespace=*/true,
10070                                           /*check_dependency=*/true,
10071                                           /*ambiguous_p=*/NULL);
10072   /* If it's not a namespace, issue an error.  */
10073   if (namespace_decl == error_mark_node
10074       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
10075     {
10076       cp_parser_error (parser, "expected namespace-name");
10077       namespace_decl = error_mark_node;
10078     }
10079
10080   return namespace_decl;
10081 }
10082
10083 /* Parse a namespace-definition.
10084
10085    namespace-definition:
10086      named-namespace-definition
10087      unnamed-namespace-definition
10088
10089    named-namespace-definition:
10090      original-namespace-definition
10091      extension-namespace-definition
10092
10093    original-namespace-definition:
10094      namespace identifier { namespace-body }
10095
10096    extension-namespace-definition:
10097      namespace original-namespace-name { namespace-body }
10098
10099    unnamed-namespace-definition:
10100      namespace { namespace-body } */
10101
10102 static void
10103 cp_parser_namespace_definition (cp_parser* parser)
10104 {
10105   tree identifier;
10106
10107   /* Look for the `namespace' keyword.  */
10108   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10109
10110   /* Get the name of the namespace.  We do not attempt to distinguish
10111      between an original-namespace-definition and an
10112      extension-namespace-definition at this point.  The semantic
10113      analysis routines are responsible for that.  */
10114   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10115     identifier = cp_parser_identifier (parser);
10116   else
10117     identifier = NULL_TREE;
10118
10119   /* Look for the `{' to start the namespace.  */
10120   cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
10121   /* Start the namespace.  */
10122   push_namespace (identifier);
10123   /* Parse the body of the namespace.  */
10124   cp_parser_namespace_body (parser);
10125   /* Finish the namespace.  */
10126   pop_namespace ();
10127   /* Look for the final `}'.  */
10128   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10129 }
10130
10131 /* Parse a namespace-body.
10132
10133    namespace-body:
10134      declaration-seq [opt]  */
10135
10136 static void
10137 cp_parser_namespace_body (cp_parser* parser)
10138 {
10139   cp_parser_declaration_seq_opt (parser);
10140 }
10141
10142 /* Parse a namespace-alias-definition.
10143
10144    namespace-alias-definition:
10145      namespace identifier = qualified-namespace-specifier ;  */
10146
10147 static void
10148 cp_parser_namespace_alias_definition (cp_parser* parser)
10149 {
10150   tree identifier;
10151   tree namespace_specifier;
10152
10153   /* Look for the `namespace' keyword.  */
10154   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10155   /* Look for the identifier.  */
10156   identifier = cp_parser_identifier (parser);
10157   if (identifier == error_mark_node)
10158     return;
10159   /* Look for the `=' token.  */
10160   cp_parser_require (parser, CPP_EQ, "`='");
10161   /* Look for the qualified-namespace-specifier.  */
10162   namespace_specifier
10163     = cp_parser_qualified_namespace_specifier (parser);
10164   /* Look for the `;' token.  */
10165   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10166
10167   /* Register the alias in the symbol table.  */
10168   do_namespace_alias (identifier, namespace_specifier);
10169 }
10170
10171 /* Parse a qualified-namespace-specifier.
10172
10173    qualified-namespace-specifier:
10174      :: [opt] nested-name-specifier [opt] namespace-name
10175
10176    Returns a NAMESPACE_DECL corresponding to the specified
10177    namespace.  */
10178
10179 static tree
10180 cp_parser_qualified_namespace_specifier (cp_parser* parser)
10181 {
10182   /* Look for the optional `::'.  */
10183   cp_parser_global_scope_opt (parser,
10184                               /*current_scope_valid_p=*/false);
10185
10186   /* Look for the optional nested-name-specifier.  */
10187   cp_parser_nested_name_specifier_opt (parser,
10188                                        /*typename_keyword_p=*/false,
10189                                        /*check_dependency_p=*/true,
10190                                        /*type_p=*/false,
10191                                        /*is_declaration=*/true);
10192
10193   return cp_parser_namespace_name (parser);
10194 }
10195
10196 /* Parse a using-declaration.
10197
10198    using-declaration:
10199      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
10200      using :: unqualified-id ;  */
10201
10202 static void
10203 cp_parser_using_declaration (cp_parser* parser)
10204 {
10205   cp_token *token;
10206   bool typename_p = false;
10207   bool global_scope_p;
10208   tree decl;
10209   tree identifier;
10210   tree qscope;
10211
10212   /* Look for the `using' keyword.  */
10213   cp_parser_require_keyword (parser, RID_USING, "`using'");
10214
10215   /* Peek at the next token.  */
10216   token = cp_lexer_peek_token (parser->lexer);
10217   /* See if it's `typename'.  */
10218   if (token->keyword == RID_TYPENAME)
10219     {
10220       /* Remember that we've seen it.  */
10221       typename_p = true;
10222       /* Consume the `typename' token.  */
10223       cp_lexer_consume_token (parser->lexer);
10224     }
10225
10226   /* Look for the optional global scope qualification.  */
10227   global_scope_p
10228     = (cp_parser_global_scope_opt (parser,
10229                                    /*current_scope_valid_p=*/false)
10230        != NULL_TREE);
10231
10232   /* If we saw `typename', or didn't see `::', then there must be a
10233      nested-name-specifier present.  */
10234   if (typename_p || !global_scope_p)
10235     qscope = cp_parser_nested_name_specifier (parser, typename_p,
10236                                               /*check_dependency_p=*/true,
10237                                               /*type_p=*/false,
10238                                               /*is_declaration=*/true);
10239   /* Otherwise, we could be in either of the two productions.  In that
10240      case, treat the nested-name-specifier as optional.  */
10241   else
10242     qscope = cp_parser_nested_name_specifier_opt (parser,
10243                                                   /*typename_keyword_p=*/false,
10244                                                   /*check_dependency_p=*/true,
10245                                                   /*type_p=*/false,
10246                                                   /*is_declaration=*/true);
10247   if (!qscope)
10248     qscope = global_namespace;
10249
10250   /* Parse the unqualified-id.  */
10251   identifier = cp_parser_unqualified_id (parser,
10252                                          /*template_keyword_p=*/false,
10253                                          /*check_dependency_p=*/true,
10254                                          /*declarator_p=*/true);
10255
10256   /* The function we call to handle a using-declaration is different
10257      depending on what scope we are in.  */
10258   if (identifier == error_mark_node)
10259     ;
10260   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
10261            && TREE_CODE (identifier) != BIT_NOT_EXPR)
10262     /* [namespace.udecl]
10263
10264        A using declaration shall not name a template-id.  */
10265     error ("a template-id may not appear in a using-declaration");
10266   else
10267     {
10268       if (at_class_scope_p ())
10269         {
10270           /* Create the USING_DECL.  */
10271           decl = do_class_using_decl (parser->scope, identifier);
10272           /* Add it to the list of members in this class.  */
10273           finish_member_declaration (decl);
10274         }
10275       else
10276         {
10277           decl = cp_parser_lookup_name_simple (parser, identifier);
10278           if (decl == error_mark_node)
10279             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
10280           else if (!at_namespace_scope_p ())
10281             do_local_using_decl (decl, qscope, identifier);
10282           else
10283             do_toplevel_using_decl (decl, qscope, identifier);
10284         }
10285     }
10286
10287   /* Look for the final `;'.  */
10288   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10289 }
10290
10291 /* Parse a using-directive.
10292
10293    using-directive:
10294      using namespace :: [opt] nested-name-specifier [opt]
10295        namespace-name ;  */
10296
10297 static void
10298 cp_parser_using_directive (cp_parser* parser)
10299 {
10300   tree namespace_decl;
10301   tree attribs;
10302
10303   /* Look for the `using' keyword.  */
10304   cp_parser_require_keyword (parser, RID_USING, "`using'");
10305   /* And the `namespace' keyword.  */
10306   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10307   /* Look for the optional `::' operator.  */
10308   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
10309   /* And the optional nested-name-specifier.  */
10310   cp_parser_nested_name_specifier_opt (parser,
10311                                        /*typename_keyword_p=*/false,
10312                                        /*check_dependency_p=*/true,
10313                                        /*type_p=*/false,
10314                                        /*is_declaration=*/true);
10315   /* Get the namespace being used.  */
10316   namespace_decl = cp_parser_namespace_name (parser);
10317   /* And any specified attributes.  */
10318   attribs = cp_parser_attributes_opt (parser);
10319   /* Update the symbol table.  */
10320   parse_using_directive (namespace_decl, attribs);
10321   /* Look for the final `;'.  */
10322   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10323 }
10324
10325 /* Parse an asm-definition.
10326
10327    asm-definition:
10328      asm ( string-literal ) ;
10329
10330    GNU Extension:
10331
10332    asm-definition:
10333      asm volatile [opt] ( string-literal ) ;
10334      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
10335      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10336                           : asm-operand-list [opt] ) ;
10337      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10338                           : asm-operand-list [opt]
10339                           : asm-operand-list [opt] ) ;  */
10340
10341 static void
10342 cp_parser_asm_definition (cp_parser* parser)
10343 {
10344   tree string;
10345   tree outputs = NULL_TREE;
10346   tree inputs = NULL_TREE;
10347   tree clobbers = NULL_TREE;
10348   tree asm_stmt;
10349   bool volatile_p = false;
10350   bool extended_p = false;
10351
10352   /* Look for the `asm' keyword.  */
10353   cp_parser_require_keyword (parser, RID_ASM, "`asm'");
10354   /* See if the next token is `volatile'.  */
10355   if (cp_parser_allow_gnu_extensions_p (parser)
10356       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
10357     {
10358       /* Remember that we saw the `volatile' keyword.  */
10359       volatile_p = true;
10360       /* Consume the token.  */
10361       cp_lexer_consume_token (parser->lexer);
10362     }
10363   /* Look for the opening `('.  */
10364   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
10365     return;
10366   /* Look for the string.  */
10367   string = cp_parser_string_literal (parser, false, false);
10368   if (string == error_mark_node)
10369     {
10370       cp_parser_skip_to_closing_parenthesis (parser, true, false,
10371                                              /*consume_paren=*/true);
10372       return;
10373     }
10374
10375   /* If we're allowing GNU extensions, check for the extended assembly
10376      syntax.  Unfortunately, the `:' tokens need not be separated by
10377      a space in C, and so, for compatibility, we tolerate that here
10378      too.  Doing that means that we have to treat the `::' operator as
10379      two `:' tokens.  */
10380   if (cp_parser_allow_gnu_extensions_p (parser)
10381       && at_function_scope_p ()
10382       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
10383           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
10384     {
10385       bool inputs_p = false;
10386       bool clobbers_p = false;
10387
10388       /* The extended syntax was used.  */
10389       extended_p = true;
10390
10391       /* Look for outputs.  */
10392       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10393         {
10394           /* Consume the `:'.  */
10395           cp_lexer_consume_token (parser->lexer);
10396           /* Parse the output-operands.  */
10397           if (cp_lexer_next_token_is_not (parser->lexer,
10398                                           CPP_COLON)
10399               && cp_lexer_next_token_is_not (parser->lexer,
10400                                              CPP_SCOPE)
10401               && cp_lexer_next_token_is_not (parser->lexer,
10402                                              CPP_CLOSE_PAREN))
10403             outputs = cp_parser_asm_operand_list (parser);
10404         }
10405       /* If the next token is `::', there are no outputs, and the
10406          next token is the beginning of the inputs.  */
10407       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10408         /* The inputs are coming next.  */
10409         inputs_p = true;
10410
10411       /* Look for inputs.  */
10412       if (inputs_p
10413           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10414         {
10415           /* Consume the `:' or `::'.  */
10416           cp_lexer_consume_token (parser->lexer);
10417           /* Parse the output-operands.  */
10418           if (cp_lexer_next_token_is_not (parser->lexer,
10419                                           CPP_COLON)
10420               && cp_lexer_next_token_is_not (parser->lexer,
10421                                              CPP_CLOSE_PAREN))
10422             inputs = cp_parser_asm_operand_list (parser);
10423         }
10424       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10425         /* The clobbers are coming next.  */
10426         clobbers_p = true;
10427
10428       /* Look for clobbers.  */
10429       if (clobbers_p
10430           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10431         {
10432           /* Consume the `:' or `::'.  */
10433           cp_lexer_consume_token (parser->lexer);
10434           /* Parse the clobbers.  */
10435           if (cp_lexer_next_token_is_not (parser->lexer,
10436                                           CPP_CLOSE_PAREN))
10437             clobbers = cp_parser_asm_clobber_list (parser);
10438         }
10439     }
10440   /* Look for the closing `)'.  */
10441   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
10442     cp_parser_skip_to_closing_parenthesis (parser, true, false,
10443                                            /*consume_paren=*/true);
10444   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10445
10446   /* Create the ASM_EXPR.  */
10447   if (at_function_scope_p ())
10448     {
10449       asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
10450                                   inputs, clobbers);
10451       /* If the extended syntax was not used, mark the ASM_EXPR.  */
10452       if (!extended_p)
10453         {
10454           tree temp = asm_stmt;
10455           if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
10456             temp = TREE_OPERAND (temp, 0);
10457           
10458           ASM_INPUT_P (temp) = 1;
10459         }
10460     }
10461   else
10462     assemble_asm (string);
10463 }
10464
10465 /* Declarators [gram.dcl.decl] */
10466
10467 /* Parse an init-declarator.
10468
10469    init-declarator:
10470      declarator initializer [opt]
10471
10472    GNU Extension:
10473
10474    init-declarator:
10475      declarator asm-specification [opt] attributes [opt] initializer [opt]
10476
10477    function-definition:
10478      decl-specifier-seq [opt] declarator ctor-initializer [opt]
10479        function-body
10480      decl-specifier-seq [opt] declarator function-try-block
10481
10482    GNU Extension:
10483
10484    function-definition:
10485      __extension__ function-definition
10486
10487    The DECL_SPECIFIERS and PREFIX_ATTRIBUTES apply to this declarator.
10488    Returns a representation of the entity declared.  If MEMBER_P is TRUE,
10489    then this declarator appears in a class scope.  The new DECL created
10490    by this declarator is returned.
10491
10492    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
10493    for a function-definition here as well.  If the declarator is a
10494    declarator for a function-definition, *FUNCTION_DEFINITION_P will
10495    be TRUE upon return.  By that point, the function-definition will
10496    have been completely parsed.
10497
10498    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
10499    is FALSE.  */
10500
10501 static tree
10502 cp_parser_init_declarator (cp_parser* parser,
10503                            cp_decl_specifier_seq *decl_specifiers,
10504                            bool function_definition_allowed_p,
10505                            bool member_p,
10506                            int declares_class_or_enum,
10507                            bool* function_definition_p)
10508 {
10509   cp_token *token;
10510   cp_declarator *declarator;
10511   tree prefix_attributes;
10512   tree attributes;
10513   tree asm_specification;
10514   tree initializer;
10515   tree decl = NULL_TREE;
10516   tree scope;
10517   bool is_initialized;
10518   bool is_parenthesized_init;
10519   bool is_non_constant_init;
10520   int ctor_dtor_or_conv_p;
10521   bool friend_p;
10522   tree pushed_scope = NULL;
10523
10524   /* Gather the attributes that were provided with the
10525      decl-specifiers.  */
10526   prefix_attributes = decl_specifiers->attributes;
10527
10528   /* Assume that this is not the declarator for a function
10529      definition.  */
10530   if (function_definition_p)
10531     *function_definition_p = false;
10532
10533   /* Defer access checks while parsing the declarator; we cannot know
10534      what names are accessible until we know what is being
10535      declared.  */
10536   resume_deferring_access_checks ();
10537
10538   /* Parse the declarator.  */
10539   declarator
10540     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10541                             &ctor_dtor_or_conv_p,
10542                             /*parenthesized_p=*/NULL,
10543                             /*member_p=*/false);
10544   /* Gather up the deferred checks.  */
10545   stop_deferring_access_checks ();
10546
10547   /* If the DECLARATOR was erroneous, there's no need to go
10548      further.  */
10549   if (declarator == cp_error_declarator)
10550     return error_mark_node;
10551
10552   if (declares_class_or_enum & 2)
10553     cp_parser_check_for_definition_in_return_type (declarator,
10554                                                    decl_specifiers->type);
10555
10556   /* Figure out what scope the entity declared by the DECLARATOR is
10557      located in.  `grokdeclarator' sometimes changes the scope, so
10558      we compute it now.  */
10559   scope = get_scope_of_declarator (declarator);
10560
10561   /* If we're allowing GNU extensions, look for an asm-specification
10562      and attributes.  */
10563   if (cp_parser_allow_gnu_extensions_p (parser))
10564     {
10565       /* Look for an asm-specification.  */
10566       asm_specification = cp_parser_asm_specification_opt (parser);
10567       /* And attributes.  */
10568       attributes = cp_parser_attributes_opt (parser);
10569     }
10570   else
10571     {
10572       asm_specification = NULL_TREE;
10573       attributes = NULL_TREE;
10574     }
10575
10576   /* Peek at the next token.  */
10577   token = cp_lexer_peek_token (parser->lexer);
10578   /* Check to see if the token indicates the start of a
10579      function-definition.  */
10580   if (cp_parser_token_starts_function_definition_p (token))
10581     {
10582       if (!function_definition_allowed_p)
10583         {
10584           /* If a function-definition should not appear here, issue an
10585              error message.  */
10586           cp_parser_error (parser,
10587                            "a function-definition is not allowed here");
10588           return error_mark_node;
10589         }
10590       else
10591         {
10592           /* Neither attributes nor an asm-specification are allowed
10593              on a function-definition.  */
10594           if (asm_specification)
10595             error ("an asm-specification is not allowed on a function-definition");
10596           if (attributes)
10597             error ("attributes are not allowed on a function-definition");
10598           /* This is a function-definition.  */
10599           *function_definition_p = true;
10600
10601           /* Parse the function definition.  */
10602           if (member_p)
10603             decl = cp_parser_save_member_function_body (parser,
10604                                                         decl_specifiers,
10605                                                         declarator,
10606                                                         prefix_attributes);
10607           else
10608             decl
10609               = (cp_parser_function_definition_from_specifiers_and_declarator
10610                  (parser, decl_specifiers, prefix_attributes, declarator));
10611
10612           return decl;
10613         }
10614     }
10615
10616   /* [dcl.dcl]
10617
10618      Only in function declarations for constructors, destructors, and
10619      type conversions can the decl-specifier-seq be omitted.
10620
10621      We explicitly postpone this check past the point where we handle
10622      function-definitions because we tolerate function-definitions
10623      that are missing their return types in some modes.  */
10624   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
10625     {
10626       cp_parser_error (parser,
10627                        "expected constructor, destructor, or type conversion");
10628       return error_mark_node;
10629     }
10630
10631   /* An `=' or an `(' indicates an initializer.  */
10632   is_initialized = (token->type == CPP_EQ
10633                      || token->type == CPP_OPEN_PAREN);
10634   /* If the init-declarator isn't initialized and isn't followed by a
10635      `,' or `;', it's not a valid init-declarator.  */
10636   if (!is_initialized
10637       && token->type != CPP_COMMA
10638       && token->type != CPP_SEMICOLON)
10639     {
10640       cp_parser_error (parser, "expected initializer");
10641       return error_mark_node;
10642     }
10643
10644   /* Because start_decl has side-effects, we should only call it if we
10645      know we're going ahead.  By this point, we know that we cannot
10646      possibly be looking at any other construct.  */
10647   cp_parser_commit_to_tentative_parse (parser);
10648
10649   /* If the decl specifiers were bad, issue an error now that we're
10650      sure this was intended to be a declarator.  Then continue
10651      declaring the variable(s), as int, to try to cut down on further
10652      errors.  */
10653   if (decl_specifiers->any_specifiers_p
10654       && decl_specifiers->type == error_mark_node)
10655     {
10656       cp_parser_error (parser, "invalid type in declaration");
10657       decl_specifiers->type = integer_type_node;
10658     }
10659
10660   /* Check to see whether or not this declaration is a friend.  */
10661   friend_p = cp_parser_friend_p (decl_specifiers);
10662
10663   /* Check that the number of template-parameter-lists is OK.  */
10664   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
10665     return error_mark_node;
10666
10667   /* Enter the newly declared entry in the symbol table.  If we're
10668      processing a declaration in a class-specifier, we wait until
10669      after processing the initializer.  */
10670   if (!member_p)
10671     {
10672       if (parser->in_unbraced_linkage_specification_p)
10673         {
10674           decl_specifiers->storage_class = sc_extern;
10675           have_extern_spec = false;
10676         }
10677       decl = start_decl (declarator, decl_specifiers,
10678                          is_initialized, attributes, prefix_attributes,
10679                          &pushed_scope);
10680     }
10681   else if (scope)
10682     /* Enter the SCOPE.  That way unqualified names appearing in the
10683        initializer will be looked up in SCOPE.  */
10684     pushed_scope = push_scope (scope);
10685
10686   /* Perform deferred access control checks, now that we know in which
10687      SCOPE the declared entity resides.  */
10688   if (!member_p && decl)
10689     {
10690       tree saved_current_function_decl = NULL_TREE;
10691
10692       /* If the entity being declared is a function, pretend that we
10693          are in its scope.  If it is a `friend', it may have access to
10694          things that would not otherwise be accessible.  */
10695       if (TREE_CODE (decl) == FUNCTION_DECL)
10696         {
10697           saved_current_function_decl = current_function_decl;
10698           current_function_decl = decl;
10699         }
10700
10701       /* Perform the access control checks for the declarator and the
10702          the decl-specifiers.  */
10703       perform_deferred_access_checks ();
10704
10705       /* Restore the saved value.  */
10706       if (TREE_CODE (decl) == FUNCTION_DECL)
10707         current_function_decl = saved_current_function_decl;
10708     }
10709
10710   /* Parse the initializer.  */
10711   if (is_initialized)
10712     initializer = cp_parser_initializer (parser,
10713                                          &is_parenthesized_init,
10714                                          &is_non_constant_init);
10715   else
10716     {
10717       initializer = NULL_TREE;
10718       is_parenthesized_init = false;
10719       is_non_constant_init = true;
10720     }
10721
10722   /* The old parser allows attributes to appear after a parenthesized
10723      initializer.  Mark Mitchell proposed removing this functionality
10724      on the GCC mailing lists on 2002-08-13.  This parser accepts the
10725      attributes -- but ignores them.  */
10726   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
10727     if (cp_parser_attributes_opt (parser))
10728       warning ("attributes after parenthesized initializer ignored");
10729
10730   /* For an in-class declaration, use `grokfield' to create the
10731      declaration.  */
10732   if (member_p)
10733     {
10734       if (pushed_scope)
10735         {
10736           pop_scope (pushed_scope);
10737           pushed_scope = false;
10738         }
10739       decl = grokfield (declarator, decl_specifiers,
10740                         initializer, /*asmspec=*/NULL_TREE,
10741                         /*attributes=*/NULL_TREE);
10742       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
10743         cp_parser_save_default_args (parser, decl);
10744     }
10745
10746   /* Finish processing the declaration.  But, skip friend
10747      declarations.  */
10748   if (!friend_p && decl && decl != error_mark_node)
10749     {
10750       cp_finish_decl (decl,
10751                       initializer,
10752                       asm_specification,
10753                       /* If the initializer is in parentheses, then this is
10754                          a direct-initialization, which means that an
10755                          `explicit' constructor is OK.  Otherwise, an
10756                          `explicit' constructor cannot be used.  */
10757                       ((is_parenthesized_init || !is_initialized)
10758                      ? 0 : LOOKUP_ONLYCONVERTING));
10759     }
10760   if (!friend_p && pushed_scope)
10761     pop_scope (pushed_scope);
10762
10763   /* Remember whether or not variables were initialized by
10764      constant-expressions.  */
10765   if (decl && TREE_CODE (decl) == VAR_DECL
10766       && is_initialized && !is_non_constant_init)
10767     DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
10768
10769   return decl;
10770 }
10771
10772 /* Parse a declarator.
10773
10774    declarator:
10775      direct-declarator
10776      ptr-operator declarator
10777
10778    abstract-declarator:
10779      ptr-operator abstract-declarator [opt]
10780      direct-abstract-declarator
10781
10782    GNU Extensions:
10783
10784    declarator:
10785      attributes [opt] direct-declarator
10786      attributes [opt] ptr-operator declarator
10787
10788    abstract-declarator:
10789      attributes [opt] ptr-operator abstract-declarator [opt]
10790      attributes [opt] direct-abstract-declarator
10791
10792    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
10793    detect constructor, destructor or conversion operators. It is set
10794    to -1 if the declarator is a name, and +1 if it is a
10795    function. Otherwise it is set to zero. Usually you just want to
10796    test for >0, but internally the negative value is used.
10797
10798    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
10799    a decl-specifier-seq unless it declares a constructor, destructor,
10800    or conversion.  It might seem that we could check this condition in
10801    semantic analysis, rather than parsing, but that makes it difficult
10802    to handle something like `f()'.  We want to notice that there are
10803    no decl-specifiers, and therefore realize that this is an
10804    expression, not a declaration.)
10805
10806    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
10807    the declarator is a direct-declarator of the form "(...)".  
10808
10809    MEMBER_P is true iff this declarator is a member-declarator.  */
10810
10811 static cp_declarator *
10812 cp_parser_declarator (cp_parser* parser,
10813                       cp_parser_declarator_kind dcl_kind,
10814                       int* ctor_dtor_or_conv_p,
10815                       bool* parenthesized_p,
10816                       bool member_p)
10817 {
10818   cp_token *token;
10819   cp_declarator *declarator;
10820   enum tree_code code;
10821   cp_cv_quals cv_quals;
10822   tree class_type;
10823   tree attributes = NULL_TREE;
10824
10825   /* Assume this is not a constructor, destructor, or type-conversion
10826      operator.  */
10827   if (ctor_dtor_or_conv_p)
10828     *ctor_dtor_or_conv_p = 0;
10829
10830   if (cp_parser_allow_gnu_extensions_p (parser))
10831     attributes = cp_parser_attributes_opt (parser);
10832
10833   /* Peek at the next token.  */
10834   token = cp_lexer_peek_token (parser->lexer);
10835
10836   /* Check for the ptr-operator production.  */
10837   cp_parser_parse_tentatively (parser);
10838   /* Parse the ptr-operator.  */
10839   code = cp_parser_ptr_operator (parser,
10840                                  &class_type,
10841                                  &cv_quals);
10842   /* If that worked, then we have a ptr-operator.  */
10843   if (cp_parser_parse_definitely (parser))
10844     {
10845       /* If a ptr-operator was found, then this declarator was not
10846          parenthesized.  */
10847       if (parenthesized_p)
10848         *parenthesized_p = true;
10849       /* The dependent declarator is optional if we are parsing an
10850          abstract-declarator.  */
10851       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
10852         cp_parser_parse_tentatively (parser);
10853
10854       /* Parse the dependent declarator.  */
10855       declarator = cp_parser_declarator (parser, dcl_kind,
10856                                          /*ctor_dtor_or_conv_p=*/NULL,
10857                                          /*parenthesized_p=*/NULL,
10858                                          /*member_p=*/false);
10859
10860       /* If we are parsing an abstract-declarator, we must handle the
10861          case where the dependent declarator is absent.  */
10862       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
10863           && !cp_parser_parse_definitely (parser))
10864         declarator = NULL;
10865
10866       /* Build the representation of the ptr-operator.  */
10867       if (class_type)
10868         declarator = make_ptrmem_declarator (cv_quals,
10869                                              class_type,
10870                                              declarator);
10871       else if (code == INDIRECT_REF)
10872         declarator = make_pointer_declarator (cv_quals, declarator);
10873       else
10874         declarator = make_reference_declarator (cv_quals, declarator);
10875     }
10876   /* Everything else is a direct-declarator.  */
10877   else
10878     {
10879       if (parenthesized_p)
10880         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
10881                                                    CPP_OPEN_PAREN);
10882       declarator = cp_parser_direct_declarator (parser, dcl_kind,
10883                                                 ctor_dtor_or_conv_p,
10884                                                 member_p);
10885     }
10886
10887   if (attributes && declarator != cp_error_declarator)
10888     declarator->attributes = attributes;
10889
10890   return declarator;
10891 }
10892
10893 /* Parse a direct-declarator or direct-abstract-declarator.
10894
10895    direct-declarator:
10896      declarator-id
10897      direct-declarator ( parameter-declaration-clause )
10898        cv-qualifier-seq [opt]
10899        exception-specification [opt]
10900      direct-declarator [ constant-expression [opt] ]
10901      ( declarator )
10902
10903    direct-abstract-declarator:
10904      direct-abstract-declarator [opt]
10905        ( parameter-declaration-clause )
10906        cv-qualifier-seq [opt]
10907        exception-specification [opt]
10908      direct-abstract-declarator [opt] [ constant-expression [opt] ]
10909      ( abstract-declarator )
10910
10911    Returns a representation of the declarator.  DCL_KIND is
10912    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
10913    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
10914    we are parsing a direct-declarator.  It is
10915    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
10916    of ambiguity we prefer an abstract declarator, as per
10917    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
10918    cp_parser_declarator.  */
10919
10920 static cp_declarator *
10921 cp_parser_direct_declarator (cp_parser* parser,
10922                              cp_parser_declarator_kind dcl_kind,
10923                              int* ctor_dtor_or_conv_p,
10924                              bool member_p)
10925 {
10926   cp_token *token;
10927   cp_declarator *declarator = NULL;
10928   tree scope = NULL_TREE;
10929   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
10930   bool saved_in_declarator_p = parser->in_declarator_p;
10931   bool first = true;
10932   tree pushed_scope = NULL_TREE;
10933
10934   while (true)
10935     {
10936       /* Peek at the next token.  */
10937       token = cp_lexer_peek_token (parser->lexer);
10938       if (token->type == CPP_OPEN_PAREN)
10939         {
10940           /* This is either a parameter-declaration-clause, or a
10941              parenthesized declarator. When we know we are parsing a
10942              named declarator, it must be a parenthesized declarator
10943              if FIRST is true. For instance, `(int)' is a
10944              parameter-declaration-clause, with an omitted
10945              direct-abstract-declarator. But `((*))', is a
10946              parenthesized abstract declarator. Finally, when T is a
10947              template parameter `(T)' is a
10948              parameter-declaration-clause, and not a parenthesized
10949              named declarator.
10950
10951              We first try and parse a parameter-declaration-clause,
10952              and then try a nested declarator (if FIRST is true).
10953
10954              It is not an error for it not to be a
10955              parameter-declaration-clause, even when FIRST is
10956              false. Consider,
10957
10958                int i (int);
10959                int i (3);
10960
10961              The first is the declaration of a function while the
10962              second is a the definition of a variable, including its
10963              initializer.
10964
10965              Having seen only the parenthesis, we cannot know which of
10966              these two alternatives should be selected.  Even more
10967              complex are examples like:
10968
10969                int i (int (a));
10970                int i (int (3));
10971
10972              The former is a function-declaration; the latter is a
10973              variable initialization.
10974
10975              Thus again, we try a parameter-declaration-clause, and if
10976              that fails, we back out and return.  */
10977
10978           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
10979             {
10980               cp_parameter_declarator *params;
10981               unsigned saved_num_template_parameter_lists;
10982
10983               /* In a member-declarator, the only valid interpretation
10984                  of a parenthesis is the start of a
10985                  parameter-declaration-clause.  (It is invalid to
10986                  initialize a static data member with a parenthesized
10987                  initializer; only the "=" form of initialization is
10988                  permitted.)  */
10989               if (!member_p)
10990                 cp_parser_parse_tentatively (parser);
10991
10992               /* Consume the `('.  */
10993               cp_lexer_consume_token (parser->lexer);
10994               if (first)
10995                 {
10996                   /* If this is going to be an abstract declarator, we're
10997                      in a declarator and we can't have default args.  */
10998                   parser->default_arg_ok_p = false;
10999                   parser->in_declarator_p = true;
11000                 }
11001
11002               /* Inside the function parameter list, surrounding
11003                  template-parameter-lists do not apply.  */
11004               saved_num_template_parameter_lists
11005                 = parser->num_template_parameter_lists;
11006               parser->num_template_parameter_lists = 0;
11007
11008               /* Parse the parameter-declaration-clause.  */
11009               params = cp_parser_parameter_declaration_clause (parser);
11010
11011               parser->num_template_parameter_lists
11012                 = saved_num_template_parameter_lists;
11013
11014               /* If all went well, parse the cv-qualifier-seq and the
11015                  exception-specification.  */
11016               if (member_p || cp_parser_parse_definitely (parser))
11017                 {
11018                   cp_cv_quals cv_quals;
11019                   tree exception_specification;
11020
11021                   if (ctor_dtor_or_conv_p)
11022                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
11023                   first = false;
11024                   /* Consume the `)'.  */
11025                   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
11026
11027                   /* Parse the cv-qualifier-seq.  */
11028                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11029                   /* And the exception-specification.  */
11030                   exception_specification
11031                     = cp_parser_exception_specification_opt (parser);
11032
11033                   /* Create the function-declarator.  */
11034                   declarator = make_call_declarator (declarator,
11035                                                      params,
11036                                                      cv_quals,
11037                                                      exception_specification);
11038                   /* Any subsequent parameter lists are to do with
11039                      return type, so are not those of the declared
11040                      function.  */
11041                   parser->default_arg_ok_p = false;
11042
11043                   /* Repeat the main loop.  */
11044                   continue;
11045                 }
11046             }
11047
11048           /* If this is the first, we can try a parenthesized
11049              declarator.  */
11050           if (first)
11051             {
11052               bool saved_in_type_id_in_expr_p;
11053
11054               parser->default_arg_ok_p = saved_default_arg_ok_p;
11055               parser->in_declarator_p = saved_in_declarator_p;
11056
11057               /* Consume the `('.  */
11058               cp_lexer_consume_token (parser->lexer);
11059               /* Parse the nested declarator.  */
11060               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
11061               parser->in_type_id_in_expr_p = true;
11062               declarator
11063                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
11064                                         /*parenthesized_p=*/NULL,
11065                                         member_p);
11066               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
11067               first = false;
11068               /* Expect a `)'.  */
11069               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11070                 declarator = cp_error_declarator;
11071               if (declarator == cp_error_declarator)
11072                 break;
11073
11074               goto handle_declarator;
11075             }
11076           /* Otherwise, we must be done.  */
11077           else
11078             break;
11079         }
11080       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11081                && token->type == CPP_OPEN_SQUARE)
11082         {
11083           /* Parse an array-declarator.  */
11084           tree bounds;
11085
11086           if (ctor_dtor_or_conv_p)
11087             *ctor_dtor_or_conv_p = 0;
11088
11089           first = false;
11090           parser->default_arg_ok_p = false;
11091           parser->in_declarator_p = true;
11092           /* Consume the `['.  */
11093           cp_lexer_consume_token (parser->lexer);
11094           /* Peek at the next token.  */
11095           token = cp_lexer_peek_token (parser->lexer);
11096           /* If the next token is `]', then there is no
11097              constant-expression.  */
11098           if (token->type != CPP_CLOSE_SQUARE)
11099             {
11100               bool non_constant_p;
11101
11102               bounds
11103                 = cp_parser_constant_expression (parser,
11104                                                  /*allow_non_constant=*/true,
11105                                                  &non_constant_p);
11106               if (!non_constant_p)
11107                 bounds = fold_non_dependent_expr (bounds);
11108               /* Normally, the array bound must be an integral constant
11109                  expression.  However, as an extension, we allow VLAs
11110                  in function scopes.  */  
11111               else if (!at_function_scope_p ())
11112                 {
11113                   error ("array bound is not an integer constant");
11114                   bounds = error_mark_node;
11115                 }
11116             }
11117           else
11118             bounds = NULL_TREE;
11119           /* Look for the closing `]'.  */
11120           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
11121             {
11122               declarator = cp_error_declarator;
11123               break;
11124             }
11125
11126           declarator = make_array_declarator (declarator, bounds);
11127         }
11128       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
11129         {
11130           tree qualifying_scope;
11131           tree unqualified_name;
11132
11133           /* Parse a declarator-id */
11134           if (dcl_kind == CP_PARSER_DECLARATOR_EITHER)
11135             cp_parser_parse_tentatively (parser);
11136           unqualified_name = cp_parser_declarator_id (parser);
11137           qualifying_scope = parser->scope;
11138           if (dcl_kind == CP_PARSER_DECLARATOR_EITHER)
11139             {
11140               if (!cp_parser_parse_definitely (parser))
11141                 unqualified_name = error_mark_node;
11142               else if (qualifying_scope
11143                        || (TREE_CODE (unqualified_name) 
11144                            != IDENTIFIER_NODE))
11145                 {
11146                   cp_parser_error (parser, "expected unqualified-id");
11147                   unqualified_name = error_mark_node;
11148                 }
11149             }
11150
11151           if (unqualified_name == error_mark_node)
11152             {
11153               declarator = cp_error_declarator;
11154               break;
11155             }
11156
11157           if (qualifying_scope && at_namespace_scope_p ()
11158               && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
11159             {
11160               /* In the declaration of a member of a template class
11161                  outside of the class itself, the SCOPE will sometimes
11162                  be a TYPENAME_TYPE.  For example, given:
11163
11164                  template <typename T>
11165                  int S<T>::R::i = 3;
11166
11167                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
11168                  this context, we must resolve S<T>::R to an ordinary
11169                  type, rather than a typename type.
11170
11171                  The reason we normally avoid resolving TYPENAME_TYPEs
11172                  is that a specialization of `S' might render
11173                  `S<T>::R' not a type.  However, if `S' is
11174                  specialized, then this `i' will not be used, so there
11175                  is no harm in resolving the types here.  */
11176               tree type;
11177               
11178               /* Resolve the TYPENAME_TYPE.  */
11179               type = resolve_typename_type (qualifying_scope,
11180                                             /*only_current_p=*/false);
11181               /* If that failed, the declarator is invalid.  */
11182               if (type == error_mark_node)
11183                 error ("%<%T::%D%> is not a type",
11184                        TYPE_CONTEXT (qualifying_scope),
11185                        TYPE_IDENTIFIER (qualifying_scope));
11186               qualifying_scope = type;
11187             }
11188
11189           declarator = make_id_declarator (qualifying_scope, 
11190                                            unqualified_name);
11191           declarator->id_loc = token->location;
11192           if (unqualified_name)
11193             {
11194               tree class_type;
11195
11196               if (qualifying_scope
11197                   && CLASS_TYPE_P (qualifying_scope))
11198                 class_type = qualifying_scope;
11199               else
11200                 class_type = current_class_type;
11201
11202               if (class_type)
11203                 {
11204                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
11205                     declarator->u.id.sfk = sfk_destructor;
11206                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
11207                     declarator->u.id.sfk = sfk_conversion;
11208                   else if (/* There's no way to declare a constructor
11209                               for an anonymous type, even if the type
11210                               got a name for linkage purposes.  */
11211                            !TYPE_WAS_ANONYMOUS (class_type)
11212                            && (constructor_name_p (unqualified_name,
11213                                                    class_type)
11214                                || (TREE_CODE (unqualified_name) == TYPE_DECL
11215                                    && (same_type_p 
11216                                        (TREE_TYPE (unqualified_name),
11217                                         class_type)))))
11218                     declarator->u.id.sfk = sfk_constructor;
11219
11220                   if (ctor_dtor_or_conv_p && declarator->u.id.sfk != sfk_none)
11221                     *ctor_dtor_or_conv_p = -1;
11222                   if (qualifying_scope
11223                       && TREE_CODE (unqualified_name) == TYPE_DECL
11224                       && CLASSTYPE_USE_TEMPLATE (TREE_TYPE (unqualified_name)))
11225                     {
11226                       error ("invalid use of constructor as a template");
11227                       inform ("use %<%T::%D%> instead of %<%T::%T%> to name "
11228                               "the constructor in a qualified name",
11229                               class_type,
11230                               DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
11231                               class_type, class_type);
11232                     }
11233                 }
11234             }
11235
11236         handle_declarator:;
11237           scope = get_scope_of_declarator (declarator);
11238           if (scope)
11239             /* Any names that appear after the declarator-id for a
11240                member are looked up in the containing scope.  */
11241             pushed_scope = push_scope (scope);
11242           parser->in_declarator_p = true;
11243           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
11244               || (declarator && declarator->kind == cdk_id))
11245             /* Default args are only allowed on function
11246                declarations.  */
11247             parser->default_arg_ok_p = saved_default_arg_ok_p;
11248           else
11249             parser->default_arg_ok_p = false;
11250
11251           first = false;
11252         }
11253       /* We're done.  */
11254       else
11255         break;
11256     }
11257
11258   /* For an abstract declarator, we might wind up with nothing at this
11259      point.  That's an error; the declarator is not optional.  */
11260   if (!declarator)
11261     cp_parser_error (parser, "expected declarator");
11262
11263   /* If we entered a scope, we must exit it now.  */
11264   if (pushed_scope)
11265     pop_scope (pushed_scope);
11266
11267   parser->default_arg_ok_p = saved_default_arg_ok_p;
11268   parser->in_declarator_p = saved_in_declarator_p;
11269
11270   return declarator;
11271 }
11272
11273 /* Parse a ptr-operator.
11274
11275    ptr-operator:
11276      * cv-qualifier-seq [opt]
11277      &
11278      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
11279
11280    GNU Extension:
11281
11282    ptr-operator:
11283      & cv-qualifier-seq [opt]
11284
11285    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
11286    Returns ADDR_EXPR if a reference was used.  In the case of a
11287    pointer-to-member, *TYPE is filled in with the TYPE containing the
11288    member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
11289    TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
11290    ERROR_MARK if an error occurred.  */
11291
11292 static enum tree_code
11293 cp_parser_ptr_operator (cp_parser* parser,
11294                         tree* type,
11295                         cp_cv_quals *cv_quals)
11296 {
11297   enum tree_code code = ERROR_MARK;
11298   cp_token *token;
11299
11300   /* Assume that it's not a pointer-to-member.  */
11301   *type = NULL_TREE;
11302   /* And that there are no cv-qualifiers.  */
11303   *cv_quals = TYPE_UNQUALIFIED;
11304
11305   /* Peek at the next token.  */
11306   token = cp_lexer_peek_token (parser->lexer);
11307   /* If it's a `*' or `&' we have a pointer or reference.  */
11308   if (token->type == CPP_MULT || token->type == CPP_AND)
11309     {
11310       /* Remember which ptr-operator we were processing.  */
11311       code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
11312
11313       /* Consume the `*' or `&'.  */
11314       cp_lexer_consume_token (parser->lexer);
11315
11316       /* A `*' can be followed by a cv-qualifier-seq, and so can a
11317          `&', if we are allowing GNU extensions.  (The only qualifier
11318          that can legally appear after `&' is `restrict', but that is
11319          enforced during semantic analysis.  */
11320       if (code == INDIRECT_REF
11321           || cp_parser_allow_gnu_extensions_p (parser))
11322         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11323     }
11324   else
11325     {
11326       /* Try the pointer-to-member case.  */
11327       cp_parser_parse_tentatively (parser);
11328       /* Look for the optional `::' operator.  */
11329       cp_parser_global_scope_opt (parser,
11330                                   /*current_scope_valid_p=*/false);
11331       /* Look for the nested-name specifier.  */
11332       cp_parser_nested_name_specifier (parser,
11333                                        /*typename_keyword_p=*/false,
11334                                        /*check_dependency_p=*/true,
11335                                        /*type_p=*/false,
11336                                        /*is_declaration=*/false);
11337       /* If we found it, and the next token is a `*', then we are
11338          indeed looking at a pointer-to-member operator.  */
11339       if (!cp_parser_error_occurred (parser)
11340           && cp_parser_require (parser, CPP_MULT, "`*'"))
11341         {
11342           /* The type of which the member is a member is given by the
11343              current SCOPE.  */
11344           *type = parser->scope;
11345           /* The next name will not be qualified.  */
11346           parser->scope = NULL_TREE;
11347           parser->qualifying_scope = NULL_TREE;
11348           parser->object_scope = NULL_TREE;
11349           /* Indicate that the `*' operator was used.  */
11350           code = INDIRECT_REF;
11351           /* Look for the optional cv-qualifier-seq.  */
11352           *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11353         }
11354       /* If that didn't work we don't have a ptr-operator.  */
11355       if (!cp_parser_parse_definitely (parser))
11356         cp_parser_error (parser, "expected ptr-operator");
11357     }
11358
11359   return code;
11360 }
11361
11362 /* Parse an (optional) cv-qualifier-seq.
11363
11364    cv-qualifier-seq:
11365      cv-qualifier cv-qualifier-seq [opt]
11366
11367    cv-qualifier:
11368      const
11369      volatile
11370
11371    GNU Extension:
11372
11373    cv-qualifier:
11374      __restrict__
11375
11376    Returns a bitmask representing the cv-qualifiers.  */
11377
11378 static cp_cv_quals
11379 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
11380 {
11381   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
11382
11383   while (true)
11384     {
11385       cp_token *token;
11386       cp_cv_quals cv_qualifier;
11387
11388       /* Peek at the next token.  */
11389       token = cp_lexer_peek_token (parser->lexer);
11390       /* See if it's a cv-qualifier.  */
11391       switch (token->keyword)
11392         {
11393         case RID_CONST:
11394           cv_qualifier = TYPE_QUAL_CONST;
11395           break;
11396
11397         case RID_VOLATILE:
11398           cv_qualifier = TYPE_QUAL_VOLATILE;
11399           break;
11400
11401         case RID_RESTRICT:
11402           cv_qualifier = TYPE_QUAL_RESTRICT;
11403           break;
11404
11405         default:
11406           cv_qualifier = TYPE_UNQUALIFIED;
11407           break;
11408         }
11409
11410       if (!cv_qualifier)
11411         break;
11412
11413       if (cv_quals & cv_qualifier)
11414         {
11415           error ("duplicate cv-qualifier");
11416           cp_lexer_purge_token (parser->lexer);
11417         }
11418       else
11419         {
11420           cp_lexer_consume_token (parser->lexer);
11421           cv_quals |= cv_qualifier;
11422         }
11423     }
11424
11425   return cv_quals;
11426 }
11427
11428 /* Parse a declarator-id.
11429
11430    declarator-id:
11431      id-expression
11432      :: [opt] nested-name-specifier [opt] type-name
11433
11434    In the `id-expression' case, the value returned is as for
11435    cp_parser_id_expression if the id-expression was an unqualified-id.
11436    If the id-expression was a qualified-id, then a SCOPE_REF is
11437    returned.  The first operand is the scope (either a NAMESPACE_DECL
11438    or TREE_TYPE), but the second is still just a representation of an
11439    unqualified-id.  */
11440
11441 static tree
11442 cp_parser_declarator_id (cp_parser* parser)
11443 {
11444   /* The expression must be an id-expression.  Assume that qualified
11445      names are the names of types so that:
11446
11447        template <class T>
11448        int S<T>::R::i = 3;
11449
11450      will work; we must treat `S<T>::R' as the name of a type.
11451      Similarly, assume that qualified names are templates, where
11452      required, so that:
11453
11454        template <class T>
11455        int S<T>::R<T>::i = 3;
11456
11457      will work, too.  */
11458   return cp_parser_id_expression (parser,
11459                                   /*template_keyword_p=*/false,
11460                                   /*check_dependency_p=*/false,
11461                                   /*template_p=*/NULL,
11462                                   /*declarator_p=*/true);
11463 }
11464
11465 /* Parse a type-id.
11466
11467    type-id:
11468      type-specifier-seq abstract-declarator [opt]
11469
11470    Returns the TYPE specified.  */
11471
11472 static tree
11473 cp_parser_type_id (cp_parser* parser)
11474 {
11475   cp_decl_specifier_seq type_specifier_seq;
11476   cp_declarator *abstract_declarator;
11477
11478   /* Parse the type-specifier-seq.  */
11479   cp_parser_type_specifier_seq (parser, &type_specifier_seq);
11480   if (type_specifier_seq.type == error_mark_node)
11481     return error_mark_node;
11482
11483   /* There might or might not be an abstract declarator.  */
11484   cp_parser_parse_tentatively (parser);
11485   /* Look for the declarator.  */
11486   abstract_declarator
11487     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
11488                             /*parenthesized_p=*/NULL,
11489                             /*member_p=*/false);
11490   /* Check to see if there really was a declarator.  */
11491   if (!cp_parser_parse_definitely (parser))
11492     abstract_declarator = NULL;
11493
11494   return groktypename (&type_specifier_seq, abstract_declarator);
11495 }
11496
11497 /* Parse a type-specifier-seq.
11498
11499    type-specifier-seq:
11500      type-specifier type-specifier-seq [opt]
11501
11502    GNU extension:
11503
11504    type-specifier-seq:
11505      attributes type-specifier-seq [opt]
11506
11507    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
11508
11509 static void
11510 cp_parser_type_specifier_seq (cp_parser* parser,
11511                               cp_decl_specifier_seq *type_specifier_seq)
11512 {
11513   bool seen_type_specifier = false;
11514
11515   /* Clear the TYPE_SPECIFIER_SEQ.  */
11516   clear_decl_specs (type_specifier_seq);
11517
11518   /* Parse the type-specifiers and attributes.  */
11519   while (true)
11520     {
11521       tree type_specifier;
11522
11523       /* Check for attributes first.  */
11524       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
11525         {
11526           type_specifier_seq->attributes =
11527             chainon (type_specifier_seq->attributes,
11528                      cp_parser_attributes_opt (parser));
11529           continue;
11530         }
11531
11532       /* Look for the type-specifier.  */
11533       type_specifier = cp_parser_type_specifier (parser,
11534                                                  CP_PARSER_FLAGS_OPTIONAL,
11535                                                  type_specifier_seq,
11536                                                  /*is_declaration=*/false,
11537                                                  NULL,
11538                                                  NULL);
11539       /* If the first type-specifier could not be found, this is not a
11540          type-specifier-seq at all.  */
11541       if (!seen_type_specifier && !type_specifier)
11542         {
11543           cp_parser_error (parser, "expected type-specifier");
11544           type_specifier_seq->type = error_mark_node;
11545           return;
11546         }
11547       /* If subsequent type-specifiers could not be found, the
11548          type-specifier-seq is complete.  */
11549       else if (seen_type_specifier && !type_specifier)
11550         break;
11551
11552       seen_type_specifier = true;
11553     }
11554
11555   return;
11556 }
11557
11558 /* Parse a parameter-declaration-clause.
11559
11560    parameter-declaration-clause:
11561      parameter-declaration-list [opt] ... [opt]
11562      parameter-declaration-list , ...
11563
11564    Returns a representation for the parameter declarations.  A return
11565    value of NULL indicates a parameter-declaration-clause consisting
11566    only of an ellipsis.  */
11567
11568 static cp_parameter_declarator *
11569 cp_parser_parameter_declaration_clause (cp_parser* parser)
11570 {
11571   cp_parameter_declarator *parameters;
11572   cp_token *token;
11573   bool ellipsis_p;
11574   bool is_error;
11575
11576   /* Peek at the next token.  */
11577   token = cp_lexer_peek_token (parser->lexer);
11578   /* Check for trivial parameter-declaration-clauses.  */
11579   if (token->type == CPP_ELLIPSIS)
11580     {
11581       /* Consume the `...' token.  */
11582       cp_lexer_consume_token (parser->lexer);
11583       return NULL;
11584     }
11585   else if (token->type == CPP_CLOSE_PAREN)
11586     /* There are no parameters.  */
11587     {
11588 #ifndef NO_IMPLICIT_EXTERN_C
11589       if (in_system_header && current_class_type == NULL
11590           && current_lang_name == lang_name_c)
11591         return NULL;
11592       else
11593 #endif
11594         return no_parameters;
11595     }
11596   /* Check for `(void)', too, which is a special case.  */
11597   else if (token->keyword == RID_VOID
11598            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
11599                == CPP_CLOSE_PAREN))
11600     {
11601       /* Consume the `void' token.  */
11602       cp_lexer_consume_token (parser->lexer);
11603       /* There are no parameters.  */
11604       return no_parameters;
11605     }
11606
11607   /* Parse the parameter-declaration-list.  */
11608   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
11609   /* If a parse error occurred while parsing the
11610      parameter-declaration-list, then the entire
11611      parameter-declaration-clause is erroneous.  */
11612   if (is_error)
11613     return NULL;
11614
11615   /* Peek at the next token.  */
11616   token = cp_lexer_peek_token (parser->lexer);
11617   /* If it's a `,', the clause should terminate with an ellipsis.  */
11618   if (token->type == CPP_COMMA)
11619     {
11620       /* Consume the `,'.  */
11621       cp_lexer_consume_token (parser->lexer);
11622       /* Expect an ellipsis.  */
11623       ellipsis_p
11624         = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
11625     }
11626   /* It might also be `...' if the optional trailing `,' was
11627      omitted.  */
11628   else if (token->type == CPP_ELLIPSIS)
11629     {
11630       /* Consume the `...' token.  */
11631       cp_lexer_consume_token (parser->lexer);
11632       /* And remember that we saw it.  */
11633       ellipsis_p = true;
11634     }
11635   else
11636     ellipsis_p = false;
11637
11638   /* Finish the parameter list.  */
11639   if (parameters && ellipsis_p)
11640     parameters->ellipsis_p = true;
11641
11642   return parameters;
11643 }
11644
11645 /* Parse a parameter-declaration-list.
11646
11647    parameter-declaration-list:
11648      parameter-declaration
11649      parameter-declaration-list , parameter-declaration
11650
11651    Returns a representation of the parameter-declaration-list, as for
11652    cp_parser_parameter_declaration_clause.  However, the
11653    `void_list_node' is never appended to the list.  Upon return,
11654    *IS_ERROR will be true iff an error occurred.  */
11655
11656 static cp_parameter_declarator *
11657 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
11658 {
11659   cp_parameter_declarator *parameters = NULL;
11660   cp_parameter_declarator **tail = &parameters;
11661
11662   /* Assume all will go well.  */
11663   *is_error = false;
11664
11665   /* Look for more parameters.  */
11666   while (true)
11667     {
11668       cp_parameter_declarator *parameter;
11669       bool parenthesized_p;
11670       /* Parse the parameter.  */
11671       parameter
11672         = cp_parser_parameter_declaration (parser,
11673                                            /*template_parm_p=*/false,
11674                                            &parenthesized_p);
11675
11676       /* If a parse error occurred parsing the parameter declaration,
11677          then the entire parameter-declaration-list is erroneous.  */
11678       if (!parameter)
11679         {
11680           *is_error = true;
11681           parameters = NULL;
11682           break;
11683         }
11684       /* Add the new parameter to the list.  */
11685       *tail = parameter;
11686       tail = &parameter->next;
11687
11688       /* Peek at the next token.  */
11689       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
11690           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11691         /* The parameter-declaration-list is complete.  */
11692         break;
11693       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
11694         {
11695           cp_token *token;
11696
11697           /* Peek at the next token.  */
11698           token = cp_lexer_peek_nth_token (parser->lexer, 2);
11699           /* If it's an ellipsis, then the list is complete.  */
11700           if (token->type == CPP_ELLIPSIS)
11701             break;
11702           /* Otherwise, there must be more parameters.  Consume the
11703              `,'.  */
11704           cp_lexer_consume_token (parser->lexer);
11705           /* When parsing something like:
11706
11707                 int i(float f, double d)
11708
11709              we can tell after seeing the declaration for "f" that we
11710              are not looking at an initialization of a variable "i",
11711              but rather at the declaration of a function "i".
11712
11713              Due to the fact that the parsing of template arguments
11714              (as specified to a template-id) requires backtracking we
11715              cannot use this technique when inside a template argument
11716              list.  */
11717           if (!parser->in_template_argument_list_p
11718               && !parser->in_type_id_in_expr_p
11719               && cp_parser_uncommitted_to_tentative_parse_p (parser)
11720               /* However, a parameter-declaration of the form
11721                  "foat(f)" (which is a valid declaration of a
11722                  parameter "f") can also be interpreted as an
11723                  expression (the conversion of "f" to "float").  */
11724               && !parenthesized_p)
11725             cp_parser_commit_to_tentative_parse (parser);
11726         }
11727       else
11728         {
11729           cp_parser_error (parser, "expected %<,%> or %<...%>");
11730           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
11731             cp_parser_skip_to_closing_parenthesis (parser,
11732                                                    /*recovering=*/true,
11733                                                    /*or_comma=*/false,
11734                                                    /*consume_paren=*/false);
11735           break;
11736         }
11737     }
11738
11739   return parameters;
11740 }
11741
11742 /* Parse a parameter declaration.
11743
11744    parameter-declaration:
11745      decl-specifier-seq declarator
11746      decl-specifier-seq declarator = assignment-expression
11747      decl-specifier-seq abstract-declarator [opt]
11748      decl-specifier-seq abstract-declarator [opt] = assignment-expression
11749
11750    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
11751    declares a template parameter.  (In that case, a non-nested `>'
11752    token encountered during the parsing of the assignment-expression
11753    is not interpreted as a greater-than operator.)
11754
11755    Returns a representation of the parameter, or NULL if an error
11756    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
11757    true iff the declarator is of the form "(p)".  */
11758
11759 static cp_parameter_declarator *
11760 cp_parser_parameter_declaration (cp_parser *parser,
11761                                  bool template_parm_p,
11762                                  bool *parenthesized_p)
11763 {
11764   int declares_class_or_enum;
11765   bool greater_than_is_operator_p;
11766   cp_decl_specifier_seq decl_specifiers;
11767   cp_declarator *declarator;
11768   tree default_argument;
11769   cp_token *token;
11770   const char *saved_message;
11771
11772   /* In a template parameter, `>' is not an operator.
11773
11774      [temp.param]
11775
11776      When parsing a default template-argument for a non-type
11777      template-parameter, the first non-nested `>' is taken as the end
11778      of the template parameter-list rather than a greater-than
11779      operator.  */
11780   greater_than_is_operator_p = !template_parm_p;
11781
11782   /* Type definitions may not appear in parameter types.  */
11783   saved_message = parser->type_definition_forbidden_message;
11784   parser->type_definition_forbidden_message
11785     = "types may not be defined in parameter types";
11786
11787   /* Parse the declaration-specifiers.  */
11788   cp_parser_decl_specifier_seq (parser,
11789                                 CP_PARSER_FLAGS_NONE,
11790                                 &decl_specifiers,
11791                                 &declares_class_or_enum);
11792   /* If an error occurred, there's no reason to attempt to parse the
11793      rest of the declaration.  */
11794   if (cp_parser_error_occurred (parser))
11795     {
11796       parser->type_definition_forbidden_message = saved_message;
11797       return NULL;
11798     }
11799
11800   /* Peek at the next token.  */
11801   token = cp_lexer_peek_token (parser->lexer);
11802   /* If the next token is a `)', `,', `=', `>', or `...', then there
11803      is no declarator.  */
11804   if (token->type == CPP_CLOSE_PAREN
11805       || token->type == CPP_COMMA
11806       || token->type == CPP_EQ
11807       || token->type == CPP_ELLIPSIS
11808       || token->type == CPP_GREATER)
11809     {
11810       declarator = NULL;
11811       if (parenthesized_p)
11812         *parenthesized_p = false;
11813     }
11814   /* Otherwise, there should be a declarator.  */
11815   else
11816     {
11817       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11818       parser->default_arg_ok_p = false;
11819
11820       /* After seeing a decl-specifier-seq, if the next token is not a
11821          "(", there is no possibility that the code is a valid
11822          expression.  Therefore, if parsing tentatively, we commit at
11823          this point.  */
11824       if (!parser->in_template_argument_list_p
11825           /* In an expression context, having seen:
11826
11827                (int((char ...
11828
11829              we cannot be sure whether we are looking at a
11830              function-type (taking a "char" as a parameter) or a cast
11831              of some object of type "char" to "int".  */
11832           && !parser->in_type_id_in_expr_p
11833           && cp_parser_uncommitted_to_tentative_parse_p (parser)
11834           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
11835         cp_parser_commit_to_tentative_parse (parser);
11836       /* Parse the declarator.  */
11837       declarator = cp_parser_declarator (parser,
11838                                          CP_PARSER_DECLARATOR_EITHER,
11839                                          /*ctor_dtor_or_conv_p=*/NULL,
11840                                          parenthesized_p,
11841                                          /*member_p=*/false);
11842       parser->default_arg_ok_p = saved_default_arg_ok_p;
11843       /* After the declarator, allow more attributes.  */
11844       decl_specifiers.attributes
11845         = chainon (decl_specifiers.attributes,
11846                    cp_parser_attributes_opt (parser));
11847     }
11848
11849   /* The restriction on defining new types applies only to the type
11850      of the parameter, not to the default argument.  */
11851   parser->type_definition_forbidden_message = saved_message;
11852
11853   /* If the next token is `=', then process a default argument.  */
11854   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11855     {
11856       bool saved_greater_than_is_operator_p;
11857       /* Consume the `='.  */
11858       cp_lexer_consume_token (parser->lexer);
11859
11860       /* If we are defining a class, then the tokens that make up the
11861          default argument must be saved and processed later.  */
11862       if (!template_parm_p && at_class_scope_p ()
11863           && TYPE_BEING_DEFINED (current_class_type))
11864         {
11865           unsigned depth = 0;
11866           cp_token *first_token;
11867           cp_token *token;
11868
11869           /* Add tokens until we have processed the entire default
11870              argument.  We add the range [first_token, token).  */
11871           first_token = cp_lexer_peek_token (parser->lexer);
11872           while (true)
11873             {
11874               bool done = false;
11875
11876               /* Peek at the next token.  */
11877               token = cp_lexer_peek_token (parser->lexer);
11878               /* What we do depends on what token we have.  */
11879               switch (token->type)
11880                 {
11881                   /* In valid code, a default argument must be
11882                      immediately followed by a `,' `)', or `...'.  */
11883                 case CPP_COMMA:
11884                 case CPP_CLOSE_PAREN:
11885                 case CPP_ELLIPSIS:
11886                   /* If we run into a non-nested `;', `}', or `]',
11887                      then the code is invalid -- but the default
11888                      argument is certainly over.  */
11889                 case CPP_SEMICOLON:
11890                 case CPP_CLOSE_BRACE:
11891                 case CPP_CLOSE_SQUARE:
11892                   if (depth == 0)
11893                     done = true;
11894                   /* Update DEPTH, if necessary.  */
11895                   else if (token->type == CPP_CLOSE_PAREN
11896                            || token->type == CPP_CLOSE_BRACE
11897                            || token->type == CPP_CLOSE_SQUARE)
11898                     --depth;
11899                   break;
11900
11901                 case CPP_OPEN_PAREN:
11902                 case CPP_OPEN_SQUARE:
11903                 case CPP_OPEN_BRACE:
11904                   ++depth;
11905                   break;
11906
11907                 case CPP_GREATER:
11908                   /* If we see a non-nested `>', and `>' is not an
11909                      operator, then it marks the end of the default
11910                      argument.  */
11911                   if (!depth && !greater_than_is_operator_p)
11912                     done = true;
11913                   break;
11914
11915                   /* If we run out of tokens, issue an error message.  */
11916                 case CPP_EOF:
11917                   error ("file ends in default argument");
11918                   done = true;
11919                   break;
11920
11921                 case CPP_NAME:
11922                 case CPP_SCOPE:
11923                   /* In these cases, we should look for template-ids.
11924                      For example, if the default argument is
11925                      `X<int, double>()', we need to do name lookup to
11926                      figure out whether or not `X' is a template; if
11927                      so, the `,' does not end the default argument.
11928
11929                      That is not yet done.  */
11930                   break;
11931
11932                 default:
11933                   break;
11934                 }
11935
11936               /* If we've reached the end, stop.  */
11937               if (done)
11938                 break;
11939
11940               /* Add the token to the token block.  */
11941               token = cp_lexer_consume_token (parser->lexer);
11942             }
11943
11944           /* Create a DEFAULT_ARG to represented the unparsed default
11945              argument.  */
11946           default_argument = make_node (DEFAULT_ARG);
11947           DEFARG_TOKENS (default_argument)
11948             = cp_token_cache_new (first_token, token);  
11949         }
11950       /* Outside of a class definition, we can just parse the
11951          assignment-expression.  */
11952       else
11953         {
11954           bool saved_local_variables_forbidden_p;
11955
11956           /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
11957              set correctly.  */
11958           saved_greater_than_is_operator_p
11959             = parser->greater_than_is_operator_p;
11960           parser->greater_than_is_operator_p = greater_than_is_operator_p;
11961           /* Local variable names (and the `this' keyword) may not
11962              appear in a default argument.  */
11963           saved_local_variables_forbidden_p
11964             = parser->local_variables_forbidden_p;
11965           parser->local_variables_forbidden_p = true;
11966           /* Parse the assignment-expression.  */
11967           default_argument 
11968             = cp_parser_assignment_expression (parser, /*cast_p=*/false);
11969           /* Restore saved state.  */
11970           parser->greater_than_is_operator_p
11971             = saved_greater_than_is_operator_p;
11972           parser->local_variables_forbidden_p
11973             = saved_local_variables_forbidden_p;
11974         }
11975       if (!parser->default_arg_ok_p)
11976         {
11977           if (!flag_pedantic_errors)
11978             warning ("deprecated use of default argument for parameter of non-function");
11979           else
11980             {
11981               error ("default arguments are only permitted for function parameters");
11982               default_argument = NULL_TREE;
11983             }
11984         }
11985     }
11986   else
11987     default_argument = NULL_TREE;
11988
11989   return make_parameter_declarator (&decl_specifiers,
11990                                     declarator,
11991                                     default_argument);
11992 }
11993
11994 /* Parse a function-body.
11995
11996    function-body:
11997      compound_statement  */
11998
11999 static void
12000 cp_parser_function_body (cp_parser *parser)
12001 {
12002   cp_parser_compound_statement (parser, NULL, false);
12003 }
12004
12005 /* Parse a ctor-initializer-opt followed by a function-body.  Return
12006    true if a ctor-initializer was present.  */
12007
12008 static bool
12009 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
12010 {
12011   tree body;
12012   bool ctor_initializer_p;
12013
12014   /* Begin the function body.  */
12015   body = begin_function_body ();
12016   /* Parse the optional ctor-initializer.  */
12017   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
12018   /* Parse the function-body.  */
12019   cp_parser_function_body (parser);
12020   /* Finish the function body.  */
12021   finish_function_body (body);
12022
12023   return ctor_initializer_p;
12024 }
12025
12026 /* Parse an initializer.
12027
12028    initializer:
12029      = initializer-clause
12030      ( expression-list )
12031
12032    Returns a expression representing the initializer.  If no
12033    initializer is present, NULL_TREE is returned.
12034
12035    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
12036    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
12037    set to FALSE if there is no initializer present.  If there is an
12038    initializer, and it is not a constant-expression, *NON_CONSTANT_P
12039    is set to true; otherwise it is set to false.  */
12040
12041 static tree
12042 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
12043                        bool* non_constant_p)
12044 {
12045   cp_token *token;
12046   tree init;
12047
12048   /* Peek at the next token.  */
12049   token = cp_lexer_peek_token (parser->lexer);
12050
12051   /* Let our caller know whether or not this initializer was
12052      parenthesized.  */
12053   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
12054   /* Assume that the initializer is constant.  */
12055   *non_constant_p = false;
12056
12057   if (token->type == CPP_EQ)
12058     {
12059       /* Consume the `='.  */
12060       cp_lexer_consume_token (parser->lexer);
12061       /* Parse the initializer-clause.  */
12062       init = cp_parser_initializer_clause (parser, non_constant_p);
12063     }
12064   else if (token->type == CPP_OPEN_PAREN)
12065     init = cp_parser_parenthesized_expression_list (parser, false,
12066                                                     /*cast_p=*/false,
12067                                                     non_constant_p);
12068   else
12069     {
12070       /* Anything else is an error.  */
12071       cp_parser_error (parser, "expected initializer");
12072       init = error_mark_node;
12073     }
12074
12075   return init;
12076 }
12077
12078 /* Parse an initializer-clause.
12079
12080    initializer-clause:
12081      assignment-expression
12082      { initializer-list , [opt] }
12083      { }
12084
12085    Returns an expression representing the initializer.
12086
12087    If the `assignment-expression' production is used the value
12088    returned is simply a representation for the expression.
12089
12090    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
12091    the elements of the initializer-list (or NULL_TREE, if the last
12092    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
12093    NULL_TREE.  There is no way to detect whether or not the optional
12094    trailing `,' was provided.  NON_CONSTANT_P is as for
12095    cp_parser_initializer.  */
12096
12097 static tree
12098 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
12099 {
12100   tree initializer;
12101
12102   /* Assume the expression is constant.  */
12103   *non_constant_p = false;
12104
12105   /* If it is not a `{', then we are looking at an
12106      assignment-expression.  */
12107   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
12108     {
12109       initializer
12110         = cp_parser_constant_expression (parser,
12111                                         /*allow_non_constant_p=*/true,
12112                                         non_constant_p);
12113       if (!*non_constant_p)
12114         initializer = fold_non_dependent_expr (initializer);
12115     }
12116   else
12117     {
12118       /* Consume the `{' token.  */
12119       cp_lexer_consume_token (parser->lexer);
12120       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
12121       initializer = make_node (CONSTRUCTOR);
12122       /* If it's not a `}', then there is a non-trivial initializer.  */
12123       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12124         {
12125           /* Parse the initializer list.  */
12126           CONSTRUCTOR_ELTS (initializer)
12127             = cp_parser_initializer_list (parser, non_constant_p);
12128           /* A trailing `,' token is allowed.  */
12129           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12130             cp_lexer_consume_token (parser->lexer);
12131         }
12132       /* Now, there should be a trailing `}'.  */
12133       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12134     }
12135
12136   return initializer;
12137 }
12138
12139 /* Parse an initializer-list.
12140
12141    initializer-list:
12142      initializer-clause
12143      initializer-list , initializer-clause
12144
12145    GNU Extension:
12146
12147    initializer-list:
12148      identifier : initializer-clause
12149      initializer-list, identifier : initializer-clause
12150
12151    Returns a TREE_LIST.  The TREE_VALUE of each node is an expression
12152    for the initializer.  If the TREE_PURPOSE is non-NULL, it is the
12153    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
12154    as for cp_parser_initializer.  */
12155
12156 static tree
12157 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
12158 {
12159   tree initializers = NULL_TREE;
12160
12161   /* Assume all of the expressions are constant.  */
12162   *non_constant_p = false;
12163
12164   /* Parse the rest of the list.  */
12165   while (true)
12166     {
12167       cp_token *token;
12168       tree identifier;
12169       tree initializer;
12170       bool clause_non_constant_p;
12171
12172       /* If the next token is an identifier and the following one is a
12173          colon, we are looking at the GNU designated-initializer
12174          syntax.  */
12175       if (cp_parser_allow_gnu_extensions_p (parser)
12176           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
12177           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
12178         {
12179           /* Consume the identifier.  */
12180           identifier = cp_lexer_consume_token (parser->lexer)->value;
12181           /* Consume the `:'.  */
12182           cp_lexer_consume_token (parser->lexer);
12183         }
12184       else
12185         identifier = NULL_TREE;
12186
12187       /* Parse the initializer.  */
12188       initializer = cp_parser_initializer_clause (parser,
12189                                                   &clause_non_constant_p);
12190       /* If any clause is non-constant, so is the entire initializer.  */
12191       if (clause_non_constant_p)
12192         *non_constant_p = true;
12193       /* Add it to the list.  */
12194       initializers = tree_cons (identifier, initializer, initializers);
12195
12196       /* If the next token is not a comma, we have reached the end of
12197          the list.  */
12198       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12199         break;
12200
12201       /* Peek at the next token.  */
12202       token = cp_lexer_peek_nth_token (parser->lexer, 2);
12203       /* If the next token is a `}', then we're still done.  An
12204          initializer-clause can have a trailing `,' after the
12205          initializer-list and before the closing `}'.  */
12206       if (token->type == CPP_CLOSE_BRACE)
12207         break;
12208
12209       /* Consume the `,' token.  */
12210       cp_lexer_consume_token (parser->lexer);
12211     }
12212
12213   /* The initializers were built up in reverse order, so we need to
12214      reverse them now.  */
12215   return nreverse (initializers);
12216 }
12217
12218 /* Classes [gram.class] */
12219
12220 /* Parse a class-name.
12221
12222    class-name:
12223      identifier
12224      template-id
12225
12226    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
12227    to indicate that names looked up in dependent types should be
12228    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
12229    keyword has been used to indicate that the name that appears next
12230    is a template.  TAG_TYPE indicates the explicit tag given before
12231    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
12232    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
12233    is the class being defined in a class-head.
12234
12235    Returns the TYPE_DECL representing the class.  */
12236
12237 static tree
12238 cp_parser_class_name (cp_parser *parser,
12239                       bool typename_keyword_p,
12240                       bool template_keyword_p,
12241                       enum tag_types tag_type,
12242                       bool check_dependency_p,
12243                       bool class_head_p,
12244                       bool is_declaration)
12245 {
12246   tree decl;
12247   tree scope;
12248   bool typename_p;
12249   cp_token *token;
12250
12251   /* All class-names start with an identifier.  */
12252   token = cp_lexer_peek_token (parser->lexer);
12253   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
12254     {
12255       cp_parser_error (parser, "expected class-name");
12256       return error_mark_node;
12257     }
12258
12259   /* PARSER->SCOPE can be cleared when parsing the template-arguments
12260      to a template-id, so we save it here.  */
12261   scope = parser->scope;
12262   if (scope == error_mark_node)
12263     return error_mark_node;
12264
12265   /* Any name names a type if we're following the `typename' keyword
12266      in a qualified name where the enclosing scope is type-dependent.  */
12267   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
12268                 && dependent_type_p (scope));
12269   /* Handle the common case (an identifier, but not a template-id)
12270      efficiently.  */
12271   if (token->type == CPP_NAME
12272       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
12273     {
12274       tree identifier;
12275
12276       /* Look for the identifier.  */
12277       identifier = cp_parser_identifier (parser);
12278       /* If the next token isn't an identifier, we are certainly not
12279          looking at a class-name.  */
12280       if (identifier == error_mark_node)
12281         decl = error_mark_node;
12282       /* If we know this is a type-name, there's no need to look it
12283          up.  */
12284       else if (typename_p)
12285         decl = identifier;
12286       else
12287         {
12288           /* If the next token is a `::', then the name must be a type
12289              name.
12290
12291              [basic.lookup.qual]
12292
12293              During the lookup for a name preceding the :: scope
12294              resolution operator, object, function, and enumerator
12295              names are ignored.  */
12296           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12297             tag_type = typename_type;
12298           /* Look up the name.  */
12299           decl = cp_parser_lookup_name (parser, identifier,
12300                                         tag_type,
12301                                         /*is_template=*/false,
12302                                         /*is_namespace=*/false,
12303                                         check_dependency_p,
12304                                         /*ambiguous_p=*/NULL);
12305         }
12306     }
12307   else
12308     {
12309       /* Try a template-id.  */
12310       decl = cp_parser_template_id (parser, template_keyword_p,
12311                                     check_dependency_p,
12312                                     is_declaration);
12313       if (decl == error_mark_node)
12314         return error_mark_node;
12315     }
12316
12317   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
12318
12319   /* If this is a typename, create a TYPENAME_TYPE.  */
12320   if (typename_p && decl != error_mark_node)
12321     {
12322       decl = make_typename_type (scope, decl, typename_type, /*complain=*/1);
12323       if (decl != error_mark_node)
12324         decl = TYPE_NAME (decl);
12325     }
12326
12327   /* Check to see that it is really the name of a class.  */
12328   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
12329       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
12330       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12331     /* Situations like this:
12332
12333          template <typename T> struct A {
12334            typename T::template X<int>::I i;
12335          };
12336
12337        are problematic.  Is `T::template X<int>' a class-name?  The
12338        standard does not seem to be definitive, but there is no other
12339        valid interpretation of the following `::'.  Therefore, those
12340        names are considered class-names.  */
12341     decl = TYPE_NAME (make_typename_type (scope, decl, tag_type, tf_error));
12342   else if (decl == error_mark_node
12343            || TREE_CODE (decl) != TYPE_DECL
12344            || TREE_TYPE (decl) == error_mark_node
12345            || !IS_AGGR_TYPE (TREE_TYPE (decl)))
12346     {
12347       cp_parser_error (parser, "expected class-name");
12348       return error_mark_node;
12349     }
12350
12351   return decl;
12352 }
12353
12354 /* Parse a class-specifier.
12355
12356    class-specifier:
12357      class-head { member-specification [opt] }
12358
12359    Returns the TREE_TYPE representing the class.  */
12360
12361 static tree
12362 cp_parser_class_specifier (cp_parser* parser)
12363 {
12364   cp_token *token;
12365   tree type;
12366   tree attributes = NULL_TREE;
12367   int has_trailing_semicolon;
12368   bool nested_name_specifier_p;
12369   unsigned saved_num_template_parameter_lists;
12370   tree old_scope = NULL_TREE;
12371   tree scope = NULL_TREE;
12372
12373   push_deferring_access_checks (dk_no_deferred);
12374
12375   /* Parse the class-head.  */
12376   type = cp_parser_class_head (parser,
12377                                &nested_name_specifier_p,
12378                                &attributes);
12379   /* If the class-head was a semantic disaster, skip the entire body
12380      of the class.  */
12381   if (!type)
12382     {
12383       cp_parser_skip_to_end_of_block_or_statement (parser);
12384       pop_deferring_access_checks ();
12385       return error_mark_node;
12386     }
12387
12388   /* Look for the `{'.  */
12389   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
12390     {
12391       pop_deferring_access_checks ();
12392       return error_mark_node;
12393     }
12394
12395   /* Issue an error message if type-definitions are forbidden here.  */
12396   cp_parser_check_type_definition (parser);
12397   /* Remember that we are defining one more class.  */
12398   ++parser->num_classes_being_defined;
12399   /* Inside the class, surrounding template-parameter-lists do not
12400      apply.  */
12401   saved_num_template_parameter_lists
12402     = parser->num_template_parameter_lists;
12403   parser->num_template_parameter_lists = 0;
12404
12405   /* Start the class.  */
12406   if (nested_name_specifier_p)
12407     {
12408       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
12409       old_scope = push_inner_scope (scope);
12410     }
12411   type = begin_class_definition (type);
12412
12413   if (type == error_mark_node)
12414     /* If the type is erroneous, skip the entire body of the class.  */
12415     cp_parser_skip_to_closing_brace (parser);
12416   else
12417     /* Parse the member-specification.  */
12418     cp_parser_member_specification_opt (parser);
12419
12420   /* Look for the trailing `}'.  */
12421   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12422   /* We get better error messages by noticing a common problem: a
12423      missing trailing `;'.  */
12424   token = cp_lexer_peek_token (parser->lexer);
12425   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
12426   /* Look for trailing attributes to apply to this class.  */
12427   if (cp_parser_allow_gnu_extensions_p (parser))
12428     {
12429       tree sub_attr = cp_parser_attributes_opt (parser);
12430       attributes = chainon (attributes, sub_attr);
12431     }
12432   if (type != error_mark_node)
12433     type = finish_struct (type, attributes);
12434   if (nested_name_specifier_p)
12435     pop_inner_scope (old_scope, scope);
12436   /* If this class is not itself within the scope of another class,
12437      then we need to parse the bodies of all of the queued function
12438      definitions.  Note that the queued functions defined in a class
12439      are not always processed immediately following the
12440      class-specifier for that class.  Consider:
12441
12442        struct A {
12443          struct B { void f() { sizeof (A); } };
12444        };
12445
12446      If `f' were processed before the processing of `A' were
12447      completed, there would be no way to compute the size of `A'.
12448      Note that the nesting we are interested in here is lexical --
12449      not the semantic nesting given by TYPE_CONTEXT.  In particular,
12450      for:
12451
12452        struct A { struct B; };
12453        struct A::B { void f() { } };
12454
12455      there is no need to delay the parsing of `A::B::f'.  */
12456   if (--parser->num_classes_being_defined == 0)
12457     {
12458       tree queue_entry;
12459       tree fn;
12460       tree class_type = NULL_TREE;
12461       tree pushed_scope = NULL_TREE;
12462
12463       /* In a first pass, parse default arguments to the functions.
12464          Then, in a second pass, parse the bodies of the functions.
12465          This two-phased approach handles cases like:
12466
12467             struct S {
12468               void f() { g(); }
12469               void g(int i = 3);
12470             };
12471
12472          */
12473       for (TREE_PURPOSE (parser->unparsed_functions_queues)
12474              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
12475            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
12476            TREE_PURPOSE (parser->unparsed_functions_queues)
12477              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
12478         {
12479           fn = TREE_VALUE (queue_entry);
12480           /* If there are default arguments that have not yet been processed,
12481              take care of them now.  */
12482           if (class_type != TREE_PURPOSE (queue_entry))
12483             {
12484               if (pushed_scope)
12485                 pop_scope (pushed_scope);
12486               class_type = TREE_PURPOSE (queue_entry);
12487               pushed_scope = push_scope (class_type);
12488             }
12489           /* Make sure that any template parameters are in scope.  */
12490           maybe_begin_member_template_processing (fn);
12491           /* Parse the default argument expressions.  */
12492           cp_parser_late_parsing_default_args (parser, fn);
12493           /* Remove any template parameters from the symbol table.  */
12494           maybe_end_member_template_processing ();
12495         }
12496       if (pushed_scope)
12497         pop_scope (pushed_scope);
12498       /* Now parse the body of the functions.  */
12499       for (TREE_VALUE (parser->unparsed_functions_queues)
12500              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
12501            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
12502            TREE_VALUE (parser->unparsed_functions_queues)
12503              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
12504         {
12505           /* Figure out which function we need to process.  */
12506           fn = TREE_VALUE (queue_entry);
12507
12508           /* A hack to prevent garbage collection.  */
12509           function_depth++;
12510
12511           /* Parse the function.  */
12512           cp_parser_late_parsing_for_member (parser, fn);
12513           function_depth--;
12514         }
12515     }
12516
12517   /* Put back any saved access checks.  */
12518   pop_deferring_access_checks ();
12519
12520   /* Restore the count of active template-parameter-lists.  */
12521   parser->num_template_parameter_lists
12522     = saved_num_template_parameter_lists;
12523
12524   return type;
12525 }
12526
12527 /* Parse a class-head.
12528
12529    class-head:
12530      class-key identifier [opt] base-clause [opt]
12531      class-key nested-name-specifier identifier base-clause [opt]
12532      class-key nested-name-specifier [opt] template-id
12533        base-clause [opt]
12534
12535    GNU Extensions:
12536      class-key attributes identifier [opt] base-clause [opt]
12537      class-key attributes nested-name-specifier identifier base-clause [opt]
12538      class-key attributes nested-name-specifier [opt] template-id
12539        base-clause [opt]
12540
12541    Returns the TYPE of the indicated class.  Sets
12542    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
12543    involving a nested-name-specifier was used, and FALSE otherwise.
12544
12545    Returns error_mark_node if this is not a class-head.
12546    
12547    Returns NULL_TREE if the class-head is syntactically valid, but
12548    semantically invalid in a way that means we should skip the entire
12549    body of the class.  */
12550
12551 static tree
12552 cp_parser_class_head (cp_parser* parser,
12553                       bool* nested_name_specifier_p,
12554                       tree *attributes_p)
12555 {
12556   tree nested_name_specifier;
12557   enum tag_types class_key;
12558   tree id = NULL_TREE;
12559   tree type = NULL_TREE;
12560   tree attributes;
12561   bool template_id_p = false;
12562   bool qualified_p = false;
12563   bool invalid_nested_name_p = false;
12564   bool invalid_explicit_specialization_p = false;
12565   tree pushed_scope = NULL_TREE;
12566   unsigned num_templates;
12567   tree bases;
12568
12569   /* Assume no nested-name-specifier will be present.  */
12570   *nested_name_specifier_p = false;
12571   /* Assume no template parameter lists will be used in defining the
12572      type.  */
12573   num_templates = 0;
12574
12575   /* Look for the class-key.  */
12576   class_key = cp_parser_class_key (parser);
12577   if (class_key == none_type)
12578     return error_mark_node;
12579
12580   /* Parse the attributes.  */
12581   attributes = cp_parser_attributes_opt (parser);
12582
12583   /* If the next token is `::', that is invalid -- but sometimes
12584      people do try to write:
12585
12586        struct ::S {};
12587
12588      Handle this gracefully by accepting the extra qualifier, and then
12589      issuing an error about it later if this really is a
12590      class-head.  If it turns out just to be an elaborated type
12591      specifier, remain silent.  */
12592   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
12593     qualified_p = true;
12594
12595   push_deferring_access_checks (dk_no_check);
12596
12597   /* Determine the name of the class.  Begin by looking for an
12598      optional nested-name-specifier.  */
12599   nested_name_specifier
12600     = cp_parser_nested_name_specifier_opt (parser,
12601                                            /*typename_keyword_p=*/false,
12602                                            /*check_dependency_p=*/false,
12603                                            /*type_p=*/false,
12604                                            /*is_declaration=*/false);
12605   /* If there was a nested-name-specifier, then there *must* be an
12606      identifier.  */
12607   if (nested_name_specifier)
12608     {
12609       /* Although the grammar says `identifier', it really means
12610          `class-name' or `template-name'.  You are only allowed to
12611          define a class that has already been declared with this
12612          syntax.
12613
12614          The proposed resolution for Core Issue 180 says that whever
12615          you see `class T::X' you should treat `X' as a type-name.
12616
12617          It is OK to define an inaccessible class; for example:
12618
12619            class A { class B; };
12620            class A::B {};
12621
12622          We do not know if we will see a class-name, or a
12623          template-name.  We look for a class-name first, in case the
12624          class-name is a template-id; if we looked for the
12625          template-name first we would stop after the template-name.  */
12626       cp_parser_parse_tentatively (parser);
12627       type = cp_parser_class_name (parser,
12628                                    /*typename_keyword_p=*/false,
12629                                    /*template_keyword_p=*/false,
12630                                    class_type,
12631                                    /*check_dependency_p=*/false,
12632                                    /*class_head_p=*/true,
12633                                    /*is_declaration=*/false);
12634       /* If that didn't work, ignore the nested-name-specifier.  */
12635       if (!cp_parser_parse_definitely (parser))
12636         {
12637           invalid_nested_name_p = true;
12638           id = cp_parser_identifier (parser);
12639           if (id == error_mark_node)
12640             id = NULL_TREE;
12641         }
12642       /* If we could not find a corresponding TYPE, treat this
12643          declaration like an unqualified declaration.  */
12644       if (type == error_mark_node)
12645         nested_name_specifier = NULL_TREE;
12646       /* Otherwise, count the number of templates used in TYPE and its
12647          containing scopes.  */
12648       else
12649         {
12650           tree scope;
12651
12652           for (scope = TREE_TYPE (type);
12653                scope && TREE_CODE (scope) != NAMESPACE_DECL;
12654                scope = (TYPE_P (scope)
12655                         ? TYPE_CONTEXT (scope)
12656                         : DECL_CONTEXT (scope)))
12657             if (TYPE_P (scope)
12658                 && CLASS_TYPE_P (scope)
12659                 && CLASSTYPE_TEMPLATE_INFO (scope)
12660                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
12661                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
12662               ++num_templates;
12663         }
12664     }
12665   /* Otherwise, the identifier is optional.  */
12666   else
12667     {
12668       /* We don't know whether what comes next is a template-id,
12669          an identifier, or nothing at all.  */
12670       cp_parser_parse_tentatively (parser);
12671       /* Check for a template-id.  */
12672       id = cp_parser_template_id (parser,
12673                                   /*template_keyword_p=*/false,
12674                                   /*check_dependency_p=*/true,
12675                                   /*is_declaration=*/true);
12676       /* If that didn't work, it could still be an identifier.  */
12677       if (!cp_parser_parse_definitely (parser))
12678         {
12679           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12680             id = cp_parser_identifier (parser);
12681           else
12682             id = NULL_TREE;
12683         }
12684       else
12685         {
12686           template_id_p = true;
12687           ++num_templates;
12688         }
12689     }
12690
12691   pop_deferring_access_checks ();
12692
12693   if (id)
12694     cp_parser_check_for_invalid_template_id (parser, id);
12695
12696   /* If it's not a `:' or a `{' then we can't really be looking at a
12697      class-head, since a class-head only appears as part of a
12698      class-specifier.  We have to detect this situation before calling
12699      xref_tag, since that has irreversible side-effects.  */
12700   if (!cp_parser_next_token_starts_class_definition_p (parser))
12701     {
12702       cp_parser_error (parser, "expected %<{%> or %<:%>");
12703       return error_mark_node;
12704     }
12705
12706   /* At this point, we're going ahead with the class-specifier, even
12707      if some other problem occurs.  */
12708   cp_parser_commit_to_tentative_parse (parser);
12709   /* Issue the error about the overly-qualified name now.  */
12710   if (qualified_p)
12711     cp_parser_error (parser,
12712                      "global qualification of class name is invalid");
12713   else if (invalid_nested_name_p)
12714     cp_parser_error (parser,
12715                      "qualified name does not name a class");
12716   else if (nested_name_specifier)
12717     {
12718       tree scope;
12719
12720       /* Reject typedef-names in class heads.  */
12721       if (!DECL_IMPLICIT_TYPEDEF_P (type))
12722         {
12723           error ("invalid class name in declaration of %qD", type);
12724           type = NULL_TREE;
12725           goto done;
12726         }
12727
12728       /* Figure out in what scope the declaration is being placed.  */
12729       scope = current_scope ();
12730       /* If that scope does not contain the scope in which the
12731          class was originally declared, the program is invalid.  */
12732       if (scope && !is_ancestor (scope, nested_name_specifier))
12733         {
12734           error ("declaration of %qD in %qD which does not enclose %qD",
12735                  type, scope, nested_name_specifier);
12736           type = NULL_TREE;
12737           goto done;
12738         }
12739       /* [dcl.meaning]
12740
12741          A declarator-id shall not be qualified exception of the
12742          definition of a ... nested class outside of its class
12743          ... [or] a the definition or explicit instantiation of a
12744          class member of a namespace outside of its namespace.  */
12745       if (scope == nested_name_specifier)
12746         {
12747           pedwarn ("extra qualification ignored");
12748           nested_name_specifier = NULL_TREE;
12749           num_templates = 0;
12750         }
12751     }
12752   /* An explicit-specialization must be preceded by "template <>".  If
12753      it is not, try to recover gracefully.  */
12754   if (at_namespace_scope_p ()
12755       && parser->num_template_parameter_lists == 0
12756       && template_id_p)
12757     {
12758       error ("an explicit specialization must be preceded by %<template <>%>");
12759       invalid_explicit_specialization_p = true;
12760       /* Take the same action that would have been taken by
12761          cp_parser_explicit_specialization.  */
12762       ++parser->num_template_parameter_lists;
12763       begin_specialization ();
12764     }
12765   /* There must be no "return" statements between this point and the
12766      end of this function; set "type "to the correct return value and
12767      use "goto done;" to return.  */
12768   /* Make sure that the right number of template parameters were
12769      present.  */
12770   if (!cp_parser_check_template_parameters (parser, num_templates))
12771     {
12772       /* If something went wrong, there is no point in even trying to
12773          process the class-definition.  */
12774       type = NULL_TREE;
12775       goto done;
12776     }
12777
12778   /* Look up the type.  */
12779   if (template_id_p)
12780     {
12781       type = TREE_TYPE (id);
12782       maybe_process_partial_specialization (type);
12783       if (nested_name_specifier)
12784         pushed_scope = push_scope (nested_name_specifier);
12785     }
12786   else if (nested_name_specifier)
12787     {
12788       tree class_type;
12789
12790       /* Given:
12791
12792             template <typename T> struct S { struct T };
12793             template <typename T> struct S<T>::T { };
12794
12795          we will get a TYPENAME_TYPE when processing the definition of
12796          `S::T'.  We need to resolve it to the actual type before we
12797          try to define it.  */
12798       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
12799         {
12800           class_type = resolve_typename_type (TREE_TYPE (type),
12801                                               /*only_current_p=*/false);
12802           if (class_type != error_mark_node)
12803             type = TYPE_NAME (class_type);
12804           else
12805             {
12806               cp_parser_error (parser, "could not resolve typename type");
12807               type = error_mark_node;
12808             }
12809         }
12810
12811       maybe_process_partial_specialization (TREE_TYPE (type));
12812       class_type = current_class_type;
12813       /* Enter the scope indicated by the nested-name-specifier.  */
12814       pushed_scope = push_scope (nested_name_specifier);
12815       /* Get the canonical version of this type.  */
12816       type = TYPE_MAIN_DECL (TREE_TYPE (type));
12817       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
12818           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
12819         {
12820           type = push_template_decl (type);
12821           if (type == error_mark_node)
12822             {
12823               type = NULL_TREE;
12824               goto done;
12825             }
12826         }
12827       
12828       type = TREE_TYPE (type);
12829       *nested_name_specifier_p = true;
12830     }
12831   else      /* The name is not a nested name.  */
12832     {
12833       /* If the class was unnamed, create a dummy name.  */
12834       if (!id)
12835         id = make_anon_name ();
12836       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
12837                        parser->num_template_parameter_lists);
12838     }
12839
12840   /* Indicate whether this class was declared as a `class' or as a
12841      `struct'.  */
12842   if (TREE_CODE (type) == RECORD_TYPE)
12843     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
12844   cp_parser_check_class_key (class_key, type);
12845
12846   /* If this type was already complete, and we see another definition,
12847      that's an error.  */
12848   if (type != error_mark_node && COMPLETE_TYPE_P (type))
12849     {
12850       error ("redefinition of %q#T", type);
12851       cp_error_at ("previous definition of %q#T", type);
12852       type = error_mark_node;
12853     }
12854
12855   /* We will have entered the scope containing the class; the names of
12856      base classes should be looked up in that context.  For example:
12857
12858        struct A { struct B {}; struct C; };
12859        struct A::C : B {};
12860
12861      is valid.  */
12862   bases = NULL_TREE;
12863
12864   /* Get the list of base-classes, if there is one.  */
12865   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12866     bases = cp_parser_base_clause (parser);
12867
12868   /* Process the base classes.  */
12869   xref_basetypes (type, bases);
12870
12871  done:
12872   /* Leave the scope given by the nested-name-specifier.  We will
12873      enter the class scope itself while processing the members.  */
12874   if (pushed_scope)
12875     pop_scope (pushed_scope);
12876
12877   if (invalid_explicit_specialization_p)
12878     {
12879       end_specialization ();
12880       --parser->num_template_parameter_lists;
12881     }
12882   *attributes_p = attributes;
12883   return type;
12884 }
12885
12886 /* Parse a class-key.
12887
12888    class-key:
12889      class
12890      struct
12891      union
12892
12893    Returns the kind of class-key specified, or none_type to indicate
12894    error.  */
12895
12896 static enum tag_types
12897 cp_parser_class_key (cp_parser* parser)
12898 {
12899   cp_token *token;
12900   enum tag_types tag_type;
12901
12902   /* Look for the class-key.  */
12903   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
12904   if (!token)
12905     return none_type;
12906
12907   /* Check to see if the TOKEN is a class-key.  */
12908   tag_type = cp_parser_token_is_class_key (token);
12909   if (!tag_type)
12910     cp_parser_error (parser, "expected class-key");
12911   return tag_type;
12912 }
12913
12914 /* Parse an (optional) member-specification.
12915
12916    member-specification:
12917      member-declaration member-specification [opt]
12918      access-specifier : member-specification [opt]  */
12919
12920 static void
12921 cp_parser_member_specification_opt (cp_parser* parser)
12922 {
12923   while (true)
12924     {
12925       cp_token *token;
12926       enum rid keyword;
12927
12928       /* Peek at the next token.  */
12929       token = cp_lexer_peek_token (parser->lexer);
12930       /* If it's a `}', or EOF then we've seen all the members.  */
12931       if (token->type == CPP_CLOSE_BRACE || token->type == CPP_EOF)
12932         break;
12933
12934       /* See if this token is a keyword.  */
12935       keyword = token->keyword;
12936       switch (keyword)
12937         {
12938         case RID_PUBLIC:
12939         case RID_PROTECTED:
12940         case RID_PRIVATE:
12941           /* Consume the access-specifier.  */
12942           cp_lexer_consume_token (parser->lexer);
12943           /* Remember which access-specifier is active.  */
12944           current_access_specifier = token->value;
12945           /* Look for the `:'.  */
12946           cp_parser_require (parser, CPP_COLON, "`:'");
12947           break;
12948
12949         default:
12950           /* Accept #pragmas at class scope.  */
12951           if (token->type == CPP_PRAGMA)
12952             {
12953               cp_lexer_handle_pragma (parser->lexer);
12954               break;
12955             }
12956
12957           /* Otherwise, the next construction must be a
12958              member-declaration.  */
12959           cp_parser_member_declaration (parser);
12960         }
12961     }
12962 }
12963
12964 /* Parse a member-declaration.
12965
12966    member-declaration:
12967      decl-specifier-seq [opt] member-declarator-list [opt] ;
12968      function-definition ; [opt]
12969      :: [opt] nested-name-specifier template [opt] unqualified-id ;
12970      using-declaration
12971      template-declaration
12972
12973    member-declarator-list:
12974      member-declarator
12975      member-declarator-list , member-declarator
12976
12977    member-declarator:
12978      declarator pure-specifier [opt]
12979      declarator constant-initializer [opt]
12980      identifier [opt] : constant-expression
12981
12982    GNU Extensions:
12983
12984    member-declaration:
12985      __extension__ member-declaration
12986
12987    member-declarator:
12988      declarator attributes [opt] pure-specifier [opt]
12989      declarator attributes [opt] constant-initializer [opt]
12990      identifier [opt] attributes [opt] : constant-expression  */
12991
12992 static void
12993 cp_parser_member_declaration (cp_parser* parser)
12994 {
12995   cp_decl_specifier_seq decl_specifiers;
12996   tree prefix_attributes;
12997   tree decl;
12998   int declares_class_or_enum;
12999   bool friend_p;
13000   cp_token *token;
13001   int saved_pedantic;
13002
13003   /* Check for the `__extension__' keyword.  */
13004   if (cp_parser_extension_opt (parser, &saved_pedantic))
13005     {
13006       /* Recurse.  */
13007       cp_parser_member_declaration (parser);
13008       /* Restore the old value of the PEDANTIC flag.  */
13009       pedantic = saved_pedantic;
13010
13011       return;
13012     }
13013
13014   /* Check for a template-declaration.  */
13015   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13016     {
13017       /* Parse the template-declaration.  */
13018       cp_parser_template_declaration (parser, /*member_p=*/true);
13019
13020       return;
13021     }
13022
13023   /* Check for a using-declaration.  */
13024   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
13025     {
13026       /* Parse the using-declaration.  */
13027       cp_parser_using_declaration (parser);
13028
13029       return;
13030     }
13031
13032   /* Parse the decl-specifier-seq.  */
13033   cp_parser_decl_specifier_seq (parser,
13034                                 CP_PARSER_FLAGS_OPTIONAL,
13035                                 &decl_specifiers,
13036                                 &declares_class_or_enum);
13037   prefix_attributes = decl_specifiers.attributes;
13038   decl_specifiers.attributes = NULL_TREE;
13039   /* Check for an invalid type-name.  */
13040   if (!decl_specifiers.type
13041       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
13042     return;
13043   /* If there is no declarator, then the decl-specifier-seq should
13044      specify a type.  */
13045   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13046     {
13047       /* If there was no decl-specifier-seq, and the next token is a
13048          `;', then we have something like:
13049
13050            struct S { ; };
13051
13052          [class.mem]
13053
13054          Each member-declaration shall declare at least one member
13055          name of the class.  */
13056       if (!decl_specifiers.any_specifiers_p)
13057         {
13058           cp_token *token = cp_lexer_peek_token (parser->lexer);
13059           if (pedantic && !token->in_system_header)
13060             pedwarn ("%Hextra %<;%>", &token->location);
13061         }
13062       else
13063         {
13064           tree type;
13065
13066           /* See if this declaration is a friend.  */
13067           friend_p = cp_parser_friend_p (&decl_specifiers);
13068           /* If there were decl-specifiers, check to see if there was
13069              a class-declaration.  */
13070           type = check_tag_decl (&decl_specifiers);
13071           /* Nested classes have already been added to the class, but
13072              a `friend' needs to be explicitly registered.  */
13073           if (friend_p)
13074             {
13075               /* If the `friend' keyword was present, the friend must
13076                  be introduced with a class-key.  */
13077                if (!declares_class_or_enum)
13078                  error ("a class-key must be used when declaring a friend");
13079                /* In this case:
13080
13081                     template <typename T> struct A {
13082                       friend struct A<T>::B;
13083                     };
13084
13085                   A<T>::B will be represented by a TYPENAME_TYPE, and
13086                   therefore not recognized by check_tag_decl.  */
13087                if (!type
13088                    && decl_specifiers.type
13089                    && TYPE_P (decl_specifiers.type))
13090                  type = decl_specifiers.type;
13091                if (!type || !TYPE_P (type))
13092                  error ("friend declaration does not name a class or "
13093                         "function");
13094                else
13095                  make_friend_class (current_class_type, type,
13096                                     /*complain=*/true);
13097             }
13098           /* If there is no TYPE, an error message will already have
13099              been issued.  */
13100           else if (!type || type == error_mark_node)
13101             ;
13102           /* An anonymous aggregate has to be handled specially; such
13103              a declaration really declares a data member (with a
13104              particular type), as opposed to a nested class.  */
13105           else if (ANON_AGGR_TYPE_P (type))
13106             {
13107               /* Remove constructors and such from TYPE, now that we
13108                  know it is an anonymous aggregate.  */
13109               fixup_anonymous_aggr (type);
13110               /* And make the corresponding data member.  */
13111               decl = build_decl (FIELD_DECL, NULL_TREE, type);
13112               /* Add it to the class.  */
13113               finish_member_declaration (decl);
13114             }
13115           else
13116             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
13117         }
13118     }
13119   else
13120     {
13121       /* See if these declarations will be friends.  */
13122       friend_p = cp_parser_friend_p (&decl_specifiers);
13123
13124       /* Keep going until we hit the `;' at the end of the
13125          declaration.  */
13126       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13127         {
13128           tree attributes = NULL_TREE;
13129           tree first_attribute;
13130
13131           /* Peek at the next token.  */
13132           token = cp_lexer_peek_token (parser->lexer);
13133
13134           /* Check for a bitfield declaration.  */
13135           if (token->type == CPP_COLON
13136               || (token->type == CPP_NAME
13137                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
13138                   == CPP_COLON))
13139             {
13140               tree identifier;
13141               tree width;
13142
13143               /* Get the name of the bitfield.  Note that we cannot just
13144                  check TOKEN here because it may have been invalidated by
13145                  the call to cp_lexer_peek_nth_token above.  */
13146               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
13147                 identifier = cp_parser_identifier (parser);
13148               else
13149                 identifier = NULL_TREE;
13150
13151               /* Consume the `:' token.  */
13152               cp_lexer_consume_token (parser->lexer);
13153               /* Get the width of the bitfield.  */
13154               width
13155                 = cp_parser_constant_expression (parser,
13156                                                  /*allow_non_constant=*/false,
13157                                                  NULL);
13158
13159               /* Look for attributes that apply to the bitfield.  */
13160               attributes = cp_parser_attributes_opt (parser);
13161               /* Remember which attributes are prefix attributes and
13162                  which are not.  */
13163               first_attribute = attributes;
13164               /* Combine the attributes.  */
13165               attributes = chainon (prefix_attributes, attributes);
13166
13167               /* Create the bitfield declaration.  */
13168               decl = grokbitfield (identifier
13169                                    ? make_id_declarator (NULL_TREE,
13170                                                          identifier)
13171                                    : NULL,
13172                                    &decl_specifiers,
13173                                    width);
13174               /* Apply the attributes.  */
13175               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
13176             }
13177           else
13178             {
13179               cp_declarator *declarator;
13180               tree initializer;
13181               tree asm_specification;
13182               int ctor_dtor_or_conv_p;
13183
13184               /* Parse the declarator.  */
13185               declarator
13186                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13187                                         &ctor_dtor_or_conv_p,
13188                                         /*parenthesized_p=*/NULL,
13189                                         /*member_p=*/true);
13190
13191               /* If something went wrong parsing the declarator, make sure
13192                  that we at least consume some tokens.  */
13193               if (declarator == cp_error_declarator)
13194                 {
13195                   /* Skip to the end of the statement.  */
13196                   cp_parser_skip_to_end_of_statement (parser);
13197                   /* If the next token is not a semicolon, that is
13198                      probably because we just skipped over the body of
13199                      a function.  So, we consume a semicolon if
13200                      present, but do not issue an error message if it
13201                      is not present.  */
13202                   if (cp_lexer_next_token_is (parser->lexer,
13203                                               CPP_SEMICOLON))
13204                     cp_lexer_consume_token (parser->lexer);
13205                   return;
13206                 }
13207
13208               if (declares_class_or_enum & 2)
13209                 cp_parser_check_for_definition_in_return_type
13210                   (declarator, decl_specifiers.type);
13211
13212               /* Look for an asm-specification.  */
13213               asm_specification = cp_parser_asm_specification_opt (parser);
13214               /* Look for attributes that apply to the declaration.  */
13215               attributes = cp_parser_attributes_opt (parser);
13216               /* Remember which attributes are prefix attributes and
13217                  which are not.  */
13218               first_attribute = attributes;
13219               /* Combine the attributes.  */
13220               attributes = chainon (prefix_attributes, attributes);
13221
13222               /* If it's an `=', then we have a constant-initializer or a
13223                  pure-specifier.  It is not correct to parse the
13224                  initializer before registering the member declaration
13225                  since the member declaration should be in scope while
13226                  its initializer is processed.  However, the rest of the
13227                  front end does not yet provide an interface that allows
13228                  us to handle this correctly.  */
13229               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13230                 {
13231                   /* In [class.mem]:
13232
13233                      A pure-specifier shall be used only in the declaration of
13234                      a virtual function.
13235
13236                      A member-declarator can contain a constant-initializer
13237                      only if it declares a static member of integral or
13238                      enumeration type.
13239
13240                      Therefore, if the DECLARATOR is for a function, we look
13241                      for a pure-specifier; otherwise, we look for a
13242                      constant-initializer.  When we call `grokfield', it will
13243                      perform more stringent semantics checks.  */
13244                   if (declarator->kind == cdk_function)
13245                     initializer = cp_parser_pure_specifier (parser);
13246                   else
13247                     /* Parse the initializer.  */
13248                     initializer = cp_parser_constant_initializer (parser);
13249                 }
13250               /* Otherwise, there is no initializer.  */
13251               else
13252                 initializer = NULL_TREE;
13253
13254               /* See if we are probably looking at a function
13255                  definition.  We are certainly not looking at a
13256                  member-declarator.  Calling `grokfield' has
13257                  side-effects, so we must not do it unless we are sure
13258                  that we are looking at a member-declarator.  */
13259               if (cp_parser_token_starts_function_definition_p
13260                   (cp_lexer_peek_token (parser->lexer)))
13261                 {
13262                   /* The grammar does not allow a pure-specifier to be
13263                      used when a member function is defined.  (It is
13264                      possible that this fact is an oversight in the
13265                      standard, since a pure function may be defined
13266                      outside of the class-specifier.  */
13267                   if (initializer)
13268                     error ("pure-specifier on function-definition");
13269                   decl = cp_parser_save_member_function_body (parser,
13270                                                               &decl_specifiers,
13271                                                               declarator,
13272                                                               attributes);
13273                   /* If the member was not a friend, declare it here.  */
13274                   if (!friend_p)
13275                     finish_member_declaration (decl);
13276                   /* Peek at the next token.  */
13277                   token = cp_lexer_peek_token (parser->lexer);
13278                   /* If the next token is a semicolon, consume it.  */
13279                   if (token->type == CPP_SEMICOLON)
13280                     cp_lexer_consume_token (parser->lexer);
13281                   return;
13282                 }
13283               else
13284                 {
13285                   /* Create the declaration.  */
13286                   decl = grokfield (declarator, &decl_specifiers,
13287                                     initializer, asm_specification,
13288                                     attributes);
13289                   /* Any initialization must have been from a
13290                      constant-expression.  */
13291                   if (decl && TREE_CODE (decl) == VAR_DECL && initializer)
13292                     DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
13293                 }
13294             }
13295
13296           /* Reset PREFIX_ATTRIBUTES.  */
13297           while (attributes && TREE_CHAIN (attributes) != first_attribute)
13298             attributes = TREE_CHAIN (attributes);
13299           if (attributes)
13300             TREE_CHAIN (attributes) = NULL_TREE;
13301
13302           /* If there is any qualification still in effect, clear it
13303              now; we will be starting fresh with the next declarator.  */
13304           parser->scope = NULL_TREE;
13305           parser->qualifying_scope = NULL_TREE;
13306           parser->object_scope = NULL_TREE;
13307           /* If it's a `,', then there are more declarators.  */
13308           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
13309             cp_lexer_consume_token (parser->lexer);
13310           /* If the next token isn't a `;', then we have a parse error.  */
13311           else if (cp_lexer_next_token_is_not (parser->lexer,
13312                                                CPP_SEMICOLON))
13313             {
13314               cp_parser_error (parser, "expected %<;%>");
13315               /* Skip tokens until we find a `;'.  */
13316               cp_parser_skip_to_end_of_statement (parser);
13317
13318               break;
13319             }
13320
13321           if (decl)
13322             {
13323               /* Add DECL to the list of members.  */
13324               if (!friend_p)
13325                 finish_member_declaration (decl);
13326
13327               if (TREE_CODE (decl) == FUNCTION_DECL)
13328                 cp_parser_save_default_args (parser, decl);
13329             }
13330         }
13331     }
13332
13333   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
13334 }
13335
13336 /* Parse a pure-specifier.
13337
13338    pure-specifier:
13339      = 0
13340
13341    Returns INTEGER_ZERO_NODE if a pure specifier is found.
13342    Otherwise, ERROR_MARK_NODE is returned.  */
13343
13344 static tree
13345 cp_parser_pure_specifier (cp_parser* parser)
13346 {
13347   cp_token *token;
13348
13349   /* Look for the `=' token.  */
13350   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13351     return error_mark_node;
13352   /* Look for the `0' token.  */
13353   token = cp_lexer_consume_token (parser->lexer);
13354   if (token->type != CPP_NUMBER || !integer_zerop (token->value))
13355     {
13356       cp_parser_error (parser,
13357                        "invalid pure specifier (only `= 0' is allowed)");
13358       cp_parser_skip_to_end_of_statement (parser);
13359       return error_mark_node;
13360     }
13361
13362   /* FIXME: Unfortunately, this will accept `0L' and `0x00' as well.
13363      We need to get information from the lexer about how the number
13364      was spelled in order to fix this problem.  */
13365   return integer_zero_node;
13366 }
13367
13368 /* Parse a constant-initializer.
13369
13370    constant-initializer:
13371      = constant-expression
13372
13373    Returns a representation of the constant-expression.  */
13374
13375 static tree
13376 cp_parser_constant_initializer (cp_parser* parser)
13377 {
13378   /* Look for the `=' token.  */
13379   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13380     return error_mark_node;
13381
13382   /* It is invalid to write:
13383
13384        struct S { static const int i = { 7 }; };
13385
13386      */
13387   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13388     {
13389       cp_parser_error (parser,
13390                        "a brace-enclosed initializer is not allowed here");
13391       /* Consume the opening brace.  */
13392       cp_lexer_consume_token (parser->lexer);
13393       /* Skip the initializer.  */
13394       cp_parser_skip_to_closing_brace (parser);
13395       /* Look for the trailing `}'.  */
13396       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13397
13398       return error_mark_node;
13399     }
13400
13401   return cp_parser_constant_expression (parser,
13402                                         /*allow_non_constant=*/false,
13403                                         NULL);
13404 }
13405
13406 /* Derived classes [gram.class.derived] */
13407
13408 /* Parse a base-clause.
13409
13410    base-clause:
13411      : base-specifier-list
13412
13413    base-specifier-list:
13414      base-specifier
13415      base-specifier-list , base-specifier
13416
13417    Returns a TREE_LIST representing the base-classes, in the order in
13418    which they were declared.  The representation of each node is as
13419    described by cp_parser_base_specifier.
13420
13421    In the case that no bases are specified, this function will return
13422    NULL_TREE, not ERROR_MARK_NODE.  */
13423
13424 static tree
13425 cp_parser_base_clause (cp_parser* parser)
13426 {
13427   tree bases = NULL_TREE;
13428
13429   /* Look for the `:' that begins the list.  */
13430   cp_parser_require (parser, CPP_COLON, "`:'");
13431
13432   /* Scan the base-specifier-list.  */
13433   while (true)
13434     {
13435       cp_token *token;
13436       tree base;
13437
13438       /* Look for the base-specifier.  */
13439       base = cp_parser_base_specifier (parser);
13440       /* Add BASE to the front of the list.  */
13441       if (base != error_mark_node)
13442         {
13443           TREE_CHAIN (base) = bases;
13444           bases = base;
13445         }
13446       /* Peek at the next token.  */
13447       token = cp_lexer_peek_token (parser->lexer);
13448       /* If it's not a comma, then the list is complete.  */
13449       if (token->type != CPP_COMMA)
13450         break;
13451       /* Consume the `,'.  */
13452       cp_lexer_consume_token (parser->lexer);
13453     }
13454
13455   /* PARSER->SCOPE may still be non-NULL at this point, if the last
13456      base class had a qualified name.  However, the next name that
13457      appears is certainly not qualified.  */
13458   parser->scope = NULL_TREE;
13459   parser->qualifying_scope = NULL_TREE;
13460   parser->object_scope = NULL_TREE;
13461
13462   return nreverse (bases);
13463 }
13464
13465 /* Parse a base-specifier.
13466
13467    base-specifier:
13468      :: [opt] nested-name-specifier [opt] class-name
13469      virtual access-specifier [opt] :: [opt] nested-name-specifier
13470        [opt] class-name
13471      access-specifier virtual [opt] :: [opt] nested-name-specifier
13472        [opt] class-name
13473
13474    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
13475    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
13476    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
13477    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
13478
13479 static tree
13480 cp_parser_base_specifier (cp_parser* parser)
13481 {
13482   cp_token *token;
13483   bool done = false;
13484   bool virtual_p = false;
13485   bool duplicate_virtual_error_issued_p = false;
13486   bool duplicate_access_error_issued_p = false;
13487   bool class_scope_p, template_p;
13488   tree access = access_default_node;
13489   tree type;
13490
13491   /* Process the optional `virtual' and `access-specifier'.  */
13492   while (!done)
13493     {
13494       /* Peek at the next token.  */
13495       token = cp_lexer_peek_token (parser->lexer);
13496       /* Process `virtual'.  */
13497       switch (token->keyword)
13498         {
13499         case RID_VIRTUAL:
13500           /* If `virtual' appears more than once, issue an error.  */
13501           if (virtual_p && !duplicate_virtual_error_issued_p)
13502             {
13503               cp_parser_error (parser,
13504                                "%<virtual%> specified more than once in base-specified");
13505               duplicate_virtual_error_issued_p = true;
13506             }
13507
13508           virtual_p = true;
13509
13510           /* Consume the `virtual' token.  */
13511           cp_lexer_consume_token (parser->lexer);
13512
13513           break;
13514
13515         case RID_PUBLIC:
13516         case RID_PROTECTED:
13517         case RID_PRIVATE:
13518           /* If more than one access specifier appears, issue an
13519              error.  */
13520           if (access != access_default_node
13521               && !duplicate_access_error_issued_p)
13522             {
13523               cp_parser_error (parser,
13524                                "more than one access specifier in base-specified");
13525               duplicate_access_error_issued_p = true;
13526             }
13527
13528           access = ridpointers[(int) token->keyword];
13529
13530           /* Consume the access-specifier.  */
13531           cp_lexer_consume_token (parser->lexer);
13532
13533           break;
13534
13535         default:
13536           done = true;
13537           break;
13538         }
13539     }
13540   /* It is not uncommon to see programs mechanically, erroneously, use
13541      the 'typename' keyword to denote (dependent) qualified types
13542      as base classes.  */
13543   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
13544     {
13545       if (!processing_template_decl)
13546         error ("keyword %<typename%> not allowed outside of templates");
13547       else
13548         error ("keyword %<typename%> not allowed in this context "
13549                "(the base class is implicitly a type)");
13550       cp_lexer_consume_token (parser->lexer);
13551     }
13552
13553   /* Look for the optional `::' operator.  */
13554   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
13555   /* Look for the nested-name-specifier.  The simplest way to
13556      implement:
13557
13558        [temp.res]
13559
13560        The keyword `typename' is not permitted in a base-specifier or
13561        mem-initializer; in these contexts a qualified name that
13562        depends on a template-parameter is implicitly assumed to be a
13563        type name.
13564
13565      is to pretend that we have seen the `typename' keyword at this
13566      point.  */
13567   cp_parser_nested_name_specifier_opt (parser,
13568                                        /*typename_keyword_p=*/true,
13569                                        /*check_dependency_p=*/true,
13570                                        typename_type,
13571                                        /*is_declaration=*/true);
13572   /* If the base class is given by a qualified name, assume that names
13573      we see are type names or templates, as appropriate.  */
13574   class_scope_p = (parser->scope && TYPE_P (parser->scope));
13575   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
13576
13577   /* Finally, look for the class-name.  */
13578   type = cp_parser_class_name (parser,
13579                                class_scope_p,
13580                                template_p,
13581                                typename_type,
13582                                /*check_dependency_p=*/true,
13583                                /*class_head_p=*/false,
13584                                /*is_declaration=*/true);
13585
13586   if (type == error_mark_node)
13587     return error_mark_node;
13588
13589   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
13590 }
13591
13592 /* Exception handling [gram.exception] */
13593
13594 /* Parse an (optional) exception-specification.
13595
13596    exception-specification:
13597      throw ( type-id-list [opt] )
13598
13599    Returns a TREE_LIST representing the exception-specification.  The
13600    TREE_VALUE of each node is a type.  */
13601
13602 static tree
13603 cp_parser_exception_specification_opt (cp_parser* parser)
13604 {
13605   cp_token *token;
13606   tree type_id_list;
13607
13608   /* Peek at the next token.  */
13609   token = cp_lexer_peek_token (parser->lexer);
13610   /* If it's not `throw', then there's no exception-specification.  */
13611   if (!cp_parser_is_keyword (token, RID_THROW))
13612     return NULL_TREE;
13613
13614   /* Consume the `throw'.  */
13615   cp_lexer_consume_token (parser->lexer);
13616
13617   /* Look for the `('.  */
13618   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13619
13620   /* Peek at the next token.  */
13621   token = cp_lexer_peek_token (parser->lexer);
13622   /* If it's not a `)', then there is a type-id-list.  */
13623   if (token->type != CPP_CLOSE_PAREN)
13624     {
13625       const char *saved_message;
13626
13627       /* Types may not be defined in an exception-specification.  */
13628       saved_message = parser->type_definition_forbidden_message;
13629       parser->type_definition_forbidden_message
13630         = "types may not be defined in an exception-specification";
13631       /* Parse the type-id-list.  */
13632       type_id_list = cp_parser_type_id_list (parser);
13633       /* Restore the saved message.  */
13634       parser->type_definition_forbidden_message = saved_message;
13635     }
13636   else
13637     type_id_list = empty_except_spec;
13638
13639   /* Look for the `)'.  */
13640   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13641
13642   return type_id_list;
13643 }
13644
13645 /* Parse an (optional) type-id-list.
13646
13647    type-id-list:
13648      type-id
13649      type-id-list , type-id
13650
13651    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
13652    in the order that the types were presented.  */
13653
13654 static tree
13655 cp_parser_type_id_list (cp_parser* parser)
13656 {
13657   tree types = NULL_TREE;
13658
13659   while (true)
13660     {
13661       cp_token *token;
13662       tree type;
13663
13664       /* Get the next type-id.  */
13665       type = cp_parser_type_id (parser);
13666       /* Add it to the list.  */
13667       types = add_exception_specifier (types, type, /*complain=*/1);
13668       /* Peek at the next token.  */
13669       token = cp_lexer_peek_token (parser->lexer);
13670       /* If it is not a `,', we are done.  */
13671       if (token->type != CPP_COMMA)
13672         break;
13673       /* Consume the `,'.  */
13674       cp_lexer_consume_token (parser->lexer);
13675     }
13676
13677   return nreverse (types);
13678 }
13679
13680 /* Parse a try-block.
13681
13682    try-block:
13683      try compound-statement handler-seq  */
13684
13685 static tree
13686 cp_parser_try_block (cp_parser* parser)
13687 {
13688   tree try_block;
13689
13690   cp_parser_require_keyword (parser, RID_TRY, "`try'");
13691   try_block = begin_try_block ();
13692   cp_parser_compound_statement (parser, NULL, true);
13693   finish_try_block (try_block);
13694   cp_parser_handler_seq (parser);
13695   finish_handler_sequence (try_block);
13696
13697   return try_block;
13698 }
13699
13700 /* Parse a function-try-block.
13701
13702    function-try-block:
13703      try ctor-initializer [opt] function-body handler-seq  */
13704
13705 static bool
13706 cp_parser_function_try_block (cp_parser* parser)
13707 {
13708   tree try_block;
13709   bool ctor_initializer_p;
13710
13711   /* Look for the `try' keyword.  */
13712   if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
13713     return false;
13714   /* Let the rest of the front-end know where we are.  */
13715   try_block = begin_function_try_block ();
13716   /* Parse the function-body.  */
13717   ctor_initializer_p
13718     = cp_parser_ctor_initializer_opt_and_function_body (parser);
13719   /* We're done with the `try' part.  */
13720   finish_function_try_block (try_block);
13721   /* Parse the handlers.  */
13722   cp_parser_handler_seq (parser);
13723   /* We're done with the handlers.  */
13724   finish_function_handler_sequence (try_block);
13725
13726   return ctor_initializer_p;
13727 }
13728
13729 /* Parse a handler-seq.
13730
13731    handler-seq:
13732      handler handler-seq [opt]  */
13733
13734 static void
13735 cp_parser_handler_seq (cp_parser* parser)
13736 {
13737   while (true)
13738     {
13739       cp_token *token;
13740
13741       /* Parse the handler.  */
13742       cp_parser_handler (parser);
13743       /* Peek at the next token.  */
13744       token = cp_lexer_peek_token (parser->lexer);
13745       /* If it's not `catch' then there are no more handlers.  */
13746       if (!cp_parser_is_keyword (token, RID_CATCH))
13747         break;
13748     }
13749 }
13750
13751 /* Parse a handler.
13752
13753    handler:
13754      catch ( exception-declaration ) compound-statement  */
13755
13756 static void
13757 cp_parser_handler (cp_parser* parser)
13758 {
13759   tree handler;
13760   tree declaration;
13761
13762   cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
13763   handler = begin_handler ();
13764   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13765   declaration = cp_parser_exception_declaration (parser);
13766   finish_handler_parms (declaration, handler);
13767   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13768   cp_parser_compound_statement (parser, NULL, false);
13769   finish_handler (handler);
13770 }
13771
13772 /* Parse an exception-declaration.
13773
13774    exception-declaration:
13775      type-specifier-seq declarator
13776      type-specifier-seq abstract-declarator
13777      type-specifier-seq
13778      ...
13779
13780    Returns a VAR_DECL for the declaration, or NULL_TREE if the
13781    ellipsis variant is used.  */
13782
13783 static tree
13784 cp_parser_exception_declaration (cp_parser* parser)
13785 {
13786   tree decl;
13787   cp_decl_specifier_seq type_specifiers;
13788   cp_declarator *declarator;
13789   const char *saved_message;
13790
13791   /* If it's an ellipsis, it's easy to handle.  */
13792   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
13793     {
13794       /* Consume the `...' token.  */
13795       cp_lexer_consume_token (parser->lexer);
13796       return NULL_TREE;
13797     }
13798
13799   /* Types may not be defined in exception-declarations.  */
13800   saved_message = parser->type_definition_forbidden_message;
13801   parser->type_definition_forbidden_message
13802     = "types may not be defined in exception-declarations";
13803
13804   /* Parse the type-specifier-seq.  */
13805   cp_parser_type_specifier_seq (parser, &type_specifiers);
13806   /* If it's a `)', then there is no declarator.  */
13807   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
13808     declarator = NULL;
13809   else
13810     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
13811                                        /*ctor_dtor_or_conv_p=*/NULL,
13812                                        /*parenthesized_p=*/NULL,
13813                                        /*member_p=*/false);
13814
13815   /* Restore the saved message.  */
13816   parser->type_definition_forbidden_message = saved_message;
13817
13818   if (type_specifiers.any_specifiers_p)
13819     {
13820       decl = grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
13821       if (decl == NULL_TREE)
13822         error ("invalid catch parameter");
13823     }
13824   else
13825     decl = NULL_TREE;
13826
13827   return decl;
13828 }
13829
13830 /* Parse a throw-expression.
13831
13832    throw-expression:
13833      throw assignment-expression [opt]
13834
13835    Returns a THROW_EXPR representing the throw-expression.  */
13836
13837 static tree
13838 cp_parser_throw_expression (cp_parser* parser)
13839 {
13840   tree expression;
13841   cp_token* token;
13842
13843   cp_parser_require_keyword (parser, RID_THROW, "`throw'");
13844   token = cp_lexer_peek_token (parser->lexer);
13845   /* Figure out whether or not there is an assignment-expression
13846      following the "throw" keyword.  */
13847   if (token->type == CPP_COMMA
13848       || token->type == CPP_SEMICOLON
13849       || token->type == CPP_CLOSE_PAREN
13850       || token->type == CPP_CLOSE_SQUARE
13851       || token->type == CPP_CLOSE_BRACE
13852       || token->type == CPP_COLON)
13853     expression = NULL_TREE;
13854   else
13855     expression = cp_parser_assignment_expression (parser,
13856                                                   /*cast_p=*/false);
13857
13858   return build_throw (expression);
13859 }
13860
13861 /* GNU Extensions */
13862
13863 /* Parse an (optional) asm-specification.
13864
13865    asm-specification:
13866      asm ( string-literal )
13867
13868    If the asm-specification is present, returns a STRING_CST
13869    corresponding to the string-literal.  Otherwise, returns
13870    NULL_TREE.  */
13871
13872 static tree
13873 cp_parser_asm_specification_opt (cp_parser* parser)
13874 {
13875   cp_token *token;
13876   tree asm_specification;
13877
13878   /* Peek at the next token.  */
13879   token = cp_lexer_peek_token (parser->lexer);
13880   /* If the next token isn't the `asm' keyword, then there's no
13881      asm-specification.  */
13882   if (!cp_parser_is_keyword (token, RID_ASM))
13883     return NULL_TREE;
13884
13885   /* Consume the `asm' token.  */
13886   cp_lexer_consume_token (parser->lexer);
13887   /* Look for the `('.  */
13888   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13889
13890   /* Look for the string-literal.  */
13891   asm_specification = cp_parser_string_literal (parser, false, false);
13892
13893   /* Look for the `)'.  */
13894   cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
13895
13896   return asm_specification;
13897 }
13898
13899 /* Parse an asm-operand-list.
13900
13901    asm-operand-list:
13902      asm-operand
13903      asm-operand-list , asm-operand
13904
13905    asm-operand:
13906      string-literal ( expression )
13907      [ string-literal ] string-literal ( expression )
13908
13909    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
13910    each node is the expression.  The TREE_PURPOSE is itself a
13911    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
13912    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
13913    is a STRING_CST for the string literal before the parenthesis.  */
13914
13915 static tree
13916 cp_parser_asm_operand_list (cp_parser* parser)
13917 {
13918   tree asm_operands = NULL_TREE;
13919
13920   while (true)
13921     {
13922       tree string_literal;
13923       tree expression;
13924       tree name;
13925
13926       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
13927         {
13928           /* Consume the `[' token.  */
13929           cp_lexer_consume_token (parser->lexer);
13930           /* Read the operand name.  */
13931           name = cp_parser_identifier (parser);
13932           if (name != error_mark_node)
13933             name = build_string (IDENTIFIER_LENGTH (name),
13934                                  IDENTIFIER_POINTER (name));
13935           /* Look for the closing `]'.  */
13936           cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
13937         }
13938       else
13939         name = NULL_TREE;
13940       /* Look for the string-literal.  */
13941       string_literal = cp_parser_string_literal (parser, false, false);
13942
13943       /* Look for the `('.  */
13944       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
13945       /* Parse the expression.  */
13946       expression = cp_parser_expression (parser, /*cast_p=*/false);
13947       /* Look for the `)'.  */
13948       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
13949
13950       /* Add this operand to the list.  */
13951       asm_operands = tree_cons (build_tree_list (name, string_literal),
13952                                 expression,
13953                                 asm_operands);
13954       /* If the next token is not a `,', there are no more
13955          operands.  */
13956       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13957         break;
13958       /* Consume the `,'.  */
13959       cp_lexer_consume_token (parser->lexer);
13960     }
13961
13962   return nreverse (asm_operands);
13963 }
13964
13965 /* Parse an asm-clobber-list.
13966
13967    asm-clobber-list:
13968      string-literal
13969      asm-clobber-list , string-literal
13970
13971    Returns a TREE_LIST, indicating the clobbers in the order that they
13972    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
13973
13974 static tree
13975 cp_parser_asm_clobber_list (cp_parser* parser)
13976 {
13977   tree clobbers = NULL_TREE;
13978
13979   while (true)
13980     {
13981       tree string_literal;
13982
13983       /* Look for the string literal.  */
13984       string_literal = cp_parser_string_literal (parser, false, false);
13985       /* Add it to the list.  */
13986       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
13987       /* If the next token is not a `,', then the list is
13988          complete.  */
13989       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13990         break;
13991       /* Consume the `,' token.  */
13992       cp_lexer_consume_token (parser->lexer);
13993     }
13994
13995   return clobbers;
13996 }
13997
13998 /* Parse an (optional) series of attributes.
13999
14000    attributes:
14001      attributes attribute
14002
14003    attribute:
14004      __attribute__ (( attribute-list [opt] ))
14005
14006    The return value is as for cp_parser_attribute_list.  */
14007
14008 static tree
14009 cp_parser_attributes_opt (cp_parser* parser)
14010 {
14011   tree attributes = NULL_TREE;
14012
14013   while (true)
14014     {
14015       cp_token *token;
14016       tree attribute_list;
14017
14018       /* Peek at the next token.  */
14019       token = cp_lexer_peek_token (parser->lexer);
14020       /* If it's not `__attribute__', then we're done.  */
14021       if (token->keyword != RID_ATTRIBUTE)
14022         break;
14023
14024       /* Consume the `__attribute__' keyword.  */
14025       cp_lexer_consume_token (parser->lexer);
14026       /* Look for the two `(' tokens.  */
14027       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14028       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14029
14030       /* Peek at the next token.  */
14031       token = cp_lexer_peek_token (parser->lexer);
14032       if (token->type != CPP_CLOSE_PAREN)
14033         /* Parse the attribute-list.  */
14034         attribute_list = cp_parser_attribute_list (parser);
14035       else
14036         /* If the next token is a `)', then there is no attribute
14037            list.  */
14038         attribute_list = NULL;
14039
14040       /* Look for the two `)' tokens.  */
14041       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14042       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14043
14044       /* Add these new attributes to the list.  */
14045       attributes = chainon (attributes, attribute_list);
14046     }
14047
14048   return attributes;
14049 }
14050
14051 /* Parse an attribute-list.
14052
14053    attribute-list:
14054      attribute
14055      attribute-list , attribute
14056
14057    attribute:
14058      identifier
14059      identifier ( identifier )
14060      identifier ( identifier , expression-list )
14061      identifier ( expression-list )
14062
14063    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
14064    to an attribute.  The TREE_PURPOSE of each node is the identifier
14065    indicating which attribute is in use.  The TREE_VALUE represents
14066    the arguments, if any.  */
14067
14068 static tree
14069 cp_parser_attribute_list (cp_parser* parser)
14070 {
14071   tree attribute_list = NULL_TREE;
14072   bool save_translate_strings_p = parser->translate_strings_p;
14073
14074   parser->translate_strings_p = false;
14075   while (true)
14076     {
14077       cp_token *token;
14078       tree identifier;
14079       tree attribute;
14080
14081       /* Look for the identifier.  We also allow keywords here; for
14082          example `__attribute__ ((const))' is legal.  */
14083       token = cp_lexer_peek_token (parser->lexer);
14084       if (token->type == CPP_NAME
14085           || token->type == CPP_KEYWORD)
14086         {
14087           /* Consume the token.  */
14088           token = cp_lexer_consume_token (parser->lexer);
14089
14090           /* Save away the identifier that indicates which attribute
14091              this is.  */ 
14092           identifier = token->value;
14093           attribute = build_tree_list (identifier, NULL_TREE);
14094
14095           /* Peek at the next token.  */
14096           token = cp_lexer_peek_token (parser->lexer);
14097           /* If it's an `(', then parse the attribute arguments.  */
14098           if (token->type == CPP_OPEN_PAREN)
14099             {
14100               tree arguments;
14101
14102               arguments = (cp_parser_parenthesized_expression_list
14103                            (parser, true, /*cast_p=*/false, 
14104                             /*non_constant_p=*/NULL));
14105               /* Save the identifier and arguments away.  */
14106               TREE_VALUE (attribute) = arguments;
14107             }
14108
14109           /* Add this attribute to the list.  */
14110           TREE_CHAIN (attribute) = attribute_list;
14111           attribute_list = attribute;
14112
14113           token = cp_lexer_peek_token (parser->lexer);
14114         }
14115       /* Now, look for more attributes.  If the next token isn't a
14116          `,', we're done.  */
14117       if (token->type != CPP_COMMA)
14118         break;
14119
14120       /* Consume the comma and keep going.  */
14121       cp_lexer_consume_token (parser->lexer);
14122     }
14123   parser->translate_strings_p = save_translate_strings_p;
14124
14125   /* We built up the list in reverse order.  */
14126   return nreverse (attribute_list);
14127 }
14128
14129 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
14130    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
14131    current value of the PEDANTIC flag, regardless of whether or not
14132    the `__extension__' keyword is present.  The caller is responsible
14133    for restoring the value of the PEDANTIC flag.  */
14134
14135 static bool
14136 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
14137 {
14138   /* Save the old value of the PEDANTIC flag.  */
14139   *saved_pedantic = pedantic;
14140
14141   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
14142     {
14143       /* Consume the `__extension__' token.  */
14144       cp_lexer_consume_token (parser->lexer);
14145       /* We're not being pedantic while the `__extension__' keyword is
14146          in effect.  */
14147       pedantic = 0;
14148
14149       return true;
14150     }
14151
14152   return false;
14153 }
14154
14155 /* Parse a label declaration.
14156
14157    label-declaration:
14158      __label__ label-declarator-seq ;
14159
14160    label-declarator-seq:
14161      identifier , label-declarator-seq
14162      identifier  */
14163
14164 static void
14165 cp_parser_label_declaration (cp_parser* parser)
14166 {
14167   /* Look for the `__label__' keyword.  */
14168   cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
14169
14170   while (true)
14171     {
14172       tree identifier;
14173
14174       /* Look for an identifier.  */
14175       identifier = cp_parser_identifier (parser);
14176       /* Declare it as a lobel.  */
14177       finish_label_decl (identifier);
14178       /* If the next token is a `;', stop.  */
14179       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14180         break;
14181       /* Look for the `,' separating the label declarations.  */
14182       cp_parser_require (parser, CPP_COMMA, "`,'");
14183     }
14184
14185   /* Look for the final `;'.  */
14186   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14187 }
14188
14189 /* Support Functions */
14190
14191 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
14192    NAME should have one of the representations used for an
14193    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
14194    is returned.  If PARSER->SCOPE is a dependent type, then a
14195    SCOPE_REF is returned.
14196
14197    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
14198    returned; the name was already resolved when the TEMPLATE_ID_EXPR
14199    was formed.  Abstractly, such entities should not be passed to this
14200    function, because they do not need to be looked up, but it is
14201    simpler to check for this special case here, rather than at the
14202    call-sites.
14203
14204    In cases not explicitly covered above, this function returns a
14205    DECL, OVERLOAD, or baselink representing the result of the lookup.
14206    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
14207    is returned.
14208
14209    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
14210    (e.g., "struct") that was used.  In that case bindings that do not
14211    refer to types are ignored.
14212
14213    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
14214    ignored.
14215
14216    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
14217    are ignored.
14218
14219    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
14220    types.  
14221
14222    If AMBIGUOUS_P is non-NULL, it is set to true if name-lookup
14223    results in an ambiguity, and false otherwise.  */
14224
14225 static tree
14226 cp_parser_lookup_name (cp_parser *parser, tree name,
14227                        enum tag_types tag_type,
14228                        bool is_template, bool is_namespace,
14229                        bool check_dependency,
14230                        bool *ambiguous_p)
14231 {
14232   tree decl;
14233   tree object_type = parser->context->object_type;
14234
14235   /* Assume that the lookup will be unambiguous.  */
14236   if (ambiguous_p)
14237     *ambiguous_p = false;
14238
14239   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
14240      no longer valid.  Note that if we are parsing tentatively, and
14241      the parse fails, OBJECT_TYPE will be automatically restored.  */
14242   parser->context->object_type = NULL_TREE;
14243
14244   if (name == error_mark_node)
14245     return error_mark_node;
14246
14247   /* A template-id has already been resolved; there is no lookup to
14248      do.  */
14249   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
14250     return name;
14251   if (BASELINK_P (name))
14252     {
14253       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
14254                   == TEMPLATE_ID_EXPR);
14255       return name;
14256     }
14257
14258   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
14259      it should already have been checked to make sure that the name
14260      used matches the type being destroyed.  */
14261   if (TREE_CODE (name) == BIT_NOT_EXPR)
14262     {
14263       tree type;
14264
14265       /* Figure out to which type this destructor applies.  */
14266       if (parser->scope)
14267         type = parser->scope;
14268       else if (object_type)
14269         type = object_type;
14270       else
14271         type = current_class_type;
14272       /* If that's not a class type, there is no destructor.  */
14273       if (!type || !CLASS_TYPE_P (type))
14274         return error_mark_node;
14275       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
14276         lazily_declare_fn (sfk_destructor, type);
14277       if (!CLASSTYPE_DESTRUCTORS (type))
14278           return error_mark_node;
14279       /* If it was a class type, return the destructor.  */
14280       return CLASSTYPE_DESTRUCTORS (type);
14281     }
14282
14283   /* By this point, the NAME should be an ordinary identifier.  If
14284      the id-expression was a qualified name, the qualifying scope is
14285      stored in PARSER->SCOPE at this point.  */
14286   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
14287
14288   /* Perform the lookup.  */
14289   if (parser->scope)
14290     {
14291       bool dependent_p;
14292
14293       if (parser->scope == error_mark_node)
14294         return error_mark_node;
14295
14296       /* If the SCOPE is dependent, the lookup must be deferred until
14297          the template is instantiated -- unless we are explicitly
14298          looking up names in uninstantiated templates.  Even then, we
14299          cannot look up the name if the scope is not a class type; it
14300          might, for example, be a template type parameter.  */
14301       dependent_p = (TYPE_P (parser->scope)
14302                      && !(parser->in_declarator_p
14303                           && currently_open_class (parser->scope))
14304                      && dependent_type_p (parser->scope));
14305       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
14306            && dependent_p)
14307         {
14308           if (tag_type)
14309             {
14310               tree type;
14311
14312               /* The resolution to Core Issue 180 says that `struct
14313                  A::B' should be considered a type-name, even if `A'
14314                  is dependent.  */
14315               type = make_typename_type (parser->scope, name, tag_type,
14316                                          /*complain=*/1);
14317               decl = TYPE_NAME (type);
14318             }
14319           else if (is_template)
14320             decl = make_unbound_class_template (parser->scope,
14321                                                 name, NULL_TREE,
14322                                                 /*complain=*/1);
14323           else
14324             decl = build_nt (SCOPE_REF, parser->scope, name);
14325         }
14326       else
14327         {
14328           tree pushed_scope = NULL_TREE;
14329
14330           /* If PARSER->SCOPE is a dependent type, then it must be a
14331              class type, and we must not be checking dependencies;
14332              otherwise, we would have processed this lookup above.  So
14333              that PARSER->SCOPE is not considered a dependent base by
14334              lookup_member, we must enter the scope here.  */
14335           if (dependent_p)
14336             pushed_scope = push_scope (parser->scope);
14337           /* If the PARSER->SCOPE is a template specialization, it
14338              may be instantiated during name lookup.  In that case,
14339              errors may be issued.  Even if we rollback the current
14340              tentative parse, those errors are valid.  */
14341           decl = lookup_qualified_name (parser->scope, name, 
14342                                         tag_type != none_type, 
14343                                         /*complain=*/true);
14344           if (pushed_scope)
14345             pop_scope (pushed_scope);
14346         }
14347       parser->qualifying_scope = parser->scope;
14348       parser->object_scope = NULL_TREE;
14349     }
14350   else if (object_type)
14351     {
14352       tree object_decl = NULL_TREE;
14353       /* Look up the name in the scope of the OBJECT_TYPE, unless the
14354          OBJECT_TYPE is not a class.  */
14355       if (CLASS_TYPE_P (object_type))
14356         /* If the OBJECT_TYPE is a template specialization, it may
14357            be instantiated during name lookup.  In that case, errors
14358            may be issued.  Even if we rollback the current tentative
14359            parse, those errors are valid.  */
14360         object_decl = lookup_member (object_type,
14361                                      name,
14362                                      /*protect=*/0, 
14363                                      tag_type != none_type);
14364       /* Look it up in the enclosing context, too.  */
14365       decl = lookup_name_real (name, tag_type != none_type, 
14366                                /*nonclass=*/0,
14367                                /*block_p=*/true, is_namespace,
14368                                /*flags=*/0);
14369       parser->object_scope = object_type;
14370       parser->qualifying_scope = NULL_TREE;
14371       if (object_decl)
14372         decl = object_decl;
14373     }
14374   else
14375     {
14376       decl = lookup_name_real (name, tag_type != none_type, 
14377                                /*nonclass=*/0,
14378                                /*block_p=*/true, is_namespace,
14379                                /*flags=*/0);
14380       parser->qualifying_scope = NULL_TREE;
14381       parser->object_scope = NULL_TREE;
14382     }
14383
14384   /* If the lookup failed, let our caller know.  */
14385   if (!decl
14386       || decl == error_mark_node
14387       || (TREE_CODE (decl) == FUNCTION_DECL
14388           && DECL_ANTICIPATED (decl)))
14389     return error_mark_node;
14390
14391   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
14392   if (TREE_CODE (decl) == TREE_LIST)
14393     {
14394       if (ambiguous_p)
14395         *ambiguous_p = true;
14396       /* The error message we have to print is too complicated for
14397          cp_parser_error, so we incorporate its actions directly.  */
14398       if (!cp_parser_simulate_error (parser))
14399         {
14400           error ("reference to %qD is ambiguous", name);
14401           print_candidates (decl);
14402         }
14403       return error_mark_node;
14404     }
14405
14406   gcc_assert (DECL_P (decl)
14407               || TREE_CODE (decl) == OVERLOAD
14408               || TREE_CODE (decl) == SCOPE_REF
14409               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
14410               || BASELINK_P (decl));
14411
14412   /* If we have resolved the name of a member declaration, check to
14413      see if the declaration is accessible.  When the name resolves to
14414      set of overloaded functions, accessibility is checked when
14415      overload resolution is done.
14416
14417      During an explicit instantiation, access is not checked at all,
14418      as per [temp.explicit].  */
14419   if (DECL_P (decl))
14420     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
14421
14422   return decl;
14423 }
14424
14425 /* Like cp_parser_lookup_name, but for use in the typical case where
14426    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
14427    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
14428
14429 static tree
14430 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
14431 {
14432   return cp_parser_lookup_name (parser, name,
14433                                 none_type,
14434                                 /*is_template=*/false,
14435                                 /*is_namespace=*/false,
14436                                 /*check_dependency=*/true,
14437                                 /*ambiguous_p=*/NULL);
14438 }
14439
14440 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
14441    the current context, return the TYPE_DECL.  If TAG_NAME_P is
14442    true, the DECL indicates the class being defined in a class-head,
14443    or declared in an elaborated-type-specifier.
14444
14445    Otherwise, return DECL.  */
14446
14447 static tree
14448 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
14449 {
14450   /* If the TEMPLATE_DECL is being declared as part of a class-head,
14451      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
14452
14453        struct A {
14454          template <typename T> struct B;
14455        };
14456
14457        template <typename T> struct A::B {};
14458
14459      Similarly, in a elaborated-type-specifier:
14460
14461        namespace N { struct X{}; }
14462
14463        struct A {
14464          template <typename T> friend struct N::X;
14465        };
14466
14467      However, if the DECL refers to a class type, and we are in
14468      the scope of the class, then the name lookup automatically
14469      finds the TYPE_DECL created by build_self_reference rather
14470      than a TEMPLATE_DECL.  For example, in:
14471
14472        template <class T> struct S {
14473          S s;
14474        };
14475
14476      there is no need to handle such case.  */
14477
14478   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
14479     return DECL_TEMPLATE_RESULT (decl);
14480
14481   return decl;
14482 }
14483
14484 /* If too many, or too few, template-parameter lists apply to the
14485    declarator, issue an error message.  Returns TRUE if all went well,
14486    and FALSE otherwise.  */
14487
14488 static bool
14489 cp_parser_check_declarator_template_parameters (cp_parser* parser,
14490                                                 cp_declarator *declarator)
14491 {
14492   unsigned num_templates;
14493
14494   /* We haven't seen any classes that involve template parameters yet.  */
14495   num_templates = 0;
14496
14497   switch (declarator->kind)
14498     {
14499     case cdk_id:
14500       if (declarator->u.id.qualifying_scope)
14501         {
14502           tree scope;
14503           tree member;
14504
14505           scope = declarator->u.id.qualifying_scope;
14506           member = declarator->u.id.unqualified_name;
14507
14508           while (scope && CLASS_TYPE_P (scope))
14509             {
14510               /* You're supposed to have one `template <...>'
14511                  for every template class, but you don't need one
14512                  for a full specialization.  For example:
14513
14514                  template <class T> struct S{};
14515                  template <> struct S<int> { void f(); };
14516                  void S<int>::f () {}
14517
14518                  is correct; there shouldn't be a `template <>' for
14519                  the definition of `S<int>::f'.  */
14520               if (CLASSTYPE_TEMPLATE_INFO (scope)
14521                   && (CLASSTYPE_TEMPLATE_INSTANTIATION (scope)
14522                       || uses_template_parms (CLASSTYPE_TI_ARGS (scope)))
14523                   && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
14524                 ++num_templates;
14525
14526               scope = TYPE_CONTEXT (scope);
14527             }
14528         }
14529       else if (TREE_CODE (declarator->u.id.unqualified_name) 
14530                == TEMPLATE_ID_EXPR)
14531         /* If the DECLARATOR has the form `X<y>' then it uses one
14532            additional level of template parameters.  */
14533         ++num_templates;
14534
14535       return cp_parser_check_template_parameters (parser,
14536                                                   num_templates);
14537
14538     case cdk_function:
14539     case cdk_array:
14540     case cdk_pointer:
14541     case cdk_reference:
14542     case cdk_ptrmem:
14543       return (cp_parser_check_declarator_template_parameters
14544               (parser, declarator->declarator));
14545
14546     case cdk_error:
14547       return true;
14548
14549     default:
14550       gcc_unreachable ();
14551     }
14552   return false;
14553 }
14554
14555 /* NUM_TEMPLATES were used in the current declaration.  If that is
14556    invalid, return FALSE and issue an error messages.  Otherwise,
14557    return TRUE.  */
14558
14559 static bool
14560 cp_parser_check_template_parameters (cp_parser* parser,
14561                                      unsigned num_templates)
14562 {
14563   /* If there are more template classes than parameter lists, we have
14564      something like:
14565
14566        template <class T> void S<T>::R<T>::f ();  */
14567   if (parser->num_template_parameter_lists < num_templates)
14568     {
14569       error ("too few template-parameter-lists");
14570       return false;
14571     }
14572   /* If there are the same number of template classes and parameter
14573      lists, that's OK.  */
14574   if (parser->num_template_parameter_lists == num_templates)
14575     return true;
14576   /* If there are more, but only one more, then we are referring to a
14577      member template.  That's OK too.  */
14578   if (parser->num_template_parameter_lists == num_templates + 1)
14579       return true;
14580   /* Otherwise, there are too many template parameter lists.  We have
14581      something like:
14582
14583      template <class T> template <class U> void S::f();  */
14584   error ("too many template-parameter-lists");
14585   return false;
14586 }
14587
14588 /* Parse an optional `::' token indicating that the following name is
14589    from the global namespace.  If so, PARSER->SCOPE is set to the
14590    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
14591    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
14592    Returns the new value of PARSER->SCOPE, if the `::' token is
14593    present, and NULL_TREE otherwise.  */
14594
14595 static tree
14596 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
14597 {
14598   cp_token *token;
14599
14600   /* Peek at the next token.  */
14601   token = cp_lexer_peek_token (parser->lexer);
14602   /* If we're looking at a `::' token then we're starting from the
14603      global namespace, not our current location.  */
14604   if (token->type == CPP_SCOPE)
14605     {
14606       /* Consume the `::' token.  */
14607       cp_lexer_consume_token (parser->lexer);
14608       /* Set the SCOPE so that we know where to start the lookup.  */
14609       parser->scope = global_namespace;
14610       parser->qualifying_scope = global_namespace;
14611       parser->object_scope = NULL_TREE;
14612
14613       return parser->scope;
14614     }
14615   else if (!current_scope_valid_p)
14616     {
14617       parser->scope = NULL_TREE;
14618       parser->qualifying_scope = NULL_TREE;
14619       parser->object_scope = NULL_TREE;
14620     }
14621
14622   return NULL_TREE;
14623 }
14624
14625 /* Returns TRUE if the upcoming token sequence is the start of a
14626    constructor declarator.  If FRIEND_P is true, the declarator is
14627    preceded by the `friend' specifier.  */
14628
14629 static bool
14630 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
14631 {
14632   bool constructor_p;
14633   tree type_decl = NULL_TREE;
14634   bool nested_name_p;
14635   cp_token *next_token;
14636
14637   /* The common case is that this is not a constructor declarator, so
14638      try to avoid doing lots of work if at all possible.  It's not
14639      valid declare a constructor at function scope.  */
14640   if (at_function_scope_p ())
14641     return false;
14642   /* And only certain tokens can begin a constructor declarator.  */
14643   next_token = cp_lexer_peek_token (parser->lexer);
14644   if (next_token->type != CPP_NAME
14645       && next_token->type != CPP_SCOPE
14646       && next_token->type != CPP_NESTED_NAME_SPECIFIER
14647       && next_token->type != CPP_TEMPLATE_ID)
14648     return false;
14649
14650   /* Parse tentatively; we are going to roll back all of the tokens
14651      consumed here.  */
14652   cp_parser_parse_tentatively (parser);
14653   /* Assume that we are looking at a constructor declarator.  */
14654   constructor_p = true;
14655
14656   /* Look for the optional `::' operator.  */
14657   cp_parser_global_scope_opt (parser,
14658                               /*current_scope_valid_p=*/false);
14659   /* Look for the nested-name-specifier.  */
14660   nested_name_p
14661     = (cp_parser_nested_name_specifier_opt (parser,
14662                                             /*typename_keyword_p=*/false,
14663                                             /*check_dependency_p=*/false,
14664                                             /*type_p=*/false,
14665                                             /*is_declaration=*/false)
14666        != NULL_TREE);
14667   /* Outside of a class-specifier, there must be a
14668      nested-name-specifier.  */
14669   if (!nested_name_p &&
14670       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
14671        || friend_p))
14672     constructor_p = false;
14673   /* If we still think that this might be a constructor-declarator,
14674      look for a class-name.  */
14675   if (constructor_p)
14676     {
14677       /* If we have:
14678
14679            template <typename T> struct S { S(); };
14680            template <typename T> S<T>::S ();
14681
14682          we must recognize that the nested `S' names a class.
14683          Similarly, for:
14684
14685            template <typename T> S<T>::S<T> ();
14686
14687          we must recognize that the nested `S' names a template.  */
14688       type_decl = cp_parser_class_name (parser,
14689                                         /*typename_keyword_p=*/false,
14690                                         /*template_keyword_p=*/false,
14691                                         none_type,
14692                                         /*check_dependency_p=*/false,
14693                                         /*class_head_p=*/false,
14694                                         /*is_declaration=*/false);
14695       /* If there was no class-name, then this is not a constructor.  */
14696       constructor_p = !cp_parser_error_occurred (parser);
14697     }
14698
14699   /* If we're still considering a constructor, we have to see a `(',
14700      to begin the parameter-declaration-clause, followed by either a
14701      `)', an `...', or a decl-specifier.  We need to check for a
14702      type-specifier to avoid being fooled into thinking that:
14703
14704        S::S (f) (int);
14705
14706      is a constructor.  (It is actually a function named `f' that
14707      takes one parameter (of type `int') and returns a value of type
14708      `S::S'.  */
14709   if (constructor_p
14710       && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
14711     {
14712       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
14713           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
14714           /* A parameter declaration begins with a decl-specifier,
14715              which is either the "attribute" keyword, a storage class
14716              specifier, or (usually) a type-specifier.  */
14717           && !cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE)
14718           && !cp_parser_storage_class_specifier_opt (parser))
14719         {
14720           tree type;
14721           tree pushed_scope = NULL_TREE;
14722           unsigned saved_num_template_parameter_lists;
14723
14724           /* Names appearing in the type-specifier should be looked up
14725              in the scope of the class.  */
14726           if (current_class_type)
14727             type = NULL_TREE;
14728           else
14729             {
14730               type = TREE_TYPE (type_decl);
14731               if (TREE_CODE (type) == TYPENAME_TYPE)
14732                 {
14733                   type = resolve_typename_type (type,
14734                                                 /*only_current_p=*/false);
14735                   if (type == error_mark_node)
14736                     {
14737                       cp_parser_abort_tentative_parse (parser);
14738                       return false;
14739                     }
14740                 }
14741               pushed_scope = push_scope (type);
14742             }
14743
14744           /* Inside the constructor parameter list, surrounding
14745              template-parameter-lists do not apply.  */
14746           saved_num_template_parameter_lists
14747             = parser->num_template_parameter_lists;
14748           parser->num_template_parameter_lists = 0;
14749
14750           /* Look for the type-specifier.  */
14751           cp_parser_type_specifier (parser,
14752                                     CP_PARSER_FLAGS_NONE,
14753                                     /*decl_specs=*/NULL,
14754                                     /*is_declarator=*/true,
14755                                     /*declares_class_or_enum=*/NULL,
14756                                     /*is_cv_qualifier=*/NULL);
14757
14758           parser->num_template_parameter_lists
14759             = saved_num_template_parameter_lists;
14760
14761           /* Leave the scope of the class.  */
14762           if (pushed_scope)
14763             pop_scope (pushed_scope);
14764
14765           constructor_p = !cp_parser_error_occurred (parser);
14766         }
14767     }
14768   else
14769     constructor_p = false;
14770   /* We did not really want to consume any tokens.  */
14771   cp_parser_abort_tentative_parse (parser);
14772
14773   return constructor_p;
14774 }
14775
14776 /* Parse the definition of the function given by the DECL_SPECIFIERS,
14777    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
14778    they must be performed once we are in the scope of the function.
14779
14780    Returns the function defined.  */
14781
14782 static tree
14783 cp_parser_function_definition_from_specifiers_and_declarator
14784   (cp_parser* parser,
14785    cp_decl_specifier_seq *decl_specifiers,
14786    tree attributes,
14787    const cp_declarator *declarator)
14788 {
14789   tree fn;
14790   bool success_p;
14791
14792   /* Begin the function-definition.  */
14793   success_p = start_function (decl_specifiers, declarator, attributes);
14794
14795   /* The things we're about to see are not directly qualified by any
14796      template headers we've seen thus far.  */
14797   reset_specialization ();
14798
14799   /* If there were names looked up in the decl-specifier-seq that we
14800      did not check, check them now.  We must wait until we are in the
14801      scope of the function to perform the checks, since the function
14802      might be a friend.  */
14803   perform_deferred_access_checks ();
14804
14805   if (!success_p)
14806     {
14807       /* Skip the entire function.  */
14808       error ("invalid function declaration");
14809       cp_parser_skip_to_end_of_block_or_statement (parser);
14810       fn = error_mark_node;
14811     }
14812   else
14813     fn = cp_parser_function_definition_after_declarator (parser,
14814                                                          /*inline_p=*/false);
14815
14816   return fn;
14817 }
14818
14819 /* Parse the part of a function-definition that follows the
14820    declarator.  INLINE_P is TRUE iff this function is an inline
14821    function defined with a class-specifier.
14822
14823    Returns the function defined.  */
14824
14825 static tree
14826 cp_parser_function_definition_after_declarator (cp_parser* parser,
14827                                                 bool inline_p)
14828 {
14829   tree fn;
14830   bool ctor_initializer_p = false;
14831   bool saved_in_unbraced_linkage_specification_p;
14832   unsigned saved_num_template_parameter_lists;
14833
14834   /* If the next token is `return', then the code may be trying to
14835      make use of the "named return value" extension that G++ used to
14836      support.  */
14837   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
14838     {
14839       /* Consume the `return' keyword.  */
14840       cp_lexer_consume_token (parser->lexer);
14841       /* Look for the identifier that indicates what value is to be
14842          returned.  */
14843       cp_parser_identifier (parser);
14844       /* Issue an error message.  */
14845       error ("named return values are no longer supported");
14846       /* Skip tokens until we reach the start of the function body.  */
14847       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
14848              && cp_lexer_next_token_is_not (parser->lexer, CPP_EOF))
14849         cp_lexer_consume_token (parser->lexer);
14850     }
14851   /* The `extern' in `extern "C" void f () { ... }' does not apply to
14852      anything declared inside `f'.  */
14853   saved_in_unbraced_linkage_specification_p
14854     = parser->in_unbraced_linkage_specification_p;
14855   parser->in_unbraced_linkage_specification_p = false;
14856   /* Inside the function, surrounding template-parameter-lists do not
14857      apply.  */
14858   saved_num_template_parameter_lists
14859     = parser->num_template_parameter_lists;
14860   parser->num_template_parameter_lists = 0;
14861   /* If the next token is `try', then we are looking at a
14862      function-try-block.  */
14863   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
14864     ctor_initializer_p = cp_parser_function_try_block (parser);
14865   /* A function-try-block includes the function-body, so we only do
14866      this next part if we're not processing a function-try-block.  */
14867   else
14868     ctor_initializer_p
14869       = cp_parser_ctor_initializer_opt_and_function_body (parser);
14870
14871   /* Finish the function.  */
14872   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
14873                         (inline_p ? 2 : 0));
14874   /* Generate code for it, if necessary.  */
14875   expand_or_defer_fn (fn);
14876   /* Restore the saved values.  */
14877   parser->in_unbraced_linkage_specification_p
14878     = saved_in_unbraced_linkage_specification_p;
14879   parser->num_template_parameter_lists
14880     = saved_num_template_parameter_lists;
14881
14882   return fn;
14883 }
14884
14885 /* Parse a template-declaration, assuming that the `export' (and
14886    `extern') keywords, if present, has already been scanned.  MEMBER_P
14887    is as for cp_parser_template_declaration.  */
14888
14889 static void
14890 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
14891 {
14892   tree decl = NULL_TREE;
14893   tree parameter_list;
14894   bool friend_p = false;
14895
14896   /* Look for the `template' keyword.  */
14897   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
14898     return;
14899
14900   /* And the `<'.  */
14901   if (!cp_parser_require (parser, CPP_LESS, "`<'"))
14902     return;
14903
14904   /* If the next token is `>', then we have an invalid
14905      specialization.  Rather than complain about an invalid template
14906      parameter, issue an error message here.  */
14907   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
14908     {
14909       cp_parser_error (parser, "invalid explicit specialization");
14910       begin_specialization ();
14911       parameter_list = NULL_TREE;
14912     }
14913   else
14914     {
14915       /* Parse the template parameters.  */
14916       begin_template_parm_list ();
14917       parameter_list = cp_parser_template_parameter_list (parser);
14918       parameter_list = end_template_parm_list (parameter_list);
14919     }
14920
14921   /* Look for the `>'.  */
14922   cp_parser_skip_until_found (parser, CPP_GREATER, "`>'");
14923   /* We just processed one more parameter list.  */
14924   ++parser->num_template_parameter_lists;
14925   /* If the next token is `template', there are more template
14926      parameters.  */
14927   if (cp_lexer_next_token_is_keyword (parser->lexer,
14928                                       RID_TEMPLATE))
14929     cp_parser_template_declaration_after_export (parser, member_p);
14930   else
14931     {
14932       /* There are no access checks when parsing a template, as we do not
14933          know if a specialization will be a friend.  */
14934       push_deferring_access_checks (dk_no_check);
14935
14936       decl = cp_parser_single_declaration (parser,
14937                                            member_p,
14938                                            &friend_p);
14939
14940       pop_deferring_access_checks ();
14941
14942       /* If this is a member template declaration, let the front
14943          end know.  */
14944       if (member_p && !friend_p && decl)
14945         {
14946           if (TREE_CODE (decl) == TYPE_DECL)
14947             cp_parser_check_access_in_redeclaration (decl);
14948
14949           decl = finish_member_template_decl (decl);
14950         }
14951       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
14952         make_friend_class (current_class_type, TREE_TYPE (decl),
14953                            /*complain=*/true);
14954     }
14955   /* We are done with the current parameter list.  */
14956   --parser->num_template_parameter_lists;
14957
14958   /* Finish up.  */
14959   finish_template_decl (parameter_list);
14960
14961   /* Register member declarations.  */
14962   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
14963     finish_member_declaration (decl);
14964
14965   /* If DECL is a function template, we must return to parse it later.
14966      (Even though there is no definition, there might be default
14967      arguments that need handling.)  */
14968   if (member_p && decl
14969       && (TREE_CODE (decl) == FUNCTION_DECL
14970           || DECL_FUNCTION_TEMPLATE_P (decl)))
14971     TREE_VALUE (parser->unparsed_functions_queues)
14972       = tree_cons (NULL_TREE, decl,
14973                    TREE_VALUE (parser->unparsed_functions_queues));
14974 }
14975
14976 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
14977    `function-definition' sequence.  MEMBER_P is true, this declaration
14978    appears in a class scope.
14979
14980    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
14981    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
14982
14983 static tree
14984 cp_parser_single_declaration (cp_parser* parser,
14985                               bool member_p,
14986                               bool* friend_p)
14987 {
14988   int declares_class_or_enum;
14989   tree decl = NULL_TREE;
14990   cp_decl_specifier_seq decl_specifiers;
14991   bool function_definition_p = false;
14992
14993   /* This function is only used when processing a template
14994      declaration.  */
14995   gcc_assert (innermost_scope_kind () == sk_template_parms
14996               || innermost_scope_kind () == sk_template_spec);
14997
14998   /* Defer access checks until we know what is being declared.  */
14999   push_deferring_access_checks (dk_deferred);
15000
15001   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
15002      alternative.  */
15003   cp_parser_decl_specifier_seq (parser,
15004                                 CP_PARSER_FLAGS_OPTIONAL,
15005                                 &decl_specifiers,
15006                                 &declares_class_or_enum);
15007   if (friend_p)
15008     *friend_p = cp_parser_friend_p (&decl_specifiers);
15009
15010   /* There are no template typedefs.  */
15011   if (decl_specifiers.specs[(int) ds_typedef])
15012     {
15013       error ("template declaration of %qs", "typedef");
15014       decl = error_mark_node;
15015     }
15016
15017   /* Gather up the access checks that occurred the
15018      decl-specifier-seq.  */
15019   stop_deferring_access_checks ();
15020
15021   /* Check for the declaration of a template class.  */
15022   if (declares_class_or_enum)
15023     {
15024       if (cp_parser_declares_only_class_p (parser))
15025         {
15026           decl = shadow_tag (&decl_specifiers);
15027
15028           /* In this case:
15029
15030                struct C {
15031                  friend template <typename T> struct A<T>::B;
15032                };
15033
15034              A<T>::B will be represented by a TYPENAME_TYPE, and
15035              therefore not recognized by shadow_tag.  */
15036           if (friend_p && *friend_p
15037               && !decl
15038               && decl_specifiers.type
15039               && TYPE_P (decl_specifiers.type))
15040             decl = decl_specifiers.type;
15041
15042           if (decl && decl != error_mark_node)
15043             decl = TYPE_NAME (decl);
15044           else
15045             decl = error_mark_node;
15046         }
15047     }
15048   /* If it's not a template class, try for a template function.  If
15049      the next token is a `;', then this declaration does not declare
15050      anything.  But, if there were errors in the decl-specifiers, then
15051      the error might well have come from an attempted class-specifier.
15052      In that case, there's no need to warn about a missing declarator.  */
15053   if (!decl
15054       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
15055           || decl_specifiers.type != error_mark_node))
15056     decl = cp_parser_init_declarator (parser,
15057                                       &decl_specifiers,
15058                                       /*function_definition_allowed_p=*/true,
15059                                       member_p,
15060                                       declares_class_or_enum,
15061                                       &function_definition_p);
15062
15063   pop_deferring_access_checks ();
15064
15065   /* Clear any current qualification; whatever comes next is the start
15066      of something new.  */
15067   parser->scope = NULL_TREE;
15068   parser->qualifying_scope = NULL_TREE;
15069   parser->object_scope = NULL_TREE;
15070   /* Look for a trailing `;' after the declaration.  */
15071   if (!function_definition_p
15072       && (decl == error_mark_node
15073           || !cp_parser_require (parser, CPP_SEMICOLON, "`;'")))
15074     cp_parser_skip_to_end_of_block_or_statement (parser);
15075
15076   return decl;
15077 }
15078
15079 /* Parse a cast-expression that is not the operand of a unary "&".  */
15080
15081 static tree
15082 cp_parser_simple_cast_expression (cp_parser *parser)
15083 {
15084   return cp_parser_cast_expression (parser, /*address_p=*/false,
15085                                     /*cast_p=*/false);
15086 }
15087
15088 /* Parse a functional cast to TYPE.  Returns an expression
15089    representing the cast.  */
15090
15091 static tree
15092 cp_parser_functional_cast (cp_parser* parser, tree type)
15093 {
15094   tree expression_list;
15095   tree cast;
15096
15097   expression_list
15098     = cp_parser_parenthesized_expression_list (parser, false,
15099                                                /*cast_p=*/true,
15100                                                /*non_constant_p=*/NULL);
15101
15102   cast = build_functional_cast (type, expression_list);
15103   /* [expr.const]/1: In an integral constant expression "only type
15104      conversions to integral or enumeration type can be used".  */
15105   if (cast != error_mark_node && !type_dependent_expression_p (type)
15106       && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (type)))
15107     {
15108       if (cp_parser_non_integral_constant_expression
15109           (parser, "a call to a constructor"))
15110         return error_mark_node;
15111     }
15112   return cast;
15113 }
15114
15115 /* Save the tokens that make up the body of a member function defined
15116    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
15117    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
15118    specifiers applied to the declaration.  Returns the FUNCTION_DECL
15119    for the member function.  */
15120
15121 static tree
15122 cp_parser_save_member_function_body (cp_parser* parser,
15123                                      cp_decl_specifier_seq *decl_specifiers,
15124                                      cp_declarator *declarator,
15125                                      tree attributes)
15126 {
15127   cp_token *first;
15128   cp_token *last;
15129   tree fn;
15130
15131   /* Create the function-declaration.  */
15132   fn = start_method (decl_specifiers, declarator, attributes);
15133   /* If something went badly wrong, bail out now.  */
15134   if (fn == error_mark_node)
15135     {
15136       /* If there's a function-body, skip it.  */
15137       if (cp_parser_token_starts_function_definition_p
15138           (cp_lexer_peek_token (parser->lexer)))
15139         cp_parser_skip_to_end_of_block_or_statement (parser);
15140       return error_mark_node;
15141     }
15142
15143   /* Remember it, if there default args to post process.  */
15144   cp_parser_save_default_args (parser, fn);
15145
15146   /* Save away the tokens that make up the body of the
15147      function.  */
15148   first = parser->lexer->next_token;
15149   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15150   /* Handle function try blocks.  */
15151   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
15152     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15153   last = parser->lexer->next_token;
15154
15155   /* Save away the inline definition; we will process it when the
15156      class is complete.  */
15157   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
15158   DECL_PENDING_INLINE_P (fn) = 1;
15159
15160   /* We need to know that this was defined in the class, so that
15161      friend templates are handled correctly.  */
15162   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
15163
15164   /* We're done with the inline definition.  */
15165   finish_method (fn);
15166
15167   /* Add FN to the queue of functions to be parsed later.  */
15168   TREE_VALUE (parser->unparsed_functions_queues)
15169     = tree_cons (NULL_TREE, fn,
15170                  TREE_VALUE (parser->unparsed_functions_queues));
15171
15172   return fn;
15173 }
15174
15175 /* Parse a template-argument-list, as well as the trailing ">" (but
15176    not the opening ">").  See cp_parser_template_argument_list for the
15177    return value.  */
15178
15179 static tree
15180 cp_parser_enclosed_template_argument_list (cp_parser* parser)
15181 {
15182   tree arguments;
15183   tree saved_scope;
15184   tree saved_qualifying_scope;
15185   tree saved_object_scope;
15186   bool saved_greater_than_is_operator_p;
15187
15188   /* [temp.names]
15189
15190      When parsing a template-id, the first non-nested `>' is taken as
15191      the end of the template-argument-list rather than a greater-than
15192      operator.  */
15193   saved_greater_than_is_operator_p
15194     = parser->greater_than_is_operator_p;
15195   parser->greater_than_is_operator_p = false;
15196   /* Parsing the argument list may modify SCOPE, so we save it
15197      here.  */
15198   saved_scope = parser->scope;
15199   saved_qualifying_scope = parser->qualifying_scope;
15200   saved_object_scope = parser->object_scope;
15201   /* Parse the template-argument-list itself.  */
15202   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15203     arguments = NULL_TREE;
15204   else
15205     arguments = cp_parser_template_argument_list (parser);
15206   /* Look for the `>' that ends the template-argument-list. If we find
15207      a '>>' instead, it's probably just a typo.  */
15208   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
15209     {
15210       if (!saved_greater_than_is_operator_p)
15211         {
15212           /* If we're in a nested template argument list, the '>>' has
15213             to be a typo for '> >'. We emit the error message, but we
15214             continue parsing and we push a '>' as next token, so that
15215             the argument list will be parsed correctly.  Note that the
15216             global source location is still on the token before the
15217             '>>', so we need to say explicitly where we want it.  */
15218           cp_token *token = cp_lexer_peek_token (parser->lexer);
15219           error ("%H%<>>%> should be %<> >%> "
15220                  "within a nested template argument list",
15221                  &token->location);
15222
15223           /* ??? Proper recovery should terminate two levels of
15224              template argument list here.  */
15225           token->type = CPP_GREATER;
15226         }
15227       else
15228         {
15229           /* If this is not a nested template argument list, the '>>'
15230             is a typo for '>'. Emit an error message and continue.
15231             Same deal about the token location, but here we can get it
15232             right by consuming the '>>' before issuing the diagnostic.  */
15233           cp_lexer_consume_token (parser->lexer);
15234           error ("spurious %<>>%>, use %<>%> to terminate "
15235                  "a template argument list");
15236         }
15237     }
15238   else if (!cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15239     error ("missing %<>%> to terminate the template argument list");
15240   else
15241     /* It's what we want, a '>'; consume it.  */
15242     cp_lexer_consume_token (parser->lexer);
15243   /* The `>' token might be a greater-than operator again now.  */
15244   parser->greater_than_is_operator_p
15245     = saved_greater_than_is_operator_p;
15246   /* Restore the SAVED_SCOPE.  */
15247   parser->scope = saved_scope;
15248   parser->qualifying_scope = saved_qualifying_scope;
15249   parser->object_scope = saved_object_scope;
15250
15251   return arguments;
15252 }
15253
15254 /* MEMBER_FUNCTION is a member function, or a friend.  If default
15255    arguments, or the body of the function have not yet been parsed,
15256    parse them now.  */
15257
15258 static void
15259 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
15260 {
15261   /* If this member is a template, get the underlying
15262      FUNCTION_DECL.  */
15263   if (DECL_FUNCTION_TEMPLATE_P (member_function))
15264     member_function = DECL_TEMPLATE_RESULT (member_function);
15265
15266   /* There should not be any class definitions in progress at this
15267      point; the bodies of members are only parsed outside of all class
15268      definitions.  */
15269   gcc_assert (parser->num_classes_being_defined == 0);
15270   /* While we're parsing the member functions we might encounter more
15271      classes.  We want to handle them right away, but we don't want
15272      them getting mixed up with functions that are currently in the
15273      queue.  */
15274   parser->unparsed_functions_queues
15275     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15276
15277   /* Make sure that any template parameters are in scope.  */
15278   maybe_begin_member_template_processing (member_function);
15279
15280   /* If the body of the function has not yet been parsed, parse it
15281      now.  */
15282   if (DECL_PENDING_INLINE_P (member_function))
15283     {
15284       tree function_scope;
15285       cp_token_cache *tokens;
15286
15287       /* The function is no longer pending; we are processing it.  */
15288       tokens = DECL_PENDING_INLINE_INFO (member_function);
15289       DECL_PENDING_INLINE_INFO (member_function) = NULL;
15290       DECL_PENDING_INLINE_P (member_function) = 0;
15291       
15292       /* If this is a local class, enter the scope of the containing
15293          function.  */
15294       function_scope = current_function_decl;
15295       if (function_scope)
15296         push_function_context_to (function_scope);
15297
15298       /* Push the body of the function onto the lexer stack.  */
15299       cp_parser_push_lexer_for_tokens (parser, tokens);
15300
15301       /* Let the front end know that we going to be defining this
15302          function.  */
15303       start_preparsed_function (member_function, NULL_TREE,
15304                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
15305
15306       /* Now, parse the body of the function.  */
15307       cp_parser_function_definition_after_declarator (parser,
15308                                                       /*inline_p=*/true);
15309
15310       /* Leave the scope of the containing function.  */
15311       if (function_scope)
15312         pop_function_context_from (function_scope);
15313       cp_parser_pop_lexer (parser);
15314     }
15315
15316   /* Remove any template parameters from the symbol table.  */
15317   maybe_end_member_template_processing ();
15318
15319   /* Restore the queue.  */
15320   parser->unparsed_functions_queues
15321     = TREE_CHAIN (parser->unparsed_functions_queues);
15322 }
15323
15324 /* If DECL contains any default args, remember it on the unparsed
15325    functions queue.  */
15326
15327 static void
15328 cp_parser_save_default_args (cp_parser* parser, tree decl)
15329 {
15330   tree probe;
15331
15332   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
15333        probe;
15334        probe = TREE_CHAIN (probe))
15335     if (TREE_PURPOSE (probe))
15336       {
15337         TREE_PURPOSE (parser->unparsed_functions_queues)
15338           = tree_cons (current_class_type, decl,
15339                        TREE_PURPOSE (parser->unparsed_functions_queues));
15340         break;
15341       }
15342   return;
15343 }
15344
15345 /* FN is a FUNCTION_DECL which may contains a parameter with an
15346    unparsed DEFAULT_ARG.  Parse the default args now.  This function
15347    assumes that the current scope is the scope in which the default
15348    argument should be processed.  */
15349
15350 static void
15351 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
15352 {
15353   bool saved_local_variables_forbidden_p;
15354   tree parm;
15355
15356   /* While we're parsing the default args, we might (due to the
15357      statement expression extension) encounter more classes.  We want
15358      to handle them right away, but we don't want them getting mixed
15359      up with default args that are currently in the queue.  */
15360   parser->unparsed_functions_queues
15361     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15362
15363   /* Local variable names (and the `this' keyword) may not appear
15364      in a default argument.  */
15365   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
15366   parser->local_variables_forbidden_p = true;
15367
15368   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
15369        parm;
15370        parm = TREE_CHAIN (parm))
15371     {
15372       cp_token_cache *tokens;
15373
15374       if (!TREE_PURPOSE (parm)
15375           || TREE_CODE (TREE_PURPOSE (parm)) != DEFAULT_ARG)
15376         continue;
15377
15378        /* Push the saved tokens for the default argument onto the parser's
15379           lexer stack.  */
15380       tokens = DEFARG_TOKENS (TREE_PURPOSE (parm));
15381       cp_parser_push_lexer_for_tokens (parser, tokens);
15382
15383       /* Parse the assignment-expression.  */
15384       TREE_PURPOSE (parm) = cp_parser_assignment_expression (parser,
15385                                                              /*cast_p=*/false);
15386
15387       /* If the token stream has not been completely used up, then
15388          there was extra junk after the end of the default
15389          argument.  */
15390       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
15391         cp_parser_error (parser, "expected %<,%>");
15392
15393       /* Revert to the main lexer.  */
15394       cp_parser_pop_lexer (parser);
15395     }
15396
15397   /* Restore the state of local_variables_forbidden_p.  */
15398   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
15399
15400   /* Restore the queue.  */
15401   parser->unparsed_functions_queues
15402     = TREE_CHAIN (parser->unparsed_functions_queues);
15403 }
15404
15405 /* Parse the operand of `sizeof' (or a similar operator).  Returns
15406    either a TYPE or an expression, depending on the form of the
15407    input.  The KEYWORD indicates which kind of expression we have
15408    encountered.  */
15409
15410 static tree
15411 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
15412 {
15413   static const char *format;
15414   tree expr = NULL_TREE;
15415   const char *saved_message;
15416   bool saved_integral_constant_expression_p;
15417   bool saved_non_integral_constant_expression_p;
15418
15419   /* Initialize FORMAT the first time we get here.  */
15420   if (!format)
15421     format = "types may not be defined in '%s' expressions";
15422
15423   /* Types cannot be defined in a `sizeof' expression.  Save away the
15424      old message.  */
15425   saved_message = parser->type_definition_forbidden_message;
15426   /* And create the new one.  */
15427   parser->type_definition_forbidden_message
15428     = xmalloc (strlen (format)
15429                + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
15430                + 1 /* `\0' */);
15431   sprintf ((char *) parser->type_definition_forbidden_message,
15432            format, IDENTIFIER_POINTER (ridpointers[keyword]));
15433
15434   /* The restrictions on constant-expressions do not apply inside
15435      sizeof expressions.  */
15436   saved_integral_constant_expression_p 
15437     = parser->integral_constant_expression_p;
15438   saved_non_integral_constant_expression_p
15439     = parser->non_integral_constant_expression_p;
15440   parser->integral_constant_expression_p = false;
15441
15442   /* Do not actually evaluate the expression.  */
15443   ++skip_evaluation;
15444   /* If it's a `(', then we might be looking at the type-id
15445      construction.  */
15446   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
15447     {
15448       tree type;
15449       bool saved_in_type_id_in_expr_p;
15450
15451       /* We can't be sure yet whether we're looking at a type-id or an
15452          expression.  */
15453       cp_parser_parse_tentatively (parser);
15454       /* Consume the `('.  */
15455       cp_lexer_consume_token (parser->lexer);
15456       /* Parse the type-id.  */
15457       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
15458       parser->in_type_id_in_expr_p = true;
15459       type = cp_parser_type_id (parser);
15460       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
15461       /* Now, look for the trailing `)'.  */
15462       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
15463       /* If all went well, then we're done.  */
15464       if (cp_parser_parse_definitely (parser))
15465         {
15466           cp_decl_specifier_seq decl_specs;
15467
15468           /* Build a trivial decl-specifier-seq.  */
15469           clear_decl_specs (&decl_specs);
15470           decl_specs.type = type;
15471
15472           /* Call grokdeclarator to figure out what type this is.  */
15473           expr = grokdeclarator (NULL,
15474                                  &decl_specs,
15475                                  TYPENAME,
15476                                  /*initialized=*/0,
15477                                  /*attrlist=*/NULL);
15478         }
15479     }
15480
15481   /* If the type-id production did not work out, then we must be
15482      looking at the unary-expression production.  */
15483   if (!expr)
15484     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
15485                                        /*cast_p=*/false);
15486   /* Go back to evaluating expressions.  */
15487   --skip_evaluation;
15488
15489   /* Free the message we created.  */
15490   free ((char *) parser->type_definition_forbidden_message);
15491   /* And restore the old one.  */
15492   parser->type_definition_forbidden_message = saved_message;
15493   parser->integral_constant_expression_p 
15494     = saved_integral_constant_expression_p;
15495   parser->non_integral_constant_expression_p
15496     = saved_non_integral_constant_expression_p;
15497
15498   return expr;
15499 }
15500
15501 /* If the current declaration has no declarator, return true.  */
15502
15503 static bool
15504 cp_parser_declares_only_class_p (cp_parser *parser)
15505 {
15506   /* If the next token is a `;' or a `,' then there is no
15507      declarator.  */
15508   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
15509           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
15510 }
15511
15512 /* Update the DECL_SPECS to reflect the STORAGE_CLASS.  */
15513
15514 static void
15515 cp_parser_set_storage_class (cp_decl_specifier_seq *decl_specs,
15516                              cp_storage_class storage_class)
15517 {
15518   if (decl_specs->storage_class != sc_none)
15519     decl_specs->multiple_storage_classes_p = true;
15520   else
15521     decl_specs->storage_class = storage_class;
15522 }
15523
15524 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
15525    is true, the type is a user-defined type; otherwise it is a
15526    built-in type specified by a keyword.  */
15527
15528 static void
15529 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
15530                               tree type_spec,
15531                               bool user_defined_p)
15532 {
15533   decl_specs->any_specifiers_p = true;
15534
15535   /* If the user tries to redeclare bool or wchar_t (with, for
15536      example, in "typedef int wchar_t;") we remember that this is what
15537      happened.  In system headers, we ignore these declarations so
15538      that G++ can work with system headers that are not C++-safe.  */
15539   if (decl_specs->specs[(int) ds_typedef]
15540       && !user_defined_p
15541       && (type_spec == boolean_type_node
15542           || type_spec == wchar_type_node)
15543       && (decl_specs->type
15544           || decl_specs->specs[(int) ds_long]
15545           || decl_specs->specs[(int) ds_short]
15546           || decl_specs->specs[(int) ds_unsigned]
15547           || decl_specs->specs[(int) ds_signed]))
15548     {
15549       decl_specs->redefined_builtin_type = type_spec;
15550       if (!decl_specs->type)
15551         {
15552           decl_specs->type = type_spec;
15553           decl_specs->user_defined_type_p = false;
15554         }
15555     }
15556   else if (decl_specs->type)
15557     decl_specs->multiple_types_p = true;
15558   else
15559     {
15560       decl_specs->type = type_spec;
15561       decl_specs->user_defined_type_p = user_defined_p;
15562       decl_specs->redefined_builtin_type = NULL_TREE;
15563     }
15564 }
15565
15566 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
15567    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
15568
15569 static bool
15570 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
15571 {
15572   return decl_specifiers->specs[(int) ds_friend] != 0;
15573 }
15574
15575 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
15576    issue an error message indicating that TOKEN_DESC was expected.
15577
15578    Returns the token consumed, if the token had the appropriate type.
15579    Otherwise, returns NULL.  */
15580
15581 static cp_token *
15582 cp_parser_require (cp_parser* parser,
15583                    enum cpp_ttype type,
15584                    const char* token_desc)
15585 {
15586   if (cp_lexer_next_token_is (parser->lexer, type))
15587     return cp_lexer_consume_token (parser->lexer);
15588   else
15589     {
15590       /* Output the MESSAGE -- unless we're parsing tentatively.  */
15591       if (!cp_parser_simulate_error (parser))
15592         {
15593           char *message = concat ("expected ", token_desc, NULL);
15594           cp_parser_error (parser, message);
15595           free (message);
15596         }
15597       return NULL;
15598     }
15599 }
15600
15601 /* Like cp_parser_require, except that tokens will be skipped until
15602    the desired token is found.  An error message is still produced if
15603    the next token is not as expected.  */
15604
15605 static void
15606 cp_parser_skip_until_found (cp_parser* parser,
15607                             enum cpp_ttype type,
15608                             const char* token_desc)
15609 {
15610   cp_token *token;
15611   unsigned nesting_depth = 0;
15612
15613   if (cp_parser_require (parser, type, token_desc))
15614     return;
15615
15616   /* Skip tokens until the desired token is found.  */
15617   while (true)
15618     {
15619       /* Peek at the next token.  */
15620       token = cp_lexer_peek_token (parser->lexer);
15621       /* If we've reached the token we want, consume it and
15622          stop.  */
15623       if (token->type == type && !nesting_depth)
15624         {
15625           cp_lexer_consume_token (parser->lexer);
15626           return;
15627         }
15628       /* If we've run out of tokens, stop.  */
15629       if (token->type == CPP_EOF)
15630         return;
15631       if (token->type == CPP_OPEN_BRACE
15632           || token->type == CPP_OPEN_PAREN
15633           || token->type == CPP_OPEN_SQUARE)
15634         ++nesting_depth;
15635       else if (token->type == CPP_CLOSE_BRACE
15636                || token->type == CPP_CLOSE_PAREN
15637                || token->type == CPP_CLOSE_SQUARE)
15638         {
15639           if (nesting_depth-- == 0)
15640             return;
15641         }
15642       /* Consume this token.  */
15643       cp_lexer_consume_token (parser->lexer);
15644     }
15645 }
15646
15647 /* If the next token is the indicated keyword, consume it.  Otherwise,
15648    issue an error message indicating that TOKEN_DESC was expected.
15649
15650    Returns the token consumed, if the token had the appropriate type.
15651    Otherwise, returns NULL.  */
15652
15653 static cp_token *
15654 cp_parser_require_keyword (cp_parser* parser,
15655                            enum rid keyword,
15656                            const char* token_desc)
15657 {
15658   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
15659
15660   if (token && token->keyword != keyword)
15661     {
15662       dyn_string_t error_msg;
15663
15664       /* Format the error message.  */
15665       error_msg = dyn_string_new (0);
15666       dyn_string_append_cstr (error_msg, "expected ");
15667       dyn_string_append_cstr (error_msg, token_desc);
15668       cp_parser_error (parser, error_msg->s);
15669       dyn_string_delete (error_msg);
15670       return NULL;
15671     }
15672
15673   return token;
15674 }
15675
15676 /* Returns TRUE iff TOKEN is a token that can begin the body of a
15677    function-definition.  */
15678
15679 static bool
15680 cp_parser_token_starts_function_definition_p (cp_token* token)
15681 {
15682   return (/* An ordinary function-body begins with an `{'.  */
15683           token->type == CPP_OPEN_BRACE
15684           /* A ctor-initializer begins with a `:'.  */
15685           || token->type == CPP_COLON
15686           /* A function-try-block begins with `try'.  */
15687           || token->keyword == RID_TRY
15688           /* The named return value extension begins with `return'.  */
15689           || token->keyword == RID_RETURN);
15690 }
15691
15692 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
15693    definition.  */
15694
15695 static bool
15696 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
15697 {
15698   cp_token *token;
15699
15700   token = cp_lexer_peek_token (parser->lexer);
15701   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
15702 }
15703
15704 /* Returns TRUE iff the next token is the "," or ">" ending a
15705    template-argument.  */
15706
15707 static bool
15708 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
15709 {
15710   cp_token *token;
15711
15712   token = cp_lexer_peek_token (parser->lexer);
15713   return (token->type == CPP_COMMA || token->type == CPP_GREATER);
15714 }
15715
15716 /* Returns TRUE iff the n-th token is a ">", or the n-th is a "[" and the
15717    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
15718
15719 static bool
15720 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
15721                                                      size_t n)
15722 {
15723   cp_token *token;
15724
15725   token = cp_lexer_peek_nth_token (parser->lexer, n);
15726   if (token->type == CPP_LESS)
15727     return true;
15728   /* Check for the sequence `<::' in the original code. It would be lexed as
15729      `[:', where `[' is a digraph, and there is no whitespace before
15730      `:'.  */
15731   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
15732     {
15733       cp_token *token2;
15734       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
15735       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
15736         return true;
15737     }
15738   return false;
15739 }
15740
15741 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
15742    or none_type otherwise.  */
15743
15744 static enum tag_types
15745 cp_parser_token_is_class_key (cp_token* token)
15746 {
15747   switch (token->keyword)
15748     {
15749     case RID_CLASS:
15750       return class_type;
15751     case RID_STRUCT:
15752       return record_type;
15753     case RID_UNION:
15754       return union_type;
15755
15756     default:
15757       return none_type;
15758     }
15759 }
15760
15761 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
15762
15763 static void
15764 cp_parser_check_class_key (enum tag_types class_key, tree type)
15765 {
15766   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
15767     pedwarn ("%qs tag used in naming %q#T",
15768             class_key == union_type ? "union"
15769              : class_key == record_type ? "struct" : "class",
15770              type);
15771 }
15772
15773 /* Issue an error message if DECL is redeclared with different
15774    access than its original declaration [class.access.spec/3].
15775    This applies to nested classes and nested class templates.
15776    [class.mem/1].  */
15777
15778 static void
15779 cp_parser_check_access_in_redeclaration (tree decl)
15780 {
15781   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
15782     return;
15783
15784   if ((TREE_PRIVATE (decl)
15785        != (current_access_specifier == access_private_node))
15786       || (TREE_PROTECTED (decl)
15787           != (current_access_specifier == access_protected_node)))
15788     error ("%qD redeclared with different access", decl);
15789 }
15790
15791 /* Look for the `template' keyword, as a syntactic disambiguator.
15792    Return TRUE iff it is present, in which case it will be
15793    consumed.  */
15794
15795 static bool
15796 cp_parser_optional_template_keyword (cp_parser *parser)
15797 {
15798   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
15799     {
15800       /* The `template' keyword can only be used within templates;
15801          outside templates the parser can always figure out what is a
15802          template and what is not.  */
15803       if (!processing_template_decl)
15804         {
15805           error ("%<template%> (as a disambiguator) is only allowed "
15806                  "within templates");
15807           /* If this part of the token stream is rescanned, the same
15808              error message would be generated.  So, we purge the token
15809              from the stream.  */
15810           cp_lexer_purge_token (parser->lexer);
15811           return false;
15812         }
15813       else
15814         {
15815           /* Consume the `template' keyword.  */
15816           cp_lexer_consume_token (parser->lexer);
15817           return true;
15818         }
15819     }
15820
15821   return false;
15822 }
15823
15824 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
15825    set PARSER->SCOPE, and perform other related actions.  */
15826
15827 static void
15828 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
15829 {
15830   tree value;
15831   tree check;
15832
15833   /* Get the stored value.  */
15834   value = cp_lexer_consume_token (parser->lexer)->value;
15835   /* Perform any access checks that were deferred.  */
15836   for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
15837     perform_or_defer_access_check (TREE_PURPOSE (check), TREE_VALUE (check));
15838   /* Set the scope from the stored value.  */
15839   parser->scope = TREE_VALUE (value);
15840   parser->qualifying_scope = TREE_TYPE (value);
15841   parser->object_scope = NULL_TREE;
15842 }
15843
15844 /* Consume tokens up through a non-nested END token.  */
15845
15846 static void
15847 cp_parser_cache_group (cp_parser *parser,
15848                        enum cpp_ttype end,
15849                        unsigned depth)
15850 {
15851   while (true)
15852     {
15853       cp_token *token;
15854
15855       /* Abort a parenthesized expression if we encounter a brace.  */
15856       if ((end == CPP_CLOSE_PAREN || depth == 0)
15857           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15858         return;
15859       /* If we've reached the end of the file, stop.  */
15860       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
15861         return;
15862       /* Consume the next token.  */
15863       token = cp_lexer_consume_token (parser->lexer);
15864       /* See if it starts a new group.  */
15865       if (token->type == CPP_OPEN_BRACE)
15866         {
15867           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
15868           if (depth == 0)
15869             return;
15870         }
15871       else if (token->type == CPP_OPEN_PAREN)
15872         cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
15873       else if (token->type == end)
15874         return;
15875     }
15876 }
15877
15878 /* Begin parsing tentatively.  We always save tokens while parsing
15879    tentatively so that if the tentative parsing fails we can restore the
15880    tokens.  */
15881
15882 static void
15883 cp_parser_parse_tentatively (cp_parser* parser)
15884 {
15885   /* Enter a new parsing context.  */
15886   parser->context = cp_parser_context_new (parser->context);
15887   /* Begin saving tokens.  */
15888   cp_lexer_save_tokens (parser->lexer);
15889   /* In order to avoid repetitive access control error messages,
15890      access checks are queued up until we are no longer parsing
15891      tentatively.  */
15892   push_deferring_access_checks (dk_deferred);
15893 }
15894
15895 /* Commit to the currently active tentative parse.  */
15896
15897 static void
15898 cp_parser_commit_to_tentative_parse (cp_parser* parser)
15899 {
15900   cp_parser_context *context;
15901   cp_lexer *lexer;
15902
15903   /* Mark all of the levels as committed.  */
15904   lexer = parser->lexer;
15905   for (context = parser->context; context->next; context = context->next)
15906     {
15907       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
15908         break;
15909       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
15910       while (!cp_lexer_saving_tokens (lexer))
15911         lexer = lexer->next;
15912       cp_lexer_commit_tokens (lexer);
15913     }
15914 }
15915
15916 /* Abort the currently active tentative parse.  All consumed tokens
15917    will be rolled back, and no diagnostics will be issued.  */
15918
15919 static void
15920 cp_parser_abort_tentative_parse (cp_parser* parser)
15921 {
15922   cp_parser_simulate_error (parser);
15923   /* Now, pretend that we want to see if the construct was
15924      successfully parsed.  */
15925   cp_parser_parse_definitely (parser);
15926 }
15927
15928 /* Stop parsing tentatively.  If a parse error has occurred, restore the
15929    token stream.  Otherwise, commit to the tokens we have consumed.
15930    Returns true if no error occurred; false otherwise.  */
15931
15932 static bool
15933 cp_parser_parse_definitely (cp_parser* parser)
15934 {
15935   bool error_occurred;
15936   cp_parser_context *context;
15937
15938   /* Remember whether or not an error occurred, since we are about to
15939      destroy that information.  */
15940   error_occurred = cp_parser_error_occurred (parser);
15941   /* Remove the topmost context from the stack.  */
15942   context = parser->context;
15943   parser->context = context->next;
15944   /* If no parse errors occurred, commit to the tentative parse.  */
15945   if (!error_occurred)
15946     {
15947       /* Commit to the tokens read tentatively, unless that was
15948          already done.  */
15949       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
15950         cp_lexer_commit_tokens (parser->lexer);
15951
15952       pop_to_parent_deferring_access_checks ();
15953     }
15954   /* Otherwise, if errors occurred, roll back our state so that things
15955      are just as they were before we began the tentative parse.  */
15956   else
15957     {
15958       cp_lexer_rollback_tokens (parser->lexer);
15959       pop_deferring_access_checks ();
15960     }
15961   /* Add the context to the front of the free list.  */
15962   context->next = cp_parser_context_free_list;
15963   cp_parser_context_free_list = context;
15964
15965   return !error_occurred;
15966 }
15967
15968 /* Returns true if we are parsing tentatively and are not committed to
15969    this tentative parse.  */
15970
15971 static bool
15972 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
15973 {
15974   return (cp_parser_parsing_tentatively (parser)
15975           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
15976 }
15977
15978 /* Returns nonzero iff an error has occurred during the most recent
15979    tentative parse.  */
15980
15981 static bool
15982 cp_parser_error_occurred (cp_parser* parser)
15983 {
15984   return (cp_parser_parsing_tentatively (parser)
15985           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
15986 }
15987
15988 /* Returns nonzero if GNU extensions are allowed.  */
15989
15990 static bool
15991 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
15992 {
15993   return parser->allow_gnu_extensions_p;
15994 }
15995
15996 \f
15997 /* The parser.  */
15998
15999 static GTY (()) cp_parser *the_parser;
16000
16001 /* External interface.  */
16002
16003 /* Parse one entire translation unit.  */
16004
16005 void
16006 c_parse_file (void)
16007 {
16008   bool error_occurred;
16009   static bool already_called = false;
16010
16011   if (already_called)
16012     {
16013       sorry ("inter-module optimizations not implemented for C++");
16014       return;
16015     }
16016   already_called = true;
16017
16018   the_parser = cp_parser_new ();
16019   push_deferring_access_checks (flag_access_control
16020                                 ? dk_no_deferred : dk_no_check);
16021   error_occurred = cp_parser_translation_unit (the_parser);
16022   the_parser = NULL;
16023 }
16024
16025 /* This variable must be provided by every front end.  */
16026
16027 int yydebug;
16028
16029 #include "gt-cp-parser.h"