]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/gcc/cp/parser.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / 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, 51 Franklin Street, Fifth Floor, Boston, MA
21    02110-1301, 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 #include "cgraph.h"
40 #include "c-common.h"
41
42 \f
43 /* The lexer.  */
44
45 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
46    and c-lex.c) and the C++ parser.  */
47
48 /* A token's value and its associated deferred access checks and
49    qualifying scope.  */
50
51 struct tree_check GTY(())
52 {
53   /* The value associated with the token.  */
54   tree value;
55   /* The checks that have been associated with value.  */
56   VEC (deferred_access_check, gc)* checks;
57   /* The token's qualifying scope (used when it is a
58      CPP_NESTED_NAME_SPECIFIER).  */
59   tree qualifying_scope;
60 };
61
62 /* A C++ token.  */
63
64 typedef struct cp_token GTY (())
65 {
66   /* The kind of token.  */
67   ENUM_BITFIELD (cpp_ttype) type : 8;
68   /* If this token is a keyword, this value indicates which keyword.
69      Otherwise, this value is RID_MAX.  */
70   ENUM_BITFIELD (rid) keyword : 8;
71   /* Token flags.  */
72   unsigned char flags;
73   /* Identifier for the pragma.  */
74   ENUM_BITFIELD (pragma_kind) pragma_kind : 6;
75   /* True if this token is from a system header.  */
76   BOOL_BITFIELD in_system_header : 1;
77   /* True if this token is from a context where it is implicitly extern "C" */
78   BOOL_BITFIELD implicit_extern_c : 1;
79   /* True for a CPP_NAME token that is not a keyword (i.e., for which
80      KEYWORD is RID_MAX) iff this name was looked up and found to be
81      ambiguous.  An error has already been reported.  */
82   BOOL_BITFIELD ambiguous_p : 1;
83   /* The input file stack index at which this token was found.  */
84   unsigned input_file_stack_index : INPUT_FILE_STACK_BITS;
85   /* The value associated with this token, if any.  */
86   union cp_token_value {
87     /* Used for CPP_NESTED_NAME_SPECIFIER and CPP_TEMPLATE_ID.  */
88     struct tree_check* GTY((tag ("1"))) tree_check_value;
89     /* Use for all other tokens.  */
90     tree GTY((tag ("0"))) value;
91   } GTY((desc ("(%1.type == CPP_TEMPLATE_ID) || (%1.type == CPP_NESTED_NAME_SPECIFIER)"))) u;
92   /* The location at which this token was found.  */
93   location_t location;
94 } cp_token;
95
96 /* We use a stack of token pointer for saving token sets.  */
97 typedef struct cp_token *cp_token_position;
98 DEF_VEC_P (cp_token_position);
99 DEF_VEC_ALLOC_P (cp_token_position,heap);
100
101 static const cp_token eof_token =
102 {
103   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, 0, 0, false, 0, { NULL },
104 #if USE_MAPPED_LOCATION
105   0
106 #else
107   {0, 0}
108 #endif
109 };
110
111 /* The cp_lexer structure represents the C++ lexer.  It is responsible
112    for managing the token stream from the preprocessor and supplying
113    it to the parser.  Tokens are never added to the cp_lexer after
114    it is created.  */
115
116 typedef struct cp_lexer GTY (())
117 {
118   /* The memory allocated for the buffer.  NULL if this lexer does not
119      own the token buffer.  */
120   cp_token * GTY ((length ("%h.buffer_length"))) buffer;
121   /* If the lexer owns the buffer, this is the number of tokens in the
122      buffer.  */
123   size_t buffer_length;
124
125   /* A pointer just past the last available token.  The tokens
126      in this lexer are [buffer, last_token).  */
127   cp_token_position GTY ((skip)) last_token;
128
129   /* The next available token.  If NEXT_TOKEN is &eof_token, then there are
130      no more available tokens.  */
131   cp_token_position GTY ((skip)) next_token;
132
133   /* A stack indicating positions at which cp_lexer_save_tokens was
134      called.  The top entry is the most recent position at which we
135      began saving tokens.  If the stack is non-empty, we are saving
136      tokens.  */
137   VEC(cp_token_position,heap) *GTY ((skip)) saved_tokens;
138
139   /* The next lexer in a linked list of lexers.  */
140   struct cp_lexer *next;
141
142   /* True if we should output debugging information.  */
143   bool debugging_p;
144
145   /* True if we're in the context of parsing a pragma, and should not
146      increment past the end-of-line marker.  */
147   bool in_pragma;
148 } cp_lexer;
149
150 /* cp_token_cache is a range of tokens.  There is no need to represent
151    allocate heap memory for it, since tokens are never removed from the
152    lexer's array.  There is also no need for the GC to walk through
153    a cp_token_cache, since everything in here is referenced through
154    a lexer.  */
155
156 typedef struct cp_token_cache GTY(())
157 {
158   /* The beginning of the token range.  */
159   cp_token * GTY((skip)) first;
160
161   /* Points immediately after the last token in the range.  */
162   cp_token * GTY ((skip)) last;
163 } cp_token_cache;
164
165 /* Prototypes.  */
166
167 static cp_lexer *cp_lexer_new_main
168   (void);
169 static cp_lexer *cp_lexer_new_from_tokens
170   (cp_token_cache *tokens);
171 static void cp_lexer_destroy
172   (cp_lexer *);
173 static int cp_lexer_saving_tokens
174   (const cp_lexer *);
175 static cp_token_position cp_lexer_token_position
176   (cp_lexer *, bool);
177 static cp_token *cp_lexer_token_at
178   (cp_lexer *, cp_token_position);
179 static void cp_lexer_get_preprocessor_token
180   (cp_lexer *, cp_token *);
181 static inline cp_token *cp_lexer_peek_token
182   (cp_lexer *);
183 static cp_token *cp_lexer_peek_nth_token
184   (cp_lexer *, size_t);
185 static inline bool cp_lexer_next_token_is
186   (cp_lexer *, enum cpp_ttype);
187 static bool cp_lexer_next_token_is_not
188   (cp_lexer *, enum cpp_ttype);
189 static bool cp_lexer_next_token_is_keyword
190   (cp_lexer *, enum rid);
191 static cp_token *cp_lexer_consume_token
192   (cp_lexer *);
193 static void cp_lexer_purge_token
194   (cp_lexer *);
195 static void cp_lexer_purge_tokens_after
196   (cp_lexer *, cp_token_position);
197 static void cp_lexer_save_tokens
198   (cp_lexer *);
199 static void cp_lexer_commit_tokens
200   (cp_lexer *);
201 static void cp_lexer_rollback_tokens
202   (cp_lexer *);
203 #ifdef ENABLE_CHECKING
204 static void cp_lexer_print_token
205   (FILE *, cp_token *);
206 static inline bool cp_lexer_debugging_p
207   (cp_lexer *);
208 static void cp_lexer_start_debugging
209   (cp_lexer *) ATTRIBUTE_UNUSED;
210 static void cp_lexer_stop_debugging
211   (cp_lexer *) ATTRIBUTE_UNUSED;
212 #else
213 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
214    about passing NULL to functions that require non-NULL arguments
215    (fputs, fprintf).  It will never be used, so all we need is a value
216    of the right type that's guaranteed not to be NULL.  */
217 #define cp_lexer_debug_stream stdout
218 #define cp_lexer_print_token(str, tok) (void) 0
219 #define cp_lexer_debugging_p(lexer) 0
220 #endif /* ENABLE_CHECKING */
221
222 static cp_token_cache *cp_token_cache_new
223   (cp_token *, cp_token *);
224
225 static void cp_parser_initial_pragma
226   (cp_token *);
227
228 /* Manifest constants.  */
229 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
230 #define CP_SAVED_TOKEN_STACK 5
231
232 /* A token type for keywords, as opposed to ordinary identifiers.  */
233 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
234
235 /* A token type for template-ids.  If a template-id is processed while
236    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
237    the value of the CPP_TEMPLATE_ID is whatever was returned by
238    cp_parser_template_id.  */
239 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
240
241 /* A token type for nested-name-specifiers.  If a
242    nested-name-specifier is processed while parsing tentatively, it is
243    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
244    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
245    cp_parser_nested_name_specifier_opt.  */
246 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
247
248 /* A token type for tokens that are not tokens at all; these are used
249    to represent slots in the array where there used to be a token
250    that has now been deleted.  */
251 #define CPP_PURGED ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
252
253 /* The number of token types, including C++-specific ones.  */
254 #define N_CP_TTYPES ((int) (CPP_PURGED + 1))
255
256 /* Variables.  */
257
258 #ifdef ENABLE_CHECKING
259 /* The stream to which debugging output should be written.  */
260 static FILE *cp_lexer_debug_stream;
261 #endif /* ENABLE_CHECKING */
262
263 /* Create a new main C++ lexer, the lexer that gets tokens from the
264    preprocessor.  */
265
266 static cp_lexer *
267 cp_lexer_new_main (void)
268 {
269   cp_token first_token;
270   cp_lexer *lexer;
271   cp_token *pos;
272   size_t alloc;
273   size_t space;
274   cp_token *buffer;
275
276   /* It's possible that parsing the first pragma will load a PCH file,
277      which is a GC collection point.  So we have to do that before
278      allocating any memory.  */
279   cp_parser_initial_pragma (&first_token);
280
281   /* Tell c_lex_with_flags not to merge string constants.  */
282   c_lex_return_raw_strings = true;
283
284   c_common_no_more_pch ();
285
286   /* Allocate the memory.  */
287   lexer = GGC_CNEW (cp_lexer);
288
289 #ifdef ENABLE_CHECKING
290   /* Initially we are not debugging.  */
291   lexer->debugging_p = false;
292 #endif /* ENABLE_CHECKING */
293   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
294                                    CP_SAVED_TOKEN_STACK);
295
296   /* Create the buffer.  */
297   alloc = CP_LEXER_BUFFER_SIZE;
298   buffer = GGC_NEWVEC (cp_token, alloc);
299
300   /* Put the first token in the buffer.  */
301   space = alloc;
302   pos = buffer;
303   *pos = first_token;
304
305   /* Get the remaining tokens from the preprocessor.  */
306   while (pos->type != CPP_EOF)
307     {
308       pos++;
309       if (!--space)
310         {
311           space = alloc;
312           alloc *= 2;
313           buffer = GGC_RESIZEVEC (cp_token, buffer, alloc);
314           pos = buffer + space;
315         }
316       cp_lexer_get_preprocessor_token (lexer, pos);
317     }
318   lexer->buffer = buffer;
319   lexer->buffer_length = alloc - space;
320   lexer->last_token = pos;
321   lexer->next_token = lexer->buffer_length ? buffer : (cp_token *)&eof_token;
322
323   /* Subsequent preprocessor diagnostics should use compiler
324      diagnostic functions to get the compiler source location.  */
325   cpp_get_options (parse_in)->client_diagnostic = true;
326   cpp_get_callbacks (parse_in)->error = cp_cpp_error;
327
328   gcc_assert (lexer->next_token->type != CPP_PURGED);
329   return lexer;
330 }
331
332 /* Create a new lexer whose token stream is primed with the tokens in
333    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
334
335 static cp_lexer *
336 cp_lexer_new_from_tokens (cp_token_cache *cache)
337 {
338   cp_token *first = cache->first;
339   cp_token *last = cache->last;
340   cp_lexer *lexer = GGC_CNEW (cp_lexer);
341
342   /* We do not own the buffer.  */
343   lexer->buffer = NULL;
344   lexer->buffer_length = 0;
345   lexer->next_token = first == last ? (cp_token *)&eof_token : first;
346   lexer->last_token = last;
347
348   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
349                                    CP_SAVED_TOKEN_STACK);
350
351 #ifdef ENABLE_CHECKING
352   /* Initially we are not debugging.  */
353   lexer->debugging_p = false;
354 #endif
355
356   gcc_assert (lexer->next_token->type != CPP_PURGED);
357   return lexer;
358 }
359
360 /* Frees all resources associated with LEXER.  */
361
362 static void
363 cp_lexer_destroy (cp_lexer *lexer)
364 {
365   if (lexer->buffer)
366     ggc_free (lexer->buffer);
367   VEC_free (cp_token_position, heap, lexer->saved_tokens);
368   ggc_free (lexer);
369 }
370
371 /* Returns nonzero if debugging information should be output.  */
372
373 #ifdef ENABLE_CHECKING
374
375 static inline bool
376 cp_lexer_debugging_p (cp_lexer *lexer)
377 {
378   return lexer->debugging_p;
379 }
380
381 #endif /* ENABLE_CHECKING */
382
383 static inline cp_token_position
384 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
385 {
386   gcc_assert (!previous_p || lexer->next_token != &eof_token);
387
388   return lexer->next_token - previous_p;
389 }
390
391 static inline cp_token *
392 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
393 {
394   return pos;
395 }
396
397 /* nonzero if we are presently saving tokens.  */
398
399 static inline int
400 cp_lexer_saving_tokens (const cp_lexer* lexer)
401 {
402   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
403 }
404
405 /* Store the next token from the preprocessor in *TOKEN.  Return true
406    if we reach EOF.  */
407
408 static void
409 cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
410                                  cp_token *token)
411 {
412   static int is_extern_c = 0;
413
414    /* Get a new token from the preprocessor.  */
415   token->type
416     = c_lex_with_flags (&token->u.value, &token->location, &token->flags);
417   token->input_file_stack_index = input_file_stack_tick;
418   token->keyword = RID_MAX;
419   token->pragma_kind = PRAGMA_NONE;
420   token->in_system_header = in_system_header;
421
422   /* On some systems, some header files are surrounded by an
423      implicit extern "C" block.  Set a flag in the token if it
424      comes from such a header.  */
425   is_extern_c += pending_lang_change;
426   pending_lang_change = 0;
427   token->implicit_extern_c = is_extern_c > 0;
428
429   /* Check to see if this token is a keyword.  */
430   if (token->type == CPP_NAME)
431     {
432       if (C_IS_RESERVED_WORD (token->u.value))
433         {
434           /* Mark this token as a keyword.  */
435           token->type = CPP_KEYWORD;
436           /* Record which keyword.  */
437           token->keyword = C_RID_CODE (token->u.value);
438           /* Update the value.  Some keywords are mapped to particular
439              entities, rather than simply having the value of the
440              corresponding IDENTIFIER_NODE.  For example, `__const' is
441              mapped to `const'.  */
442           token->u.value = ridpointers[token->keyword];
443         }
444       else
445         {
446           token->ambiguous_p = false;
447           token->keyword = RID_MAX;
448         }
449     }
450   /* Handle Objective-C++ keywords.  */
451   else if (token->type == CPP_AT_NAME)
452     {
453       token->type = CPP_KEYWORD;
454       switch (C_RID_CODE (token->u.value))
455         {
456         /* Map 'class' to '@class', 'private' to '@private', etc.  */
457         case RID_CLASS: token->keyword = RID_AT_CLASS; break;
458         case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
459         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
460         case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
461         case RID_THROW: token->keyword = RID_AT_THROW; break;
462         case RID_TRY: token->keyword = RID_AT_TRY; break;
463         case RID_CATCH: token->keyword = RID_AT_CATCH; break;
464         default: token->keyword = C_RID_CODE (token->u.value);
465         }
466     }
467   else if (token->type == CPP_PRAGMA)
468     {
469       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
470       token->pragma_kind = TREE_INT_CST_LOW (token->u.value);
471       token->u.value = NULL_TREE;
472     }
473 }
474
475 /* Update the globals input_location and in_system_header and the
476    input file stack from TOKEN.  */
477 static inline void
478 cp_lexer_set_source_position_from_token (cp_token *token)
479 {
480   if (token->type != CPP_EOF)
481     {
482       input_location = token->location;
483       in_system_header = token->in_system_header;
484       restore_input_file_stack (token->input_file_stack_index);
485     }
486 }
487
488 /* Return a pointer to the next token in the token stream, but do not
489    consume it.  */
490
491 static inline cp_token *
492 cp_lexer_peek_token (cp_lexer *lexer)
493 {
494   if (cp_lexer_debugging_p (lexer))
495     {
496       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
497       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
498       putc ('\n', cp_lexer_debug_stream);
499     }
500   return lexer->next_token;
501 }
502
503 /* Return true if the next token has the indicated TYPE.  */
504
505 static inline bool
506 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
507 {
508   return cp_lexer_peek_token (lexer)->type == type;
509 }
510
511 /* Return true if the next token does not have the indicated TYPE.  */
512
513 static inline bool
514 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
515 {
516   return !cp_lexer_next_token_is (lexer, type);
517 }
518
519 /* Return true if the next token is the indicated KEYWORD.  */
520
521 static inline bool
522 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
523 {
524   return cp_lexer_peek_token (lexer)->keyword == keyword;
525 }
526
527 /* Return true if the next token is a keyword for a decl-specifier.  */
528
529 static bool
530 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
531 {
532   cp_token *token;
533
534   token = cp_lexer_peek_token (lexer);
535   switch (token->keyword) 
536     {
537       /* Storage classes.  */
538     case RID_AUTO:
539     case RID_REGISTER:
540     case RID_STATIC:
541     case RID_EXTERN:
542     case RID_MUTABLE:
543     case RID_THREAD:
544       /* Elaborated type specifiers.  */
545     case RID_ENUM:
546     case RID_CLASS:
547     case RID_STRUCT:
548     case RID_UNION:
549     case RID_TYPENAME:
550       /* Simple type specifiers.  */
551     case RID_CHAR:
552     case RID_WCHAR:
553     case RID_BOOL:
554     case RID_SHORT:
555     case RID_INT:
556     case RID_LONG:
557     case RID_SIGNED:
558     case RID_UNSIGNED:
559     case RID_FLOAT:
560     case RID_DOUBLE:
561     case RID_VOID:
562       /* GNU extensions.  */ 
563     case RID_ATTRIBUTE:
564     case RID_TYPEOF:
565       return true;
566
567     default:
568       return false;
569     }
570 }
571
572 /* Return a pointer to the Nth token in the token stream.  If N is 1,
573    then this is precisely equivalent to cp_lexer_peek_token (except
574    that it is not inline).  One would like to disallow that case, but
575    there is one case (cp_parser_nth_token_starts_template_id) where
576    the caller passes a variable for N and it might be 1.  */
577
578 static cp_token *
579 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
580 {
581   cp_token *token;
582
583   /* N is 1-based, not zero-based.  */
584   gcc_assert (n > 0);
585
586   if (cp_lexer_debugging_p (lexer))
587     fprintf (cp_lexer_debug_stream,
588              "cp_lexer: peeking ahead %ld at token: ", (long)n);
589
590   --n;
591   token = lexer->next_token;
592   gcc_assert (!n || token != &eof_token);
593   while (n != 0)
594     {
595       ++token;
596       if (token == lexer->last_token)
597         {
598           token = (cp_token *)&eof_token;
599           break;
600         }
601
602       if (token->type != CPP_PURGED)
603         --n;
604     }
605
606   if (cp_lexer_debugging_p (lexer))
607     {
608       cp_lexer_print_token (cp_lexer_debug_stream, token);
609       putc ('\n', cp_lexer_debug_stream);
610     }
611
612   return token;
613 }
614
615 /* Return the next token, and advance the lexer's next_token pointer
616    to point to the next non-purged token.  */
617
618 static cp_token *
619 cp_lexer_consume_token (cp_lexer* lexer)
620 {
621   cp_token *token = lexer->next_token;
622
623   gcc_assert (token != &eof_token);
624   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
625
626   do
627     {
628       lexer->next_token++;
629       if (lexer->next_token == lexer->last_token)
630         {
631           lexer->next_token = (cp_token *)&eof_token;
632           break;
633         }
634
635     }
636   while (lexer->next_token->type == CPP_PURGED);
637
638   cp_lexer_set_source_position_from_token (token);
639
640   /* Provide debugging output.  */
641   if (cp_lexer_debugging_p (lexer))
642     {
643       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
644       cp_lexer_print_token (cp_lexer_debug_stream, token);
645       putc ('\n', cp_lexer_debug_stream);
646     }
647
648   return token;
649 }
650
651 /* Permanently remove the next token from the token stream, and
652    advance the next_token pointer to refer to the next non-purged
653    token.  */
654
655 static void
656 cp_lexer_purge_token (cp_lexer *lexer)
657 {
658   cp_token *tok = lexer->next_token;
659
660   gcc_assert (tok != &eof_token);
661   tok->type = CPP_PURGED;
662   tok->location = UNKNOWN_LOCATION;
663   tok->u.value = NULL_TREE;
664   tok->keyword = RID_MAX;
665
666   do
667     {
668       tok++;
669       if (tok == lexer->last_token)
670         {
671           tok = (cp_token *)&eof_token;
672           break;
673         }
674     }
675   while (tok->type == CPP_PURGED);
676   lexer->next_token = tok;
677 }
678
679 /* Permanently remove all tokens after TOK, up to, but not
680    including, the token that will be returned next by
681    cp_lexer_peek_token.  */
682
683 static void
684 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
685 {
686   cp_token *peek = lexer->next_token;
687
688   if (peek == &eof_token)
689     peek = lexer->last_token;
690
691   gcc_assert (tok < peek);
692
693   for ( tok += 1; tok != peek; tok += 1)
694     {
695       tok->type = CPP_PURGED;
696       tok->location = UNKNOWN_LOCATION;
697       tok->u.value = NULL_TREE;
698       tok->keyword = RID_MAX;
699     }
700 }
701
702 /* Begin saving tokens.  All tokens consumed after this point will be
703    preserved.  */
704
705 static void
706 cp_lexer_save_tokens (cp_lexer* lexer)
707 {
708   /* Provide debugging output.  */
709   if (cp_lexer_debugging_p (lexer))
710     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
711
712   VEC_safe_push (cp_token_position, heap,
713                  lexer->saved_tokens, lexer->next_token);
714 }
715
716 /* Commit to the portion of the token stream most recently saved.  */
717
718 static void
719 cp_lexer_commit_tokens (cp_lexer* lexer)
720 {
721   /* Provide debugging output.  */
722   if (cp_lexer_debugging_p (lexer))
723     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
724
725   VEC_pop (cp_token_position, lexer->saved_tokens);
726 }
727
728 /* Return all tokens saved since the last call to cp_lexer_save_tokens
729    to the token stream.  Stop saving tokens.  */
730
731 static void
732 cp_lexer_rollback_tokens (cp_lexer* lexer)
733 {
734   /* Provide debugging output.  */
735   if (cp_lexer_debugging_p (lexer))
736     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
737
738   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
739 }
740
741 /* Print a representation of the TOKEN on the STREAM.  */
742
743 #ifdef ENABLE_CHECKING
744
745 static void
746 cp_lexer_print_token (FILE * stream, cp_token *token)
747 {
748   /* We don't use cpp_type2name here because the parser defines
749      a few tokens of its own.  */
750   static const char *const token_names[] = {
751     /* cpplib-defined token types */
752 #define OP(e, s) #e,
753 #define TK(e, s) #e,
754     TTYPE_TABLE
755 #undef OP
756 #undef TK
757     /* C++ parser token types - see "Manifest constants", above.  */
758     "KEYWORD",
759     "TEMPLATE_ID",
760     "NESTED_NAME_SPECIFIER",
761     "PURGED"
762   };
763
764   /* If we have a name for the token, print it out.  Otherwise, we
765      simply give the numeric code.  */
766   gcc_assert (token->type < ARRAY_SIZE(token_names));
767   fputs (token_names[token->type], stream);
768
769   /* For some tokens, print the associated data.  */
770   switch (token->type)
771     {
772     case CPP_KEYWORD:
773       /* Some keywords have a value that is not an IDENTIFIER_NODE.
774          For example, `struct' is mapped to an INTEGER_CST.  */
775       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
776         break;
777       /* else fall through */
778     case CPP_NAME:
779       fputs (IDENTIFIER_POINTER (token->u.value), stream);
780       break;
781
782     case CPP_STRING:
783     case CPP_WSTRING:
784       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
785       break;
786
787     default:
788       break;
789     }
790 }
791
792 /* Start emitting debugging information.  */
793
794 static void
795 cp_lexer_start_debugging (cp_lexer* lexer)
796 {
797   lexer->debugging_p = true;
798 }
799
800 /* Stop emitting debugging information.  */
801
802 static void
803 cp_lexer_stop_debugging (cp_lexer* lexer)
804 {
805   lexer->debugging_p = false;
806 }
807
808 #endif /* ENABLE_CHECKING */
809
810 /* Create a new cp_token_cache, representing a range of tokens.  */
811
812 static cp_token_cache *
813 cp_token_cache_new (cp_token *first, cp_token *last)
814 {
815   cp_token_cache *cache = GGC_NEW (cp_token_cache);
816   cache->first = first;
817   cache->last = last;
818   return cache;
819 }
820
821 \f
822 /* Decl-specifiers.  */
823
824 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
825
826 static void
827 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
828 {
829   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
830 }
831
832 /* Declarators.  */
833
834 /* Nothing other than the parser should be creating declarators;
835    declarators are a semi-syntactic representation of C++ entities.
836    Other parts of the front end that need to create entities (like
837    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
838
839 static cp_declarator *make_call_declarator
840   (cp_declarator *, cp_parameter_declarator *, cp_cv_quals, tree);
841 static cp_declarator *make_array_declarator
842   (cp_declarator *, tree);
843 static cp_declarator *make_pointer_declarator
844   (cp_cv_quals, cp_declarator *);
845 static cp_declarator *make_reference_declarator
846   (cp_cv_quals, cp_declarator *);
847 static cp_parameter_declarator *make_parameter_declarator
848   (cp_decl_specifier_seq *, cp_declarator *, tree);
849 static cp_declarator *make_ptrmem_declarator
850   (cp_cv_quals, tree, cp_declarator *);
851
852 /* An erroneous declarator.  */
853 static cp_declarator *cp_error_declarator;
854
855 /* The obstack on which declarators and related data structures are
856    allocated.  */
857 static struct obstack declarator_obstack;
858
859 /* Alloc BYTES from the declarator memory pool.  */
860
861 static inline void *
862 alloc_declarator (size_t bytes)
863 {
864   return obstack_alloc (&declarator_obstack, bytes);
865 }
866
867 /* Allocate a declarator of the indicated KIND.  Clear fields that are
868    common to all declarators.  */
869
870 static cp_declarator *
871 make_declarator (cp_declarator_kind kind)
872 {
873   cp_declarator *declarator;
874
875   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
876   declarator->kind = kind;
877   declarator->attributes = NULL_TREE;
878   declarator->declarator = NULL;
879
880   return declarator;
881 }
882
883 /* Make a declarator for a generalized identifier.  If
884    QUALIFYING_SCOPE is non-NULL, the identifier is
885    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
886    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
887    is, if any.   */
888
889 static cp_declarator *
890 make_id_declarator (tree qualifying_scope, tree unqualified_name,
891                     special_function_kind sfk)
892 {
893   cp_declarator *declarator;
894
895   /* It is valid to write:
896
897        class C { void f(); };
898        typedef C D;
899        void D::f();
900
901      The standard is not clear about whether `typedef const C D' is
902      legal; as of 2002-09-15 the committee is considering that
903      question.  EDG 3.0 allows that syntax.  Therefore, we do as
904      well.  */
905   if (qualifying_scope && TYPE_P (qualifying_scope))
906     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
907
908   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
909               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
910               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
911
912   declarator = make_declarator (cdk_id);
913   declarator->u.id.qualifying_scope = qualifying_scope;
914   declarator->u.id.unqualified_name = unqualified_name;
915   declarator->u.id.sfk = sfk;
916
917   return declarator;
918 }
919
920 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
921    of modifiers such as const or volatile to apply to the pointer
922    type, represented as identifiers.  */
923
924 cp_declarator *
925 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
926 {
927   cp_declarator *declarator;
928
929   declarator = make_declarator (cdk_pointer);
930   declarator->declarator = target;
931   declarator->u.pointer.qualifiers = cv_qualifiers;
932   declarator->u.pointer.class_type = NULL_TREE;
933
934   return declarator;
935 }
936
937 /* Like make_pointer_declarator -- but for references.  */
938
939 cp_declarator *
940 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
941 {
942   cp_declarator *declarator;
943
944   declarator = make_declarator (cdk_reference);
945   declarator->declarator = target;
946   declarator->u.pointer.qualifiers = cv_qualifiers;
947   declarator->u.pointer.class_type = NULL_TREE;
948
949   return declarator;
950 }
951
952 /* Like make_pointer_declarator -- but for a pointer to a non-static
953    member of CLASS_TYPE.  */
954
955 cp_declarator *
956 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
957                         cp_declarator *pointee)
958 {
959   cp_declarator *declarator;
960
961   declarator = make_declarator (cdk_ptrmem);
962   declarator->declarator = pointee;
963   declarator->u.pointer.qualifiers = cv_qualifiers;
964   declarator->u.pointer.class_type = class_type;
965
966   return declarator;
967 }
968
969 /* Make a declarator for the function given by TARGET, with the
970    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
971    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
972    indicates what exceptions can be thrown.  */
973
974 cp_declarator *
975 make_call_declarator (cp_declarator *target,
976                       cp_parameter_declarator *parms,
977                       cp_cv_quals cv_qualifiers,
978                       tree exception_specification)
979 {
980   cp_declarator *declarator;
981
982   declarator = make_declarator (cdk_function);
983   declarator->declarator = target;
984   declarator->u.function.parameters = parms;
985   declarator->u.function.qualifiers = cv_qualifiers;
986   declarator->u.function.exception_specification = exception_specification;
987
988   return declarator;
989 }
990
991 /* Make a declarator for an array of BOUNDS elements, each of which is
992    defined by ELEMENT.  */
993
994 cp_declarator *
995 make_array_declarator (cp_declarator *element, tree bounds)
996 {
997   cp_declarator *declarator;
998
999   declarator = make_declarator (cdk_array);
1000   declarator->declarator = element;
1001   declarator->u.array.bounds = bounds;
1002
1003   return declarator;
1004 }
1005
1006 cp_parameter_declarator *no_parameters;
1007
1008 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1009    DECLARATOR and DEFAULT_ARGUMENT.  */
1010
1011 cp_parameter_declarator *
1012 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1013                            cp_declarator *declarator,
1014                            tree default_argument)
1015 {
1016   cp_parameter_declarator *parameter;
1017
1018   parameter = ((cp_parameter_declarator *)
1019                alloc_declarator (sizeof (cp_parameter_declarator)));
1020   parameter->next = NULL;
1021   if (decl_specifiers)
1022     parameter->decl_specifiers = *decl_specifiers;
1023   else
1024     clear_decl_specs (&parameter->decl_specifiers);
1025   parameter->declarator = declarator;
1026   parameter->default_argument = default_argument;
1027   parameter->ellipsis_p = false;
1028
1029   return parameter;
1030 }
1031
1032 /* Returns true iff DECLARATOR  is a declaration for a function.  */
1033
1034 static bool
1035 function_declarator_p (const cp_declarator *declarator)
1036 {
1037   while (declarator)
1038     {
1039       if (declarator->kind == cdk_function
1040           && declarator->declarator->kind == cdk_id)
1041         return true;
1042       if (declarator->kind == cdk_id
1043           || declarator->kind == cdk_error)
1044         return false;
1045       declarator = declarator->declarator;
1046     }
1047   return false;
1048 }
1049  
1050 /* The parser.  */
1051
1052 /* Overview
1053    --------
1054
1055    A cp_parser parses the token stream as specified by the C++
1056    grammar.  Its job is purely parsing, not semantic analysis.  For
1057    example, the parser breaks the token stream into declarators,
1058    expressions, statements, and other similar syntactic constructs.
1059    It does not check that the types of the expressions on either side
1060    of an assignment-statement are compatible, or that a function is
1061    not declared with a parameter of type `void'.
1062
1063    The parser invokes routines elsewhere in the compiler to perform
1064    semantic analysis and to build up the abstract syntax tree for the
1065    code processed.
1066
1067    The parser (and the template instantiation code, which is, in a
1068    way, a close relative of parsing) are the only parts of the
1069    compiler that should be calling push_scope and pop_scope, or
1070    related functions.  The parser (and template instantiation code)
1071    keeps track of what scope is presently active; everything else
1072    should simply honor that.  (The code that generates static
1073    initializers may also need to set the scope, in order to check
1074    access control correctly when emitting the initializers.)
1075
1076    Methodology
1077    -----------
1078
1079    The parser is of the standard recursive-descent variety.  Upcoming
1080    tokens in the token stream are examined in order to determine which
1081    production to use when parsing a non-terminal.  Some C++ constructs
1082    require arbitrary look ahead to disambiguate.  For example, it is
1083    impossible, in the general case, to tell whether a statement is an
1084    expression or declaration without scanning the entire statement.
1085    Therefore, the parser is capable of "parsing tentatively."  When the
1086    parser is not sure what construct comes next, it enters this mode.
1087    Then, while we attempt to parse the construct, the parser queues up
1088    error messages, rather than issuing them immediately, and saves the
1089    tokens it consumes.  If the construct is parsed successfully, the
1090    parser "commits", i.e., it issues any queued error messages and
1091    the tokens that were being preserved are permanently discarded.
1092    If, however, the construct is not parsed successfully, the parser
1093    rolls back its state completely so that it can resume parsing using
1094    a different alternative.
1095
1096    Future Improvements
1097    -------------------
1098
1099    The performance of the parser could probably be improved substantially.
1100    We could often eliminate the need to parse tentatively by looking ahead
1101    a little bit.  In some places, this approach might not entirely eliminate
1102    the need to parse tentatively, but it might still speed up the average
1103    case.  */
1104
1105 /* Flags that are passed to some parsing functions.  These values can
1106    be bitwise-ored together.  */
1107
1108 typedef enum cp_parser_flags
1109 {
1110   /* No flags.  */
1111   CP_PARSER_FLAGS_NONE = 0x0,
1112   /* The construct is optional.  If it is not present, then no error
1113      should be issued.  */
1114   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1115   /* When parsing a type-specifier, do not allow user-defined types.  */
1116   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1117 } cp_parser_flags;
1118
1119 /* The different kinds of declarators we want to parse.  */
1120
1121 typedef enum cp_parser_declarator_kind
1122 {
1123   /* We want an abstract declarator.  */
1124   CP_PARSER_DECLARATOR_ABSTRACT,
1125   /* We want a named declarator.  */
1126   CP_PARSER_DECLARATOR_NAMED,
1127   /* We don't mind, but the name must be an unqualified-id.  */
1128   CP_PARSER_DECLARATOR_EITHER
1129 } cp_parser_declarator_kind;
1130
1131 /* The precedence values used to parse binary expressions.  The minimum value
1132    of PREC must be 1, because zero is reserved to quickly discriminate
1133    binary operators from other tokens.  */
1134
1135 enum cp_parser_prec
1136 {
1137   PREC_NOT_OPERATOR,
1138   PREC_LOGICAL_OR_EXPRESSION,
1139   PREC_LOGICAL_AND_EXPRESSION,
1140   PREC_INCLUSIVE_OR_EXPRESSION,
1141   PREC_EXCLUSIVE_OR_EXPRESSION,
1142   PREC_AND_EXPRESSION,
1143   PREC_EQUALITY_EXPRESSION,
1144   PREC_RELATIONAL_EXPRESSION,
1145   PREC_SHIFT_EXPRESSION,
1146   PREC_ADDITIVE_EXPRESSION,
1147   PREC_MULTIPLICATIVE_EXPRESSION,
1148   PREC_PM_EXPRESSION,
1149   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1150 };
1151
1152 /* A mapping from a token type to a corresponding tree node type, with a
1153    precedence value.  */
1154
1155 typedef struct cp_parser_binary_operations_map_node
1156 {
1157   /* The token type.  */
1158   enum cpp_ttype token_type;
1159   /* The corresponding tree code.  */
1160   enum tree_code tree_type;
1161   /* The precedence of this operator.  */
1162   enum cp_parser_prec prec;
1163 } cp_parser_binary_operations_map_node;
1164
1165 /* The status of a tentative parse.  */
1166
1167 typedef enum cp_parser_status_kind
1168 {
1169   /* No errors have occurred.  */
1170   CP_PARSER_STATUS_KIND_NO_ERROR,
1171   /* An error has occurred.  */
1172   CP_PARSER_STATUS_KIND_ERROR,
1173   /* We are committed to this tentative parse, whether or not an error
1174      has occurred.  */
1175   CP_PARSER_STATUS_KIND_COMMITTED
1176 } cp_parser_status_kind;
1177
1178 typedef struct cp_parser_expression_stack_entry
1179 {
1180   tree lhs;
1181   enum tree_code tree_type;
1182   int prec;
1183 } cp_parser_expression_stack_entry;
1184
1185 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1186    entries because precedence levels on the stack are monotonically
1187    increasing.  */
1188 typedef struct cp_parser_expression_stack_entry
1189   cp_parser_expression_stack[NUM_PREC_VALUES];
1190
1191 /* Context that is saved and restored when parsing tentatively.  */
1192 typedef struct cp_parser_context GTY (())
1193 {
1194   /* If this is a tentative parsing context, the status of the
1195      tentative parse.  */
1196   enum cp_parser_status_kind status;
1197   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1198      that are looked up in this context must be looked up both in the
1199      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1200      the context of the containing expression.  */
1201   tree object_type;
1202
1203   /* The next parsing context in the stack.  */
1204   struct cp_parser_context *next;
1205 } cp_parser_context;
1206
1207 /* Prototypes.  */
1208
1209 /* Constructors and destructors.  */
1210
1211 static cp_parser_context *cp_parser_context_new
1212   (cp_parser_context *);
1213
1214 /* Class variables.  */
1215
1216 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1217
1218 /* The operator-precedence table used by cp_parser_binary_expression.
1219    Transformed into an associative array (binops_by_token) by
1220    cp_parser_new.  */
1221
1222 static const cp_parser_binary_operations_map_node binops[] = {
1223   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1224   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1225
1226   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1227   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1228   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1229
1230   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1231   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1232
1233   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1234   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1235
1236   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1237   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1238   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1239   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1240
1241   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1242   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1243
1244   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1245
1246   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1247
1248   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1249
1250   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1251
1252   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1253 };
1254
1255 /* The same as binops, but initialized by cp_parser_new so that
1256    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1257    for speed.  */
1258 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1259
1260 /* Constructors and destructors.  */
1261
1262 /* Construct a new context.  The context below this one on the stack
1263    is given by NEXT.  */
1264
1265 static cp_parser_context *
1266 cp_parser_context_new (cp_parser_context* next)
1267 {
1268   cp_parser_context *context;
1269
1270   /* Allocate the storage.  */
1271   if (cp_parser_context_free_list != NULL)
1272     {
1273       /* Pull the first entry from the free list.  */
1274       context = cp_parser_context_free_list;
1275       cp_parser_context_free_list = context->next;
1276       memset (context, 0, sizeof (*context));
1277     }
1278   else
1279     context = GGC_CNEW (cp_parser_context);
1280
1281   /* No errors have occurred yet in this context.  */
1282   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1283   /* If this is not the bottomost context, copy information that we
1284      need from the previous context.  */
1285   if (next)
1286     {
1287       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1288          expression, then we are parsing one in this context, too.  */
1289       context->object_type = next->object_type;
1290       /* Thread the stack.  */
1291       context->next = next;
1292     }
1293
1294   return context;
1295 }
1296
1297 /* The cp_parser structure represents the C++ parser.  */
1298
1299 typedef struct cp_parser GTY(())
1300 {
1301   /* The lexer from which we are obtaining tokens.  */
1302   cp_lexer *lexer;
1303
1304   /* The scope in which names should be looked up.  If NULL_TREE, then
1305      we look up names in the scope that is currently open in the
1306      source program.  If non-NULL, this is either a TYPE or
1307      NAMESPACE_DECL for the scope in which we should look.  It can
1308      also be ERROR_MARK, when we've parsed a bogus scope.
1309
1310      This value is not cleared automatically after a name is looked
1311      up, so we must be careful to clear it before starting a new look
1312      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1313      will look up `Z' in the scope of `X', rather than the current
1314      scope.)  Unfortunately, it is difficult to tell when name lookup
1315      is complete, because we sometimes peek at a token, look it up,
1316      and then decide not to consume it.   */
1317   tree scope;
1318
1319   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1320      last lookup took place.  OBJECT_SCOPE is used if an expression
1321      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1322      respectively.  QUALIFYING_SCOPE is used for an expression of the
1323      form "X::Y"; it refers to X.  */
1324   tree object_scope;
1325   tree qualifying_scope;
1326
1327   /* A stack of parsing contexts.  All but the bottom entry on the
1328      stack will be tentative contexts.
1329
1330      We parse tentatively in order to determine which construct is in
1331      use in some situations.  For example, in order to determine
1332      whether a statement is an expression-statement or a
1333      declaration-statement we parse it tentatively as a
1334      declaration-statement.  If that fails, we then reparse the same
1335      token stream as an expression-statement.  */
1336   cp_parser_context *context;
1337
1338   /* True if we are parsing GNU C++.  If this flag is not set, then
1339      GNU extensions are not recognized.  */
1340   bool allow_gnu_extensions_p;
1341
1342   /* TRUE if the `>' token should be interpreted as the greater-than
1343      operator.  FALSE if it is the end of a template-id or
1344      template-parameter-list.  */
1345   bool greater_than_is_operator_p;
1346
1347   /* TRUE if default arguments are allowed within a parameter list
1348      that starts at this point. FALSE if only a gnu extension makes
1349      them permissible.  */
1350   bool default_arg_ok_p;
1351
1352   /* TRUE if we are parsing an integral constant-expression.  See
1353      [expr.const] for a precise definition.  */
1354   bool integral_constant_expression_p;
1355
1356   /* TRUE if we are parsing an integral constant-expression -- but a
1357      non-constant expression should be permitted as well.  This flag
1358      is used when parsing an array bound so that GNU variable-length
1359      arrays are tolerated.  */
1360   bool allow_non_integral_constant_expression_p;
1361
1362   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1363      been seen that makes the expression non-constant.  */
1364   bool non_integral_constant_expression_p;
1365
1366   /* TRUE if local variable names and `this' are forbidden in the
1367      current context.  */
1368   bool local_variables_forbidden_p;
1369
1370   /* TRUE if the declaration we are parsing is part of a
1371      linkage-specification of the form `extern string-literal
1372      declaration'.  */
1373   bool in_unbraced_linkage_specification_p;
1374
1375   /* TRUE if we are presently parsing a declarator, after the
1376      direct-declarator.  */
1377   bool in_declarator_p;
1378
1379   /* TRUE if we are presently parsing a template-argument-list.  */
1380   bool in_template_argument_list_p;
1381
1382   /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1383      to IN_OMP_BLOCK if parsing OpenMP structured block and
1384      IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1385      this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1386      iteration-statement, OpenMP block or loop within that switch.  */
1387 #define IN_SWITCH_STMT          1
1388 #define IN_ITERATION_STMT       2
1389 #define IN_OMP_BLOCK            4
1390 #define IN_OMP_FOR              8
1391   unsigned char in_statement;
1392
1393   /* TRUE if we are presently parsing the body of a switch statement.
1394      Note that this doesn't quite overlap with in_statement above.
1395      The difference relates to giving the right sets of error messages:
1396      "case not in switch" vs "break statement used with OpenMP...".  */
1397   bool in_switch_statement_p;
1398
1399   /* TRUE if we are parsing a type-id in an expression context.  In
1400      such a situation, both "type (expr)" and "type (type)" are valid
1401      alternatives.  */
1402   bool in_type_id_in_expr_p;
1403
1404   /* TRUE if we are currently in a header file where declarations are
1405      implicitly extern "C".  */
1406   bool implicit_extern_c;
1407
1408   /* TRUE if strings in expressions should be translated to the execution
1409      character set.  */
1410   bool translate_strings_p;
1411
1412   /* TRUE if we are presently parsing the body of a function, but not
1413      a local class.  */
1414   bool in_function_body;
1415
1416   /* If non-NULL, then we are parsing a construct where new type
1417      definitions are not permitted.  The string stored here will be
1418      issued as an error message if a type is defined.  */
1419   const char *type_definition_forbidden_message;
1420
1421   /* A list of lists. The outer list is a stack, used for member
1422      functions of local classes. At each level there are two sub-list,
1423      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1424      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1425      TREE_VALUE's. The functions are chained in reverse declaration
1426      order.
1427
1428      The TREE_PURPOSE sublist contains those functions with default
1429      arguments that need post processing, and the TREE_VALUE sublist
1430      contains those functions with definitions that need post
1431      processing.
1432
1433      These lists can only be processed once the outermost class being
1434      defined is complete.  */
1435   tree unparsed_functions_queues;
1436
1437   /* The number of classes whose definitions are currently in
1438      progress.  */
1439   unsigned num_classes_being_defined;
1440
1441   /* The number of template parameter lists that apply directly to the
1442      current declaration.  */
1443   unsigned num_template_parameter_lists;
1444 } cp_parser;
1445
1446 /* Prototypes.  */
1447
1448 /* Constructors and destructors.  */
1449
1450 static cp_parser *cp_parser_new
1451   (void);
1452
1453 /* Routines to parse various constructs.
1454
1455    Those that return `tree' will return the error_mark_node (rather
1456    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1457    Sometimes, they will return an ordinary node if error-recovery was
1458    attempted, even though a parse error occurred.  So, to check
1459    whether or not a parse error occurred, you should always use
1460    cp_parser_error_occurred.  If the construct is optional (indicated
1461    either by an `_opt' in the name of the function that does the
1462    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1463    the construct is not present.  */
1464
1465 /* Lexical conventions [gram.lex]  */
1466
1467 static tree cp_parser_identifier
1468   (cp_parser *);
1469 static tree cp_parser_string_literal
1470   (cp_parser *, bool, bool);
1471
1472 /* Basic concepts [gram.basic]  */
1473
1474 static bool cp_parser_translation_unit
1475   (cp_parser *);
1476
1477 /* Expressions [gram.expr]  */
1478
1479 static tree cp_parser_primary_expression
1480   (cp_parser *, bool, bool, bool, cp_id_kind *);
1481 static tree cp_parser_id_expression
1482   (cp_parser *, bool, bool, bool *, bool, bool);
1483 static tree cp_parser_unqualified_id
1484   (cp_parser *, bool, bool, bool, bool);
1485 static tree cp_parser_nested_name_specifier_opt
1486   (cp_parser *, bool, bool, bool, bool);
1487 static tree cp_parser_nested_name_specifier
1488   (cp_parser *, bool, bool, bool, bool);
1489 static tree cp_parser_class_or_namespace_name
1490   (cp_parser *, bool, bool, bool, bool, bool);
1491 static tree cp_parser_postfix_expression
1492   (cp_parser *, bool, bool);
1493 static tree cp_parser_postfix_open_square_expression
1494   (cp_parser *, tree, bool);
1495 static tree cp_parser_postfix_dot_deref_expression
1496   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1497 static tree cp_parser_parenthesized_expression_list
1498   (cp_parser *, bool, bool, bool *);
1499 static void cp_parser_pseudo_destructor_name
1500   (cp_parser *, tree *, tree *);
1501 static tree cp_parser_unary_expression
1502   (cp_parser *, bool, bool);
1503 static enum tree_code cp_parser_unary_operator
1504   (cp_token *);
1505 static tree cp_parser_new_expression
1506   (cp_parser *);
1507 static tree cp_parser_new_placement
1508   (cp_parser *);
1509 static tree cp_parser_new_type_id
1510   (cp_parser *, tree *);
1511 static cp_declarator *cp_parser_new_declarator_opt
1512   (cp_parser *);
1513 static cp_declarator *cp_parser_direct_new_declarator
1514   (cp_parser *);
1515 static tree cp_parser_new_initializer
1516   (cp_parser *);
1517 static tree cp_parser_delete_expression
1518   (cp_parser *);
1519 static tree cp_parser_cast_expression
1520   (cp_parser *, bool, bool);
1521 static tree cp_parser_binary_expression
1522   (cp_parser *, bool);
1523 static tree cp_parser_question_colon_clause
1524   (cp_parser *, tree);
1525 static tree cp_parser_assignment_expression
1526   (cp_parser *, bool);
1527 static enum tree_code cp_parser_assignment_operator_opt
1528   (cp_parser *);
1529 static tree cp_parser_expression
1530   (cp_parser *, bool);
1531 static tree cp_parser_constant_expression
1532   (cp_parser *, bool, bool *);
1533 static tree cp_parser_builtin_offsetof
1534   (cp_parser *);
1535
1536 /* Statements [gram.stmt.stmt]  */
1537
1538 static void cp_parser_statement
1539   (cp_parser *, tree, bool);
1540 static void cp_parser_label_for_labeled_statement
1541   (cp_parser *);
1542 static tree cp_parser_expression_statement
1543   (cp_parser *, tree);
1544 static tree cp_parser_compound_statement
1545   (cp_parser *, tree, bool);
1546 static void cp_parser_statement_seq_opt
1547   (cp_parser *, tree);
1548 static tree cp_parser_selection_statement
1549   (cp_parser *);
1550 static tree cp_parser_condition
1551   (cp_parser *);
1552 static tree cp_parser_iteration_statement
1553   (cp_parser *);
1554 static void cp_parser_for_init_statement
1555   (cp_parser *);
1556 static tree cp_parser_jump_statement
1557   (cp_parser *);
1558 static void cp_parser_declaration_statement
1559   (cp_parser *);
1560
1561 static tree cp_parser_implicitly_scoped_statement
1562   (cp_parser *);
1563 static void cp_parser_already_scoped_statement
1564   (cp_parser *);
1565
1566 /* Declarations [gram.dcl.dcl] */
1567
1568 static void cp_parser_declaration_seq_opt
1569   (cp_parser *);
1570 static void cp_parser_declaration
1571   (cp_parser *);
1572 static void cp_parser_block_declaration
1573   (cp_parser *, bool);
1574 static void cp_parser_simple_declaration
1575   (cp_parser *, bool);
1576 static void cp_parser_decl_specifier_seq
1577   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1578 static tree cp_parser_storage_class_specifier_opt
1579   (cp_parser *);
1580 static tree cp_parser_function_specifier_opt
1581   (cp_parser *, cp_decl_specifier_seq *);
1582 static tree cp_parser_type_specifier
1583   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1584    int *, bool *);
1585 static tree cp_parser_simple_type_specifier
1586   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1587 static tree cp_parser_type_name
1588   (cp_parser *);
1589 static tree cp_parser_elaborated_type_specifier
1590   (cp_parser *, bool, bool);
1591 static tree cp_parser_enum_specifier
1592   (cp_parser *);
1593 static void cp_parser_enumerator_list
1594   (cp_parser *, tree);
1595 static void cp_parser_enumerator_definition
1596   (cp_parser *, tree);
1597 static tree cp_parser_namespace_name
1598   (cp_parser *);
1599 static void cp_parser_namespace_definition
1600   (cp_parser *);
1601 static void cp_parser_namespace_body
1602   (cp_parser *);
1603 static tree cp_parser_qualified_namespace_specifier
1604   (cp_parser *);
1605 static void cp_parser_namespace_alias_definition
1606   (cp_parser *);
1607 static bool cp_parser_using_declaration
1608   (cp_parser *, bool);
1609 static void cp_parser_using_directive
1610   (cp_parser *);
1611 static void cp_parser_asm_definition
1612   (cp_parser *);
1613 static void cp_parser_linkage_specification
1614   (cp_parser *);
1615
1616 /* Declarators [gram.dcl.decl] */
1617
1618 static tree cp_parser_init_declarator
1619   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *);
1620 static cp_declarator *cp_parser_declarator
1621   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1622 static cp_declarator *cp_parser_direct_declarator
1623   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1624 static enum tree_code cp_parser_ptr_operator
1625   (cp_parser *, tree *, cp_cv_quals *);
1626 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1627   (cp_parser *);
1628 static tree cp_parser_declarator_id
1629   (cp_parser *, bool);
1630 static tree cp_parser_type_id
1631   (cp_parser *);
1632 static void cp_parser_type_specifier_seq
1633   (cp_parser *, bool, cp_decl_specifier_seq *);
1634 static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1635   (cp_parser *);
1636 static cp_parameter_declarator *cp_parser_parameter_declaration_list
1637   (cp_parser *, bool *);
1638 static cp_parameter_declarator *cp_parser_parameter_declaration
1639   (cp_parser *, bool, bool *);
1640 static void cp_parser_function_body
1641   (cp_parser *);
1642 static tree cp_parser_initializer
1643   (cp_parser *, bool *, bool *);
1644 static tree cp_parser_initializer_clause
1645   (cp_parser *, bool *);
1646 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1647   (cp_parser *, bool *);
1648
1649 static bool cp_parser_ctor_initializer_opt_and_function_body
1650   (cp_parser *);
1651
1652 /* Classes [gram.class] */
1653
1654 static tree cp_parser_class_name
1655   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1656 static tree cp_parser_class_specifier
1657   (cp_parser *);
1658 static tree cp_parser_class_head
1659   (cp_parser *, bool *, tree *, tree *);
1660 static enum tag_types cp_parser_class_key
1661   (cp_parser *);
1662 static void cp_parser_member_specification_opt
1663   (cp_parser *);
1664 static void cp_parser_member_declaration
1665   (cp_parser *);
1666 static tree cp_parser_pure_specifier
1667   (cp_parser *);
1668 static tree cp_parser_constant_initializer
1669   (cp_parser *);
1670
1671 /* Derived classes [gram.class.derived] */
1672
1673 static tree cp_parser_base_clause
1674   (cp_parser *);
1675 static tree cp_parser_base_specifier
1676   (cp_parser *);
1677
1678 /* Special member functions [gram.special] */
1679
1680 static tree cp_parser_conversion_function_id
1681   (cp_parser *);
1682 static tree cp_parser_conversion_type_id
1683   (cp_parser *);
1684 static cp_declarator *cp_parser_conversion_declarator_opt
1685   (cp_parser *);
1686 static bool cp_parser_ctor_initializer_opt
1687   (cp_parser *);
1688 static void cp_parser_mem_initializer_list
1689   (cp_parser *);
1690 static tree cp_parser_mem_initializer
1691   (cp_parser *);
1692 static tree cp_parser_mem_initializer_id
1693   (cp_parser *);
1694
1695 /* Overloading [gram.over] */
1696
1697 static tree cp_parser_operator_function_id
1698   (cp_parser *);
1699 static tree cp_parser_operator
1700   (cp_parser *);
1701
1702 /* Templates [gram.temp] */
1703
1704 static void cp_parser_template_declaration
1705   (cp_parser *, bool);
1706 static tree cp_parser_template_parameter_list
1707   (cp_parser *);
1708 static tree cp_parser_template_parameter
1709   (cp_parser *, bool *);
1710 static tree cp_parser_type_parameter
1711   (cp_parser *);
1712 static tree cp_parser_template_id
1713   (cp_parser *, bool, bool, bool);
1714 static tree cp_parser_template_name
1715   (cp_parser *, bool, bool, bool, bool *);
1716 static tree cp_parser_template_argument_list
1717   (cp_parser *);
1718 static tree cp_parser_template_argument
1719   (cp_parser *);
1720 static void cp_parser_explicit_instantiation
1721   (cp_parser *);
1722 static void cp_parser_explicit_specialization
1723   (cp_parser *);
1724
1725 /* Exception handling [gram.exception] */
1726
1727 static tree cp_parser_try_block
1728   (cp_parser *);
1729 static bool cp_parser_function_try_block
1730   (cp_parser *);
1731 static void cp_parser_handler_seq
1732   (cp_parser *);
1733 static void cp_parser_handler
1734   (cp_parser *);
1735 static tree cp_parser_exception_declaration
1736   (cp_parser *);
1737 static tree cp_parser_throw_expression
1738   (cp_parser *);
1739 static tree cp_parser_exception_specification_opt
1740   (cp_parser *);
1741 static tree cp_parser_type_id_list
1742   (cp_parser *);
1743
1744 /* GNU Extensions */
1745
1746 static tree cp_parser_asm_specification_opt
1747   (cp_parser *);
1748 static tree cp_parser_asm_operand_list
1749   (cp_parser *);
1750 static tree cp_parser_asm_clobber_list
1751   (cp_parser *);
1752 static tree cp_parser_attributes_opt
1753   (cp_parser *);
1754 static tree cp_parser_attribute_list
1755   (cp_parser *);
1756 static bool cp_parser_extension_opt
1757   (cp_parser *, int *);
1758 static void cp_parser_label_declaration
1759   (cp_parser *);
1760
1761 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1762 static bool cp_parser_pragma
1763   (cp_parser *, enum pragma_context);
1764
1765 /* Objective-C++ Productions */
1766
1767 static tree cp_parser_objc_message_receiver
1768   (cp_parser *);
1769 static tree cp_parser_objc_message_args
1770   (cp_parser *);
1771 static tree cp_parser_objc_message_expression
1772   (cp_parser *);
1773 static tree cp_parser_objc_encode_expression
1774   (cp_parser *);
1775 static tree cp_parser_objc_defs_expression
1776   (cp_parser *);
1777 static tree cp_parser_objc_protocol_expression
1778   (cp_parser *);
1779 static tree cp_parser_objc_selector_expression
1780   (cp_parser *);
1781 static tree cp_parser_objc_expression
1782   (cp_parser *);
1783 static bool cp_parser_objc_selector_p
1784   (enum cpp_ttype);
1785 static tree cp_parser_objc_selector
1786   (cp_parser *);
1787 static tree cp_parser_objc_protocol_refs_opt
1788   (cp_parser *);
1789 static void cp_parser_objc_declaration
1790   (cp_parser *);
1791 static tree cp_parser_objc_statement
1792   (cp_parser *);
1793
1794 /* Utility Routines */
1795
1796 static tree cp_parser_lookup_name
1797   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *);
1798 static tree cp_parser_lookup_name_simple
1799   (cp_parser *, tree);
1800 static tree cp_parser_maybe_treat_template_as_class
1801   (tree, bool);
1802 static bool cp_parser_check_declarator_template_parameters
1803   (cp_parser *, cp_declarator *);
1804 static bool cp_parser_check_template_parameters
1805   (cp_parser *, unsigned);
1806 static tree cp_parser_simple_cast_expression
1807   (cp_parser *);
1808 static tree cp_parser_global_scope_opt
1809   (cp_parser *, bool);
1810 static bool cp_parser_constructor_declarator_p
1811   (cp_parser *, bool);
1812 static tree cp_parser_function_definition_from_specifiers_and_declarator
1813   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1814 static tree cp_parser_function_definition_after_declarator
1815   (cp_parser *, bool);
1816 static void cp_parser_template_declaration_after_export
1817   (cp_parser *, bool);
1818 static void cp_parser_perform_template_parameter_access_checks
1819   (VEC (deferred_access_check,gc)*);
1820 static tree cp_parser_single_declaration
1821   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool *);
1822 static tree cp_parser_functional_cast
1823   (cp_parser *, tree);
1824 static tree cp_parser_save_member_function_body
1825   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1826 static tree cp_parser_enclosed_template_argument_list
1827   (cp_parser *);
1828 static void cp_parser_save_default_args
1829   (cp_parser *, tree);
1830 static void cp_parser_late_parsing_for_member
1831   (cp_parser *, tree);
1832 static void cp_parser_late_parsing_default_args
1833   (cp_parser *, tree);
1834 static tree cp_parser_sizeof_operand
1835   (cp_parser *, enum rid);
1836 static bool cp_parser_declares_only_class_p
1837   (cp_parser *);
1838 static void cp_parser_set_storage_class
1839   (cp_parser *, cp_decl_specifier_seq *, enum rid);
1840 static void cp_parser_set_decl_spec_type
1841   (cp_decl_specifier_seq *, tree, bool);
1842 static bool cp_parser_friend_p
1843   (const cp_decl_specifier_seq *);
1844 static cp_token *cp_parser_require
1845   (cp_parser *, enum cpp_ttype, const char *);
1846 static cp_token *cp_parser_require_keyword
1847   (cp_parser *, enum rid, const char *);
1848 static bool cp_parser_token_starts_function_definition_p
1849   (cp_token *);
1850 static bool cp_parser_next_token_starts_class_definition_p
1851   (cp_parser *);
1852 static bool cp_parser_next_token_ends_template_argument_p
1853   (cp_parser *);
1854 static bool cp_parser_nth_token_starts_template_argument_list_p
1855   (cp_parser *, size_t);
1856 static enum tag_types cp_parser_token_is_class_key
1857   (cp_token *);
1858 static void cp_parser_check_class_key
1859   (enum tag_types, tree type);
1860 static void cp_parser_check_access_in_redeclaration
1861   (tree type);
1862 static bool cp_parser_optional_template_keyword
1863   (cp_parser *);
1864 static void cp_parser_pre_parsed_nested_name_specifier
1865   (cp_parser *);
1866 static void cp_parser_cache_group
1867   (cp_parser *, enum cpp_ttype, unsigned);
1868 static void cp_parser_parse_tentatively
1869   (cp_parser *);
1870 static void cp_parser_commit_to_tentative_parse
1871   (cp_parser *);
1872 static void cp_parser_abort_tentative_parse
1873   (cp_parser *);
1874 static bool cp_parser_parse_definitely
1875   (cp_parser *);
1876 static inline bool cp_parser_parsing_tentatively
1877   (cp_parser *);
1878 static bool cp_parser_uncommitted_to_tentative_parse_p
1879   (cp_parser *);
1880 static void cp_parser_error
1881   (cp_parser *, const char *);
1882 static void cp_parser_name_lookup_error
1883   (cp_parser *, tree, tree, const char *);
1884 static bool cp_parser_simulate_error
1885   (cp_parser *);
1886 static bool cp_parser_check_type_definition
1887   (cp_parser *);
1888 static void cp_parser_check_for_definition_in_return_type
1889   (cp_declarator *, tree);
1890 static void cp_parser_check_for_invalid_template_id
1891   (cp_parser *, tree);
1892 static bool cp_parser_non_integral_constant_expression
1893   (cp_parser *, const char *);
1894 static void cp_parser_diagnose_invalid_type_name
1895   (cp_parser *, tree, tree);
1896 static bool cp_parser_parse_and_diagnose_invalid_type_name
1897   (cp_parser *);
1898 static int cp_parser_skip_to_closing_parenthesis
1899   (cp_parser *, bool, bool, bool);
1900 static void cp_parser_skip_to_end_of_statement
1901   (cp_parser *);
1902 static void cp_parser_consume_semicolon_at_end_of_statement
1903   (cp_parser *);
1904 static void cp_parser_skip_to_end_of_block_or_statement
1905   (cp_parser *);
1906 static void cp_parser_skip_to_closing_brace
1907   (cp_parser *);
1908 static void cp_parser_skip_to_end_of_template_parameter_list
1909   (cp_parser *);
1910 static void cp_parser_skip_to_pragma_eol
1911   (cp_parser*, cp_token *);
1912 static bool cp_parser_error_occurred
1913   (cp_parser *);
1914 static bool cp_parser_allow_gnu_extensions_p
1915   (cp_parser *);
1916 static bool cp_parser_is_string_literal
1917   (cp_token *);
1918 static bool cp_parser_is_keyword
1919   (cp_token *, enum rid);
1920 static tree cp_parser_make_typename_type
1921   (cp_parser *, tree, tree);
1922
1923 /* Returns nonzero if we are parsing tentatively.  */
1924
1925 static inline bool
1926 cp_parser_parsing_tentatively (cp_parser* parser)
1927 {
1928   return parser->context->next != NULL;
1929 }
1930
1931 /* Returns nonzero if TOKEN is a string literal.  */
1932
1933 static bool
1934 cp_parser_is_string_literal (cp_token* token)
1935 {
1936   return (token->type == CPP_STRING || token->type == CPP_WSTRING);
1937 }
1938
1939 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
1940
1941 static bool
1942 cp_parser_is_keyword (cp_token* token, enum rid keyword)
1943 {
1944   return token->keyword == keyword;
1945 }
1946
1947 /* If not parsing tentatively, issue a diagnostic of the form
1948       FILE:LINE: MESSAGE before TOKEN
1949    where TOKEN is the next token in the input stream.  MESSAGE
1950    (specified by the caller) is usually of the form "expected
1951    OTHER-TOKEN".  */
1952
1953 static void
1954 cp_parser_error (cp_parser* parser, const char* message)
1955 {
1956   if (!cp_parser_simulate_error (parser))
1957     {
1958       cp_token *token = cp_lexer_peek_token (parser->lexer);
1959       /* This diagnostic makes more sense if it is tagged to the line
1960          of the token we just peeked at.  */
1961       cp_lexer_set_source_position_from_token (token);
1962
1963       if (token->type == CPP_PRAGMA)
1964         {
1965           error ("%<#pragma%> is not allowed here");
1966           cp_parser_skip_to_pragma_eol (parser, token);
1967           return;
1968         }
1969
1970       c_parse_error (message,
1971                      /* Because c_parser_error does not understand
1972                         CPP_KEYWORD, keywords are treated like
1973                         identifiers.  */
1974                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
1975                      token->u.value);
1976     }
1977 }
1978
1979 /* Issue an error about name-lookup failing.  NAME is the
1980    IDENTIFIER_NODE DECL is the result of
1981    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
1982    the thing that we hoped to find.  */
1983
1984 static void
1985 cp_parser_name_lookup_error (cp_parser* parser,
1986                              tree name,
1987                              tree decl,
1988                              const char* desired)
1989 {
1990   /* If name lookup completely failed, tell the user that NAME was not
1991      declared.  */
1992   if (decl == error_mark_node)
1993     {
1994       if (parser->scope && parser->scope != global_namespace)
1995         error ("%<%D::%D%> has not been declared",
1996                parser->scope, name);
1997       else if (parser->scope == global_namespace)
1998         error ("%<::%D%> has not been declared", name);
1999       else if (parser->object_scope
2000                && !CLASS_TYPE_P (parser->object_scope))
2001         error ("request for member %qD in non-class type %qT",
2002                name, parser->object_scope);
2003       else if (parser->object_scope)
2004         error ("%<%T::%D%> has not been declared",
2005                parser->object_scope, name);
2006       else
2007         error ("%qD has not been declared", name);
2008     }
2009   else if (parser->scope && parser->scope != global_namespace)
2010     error ("%<%D::%D%> %s", parser->scope, name, desired);
2011   else if (parser->scope == global_namespace)
2012     error ("%<::%D%> %s", name, desired);
2013   else
2014     error ("%qD %s", name, desired);
2015 }
2016
2017 /* If we are parsing tentatively, remember that an error has occurred
2018    during this tentative parse.  Returns true if the error was
2019    simulated; false if a message should be issued by the caller.  */
2020
2021 static bool
2022 cp_parser_simulate_error (cp_parser* parser)
2023 {
2024   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2025     {
2026       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2027       return true;
2028     }
2029   return false;
2030 }
2031
2032 /* Check for repeated decl-specifiers.  */
2033
2034 static void
2035 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs)
2036 {
2037   cp_decl_spec ds;
2038
2039   for (ds = ds_first; ds != ds_last; ++ds)
2040     {
2041       unsigned count = decl_specs->specs[(int)ds];
2042       if (count < 2)
2043         continue;
2044       /* The "long" specifier is a special case because of "long long".  */
2045       if (ds == ds_long)
2046         {
2047           if (count > 2)
2048             error ("%<long long long%> is too long for GCC");
2049           else if (pedantic && !in_system_header && warn_long_long)
2050             pedwarn ("ISO C++ does not support %<long long%>");
2051         }
2052       else if (count > 1)
2053         {
2054           static const char *const decl_spec_names[] = {
2055             "signed",
2056             "unsigned",
2057             "short",
2058             "long",
2059             "const",
2060             "volatile",
2061             "restrict",
2062             "inline",
2063             "virtual",
2064             "explicit",
2065             "friend",
2066             "typedef",
2067             "__complex",
2068             "__thread"
2069           };
2070           error ("duplicate %qs", decl_spec_names[(int)ds]);
2071         }
2072     }
2073 }
2074
2075 /* This function is called when a type is defined.  If type
2076    definitions are forbidden at this point, an error message is
2077    issued.  */
2078
2079 static bool
2080 cp_parser_check_type_definition (cp_parser* parser)
2081 {
2082   /* If types are forbidden here, issue a message.  */
2083   if (parser->type_definition_forbidden_message)
2084     {
2085       /* Use `%s' to print the string in case there are any escape
2086          characters in the message.  */
2087       error ("%s", parser->type_definition_forbidden_message);
2088       return false;
2089     }
2090   return true;
2091 }
2092
2093 /* This function is called when the DECLARATOR is processed.  The TYPE
2094    was a type defined in the decl-specifiers.  If it is invalid to
2095    define a type in the decl-specifiers for DECLARATOR, an error is
2096    issued.  */
2097
2098 static void
2099 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2100                                                tree type)
2101 {
2102   /* [dcl.fct] forbids type definitions in return types.
2103      Unfortunately, it's not easy to know whether or not we are
2104      processing a return type until after the fact.  */
2105   while (declarator
2106          && (declarator->kind == cdk_pointer
2107              || declarator->kind == cdk_reference
2108              || declarator->kind == cdk_ptrmem))
2109     declarator = declarator->declarator;
2110   if (declarator
2111       && declarator->kind == cdk_function)
2112     {
2113       error ("new types may not be defined in a return type");
2114       inform ("(perhaps a semicolon is missing after the definition of %qT)",
2115               type);
2116     }
2117 }
2118
2119 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2120    "<" in any valid C++ program.  If the next token is indeed "<",
2121    issue a message warning the user about what appears to be an
2122    invalid attempt to form a template-id.  */
2123
2124 static void
2125 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2126                                          tree type)
2127 {
2128   cp_token_position start = 0;
2129
2130   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2131     {
2132       if (TYPE_P (type))
2133         error ("%qT is not a template", type);
2134       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2135         error ("%qE is not a template", type);
2136       else
2137         error ("invalid template-id");
2138       /* Remember the location of the invalid "<".  */
2139       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2140         start = cp_lexer_token_position (parser->lexer, true);
2141       /* Consume the "<".  */
2142       cp_lexer_consume_token (parser->lexer);
2143       /* Parse the template arguments.  */
2144       cp_parser_enclosed_template_argument_list (parser);
2145       /* Permanently remove the invalid template arguments so that
2146          this error message is not issued again.  */
2147       if (start)
2148         cp_lexer_purge_tokens_after (parser->lexer, start);
2149     }
2150 }
2151
2152 /* If parsing an integral constant-expression, issue an error message
2153    about the fact that THING appeared and return true.  Otherwise,
2154    return false.  In either case, set
2155    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2156
2157 static bool
2158 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2159                                             const char *thing)
2160 {
2161   parser->non_integral_constant_expression_p = true;
2162   if (parser->integral_constant_expression_p)
2163     {
2164       if (!parser->allow_non_integral_constant_expression_p)
2165         {
2166           error ("%s cannot appear in a constant-expression", thing);
2167           return true;
2168         }
2169     }
2170   return false;
2171 }
2172
2173 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2174    qualifying scope (or NULL, if none) for ID.  This function commits
2175    to the current active tentative parse, if any.  (Otherwise, the
2176    problematic construct might be encountered again later, resulting
2177    in duplicate error messages.)  */
2178
2179 static void
2180 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
2181 {
2182   tree decl, old_scope;
2183   /* Try to lookup the identifier.  */
2184   old_scope = parser->scope;
2185   parser->scope = scope;
2186   decl = cp_parser_lookup_name_simple (parser, id);
2187   parser->scope = old_scope;
2188   /* If the lookup found a template-name, it means that the user forgot
2189   to specify an argument list. Emit a useful error message.  */
2190   if (TREE_CODE (decl) == TEMPLATE_DECL)
2191     error ("invalid use of template-name %qE without an argument list", decl);
2192   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2193     error ("invalid use of destructor %qD as a type", id);
2194   else if (TREE_CODE (decl) == TYPE_DECL)
2195     /* Something like 'unsigned A a;'  */
2196     error ("invalid combination of multiple type-specifiers");
2197   else if (!parser->scope)
2198     {
2199       /* Issue an error message.  */
2200       error ("%qE does not name a type", id);
2201       /* If we're in a template class, it's possible that the user was
2202          referring to a type from a base class.  For example:
2203
2204            template <typename T> struct A { typedef T X; };
2205            template <typename T> struct B : public A<T> { X x; };
2206
2207          The user should have said "typename A<T>::X".  */
2208       if (processing_template_decl && current_class_type
2209           && TYPE_BINFO (current_class_type))
2210         {
2211           tree b;
2212
2213           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2214                b;
2215                b = TREE_CHAIN (b))
2216             {
2217               tree base_type = BINFO_TYPE (b);
2218               if (CLASS_TYPE_P (base_type)
2219                   && dependent_type_p (base_type))
2220                 {
2221                   tree field;
2222                   /* Go from a particular instantiation of the
2223                      template (which will have an empty TYPE_FIELDs),
2224                      to the main version.  */
2225                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2226                   for (field = TYPE_FIELDS (base_type);
2227                        field;
2228                        field = TREE_CHAIN (field))
2229                     if (TREE_CODE (field) == TYPE_DECL
2230                         && DECL_NAME (field) == id)
2231                       {
2232                         inform ("(perhaps %<typename %T::%E%> was intended)",
2233                                 BINFO_TYPE (b), id);
2234                         break;
2235                       }
2236                   if (field)
2237                     break;
2238                 }
2239             }
2240         }
2241     }
2242   /* Here we diagnose qualified-ids where the scope is actually correct,
2243      but the identifier does not resolve to a valid type name.  */
2244   else if (parser->scope != error_mark_node)
2245     {
2246       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2247         error ("%qE in namespace %qE does not name a type",
2248                id, parser->scope);
2249       else if (TYPE_P (parser->scope))
2250         error ("%qE in class %qT does not name a type", id, parser->scope);
2251       else
2252         gcc_unreachable ();
2253     }
2254   cp_parser_commit_to_tentative_parse (parser);
2255 }
2256
2257 /* Check for a common situation where a type-name should be present,
2258    but is not, and issue a sensible error message.  Returns true if an
2259    invalid type-name was detected.
2260
2261    The situation handled by this function are variable declarations of the
2262    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2263    Usually, `ID' should name a type, but if we got here it means that it
2264    does not. We try to emit the best possible error message depending on
2265    how exactly the id-expression looks like.  */
2266
2267 static bool
2268 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2269 {
2270   tree id;
2271
2272   cp_parser_parse_tentatively (parser);
2273   id = cp_parser_id_expression (parser,
2274                                 /*template_keyword_p=*/false,
2275                                 /*check_dependency_p=*/true,
2276                                 /*template_p=*/NULL,
2277                                 /*declarator_p=*/true,
2278                                 /*optional_p=*/false);
2279   /* After the id-expression, there should be a plain identifier,
2280      otherwise this is not a simple variable declaration. Also, if
2281      the scope is dependent, we cannot do much.  */
2282   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2283       || (parser->scope && TYPE_P (parser->scope)
2284           && dependent_type_p (parser->scope))
2285       || TREE_CODE (id) == TYPE_DECL)
2286     {
2287       cp_parser_abort_tentative_parse (parser);
2288       return false;
2289     }
2290   if (!cp_parser_parse_definitely (parser))
2291     return false;
2292
2293   /* Emit a diagnostic for the invalid type.  */
2294   cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2295   /* Skip to the end of the declaration; there's no point in
2296      trying to process it.  */
2297   cp_parser_skip_to_end_of_block_or_statement (parser);
2298   return true;
2299 }
2300
2301 /* Consume tokens up to, and including, the next non-nested closing `)'.
2302    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2303    are doing error recovery. Returns -1 if OR_COMMA is true and we
2304    found an unnested comma.  */
2305
2306 static int
2307 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2308                                        bool recovering,
2309                                        bool or_comma,
2310                                        bool consume_paren)
2311 {
2312   unsigned paren_depth = 0;
2313   unsigned brace_depth = 0;
2314
2315   if (recovering && !or_comma
2316       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2317     return 0;
2318
2319   while (true)
2320     {
2321       cp_token * token = cp_lexer_peek_token (parser->lexer);
2322
2323       switch (token->type)
2324         {
2325         case CPP_EOF:
2326         case CPP_PRAGMA_EOL:
2327           /* If we've run out of tokens, then there is no closing `)'.  */
2328           return 0;
2329
2330         case CPP_SEMICOLON:
2331           /* This matches the processing in skip_to_end_of_statement.  */
2332           if (!brace_depth)
2333             return 0;
2334           break;
2335
2336         case CPP_OPEN_BRACE:
2337           ++brace_depth;
2338           break;
2339         case CPP_CLOSE_BRACE:
2340           if (!brace_depth--)
2341             return 0;
2342           break;
2343
2344         case CPP_COMMA:
2345           if (recovering && or_comma && !brace_depth && !paren_depth)
2346             return -1;
2347           break;
2348
2349         case CPP_OPEN_PAREN:
2350           if (!brace_depth)
2351             ++paren_depth;
2352           break;
2353
2354         case CPP_CLOSE_PAREN:
2355           if (!brace_depth && !paren_depth--)
2356             {
2357               if (consume_paren)
2358                 cp_lexer_consume_token (parser->lexer);
2359               return 1;
2360             }
2361           break;
2362
2363         default:
2364           break;
2365         }
2366
2367       /* Consume the token.  */
2368       cp_lexer_consume_token (parser->lexer);
2369     }
2370 }
2371
2372 /* Consume tokens until we reach the end of the current statement.
2373    Normally, that will be just before consuming a `;'.  However, if a
2374    non-nested `}' comes first, then we stop before consuming that.  */
2375
2376 static void
2377 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2378 {
2379   unsigned nesting_depth = 0;
2380
2381   while (true)
2382     {
2383       cp_token *token = cp_lexer_peek_token (parser->lexer);
2384
2385       switch (token->type)
2386         {
2387         case CPP_EOF:
2388         case CPP_PRAGMA_EOL:
2389           /* If we've run out of tokens, stop.  */
2390           return;
2391
2392         case CPP_SEMICOLON:
2393           /* If the next token is a `;', we have reached the end of the
2394              statement.  */
2395           if (!nesting_depth)
2396             return;
2397           break;
2398
2399         case CPP_CLOSE_BRACE:
2400           /* If this is a non-nested '}', stop before consuming it.
2401              That way, when confronted with something like:
2402
2403                { 3 + }
2404
2405              we stop before consuming the closing '}', even though we
2406              have not yet reached a `;'.  */
2407           if (nesting_depth == 0)
2408             return;
2409
2410           /* If it is the closing '}' for a block that we have
2411              scanned, stop -- but only after consuming the token.
2412              That way given:
2413
2414                 void f g () { ... }
2415                 typedef int I;
2416
2417              we will stop after the body of the erroneously declared
2418              function, but before consuming the following `typedef'
2419              declaration.  */
2420           if (--nesting_depth == 0)
2421             {
2422               cp_lexer_consume_token (parser->lexer);
2423               return;
2424             }
2425
2426         case CPP_OPEN_BRACE:
2427           ++nesting_depth;
2428           break;
2429
2430         default:
2431           break;
2432         }
2433
2434       /* Consume the token.  */
2435       cp_lexer_consume_token (parser->lexer);
2436     }
2437 }
2438
2439 /* This function is called at the end of a statement or declaration.
2440    If the next token is a semicolon, it is consumed; otherwise, error
2441    recovery is attempted.  */
2442
2443 static void
2444 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2445 {
2446   /* Look for the trailing `;'.  */
2447   if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2448     {
2449       /* If there is additional (erroneous) input, skip to the end of
2450          the statement.  */
2451       cp_parser_skip_to_end_of_statement (parser);
2452       /* If the next token is now a `;', consume it.  */
2453       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2454         cp_lexer_consume_token (parser->lexer);
2455     }
2456 }
2457
2458 /* Skip tokens until we have consumed an entire block, or until we
2459    have consumed a non-nested `;'.  */
2460
2461 static void
2462 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2463 {
2464   int nesting_depth = 0;
2465
2466   while (nesting_depth >= 0)
2467     {
2468       cp_token *token = cp_lexer_peek_token (parser->lexer);
2469
2470       switch (token->type)
2471         {
2472         case CPP_EOF:
2473         case CPP_PRAGMA_EOL:
2474           /* If we've run out of tokens, stop.  */
2475           return;
2476
2477         case CPP_SEMICOLON:
2478           /* Stop if this is an unnested ';'. */
2479           if (!nesting_depth)
2480             nesting_depth = -1;
2481           break;
2482
2483         case CPP_CLOSE_BRACE:
2484           /* Stop if this is an unnested '}', or closes the outermost
2485              nesting level.  */
2486           nesting_depth--;
2487           if (!nesting_depth)
2488             nesting_depth = -1;
2489           break;
2490
2491         case CPP_OPEN_BRACE:
2492           /* Nest. */
2493           nesting_depth++;
2494           break;
2495
2496         default:
2497           break;
2498         }
2499
2500       /* Consume the token.  */
2501       cp_lexer_consume_token (parser->lexer);
2502     }
2503 }
2504
2505 /* Skip tokens until a non-nested closing curly brace is the next
2506    token.  */
2507
2508 static void
2509 cp_parser_skip_to_closing_brace (cp_parser *parser)
2510 {
2511   unsigned nesting_depth = 0;
2512
2513   while (true)
2514     {
2515       cp_token *token = cp_lexer_peek_token (parser->lexer);
2516
2517       switch (token->type)
2518         {
2519         case CPP_EOF:
2520         case CPP_PRAGMA_EOL:
2521           /* If we've run out of tokens, stop.  */
2522           return;
2523
2524         case CPP_CLOSE_BRACE:
2525           /* If the next token is a non-nested `}', then we have reached
2526              the end of the current block.  */
2527           if (nesting_depth-- == 0)
2528             return;
2529           break;
2530
2531         case CPP_OPEN_BRACE:
2532           /* If it the next token is a `{', then we are entering a new
2533              block.  Consume the entire block.  */
2534           ++nesting_depth;
2535           break;
2536
2537         default:
2538           break;
2539         }
2540
2541       /* Consume the token.  */
2542       cp_lexer_consume_token (parser->lexer);
2543     }
2544 }
2545
2546 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2547    parameter is the PRAGMA token, allowing us to purge the entire pragma
2548    sequence.  */
2549
2550 static void
2551 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2552 {
2553   cp_token *token;
2554
2555   parser->lexer->in_pragma = false;
2556
2557   do
2558     token = cp_lexer_consume_token (parser->lexer);
2559   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2560
2561   /* Ensure that the pragma is not parsed again.  */
2562   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2563 }
2564
2565 /* Require pragma end of line, resyncing with it as necessary.  The
2566    arguments are as for cp_parser_skip_to_pragma_eol.  */
2567
2568 static void
2569 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2570 {
2571   parser->lexer->in_pragma = false;
2572   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2573     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2574 }
2575
2576 /* This is a simple wrapper around make_typename_type. When the id is
2577    an unresolved identifier node, we can provide a superior diagnostic
2578    using cp_parser_diagnose_invalid_type_name.  */
2579
2580 static tree
2581 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2582 {
2583   tree result;
2584   if (TREE_CODE (id) == IDENTIFIER_NODE)
2585     {
2586       result = make_typename_type (scope, id, typename_type,
2587                                    /*complain=*/tf_none);
2588       if (result == error_mark_node)
2589         cp_parser_diagnose_invalid_type_name (parser, scope, id);
2590       return result;
2591     }
2592   return make_typename_type (scope, id, typename_type, tf_error);
2593 }
2594
2595
2596 /* Create a new C++ parser.  */
2597
2598 static cp_parser *
2599 cp_parser_new (void)
2600 {
2601   cp_parser *parser;
2602   cp_lexer *lexer;
2603   unsigned i;
2604
2605   /* cp_lexer_new_main is called before calling ggc_alloc because
2606      cp_lexer_new_main might load a PCH file.  */
2607   lexer = cp_lexer_new_main ();
2608
2609   /* Initialize the binops_by_token so that we can get the tree
2610      directly from the token.  */
2611   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2612     binops_by_token[binops[i].token_type] = binops[i];
2613
2614   parser = GGC_CNEW (cp_parser);
2615   parser->lexer = lexer;
2616   parser->context = cp_parser_context_new (NULL);
2617
2618   /* For now, we always accept GNU extensions.  */
2619   parser->allow_gnu_extensions_p = 1;
2620
2621   /* The `>' token is a greater-than operator, not the end of a
2622      template-id.  */
2623   parser->greater_than_is_operator_p = true;
2624
2625   parser->default_arg_ok_p = true;
2626
2627   /* We are not parsing a constant-expression.  */
2628   parser->integral_constant_expression_p = false;
2629   parser->allow_non_integral_constant_expression_p = false;
2630   parser->non_integral_constant_expression_p = false;
2631
2632   /* Local variable names are not forbidden.  */
2633   parser->local_variables_forbidden_p = false;
2634
2635   /* We are not processing an `extern "C"' declaration.  */
2636   parser->in_unbraced_linkage_specification_p = false;
2637
2638   /* We are not processing a declarator.  */
2639   parser->in_declarator_p = false;
2640
2641   /* We are not processing a template-argument-list.  */
2642   parser->in_template_argument_list_p = false;
2643
2644   /* We are not in an iteration statement.  */
2645   parser->in_statement = 0;
2646
2647   /* We are not in a switch statement.  */
2648   parser->in_switch_statement_p = false;
2649
2650   /* We are not parsing a type-id inside an expression.  */
2651   parser->in_type_id_in_expr_p = false;
2652
2653   /* Declarations aren't implicitly extern "C".  */
2654   parser->implicit_extern_c = false;
2655
2656   /* String literals should be translated to the execution character set.  */
2657   parser->translate_strings_p = true;
2658
2659   /* We are not parsing a function body.  */
2660   parser->in_function_body = false;
2661
2662   /* The unparsed function queue is empty.  */
2663   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2664
2665   /* There are no classes being defined.  */
2666   parser->num_classes_being_defined = 0;
2667
2668   /* No template parameters apply.  */
2669   parser->num_template_parameter_lists = 0;
2670
2671   return parser;
2672 }
2673
2674 /* Create a cp_lexer structure which will emit the tokens in CACHE
2675    and push it onto the parser's lexer stack.  This is used for delayed
2676    parsing of in-class method bodies and default arguments, and should
2677    not be confused with tentative parsing.  */
2678 static void
2679 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2680 {
2681   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2682   lexer->next = parser->lexer;
2683   parser->lexer = lexer;
2684
2685   /* Move the current source position to that of the first token in the
2686      new lexer.  */
2687   cp_lexer_set_source_position_from_token (lexer->next_token);
2688 }
2689
2690 /* Pop the top lexer off the parser stack.  This is never used for the
2691    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2692 static void
2693 cp_parser_pop_lexer (cp_parser *parser)
2694 {
2695   cp_lexer *lexer = parser->lexer;
2696   parser->lexer = lexer->next;
2697   cp_lexer_destroy (lexer);
2698
2699   /* Put the current source position back where it was before this
2700      lexer was pushed.  */
2701   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2702 }
2703
2704 /* Lexical conventions [gram.lex]  */
2705
2706 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2707    identifier.  */
2708
2709 static tree
2710 cp_parser_identifier (cp_parser* parser)
2711 {
2712   cp_token *token;
2713
2714   /* Look for the identifier.  */
2715   token = cp_parser_require (parser, CPP_NAME, "identifier");
2716   /* Return the value.  */
2717   return token ? token->u.value : error_mark_node;
2718 }
2719
2720 /* Parse a sequence of adjacent string constants.  Returns a
2721    TREE_STRING representing the combined, nul-terminated string
2722    constant.  If TRANSLATE is true, translate the string to the
2723    execution character set.  If WIDE_OK is true, a wide string is
2724    invalid here.
2725
2726    C++98 [lex.string] says that if a narrow string literal token is
2727    adjacent to a wide string literal token, the behavior is undefined.
2728    However, C99 6.4.5p4 says that this results in a wide string literal.
2729    We follow C99 here, for consistency with the C front end.
2730
2731    This code is largely lifted from lex_string() in c-lex.c.
2732
2733    FUTURE: ObjC++ will need to handle @-strings here.  */
2734 static tree
2735 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2736 {
2737   tree value;
2738   bool wide = false;
2739   size_t count;
2740   struct obstack str_ob;
2741   cpp_string str, istr, *strs;
2742   cp_token *tok;
2743
2744   tok = cp_lexer_peek_token (parser->lexer);
2745   if (!cp_parser_is_string_literal (tok))
2746     {
2747       cp_parser_error (parser, "expected string-literal");
2748       return error_mark_node;
2749     }
2750
2751   /* Try to avoid the overhead of creating and destroying an obstack
2752      for the common case of just one string.  */
2753   if (!cp_parser_is_string_literal
2754       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2755     {
2756       cp_lexer_consume_token (parser->lexer);
2757
2758       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2759       str.len = TREE_STRING_LENGTH (tok->u.value);
2760       count = 1;
2761       if (tok->type == CPP_WSTRING)
2762         wide = true;
2763
2764       strs = &str;
2765     }
2766   else
2767     {
2768       gcc_obstack_init (&str_ob);
2769       count = 0;
2770
2771       do
2772         {
2773           cp_lexer_consume_token (parser->lexer);
2774           count++;
2775           str.text = (unsigned char *)TREE_STRING_POINTER (tok->u.value);
2776           str.len = TREE_STRING_LENGTH (tok->u.value);
2777           if (tok->type == CPP_WSTRING)
2778             wide = true;
2779
2780           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2781
2782           tok = cp_lexer_peek_token (parser->lexer);
2783         }
2784       while (cp_parser_is_string_literal (tok));
2785
2786       strs = (cpp_string *) obstack_finish (&str_ob);
2787     }
2788
2789   if (wide && !wide_ok)
2790     {
2791       cp_parser_error (parser, "a wide string is invalid in this context");
2792       wide = false;
2793     }
2794
2795   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2796       (parse_in, strs, count, &istr, wide))
2797     {
2798       value = build_string (istr.len, (char *)istr.text);
2799       free ((void *)istr.text);
2800
2801       TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
2802       value = fix_string_type (value);
2803     }
2804   else
2805     /* cpp_interpret_string has issued an error.  */
2806     value = error_mark_node;
2807
2808   if (count > 1)
2809     obstack_free (&str_ob, 0);
2810
2811   return value;
2812 }
2813
2814
2815 /* Basic concepts [gram.basic]  */
2816
2817 /* Parse a translation-unit.
2818
2819    translation-unit:
2820      declaration-seq [opt]
2821
2822    Returns TRUE if all went well.  */
2823
2824 static bool
2825 cp_parser_translation_unit (cp_parser* parser)
2826 {
2827   /* The address of the first non-permanent object on the declarator
2828      obstack.  */
2829   static void *declarator_obstack_base;
2830
2831   bool success;
2832
2833   /* Create the declarator obstack, if necessary.  */
2834   if (!cp_error_declarator)
2835     {
2836       gcc_obstack_init (&declarator_obstack);
2837       /* Create the error declarator.  */
2838       cp_error_declarator = make_declarator (cdk_error);
2839       /* Create the empty parameter list.  */
2840       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
2841       /* Remember where the base of the declarator obstack lies.  */
2842       declarator_obstack_base = obstack_next_free (&declarator_obstack);
2843     }
2844
2845   cp_parser_declaration_seq_opt (parser);
2846
2847   /* If there are no tokens left then all went well.  */
2848   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2849     {
2850       /* Get rid of the token array; we don't need it any more.  */
2851       cp_lexer_destroy (parser->lexer);
2852       parser->lexer = NULL;
2853
2854       /* This file might have been a context that's implicitly extern
2855          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
2856       if (parser->implicit_extern_c)
2857         {
2858           pop_lang_context ();
2859           parser->implicit_extern_c = false;
2860         }
2861
2862       /* Finish up.  */
2863       finish_translation_unit ();
2864
2865       success = true;
2866     }
2867   else
2868     {
2869       cp_parser_error (parser, "expected declaration");
2870       success = false;
2871     }
2872
2873   /* Make sure the declarator obstack was fully cleaned up.  */
2874   gcc_assert (obstack_next_free (&declarator_obstack)
2875               == declarator_obstack_base);
2876
2877   /* All went well.  */
2878   return success;
2879 }
2880
2881 /* Expressions [gram.expr] */
2882
2883 /* Parse a primary-expression.
2884
2885    primary-expression:
2886      literal
2887      this
2888      ( expression )
2889      id-expression
2890
2891    GNU Extensions:
2892
2893    primary-expression:
2894      ( compound-statement )
2895      __builtin_va_arg ( assignment-expression , type-id )
2896      __builtin_offsetof ( type-id , offsetof-expression )
2897
2898    Objective-C++ Extension:
2899
2900    primary-expression:
2901      objc-expression
2902
2903    literal:
2904      __null
2905
2906    ADDRESS_P is true iff this expression was immediately preceded by
2907    "&" and therefore might denote a pointer-to-member.  CAST_P is true
2908    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
2909    true iff this expression is a template argument.
2910
2911    Returns a representation of the expression.  Upon return, *IDK
2912    indicates what kind of id-expression (if any) was present.  */
2913
2914 static tree
2915 cp_parser_primary_expression (cp_parser *parser,
2916                               bool address_p,
2917                               bool cast_p,
2918                               bool template_arg_p,
2919                               cp_id_kind *idk)
2920 {
2921   cp_token *token;
2922
2923   /* Assume the primary expression is not an id-expression.  */
2924   *idk = CP_ID_KIND_NONE;
2925
2926   /* Peek at the next token.  */
2927   token = cp_lexer_peek_token (parser->lexer);
2928   switch (token->type)
2929     {
2930       /* literal:
2931            integer-literal
2932            character-literal
2933            floating-literal
2934            string-literal
2935            boolean-literal  */
2936     case CPP_CHAR:
2937     case CPP_WCHAR:
2938     case CPP_NUMBER:
2939       token = cp_lexer_consume_token (parser->lexer);
2940       /* Floating-point literals are only allowed in an integral
2941          constant expression if they are cast to an integral or
2942          enumeration type.  */
2943       if (TREE_CODE (token->u.value) == REAL_CST
2944           && parser->integral_constant_expression_p
2945           && pedantic)
2946         {
2947           /* CAST_P will be set even in invalid code like "int(2.7 +
2948              ...)".   Therefore, we have to check that the next token
2949              is sure to end the cast.  */
2950           if (cast_p)
2951             {
2952               cp_token *next_token;
2953
2954               next_token = cp_lexer_peek_token (parser->lexer);
2955               if (/* The comma at the end of an
2956                      enumerator-definition.  */
2957                   next_token->type != CPP_COMMA
2958                   /* The curly brace at the end of an enum-specifier.  */
2959                   && next_token->type != CPP_CLOSE_BRACE
2960                   /* The end of a statement.  */
2961                   && next_token->type != CPP_SEMICOLON
2962                   /* The end of the cast-expression.  */
2963                   && next_token->type != CPP_CLOSE_PAREN
2964                   /* The end of an array bound.  */
2965                   && next_token->type != CPP_CLOSE_SQUARE
2966                   /* The closing ">" in a template-argument-list.  */
2967                   && (next_token->type != CPP_GREATER
2968                       || parser->greater_than_is_operator_p))
2969                 cast_p = false;
2970             }
2971
2972           /* If we are within a cast, then the constraint that the
2973              cast is to an integral or enumeration type will be
2974              checked at that point.  If we are not within a cast, then
2975              this code is invalid.  */
2976           if (!cast_p)
2977             cp_parser_non_integral_constant_expression
2978               (parser, "floating-point literal");
2979         }
2980       return token->u.value;
2981
2982     case CPP_STRING:
2983     case CPP_WSTRING:
2984       /* ??? Should wide strings be allowed when parser->translate_strings_p
2985          is false (i.e. in attributes)?  If not, we can kill the third
2986          argument to cp_parser_string_literal.  */
2987       return cp_parser_string_literal (parser,
2988                                        parser->translate_strings_p,
2989                                        true);
2990
2991     case CPP_OPEN_PAREN:
2992       {
2993         tree expr;
2994         bool saved_greater_than_is_operator_p;
2995
2996         /* Consume the `('.  */
2997         cp_lexer_consume_token (parser->lexer);
2998         /* Within a parenthesized expression, a `>' token is always
2999            the greater-than operator.  */
3000         saved_greater_than_is_operator_p
3001           = parser->greater_than_is_operator_p;
3002         parser->greater_than_is_operator_p = true;
3003         /* If we see `( { ' then we are looking at the beginning of
3004            a GNU statement-expression.  */
3005         if (cp_parser_allow_gnu_extensions_p (parser)
3006             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3007           {
3008             /* Statement-expressions are not allowed by the standard.  */
3009             if (pedantic)
3010               pedwarn ("ISO C++ forbids braced-groups within expressions");
3011
3012             /* And they're not allowed outside of a function-body; you
3013                cannot, for example, write:
3014
3015                  int i = ({ int j = 3; j + 1; });
3016
3017                at class or namespace scope.  */
3018             if (!parser->in_function_body)
3019               error ("statement-expressions are allowed only inside functions");
3020             /* Start the statement-expression.  */
3021             expr = begin_stmt_expr ();
3022             /* Parse the compound-statement.  */
3023             cp_parser_compound_statement (parser, expr, false);
3024             /* Finish up.  */
3025             expr = finish_stmt_expr (expr, false);
3026           }
3027         else
3028           {
3029             /* Parse the parenthesized expression.  */
3030             expr = cp_parser_expression (parser, cast_p);
3031             /* Let the front end know that this expression was
3032                enclosed in parentheses. This matters in case, for
3033                example, the expression is of the form `A::B', since
3034                `&A::B' might be a pointer-to-member, but `&(A::B)' is
3035                not.  */
3036             finish_parenthesized_expr (expr);
3037           }
3038         /* The `>' token might be the end of a template-id or
3039            template-parameter-list now.  */
3040         parser->greater_than_is_operator_p
3041           = saved_greater_than_is_operator_p;
3042         /* Consume the `)'.  */
3043         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
3044           cp_parser_skip_to_end_of_statement (parser);
3045
3046         return expr;
3047       }
3048
3049     case CPP_KEYWORD:
3050       switch (token->keyword)
3051         {
3052           /* These two are the boolean literals.  */
3053         case RID_TRUE:
3054           cp_lexer_consume_token (parser->lexer);
3055           return boolean_true_node;
3056         case RID_FALSE:
3057           cp_lexer_consume_token (parser->lexer);
3058           return boolean_false_node;
3059
3060           /* The `__null' literal.  */
3061         case RID_NULL:
3062           cp_lexer_consume_token (parser->lexer);
3063           return null_node;
3064
3065           /* Recognize the `this' keyword.  */
3066         case RID_THIS:
3067           cp_lexer_consume_token (parser->lexer);
3068           if (parser->local_variables_forbidden_p)
3069             {
3070               error ("%<this%> may not be used in this context");
3071               return error_mark_node;
3072             }
3073           /* Pointers cannot appear in constant-expressions.  */
3074           if (cp_parser_non_integral_constant_expression (parser,
3075                                                           "`this'"))
3076             return error_mark_node;
3077           return finish_this_expr ();
3078
3079           /* The `operator' keyword can be the beginning of an
3080              id-expression.  */
3081         case RID_OPERATOR:
3082           goto id_expression;
3083
3084         case RID_FUNCTION_NAME:
3085         case RID_PRETTY_FUNCTION_NAME:
3086         case RID_C99_FUNCTION_NAME:
3087           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3088              __func__ are the names of variables -- but they are
3089              treated specially.  Therefore, they are handled here,
3090              rather than relying on the generic id-expression logic
3091              below.  Grammatically, these names are id-expressions.
3092
3093              Consume the token.  */
3094           token = cp_lexer_consume_token (parser->lexer);
3095           /* Look up the name.  */
3096           return finish_fname (token->u.value);
3097
3098         case RID_VA_ARG:
3099           {
3100             tree expression;
3101             tree type;
3102
3103             /* The `__builtin_va_arg' construct is used to handle
3104                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3105             cp_lexer_consume_token (parser->lexer);
3106             /* Look for the opening `('.  */
3107             cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3108             /* Now, parse the assignment-expression.  */
3109             expression = cp_parser_assignment_expression (parser,
3110                                                           /*cast_p=*/false);
3111             /* Look for the `,'.  */
3112             cp_parser_require (parser, CPP_COMMA, "`,'");
3113             /* Parse the type-id.  */
3114             type = cp_parser_type_id (parser);
3115             /* Look for the closing `)'.  */
3116             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3117             /* Using `va_arg' in a constant-expression is not
3118                allowed.  */
3119             if (cp_parser_non_integral_constant_expression (parser,
3120                                                             "`va_arg'"))
3121               return error_mark_node;
3122             return build_x_va_arg (expression, type);
3123           }
3124
3125         case RID_OFFSETOF:
3126           return cp_parser_builtin_offsetof (parser);
3127
3128           /* Objective-C++ expressions.  */
3129         case RID_AT_ENCODE:
3130         case RID_AT_PROTOCOL:
3131         case RID_AT_SELECTOR:
3132           return cp_parser_objc_expression (parser);
3133
3134         default:
3135           cp_parser_error (parser, "expected primary-expression");
3136           return error_mark_node;
3137         }
3138
3139       /* An id-expression can start with either an identifier, a
3140          `::' as the beginning of a qualified-id, or the "operator"
3141          keyword.  */
3142     case CPP_NAME:
3143     case CPP_SCOPE:
3144     case CPP_TEMPLATE_ID:
3145     case CPP_NESTED_NAME_SPECIFIER:
3146       {
3147         tree id_expression;
3148         tree decl;
3149         const char *error_msg;
3150         bool template_p;
3151         bool done;
3152
3153       id_expression:
3154         /* Parse the id-expression.  */
3155         id_expression
3156           = cp_parser_id_expression (parser,
3157                                      /*template_keyword_p=*/false,
3158                                      /*check_dependency_p=*/true,
3159                                      &template_p,
3160                                      /*declarator_p=*/false,
3161                                      /*optional_p=*/false);
3162         if (id_expression == error_mark_node)
3163           return error_mark_node;
3164         token = cp_lexer_peek_token (parser->lexer);
3165         done = (token->type != CPP_OPEN_SQUARE
3166                 && token->type != CPP_OPEN_PAREN
3167                 && token->type != CPP_DOT
3168                 && token->type != CPP_DEREF
3169                 && token->type != CPP_PLUS_PLUS
3170                 && token->type != CPP_MINUS_MINUS);
3171         /* If we have a template-id, then no further lookup is
3172            required.  If the template-id was for a template-class, we
3173            will sometimes have a TYPE_DECL at this point.  */
3174         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3175                  || TREE_CODE (id_expression) == TYPE_DECL)
3176           decl = id_expression;
3177         /* Look up the name.  */
3178         else
3179           {
3180             tree ambiguous_decls;
3181
3182             decl = cp_parser_lookup_name (parser, id_expression,
3183                                           none_type,
3184                                           template_p,
3185                                           /*is_namespace=*/false,
3186                                           /*check_dependency=*/true,
3187                                           &ambiguous_decls);
3188             /* If the lookup was ambiguous, an error will already have
3189                been issued.  */
3190             if (ambiguous_decls)
3191               return error_mark_node;
3192
3193             /* In Objective-C++, an instance variable (ivar) may be preferred
3194                to whatever cp_parser_lookup_name() found.  */
3195             decl = objc_lookup_ivar (decl, id_expression);
3196
3197             /* If name lookup gives us a SCOPE_REF, then the
3198                qualifying scope was dependent.  */
3199             if (TREE_CODE (decl) == SCOPE_REF)
3200               {
3201                 /* At this point, we do not know if DECL is a valid
3202                    integral constant expression.  We assume that it is
3203                    in fact such an expression, so that code like:
3204
3205                       template <int N> struct A {
3206                         int a[B<N>::i];
3207                       };
3208                      
3209                    is accepted.  At template-instantiation time, we
3210                    will check that B<N>::i is actually a constant.  */
3211                 return decl;
3212               }
3213             /* Check to see if DECL is a local variable in a context
3214                where that is forbidden.  */
3215             if (parser->local_variables_forbidden_p
3216                 && local_variable_p (decl))
3217               {
3218                 /* It might be that we only found DECL because we are
3219                    trying to be generous with pre-ISO scoping rules.
3220                    For example, consider:
3221
3222                      int i;
3223                      void g() {
3224                        for (int i = 0; i < 10; ++i) {}
3225                        extern void f(int j = i);
3226                      }
3227
3228                    Here, name look up will originally find the out
3229                    of scope `i'.  We need to issue a warning message,
3230                    but then use the global `i'.  */
3231                 decl = check_for_out_of_scope_variable (decl);
3232                 if (local_variable_p (decl))
3233                   {
3234                     error ("local variable %qD may not appear in this context",
3235                            decl);
3236                     return error_mark_node;
3237                   }
3238               }
3239           }
3240
3241         decl = (finish_id_expression
3242                 (id_expression, decl, parser->scope,
3243                  idk,
3244                  parser->integral_constant_expression_p,
3245                  parser->allow_non_integral_constant_expression_p,
3246                  &parser->non_integral_constant_expression_p,
3247                  template_p, done, address_p,
3248                  template_arg_p,
3249                  &error_msg));
3250         if (error_msg)
3251           cp_parser_error (parser, error_msg);
3252         return decl;
3253       }
3254
3255       /* Anything else is an error.  */
3256     default:
3257       /* ...unless we have an Objective-C++ message or string literal, that is.  */
3258       if (c_dialect_objc ()
3259           && (token->type == CPP_OPEN_SQUARE || token->type == CPP_OBJC_STRING))
3260         return cp_parser_objc_expression (parser);
3261
3262       cp_parser_error (parser, "expected primary-expression");
3263       return error_mark_node;
3264     }
3265 }
3266
3267 /* Parse an id-expression.
3268
3269    id-expression:
3270      unqualified-id
3271      qualified-id
3272
3273    qualified-id:
3274      :: [opt] nested-name-specifier template [opt] unqualified-id
3275      :: identifier
3276      :: operator-function-id
3277      :: template-id
3278
3279    Return a representation of the unqualified portion of the
3280    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3281    a `::' or nested-name-specifier.
3282
3283    Often, if the id-expression was a qualified-id, the caller will
3284    want to make a SCOPE_REF to represent the qualified-id.  This
3285    function does not do this in order to avoid wastefully creating
3286    SCOPE_REFs when they are not required.
3287
3288    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3289    `template' keyword.
3290
3291    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3292    uninstantiated templates.
3293
3294    If *TEMPLATE_P is non-NULL, it is set to true iff the
3295    `template' keyword is used to explicitly indicate that the entity
3296    named is a template.
3297
3298    If DECLARATOR_P is true, the id-expression is appearing as part of
3299    a declarator, rather than as part of an expression.  */
3300
3301 static tree
3302 cp_parser_id_expression (cp_parser *parser,
3303                          bool template_keyword_p,
3304                          bool check_dependency_p,
3305                          bool *template_p,
3306                          bool declarator_p,
3307                          bool optional_p)
3308 {
3309   bool global_scope_p;
3310   bool nested_name_specifier_p;
3311
3312   /* Assume the `template' keyword was not used.  */
3313   if (template_p)
3314     *template_p = template_keyword_p;
3315
3316   /* Look for the optional `::' operator.  */
3317   global_scope_p
3318     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3319        != NULL_TREE);
3320   /* Look for the optional nested-name-specifier.  */
3321   nested_name_specifier_p
3322     = (cp_parser_nested_name_specifier_opt (parser,
3323                                             /*typename_keyword_p=*/false,
3324                                             check_dependency_p,
3325                                             /*type_p=*/false,
3326                                             declarator_p)
3327        != NULL_TREE);
3328   /* If there is a nested-name-specifier, then we are looking at
3329      the first qualified-id production.  */
3330   if (nested_name_specifier_p)
3331     {
3332       tree saved_scope;
3333       tree saved_object_scope;
3334       tree saved_qualifying_scope;
3335       tree unqualified_id;
3336       bool is_template;
3337
3338       /* See if the next token is the `template' keyword.  */
3339       if (!template_p)
3340         template_p = &is_template;
3341       *template_p = cp_parser_optional_template_keyword (parser);
3342       /* Name lookup we do during the processing of the
3343          unqualified-id might obliterate SCOPE.  */
3344       saved_scope = parser->scope;
3345       saved_object_scope = parser->object_scope;
3346       saved_qualifying_scope = parser->qualifying_scope;
3347       /* Process the final unqualified-id.  */
3348       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3349                                                  check_dependency_p,
3350                                                  declarator_p,
3351                                                  /*optional_p=*/false);
3352       /* Restore the SAVED_SCOPE for our caller.  */
3353       parser->scope = saved_scope;
3354       parser->object_scope = saved_object_scope;
3355       parser->qualifying_scope = saved_qualifying_scope;
3356
3357       return unqualified_id;
3358     }
3359   /* Otherwise, if we are in global scope, then we are looking at one
3360      of the other qualified-id productions.  */
3361   else if (global_scope_p)
3362     {
3363       cp_token *token;
3364       tree id;
3365
3366       /* Peek at the next token.  */
3367       token = cp_lexer_peek_token (parser->lexer);
3368
3369       /* If it's an identifier, and the next token is not a "<", then
3370          we can avoid the template-id case.  This is an optimization
3371          for this common case.  */
3372       if (token->type == CPP_NAME
3373           && !cp_parser_nth_token_starts_template_argument_list_p
3374                (parser, 2))
3375         return cp_parser_identifier (parser);
3376
3377       cp_parser_parse_tentatively (parser);
3378       /* Try a template-id.  */
3379       id = cp_parser_template_id (parser,
3380                                   /*template_keyword_p=*/false,
3381                                   /*check_dependency_p=*/true,
3382                                   declarator_p);
3383       /* If that worked, we're done.  */
3384       if (cp_parser_parse_definitely (parser))
3385         return id;
3386
3387       /* Peek at the next token.  (Changes in the token buffer may
3388          have invalidated the pointer obtained above.)  */
3389       token = cp_lexer_peek_token (parser->lexer);
3390
3391       switch (token->type)
3392         {
3393         case CPP_NAME:
3394           return cp_parser_identifier (parser);
3395
3396         case CPP_KEYWORD:
3397           if (token->keyword == RID_OPERATOR)
3398             return cp_parser_operator_function_id (parser);
3399           /* Fall through.  */
3400
3401         default:
3402           cp_parser_error (parser, "expected id-expression");
3403           return error_mark_node;
3404         }
3405     }
3406   else
3407     return cp_parser_unqualified_id (parser, template_keyword_p,
3408                                      /*check_dependency_p=*/true,
3409                                      declarator_p,
3410                                      optional_p);
3411 }
3412
3413 /* Parse an unqualified-id.
3414
3415    unqualified-id:
3416      identifier
3417      operator-function-id
3418      conversion-function-id
3419      ~ class-name
3420      template-id
3421
3422    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3423    keyword, in a construct like `A::template ...'.
3424
3425    Returns a representation of unqualified-id.  For the `identifier'
3426    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3427    production a BIT_NOT_EXPR is returned; the operand of the
3428    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3429    other productions, see the documentation accompanying the
3430    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3431    names are looked up in uninstantiated templates.  If DECLARATOR_P
3432    is true, the unqualified-id is appearing as part of a declarator,
3433    rather than as part of an expression.  */
3434
3435 static tree
3436 cp_parser_unqualified_id (cp_parser* parser,
3437                           bool template_keyword_p,
3438                           bool check_dependency_p,
3439                           bool declarator_p,
3440                           bool optional_p)
3441 {
3442   cp_token *token;
3443
3444   /* Peek at the next token.  */
3445   token = cp_lexer_peek_token (parser->lexer);
3446
3447   switch (token->type)
3448     {
3449     case CPP_NAME:
3450       {
3451         tree id;
3452
3453         /* We don't know yet whether or not this will be a
3454            template-id.  */
3455         cp_parser_parse_tentatively (parser);
3456         /* Try a template-id.  */
3457         id = cp_parser_template_id (parser, template_keyword_p,
3458                                     check_dependency_p,
3459                                     declarator_p);
3460         /* If it worked, we're done.  */
3461         if (cp_parser_parse_definitely (parser))
3462           return id;
3463         /* Otherwise, it's an ordinary identifier.  */
3464         return cp_parser_identifier (parser);
3465       }
3466
3467     case CPP_TEMPLATE_ID:
3468       return cp_parser_template_id (parser, template_keyword_p,
3469                                     check_dependency_p,
3470                                     declarator_p);
3471
3472     case CPP_COMPL:
3473       {
3474         tree type_decl;
3475         tree qualifying_scope;
3476         tree object_scope;
3477         tree scope;
3478         bool done;
3479
3480         /* Consume the `~' token.  */
3481         cp_lexer_consume_token (parser->lexer);
3482         /* Parse the class-name.  The standard, as written, seems to
3483            say that:
3484
3485              template <typename T> struct S { ~S (); };
3486              template <typename T> S<T>::~S() {}
3487
3488            is invalid, since `~' must be followed by a class-name, but
3489            `S<T>' is dependent, and so not known to be a class.
3490            That's not right; we need to look in uninstantiated
3491            templates.  A further complication arises from:
3492
3493              template <typename T> void f(T t) {
3494                t.T::~T();
3495              }
3496
3497            Here, it is not possible to look up `T' in the scope of `T'
3498            itself.  We must look in both the current scope, and the
3499            scope of the containing complete expression.
3500
3501            Yet another issue is:
3502
3503              struct S {
3504                int S;
3505                ~S();
3506              };
3507
3508              S::~S() {}
3509
3510            The standard does not seem to say that the `S' in `~S'
3511            should refer to the type `S' and not the data member
3512            `S::S'.  */
3513
3514         /* DR 244 says that we look up the name after the "~" in the
3515            same scope as we looked up the qualifying name.  That idea
3516            isn't fully worked out; it's more complicated than that.  */
3517         scope = parser->scope;
3518         object_scope = parser->object_scope;
3519         qualifying_scope = parser->qualifying_scope;
3520
3521         /* Check for invalid scopes.  */
3522         if (scope == error_mark_node)
3523           {
3524             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3525               cp_lexer_consume_token (parser->lexer);
3526             return error_mark_node;
3527           }
3528         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3529           {
3530             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3531               error ("scope %qT before %<~%> is not a class-name", scope);
3532             cp_parser_simulate_error (parser);
3533             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3534               cp_lexer_consume_token (parser->lexer);
3535             return error_mark_node;
3536           }
3537         gcc_assert (!scope || TYPE_P (scope));
3538
3539         /* If the name is of the form "X::~X" it's OK.  */
3540         token = cp_lexer_peek_token (parser->lexer);
3541         if (scope
3542             && token->type == CPP_NAME
3543             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3544                 == CPP_OPEN_PAREN)
3545             && constructor_name_p (token->u.value, scope))
3546           {
3547             cp_lexer_consume_token (parser->lexer);
3548             return build_nt (BIT_NOT_EXPR, scope);
3549           }
3550
3551         /* If there was an explicit qualification (S::~T), first look
3552            in the scope given by the qualification (i.e., S).  */
3553         done = false;
3554         type_decl = NULL_TREE;
3555         if (scope)
3556           {
3557             cp_parser_parse_tentatively (parser);
3558             type_decl = cp_parser_class_name (parser,
3559                                               /*typename_keyword_p=*/false,
3560                                               /*template_keyword_p=*/false,
3561                                               none_type,
3562                                               /*check_dependency=*/false,
3563                                               /*class_head_p=*/false,
3564                                               declarator_p);
3565             if (cp_parser_parse_definitely (parser))
3566               done = true;
3567           }
3568         /* In "N::S::~S", look in "N" as well.  */
3569         if (!done && scope && qualifying_scope)
3570           {
3571             cp_parser_parse_tentatively (parser);
3572             parser->scope = qualifying_scope;
3573             parser->object_scope = NULL_TREE;
3574             parser->qualifying_scope = NULL_TREE;
3575             type_decl
3576               = cp_parser_class_name (parser,
3577                                       /*typename_keyword_p=*/false,
3578                                       /*template_keyword_p=*/false,
3579                                       none_type,
3580                                       /*check_dependency=*/false,
3581                                       /*class_head_p=*/false,
3582                                       declarator_p);
3583             if (cp_parser_parse_definitely (parser))
3584               done = true;
3585           }
3586         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3587         else if (!done && object_scope)
3588           {
3589             cp_parser_parse_tentatively (parser);
3590             parser->scope = object_scope;
3591             parser->object_scope = NULL_TREE;
3592             parser->qualifying_scope = NULL_TREE;
3593             type_decl
3594               = cp_parser_class_name (parser,
3595                                       /*typename_keyword_p=*/false,
3596                                       /*template_keyword_p=*/false,
3597                                       none_type,
3598                                       /*check_dependency=*/false,
3599                                       /*class_head_p=*/false,
3600                                       declarator_p);
3601             if (cp_parser_parse_definitely (parser))
3602               done = true;
3603           }
3604         /* Look in the surrounding context.  */
3605         if (!done)
3606           {
3607             parser->scope = NULL_TREE;
3608             parser->object_scope = NULL_TREE;
3609             parser->qualifying_scope = NULL_TREE;
3610             type_decl
3611               = cp_parser_class_name (parser,
3612                                       /*typename_keyword_p=*/false,
3613                                       /*template_keyword_p=*/false,
3614                                       none_type,
3615                                       /*check_dependency=*/false,
3616                                       /*class_head_p=*/false,
3617                                       declarator_p);
3618           }
3619         /* If an error occurred, assume that the name of the
3620            destructor is the same as the name of the qualifying
3621            class.  That allows us to keep parsing after running
3622            into ill-formed destructor names.  */
3623         if (type_decl == error_mark_node && scope)
3624           return build_nt (BIT_NOT_EXPR, scope);
3625         else if (type_decl == error_mark_node)
3626           return error_mark_node;
3627
3628         /* Check that destructor name and scope match.  */
3629         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3630           {
3631             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3632               error ("declaration of %<~%T%> as member of %qT",
3633                      type_decl, scope);
3634             cp_parser_simulate_error (parser);
3635             return error_mark_node;
3636           }
3637
3638         /* [class.dtor]
3639
3640            A typedef-name that names a class shall not be used as the
3641            identifier in the declarator for a destructor declaration.  */
3642         if (declarator_p
3643             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3644             && !DECL_SELF_REFERENCE_P (type_decl)
3645             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3646           error ("typedef-name %qD used as destructor declarator",
3647                  type_decl);
3648
3649         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3650       }
3651
3652     case CPP_KEYWORD:
3653       if (token->keyword == RID_OPERATOR)
3654         {
3655           tree id;
3656
3657           /* This could be a template-id, so we try that first.  */
3658           cp_parser_parse_tentatively (parser);
3659           /* Try a template-id.  */
3660           id = cp_parser_template_id (parser, template_keyword_p,
3661                                       /*check_dependency_p=*/true,
3662                                       declarator_p);
3663           /* If that worked, we're done.  */
3664           if (cp_parser_parse_definitely (parser))
3665             return id;
3666           /* We still don't know whether we're looking at an
3667              operator-function-id or a conversion-function-id.  */
3668           cp_parser_parse_tentatively (parser);
3669           /* Try an operator-function-id.  */
3670           id = cp_parser_operator_function_id (parser);
3671           /* If that didn't work, try a conversion-function-id.  */
3672           if (!cp_parser_parse_definitely (parser))
3673             id = cp_parser_conversion_function_id (parser);
3674
3675           return id;
3676         }
3677       /* Fall through.  */
3678
3679     default:
3680       if (optional_p)
3681         return NULL_TREE;
3682       cp_parser_error (parser, "expected unqualified-id");
3683       return error_mark_node;
3684     }
3685 }
3686
3687 /* Parse an (optional) nested-name-specifier.
3688
3689    nested-name-specifier:
3690      class-or-namespace-name :: nested-name-specifier [opt]
3691      class-or-namespace-name :: template nested-name-specifier [opt]
3692
3693    PARSER->SCOPE should be set appropriately before this function is
3694    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3695    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3696    in name lookups.
3697
3698    Sets PARSER->SCOPE to the class (TYPE) or namespace
3699    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3700    it unchanged if there is no nested-name-specifier.  Returns the new
3701    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3702
3703    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3704    part of a declaration and/or decl-specifier.  */
3705
3706 static tree
3707 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3708                                      bool typename_keyword_p,
3709                                      bool check_dependency_p,
3710                                      bool type_p,
3711                                      bool is_declaration)
3712 {
3713   bool success = false;
3714   cp_token_position start = 0;
3715   cp_token *token;
3716
3717   /* Remember where the nested-name-specifier starts.  */
3718   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3719     {
3720       start = cp_lexer_token_position (parser->lexer, false);
3721       push_deferring_access_checks (dk_deferred);
3722     }
3723
3724   while (true)
3725     {
3726       tree new_scope;
3727       tree old_scope;
3728       tree saved_qualifying_scope;
3729       bool template_keyword_p;
3730
3731       /* Spot cases that cannot be the beginning of a
3732          nested-name-specifier.  */
3733       token = cp_lexer_peek_token (parser->lexer);
3734
3735       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3736          the already parsed nested-name-specifier.  */
3737       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3738         {
3739           /* Grab the nested-name-specifier and continue the loop.  */
3740           cp_parser_pre_parsed_nested_name_specifier (parser);
3741           /* If we originally encountered this nested-name-specifier
3742              with IS_DECLARATION set to false, we will not have
3743              resolved TYPENAME_TYPEs, so we must do so here.  */
3744           if (is_declaration
3745               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3746             {
3747               new_scope = resolve_typename_type (parser->scope,
3748                                                  /*only_current_p=*/false);
3749               if (new_scope != error_mark_node)
3750                 parser->scope = new_scope;
3751             }
3752           success = true;
3753           continue;
3754         }
3755
3756       /* Spot cases that cannot be the beginning of a
3757          nested-name-specifier.  On the second and subsequent times
3758          through the loop, we look for the `template' keyword.  */
3759       if (success && token->keyword == RID_TEMPLATE)
3760         ;
3761       /* A template-id can start a nested-name-specifier.  */
3762       else if (token->type == CPP_TEMPLATE_ID)
3763         ;
3764       else
3765         {
3766           /* If the next token is not an identifier, then it is
3767              definitely not a class-or-namespace-name.  */
3768           if (token->type != CPP_NAME)
3769             break;
3770           /* If the following token is neither a `<' (to begin a
3771              template-id), nor a `::', then we are not looking at a
3772              nested-name-specifier.  */
3773           token = cp_lexer_peek_nth_token (parser->lexer, 2);
3774           if (token->type != CPP_SCOPE
3775               && !cp_parser_nth_token_starts_template_argument_list_p
3776                   (parser, 2))
3777             break;
3778         }
3779
3780       /* The nested-name-specifier is optional, so we parse
3781          tentatively.  */
3782       cp_parser_parse_tentatively (parser);
3783
3784       /* Look for the optional `template' keyword, if this isn't the
3785          first time through the loop.  */
3786       if (success)
3787         template_keyword_p = cp_parser_optional_template_keyword (parser);
3788       else
3789         template_keyword_p = false;
3790
3791       /* Save the old scope since the name lookup we are about to do
3792          might destroy it.  */
3793       old_scope = parser->scope;
3794       saved_qualifying_scope = parser->qualifying_scope;
3795       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
3796          look up names in "X<T>::I" in order to determine that "Y" is
3797          a template.  So, if we have a typename at this point, we make
3798          an effort to look through it.  */
3799       if (is_declaration
3800           && !typename_keyword_p
3801           && parser->scope
3802           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3803         parser->scope = resolve_typename_type (parser->scope,
3804                                                /*only_current_p=*/false);
3805       /* Parse the qualifying entity.  */
3806       new_scope
3807         = cp_parser_class_or_namespace_name (parser,
3808                                              typename_keyword_p,
3809                                              template_keyword_p,
3810                                              check_dependency_p,
3811                                              type_p,
3812                                              is_declaration);
3813       /* Look for the `::' token.  */
3814       cp_parser_require (parser, CPP_SCOPE, "`::'");
3815
3816       /* If we found what we wanted, we keep going; otherwise, we're
3817          done.  */
3818       if (!cp_parser_parse_definitely (parser))
3819         {
3820           bool error_p = false;
3821
3822           /* Restore the OLD_SCOPE since it was valid before the
3823              failed attempt at finding the last
3824              class-or-namespace-name.  */
3825           parser->scope = old_scope;
3826           parser->qualifying_scope = saved_qualifying_scope;
3827           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3828             break;
3829           /* If the next token is an identifier, and the one after
3830              that is a `::', then any valid interpretation would have
3831              found a class-or-namespace-name.  */
3832           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3833                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3834                      == CPP_SCOPE)
3835                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3836                      != CPP_COMPL))
3837             {
3838               token = cp_lexer_consume_token (parser->lexer);
3839               if (!error_p)
3840                 {
3841                   if (!token->ambiguous_p)
3842                     {
3843                       tree decl;
3844                       tree ambiguous_decls;
3845
3846                       decl = cp_parser_lookup_name (parser, token->u.value,
3847                                                     none_type,
3848                                                     /*is_template=*/false,
3849                                                     /*is_namespace=*/false,
3850                                                     /*check_dependency=*/true,
3851                                                     &ambiguous_decls);
3852                       if (TREE_CODE (decl) == TEMPLATE_DECL)
3853                         error ("%qD used without template parameters", decl);
3854                       else if (ambiguous_decls)
3855                         {
3856                           error ("reference to %qD is ambiguous",
3857                                  token->u.value);
3858                           print_candidates (ambiguous_decls);
3859                           decl = error_mark_node;
3860                         }
3861                       else
3862                         cp_parser_name_lookup_error
3863                           (parser, token->u.value, decl,
3864                            "is not a class or namespace");
3865                     }
3866                   parser->scope = error_mark_node;
3867                   error_p = true;
3868                   /* Treat this as a successful nested-name-specifier
3869                      due to:
3870
3871                      [basic.lookup.qual]
3872
3873                      If the name found is not a class-name (clause
3874                      _class_) or namespace-name (_namespace.def_), the
3875                      program is ill-formed.  */
3876                   success = true;
3877                 }
3878               cp_lexer_consume_token (parser->lexer);
3879             }
3880           break;
3881         }
3882       /* We've found one valid nested-name-specifier.  */
3883       success = true;
3884       /* Name lookup always gives us a DECL.  */
3885       if (TREE_CODE (new_scope) == TYPE_DECL)
3886         new_scope = TREE_TYPE (new_scope);
3887       /* Uses of "template" must be followed by actual templates.  */
3888       if (template_keyword_p
3889           && !(CLASS_TYPE_P (new_scope)
3890                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
3891                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
3892                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
3893           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
3894                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
3895                    == TEMPLATE_ID_EXPR)))
3896         pedwarn (TYPE_P (new_scope)
3897                  ? "%qT is not a template"
3898                  : "%qD is not a template",
3899                  new_scope);
3900       /* If it is a class scope, try to complete it; we are about to
3901          be looking up names inside the class.  */
3902       if (TYPE_P (new_scope)
3903           /* Since checking types for dependency can be expensive,
3904              avoid doing it if the type is already complete.  */
3905           && !COMPLETE_TYPE_P (new_scope)
3906           /* Do not try to complete dependent types.  */
3907           && !dependent_type_p (new_scope))
3908         new_scope = complete_type (new_scope);
3909       /* Make sure we look in the right scope the next time through
3910          the loop.  */
3911       parser->scope = new_scope;
3912     }
3913
3914   /* If parsing tentatively, replace the sequence of tokens that makes
3915      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
3916      token.  That way, should we re-parse the token stream, we will
3917      not have to repeat the effort required to do the parse, nor will
3918      we issue duplicate error messages.  */
3919   if (success && start)
3920     {
3921       cp_token *token;
3922
3923       token = cp_lexer_token_at (parser->lexer, start);
3924       /* Reset the contents of the START token.  */
3925       token->type = CPP_NESTED_NAME_SPECIFIER;
3926       /* Retrieve any deferred checks.  Do not pop this access checks yet
3927          so the memory will not be reclaimed during token replacing below.  */
3928       token->u.tree_check_value = GGC_CNEW (struct tree_check);
3929       token->u.tree_check_value->value = parser->scope;
3930       token->u.tree_check_value->checks = get_deferred_access_checks ();
3931       token->u.tree_check_value->qualifying_scope =
3932         parser->qualifying_scope;
3933       token->keyword = RID_MAX;
3934
3935       /* Purge all subsequent tokens.  */
3936       cp_lexer_purge_tokens_after (parser->lexer, start);
3937     }
3938
3939   if (start)
3940     pop_to_parent_deferring_access_checks ();
3941
3942   return success ? parser->scope : NULL_TREE;
3943 }
3944
3945 /* Parse a nested-name-specifier.  See
3946    cp_parser_nested_name_specifier_opt for details.  This function
3947    behaves identically, except that it will an issue an error if no
3948    nested-name-specifier is present.  */
3949
3950 static tree
3951 cp_parser_nested_name_specifier (cp_parser *parser,
3952                                  bool typename_keyword_p,
3953                                  bool check_dependency_p,
3954                                  bool type_p,
3955                                  bool is_declaration)
3956 {
3957   tree scope;
3958
3959   /* Look for the nested-name-specifier.  */
3960   scope = cp_parser_nested_name_specifier_opt (parser,
3961                                                typename_keyword_p,
3962                                                check_dependency_p,
3963                                                type_p,
3964                                                is_declaration);
3965   /* If it was not present, issue an error message.  */
3966   if (!scope)
3967     {
3968       cp_parser_error (parser, "expected nested-name-specifier");
3969       parser->scope = NULL_TREE;
3970     }
3971
3972   return scope;
3973 }
3974
3975 /* Parse a class-or-namespace-name.
3976
3977    class-or-namespace-name:
3978      class-name
3979      namespace-name
3980
3981    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
3982    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
3983    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
3984    TYPE_P is TRUE iff the next name should be taken as a class-name,
3985    even the same name is declared to be another entity in the same
3986    scope.
3987
3988    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
3989    specified by the class-or-namespace-name.  If neither is found the
3990    ERROR_MARK_NODE is returned.  */
3991
3992 static tree
3993 cp_parser_class_or_namespace_name (cp_parser *parser,
3994                                    bool typename_keyword_p,
3995                                    bool template_keyword_p,
3996                                    bool check_dependency_p,
3997                                    bool type_p,
3998                                    bool is_declaration)
3999 {
4000   tree saved_scope;
4001   tree saved_qualifying_scope;
4002   tree saved_object_scope;
4003   tree scope;
4004   bool only_class_p;
4005
4006   /* Before we try to parse the class-name, we must save away the
4007      current PARSER->SCOPE since cp_parser_class_name will destroy
4008      it.  */
4009   saved_scope = parser->scope;
4010   saved_qualifying_scope = parser->qualifying_scope;
4011   saved_object_scope = parser->object_scope;
4012   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4013      there is no need to look for a namespace-name.  */
4014   only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
4015   if (!only_class_p)
4016     cp_parser_parse_tentatively (parser);
4017   scope = cp_parser_class_name (parser,
4018                                 typename_keyword_p,
4019                                 template_keyword_p,
4020                                 type_p ? class_type : none_type,
4021                                 check_dependency_p,
4022                                 /*class_head_p=*/false,
4023                                 is_declaration);
4024   /* If that didn't work, try for a namespace-name.  */
4025   if (!only_class_p && !cp_parser_parse_definitely (parser))
4026     {
4027       /* Restore the saved scope.  */
4028       parser->scope = saved_scope;
4029       parser->qualifying_scope = saved_qualifying_scope;
4030       parser->object_scope = saved_object_scope;
4031       /* If we are not looking at an identifier followed by the scope
4032          resolution operator, then this is not part of a
4033          nested-name-specifier.  (Note that this function is only used
4034          to parse the components of a nested-name-specifier.)  */
4035       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4036           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4037         return error_mark_node;
4038       scope = cp_parser_namespace_name (parser);
4039     }
4040
4041   return scope;
4042 }
4043
4044 /* Parse a postfix-expression.
4045
4046    postfix-expression:
4047      primary-expression
4048      postfix-expression [ expression ]
4049      postfix-expression ( expression-list [opt] )
4050      simple-type-specifier ( expression-list [opt] )
4051      typename :: [opt] nested-name-specifier identifier
4052        ( expression-list [opt] )
4053      typename :: [opt] nested-name-specifier template [opt] template-id
4054        ( expression-list [opt] )
4055      postfix-expression . template [opt] id-expression
4056      postfix-expression -> template [opt] id-expression
4057      postfix-expression . pseudo-destructor-name
4058      postfix-expression -> pseudo-destructor-name
4059      postfix-expression ++
4060      postfix-expression --
4061      dynamic_cast < type-id > ( expression )
4062      static_cast < type-id > ( expression )
4063      reinterpret_cast < type-id > ( expression )
4064      const_cast < type-id > ( expression )
4065      typeid ( expression )
4066      typeid ( type-id )
4067
4068    GNU Extension:
4069
4070    postfix-expression:
4071      ( type-id ) { initializer-list , [opt] }
4072
4073    This extension is a GNU version of the C99 compound-literal
4074    construct.  (The C99 grammar uses `type-name' instead of `type-id',
4075    but they are essentially the same concept.)
4076
4077    If ADDRESS_P is true, the postfix expression is the operand of the
4078    `&' operator.  CAST_P is true if this expression is the target of a
4079    cast.
4080
4081    Returns a representation of the expression.  */
4082
4083 static tree
4084 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
4085 {
4086   cp_token *token;
4087   enum rid keyword;
4088   cp_id_kind idk = CP_ID_KIND_NONE;
4089   tree postfix_expression = NULL_TREE;
4090
4091   /* Peek at the next token.  */
4092   token = cp_lexer_peek_token (parser->lexer);
4093   /* Some of the productions are determined by keywords.  */
4094   keyword = token->keyword;
4095   switch (keyword)
4096     {
4097     case RID_DYNCAST:
4098     case RID_STATCAST:
4099     case RID_REINTCAST:
4100     case RID_CONSTCAST:
4101       {
4102         tree type;
4103         tree expression;
4104         const char *saved_message;
4105
4106         /* All of these can be handled in the same way from the point
4107            of view of parsing.  Begin by consuming the token
4108            identifying the cast.  */
4109         cp_lexer_consume_token (parser->lexer);
4110
4111         /* New types cannot be defined in the cast.  */
4112         saved_message = parser->type_definition_forbidden_message;
4113         parser->type_definition_forbidden_message
4114           = "types may not be defined in casts";
4115
4116         /* Look for the opening `<'.  */
4117         cp_parser_require (parser, CPP_LESS, "`<'");
4118         /* Parse the type to which we are casting.  */
4119         type = cp_parser_type_id (parser);
4120         /* Look for the closing `>'.  */
4121         cp_parser_require (parser, CPP_GREATER, "`>'");
4122         /* Restore the old message.  */
4123         parser->type_definition_forbidden_message = saved_message;
4124
4125         /* And the expression which is being cast.  */
4126         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4127         expression = cp_parser_expression (parser, /*cast_p=*/true);
4128         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4129
4130         /* Only type conversions to integral or enumeration types
4131            can be used in constant-expressions.  */
4132         if (!cast_valid_in_integral_constant_expression_p (type)
4133             && (cp_parser_non_integral_constant_expression
4134                 (parser,
4135                  "a cast to a type other than an integral or "
4136                  "enumeration type")))
4137           return error_mark_node;
4138
4139         switch (keyword)
4140           {
4141           case RID_DYNCAST:
4142             postfix_expression
4143               = build_dynamic_cast (type, expression);
4144             break;
4145           case RID_STATCAST:
4146             postfix_expression
4147               = build_static_cast (type, expression);
4148             break;
4149           case RID_REINTCAST:
4150             postfix_expression
4151               = build_reinterpret_cast (type, expression);
4152             break;
4153           case RID_CONSTCAST:
4154             postfix_expression
4155               = build_const_cast (type, expression);
4156             break;
4157           default:
4158             gcc_unreachable ();
4159           }
4160       }
4161       break;
4162
4163     case RID_TYPEID:
4164       {
4165         tree type;
4166         const char *saved_message;
4167         bool saved_in_type_id_in_expr_p;
4168
4169         /* Consume the `typeid' token.  */
4170         cp_lexer_consume_token (parser->lexer);
4171         /* Look for the `(' token.  */
4172         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4173         /* Types cannot be defined in a `typeid' expression.  */
4174         saved_message = parser->type_definition_forbidden_message;
4175         parser->type_definition_forbidden_message
4176           = "types may not be defined in a `typeid\' expression";
4177         /* We can't be sure yet whether we're looking at a type-id or an
4178            expression.  */
4179         cp_parser_parse_tentatively (parser);
4180         /* Try a type-id first.  */
4181         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4182         parser->in_type_id_in_expr_p = true;
4183         type = cp_parser_type_id (parser);
4184         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4185         /* Look for the `)' token.  Otherwise, we can't be sure that
4186            we're not looking at an expression: consider `typeid (int
4187            (3))', for example.  */
4188         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4189         /* If all went well, simply lookup the type-id.  */
4190         if (cp_parser_parse_definitely (parser))
4191           postfix_expression = get_typeid (type);
4192         /* Otherwise, fall back to the expression variant.  */
4193         else
4194           {
4195             tree expression;
4196
4197             /* Look for an expression.  */
4198             expression = cp_parser_expression (parser, /*cast_p=*/false);
4199             /* Compute its typeid.  */
4200             postfix_expression = build_typeid (expression);
4201             /* Look for the `)' token.  */
4202             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4203           }
4204         /* Restore the saved message.  */
4205         parser->type_definition_forbidden_message = saved_message;
4206         /* `typeid' may not appear in an integral constant expression.  */
4207         if (cp_parser_non_integral_constant_expression(parser,
4208                                                        "`typeid' operator"))
4209           return error_mark_node;
4210       }
4211       break;
4212
4213     case RID_TYPENAME:
4214       {
4215         tree type;
4216         /* The syntax permitted here is the same permitted for an
4217            elaborated-type-specifier.  */
4218         type = cp_parser_elaborated_type_specifier (parser,
4219                                                     /*is_friend=*/false,
4220                                                     /*is_declaration=*/false);
4221         postfix_expression = cp_parser_functional_cast (parser, type);
4222       }
4223       break;
4224
4225     default:
4226       {
4227         tree type;
4228
4229         /* If the next thing is a simple-type-specifier, we may be
4230            looking at a functional cast.  We could also be looking at
4231            an id-expression.  So, we try the functional cast, and if
4232            that doesn't work we fall back to the primary-expression.  */
4233         cp_parser_parse_tentatively (parser);
4234         /* Look for the simple-type-specifier.  */
4235         type = cp_parser_simple_type_specifier (parser,
4236                                                 /*decl_specs=*/NULL,
4237                                                 CP_PARSER_FLAGS_NONE);
4238         /* Parse the cast itself.  */
4239         if (!cp_parser_error_occurred (parser))
4240           postfix_expression
4241             = cp_parser_functional_cast (parser, type);
4242         /* If that worked, we're done.  */
4243         if (cp_parser_parse_definitely (parser))
4244           break;
4245
4246         /* If the functional-cast didn't work out, try a
4247            compound-literal.  */
4248         if (cp_parser_allow_gnu_extensions_p (parser)
4249             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4250           {
4251             VEC(constructor_elt,gc) *initializer_list = NULL;
4252             bool saved_in_type_id_in_expr_p;
4253
4254             cp_parser_parse_tentatively (parser);
4255             /* Consume the `('.  */
4256             cp_lexer_consume_token (parser->lexer);
4257             /* Parse the type.  */
4258             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4259             parser->in_type_id_in_expr_p = true;
4260             type = cp_parser_type_id (parser);
4261             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4262             /* Look for the `)'.  */
4263             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4264             /* Look for the `{'.  */
4265             cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
4266             /* If things aren't going well, there's no need to
4267                keep going.  */
4268             if (!cp_parser_error_occurred (parser))
4269               {
4270                 bool non_constant_p;
4271                 /* Parse the initializer-list.  */
4272                 initializer_list
4273                   = cp_parser_initializer_list (parser, &non_constant_p);
4274                 /* Allow a trailing `,'.  */
4275                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4276                   cp_lexer_consume_token (parser->lexer);
4277                 /* Look for the final `}'.  */
4278                 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
4279               }
4280             /* If that worked, we're definitely looking at a
4281                compound-literal expression.  */
4282             if (cp_parser_parse_definitely (parser))
4283               {
4284                 /* Warn the user that a compound literal is not
4285                    allowed in standard C++.  */
4286                 if (pedantic)
4287                   pedwarn ("ISO C++ forbids compound-literals");
4288                 /* For simplicitly, we disallow compound literals in
4289                    constant-expressions for simpliicitly.  We could
4290                    allow compound literals of integer type, whose
4291                    initializer was a constant, in constant
4292                    expressions.  Permitting that usage, as a further
4293                    extension, would not change the meaning of any
4294                    currently accepted programs.  (Of course, as
4295                    compound literals are not part of ISO C++, the
4296                    standard has nothing to say.)  */
4297                 if (cp_parser_non_integral_constant_expression 
4298                     (parser, "non-constant compound literals"))
4299                   {
4300                     postfix_expression = error_mark_node;
4301                     break;
4302                   }
4303                 /* Form the representation of the compound-literal.  */
4304                 postfix_expression
4305                   = finish_compound_literal (type, initializer_list);
4306                 break;
4307               }
4308           }
4309
4310         /* It must be a primary-expression.  */
4311         postfix_expression
4312           = cp_parser_primary_expression (parser, address_p, cast_p,
4313                                           /*template_arg_p=*/false,
4314                                           &idk);
4315       }
4316       break;
4317     }
4318
4319   /* Keep looping until the postfix-expression is complete.  */
4320   while (true)
4321     {
4322       if (idk == CP_ID_KIND_UNQUALIFIED
4323           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4324           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4325         /* It is not a Koenig lookup function call.  */
4326         postfix_expression
4327           = unqualified_name_lookup_error (postfix_expression);
4328
4329       /* Peek at the next token.  */
4330       token = cp_lexer_peek_token (parser->lexer);
4331
4332       switch (token->type)
4333         {
4334         case CPP_OPEN_SQUARE:
4335           postfix_expression
4336             = cp_parser_postfix_open_square_expression (parser,
4337                                                         postfix_expression,
4338                                                         false);
4339           idk = CP_ID_KIND_NONE;
4340           break;
4341
4342         case CPP_OPEN_PAREN:
4343           /* postfix-expression ( expression-list [opt] ) */
4344           {
4345             bool koenig_p;
4346             bool is_builtin_constant_p;
4347             bool saved_integral_constant_expression_p = false;
4348             bool saved_non_integral_constant_expression_p = false;
4349             tree args;
4350
4351             is_builtin_constant_p
4352               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4353             if (is_builtin_constant_p)
4354               {
4355                 /* The whole point of __builtin_constant_p is to allow
4356                    non-constant expressions to appear as arguments.  */
4357                 saved_integral_constant_expression_p
4358                   = parser->integral_constant_expression_p;
4359                 saved_non_integral_constant_expression_p
4360                   = parser->non_integral_constant_expression_p;
4361                 parser->integral_constant_expression_p = false;
4362               }
4363             args = (cp_parser_parenthesized_expression_list
4364                     (parser, /*is_attribute_list=*/false,
4365                      /*cast_p=*/false,
4366                      /*non_constant_p=*/NULL));
4367             if (is_builtin_constant_p)
4368               {
4369                 parser->integral_constant_expression_p
4370                   = saved_integral_constant_expression_p;
4371                 parser->non_integral_constant_expression_p
4372                   = saved_non_integral_constant_expression_p;
4373               }
4374
4375             if (args == error_mark_node)
4376               {
4377                 postfix_expression = error_mark_node;
4378                 break;
4379               }
4380
4381             /* Function calls are not permitted in
4382                constant-expressions.  */
4383             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4384                 && cp_parser_non_integral_constant_expression (parser,
4385                                                                "a function call"))
4386               {
4387                 postfix_expression = error_mark_node;
4388                 break;
4389               }
4390
4391             koenig_p = false;
4392             if (idk == CP_ID_KIND_UNQUALIFIED)
4393               {
4394                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4395                   {
4396                     if (args)
4397                       {
4398                         koenig_p = true;
4399                         postfix_expression
4400                           = perform_koenig_lookup (postfix_expression, args);
4401                       }
4402                     else
4403                       postfix_expression
4404                         = unqualified_fn_lookup_error (postfix_expression);
4405                   }
4406                 /* We do not perform argument-dependent lookup if
4407                    normal lookup finds a non-function, in accordance
4408                    with the expected resolution of DR 218.  */
4409                 else if (args && is_overloaded_fn (postfix_expression))
4410                   {
4411                     tree fn = get_first_fn (postfix_expression);
4412
4413                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4414                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4415
4416                     /* Only do argument dependent lookup if regular
4417                        lookup does not find a set of member functions.
4418                        [basic.lookup.koenig]/2a  */
4419                     if (!DECL_FUNCTION_MEMBER_P (fn))
4420                       {
4421                         koenig_p = true;
4422                         postfix_expression
4423                           = perform_koenig_lookup (postfix_expression, args);
4424                       }
4425                   }
4426               }
4427
4428             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4429               {
4430                 tree instance = TREE_OPERAND (postfix_expression, 0);
4431                 tree fn = TREE_OPERAND (postfix_expression, 1);
4432
4433                 if (processing_template_decl
4434                     && (type_dependent_expression_p (instance)
4435                         || (!BASELINK_P (fn)
4436                             && TREE_CODE (fn) != FIELD_DECL)
4437                         || type_dependent_expression_p (fn)
4438                         || any_type_dependent_arguments_p (args)))
4439                   {
4440                     postfix_expression
4441                       = build_min_nt (CALL_EXPR, postfix_expression,
4442                                       args, NULL_TREE);
4443                     break;
4444                   }
4445
4446                 if (BASELINK_P (fn))
4447                   postfix_expression
4448                     = (build_new_method_call
4449                        (instance, fn, args, NULL_TREE,
4450                         (idk == CP_ID_KIND_QUALIFIED
4451                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4452                         /*fn_p=*/NULL));
4453                 else
4454                   postfix_expression
4455                     = finish_call_expr (postfix_expression, args,
4456                                         /*disallow_virtual=*/false,
4457                                         /*koenig_p=*/false);
4458               }
4459             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4460                      || TREE_CODE (postfix_expression) == MEMBER_REF
4461                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4462               postfix_expression = (build_offset_ref_call_from_tree
4463                                     (postfix_expression, args));
4464             else if (idk == CP_ID_KIND_QUALIFIED)
4465               /* A call to a static class member, or a namespace-scope
4466                  function.  */
4467               postfix_expression
4468                 = finish_call_expr (postfix_expression, args,
4469                                     /*disallow_virtual=*/true,
4470                                     koenig_p);
4471             else
4472               /* All other function calls.  */
4473               postfix_expression
4474                 = finish_call_expr (postfix_expression, args,
4475                                     /*disallow_virtual=*/false,
4476                                     koenig_p);
4477
4478             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4479             idk = CP_ID_KIND_NONE;
4480           }
4481           break;
4482
4483         case CPP_DOT:
4484         case CPP_DEREF:
4485           /* postfix-expression . template [opt] id-expression
4486              postfix-expression . pseudo-destructor-name
4487              postfix-expression -> template [opt] id-expression
4488              postfix-expression -> pseudo-destructor-name */
4489
4490           /* Consume the `.' or `->' operator.  */
4491           cp_lexer_consume_token (parser->lexer);
4492
4493           postfix_expression
4494             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4495                                                       postfix_expression,
4496                                                       false, &idk);
4497           break;
4498
4499         case CPP_PLUS_PLUS:
4500           /* postfix-expression ++  */
4501           /* Consume the `++' token.  */
4502           cp_lexer_consume_token (parser->lexer);
4503           /* Generate a representation for the complete expression.  */
4504           postfix_expression
4505             = finish_increment_expr (postfix_expression,
4506                                      POSTINCREMENT_EXPR);
4507           /* Increments may not appear in constant-expressions.  */
4508           if (cp_parser_non_integral_constant_expression (parser,
4509                                                           "an increment"))
4510             postfix_expression = error_mark_node;
4511           idk = CP_ID_KIND_NONE;
4512           break;
4513
4514         case CPP_MINUS_MINUS:
4515           /* postfix-expression -- */
4516           /* Consume the `--' token.  */
4517           cp_lexer_consume_token (parser->lexer);
4518           /* Generate a representation for the complete expression.  */
4519           postfix_expression
4520             = finish_increment_expr (postfix_expression,
4521                                      POSTDECREMENT_EXPR);
4522           /* Decrements may not appear in constant-expressions.  */
4523           if (cp_parser_non_integral_constant_expression (parser,
4524                                                           "a decrement"))
4525             postfix_expression = error_mark_node;
4526           idk = CP_ID_KIND_NONE;
4527           break;
4528
4529         default:
4530           return postfix_expression;
4531         }
4532     }
4533
4534   /* We should never get here.  */
4535   gcc_unreachable ();
4536   return error_mark_node;
4537 }
4538
4539 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4540    by cp_parser_builtin_offsetof.  We're looking for
4541
4542      postfix-expression [ expression ]
4543
4544    FOR_OFFSETOF is set if we're being called in that context, which
4545    changes how we deal with integer constant expressions.  */
4546
4547 static tree
4548 cp_parser_postfix_open_square_expression (cp_parser *parser,
4549                                           tree postfix_expression,
4550                                           bool for_offsetof)
4551 {
4552   tree index;
4553
4554   /* Consume the `[' token.  */
4555   cp_lexer_consume_token (parser->lexer);
4556
4557   /* Parse the index expression.  */
4558   /* ??? For offsetof, there is a question of what to allow here.  If
4559      offsetof is not being used in an integral constant expression context,
4560      then we *could* get the right answer by computing the value at runtime.
4561      If we are in an integral constant expression context, then we might
4562      could accept any constant expression; hard to say without analysis.
4563      Rather than open the barn door too wide right away, allow only integer
4564      constant expressions here.  */
4565   if (for_offsetof)
4566     index = cp_parser_constant_expression (parser, false, NULL);
4567   else
4568     index = cp_parser_expression (parser, /*cast_p=*/false);
4569
4570   /* Look for the closing `]'.  */
4571   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4572
4573   /* Build the ARRAY_REF.  */
4574   postfix_expression = grok_array_decl (postfix_expression, index);
4575
4576   /* When not doing offsetof, array references are not permitted in
4577      constant-expressions.  */
4578   if (!for_offsetof
4579       && (cp_parser_non_integral_constant_expression
4580           (parser, "an array reference")))
4581     postfix_expression = error_mark_node;
4582
4583   return postfix_expression;
4584 }
4585
4586 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4587    by cp_parser_builtin_offsetof.  We're looking for
4588
4589      postfix-expression . template [opt] id-expression
4590      postfix-expression . pseudo-destructor-name
4591      postfix-expression -> template [opt] id-expression
4592      postfix-expression -> pseudo-destructor-name
4593
4594    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4595    limits what of the above we'll actually accept, but nevermind.
4596    TOKEN_TYPE is the "." or "->" token, which will already have been
4597    removed from the stream.  */
4598
4599 static tree
4600 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4601                                         enum cpp_ttype token_type,
4602                                         tree postfix_expression,
4603                                         bool for_offsetof, cp_id_kind *idk)
4604 {
4605   tree name;
4606   bool dependent_p;
4607   bool pseudo_destructor_p;
4608   tree scope = NULL_TREE;
4609
4610   /* If this is a `->' operator, dereference the pointer.  */
4611   if (token_type == CPP_DEREF)
4612     postfix_expression = build_x_arrow (postfix_expression);
4613   /* Check to see whether or not the expression is type-dependent.  */
4614   dependent_p = type_dependent_expression_p (postfix_expression);
4615   /* The identifier following the `->' or `.' is not qualified.  */
4616   parser->scope = NULL_TREE;
4617   parser->qualifying_scope = NULL_TREE;
4618   parser->object_scope = NULL_TREE;
4619   *idk = CP_ID_KIND_NONE;
4620   /* Enter the scope corresponding to the type of the object
4621      given by the POSTFIX_EXPRESSION.  */
4622   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4623     {
4624       scope = TREE_TYPE (postfix_expression);
4625       /* According to the standard, no expression should ever have
4626          reference type.  Unfortunately, we do not currently match
4627          the standard in this respect in that our internal representation
4628          of an expression may have reference type even when the standard
4629          says it does not.  Therefore, we have to manually obtain the
4630          underlying type here.  */
4631       scope = non_reference (scope);
4632       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4633       if (scope == unknown_type_node)
4634         {
4635           error ("%qE does not have class type", postfix_expression);
4636           scope = NULL_TREE;
4637         }
4638       else
4639         scope = complete_type_or_else (scope, NULL_TREE);
4640       /* Let the name lookup machinery know that we are processing a
4641          class member access expression.  */
4642       parser->context->object_type = scope;
4643       /* If something went wrong, we want to be able to discern that case,
4644          as opposed to the case where there was no SCOPE due to the type
4645          of expression being dependent.  */
4646       if (!scope)
4647         scope = error_mark_node;
4648       /* If the SCOPE was erroneous, make the various semantic analysis
4649          functions exit quickly -- and without issuing additional error
4650          messages.  */
4651       if (scope == error_mark_node)
4652         postfix_expression = error_mark_node;
4653     }
4654
4655   /* Assume this expression is not a pseudo-destructor access.  */
4656   pseudo_destructor_p = false;
4657
4658   /* If the SCOPE is a scalar type, then, if this is a valid program,
4659      we must be looking at a pseudo-destructor-name.  */
4660   if (scope && SCALAR_TYPE_P (scope))
4661     {
4662       tree s;
4663       tree type;
4664
4665       cp_parser_parse_tentatively (parser);
4666       /* Parse the pseudo-destructor-name.  */
4667       s = NULL_TREE;
4668       cp_parser_pseudo_destructor_name (parser, &s, &type);
4669       if (cp_parser_parse_definitely (parser))
4670         {
4671           pseudo_destructor_p = true;
4672           postfix_expression
4673             = finish_pseudo_destructor_expr (postfix_expression,
4674                                              s, TREE_TYPE (type));
4675         }
4676     }
4677
4678   if (!pseudo_destructor_p)
4679     {
4680       /* If the SCOPE is not a scalar type, we are looking at an
4681          ordinary class member access expression, rather than a
4682          pseudo-destructor-name.  */
4683       bool template_p;
4684       /* Parse the id-expression.  */
4685       name = (cp_parser_id_expression
4686               (parser,
4687                cp_parser_optional_template_keyword (parser),
4688                /*check_dependency_p=*/true,
4689                &template_p,
4690                /*declarator_p=*/false,
4691                /*optional_p=*/false));
4692       /* In general, build a SCOPE_REF if the member name is qualified.
4693          However, if the name was not dependent and has already been
4694          resolved; there is no need to build the SCOPE_REF.  For example;
4695
4696              struct X { void f(); };
4697              template <typename T> void f(T* t) { t->X::f(); }
4698
4699          Even though "t" is dependent, "X::f" is not and has been resolved
4700          to a BASELINK; there is no need to include scope information.  */
4701
4702       /* But we do need to remember that there was an explicit scope for
4703          virtual function calls.  */
4704       if (parser->scope)
4705         *idk = CP_ID_KIND_QUALIFIED;
4706
4707       /* If the name is a template-id that names a type, we will get a
4708          TYPE_DECL here.  That is invalid code.  */
4709       if (TREE_CODE (name) == TYPE_DECL)
4710         {
4711           error ("invalid use of %qD", name);
4712           postfix_expression = error_mark_node;
4713         }
4714       else
4715         {
4716           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4717             {
4718               name = build_qualified_name (/*type=*/NULL_TREE,
4719                                            parser->scope,
4720                                            name,
4721                                            template_p);
4722               parser->scope = NULL_TREE;
4723               parser->qualifying_scope = NULL_TREE;
4724               parser->object_scope = NULL_TREE;
4725             }
4726           if (scope && name && BASELINK_P (name))
4727             adjust_result_of_qualified_name_lookup
4728               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
4729           postfix_expression
4730             = finish_class_member_access_expr (postfix_expression, name,
4731                                                template_p);
4732         }
4733     }
4734
4735   /* We no longer need to look up names in the scope of the object on
4736      the left-hand side of the `.' or `->' operator.  */
4737   parser->context->object_type = NULL_TREE;
4738
4739   /* Outside of offsetof, these operators may not appear in
4740      constant-expressions.  */
4741   if (!for_offsetof
4742       && (cp_parser_non_integral_constant_expression
4743           (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4744     postfix_expression = error_mark_node;
4745
4746   return postfix_expression;
4747 }
4748
4749 /* Parse a parenthesized expression-list.
4750
4751    expression-list:
4752      assignment-expression
4753      expression-list, assignment-expression
4754
4755    attribute-list:
4756      expression-list
4757      identifier
4758      identifier, expression-list
4759
4760    CAST_P is true if this expression is the target of a cast.
4761
4762    Returns a TREE_LIST.  The TREE_VALUE of each node is a
4763    representation of an assignment-expression.  Note that a TREE_LIST
4764    is returned even if there is only a single expression in the list.
4765    error_mark_node is returned if the ( and or ) are
4766    missing. NULL_TREE is returned on no expressions. The parentheses
4767    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4768    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4769    indicates whether or not all of the expressions in the list were
4770    constant.  */
4771
4772 static tree
4773 cp_parser_parenthesized_expression_list (cp_parser* parser,
4774                                          bool is_attribute_list,
4775                                          bool cast_p,
4776                                          bool *non_constant_p)
4777 {
4778   tree expression_list = NULL_TREE;
4779   bool fold_expr_p = is_attribute_list;
4780   tree identifier = NULL_TREE;
4781
4782   /* Assume all the expressions will be constant.  */
4783   if (non_constant_p)
4784     *non_constant_p = false;
4785
4786   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4787     return error_mark_node;
4788
4789   /* Consume expressions until there are no more.  */
4790   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4791     while (true)
4792       {
4793         tree expr;
4794
4795         /* At the beginning of attribute lists, check to see if the
4796            next token is an identifier.  */
4797         if (is_attribute_list
4798             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4799           {
4800             cp_token *token;
4801
4802             /* Consume the identifier.  */
4803             token = cp_lexer_consume_token (parser->lexer);
4804             /* Save the identifier.  */
4805             identifier = token->u.value;
4806           }
4807         else
4808           {
4809             /* Parse the next assignment-expression.  */
4810             if (non_constant_p)
4811               {
4812                 bool expr_non_constant_p;
4813                 expr = (cp_parser_constant_expression
4814                         (parser, /*allow_non_constant_p=*/true,
4815                          &expr_non_constant_p));
4816                 if (expr_non_constant_p)
4817                   *non_constant_p = true;
4818               }
4819             else
4820               expr = cp_parser_assignment_expression (parser, cast_p);
4821
4822             if (fold_expr_p)
4823               expr = fold_non_dependent_expr (expr);
4824
4825              /* Add it to the list.  We add error_mark_node
4826                 expressions to the list, so that we can still tell if
4827                 the correct form for a parenthesized expression-list
4828                 is found. That gives better errors.  */
4829             expression_list = tree_cons (NULL_TREE, expr, expression_list);
4830
4831             if (expr == error_mark_node)
4832               goto skip_comma;
4833           }
4834
4835         /* After the first item, attribute lists look the same as
4836            expression lists.  */
4837         is_attribute_list = false;
4838
4839       get_comma:;
4840         /* If the next token isn't a `,', then we are done.  */
4841         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4842           break;
4843
4844         /* Otherwise, consume the `,' and keep going.  */
4845         cp_lexer_consume_token (parser->lexer);
4846       }
4847
4848   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
4849     {
4850       int ending;
4851
4852     skip_comma:;
4853       /* We try and resync to an unnested comma, as that will give the
4854          user better diagnostics.  */
4855       ending = cp_parser_skip_to_closing_parenthesis (parser,
4856                                                       /*recovering=*/true,
4857                                                       /*or_comma=*/true,
4858                                                       /*consume_paren=*/true);
4859       if (ending < 0)
4860         goto get_comma;
4861       if (!ending)
4862         return error_mark_node;
4863     }
4864
4865   /* We built up the list in reverse order so we must reverse it now.  */
4866   expression_list = nreverse (expression_list);
4867   if (identifier)
4868     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
4869
4870   return expression_list;
4871 }
4872
4873 /* Parse a pseudo-destructor-name.
4874
4875    pseudo-destructor-name:
4876      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
4877      :: [opt] nested-name-specifier template template-id :: ~ type-name
4878      :: [opt] nested-name-specifier [opt] ~ type-name
4879
4880    If either of the first two productions is used, sets *SCOPE to the
4881    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
4882    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
4883    or ERROR_MARK_NODE if the parse fails.  */
4884
4885 static void
4886 cp_parser_pseudo_destructor_name (cp_parser* parser,
4887                                   tree* scope,
4888                                   tree* type)
4889 {
4890   bool nested_name_specifier_p;
4891
4892   /* Assume that things will not work out.  */
4893   *type = error_mark_node;
4894
4895   /* Look for the optional `::' operator.  */
4896   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
4897   /* Look for the optional nested-name-specifier.  */
4898   nested_name_specifier_p
4899     = (cp_parser_nested_name_specifier_opt (parser,
4900                                             /*typename_keyword_p=*/false,
4901                                             /*check_dependency_p=*/true,
4902                                             /*type_p=*/false,
4903                                             /*is_declaration=*/true)
4904        != NULL_TREE);
4905   /* Now, if we saw a nested-name-specifier, we might be doing the
4906      second production.  */
4907   if (nested_name_specifier_p
4908       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
4909     {
4910       /* Consume the `template' keyword.  */
4911       cp_lexer_consume_token (parser->lexer);
4912       /* Parse the template-id.  */
4913       cp_parser_template_id (parser,
4914                              /*template_keyword_p=*/true,
4915                              /*check_dependency_p=*/false,
4916                              /*is_declaration=*/true);
4917       /* Look for the `::' token.  */
4918       cp_parser_require (parser, CPP_SCOPE, "`::'");
4919     }
4920   /* If the next token is not a `~', then there might be some
4921      additional qualification.  */
4922   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
4923     {
4924       /* Look for the type-name.  */
4925       *scope = TREE_TYPE (cp_parser_type_name (parser));
4926
4927       if (*scope == error_mark_node)
4928         return;
4929
4930       /* If we don't have ::~, then something has gone wrong.  Since
4931          the only caller of this function is looking for something
4932          after `.' or `->' after a scalar type, most likely the
4933          program is trying to get a member of a non-aggregate
4934          type.  */
4935       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
4936           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
4937         {
4938           cp_parser_error (parser, "request for member of non-aggregate type");
4939           return;
4940         }
4941
4942       /* Look for the `::' token.  */
4943       cp_parser_require (parser, CPP_SCOPE, "`::'");
4944     }
4945   else
4946     *scope = NULL_TREE;
4947
4948   /* Look for the `~'.  */
4949   cp_parser_require (parser, CPP_COMPL, "`~'");
4950   /* Look for the type-name again.  We are not responsible for
4951      checking that it matches the first type-name.  */
4952   *type = cp_parser_type_name (parser);
4953 }
4954
4955 /* Parse a unary-expression.
4956
4957    unary-expression:
4958      postfix-expression
4959      ++ cast-expression
4960      -- cast-expression
4961      unary-operator cast-expression
4962      sizeof unary-expression
4963      sizeof ( type-id )
4964      new-expression
4965      delete-expression
4966
4967    GNU Extensions:
4968
4969    unary-expression:
4970      __extension__ cast-expression
4971      __alignof__ unary-expression
4972      __alignof__ ( type-id )
4973      __real__ cast-expression
4974      __imag__ cast-expression
4975      && identifier
4976
4977    ADDRESS_P is true iff the unary-expression is appearing as the
4978    operand of the `&' operator.   CAST_P is true if this expression is
4979    the target of a cast.
4980
4981    Returns a representation of the expression.  */
4982
4983 static tree
4984 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
4985 {
4986   cp_token *token;
4987   enum tree_code unary_operator;
4988
4989   /* Peek at the next token.  */
4990   token = cp_lexer_peek_token (parser->lexer);
4991   /* Some keywords give away the kind of expression.  */
4992   if (token->type == CPP_KEYWORD)
4993     {
4994       enum rid keyword = token->keyword;
4995
4996       switch (keyword)
4997         {
4998         case RID_ALIGNOF:
4999         case RID_SIZEOF:
5000           {
5001             tree operand;
5002             enum tree_code op;
5003
5004             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5005             /* Consume the token.  */
5006             cp_lexer_consume_token (parser->lexer);
5007             /* Parse the operand.  */
5008             operand = cp_parser_sizeof_operand (parser, keyword);
5009
5010             if (TYPE_P (operand))
5011               return cxx_sizeof_or_alignof_type (operand, op, true);
5012             else
5013               return cxx_sizeof_or_alignof_expr (operand, op);
5014           }
5015
5016         case RID_NEW:
5017           return cp_parser_new_expression (parser);
5018
5019         case RID_DELETE:
5020           return cp_parser_delete_expression (parser);
5021
5022         case RID_EXTENSION:
5023           {
5024             /* The saved value of the PEDANTIC flag.  */
5025             int saved_pedantic;
5026             tree expr;
5027
5028             /* Save away the PEDANTIC flag.  */
5029             cp_parser_extension_opt (parser, &saved_pedantic);
5030             /* Parse the cast-expression.  */
5031             expr = cp_parser_simple_cast_expression (parser);
5032             /* Restore the PEDANTIC flag.  */
5033             pedantic = saved_pedantic;
5034
5035             return expr;
5036           }
5037
5038         case RID_REALPART:
5039         case RID_IMAGPART:
5040           {
5041             tree expression;
5042
5043             /* Consume the `__real__' or `__imag__' token.  */
5044             cp_lexer_consume_token (parser->lexer);
5045             /* Parse the cast-expression.  */
5046             expression = cp_parser_simple_cast_expression (parser);
5047             /* Create the complete representation.  */
5048             return build_x_unary_op ((keyword == RID_REALPART
5049                                       ? REALPART_EXPR : IMAGPART_EXPR),
5050                                      expression);
5051           }
5052           break;
5053
5054         default:
5055           break;
5056         }
5057     }
5058
5059   /* Look for the `:: new' and `:: delete', which also signal the
5060      beginning of a new-expression, or delete-expression,
5061      respectively.  If the next token is `::', then it might be one of
5062      these.  */
5063   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5064     {
5065       enum rid keyword;
5066
5067       /* See if the token after the `::' is one of the keywords in
5068          which we're interested.  */
5069       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5070       /* If it's `new', we have a new-expression.  */
5071       if (keyword == RID_NEW)
5072         return cp_parser_new_expression (parser);
5073       /* Similarly, for `delete'.  */
5074       else if (keyword == RID_DELETE)
5075         return cp_parser_delete_expression (parser);
5076     }
5077
5078   /* Look for a unary operator.  */
5079   unary_operator = cp_parser_unary_operator (token);
5080   /* The `++' and `--' operators can be handled similarly, even though
5081      they are not technically unary-operators in the grammar.  */
5082   if (unary_operator == ERROR_MARK)
5083     {
5084       if (token->type == CPP_PLUS_PLUS)
5085         unary_operator = PREINCREMENT_EXPR;
5086       else if (token->type == CPP_MINUS_MINUS)
5087         unary_operator = PREDECREMENT_EXPR;
5088       /* Handle the GNU address-of-label extension.  */
5089       else if (cp_parser_allow_gnu_extensions_p (parser)
5090                && token->type == CPP_AND_AND)
5091         {
5092           tree identifier;
5093
5094           /* Consume the '&&' token.  */
5095           cp_lexer_consume_token (parser->lexer);
5096           /* Look for the identifier.  */
5097           identifier = cp_parser_identifier (parser);
5098           /* Create an expression representing the address.  */
5099           return finish_label_address_expr (identifier);
5100         }
5101     }
5102   if (unary_operator != ERROR_MARK)
5103     {
5104       tree cast_expression;
5105       tree expression = error_mark_node;
5106       const char *non_constant_p = NULL;
5107
5108       /* Consume the operator token.  */
5109       token = cp_lexer_consume_token (parser->lexer);
5110       /* Parse the cast-expression.  */
5111       cast_expression
5112         = cp_parser_cast_expression (parser,
5113                                      unary_operator == ADDR_EXPR,
5114                                      /*cast_p=*/false);
5115       /* Now, build an appropriate representation.  */
5116       switch (unary_operator)
5117         {
5118         case INDIRECT_REF:
5119           non_constant_p = "`*'";
5120           expression = build_x_indirect_ref (cast_expression, "unary *");
5121           break;
5122
5123         case ADDR_EXPR:
5124           non_constant_p = "`&'";
5125           /* Fall through.  */
5126         case BIT_NOT_EXPR:
5127           expression = build_x_unary_op (unary_operator, cast_expression);
5128           break;
5129
5130         case PREINCREMENT_EXPR:
5131         case PREDECREMENT_EXPR:
5132           non_constant_p = (unary_operator == PREINCREMENT_EXPR
5133                             ? "`++'" : "`--'");
5134           /* Fall through.  */
5135         case UNARY_PLUS_EXPR:
5136         case NEGATE_EXPR:
5137         case TRUTH_NOT_EXPR:
5138           expression = finish_unary_op_expr (unary_operator, cast_expression);
5139           break;
5140
5141         default:
5142           gcc_unreachable ();
5143         }
5144
5145       if (non_constant_p
5146           && cp_parser_non_integral_constant_expression (parser,
5147                                                          non_constant_p))
5148         expression = error_mark_node;
5149
5150       return expression;
5151     }
5152
5153   return cp_parser_postfix_expression (parser, address_p, cast_p);
5154 }
5155
5156 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5157    unary-operator, the corresponding tree code is returned.  */
5158
5159 static enum tree_code
5160 cp_parser_unary_operator (cp_token* token)
5161 {
5162   switch (token->type)
5163     {
5164     case CPP_MULT:
5165       return INDIRECT_REF;
5166
5167     case CPP_AND:
5168       return ADDR_EXPR;
5169
5170     case CPP_PLUS:
5171       return UNARY_PLUS_EXPR;
5172
5173     case CPP_MINUS:
5174       return NEGATE_EXPR;
5175
5176     case CPP_NOT:
5177       return TRUTH_NOT_EXPR;
5178
5179     case CPP_COMPL:
5180       return BIT_NOT_EXPR;
5181
5182     default:
5183       return ERROR_MARK;
5184     }
5185 }
5186
5187 /* Parse a new-expression.
5188
5189    new-expression:
5190      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5191      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5192
5193    Returns a representation of the expression.  */
5194
5195 static tree
5196 cp_parser_new_expression (cp_parser* parser)
5197 {
5198   bool global_scope_p;
5199   tree placement;
5200   tree type;
5201   tree initializer;
5202   tree nelts;
5203
5204   /* Look for the optional `::' operator.  */
5205   global_scope_p
5206     = (cp_parser_global_scope_opt (parser,
5207                                    /*current_scope_valid_p=*/false)
5208        != NULL_TREE);
5209   /* Look for the `new' operator.  */
5210   cp_parser_require_keyword (parser, RID_NEW, "`new'");
5211   /* There's no easy way to tell a new-placement from the
5212      `( type-id )' construct.  */
5213   cp_parser_parse_tentatively (parser);
5214   /* Look for a new-placement.  */
5215   placement = cp_parser_new_placement (parser);
5216   /* If that didn't work out, there's no new-placement.  */
5217   if (!cp_parser_parse_definitely (parser))
5218     placement = NULL_TREE;
5219
5220   /* If the next token is a `(', then we have a parenthesized
5221      type-id.  */
5222   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5223     {
5224       /* Consume the `('.  */
5225       cp_lexer_consume_token (parser->lexer);
5226       /* Parse the type-id.  */
5227       type = cp_parser_type_id (parser);
5228       /* Look for the closing `)'.  */
5229       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5230       /* There should not be a direct-new-declarator in this production,
5231          but GCC used to allowed this, so we check and emit a sensible error
5232          message for this case.  */
5233       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5234         {
5235           error ("array bound forbidden after parenthesized type-id");
5236           inform ("try removing the parentheses around the type-id");
5237           cp_parser_direct_new_declarator (parser);
5238         }
5239       nelts = NULL_TREE;
5240     }
5241   /* Otherwise, there must be a new-type-id.  */
5242   else
5243     type = cp_parser_new_type_id (parser, &nelts);
5244
5245   /* If the next token is a `(', then we have a new-initializer.  */
5246   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5247     initializer = cp_parser_new_initializer (parser);
5248   else
5249     initializer = NULL_TREE;
5250
5251   /* A new-expression may not appear in an integral constant
5252      expression.  */
5253   if (cp_parser_non_integral_constant_expression (parser, "`new'"))
5254     return error_mark_node;
5255
5256   /* Create a representation of the new-expression.  */
5257   return build_new (placement, type, nelts, initializer, global_scope_p);
5258 }
5259
5260 /* Parse a new-placement.
5261
5262    new-placement:
5263      ( expression-list )
5264
5265    Returns the same representation as for an expression-list.  */
5266
5267 static tree
5268 cp_parser_new_placement (cp_parser* parser)
5269 {
5270   tree expression_list;
5271
5272   /* Parse the expression-list.  */
5273   expression_list = (cp_parser_parenthesized_expression_list
5274                      (parser, false, /*cast_p=*/false,
5275                       /*non_constant_p=*/NULL));
5276
5277   return expression_list;
5278 }
5279
5280 /* Parse a new-type-id.
5281
5282    new-type-id:
5283      type-specifier-seq new-declarator [opt]
5284
5285    Returns the TYPE allocated.  If the new-type-id indicates an array
5286    type, *NELTS is set to the number of elements in the last array
5287    bound; the TYPE will not include the last array bound.  */
5288
5289 static tree
5290 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5291 {
5292   cp_decl_specifier_seq type_specifier_seq;
5293   cp_declarator *new_declarator;
5294   cp_declarator *declarator;
5295   cp_declarator *outer_declarator;
5296   const char *saved_message;
5297   tree type;
5298
5299   /* The type-specifier sequence must not contain type definitions.
5300      (It cannot contain declarations of new types either, but if they
5301      are not definitions we will catch that because they are not
5302      complete.)  */
5303   saved_message = parser->type_definition_forbidden_message;
5304   parser->type_definition_forbidden_message
5305     = "types may not be defined in a new-type-id";
5306   /* Parse the type-specifier-seq.  */
5307   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5308                                 &type_specifier_seq);
5309   /* Restore the old message.  */
5310   parser->type_definition_forbidden_message = saved_message;
5311   /* Parse the new-declarator.  */
5312   new_declarator = cp_parser_new_declarator_opt (parser);
5313
5314   /* Determine the number of elements in the last array dimension, if
5315      any.  */
5316   *nelts = NULL_TREE;
5317   /* Skip down to the last array dimension.  */
5318   declarator = new_declarator;
5319   outer_declarator = NULL;
5320   while (declarator && (declarator->kind == cdk_pointer
5321                         || declarator->kind == cdk_ptrmem))
5322     {
5323       outer_declarator = declarator;
5324       declarator = declarator->declarator;
5325     }
5326   while (declarator
5327          && declarator->kind == cdk_array
5328          && declarator->declarator
5329          && declarator->declarator->kind == cdk_array)
5330     {
5331       outer_declarator = declarator;
5332       declarator = declarator->declarator;
5333     }
5334
5335   if (declarator && declarator->kind == cdk_array)
5336     {
5337       *nelts = declarator->u.array.bounds;
5338       if (*nelts == error_mark_node)
5339         *nelts = integer_one_node;
5340
5341       if (outer_declarator)
5342         outer_declarator->declarator = declarator->declarator;
5343       else
5344         new_declarator = NULL;
5345     }
5346
5347   type = groktypename (&type_specifier_seq, new_declarator);
5348   if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
5349     {
5350       *nelts = array_type_nelts_top (type);
5351       type = TREE_TYPE (type);
5352     }
5353   return type;
5354 }
5355
5356 /* Parse an (optional) new-declarator.
5357
5358    new-declarator:
5359      ptr-operator new-declarator [opt]
5360      direct-new-declarator
5361
5362    Returns the declarator.  */
5363
5364 static cp_declarator *
5365 cp_parser_new_declarator_opt (cp_parser* parser)
5366 {
5367   enum tree_code code;
5368   tree type;
5369   cp_cv_quals cv_quals;
5370
5371   /* We don't know if there's a ptr-operator next, or not.  */
5372   cp_parser_parse_tentatively (parser);
5373   /* Look for a ptr-operator.  */
5374   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5375   /* If that worked, look for more new-declarators.  */
5376   if (cp_parser_parse_definitely (parser))
5377     {
5378       cp_declarator *declarator;
5379
5380       /* Parse another optional declarator.  */
5381       declarator = cp_parser_new_declarator_opt (parser);
5382
5383       /* Create the representation of the declarator.  */
5384       if (type)
5385         declarator = make_ptrmem_declarator (cv_quals, type, declarator);
5386       else if (code == INDIRECT_REF)
5387         declarator = make_pointer_declarator (cv_quals, declarator);
5388       else
5389         declarator = make_reference_declarator (cv_quals, declarator);
5390
5391       return declarator;
5392     }
5393
5394   /* If the next token is a `[', there is a direct-new-declarator.  */
5395   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5396     return cp_parser_direct_new_declarator (parser);
5397
5398   return NULL;
5399 }
5400
5401 /* Parse a direct-new-declarator.
5402
5403    direct-new-declarator:
5404      [ expression ]
5405      direct-new-declarator [constant-expression]
5406
5407    */
5408
5409 static cp_declarator *
5410 cp_parser_direct_new_declarator (cp_parser* parser)
5411 {
5412   cp_declarator *declarator = NULL;
5413
5414   while (true)
5415     {
5416       tree expression;
5417
5418       /* Look for the opening `['.  */
5419       cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
5420       /* The first expression is not required to be constant.  */
5421       if (!declarator)
5422         {
5423           expression = cp_parser_expression (parser, /*cast_p=*/false);
5424           /* The standard requires that the expression have integral
5425              type.  DR 74 adds enumeration types.  We believe that the
5426              real intent is that these expressions be handled like the
5427              expression in a `switch' condition, which also allows
5428              classes with a single conversion to integral or
5429              enumeration type.  */
5430           if (!processing_template_decl)
5431             {
5432               expression
5433                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5434                                               expression,
5435                                               /*complain=*/true);
5436               if (!expression)
5437                 {
5438                   error ("expression in new-declarator must have integral "
5439                          "or enumeration type");
5440                   expression = error_mark_node;
5441                 }
5442             }
5443         }
5444       /* But all the other expressions must be.  */
5445       else
5446         expression
5447           = cp_parser_constant_expression (parser,
5448                                            /*allow_non_constant=*/false,
5449                                            NULL);
5450       /* Look for the closing `]'.  */
5451       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5452
5453       /* Add this bound to the declarator.  */
5454       declarator = make_array_declarator (declarator, expression);
5455
5456       /* If the next token is not a `[', then there are no more
5457          bounds.  */
5458       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5459         break;
5460     }
5461
5462   return declarator;
5463 }
5464
5465 /* Parse a new-initializer.
5466
5467    new-initializer:
5468      ( expression-list [opt] )
5469
5470    Returns a representation of the expression-list.  If there is no
5471    expression-list, VOID_ZERO_NODE is returned.  */
5472
5473 static tree
5474 cp_parser_new_initializer (cp_parser* parser)
5475 {
5476   tree expression_list;
5477
5478   expression_list = (cp_parser_parenthesized_expression_list
5479                      (parser, false, /*cast_p=*/false,
5480                       /*non_constant_p=*/NULL));
5481   if (!expression_list)
5482     expression_list = void_zero_node;
5483
5484   return expression_list;
5485 }
5486
5487 /* Parse a delete-expression.
5488
5489    delete-expression:
5490      :: [opt] delete cast-expression
5491      :: [opt] delete [ ] cast-expression
5492
5493    Returns a representation of the expression.  */
5494
5495 static tree
5496 cp_parser_delete_expression (cp_parser* parser)
5497 {
5498   bool global_scope_p;
5499   bool array_p;
5500   tree expression;
5501
5502   /* Look for the optional `::' operator.  */
5503   global_scope_p
5504     = (cp_parser_global_scope_opt (parser,
5505                                    /*current_scope_valid_p=*/false)
5506        != NULL_TREE);
5507   /* Look for the `delete' keyword.  */
5508   cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
5509   /* See if the array syntax is in use.  */
5510   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5511     {
5512       /* Consume the `[' token.  */
5513       cp_lexer_consume_token (parser->lexer);
5514       /* Look for the `]' token.  */
5515       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5516       /* Remember that this is the `[]' construct.  */
5517       array_p = true;
5518     }
5519   else
5520     array_p = false;
5521
5522   /* Parse the cast-expression.  */
5523   expression = cp_parser_simple_cast_expression (parser);
5524
5525   /* A delete-expression may not appear in an integral constant
5526      expression.  */
5527   if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
5528     return error_mark_node;
5529
5530   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5531 }
5532
5533 /* Parse a cast-expression.
5534
5535    cast-expression:
5536      unary-expression
5537      ( type-id ) cast-expression
5538
5539    ADDRESS_P is true iff the unary-expression is appearing as the
5540    operand of the `&' operator.   CAST_P is true if this expression is
5541    the target of a cast.
5542
5543    Returns a representation of the expression.  */
5544
5545 static tree
5546 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5547 {
5548   /* If it's a `(', then we might be looking at a cast.  */
5549   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5550     {
5551       tree type = NULL_TREE;
5552       tree expr = NULL_TREE;
5553       bool compound_literal_p;
5554       const char *saved_message;
5555
5556       /* There's no way to know yet whether or not this is a cast.
5557          For example, `(int (3))' is a unary-expression, while `(int)
5558          3' is a cast.  So, we resort to parsing tentatively.  */
5559       cp_parser_parse_tentatively (parser);
5560       /* Types may not be defined in a cast.  */
5561       saved_message = parser->type_definition_forbidden_message;
5562       parser->type_definition_forbidden_message
5563         = "types may not be defined in casts";
5564       /* Consume the `('.  */
5565       cp_lexer_consume_token (parser->lexer);
5566       /* A very tricky bit is that `(struct S) { 3 }' is a
5567          compound-literal (which we permit in C++ as an extension).
5568          But, that construct is not a cast-expression -- it is a
5569          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5570          is legal; if the compound-literal were a cast-expression,
5571          you'd need an extra set of parentheses.)  But, if we parse
5572          the type-id, and it happens to be a class-specifier, then we
5573          will commit to the parse at that point, because we cannot
5574          undo the action that is done when creating a new class.  So,
5575          then we cannot back up and do a postfix-expression.
5576
5577          Therefore, we scan ahead to the closing `)', and check to see
5578          if the token after the `)' is a `{'.  If so, we are not
5579          looking at a cast-expression.
5580
5581          Save tokens so that we can put them back.  */
5582       cp_lexer_save_tokens (parser->lexer);
5583       /* Skip tokens until the next token is a closing parenthesis.
5584          If we find the closing `)', and the next token is a `{', then
5585          we are looking at a compound-literal.  */
5586       compound_literal_p
5587         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5588                                                   /*consume_paren=*/true)
5589            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5590       /* Roll back the tokens we skipped.  */
5591       cp_lexer_rollback_tokens (parser->lexer);
5592       /* If we were looking at a compound-literal, simulate an error
5593          so that the call to cp_parser_parse_definitely below will
5594          fail.  */
5595       if (compound_literal_p)
5596         cp_parser_simulate_error (parser);
5597       else
5598         {
5599           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5600           parser->in_type_id_in_expr_p = true;
5601           /* Look for the type-id.  */
5602           type = cp_parser_type_id (parser);
5603           /* Look for the closing `)'.  */
5604           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5605           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5606         }
5607
5608       /* Restore the saved message.  */
5609       parser->type_definition_forbidden_message = saved_message;
5610
5611       /* If ok so far, parse the dependent expression. We cannot be
5612          sure it is a cast. Consider `(T ())'.  It is a parenthesized
5613          ctor of T, but looks like a cast to function returning T
5614          without a dependent expression.  */
5615       if (!cp_parser_error_occurred (parser))
5616         expr = cp_parser_cast_expression (parser,
5617                                           /*address_p=*/false,
5618                                           /*cast_p=*/true);
5619
5620       if (cp_parser_parse_definitely (parser))
5621         {
5622           /* Warn about old-style casts, if so requested.  */
5623           if (warn_old_style_cast
5624               && !in_system_header
5625               && !VOID_TYPE_P (type)
5626               && current_lang_name != lang_name_c)
5627             warning (OPT_Wold_style_cast, "use of old-style cast");
5628
5629           /* Only type conversions to integral or enumeration types
5630              can be used in constant-expressions.  */
5631           if (!cast_valid_in_integral_constant_expression_p (type)
5632               && (cp_parser_non_integral_constant_expression
5633                   (parser,
5634                    "a cast to a type other than an integral or "
5635                    "enumeration type")))
5636             return error_mark_node;
5637
5638           /* Perform the cast.  */
5639           expr = build_c_cast (type, expr);
5640           return expr;
5641         }
5642     }
5643
5644   /* If we get here, then it's not a cast, so it must be a
5645      unary-expression.  */
5646   return cp_parser_unary_expression (parser, address_p, cast_p);
5647 }
5648
5649 /* Parse a binary expression of the general form:
5650
5651    pm-expression:
5652      cast-expression
5653      pm-expression .* cast-expression
5654      pm-expression ->* cast-expression
5655
5656    multiplicative-expression:
5657      pm-expression
5658      multiplicative-expression * pm-expression
5659      multiplicative-expression / pm-expression
5660      multiplicative-expression % pm-expression
5661
5662    additive-expression:
5663      multiplicative-expression
5664      additive-expression + multiplicative-expression
5665      additive-expression - multiplicative-expression
5666
5667    shift-expression:
5668      additive-expression
5669      shift-expression << additive-expression
5670      shift-expression >> additive-expression
5671
5672    relational-expression:
5673      shift-expression
5674      relational-expression < shift-expression
5675      relational-expression > shift-expression
5676      relational-expression <= shift-expression
5677      relational-expression >= shift-expression
5678
5679   GNU Extension:
5680
5681    relational-expression:
5682      relational-expression <? shift-expression
5683      relational-expression >? shift-expression
5684
5685    equality-expression:
5686      relational-expression
5687      equality-expression == relational-expression
5688      equality-expression != relational-expression
5689
5690    and-expression:
5691      equality-expression
5692      and-expression & equality-expression
5693
5694    exclusive-or-expression:
5695      and-expression
5696      exclusive-or-expression ^ and-expression
5697
5698    inclusive-or-expression:
5699      exclusive-or-expression
5700      inclusive-or-expression | exclusive-or-expression
5701
5702    logical-and-expression:
5703      inclusive-or-expression
5704      logical-and-expression && inclusive-or-expression
5705
5706    logical-or-expression:
5707      logical-and-expression
5708      logical-or-expression || logical-and-expression
5709
5710    All these are implemented with a single function like:
5711
5712    binary-expression:
5713      simple-cast-expression
5714      binary-expression <token> binary-expression
5715
5716    CAST_P is true if this expression is the target of a cast.
5717
5718    The binops_by_token map is used to get the tree codes for each <token> type.
5719    binary-expressions are associated according to a precedence table.  */
5720
5721 #define TOKEN_PRECEDENCE(token) \
5722   ((token->type == CPP_GREATER && !parser->greater_than_is_operator_p) \
5723    ? PREC_NOT_OPERATOR \
5724    : binops_by_token[token->type].prec)
5725
5726 static tree
5727 cp_parser_binary_expression (cp_parser* parser, bool cast_p)
5728 {
5729   cp_parser_expression_stack stack;
5730   cp_parser_expression_stack_entry *sp = &stack[0];
5731   tree lhs, rhs;
5732   cp_token *token;
5733   enum tree_code tree_type;
5734   enum cp_parser_prec prec = PREC_NOT_OPERATOR, new_prec, lookahead_prec;
5735   bool overloaded_p;
5736
5737   /* Parse the first expression.  */
5738   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
5739
5740   for (;;)
5741     {
5742       /* Get an operator token.  */
5743       token = cp_lexer_peek_token (parser->lexer);
5744
5745       new_prec = TOKEN_PRECEDENCE (token);
5746
5747       /* Popping an entry off the stack means we completed a subexpression:
5748          - either we found a token which is not an operator (`>' where it is not
5749            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
5750            will happen repeatedly;
5751          - or, we found an operator which has lower priority.  This is the case
5752            where the recursive descent *ascends*, as in `3 * 4 + 5' after
5753            parsing `3 * 4'.  */
5754       if (new_prec <= prec)
5755         {
5756           if (sp == stack)
5757             break;
5758           else
5759             goto pop;
5760         }
5761
5762      get_rhs:
5763       tree_type = binops_by_token[token->type].tree_type;
5764
5765       /* We used the operator token.  */
5766       cp_lexer_consume_token (parser->lexer);
5767
5768       /* Extract another operand.  It may be the RHS of this expression
5769          or the LHS of a new, higher priority expression.  */
5770       rhs = cp_parser_simple_cast_expression (parser);
5771
5772       /* Get another operator token.  Look up its precedence to avoid
5773          building a useless (immediately popped) stack entry for common
5774          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
5775       token = cp_lexer_peek_token (parser->lexer);
5776       lookahead_prec = TOKEN_PRECEDENCE (token);
5777       if (lookahead_prec > new_prec)
5778         {
5779           /* ... and prepare to parse the RHS of the new, higher priority
5780              expression.  Since precedence levels on the stack are
5781              monotonically increasing, we do not have to care about
5782              stack overflows.  */
5783           sp->prec = prec;
5784           sp->tree_type = tree_type;
5785           sp->lhs = lhs;
5786           sp++;
5787           lhs = rhs;
5788           prec = new_prec;
5789           new_prec = lookahead_prec;
5790           goto get_rhs;
5791
5792          pop:
5793           /* If the stack is not empty, we have parsed into LHS the right side
5794              (`4' in the example above) of an expression we had suspended.
5795              We can use the information on the stack to recover the LHS (`3')
5796              from the stack together with the tree code (`MULT_EXPR'), and
5797              the precedence of the higher level subexpression
5798              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
5799              which will be used to actually build the additive expression.  */
5800           --sp;
5801           prec = sp->prec;
5802           tree_type = sp->tree_type;
5803           rhs = lhs;
5804           lhs = sp->lhs;
5805         }
5806
5807       overloaded_p = false;
5808       lhs = build_x_binary_op (tree_type, lhs, rhs, &overloaded_p);
5809
5810       /* If the binary operator required the use of an overloaded operator,
5811          then this expression cannot be an integral constant-expression.
5812          An overloaded operator can be used even if both operands are
5813          otherwise permissible in an integral constant-expression if at
5814          least one of the operands is of enumeration type.  */
5815
5816       if (overloaded_p
5817           && (cp_parser_non_integral_constant_expression
5818               (parser, "calls to overloaded operators")))
5819         return error_mark_node;
5820     }
5821
5822   return lhs;
5823 }
5824
5825
5826 /* Parse the `? expression : assignment-expression' part of a
5827    conditional-expression.  The LOGICAL_OR_EXPR is the
5828    logical-or-expression that started the conditional-expression.
5829    Returns a representation of the entire conditional-expression.
5830
5831    This routine is used by cp_parser_assignment_expression.
5832
5833      ? expression : assignment-expression
5834
5835    GNU Extensions:
5836
5837      ? : assignment-expression */
5838
5839 static tree
5840 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
5841 {
5842   tree expr;
5843   tree assignment_expr;
5844
5845   /* Consume the `?' token.  */
5846   cp_lexer_consume_token (parser->lexer);
5847   if (cp_parser_allow_gnu_extensions_p (parser)
5848       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
5849     /* Implicit true clause.  */
5850     expr = NULL_TREE;
5851   else
5852     /* Parse the expression.  */
5853     expr = cp_parser_expression (parser, /*cast_p=*/false);
5854
5855   /* The next token should be a `:'.  */
5856   cp_parser_require (parser, CPP_COLON, "`:'");
5857   /* Parse the assignment-expression.  */
5858   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5859
5860   /* Build the conditional-expression.  */
5861   return build_x_conditional_expr (logical_or_expr,
5862                                    expr,
5863                                    assignment_expr);
5864 }
5865
5866 /* Parse an assignment-expression.
5867
5868    assignment-expression:
5869      conditional-expression
5870      logical-or-expression assignment-operator assignment_expression
5871      throw-expression
5872
5873    CAST_P is true if this expression is the target of a cast.
5874
5875    Returns a representation for the expression.  */
5876
5877 static tree
5878 cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
5879 {
5880   tree expr;
5881
5882   /* If the next token is the `throw' keyword, then we're looking at
5883      a throw-expression.  */
5884   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
5885     expr = cp_parser_throw_expression (parser);
5886   /* Otherwise, it must be that we are looking at a
5887      logical-or-expression.  */
5888   else
5889     {
5890       /* Parse the binary expressions (logical-or-expression).  */
5891       expr = cp_parser_binary_expression (parser, cast_p);
5892       /* If the next token is a `?' then we're actually looking at a
5893          conditional-expression.  */
5894       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
5895         return cp_parser_question_colon_clause (parser, expr);
5896       else
5897         {
5898           enum tree_code assignment_operator;
5899
5900           /* If it's an assignment-operator, we're using the second
5901              production.  */
5902           assignment_operator
5903             = cp_parser_assignment_operator_opt (parser);
5904           if (assignment_operator != ERROR_MARK)
5905             {
5906               tree rhs;
5907
5908               /* Parse the right-hand side of the assignment.  */
5909               rhs = cp_parser_assignment_expression (parser, cast_p);
5910               /* An assignment may not appear in a
5911                  constant-expression.  */
5912               if (cp_parser_non_integral_constant_expression (parser,
5913                                                               "an assignment"))
5914                 return error_mark_node;
5915               /* Build the assignment expression.  */
5916               expr = build_x_modify_expr (expr,
5917                                           assignment_operator,
5918                                           rhs);
5919             }
5920         }
5921     }
5922
5923   return expr;
5924 }
5925
5926 /* Parse an (optional) assignment-operator.
5927
5928    assignment-operator: one of
5929      = *= /= %= += -= >>= <<= &= ^= |=
5930
5931    GNU Extension:
5932
5933    assignment-operator: one of
5934      <?= >?=
5935
5936    If the next token is an assignment operator, the corresponding tree
5937    code is returned, and the token is consumed.  For example, for
5938    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
5939    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
5940    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
5941    operator, ERROR_MARK is returned.  */
5942
5943 static enum tree_code
5944 cp_parser_assignment_operator_opt (cp_parser* parser)
5945 {
5946   enum tree_code op;
5947   cp_token *token;
5948
5949   /* Peek at the next toen.  */
5950   token = cp_lexer_peek_token (parser->lexer);
5951
5952   switch (token->type)
5953     {
5954     case CPP_EQ:
5955       op = NOP_EXPR;
5956       break;
5957
5958     case CPP_MULT_EQ:
5959       op = MULT_EXPR;
5960       break;
5961
5962     case CPP_DIV_EQ:
5963       op = TRUNC_DIV_EXPR;
5964       break;
5965
5966     case CPP_MOD_EQ:
5967       op = TRUNC_MOD_EXPR;
5968       break;
5969
5970     case CPP_PLUS_EQ:
5971       op = PLUS_EXPR;
5972       break;
5973
5974     case CPP_MINUS_EQ:
5975       op = MINUS_EXPR;
5976       break;
5977
5978     case CPP_RSHIFT_EQ:
5979       op = RSHIFT_EXPR;
5980       break;
5981
5982     case CPP_LSHIFT_EQ:
5983       op = LSHIFT_EXPR;
5984       break;
5985
5986     case CPP_AND_EQ:
5987       op = BIT_AND_EXPR;
5988       break;
5989
5990     case CPP_XOR_EQ:
5991       op = BIT_XOR_EXPR;
5992       break;
5993
5994     case CPP_OR_EQ:
5995       op = BIT_IOR_EXPR;
5996       break;
5997
5998     default:
5999       /* Nothing else is an assignment operator.  */
6000       op = ERROR_MARK;
6001     }
6002
6003   /* If it was an assignment operator, consume it.  */
6004   if (op != ERROR_MARK)
6005     cp_lexer_consume_token (parser->lexer);
6006
6007   return op;
6008 }
6009
6010 /* Parse an expression.
6011
6012    expression:
6013      assignment-expression
6014      expression , assignment-expression
6015
6016    CAST_P is true if this expression is the target of a cast.
6017
6018    Returns a representation of the expression.  */
6019
6020 static tree
6021 cp_parser_expression (cp_parser* parser, bool cast_p)
6022 {
6023   tree expression = NULL_TREE;
6024
6025   while (true)
6026     {
6027       tree assignment_expression;
6028
6029       /* Parse the next assignment-expression.  */
6030       assignment_expression
6031         = cp_parser_assignment_expression (parser, cast_p);
6032       /* If this is the first assignment-expression, we can just
6033          save it away.  */
6034       if (!expression)
6035         expression = assignment_expression;
6036       else
6037         expression = build_x_compound_expr (expression,
6038                                             assignment_expression);
6039       /* If the next token is not a comma, then we are done with the
6040          expression.  */
6041       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6042         break;
6043       /* Consume the `,'.  */
6044       cp_lexer_consume_token (parser->lexer);
6045       /* A comma operator cannot appear in a constant-expression.  */
6046       if (cp_parser_non_integral_constant_expression (parser,
6047                                                       "a comma operator"))
6048         expression = error_mark_node;
6049     }
6050
6051   return expression;
6052 }
6053
6054 /* Parse a constant-expression.
6055
6056    constant-expression:
6057      conditional-expression
6058
6059   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6060   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6061   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6062   is false, NON_CONSTANT_P should be NULL.  */
6063
6064 static tree
6065 cp_parser_constant_expression (cp_parser* parser,
6066                                bool allow_non_constant_p,
6067                                bool *non_constant_p)
6068 {
6069   bool saved_integral_constant_expression_p;
6070   bool saved_allow_non_integral_constant_expression_p;
6071   bool saved_non_integral_constant_expression_p;
6072   tree expression;
6073
6074   /* It might seem that we could simply parse the
6075      conditional-expression, and then check to see if it were
6076      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
6077      one that the compiler can figure out is constant, possibly after
6078      doing some simplifications or optimizations.  The standard has a
6079      precise definition of constant-expression, and we must honor
6080      that, even though it is somewhat more restrictive.
6081
6082      For example:
6083
6084        int i[(2, 3)];
6085
6086      is not a legal declaration, because `(2, 3)' is not a
6087      constant-expression.  The `,' operator is forbidden in a
6088      constant-expression.  However, GCC's constant-folding machinery
6089      will fold this operation to an INTEGER_CST for `3'.  */
6090
6091   /* Save the old settings.  */
6092   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
6093   saved_allow_non_integral_constant_expression_p
6094     = parser->allow_non_integral_constant_expression_p;
6095   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
6096   /* We are now parsing a constant-expression.  */
6097   parser->integral_constant_expression_p = true;
6098   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
6099   parser->non_integral_constant_expression_p = false;
6100   /* Although the grammar says "conditional-expression", we parse an
6101      "assignment-expression", which also permits "throw-expression"
6102      and the use of assignment operators.  In the case that
6103      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6104      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
6105      actually essential that we look for an assignment-expression.
6106      For example, cp_parser_initializer_clauses uses this function to
6107      determine whether a particular assignment-expression is in fact
6108      constant.  */
6109   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6110   /* Restore the old settings.  */
6111   parser->integral_constant_expression_p
6112     = saved_integral_constant_expression_p;
6113   parser->allow_non_integral_constant_expression_p
6114     = saved_allow_non_integral_constant_expression_p;
6115   if (allow_non_constant_p)
6116     *non_constant_p = parser->non_integral_constant_expression_p;
6117   else if (parser->non_integral_constant_expression_p)
6118     expression = error_mark_node;
6119   parser->non_integral_constant_expression_p
6120     = saved_non_integral_constant_expression_p;
6121
6122   return expression;
6123 }
6124
6125 /* Parse __builtin_offsetof.
6126
6127    offsetof-expression:
6128      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6129
6130    offsetof-member-designator:
6131      id-expression
6132      | offsetof-member-designator "." id-expression
6133      | offsetof-member-designator "[" expression "]"  */
6134
6135 static tree
6136 cp_parser_builtin_offsetof (cp_parser *parser)
6137 {
6138   int save_ice_p, save_non_ice_p;
6139   tree type, expr;
6140   cp_id_kind dummy;
6141
6142   /* We're about to accept non-integral-constant things, but will
6143      definitely yield an integral constant expression.  Save and
6144      restore these values around our local parsing.  */
6145   save_ice_p = parser->integral_constant_expression_p;
6146   save_non_ice_p = parser->non_integral_constant_expression_p;
6147
6148   /* Consume the "__builtin_offsetof" token.  */
6149   cp_lexer_consume_token (parser->lexer);
6150   /* Consume the opening `('.  */
6151   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6152   /* Parse the type-id.  */
6153   type = cp_parser_type_id (parser);
6154   /* Look for the `,'.  */
6155   cp_parser_require (parser, CPP_COMMA, "`,'");
6156
6157   /* Build the (type *)null that begins the traditional offsetof macro.  */
6158   expr = build_static_cast (build_pointer_type (type), null_pointer_node);
6159
6160   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6161   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6162                                                  true, &dummy);
6163   while (true)
6164     {
6165       cp_token *token = cp_lexer_peek_token (parser->lexer);
6166       switch (token->type)
6167         {
6168         case CPP_OPEN_SQUARE:
6169           /* offsetof-member-designator "[" expression "]" */
6170           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6171           break;
6172
6173         case CPP_DOT:
6174           /* offsetof-member-designator "." identifier */
6175           cp_lexer_consume_token (parser->lexer);
6176           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
6177                                                          true, &dummy);
6178           break;
6179
6180         case CPP_CLOSE_PAREN:
6181           /* Consume the ")" token.  */
6182           cp_lexer_consume_token (parser->lexer);
6183           goto success;
6184
6185         default:
6186           /* Error.  We know the following require will fail, but
6187              that gives the proper error message.  */
6188           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6189           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6190           expr = error_mark_node;
6191           goto failure;
6192         }
6193     }
6194
6195  success:
6196   /* If we're processing a template, we can't finish the semantics yet.
6197      Otherwise we can fold the entire expression now.  */
6198   if (processing_template_decl)
6199     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6200   else
6201     expr = finish_offsetof (expr);
6202
6203  failure:
6204   parser->integral_constant_expression_p = save_ice_p;
6205   parser->non_integral_constant_expression_p = save_non_ice_p;
6206
6207   return expr;
6208 }
6209
6210 /* Statements [gram.stmt.stmt]  */
6211
6212 /* Parse a statement.
6213
6214    statement:
6215      labeled-statement
6216      expression-statement
6217      compound-statement
6218      selection-statement
6219      iteration-statement
6220      jump-statement
6221      declaration-statement
6222      try-block
6223
6224   IN_COMPOUND is true when the statement is nested inside a
6225   cp_parser_compound_statement; this matters for certain pragmas.  */
6226
6227 static void
6228 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6229                      bool in_compound)
6230 {
6231   tree statement;
6232   cp_token *token;
6233   location_t statement_location;
6234
6235  restart:
6236   /* There is no statement yet.  */
6237   statement = NULL_TREE;
6238   /* Peek at the next token.  */
6239   token = cp_lexer_peek_token (parser->lexer);
6240   /* Remember the location of the first token in the statement.  */
6241   statement_location = token->location;
6242   /* If this is a keyword, then that will often determine what kind of
6243      statement we have.  */
6244   if (token->type == CPP_KEYWORD)
6245     {
6246       enum rid keyword = token->keyword;
6247
6248       switch (keyword)
6249         {
6250         case RID_CASE:
6251         case RID_DEFAULT:
6252           /* Looks like a labeled-statement with a case label.
6253              Parse the label, and then use tail recursion to parse
6254              the statement.  */
6255           cp_parser_label_for_labeled_statement (parser);
6256           goto restart;
6257
6258         case RID_IF:
6259         case RID_SWITCH:
6260           statement = cp_parser_selection_statement (parser);
6261           break;
6262
6263         case RID_WHILE:
6264         case RID_DO:
6265         case RID_FOR:
6266           statement = cp_parser_iteration_statement (parser);
6267           break;
6268
6269         case RID_BREAK:
6270         case RID_CONTINUE:
6271         case RID_RETURN:
6272         case RID_GOTO:
6273           statement = cp_parser_jump_statement (parser);
6274           break;
6275
6276           /* Objective-C++ exception-handling constructs.  */
6277         case RID_AT_TRY:
6278         case RID_AT_CATCH:
6279         case RID_AT_FINALLY:
6280         case RID_AT_SYNCHRONIZED:
6281         case RID_AT_THROW:
6282           statement = cp_parser_objc_statement (parser);
6283           break;
6284
6285         case RID_TRY:
6286           statement = cp_parser_try_block (parser);
6287           break;
6288
6289         default:
6290           /* It might be a keyword like `int' that can start a
6291              declaration-statement.  */
6292           break;
6293         }
6294     }
6295   else if (token->type == CPP_NAME)
6296     {
6297       /* If the next token is a `:', then we are looking at a
6298          labeled-statement.  */
6299       token = cp_lexer_peek_nth_token (parser->lexer, 2);
6300       if (token->type == CPP_COLON)
6301         {
6302           /* Looks like a labeled-statement with an ordinary label.
6303              Parse the label, and then use tail recursion to parse
6304              the statement.  */
6305           cp_parser_label_for_labeled_statement (parser);
6306           goto restart;
6307         }
6308     }
6309   /* Anything that starts with a `{' must be a compound-statement.  */
6310   else if (token->type == CPP_OPEN_BRACE)
6311     statement = cp_parser_compound_statement (parser, NULL, false);
6312   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6313      a statement all its own.  */
6314   else if (token->type == CPP_PRAGMA)
6315     {
6316       /* Only certain OpenMP pragmas are attached to statements, and thus
6317          are considered statements themselves.  All others are not.  In
6318          the context of a compound, accept the pragma as a "statement" and
6319          return so that we can check for a close brace.  Otherwise we
6320          require a real statement and must go back and read one.  */
6321       if (in_compound)
6322         cp_parser_pragma (parser, pragma_compound);
6323       else if (!cp_parser_pragma (parser, pragma_stmt))
6324         goto restart;
6325       return;
6326     }
6327   else if (token->type == CPP_EOF)
6328     {
6329       cp_parser_error (parser, "expected statement");
6330       return;
6331     }
6332
6333   /* Everything else must be a declaration-statement or an
6334      expression-statement.  Try for the declaration-statement
6335      first, unless we are looking at a `;', in which case we know that
6336      we have an expression-statement.  */
6337   if (!statement)
6338     {
6339       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6340         {
6341           cp_parser_parse_tentatively (parser);
6342           /* Try to parse the declaration-statement.  */
6343           cp_parser_declaration_statement (parser);
6344           /* If that worked, we're done.  */
6345           if (cp_parser_parse_definitely (parser))
6346             return;
6347         }
6348       /* Look for an expression-statement instead.  */
6349       statement = cp_parser_expression_statement (parser, in_statement_expr);
6350     }
6351
6352   /* Set the line number for the statement.  */
6353   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
6354     SET_EXPR_LOCATION (statement, statement_location);
6355 }
6356
6357 /* Parse the label for a labeled-statement, i.e.
6358
6359    identifier :
6360    case constant-expression :
6361    default :
6362
6363    GNU Extension:
6364    case constant-expression ... constant-expression : statement
6365
6366    When a label is parsed without errors, the label is added to the
6367    parse tree by the finish_* functions, so this function doesn't
6368    have to return the label.  */
6369
6370 static void
6371 cp_parser_label_for_labeled_statement (cp_parser* parser)
6372 {
6373   cp_token *token;
6374
6375   /* The next token should be an identifier.  */
6376   token = cp_lexer_peek_token (parser->lexer);
6377   if (token->type != CPP_NAME
6378       && token->type != CPP_KEYWORD)
6379     {
6380       cp_parser_error (parser, "expected labeled-statement");
6381       return;
6382     }
6383
6384   switch (token->keyword)
6385     {
6386     case RID_CASE:
6387       {
6388         tree expr, expr_hi;
6389         cp_token *ellipsis;
6390
6391         /* Consume the `case' token.  */
6392         cp_lexer_consume_token (parser->lexer);
6393         /* Parse the constant-expression.  */
6394         expr = cp_parser_constant_expression (parser,
6395                                               /*allow_non_constant_p=*/false,
6396                                               NULL);
6397
6398         ellipsis = cp_lexer_peek_token (parser->lexer);
6399         if (ellipsis->type == CPP_ELLIPSIS)
6400           {
6401             /* Consume the `...' token.  */
6402             cp_lexer_consume_token (parser->lexer);
6403             expr_hi =
6404               cp_parser_constant_expression (parser,
6405                                              /*allow_non_constant_p=*/false,
6406                                              NULL);
6407             /* We don't need to emit warnings here, as the common code
6408                will do this for us.  */
6409           }
6410         else
6411           expr_hi = NULL_TREE;
6412
6413         if (parser->in_switch_statement_p)
6414           finish_case_label (expr, expr_hi);
6415         else
6416           error ("case label %qE not within a switch statement", expr);
6417       }
6418       break;
6419
6420     case RID_DEFAULT:
6421       /* Consume the `default' token.  */
6422       cp_lexer_consume_token (parser->lexer);
6423
6424       if (parser->in_switch_statement_p)
6425         finish_case_label (NULL_TREE, NULL_TREE);
6426       else
6427         error ("case label not within a switch statement");
6428       break;
6429
6430     default:
6431       /* Anything else must be an ordinary label.  */
6432       finish_label_stmt (cp_parser_identifier (parser));
6433       break;
6434     }
6435
6436   /* Require the `:' token.  */
6437   cp_parser_require (parser, CPP_COLON, "`:'");
6438 }
6439
6440 /* Parse an expression-statement.
6441
6442    expression-statement:
6443      expression [opt] ;
6444
6445    Returns the new EXPR_STMT -- or NULL_TREE if the expression
6446    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6447    indicates whether this expression-statement is part of an
6448    expression statement.  */
6449
6450 static tree
6451 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6452 {
6453   tree statement = NULL_TREE;
6454
6455   /* If the next token is a ';', then there is no expression
6456      statement.  */
6457   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6458     statement = cp_parser_expression (parser, /*cast_p=*/false);
6459
6460   /* Consume the final `;'.  */
6461   cp_parser_consume_semicolon_at_end_of_statement (parser);
6462
6463   if (in_statement_expr
6464       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6465     /* This is the final expression statement of a statement
6466        expression.  */
6467     statement = finish_stmt_expr_expr (statement, in_statement_expr);
6468   else if (statement)
6469     statement = finish_expr_stmt (statement);
6470   else
6471     finish_stmt ();
6472
6473   return statement;
6474 }
6475
6476 /* Parse a compound-statement.
6477
6478    compound-statement:
6479      { statement-seq [opt] }
6480
6481    Returns a tree representing the statement.  */
6482
6483 static tree
6484 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6485                               bool in_try)
6486 {
6487   tree compound_stmt;
6488
6489   /* Consume the `{'.  */
6490   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6491     return error_mark_node;
6492   /* Begin the compound-statement.  */
6493   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6494   /* Parse an (optional) statement-seq.  */
6495   cp_parser_statement_seq_opt (parser, in_statement_expr);
6496   /* Finish the compound-statement.  */
6497   finish_compound_stmt (compound_stmt);
6498   /* Consume the `}'.  */
6499   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6500
6501   return compound_stmt;
6502 }
6503
6504 /* Parse an (optional) statement-seq.
6505
6506    statement-seq:
6507      statement
6508      statement-seq [opt] statement  */
6509
6510 static void
6511 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6512 {
6513   /* Scan statements until there aren't any more.  */
6514   while (true)
6515     {
6516       cp_token *token = cp_lexer_peek_token (parser->lexer);
6517
6518       /* If we're looking at a `}', then we've run out of statements.  */
6519       if (token->type == CPP_CLOSE_BRACE
6520           || token->type == CPP_EOF
6521           || token->type == CPP_PRAGMA_EOL)
6522         break;
6523
6524       /* Parse the statement.  */
6525       cp_parser_statement (parser, in_statement_expr, true);
6526     }
6527 }
6528
6529 /* Parse a selection-statement.
6530
6531    selection-statement:
6532      if ( condition ) statement
6533      if ( condition ) statement else statement
6534      switch ( condition ) statement
6535
6536    Returns the new IF_STMT or SWITCH_STMT.  */
6537
6538 static tree
6539 cp_parser_selection_statement (cp_parser* parser)
6540 {
6541   cp_token *token;
6542   enum rid keyword;
6543
6544   /* Peek at the next token.  */
6545   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6546
6547   /* See what kind of keyword it is.  */
6548   keyword = token->keyword;
6549   switch (keyword)
6550     {
6551     case RID_IF:
6552     case RID_SWITCH:
6553       {
6554         tree statement;
6555         tree condition;
6556
6557         /* Look for the `('.  */
6558         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6559           {
6560             cp_parser_skip_to_end_of_statement (parser);
6561             return error_mark_node;
6562           }
6563
6564         /* Begin the selection-statement.  */
6565         if (keyword == RID_IF)
6566           statement = begin_if_stmt ();
6567         else
6568           statement = begin_switch_stmt ();
6569
6570         /* Parse the condition.  */
6571         condition = cp_parser_condition (parser);
6572         /* Look for the `)'.  */
6573         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6574           cp_parser_skip_to_closing_parenthesis (parser, true, false,
6575                                                  /*consume_paren=*/true);
6576
6577         if (keyword == RID_IF)
6578           {
6579             /* Add the condition.  */
6580             finish_if_stmt_cond (condition, statement);
6581
6582             /* Parse the then-clause.  */
6583             cp_parser_implicitly_scoped_statement (parser);
6584             finish_then_clause (statement);
6585
6586             /* If the next token is `else', parse the else-clause.  */
6587             if (cp_lexer_next_token_is_keyword (parser->lexer,
6588                                                 RID_ELSE))
6589               {
6590                 /* Consume the `else' keyword.  */
6591                 cp_lexer_consume_token (parser->lexer);
6592                 begin_else_clause (statement);
6593                 /* Parse the else-clause.  */
6594                 cp_parser_implicitly_scoped_statement (parser);
6595                 finish_else_clause (statement);
6596               }
6597
6598             /* Now we're all done with the if-statement.  */
6599             finish_if_stmt (statement);
6600           }
6601         else
6602           {
6603             bool in_switch_statement_p;
6604             unsigned char in_statement;
6605
6606             /* Add the condition.  */
6607             finish_switch_cond (condition, statement);
6608
6609             /* Parse the body of the switch-statement.  */
6610             in_switch_statement_p = parser->in_switch_statement_p;
6611             in_statement = parser->in_statement;
6612             parser->in_switch_statement_p = true;
6613             parser->in_statement |= IN_SWITCH_STMT;
6614             cp_parser_implicitly_scoped_statement (parser);
6615             parser->in_switch_statement_p = in_switch_statement_p;
6616             parser->in_statement = in_statement;
6617
6618             /* Now we're all done with the switch-statement.  */
6619             finish_switch_stmt (statement);
6620           }
6621
6622         return statement;
6623       }
6624       break;
6625
6626     default:
6627       cp_parser_error (parser, "expected selection-statement");
6628       return error_mark_node;
6629     }
6630 }
6631
6632 /* Parse a condition.
6633
6634    condition:
6635      expression
6636      type-specifier-seq declarator = assignment-expression
6637
6638    GNU Extension:
6639
6640    condition:
6641      type-specifier-seq declarator asm-specification [opt]
6642        attributes [opt] = assignment-expression
6643
6644    Returns the expression that should be tested.  */
6645
6646 static tree
6647 cp_parser_condition (cp_parser* parser)
6648 {
6649   cp_decl_specifier_seq type_specifiers;
6650   const char *saved_message;
6651
6652   /* Try the declaration first.  */
6653   cp_parser_parse_tentatively (parser);
6654   /* New types are not allowed in the type-specifier-seq for a
6655      condition.  */
6656   saved_message = parser->type_definition_forbidden_message;
6657   parser->type_definition_forbidden_message
6658     = "types may not be defined in conditions";
6659   /* Parse the type-specifier-seq.  */
6660   cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
6661                                 &type_specifiers);
6662   /* Restore the saved message.  */
6663   parser->type_definition_forbidden_message = saved_message;
6664   /* If all is well, we might be looking at a declaration.  */
6665   if (!cp_parser_error_occurred (parser))
6666     {
6667       tree decl;
6668       tree asm_specification;
6669       tree attributes;
6670       cp_declarator *declarator;
6671       tree initializer = NULL_TREE;
6672
6673       /* Parse the declarator.  */
6674       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6675                                          /*ctor_dtor_or_conv_p=*/NULL,
6676                                          /*parenthesized_p=*/NULL,
6677                                          /*member_p=*/false);
6678       /* Parse the attributes.  */
6679       attributes = cp_parser_attributes_opt (parser);
6680       /* Parse the asm-specification.  */
6681       asm_specification = cp_parser_asm_specification_opt (parser);
6682       /* If the next token is not an `=', then we might still be
6683          looking at an expression.  For example:
6684
6685            if (A(a).x)
6686
6687          looks like a decl-specifier-seq and a declarator -- but then
6688          there is no `=', so this is an expression.  */
6689       cp_parser_require (parser, CPP_EQ, "`='");
6690       /* If we did see an `=', then we are looking at a declaration
6691          for sure.  */
6692       if (cp_parser_parse_definitely (parser))
6693         {
6694           tree pushed_scope;
6695           bool non_constant_p;
6696
6697           /* Create the declaration.  */
6698           decl = start_decl (declarator, &type_specifiers,
6699                              /*initialized_p=*/true,
6700                              attributes, /*prefix_attributes=*/NULL_TREE,
6701                              &pushed_scope);
6702           /* Parse the assignment-expression.  */
6703           initializer
6704             = cp_parser_constant_expression (parser,
6705                                              /*allow_non_constant_p=*/true,
6706                                              &non_constant_p);
6707           if (!non_constant_p)
6708             initializer = fold_non_dependent_expr (initializer);
6709
6710           /* Process the initializer.  */
6711           cp_finish_decl (decl,
6712                           initializer, !non_constant_p,
6713                           asm_specification,
6714                           LOOKUP_ONLYCONVERTING);
6715
6716           if (pushed_scope)
6717             pop_scope (pushed_scope);
6718
6719           return convert_from_reference (decl);
6720         }
6721     }
6722   /* If we didn't even get past the declarator successfully, we are
6723      definitely not looking at a declaration.  */
6724   else
6725     cp_parser_abort_tentative_parse (parser);
6726
6727   /* Otherwise, we are looking at an expression.  */
6728   return cp_parser_expression (parser, /*cast_p=*/false);
6729 }
6730
6731 /* Parse an iteration-statement.
6732
6733    iteration-statement:
6734      while ( condition ) statement
6735      do statement while ( expression ) ;
6736      for ( for-init-statement condition [opt] ; expression [opt] )
6737        statement
6738
6739    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6740
6741 static tree
6742 cp_parser_iteration_statement (cp_parser* parser)
6743 {
6744   cp_token *token;
6745   enum rid keyword;
6746   tree statement;
6747   unsigned char in_statement;
6748
6749   /* Peek at the next token.  */
6750   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6751   if (!token)
6752     return error_mark_node;
6753
6754   /* Remember whether or not we are already within an iteration
6755      statement.  */
6756   in_statement = parser->in_statement;
6757
6758   /* See what kind of keyword it is.  */
6759   keyword = token->keyword;
6760   switch (keyword)
6761     {
6762     case RID_WHILE:
6763       {
6764         tree condition;
6765
6766         /* Begin the while-statement.  */
6767         statement = begin_while_stmt ();
6768         /* Look for the `('.  */
6769         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6770         /* Parse the condition.  */
6771         condition = cp_parser_condition (parser);
6772         finish_while_stmt_cond (condition, statement);
6773         /* Look for the `)'.  */
6774         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6775         /* Parse the dependent statement.  */
6776         parser->in_statement = IN_ITERATION_STMT;
6777         cp_parser_already_scoped_statement (parser);
6778         parser->in_statement = in_statement;
6779         /* We're done with the while-statement.  */
6780         finish_while_stmt (statement);
6781       }
6782       break;
6783
6784     case RID_DO:
6785       {
6786         tree expression;
6787
6788         /* Begin the do-statement.  */
6789         statement = begin_do_stmt ();
6790         /* Parse the body of the do-statement.  */
6791         parser->in_statement = IN_ITERATION_STMT;
6792         cp_parser_implicitly_scoped_statement (parser);
6793         parser->in_statement = in_statement;
6794         finish_do_body (statement);
6795         /* Look for the `while' keyword.  */
6796         cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6797         /* Look for the `('.  */
6798         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6799         /* Parse the expression.  */
6800         expression = cp_parser_expression (parser, /*cast_p=*/false);
6801         /* We're done with the do-statement.  */
6802         finish_do_stmt (expression, statement);
6803         /* Look for the `)'.  */
6804         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6805         /* Look for the `;'.  */
6806         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6807       }
6808       break;
6809
6810     case RID_FOR:
6811       {
6812         tree condition = NULL_TREE;
6813         tree expression = NULL_TREE;
6814
6815         /* Begin the for-statement.  */
6816         statement = begin_for_stmt ();
6817         /* Look for the `('.  */
6818         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6819         /* Parse the initialization.  */
6820         cp_parser_for_init_statement (parser);
6821         finish_for_init_stmt (statement);
6822
6823         /* If there's a condition, process it.  */
6824         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6825           condition = cp_parser_condition (parser);
6826         finish_for_cond (condition, statement);
6827         /* Look for the `;'.  */
6828         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6829
6830         /* If there's an expression, process it.  */
6831         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6832           expression = cp_parser_expression (parser, /*cast_p=*/false);
6833         finish_for_expr (expression, statement);
6834         /* Look for the `)'.  */
6835         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6836
6837         /* Parse the body of the for-statement.  */
6838         parser->in_statement = IN_ITERATION_STMT;
6839         cp_parser_already_scoped_statement (parser);
6840         parser->in_statement = in_statement;
6841
6842         /* We're done with the for-statement.  */
6843         finish_for_stmt (statement);
6844       }
6845       break;
6846
6847     default:
6848       cp_parser_error (parser, "expected iteration-statement");
6849       statement = error_mark_node;
6850       break;
6851     }
6852
6853   return statement;
6854 }
6855
6856 /* Parse a for-init-statement.
6857
6858    for-init-statement:
6859      expression-statement
6860      simple-declaration  */
6861
6862 static void
6863 cp_parser_for_init_statement (cp_parser* parser)
6864 {
6865   /* If the next token is a `;', then we have an empty
6866      expression-statement.  Grammatically, this is also a
6867      simple-declaration, but an invalid one, because it does not
6868      declare anything.  Therefore, if we did not handle this case
6869      specially, we would issue an error message about an invalid
6870      declaration.  */
6871   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6872     {
6873       /* We're going to speculatively look for a declaration, falling back
6874          to an expression, if necessary.  */
6875       cp_parser_parse_tentatively (parser);
6876       /* Parse the declaration.  */
6877       cp_parser_simple_declaration (parser,
6878                                     /*function_definition_allowed_p=*/false);
6879       /* If the tentative parse failed, then we shall need to look for an
6880          expression-statement.  */
6881       if (cp_parser_parse_definitely (parser))
6882         return;
6883     }
6884
6885   cp_parser_expression_statement (parser, false);
6886 }
6887
6888 /* Parse a jump-statement.
6889
6890    jump-statement:
6891      break ;
6892      continue ;
6893      return expression [opt] ;
6894      goto identifier ;
6895
6896    GNU extension:
6897
6898    jump-statement:
6899      goto * expression ;
6900
6901    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
6902
6903 static tree
6904 cp_parser_jump_statement (cp_parser* parser)
6905 {
6906   tree statement = error_mark_node;
6907   cp_token *token;
6908   enum rid keyword;
6909
6910   /* Peek at the next token.  */
6911   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6912   if (!token)
6913     return error_mark_node;
6914
6915   /* See what kind of keyword it is.  */
6916   keyword = token->keyword;
6917   switch (keyword)
6918     {
6919     case RID_BREAK:
6920       switch (parser->in_statement)
6921         {
6922         case 0:
6923           error ("break statement not within loop or switch");
6924           break;
6925         default:
6926           gcc_assert ((parser->in_statement & IN_SWITCH_STMT)
6927                       || parser->in_statement == IN_ITERATION_STMT);
6928           statement = finish_break_stmt ();
6929           break;
6930         case IN_OMP_BLOCK:
6931           error ("invalid exit from OpenMP structured block");
6932           break;
6933         case IN_OMP_FOR:
6934           error ("break statement used with OpenMP for loop");
6935           break;
6936         }
6937       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6938       break;
6939
6940     case RID_CONTINUE:
6941       switch (parser->in_statement & ~IN_SWITCH_STMT)
6942         {
6943         case 0:
6944           error ("continue statement not within a loop");
6945           break;
6946         case IN_ITERATION_STMT:
6947         case IN_OMP_FOR:
6948           statement = finish_continue_stmt ();
6949           break;
6950         case IN_OMP_BLOCK:
6951           error ("invalid exit from OpenMP structured block");
6952           break;
6953         default:
6954           gcc_unreachable ();
6955         }
6956       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6957       break;
6958
6959     case RID_RETURN:
6960       {
6961         tree expr;
6962
6963         /* If the next token is a `;', then there is no
6964            expression.  */
6965         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6966           expr = cp_parser_expression (parser, /*cast_p=*/false);
6967         else
6968           expr = NULL_TREE;
6969         /* Build the return-statement.  */
6970         statement = finish_return_stmt (expr);
6971         /* Look for the final `;'.  */
6972         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6973       }
6974       break;
6975
6976     case RID_GOTO:
6977       /* Create the goto-statement.  */
6978       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
6979         {
6980           /* Issue a warning about this use of a GNU extension.  */
6981           if (pedantic)
6982             pedwarn ("ISO C++ forbids computed gotos");
6983           /* Consume the '*' token.  */
6984           cp_lexer_consume_token (parser->lexer);
6985           /* Parse the dependent expression.  */
6986           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
6987         }
6988       else
6989         finish_goto_stmt (cp_parser_identifier (parser));
6990       /* Look for the final `;'.  */
6991       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6992       break;
6993
6994     default:
6995       cp_parser_error (parser, "expected jump-statement");
6996       break;
6997     }
6998
6999   return statement;
7000 }
7001
7002 /* Parse a declaration-statement.
7003
7004    declaration-statement:
7005      block-declaration  */
7006
7007 static void
7008 cp_parser_declaration_statement (cp_parser* parser)
7009 {
7010   void *p;
7011
7012   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7013   p = obstack_alloc (&declarator_obstack, 0);
7014
7015  /* Parse the block-declaration.  */
7016   cp_parser_block_declaration (parser, /*statement_p=*/true);
7017
7018   /* Free any declarators allocated.  */
7019   obstack_free (&declarator_obstack, p);
7020
7021   /* Finish off the statement.  */
7022   finish_stmt ();
7023 }
7024
7025 /* Some dependent statements (like `if (cond) statement'), are
7026    implicitly in their own scope.  In other words, if the statement is
7027    a single statement (as opposed to a compound-statement), it is
7028    none-the-less treated as if it were enclosed in braces.  Any
7029    declarations appearing in the dependent statement are out of scope
7030    after control passes that point.  This function parses a statement,
7031    but ensures that is in its own scope, even if it is not a
7032    compound-statement.
7033
7034    Returns the new statement.  */
7035
7036 static tree
7037 cp_parser_implicitly_scoped_statement (cp_parser* parser)
7038 {
7039   tree statement;
7040
7041   /* Mark if () ; with a special NOP_EXPR.  */
7042   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7043     {
7044       cp_lexer_consume_token (parser->lexer);
7045       statement = add_stmt (build_empty_stmt ());
7046     }
7047   /* if a compound is opened, we simply parse the statement directly.  */
7048   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7049     statement = cp_parser_compound_statement (parser, NULL, false);
7050   /* If the token is not a `{', then we must take special action.  */
7051   else
7052     {
7053       /* Create a compound-statement.  */
7054       statement = begin_compound_stmt (0);
7055       /* Parse the dependent-statement.  */
7056       cp_parser_statement (parser, NULL_TREE, false);
7057       /* Finish the dummy compound-statement.  */
7058       finish_compound_stmt (statement);
7059     }
7060
7061   /* Return the statement.  */
7062   return statement;
7063 }
7064
7065 /* For some dependent statements (like `while (cond) statement'), we
7066    have already created a scope.  Therefore, even if the dependent
7067    statement is a compound-statement, we do not want to create another
7068    scope.  */
7069
7070 static void
7071 cp_parser_already_scoped_statement (cp_parser* parser)
7072 {
7073   /* If the token is a `{', then we must take special action.  */
7074   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7075     cp_parser_statement (parser, NULL_TREE, false);
7076   else
7077     {
7078       /* Avoid calling cp_parser_compound_statement, so that we
7079          don't create a new scope.  Do everything else by hand.  */
7080       cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
7081       cp_parser_statement_seq_opt (parser, NULL_TREE);
7082       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7083     }
7084 }
7085
7086 /* Declarations [gram.dcl.dcl] */
7087
7088 /* Parse an optional declaration-sequence.
7089
7090    declaration-seq:
7091      declaration
7092      declaration-seq declaration  */
7093
7094 static void
7095 cp_parser_declaration_seq_opt (cp_parser* parser)
7096 {
7097   while (true)
7098     {
7099       cp_token *token;
7100
7101       token = cp_lexer_peek_token (parser->lexer);
7102
7103       if (token->type == CPP_CLOSE_BRACE
7104           || token->type == CPP_EOF
7105           || token->type == CPP_PRAGMA_EOL)
7106         break;
7107
7108       if (token->type == CPP_SEMICOLON)
7109         {
7110           /* A declaration consisting of a single semicolon is
7111              invalid.  Allow it unless we're being pedantic.  */
7112           cp_lexer_consume_token (parser->lexer);
7113           if (pedantic && !in_system_header)
7114             pedwarn ("extra %<;%>");
7115           continue;
7116         }
7117
7118       /* If we're entering or exiting a region that's implicitly
7119          extern "C", modify the lang context appropriately.  */
7120       if (!parser->implicit_extern_c && token->implicit_extern_c)
7121         {
7122           push_lang_context (lang_name_c);
7123           parser->implicit_extern_c = true;
7124         }
7125       else if (parser->implicit_extern_c && !token->implicit_extern_c)
7126         {
7127           pop_lang_context ();
7128           parser->implicit_extern_c = false;
7129         }
7130
7131       if (token->type == CPP_PRAGMA)
7132         {
7133           /* A top-level declaration can consist solely of a #pragma.
7134              A nested declaration cannot, so this is done here and not
7135              in cp_parser_declaration.  (A #pragma at block scope is
7136              handled in cp_parser_statement.)  */
7137           cp_parser_pragma (parser, pragma_external);
7138           continue;
7139         }
7140
7141       /* Parse the declaration itself.  */
7142       cp_parser_declaration (parser);
7143     }
7144 }
7145
7146 /* Parse a declaration.
7147
7148    declaration:
7149      block-declaration
7150      function-definition
7151      template-declaration
7152      explicit-instantiation
7153      explicit-specialization
7154      linkage-specification
7155      namespace-definition
7156
7157    GNU extension:
7158
7159    declaration:
7160       __extension__ declaration */
7161
7162 static void
7163 cp_parser_declaration (cp_parser* parser)
7164 {
7165   cp_token token1;
7166   cp_token token2;
7167   int saved_pedantic;
7168   void *p;
7169
7170   /* Check for the `__extension__' keyword.  */
7171   if (cp_parser_extension_opt (parser, &saved_pedantic))
7172     {
7173       /* Parse the qualified declaration.  */
7174       cp_parser_declaration (parser);
7175       /* Restore the PEDANTIC flag.  */
7176       pedantic = saved_pedantic;
7177
7178       return;
7179     }
7180
7181   /* Try to figure out what kind of declaration is present.  */
7182   token1 = *cp_lexer_peek_token (parser->lexer);
7183
7184   if (token1.type != CPP_EOF)
7185     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7186   else
7187     {
7188       token2.type = CPP_EOF;
7189       token2.keyword = RID_MAX;
7190     }
7191
7192   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7193   p = obstack_alloc (&declarator_obstack, 0);
7194
7195   /* If the next token is `extern' and the following token is a string
7196      literal, then we have a linkage specification.  */
7197   if (token1.keyword == RID_EXTERN
7198       && cp_parser_is_string_literal (&token2))
7199     cp_parser_linkage_specification (parser);
7200   /* If the next token is `template', then we have either a template
7201      declaration, an explicit instantiation, or an explicit
7202      specialization.  */
7203   else if (token1.keyword == RID_TEMPLATE)
7204     {
7205       /* `template <>' indicates a template specialization.  */
7206       if (token2.type == CPP_LESS
7207           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
7208         cp_parser_explicit_specialization (parser);
7209       /* `template <' indicates a template declaration.  */
7210       else if (token2.type == CPP_LESS)
7211         cp_parser_template_declaration (parser, /*member_p=*/false);
7212       /* Anything else must be an explicit instantiation.  */
7213       else
7214         cp_parser_explicit_instantiation (parser);
7215     }
7216   /* If the next token is `export', then we have a template
7217      declaration.  */
7218   else if (token1.keyword == RID_EXPORT)
7219     cp_parser_template_declaration (parser, /*member_p=*/false);
7220   /* If the next token is `extern', 'static' or 'inline' and the one
7221      after that is `template', we have a GNU extended explicit
7222      instantiation directive.  */
7223   else if (cp_parser_allow_gnu_extensions_p (parser)
7224            && (token1.keyword == RID_EXTERN
7225                || token1.keyword == RID_STATIC
7226                || token1.keyword == RID_INLINE)
7227            && token2.keyword == RID_TEMPLATE)
7228     cp_parser_explicit_instantiation (parser);
7229   /* If the next token is `namespace', check for a named or unnamed
7230      namespace definition.  */
7231   else if (token1.keyword == RID_NAMESPACE
7232            && (/* A named namespace definition.  */
7233                (token2.type == CPP_NAME
7234                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
7235                     != CPP_EQ))
7236                /* An unnamed namespace definition.  */
7237                || token2.type == CPP_OPEN_BRACE
7238                || token2.keyword == RID_ATTRIBUTE))
7239     cp_parser_namespace_definition (parser);
7240   /* Objective-C++ declaration/definition.  */
7241   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
7242     cp_parser_objc_declaration (parser);
7243   /* We must have either a block declaration or a function
7244      definition.  */
7245   else
7246     /* Try to parse a block-declaration, or a function-definition.  */
7247     cp_parser_block_declaration (parser, /*statement_p=*/false);
7248
7249   /* Free any declarators allocated.  */
7250   obstack_free (&declarator_obstack, p);
7251 }
7252
7253 /* Parse a block-declaration.
7254
7255    block-declaration:
7256      simple-declaration
7257      asm-definition
7258      namespace-alias-definition
7259      using-declaration
7260      using-directive
7261
7262    GNU Extension:
7263
7264    block-declaration:
7265      __extension__ block-declaration
7266      label-declaration
7267
7268    If STATEMENT_P is TRUE, then this block-declaration is occurring as
7269    part of a declaration-statement.  */
7270
7271 static void
7272 cp_parser_block_declaration (cp_parser *parser,
7273                              bool      statement_p)
7274 {
7275   cp_token *token1;
7276   int saved_pedantic;
7277
7278   /* Check for the `__extension__' keyword.  */
7279   if (cp_parser_extension_opt (parser, &saved_pedantic))
7280     {
7281       /* Parse the qualified declaration.  */
7282       cp_parser_block_declaration (parser, statement_p);
7283       /* Restore the PEDANTIC flag.  */
7284       pedantic = saved_pedantic;
7285
7286       return;
7287     }
7288
7289   /* Peek at the next token to figure out which kind of declaration is
7290      present.  */
7291   token1 = cp_lexer_peek_token (parser->lexer);
7292
7293   /* If the next keyword is `asm', we have an asm-definition.  */
7294   if (token1->keyword == RID_ASM)
7295     {
7296       if (statement_p)
7297         cp_parser_commit_to_tentative_parse (parser);
7298       cp_parser_asm_definition (parser);
7299     }
7300   /* If the next keyword is `namespace', we have a
7301      namespace-alias-definition.  */
7302   else if (token1->keyword == RID_NAMESPACE)
7303     cp_parser_namespace_alias_definition (parser);
7304   /* If the next keyword is `using', we have either a
7305      using-declaration or a using-directive.  */
7306   else if (token1->keyword == RID_USING)
7307     {
7308       cp_token *token2;
7309
7310       if (statement_p)
7311         cp_parser_commit_to_tentative_parse (parser);
7312       /* If the token after `using' is `namespace', then we have a
7313          using-directive.  */
7314       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
7315       if (token2->keyword == RID_NAMESPACE)
7316         cp_parser_using_directive (parser);
7317       /* Otherwise, it's a using-declaration.  */
7318       else
7319         cp_parser_using_declaration (parser,
7320                                      /*access_declaration_p=*/false);
7321     }
7322   /* If the next keyword is `__label__' we have a label declaration.  */
7323   else if (token1->keyword == RID_LABEL)
7324     {
7325       if (statement_p)
7326         cp_parser_commit_to_tentative_parse (parser);
7327       cp_parser_label_declaration (parser);
7328     }
7329   /* Anything else must be a simple-declaration.  */
7330   else
7331     cp_parser_simple_declaration (parser, !statement_p);
7332 }
7333
7334 /* Parse a simple-declaration.
7335
7336    simple-declaration:
7337      decl-specifier-seq [opt] init-declarator-list [opt] ;
7338
7339    init-declarator-list:
7340      init-declarator
7341      init-declarator-list , init-declarator
7342
7343    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
7344    function-definition as a simple-declaration.  */
7345
7346 static void
7347 cp_parser_simple_declaration (cp_parser* parser,
7348                               bool function_definition_allowed_p)
7349 {
7350   cp_decl_specifier_seq decl_specifiers;
7351   int declares_class_or_enum;
7352   bool saw_declarator;
7353
7354   /* Defer access checks until we know what is being declared; the
7355      checks for names appearing in the decl-specifier-seq should be
7356      done as if we were in the scope of the thing being declared.  */
7357   push_deferring_access_checks (dk_deferred);
7358
7359   /* Parse the decl-specifier-seq.  We have to keep track of whether
7360      or not the decl-specifier-seq declares a named class or
7361      enumeration type, since that is the only case in which the
7362      init-declarator-list is allowed to be empty.
7363
7364      [dcl.dcl]
7365
7366      In a simple-declaration, the optional init-declarator-list can be
7367      omitted only when declaring a class or enumeration, that is when
7368      the decl-specifier-seq contains either a class-specifier, an
7369      elaborated-type-specifier, or an enum-specifier.  */
7370   cp_parser_decl_specifier_seq (parser,
7371                                 CP_PARSER_FLAGS_OPTIONAL,
7372                                 &decl_specifiers,
7373                                 &declares_class_or_enum);
7374   /* We no longer need to defer access checks.  */
7375   stop_deferring_access_checks ();
7376
7377   /* In a block scope, a valid declaration must always have a
7378      decl-specifier-seq.  By not trying to parse declarators, we can
7379      resolve the declaration/expression ambiguity more quickly.  */
7380   if (!function_definition_allowed_p
7381       && !decl_specifiers.any_specifiers_p)
7382     {
7383       cp_parser_error (parser, "expected declaration");
7384       goto done;
7385     }
7386
7387   /* If the next two tokens are both identifiers, the code is
7388      erroneous. The usual cause of this situation is code like:
7389
7390        T t;
7391
7392      where "T" should name a type -- but does not.  */
7393   if (!decl_specifiers.type
7394       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
7395     {
7396       /* If parsing tentatively, we should commit; we really are
7397          looking at a declaration.  */
7398       cp_parser_commit_to_tentative_parse (parser);
7399       /* Give up.  */
7400       goto done;
7401     }
7402
7403   /* If we have seen at least one decl-specifier, and the next token
7404      is not a parenthesis, then we must be looking at a declaration.
7405      (After "int (" we might be looking at a functional cast.)  */
7406   if (decl_specifiers.any_specifiers_p
7407       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
7408     cp_parser_commit_to_tentative_parse (parser);
7409
7410   /* Keep going until we hit the `;' at the end of the simple
7411      declaration.  */
7412   saw_declarator = false;
7413   while (cp_lexer_next_token_is_not (parser->lexer,
7414                                      CPP_SEMICOLON))
7415     {
7416       cp_token *token;
7417       bool function_definition_p;
7418       tree decl;
7419
7420       if (saw_declarator)
7421         {
7422           /* If we are processing next declarator, coma is expected */
7423           token = cp_lexer_peek_token (parser->lexer);
7424           gcc_assert (token->type == CPP_COMMA);
7425           cp_lexer_consume_token (parser->lexer);
7426         }
7427       else
7428         saw_declarator = true;
7429
7430       /* Parse the init-declarator.  */
7431       decl = cp_parser_init_declarator (parser, &decl_specifiers,
7432                                         /*checks=*/NULL,
7433                                         function_definition_allowed_p,
7434                                         /*member_p=*/false,
7435                                         declares_class_or_enum,
7436                                         &function_definition_p);
7437       /* If an error occurred while parsing tentatively, exit quickly.
7438          (That usually happens when in the body of a function; each
7439          statement is treated as a declaration-statement until proven
7440          otherwise.)  */
7441       if (cp_parser_error_occurred (parser))
7442         goto done;
7443       /* Handle function definitions specially.  */
7444       if (function_definition_p)
7445         {
7446           /* If the next token is a `,', then we are probably
7447              processing something like:
7448
7449                void f() {}, *p;
7450
7451              which is erroneous.  */
7452           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7453             error ("mixing declarations and function-definitions is forbidden");
7454           /* Otherwise, we're done with the list of declarators.  */
7455           else
7456             {
7457               pop_deferring_access_checks ();
7458               return;
7459             }
7460         }
7461       /* The next token should be either a `,' or a `;'.  */
7462       token = cp_lexer_peek_token (parser->lexer);
7463       /* If it's a `,', there are more declarators to come.  */
7464       if (token->type == CPP_COMMA)
7465         /* will be consumed next time around */;
7466       /* If it's a `;', we are done.  */
7467       else if (token->type == CPP_SEMICOLON)
7468         break;
7469       /* Anything else is an error.  */
7470       else
7471         {
7472           /* If we have already issued an error message we don't need
7473              to issue another one.  */
7474           if (decl != error_mark_node
7475               || cp_parser_uncommitted_to_tentative_parse_p (parser))
7476             cp_parser_error (parser, "expected %<,%> or %<;%>");
7477           /* Skip tokens until we reach the end of the statement.  */
7478           cp_parser_skip_to_end_of_statement (parser);
7479           /* If the next token is now a `;', consume it.  */
7480           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7481             cp_lexer_consume_token (parser->lexer);
7482           goto done;
7483         }
7484       /* After the first time around, a function-definition is not
7485          allowed -- even if it was OK at first.  For example:
7486
7487            int i, f() {}
7488
7489          is not valid.  */
7490       function_definition_allowed_p = false;
7491     }
7492
7493   /* Issue an error message if no declarators are present, and the
7494      decl-specifier-seq does not itself declare a class or
7495      enumeration.  */
7496   if (!saw_declarator)
7497     {
7498       if (cp_parser_declares_only_class_p (parser))
7499         shadow_tag (&decl_specifiers);
7500       /* Perform any deferred access checks.  */
7501       perform_deferred_access_checks ();
7502     }
7503
7504   /* Consume the `;'.  */
7505   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7506
7507  done:
7508   pop_deferring_access_checks ();
7509 }
7510
7511 /* Parse a decl-specifier-seq.
7512
7513    decl-specifier-seq:
7514      decl-specifier-seq [opt] decl-specifier
7515
7516    decl-specifier:
7517      storage-class-specifier
7518      type-specifier
7519      function-specifier
7520      friend
7521      typedef
7522
7523    GNU Extension:
7524
7525    decl-specifier:
7526      attributes
7527
7528    Set *DECL_SPECS to a representation of the decl-specifier-seq.
7529
7530    The parser flags FLAGS is used to control type-specifier parsing.
7531
7532    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7533    flags:
7534
7535      1: one of the decl-specifiers is an elaborated-type-specifier
7536         (i.e., a type declaration)
7537      2: one of the decl-specifiers is an enum-specifier or a
7538         class-specifier (i.e., a type definition)
7539
7540    */
7541
7542 static void
7543 cp_parser_decl_specifier_seq (cp_parser* parser,
7544                               cp_parser_flags flags,
7545                               cp_decl_specifier_seq *decl_specs,
7546                               int* declares_class_or_enum)
7547 {
7548   bool constructor_possible_p = !parser->in_declarator_p;
7549
7550   /* Clear DECL_SPECS.  */
7551   clear_decl_specs (decl_specs);
7552
7553   /* Assume no class or enumeration type is declared.  */
7554   *declares_class_or_enum = 0;
7555
7556   /* Keep reading specifiers until there are no more to read.  */
7557   while (true)
7558     {
7559       bool constructor_p;
7560       bool found_decl_spec;
7561       cp_token *token;
7562
7563       /* Peek at the next token.  */
7564       token = cp_lexer_peek_token (parser->lexer);
7565       /* Handle attributes.  */
7566       if (token->keyword == RID_ATTRIBUTE)
7567         {
7568           /* Parse the attributes.  */
7569           decl_specs->attributes
7570             = chainon (decl_specs->attributes,
7571                        cp_parser_attributes_opt (parser));
7572           continue;
7573         }
7574       /* Assume we will find a decl-specifier keyword.  */
7575       found_decl_spec = true;
7576       /* If the next token is an appropriate keyword, we can simply
7577          add it to the list.  */
7578       switch (token->keyword)
7579         {
7580           /* decl-specifier:
7581                friend  */
7582         case RID_FRIEND:
7583           if (!at_class_scope_p ())
7584             {
7585               error ("%<friend%> used outside of class");
7586               cp_lexer_purge_token (parser->lexer);
7587             }
7588           else
7589             {
7590               ++decl_specs->specs[(int) ds_friend];
7591               /* Consume the token.  */
7592               cp_lexer_consume_token (parser->lexer);
7593             }
7594           break;
7595
7596           /* function-specifier:
7597                inline
7598                virtual
7599                explicit  */
7600         case RID_INLINE:
7601         case RID_VIRTUAL:
7602         case RID_EXPLICIT:
7603           cp_parser_function_specifier_opt (parser, decl_specs);
7604           break;
7605
7606           /* decl-specifier:
7607                typedef  */
7608         case RID_TYPEDEF:
7609           ++decl_specs->specs[(int) ds_typedef];
7610           /* Consume the token.  */
7611           cp_lexer_consume_token (parser->lexer);
7612           /* A constructor declarator cannot appear in a typedef.  */
7613           constructor_possible_p = false;
7614           /* The "typedef" keyword can only occur in a declaration; we
7615              may as well commit at this point.  */
7616           cp_parser_commit_to_tentative_parse (parser);
7617
7618           if (decl_specs->storage_class != sc_none)
7619             decl_specs->conflicting_specifiers_p = true;
7620           break;
7621
7622           /* storage-class-specifier:
7623                auto
7624                register
7625                static
7626                extern
7627                mutable
7628
7629              GNU Extension:
7630                thread  */
7631         case RID_AUTO:
7632         case RID_REGISTER:
7633         case RID_STATIC:
7634         case RID_EXTERN:
7635         case RID_MUTABLE:
7636           /* Consume the token.  */
7637           cp_lexer_consume_token (parser->lexer);
7638           cp_parser_set_storage_class (parser, decl_specs, token->keyword);
7639           break;
7640         case RID_THREAD:
7641           /* Consume the token.  */
7642           cp_lexer_consume_token (parser->lexer);
7643           ++decl_specs->specs[(int) ds_thread];
7644           break;
7645
7646         default:
7647           /* We did not yet find a decl-specifier yet.  */
7648           found_decl_spec = false;
7649           break;
7650         }
7651
7652       /* Constructors are a special case.  The `S' in `S()' is not a
7653          decl-specifier; it is the beginning of the declarator.  */
7654       constructor_p
7655         = (!found_decl_spec
7656            && constructor_possible_p
7657            && (cp_parser_constructor_declarator_p
7658                (parser, decl_specs->specs[(int) ds_friend] != 0)));
7659
7660       /* If we don't have a DECL_SPEC yet, then we must be looking at
7661          a type-specifier.  */
7662       if (!found_decl_spec && !constructor_p)
7663         {
7664           int decl_spec_declares_class_or_enum;
7665           bool is_cv_qualifier;
7666           tree type_spec;
7667
7668           type_spec
7669             = cp_parser_type_specifier (parser, flags,
7670                                         decl_specs,
7671                                         /*is_declaration=*/true,
7672                                         &decl_spec_declares_class_or_enum,
7673                                         &is_cv_qualifier);
7674
7675           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
7676
7677           /* If this type-specifier referenced a user-defined type
7678              (a typedef, class-name, etc.), then we can't allow any
7679              more such type-specifiers henceforth.
7680
7681              [dcl.spec]
7682
7683              The longest sequence of decl-specifiers that could
7684              possibly be a type name is taken as the
7685              decl-specifier-seq of a declaration.  The sequence shall
7686              be self-consistent as described below.
7687
7688              [dcl.type]
7689
7690              As a general rule, at most one type-specifier is allowed
7691              in the complete decl-specifier-seq of a declaration.  The
7692              only exceptions are the following:
7693
7694              -- const or volatile can be combined with any other
7695                 type-specifier.
7696
7697              -- signed or unsigned can be combined with char, long,
7698                 short, or int.
7699
7700              -- ..
7701
7702              Example:
7703
7704                typedef char* Pc;
7705                void g (const int Pc);
7706
7707              Here, Pc is *not* part of the decl-specifier seq; it's
7708              the declarator.  Therefore, once we see a type-specifier
7709              (other than a cv-qualifier), we forbid any additional
7710              user-defined types.  We *do* still allow things like `int
7711              int' to be considered a decl-specifier-seq, and issue the
7712              error message later.  */
7713           if (type_spec && !is_cv_qualifier)
7714             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
7715           /* A constructor declarator cannot follow a type-specifier.  */
7716           if (type_spec)
7717             {
7718               constructor_possible_p = false;
7719               found_decl_spec = true;
7720             }
7721         }
7722
7723       /* If we still do not have a DECL_SPEC, then there are no more
7724          decl-specifiers.  */
7725       if (!found_decl_spec)
7726         break;
7727
7728       decl_specs->any_specifiers_p = true;
7729       /* After we see one decl-specifier, further decl-specifiers are
7730          always optional.  */
7731       flags |= CP_PARSER_FLAGS_OPTIONAL;
7732     }
7733
7734   cp_parser_check_decl_spec (decl_specs);
7735
7736   /* Don't allow a friend specifier with a class definition.  */
7737   if (decl_specs->specs[(int) ds_friend] != 0
7738       && (*declares_class_or_enum & 2))
7739     error ("class definition may not be declared a friend");
7740 }
7741
7742 /* Parse an (optional) storage-class-specifier.
7743
7744    storage-class-specifier:
7745      auto
7746      register
7747      static
7748      extern
7749      mutable
7750
7751    GNU Extension:
7752
7753    storage-class-specifier:
7754      thread
7755
7756    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7757
7758 static tree
7759 cp_parser_storage_class_specifier_opt (cp_parser* parser)
7760 {
7761   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7762     {
7763     case RID_AUTO:
7764     case RID_REGISTER:
7765     case RID_STATIC:
7766     case RID_EXTERN:
7767     case RID_MUTABLE:
7768     case RID_THREAD:
7769       /* Consume the token.  */
7770       return cp_lexer_consume_token (parser->lexer)->u.value;
7771
7772     default:
7773       return NULL_TREE;
7774     }
7775 }
7776
7777 /* Parse an (optional) function-specifier.
7778
7779    function-specifier:
7780      inline
7781      virtual
7782      explicit
7783
7784    Returns an IDENTIFIER_NODE corresponding to the keyword used.
7785    Updates DECL_SPECS, if it is non-NULL.  */
7786
7787 static tree
7788 cp_parser_function_specifier_opt (cp_parser* parser,
7789                                   cp_decl_specifier_seq *decl_specs)
7790 {
7791   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7792     {
7793     case RID_INLINE:
7794       if (decl_specs)
7795         ++decl_specs->specs[(int) ds_inline];
7796       break;
7797
7798     case RID_VIRTUAL:
7799       /* 14.5.2.3 [temp.mem]
7800
7801          A member function template shall not be virtual.  */
7802       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7803         error ("templates may not be %<virtual%>");
7804       else if (decl_specs)
7805         ++decl_specs->specs[(int) ds_virtual];
7806       break;
7807
7808     case RID_EXPLICIT:
7809       if (decl_specs)
7810         ++decl_specs->specs[(int) ds_explicit];
7811       break;
7812
7813     default:
7814       return NULL_TREE;
7815     }
7816
7817   /* Consume the token.  */
7818   return cp_lexer_consume_token (parser->lexer)->u.value;
7819 }
7820
7821 /* Parse a linkage-specification.
7822
7823    linkage-specification:
7824      extern string-literal { declaration-seq [opt] }
7825      extern string-literal declaration  */
7826
7827 static void
7828 cp_parser_linkage_specification (cp_parser* parser)
7829 {
7830   tree linkage;
7831
7832   /* Look for the `extern' keyword.  */
7833   cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7834
7835   /* Look for the string-literal.  */
7836   linkage = cp_parser_string_literal (parser, false, false);
7837
7838   /* Transform the literal into an identifier.  If the literal is a
7839      wide-character string, or contains embedded NULs, then we can't
7840      handle it as the user wants.  */
7841   if (strlen (TREE_STRING_POINTER (linkage))
7842       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
7843     {
7844       cp_parser_error (parser, "invalid linkage-specification");
7845       /* Assume C++ linkage.  */
7846       linkage = lang_name_cplusplus;
7847     }
7848   else
7849     linkage = get_identifier (TREE_STRING_POINTER (linkage));
7850
7851   /* We're now using the new linkage.  */
7852   push_lang_context (linkage);
7853
7854   /* If the next token is a `{', then we're using the first
7855      production.  */
7856   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7857     {
7858       /* Consume the `{' token.  */
7859       cp_lexer_consume_token (parser->lexer);
7860       /* Parse the declarations.  */
7861       cp_parser_declaration_seq_opt (parser);
7862       /* Look for the closing `}'.  */
7863       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7864     }
7865   /* Otherwise, there's just one declaration.  */
7866   else
7867     {
7868       bool saved_in_unbraced_linkage_specification_p;
7869
7870       saved_in_unbraced_linkage_specification_p
7871         = parser->in_unbraced_linkage_specification_p;
7872       parser->in_unbraced_linkage_specification_p = true;
7873       cp_parser_declaration (parser);
7874       parser->in_unbraced_linkage_specification_p
7875         = saved_in_unbraced_linkage_specification_p;
7876     }
7877
7878   /* We're done with the linkage-specification.  */
7879   pop_lang_context ();
7880 }
7881
7882 /* Special member functions [gram.special] */
7883
7884 /* Parse a conversion-function-id.
7885
7886    conversion-function-id:
7887      operator conversion-type-id
7888
7889    Returns an IDENTIFIER_NODE representing the operator.  */
7890
7891 static tree
7892 cp_parser_conversion_function_id (cp_parser* parser)
7893 {
7894   tree type;
7895   tree saved_scope;
7896   tree saved_qualifying_scope;
7897   tree saved_object_scope;
7898   tree pushed_scope = NULL_TREE;
7899
7900   /* Look for the `operator' token.  */
7901   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7902     return error_mark_node;
7903   /* When we parse the conversion-type-id, the current scope will be
7904      reset.  However, we need that information in able to look up the
7905      conversion function later, so we save it here.  */
7906   saved_scope = parser->scope;
7907   saved_qualifying_scope = parser->qualifying_scope;
7908   saved_object_scope = parser->object_scope;
7909   /* We must enter the scope of the class so that the names of
7910      entities declared within the class are available in the
7911      conversion-type-id.  For example, consider:
7912
7913        struct S {
7914          typedef int I;
7915          operator I();
7916        };
7917
7918        S::operator I() { ... }
7919
7920      In order to see that `I' is a type-name in the definition, we
7921      must be in the scope of `S'.  */
7922   if (saved_scope)
7923     pushed_scope = push_scope (saved_scope);
7924   /* Parse the conversion-type-id.  */
7925   type = cp_parser_conversion_type_id (parser);
7926   /* Leave the scope of the class, if any.  */
7927   if (pushed_scope)
7928     pop_scope (pushed_scope);
7929   /* Restore the saved scope.  */
7930   parser->scope = saved_scope;
7931   parser->qualifying_scope = saved_qualifying_scope;
7932   parser->object_scope = saved_object_scope;
7933   /* If the TYPE is invalid, indicate failure.  */
7934   if (type == error_mark_node)
7935     return error_mark_node;
7936   return mangle_conv_op_name_for_type (type);
7937 }
7938
7939 /* Parse a conversion-type-id:
7940
7941    conversion-type-id:
7942      type-specifier-seq conversion-declarator [opt]
7943
7944    Returns the TYPE specified.  */
7945
7946 static tree
7947 cp_parser_conversion_type_id (cp_parser* parser)
7948 {
7949   tree attributes;
7950   cp_decl_specifier_seq type_specifiers;
7951   cp_declarator *declarator;
7952   tree type_specified;
7953
7954   /* Parse the attributes.  */
7955   attributes = cp_parser_attributes_opt (parser);
7956   /* Parse the type-specifiers.  */
7957   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
7958                                 &type_specifiers);
7959   /* If that didn't work, stop.  */
7960   if (type_specifiers.type == error_mark_node)
7961     return error_mark_node;
7962   /* Parse the conversion-declarator.  */
7963   declarator = cp_parser_conversion_declarator_opt (parser);
7964
7965   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
7966                                     /*initialized=*/0, &attributes);
7967   if (attributes)
7968     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
7969   return type_specified;
7970 }
7971
7972 /* Parse an (optional) conversion-declarator.
7973
7974    conversion-declarator:
7975      ptr-operator conversion-declarator [opt]
7976
7977    */
7978
7979 static cp_declarator *
7980 cp_parser_conversion_declarator_opt (cp_parser* parser)
7981 {
7982   enum tree_code code;
7983   tree class_type;
7984   cp_cv_quals cv_quals;
7985
7986   /* We don't know if there's a ptr-operator next, or not.  */
7987   cp_parser_parse_tentatively (parser);
7988   /* Try the ptr-operator.  */
7989   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
7990   /* If it worked, look for more conversion-declarators.  */
7991   if (cp_parser_parse_definitely (parser))
7992     {
7993       cp_declarator *declarator;
7994
7995       /* Parse another optional declarator.  */
7996       declarator = cp_parser_conversion_declarator_opt (parser);
7997
7998       /* Create the representation of the declarator.  */
7999       if (class_type)
8000         declarator = make_ptrmem_declarator (cv_quals, class_type,
8001                                              declarator);
8002       else if (code == INDIRECT_REF)
8003         declarator = make_pointer_declarator (cv_quals, declarator);
8004       else
8005         declarator = make_reference_declarator (cv_quals, declarator);
8006
8007       return declarator;
8008    }
8009
8010   return NULL;
8011 }
8012
8013 /* Parse an (optional) ctor-initializer.
8014
8015    ctor-initializer:
8016      : mem-initializer-list
8017
8018    Returns TRUE iff the ctor-initializer was actually present.  */
8019
8020 static bool
8021 cp_parser_ctor_initializer_opt (cp_parser* parser)
8022 {
8023   /* If the next token is not a `:', then there is no
8024      ctor-initializer.  */
8025   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
8026     {
8027       /* Do default initialization of any bases and members.  */
8028       if (DECL_CONSTRUCTOR_P (current_function_decl))
8029         finish_mem_initializers (NULL_TREE);
8030
8031       return false;
8032     }
8033
8034   /* Consume the `:' token.  */
8035   cp_lexer_consume_token (parser->lexer);
8036   /* And the mem-initializer-list.  */
8037   cp_parser_mem_initializer_list (parser);
8038
8039   return true;
8040 }
8041
8042 /* Parse a mem-initializer-list.
8043
8044    mem-initializer-list:
8045      mem-initializer
8046      mem-initializer , mem-initializer-list  */
8047
8048 static void
8049 cp_parser_mem_initializer_list (cp_parser* parser)
8050 {
8051   tree mem_initializer_list = NULL_TREE;
8052
8053   /* Let the semantic analysis code know that we are starting the
8054      mem-initializer-list.  */
8055   if (!DECL_CONSTRUCTOR_P (current_function_decl))
8056     error ("only constructors take base initializers");
8057
8058   /* Loop through the list.  */
8059   while (true)
8060     {
8061       tree mem_initializer;
8062
8063       /* Parse the mem-initializer.  */
8064       mem_initializer = cp_parser_mem_initializer (parser);
8065       /* Add it to the list, unless it was erroneous.  */
8066       if (mem_initializer != error_mark_node)
8067         {
8068           TREE_CHAIN (mem_initializer) = mem_initializer_list;
8069           mem_initializer_list = mem_initializer;
8070         }
8071       /* If the next token is not a `,', we're done.  */
8072       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8073         break;
8074       /* Consume the `,' token.  */
8075       cp_lexer_consume_token (parser->lexer);
8076     }
8077
8078   /* Perform semantic analysis.  */
8079   if (DECL_CONSTRUCTOR_P (current_function_decl))
8080     finish_mem_initializers (mem_initializer_list);
8081 }
8082
8083 /* Parse a mem-initializer.
8084
8085    mem-initializer:
8086      mem-initializer-id ( expression-list [opt] )
8087
8088    GNU extension:
8089
8090    mem-initializer:
8091      ( expression-list [opt] )
8092
8093    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
8094    class) or FIELD_DECL (for a non-static data member) to initialize;
8095    the TREE_VALUE is the expression-list.  An empty initialization
8096    list is represented by void_list_node.  */
8097
8098 static tree
8099 cp_parser_mem_initializer (cp_parser* parser)
8100 {
8101   tree mem_initializer_id;
8102   tree expression_list;
8103   tree member;
8104
8105   /* Find out what is being initialized.  */
8106   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
8107     {
8108       pedwarn ("anachronistic old-style base class initializer");
8109       mem_initializer_id = NULL_TREE;
8110     }
8111   else
8112     mem_initializer_id = cp_parser_mem_initializer_id (parser);
8113   member = expand_member_init (mem_initializer_id);
8114   if (member && !DECL_P (member))
8115     in_base_initializer = 1;
8116
8117   expression_list
8118     = cp_parser_parenthesized_expression_list (parser, false,
8119                                                /*cast_p=*/false,
8120                                                /*non_constant_p=*/NULL);
8121   if (expression_list == error_mark_node)
8122     return error_mark_node;
8123   if (!expression_list)
8124     expression_list = void_type_node;
8125
8126   in_base_initializer = 0;
8127
8128   return member ? build_tree_list (member, expression_list) : error_mark_node;
8129 }
8130
8131 /* Parse a mem-initializer-id.
8132
8133    mem-initializer-id:
8134      :: [opt] nested-name-specifier [opt] class-name
8135      identifier
8136
8137    Returns a TYPE indicating the class to be initializer for the first
8138    production.  Returns an IDENTIFIER_NODE indicating the data member
8139    to be initialized for the second production.  */
8140
8141 static tree
8142 cp_parser_mem_initializer_id (cp_parser* parser)
8143 {
8144   bool global_scope_p;
8145   bool nested_name_specifier_p;
8146   bool template_p = false;
8147   tree id;
8148
8149   /* `typename' is not allowed in this context ([temp.res]).  */
8150   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
8151     {
8152       error ("keyword %<typename%> not allowed in this context (a qualified "
8153              "member initializer is implicitly a type)");
8154       cp_lexer_consume_token (parser->lexer);
8155     }
8156   /* Look for the optional `::' operator.  */
8157   global_scope_p
8158     = (cp_parser_global_scope_opt (parser,
8159                                    /*current_scope_valid_p=*/false)
8160        != NULL_TREE);
8161   /* Look for the optional nested-name-specifier.  The simplest way to
8162      implement:
8163
8164        [temp.res]
8165
8166        The keyword `typename' is not permitted in a base-specifier or
8167        mem-initializer; in these contexts a qualified name that
8168        depends on a template-parameter is implicitly assumed to be a
8169        type name.
8170
8171      is to assume that we have seen the `typename' keyword at this
8172      point.  */
8173   nested_name_specifier_p
8174     = (cp_parser_nested_name_specifier_opt (parser,
8175                                             /*typename_keyword_p=*/true,
8176                                             /*check_dependency_p=*/true,
8177                                             /*type_p=*/true,
8178                                             /*is_declaration=*/true)
8179        != NULL_TREE);
8180   if (nested_name_specifier_p)
8181     template_p = cp_parser_optional_template_keyword (parser);
8182   /* If there is a `::' operator or a nested-name-specifier, then we
8183      are definitely looking for a class-name.  */
8184   if (global_scope_p || nested_name_specifier_p)
8185     return cp_parser_class_name (parser,
8186                                  /*typename_keyword_p=*/true,
8187                                  /*template_keyword_p=*/template_p,
8188                                  none_type,
8189                                  /*check_dependency_p=*/true,
8190                                  /*class_head_p=*/false,
8191                                  /*is_declaration=*/true);
8192   /* Otherwise, we could also be looking for an ordinary identifier.  */
8193   cp_parser_parse_tentatively (parser);
8194   /* Try a class-name.  */
8195   id = cp_parser_class_name (parser,
8196                              /*typename_keyword_p=*/true,
8197                              /*template_keyword_p=*/false,
8198                              none_type,
8199                              /*check_dependency_p=*/true,
8200                              /*class_head_p=*/false,
8201                              /*is_declaration=*/true);
8202   /* If we found one, we're done.  */
8203   if (cp_parser_parse_definitely (parser))
8204     return id;
8205   /* Otherwise, look for an ordinary identifier.  */
8206   return cp_parser_identifier (parser);
8207 }
8208
8209 /* Overloading [gram.over] */
8210
8211 /* Parse an operator-function-id.
8212
8213    operator-function-id:
8214      operator operator
8215
8216    Returns an IDENTIFIER_NODE for the operator which is a
8217    human-readable spelling of the identifier, e.g., `operator +'.  */
8218
8219 static tree
8220 cp_parser_operator_function_id (cp_parser* parser)
8221 {
8222   /* Look for the `operator' keyword.  */
8223   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
8224     return error_mark_node;
8225   /* And then the name of the operator itself.  */
8226   return cp_parser_operator (parser);
8227 }
8228
8229 /* Parse an operator.
8230
8231    operator:
8232      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
8233      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
8234      || ++ -- , ->* -> () []
8235
8236    GNU Extensions:
8237
8238    operator:
8239      <? >? <?= >?=
8240
8241    Returns an IDENTIFIER_NODE for the operator which is a
8242    human-readable spelling of the identifier, e.g., `operator +'.  */
8243
8244 static tree
8245 cp_parser_operator (cp_parser* parser)
8246 {
8247   tree id = NULL_TREE;
8248   cp_token *token;
8249
8250   /* Peek at the next token.  */
8251   token = cp_lexer_peek_token (parser->lexer);
8252   /* Figure out which operator we have.  */
8253   switch (token->type)
8254     {
8255     case CPP_KEYWORD:
8256       {
8257         enum tree_code op;
8258
8259         /* The keyword should be either `new' or `delete'.  */
8260         if (token->keyword == RID_NEW)
8261           op = NEW_EXPR;
8262         else if (token->keyword == RID_DELETE)
8263           op = DELETE_EXPR;
8264         else
8265           break;
8266
8267         /* Consume the `new' or `delete' token.  */
8268         cp_lexer_consume_token (parser->lexer);
8269
8270         /* Peek at the next token.  */
8271         token = cp_lexer_peek_token (parser->lexer);
8272         /* If it's a `[' token then this is the array variant of the
8273            operator.  */
8274         if (token->type == CPP_OPEN_SQUARE)
8275           {
8276             /* Consume the `[' token.  */
8277             cp_lexer_consume_token (parser->lexer);
8278             /* Look for the `]' token.  */
8279             cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8280             id = ansi_opname (op == NEW_EXPR
8281                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
8282           }
8283         /* Otherwise, we have the non-array variant.  */
8284         else
8285           id = ansi_opname (op);
8286
8287         return id;
8288       }
8289
8290     case CPP_PLUS:
8291       id = ansi_opname (PLUS_EXPR);
8292       break;
8293
8294     case CPP_MINUS:
8295       id = ansi_opname (MINUS_EXPR);
8296       break;
8297
8298     case CPP_MULT:
8299       id = ansi_opname (MULT_EXPR);
8300       break;
8301
8302     case CPP_DIV:
8303       id = ansi_opname (TRUNC_DIV_EXPR);
8304       break;
8305
8306     case CPP_MOD:
8307       id = ansi_opname (TRUNC_MOD_EXPR);
8308       break;
8309
8310     case CPP_XOR:
8311       id = ansi_opname (BIT_XOR_EXPR);
8312       break;
8313
8314     case CPP_AND:
8315       id = ansi_opname (BIT_AND_EXPR);
8316       break;
8317
8318     case CPP_OR:
8319       id = ansi_opname (BIT_IOR_EXPR);
8320       break;
8321
8322     case CPP_COMPL:
8323       id = ansi_opname (BIT_NOT_EXPR);
8324       break;
8325
8326     case CPP_NOT:
8327       id = ansi_opname (TRUTH_NOT_EXPR);
8328       break;
8329
8330     case CPP_EQ:
8331       id = ansi_assopname (NOP_EXPR);
8332       break;
8333
8334     case CPP_LESS:
8335       id = ansi_opname (LT_EXPR);
8336       break;
8337
8338     case CPP_GREATER:
8339       id = ansi_opname (GT_EXPR);
8340       break;
8341
8342     case CPP_PLUS_EQ:
8343       id = ansi_assopname (PLUS_EXPR);
8344       break;
8345
8346     case CPP_MINUS_EQ:
8347       id = ansi_assopname (MINUS_EXPR);
8348       break;
8349
8350     case CPP_MULT_EQ:
8351       id = ansi_assopname (MULT_EXPR);
8352       break;
8353
8354     case CPP_DIV_EQ:
8355       id = ansi_assopname (TRUNC_DIV_EXPR);
8356       break;
8357
8358     case CPP_MOD_EQ:
8359       id = ansi_assopname (TRUNC_MOD_EXPR);
8360       break;
8361
8362     case CPP_XOR_EQ:
8363       id = ansi_assopname (BIT_XOR_EXPR);
8364       break;
8365
8366     case CPP_AND_EQ:
8367       id = ansi_assopname (BIT_AND_EXPR);
8368       break;
8369
8370     case CPP_OR_EQ:
8371       id = ansi_assopname (BIT_IOR_EXPR);
8372       break;
8373
8374     case CPP_LSHIFT:
8375       id = ansi_opname (LSHIFT_EXPR);
8376       break;
8377
8378     case CPP_RSHIFT:
8379       id = ansi_opname (RSHIFT_EXPR);
8380       break;
8381
8382     case CPP_LSHIFT_EQ:
8383       id = ansi_assopname (LSHIFT_EXPR);
8384       break;
8385
8386     case CPP_RSHIFT_EQ:
8387       id = ansi_assopname (RSHIFT_EXPR);
8388       break;
8389
8390     case CPP_EQ_EQ:
8391       id = ansi_opname (EQ_EXPR);
8392       break;
8393
8394     case CPP_NOT_EQ:
8395       id = ansi_opname (NE_EXPR);
8396       break;
8397
8398     case CPP_LESS_EQ:
8399       id = ansi_opname (LE_EXPR);
8400       break;
8401
8402     case CPP_GREATER_EQ:
8403       id = ansi_opname (GE_EXPR);
8404       break;
8405
8406     case CPP_AND_AND:
8407       id = ansi_opname (TRUTH_ANDIF_EXPR);
8408       break;
8409
8410     case CPP_OR_OR:
8411       id = ansi_opname (TRUTH_ORIF_EXPR);
8412       break;
8413
8414     case CPP_PLUS_PLUS:
8415       id = ansi_opname (POSTINCREMENT_EXPR);
8416       break;
8417
8418     case CPP_MINUS_MINUS:
8419       id = ansi_opname (PREDECREMENT_EXPR);
8420       break;
8421
8422     case CPP_COMMA:
8423       id = ansi_opname (COMPOUND_EXPR);
8424       break;
8425
8426     case CPP_DEREF_STAR:
8427       id = ansi_opname (MEMBER_REF);
8428       break;
8429
8430     case CPP_DEREF:
8431       id = ansi_opname (COMPONENT_REF);
8432       break;
8433
8434     case CPP_OPEN_PAREN:
8435       /* Consume the `('.  */
8436       cp_lexer_consume_token (parser->lexer);
8437       /* Look for the matching `)'.  */
8438       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8439       return ansi_opname (CALL_EXPR);
8440
8441     case CPP_OPEN_SQUARE:
8442       /* Consume the `['.  */
8443       cp_lexer_consume_token (parser->lexer);
8444       /* Look for the matching `]'.  */
8445       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8446       return ansi_opname (ARRAY_REF);
8447
8448     default:
8449       /* Anything else is an error.  */
8450       break;
8451     }
8452
8453   /* If we have selected an identifier, we need to consume the
8454      operator token.  */
8455   if (id)
8456     cp_lexer_consume_token (parser->lexer);
8457   /* Otherwise, no valid operator name was present.  */
8458   else
8459     {
8460       cp_parser_error (parser, "expected operator");
8461       id = error_mark_node;
8462     }
8463
8464   return id;
8465 }
8466
8467 /* Parse a template-declaration.
8468
8469    template-declaration:
8470      export [opt] template < template-parameter-list > declaration
8471
8472    If MEMBER_P is TRUE, this template-declaration occurs within a
8473    class-specifier.
8474
8475    The grammar rule given by the standard isn't correct.  What
8476    is really meant is:
8477
8478    template-declaration:
8479      export [opt] template-parameter-list-seq
8480        decl-specifier-seq [opt] init-declarator [opt] ;
8481      export [opt] template-parameter-list-seq
8482        function-definition
8483
8484    template-parameter-list-seq:
8485      template-parameter-list-seq [opt]
8486      template < template-parameter-list >  */
8487
8488 static void
8489 cp_parser_template_declaration (cp_parser* parser, bool member_p)
8490 {
8491   /* Check for `export'.  */
8492   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8493     {
8494       /* Consume the `export' token.  */
8495       cp_lexer_consume_token (parser->lexer);
8496       /* Warn that we do not support `export'.  */
8497       warning (0, "keyword %<export%> not implemented, and will be ignored");
8498     }
8499
8500   cp_parser_template_declaration_after_export (parser, member_p);
8501 }
8502
8503 /* Parse a template-parameter-list.
8504
8505    template-parameter-list:
8506      template-parameter
8507      template-parameter-list , template-parameter
8508
8509    Returns a TREE_LIST.  Each node represents a template parameter.
8510    The nodes are connected via their TREE_CHAINs.  */
8511
8512 static tree
8513 cp_parser_template_parameter_list (cp_parser* parser)
8514 {
8515   tree parameter_list = NULL_TREE;
8516
8517   begin_template_parm_list ();
8518   while (true)
8519     {
8520       tree parameter;
8521       cp_token *token;
8522       bool is_non_type;
8523
8524       /* Parse the template-parameter.  */
8525       parameter = cp_parser_template_parameter (parser, &is_non_type);
8526       /* Add it to the list.  */
8527       if (parameter != error_mark_node)
8528         parameter_list = process_template_parm (parameter_list,
8529                                                 parameter,
8530                                                 is_non_type);
8531       else
8532        {
8533          tree err_parm = build_tree_list (parameter, parameter);
8534          TREE_VALUE (err_parm) = error_mark_node;
8535          parameter_list = chainon (parameter_list, err_parm);
8536        }
8537
8538       /* Peek at the next token.  */
8539       token = cp_lexer_peek_token (parser->lexer);
8540       /* If it's not a `,', we're done.  */
8541       if (token->type != CPP_COMMA)
8542         break;
8543       /* Otherwise, consume the `,' token.  */
8544       cp_lexer_consume_token (parser->lexer);
8545     }
8546
8547   return end_template_parm_list (parameter_list);
8548 }
8549
8550 /* Parse a template-parameter.
8551
8552    template-parameter:
8553      type-parameter
8554      parameter-declaration
8555
8556    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
8557    the parameter.  The TREE_PURPOSE is the default value, if any.
8558    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
8559    iff this parameter is a non-type parameter.  */
8560
8561 static tree
8562 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
8563 {
8564   cp_token *token;
8565   cp_parameter_declarator *parameter_declarator;
8566   tree parm;
8567
8568   /* Assume it is a type parameter or a template parameter.  */
8569   *is_non_type = false;
8570   /* Peek at the next token.  */
8571   token = cp_lexer_peek_token (parser->lexer);
8572   /* If it is `class' or `template', we have a type-parameter.  */
8573   if (token->keyword == RID_TEMPLATE)
8574     return cp_parser_type_parameter (parser);
8575   /* If it is `class' or `typename' we do not know yet whether it is a
8576      type parameter or a non-type parameter.  Consider:
8577
8578        template <typename T, typename T::X X> ...
8579
8580      or:
8581
8582        template <class C, class D*> ...
8583
8584      Here, the first parameter is a type parameter, and the second is
8585      a non-type parameter.  We can tell by looking at the token after
8586      the identifier -- if it is a `,', `=', or `>' then we have a type
8587      parameter.  */
8588   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
8589     {
8590       /* Peek at the token after `class' or `typename'.  */
8591       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8592       /* If it's an identifier, skip it.  */
8593       if (token->type == CPP_NAME)
8594         token = cp_lexer_peek_nth_token (parser->lexer, 3);
8595       /* Now, see if the token looks like the end of a template
8596          parameter.  */
8597       if (token->type == CPP_COMMA
8598           || token->type == CPP_EQ
8599           || token->type == CPP_GREATER)
8600         return cp_parser_type_parameter (parser);
8601     }
8602
8603   /* Otherwise, it is a non-type parameter.
8604
8605      [temp.param]
8606
8607      When parsing a default template-argument for a non-type
8608      template-parameter, the first non-nested `>' is taken as the end
8609      of the template parameter-list rather than a greater-than
8610      operator.  */
8611   *is_non_type = true;
8612   parameter_declarator
8613      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
8614                                         /*parenthesized_p=*/NULL);
8615   parm = grokdeclarator (parameter_declarator->declarator,
8616                          &parameter_declarator->decl_specifiers,
8617                          PARM, /*initialized=*/0,
8618                          /*attrlist=*/NULL);
8619   if (parm == error_mark_node)
8620     return error_mark_node;
8621   return build_tree_list (parameter_declarator->default_argument, parm);
8622 }
8623
8624 /* Parse a type-parameter.
8625
8626    type-parameter:
8627      class identifier [opt]
8628      class identifier [opt] = type-id
8629      typename identifier [opt]
8630      typename identifier [opt] = type-id
8631      template < template-parameter-list > class identifier [opt]
8632      template < template-parameter-list > class identifier [opt]
8633        = id-expression
8634
8635    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
8636    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
8637    the declaration of the parameter.  */
8638
8639 static tree
8640 cp_parser_type_parameter (cp_parser* parser)
8641 {
8642   cp_token *token;
8643   tree parameter;
8644
8645   /* Look for a keyword to tell us what kind of parameter this is.  */
8646   token = cp_parser_require (parser, CPP_KEYWORD,
8647                              "`class', `typename', or `template'");
8648   if (!token)
8649     return error_mark_node;
8650
8651   switch (token->keyword)
8652     {
8653     case RID_CLASS:
8654     case RID_TYPENAME:
8655       {
8656         tree identifier;
8657         tree default_argument;
8658
8659         /* If the next token is an identifier, then it names the
8660            parameter.  */
8661         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8662           identifier = cp_parser_identifier (parser);
8663         else
8664           identifier = NULL_TREE;
8665
8666         /* Create the parameter.  */
8667         parameter = finish_template_type_parm (class_type_node, identifier);
8668
8669         /* If the next token is an `=', we have a default argument.  */
8670         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8671           {
8672             /* Consume the `=' token.  */
8673             cp_lexer_consume_token (parser->lexer);
8674             /* Parse the default-argument.  */
8675             push_deferring_access_checks (dk_no_deferred);
8676             default_argument = cp_parser_type_id (parser);
8677             pop_deferring_access_checks ();
8678           }
8679         else
8680           default_argument = NULL_TREE;
8681
8682         /* Create the combined representation of the parameter and the
8683            default argument.  */
8684         parameter = build_tree_list (default_argument, parameter);
8685       }
8686       break;
8687
8688     case RID_TEMPLATE:
8689       {
8690         tree parameter_list;
8691         tree identifier;
8692         tree default_argument;
8693
8694         /* Look for the `<'.  */
8695         cp_parser_require (parser, CPP_LESS, "`<'");
8696         /* Parse the template-parameter-list.  */
8697         parameter_list = cp_parser_template_parameter_list (parser);
8698         /* Look for the `>'.  */
8699         cp_parser_require (parser, CPP_GREATER, "`>'");
8700         /* Look for the `class' keyword.  */
8701         cp_parser_require_keyword (parser, RID_CLASS, "`class'");
8702         /* If the next token is an `=', then there is a
8703            default-argument.  If the next token is a `>', we are at
8704            the end of the parameter-list.  If the next token is a `,',
8705            then we are at the end of this parameter.  */
8706         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8707             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
8708             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8709           {
8710             identifier = cp_parser_identifier (parser);
8711             /* Treat invalid names as if the parameter were nameless.  */
8712             if (identifier == error_mark_node)
8713               identifier = NULL_TREE;
8714           }
8715         else
8716           identifier = NULL_TREE;
8717
8718         /* Create the template parameter.  */
8719         parameter = finish_template_template_parm (class_type_node,
8720                                                    identifier);
8721
8722         /* If the next token is an `=', then there is a
8723            default-argument.  */
8724         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8725           {
8726             bool is_template;
8727
8728             /* Consume the `='.  */
8729             cp_lexer_consume_token (parser->lexer);
8730             /* Parse the id-expression.  */
8731             push_deferring_access_checks (dk_no_deferred);
8732             default_argument
8733               = cp_parser_id_expression (parser,
8734                                          /*template_keyword_p=*/false,
8735                                          /*check_dependency_p=*/true,
8736                                          /*template_p=*/&is_template,
8737                                          /*declarator_p=*/false,
8738                                          /*optional_p=*/false);
8739             if (TREE_CODE (default_argument) == TYPE_DECL)
8740               /* If the id-expression was a template-id that refers to
8741                  a template-class, we already have the declaration here,
8742                  so no further lookup is needed.  */
8743                  ;
8744             else
8745               /* Look up the name.  */
8746               default_argument
8747                 = cp_parser_lookup_name (parser, default_argument,
8748                                          none_type,
8749                                          /*is_template=*/is_template,
8750                                          /*is_namespace=*/false,
8751                                          /*check_dependency=*/true,
8752                                          /*ambiguous_decls=*/NULL);
8753             /* See if the default argument is valid.  */
8754             default_argument
8755               = check_template_template_default_arg (default_argument);
8756             pop_deferring_access_checks ();
8757           }
8758         else
8759           default_argument = NULL_TREE;
8760
8761         /* Create the combined representation of the parameter and the
8762            default argument.  */
8763         parameter = build_tree_list (default_argument, parameter);
8764       }
8765       break;
8766
8767     default:
8768       gcc_unreachable ();
8769       break;
8770     }
8771
8772   return parameter;
8773 }
8774
8775 /* Parse a template-id.
8776
8777    template-id:
8778      template-name < template-argument-list [opt] >
8779
8780    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8781    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8782    returned.  Otherwise, if the template-name names a function, or set
8783    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8784    names a class, returns a TYPE_DECL for the specialization.
8785
8786    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8787    uninstantiated templates.  */
8788
8789 static tree
8790 cp_parser_template_id (cp_parser *parser,
8791                        bool template_keyword_p,
8792                        bool check_dependency_p,
8793                        bool is_declaration)
8794 {
8795   int i;
8796   tree template;
8797   tree arguments;
8798   tree template_id;
8799   cp_token_position start_of_id = 0;
8800   deferred_access_check *chk;
8801   VEC (deferred_access_check,gc) *access_check;
8802   cp_token *next_token, *next_token_2;
8803   bool is_identifier;
8804
8805   /* If the next token corresponds to a template-id, there is no need
8806      to reparse it.  */
8807   next_token = cp_lexer_peek_token (parser->lexer);
8808   if (next_token->type == CPP_TEMPLATE_ID)
8809     {
8810       struct tree_check *check_value;
8811
8812       /* Get the stored value.  */
8813       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
8814       /* Perform any access checks that were deferred.  */
8815       access_check = check_value->checks;
8816       if (access_check)
8817         {
8818           for (i = 0 ;
8819                VEC_iterate (deferred_access_check, access_check, i, chk) ;
8820                ++i)
8821             {
8822               perform_or_defer_access_check (chk->binfo,
8823                                              chk->decl,
8824                                              chk->diag_decl);
8825             }
8826         }
8827       /* Return the stored value.  */
8828       return check_value->value;
8829     }
8830
8831   /* Avoid performing name lookup if there is no possibility of
8832      finding a template-id.  */
8833   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8834       || (next_token->type == CPP_NAME
8835           && !cp_parser_nth_token_starts_template_argument_list_p
8836                (parser, 2)))
8837     {
8838       cp_parser_error (parser, "expected template-id");
8839       return error_mark_node;
8840     }
8841
8842   /* Remember where the template-id starts.  */
8843   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
8844     start_of_id = cp_lexer_token_position (parser->lexer, false);
8845
8846   push_deferring_access_checks (dk_deferred);
8847
8848   /* Parse the template-name.  */
8849   is_identifier = false;
8850   template = cp_parser_template_name (parser, template_keyword_p,
8851                                       check_dependency_p,
8852                                       is_declaration,
8853                                       &is_identifier);
8854   if (template == error_mark_node || is_identifier)
8855     {
8856       pop_deferring_access_checks ();
8857       return template;
8858     }
8859
8860   /* If we find the sequence `[:' after a template-name, it's probably
8861      a digraph-typo for `< ::'. Substitute the tokens and check if we can
8862      parse correctly the argument list.  */
8863   next_token = cp_lexer_peek_token (parser->lexer);
8864   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8865   if (next_token->type == CPP_OPEN_SQUARE
8866       && next_token->flags & DIGRAPH
8867       && next_token_2->type == CPP_COLON
8868       && !(next_token_2->flags & PREV_WHITE))
8869     {
8870       cp_parser_parse_tentatively (parser);
8871       /* Change `:' into `::'.  */
8872       next_token_2->type = CPP_SCOPE;
8873       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8874          CPP_LESS.  */
8875       cp_lexer_consume_token (parser->lexer);
8876       /* Parse the arguments.  */
8877       arguments = cp_parser_enclosed_template_argument_list (parser);
8878       if (!cp_parser_parse_definitely (parser))
8879         {
8880           /* If we couldn't parse an argument list, then we revert our changes
8881              and return simply an error. Maybe this is not a template-id
8882              after all.  */
8883           next_token_2->type = CPP_COLON;
8884           cp_parser_error (parser, "expected %<<%>");
8885           pop_deferring_access_checks ();
8886           return error_mark_node;
8887         }
8888       /* Otherwise, emit an error about the invalid digraph, but continue
8889          parsing because we got our argument list.  */
8890       pedwarn ("%<<::%> cannot begin a template-argument list");
8891       inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
8892               "between %<<%> and %<::%>");
8893       if (!flag_permissive)
8894         {
8895           static bool hint;
8896           if (!hint)
8897             {
8898               inform ("(if you use -fpermissive G++ will accept your code)");
8899               hint = true;
8900             }
8901         }
8902     }
8903   else
8904     {
8905       /* Look for the `<' that starts the template-argument-list.  */
8906       if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8907         {
8908           pop_deferring_access_checks ();
8909           return error_mark_node;
8910         }
8911       /* Parse the arguments.  */
8912       arguments = cp_parser_enclosed_template_argument_list (parser);
8913     }
8914
8915   /* Build a representation of the specialization.  */
8916   if (TREE_CODE (template) == IDENTIFIER_NODE)
8917     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8918   else if (DECL_CLASS_TEMPLATE_P (template)
8919            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8920     {
8921       bool entering_scope;
8922       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
8923          template (rather than some instantiation thereof) only if
8924          is not nested within some other construct.  For example, in
8925          "template <typename T> void f(T) { A<T>::", A<T> is just an
8926          instantiation of A.  */
8927       entering_scope = (template_parm_scope_p ()
8928                         && cp_lexer_next_token_is (parser->lexer,
8929                                                    CPP_SCOPE));
8930       template_id
8931         = finish_template_type (template, arguments, entering_scope);
8932     }
8933   else
8934     {
8935       /* If it's not a class-template or a template-template, it should be
8936          a function-template.  */
8937       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8938                    || TREE_CODE (template) == OVERLOAD
8939                    || BASELINK_P (template)));
8940
8941       template_id = lookup_template_function (template, arguments);
8942     }
8943
8944   /* If parsing tentatively, replace the sequence of tokens that makes
8945      up the template-id with a CPP_TEMPLATE_ID token.  That way,
8946      should we re-parse the token stream, we will not have to repeat
8947      the effort required to do the parse, nor will we issue duplicate
8948      error messages about problems during instantiation of the
8949      template.  */
8950   if (start_of_id)
8951     {
8952       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
8953
8954       /* Reset the contents of the START_OF_ID token.  */
8955       token->type = CPP_TEMPLATE_ID;
8956       /* Retrieve any deferred checks.  Do not pop this access checks yet
8957          so the memory will not be reclaimed during token replacing below.  */
8958       token->u.tree_check_value = GGC_CNEW (struct tree_check);
8959       token->u.tree_check_value->value = template_id;
8960       token->u.tree_check_value->checks = get_deferred_access_checks ();
8961       token->keyword = RID_MAX;
8962
8963       /* Purge all subsequent tokens.  */
8964       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
8965
8966       /* ??? Can we actually assume that, if template_id ==
8967          error_mark_node, we will have issued a diagnostic to the
8968          user, as opposed to simply marking the tentative parse as
8969          failed?  */
8970       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
8971         error ("parse error in template argument list");
8972     }
8973
8974   pop_deferring_access_checks ();
8975   return template_id;
8976 }
8977
8978 /* Parse a template-name.
8979
8980    template-name:
8981      identifier
8982
8983    The standard should actually say:
8984
8985    template-name:
8986      identifier
8987      operator-function-id
8988
8989    A defect report has been filed about this issue.
8990
8991    A conversion-function-id cannot be a template name because they cannot
8992    be part of a template-id. In fact, looking at this code:
8993
8994    a.operator K<int>()
8995
8996    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
8997    It is impossible to call a templated conversion-function-id with an
8998    explicit argument list, since the only allowed template parameter is
8999    the type to which it is converting.
9000
9001    If TEMPLATE_KEYWORD_P is true, then we have just seen the
9002    `template' keyword, in a construction like:
9003
9004      T::template f<3>()
9005
9006    In that case `f' is taken to be a template-name, even though there
9007    is no way of knowing for sure.
9008
9009    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
9010    name refers to a set of overloaded functions, at least one of which
9011    is a template, or an IDENTIFIER_NODE with the name of the template,
9012    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
9013    names are looked up inside uninstantiated templates.  */
9014
9015 static tree
9016 cp_parser_template_name (cp_parser* parser,
9017                          bool template_keyword_p,
9018                          bool check_dependency_p,
9019                          bool is_declaration,
9020                          bool *is_identifier)
9021 {
9022   tree identifier;
9023   tree decl;
9024   tree fns;
9025
9026   /* If the next token is `operator', then we have either an
9027      operator-function-id or a conversion-function-id.  */
9028   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
9029     {
9030       /* We don't know whether we're looking at an
9031          operator-function-id or a conversion-function-id.  */
9032       cp_parser_parse_tentatively (parser);
9033       /* Try an operator-function-id.  */
9034       identifier = cp_parser_operator_function_id (parser);
9035       /* If that didn't work, try a conversion-function-id.  */
9036       if (!cp_parser_parse_definitely (parser))
9037         {
9038           cp_parser_error (parser, "expected template-name");
9039           return error_mark_node;
9040         }
9041     }
9042   /* Look for the identifier.  */
9043   else
9044     identifier = cp_parser_identifier (parser);
9045
9046   /* If we didn't find an identifier, we don't have a template-id.  */
9047   if (identifier == error_mark_node)
9048     return error_mark_node;
9049
9050   /* If the name immediately followed the `template' keyword, then it
9051      is a template-name.  However, if the next token is not `<', then
9052      we do not treat it as a template-name, since it is not being used
9053      as part of a template-id.  This enables us to handle constructs
9054      like:
9055
9056        template <typename T> struct S { S(); };
9057        template <typename T> S<T>::S();
9058
9059      correctly.  We would treat `S' as a template -- if it were `S<T>'
9060      -- but we do not if there is no `<'.  */
9061
9062   if (processing_template_decl
9063       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
9064     {
9065       /* In a declaration, in a dependent context, we pretend that the
9066          "template" keyword was present in order to improve error
9067          recovery.  For example, given:
9068
9069            template <typename T> void f(T::X<int>);
9070
9071          we want to treat "X<int>" as a template-id.  */
9072       if (is_declaration
9073           && !template_keyword_p
9074           && parser->scope && TYPE_P (parser->scope)
9075           && check_dependency_p
9076           && dependent_type_p (parser->scope)
9077           /* Do not do this for dtors (or ctors), since they never
9078              need the template keyword before their name.  */
9079           && !constructor_name_p (identifier, parser->scope))
9080         {
9081           cp_token_position start = 0;
9082
9083           /* Explain what went wrong.  */
9084           error ("non-template %qD used as template", identifier);
9085           inform ("use %<%T::template %D%> to indicate that it is a template",
9086                   parser->scope, identifier);
9087           /* If parsing tentatively, find the location of the "<" token.  */
9088           if (cp_parser_simulate_error (parser))
9089             start = cp_lexer_token_position (parser->lexer, true);
9090           /* Parse the template arguments so that we can issue error
9091              messages about them.  */
9092           cp_lexer_consume_token (parser->lexer);
9093           cp_parser_enclosed_template_argument_list (parser);
9094           /* Skip tokens until we find a good place from which to
9095              continue parsing.  */
9096           cp_parser_skip_to_closing_parenthesis (parser,
9097                                                  /*recovering=*/true,
9098                                                  /*or_comma=*/true,
9099                                                  /*consume_paren=*/false);
9100           /* If parsing tentatively, permanently remove the
9101              template argument list.  That will prevent duplicate
9102              error messages from being issued about the missing
9103              "template" keyword.  */
9104           if (start)
9105             cp_lexer_purge_tokens_after (parser->lexer, start);
9106           if (is_identifier)
9107             *is_identifier = true;
9108           return identifier;
9109         }
9110
9111       /* If the "template" keyword is present, then there is generally
9112          no point in doing name-lookup, so we just return IDENTIFIER.
9113          But, if the qualifying scope is non-dependent then we can
9114          (and must) do name-lookup normally.  */
9115       if (template_keyword_p
9116           && (!parser->scope
9117               || (TYPE_P (parser->scope)
9118                   && dependent_type_p (parser->scope))))
9119         return identifier;
9120     }
9121
9122   /* Look up the name.  */
9123   decl = cp_parser_lookup_name (parser, identifier,
9124                                 none_type,
9125                                 /*is_template=*/false,
9126                                 /*is_namespace=*/false,
9127                                 check_dependency_p,
9128                                 /*ambiguous_decls=*/NULL);
9129   decl = maybe_get_template_decl_from_type_decl (decl);
9130
9131   /* If DECL is a template, then the name was a template-name.  */
9132   if (TREE_CODE (decl) == TEMPLATE_DECL)
9133     ;
9134   else
9135     {
9136       tree fn = NULL_TREE;
9137
9138       /* The standard does not explicitly indicate whether a name that
9139          names a set of overloaded declarations, some of which are
9140          templates, is a template-name.  However, such a name should
9141          be a template-name; otherwise, there is no way to form a
9142          template-id for the overloaded templates.  */
9143       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
9144       if (TREE_CODE (fns) == OVERLOAD)
9145         for (fn = fns; fn; fn = OVL_NEXT (fn))
9146           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
9147             break;
9148
9149       if (!fn)
9150         {
9151           /* The name does not name a template.  */
9152           cp_parser_error (parser, "expected template-name");
9153           return error_mark_node;
9154         }
9155     }
9156
9157   /* If DECL is dependent, and refers to a function, then just return
9158      its name; we will look it up again during template instantiation.  */
9159   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
9160     {
9161       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
9162       if (TYPE_P (scope) && dependent_type_p (scope))
9163         return identifier;
9164     }
9165
9166   return decl;
9167 }
9168
9169 /* Parse a template-argument-list.
9170
9171    template-argument-list:
9172      template-argument
9173      template-argument-list , template-argument
9174
9175    Returns a TREE_VEC containing the arguments.  */
9176
9177 static tree
9178 cp_parser_template_argument_list (cp_parser* parser)
9179 {
9180   tree fixed_args[10];
9181   unsigned n_args = 0;
9182   unsigned alloced = 10;
9183   tree *arg_ary = fixed_args;
9184   tree vec;
9185   bool saved_in_template_argument_list_p;
9186   bool saved_ice_p;
9187   bool saved_non_ice_p;
9188
9189   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
9190   parser->in_template_argument_list_p = true;
9191   /* Even if the template-id appears in an integral
9192      constant-expression, the contents of the argument list do
9193      not.  */
9194   saved_ice_p = parser->integral_constant_expression_p;
9195   parser->integral_constant_expression_p = false;
9196   saved_non_ice_p = parser->non_integral_constant_expression_p;
9197   parser->non_integral_constant_expression_p = false;
9198   /* Parse the arguments.  */
9199   do
9200     {
9201       tree argument;
9202
9203       if (n_args)
9204         /* Consume the comma.  */
9205         cp_lexer_consume_token (parser->lexer);
9206
9207       /* Parse the template-argument.  */
9208       argument = cp_parser_template_argument (parser);
9209       if (n_args == alloced)
9210         {
9211           alloced *= 2;
9212
9213           if (arg_ary == fixed_args)
9214             {
9215               arg_ary = XNEWVEC (tree, alloced);
9216               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
9217             }
9218           else
9219             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
9220         }
9221       arg_ary[n_args++] = argument;
9222     }
9223   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
9224
9225   vec = make_tree_vec (n_args);
9226
9227   while (n_args--)
9228     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
9229
9230   if (arg_ary != fixed_args)
9231     free (arg_ary);
9232   parser->non_integral_constant_expression_p = saved_non_ice_p;
9233   parser->integral_constant_expression_p = saved_ice_p;
9234   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
9235   return vec;
9236 }
9237
9238 /* Parse a template-argument.
9239
9240    template-argument:
9241      assignment-expression
9242      type-id
9243      id-expression
9244
9245    The representation is that of an assignment-expression, type-id, or
9246    id-expression -- except that the qualified id-expression is
9247    evaluated, so that the value returned is either a DECL or an
9248    OVERLOAD.
9249
9250    Although the standard says "assignment-expression", it forbids
9251    throw-expressions or assignments in the template argument.
9252    Therefore, we use "conditional-expression" instead.  */
9253
9254 static tree
9255 cp_parser_template_argument (cp_parser* parser)
9256 {
9257   tree argument;
9258   bool template_p;
9259   bool address_p;
9260   bool maybe_type_id = false;
9261   cp_token *token;
9262   cp_id_kind idk;
9263
9264   /* There's really no way to know what we're looking at, so we just
9265      try each alternative in order.
9266
9267        [temp.arg]
9268
9269        In a template-argument, an ambiguity between a type-id and an
9270        expression is resolved to a type-id, regardless of the form of
9271        the corresponding template-parameter.
9272
9273      Therefore, we try a type-id first.  */
9274   cp_parser_parse_tentatively (parser);
9275   argument = cp_parser_type_id (parser);
9276   /* If there was no error parsing the type-id but the next token is a '>>',
9277      we probably found a typo for '> >'. But there are type-id which are
9278      also valid expressions. For instance:
9279
9280      struct X { int operator >> (int); };
9281      template <int V> struct Foo {};
9282      Foo<X () >> 5> r;
9283
9284      Here 'X()' is a valid type-id of a function type, but the user just
9285      wanted to write the expression "X() >> 5". Thus, we remember that we
9286      found a valid type-id, but we still try to parse the argument as an
9287      expression to see what happens.  */
9288   if (!cp_parser_error_occurred (parser)
9289       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
9290     {
9291       maybe_type_id = true;
9292       cp_parser_abort_tentative_parse (parser);
9293     }
9294   else
9295     {
9296       /* If the next token isn't a `,' or a `>', then this argument wasn't
9297       really finished. This means that the argument is not a valid
9298       type-id.  */
9299       if (!cp_parser_next_token_ends_template_argument_p (parser))
9300         cp_parser_error (parser, "expected template-argument");
9301       /* If that worked, we're done.  */
9302       if (cp_parser_parse_definitely (parser))
9303         return argument;
9304     }
9305   /* We're still not sure what the argument will be.  */
9306   cp_parser_parse_tentatively (parser);
9307   /* Try a template.  */
9308   argument = cp_parser_id_expression (parser,
9309                                       /*template_keyword_p=*/false,
9310                                       /*check_dependency_p=*/true,
9311                                       &template_p,
9312                                       /*declarator_p=*/false,
9313                                       /*optional_p=*/false);
9314   /* If the next token isn't a `,' or a `>', then this argument wasn't
9315      really finished.  */
9316   if (!cp_parser_next_token_ends_template_argument_p (parser))
9317     cp_parser_error (parser, "expected template-argument");
9318   if (!cp_parser_error_occurred (parser))
9319     {
9320       /* Figure out what is being referred to.  If the id-expression
9321          was for a class template specialization, then we will have a
9322          TYPE_DECL at this point.  There is no need to do name lookup
9323          at this point in that case.  */
9324       if (TREE_CODE (argument) != TYPE_DECL)
9325         argument = cp_parser_lookup_name (parser, argument,
9326                                           none_type,
9327                                           /*is_template=*/template_p,
9328                                           /*is_namespace=*/false,
9329                                           /*check_dependency=*/true,
9330                                           /*ambiguous_decls=*/NULL);
9331       if (TREE_CODE (argument) != TEMPLATE_DECL
9332           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
9333         cp_parser_error (parser, "expected template-name");
9334     }
9335   if (cp_parser_parse_definitely (parser))
9336     return argument;
9337   /* It must be a non-type argument.  There permitted cases are given
9338      in [temp.arg.nontype]:
9339
9340      -- an integral constant-expression of integral or enumeration
9341         type; or
9342
9343      -- the name of a non-type template-parameter; or
9344
9345      -- the name of an object or function with external linkage...
9346
9347      -- the address of an object or function with external linkage...
9348
9349      -- a pointer to member...  */
9350   /* Look for a non-type template parameter.  */
9351   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9352     {
9353       cp_parser_parse_tentatively (parser);
9354       argument = cp_parser_primary_expression (parser,
9355                                                /*adress_p=*/false,
9356                                                /*cast_p=*/false,
9357                                                /*template_arg_p=*/true,
9358                                                &idk);
9359       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
9360           || !cp_parser_next_token_ends_template_argument_p (parser))
9361         cp_parser_simulate_error (parser);
9362       if (cp_parser_parse_definitely (parser))
9363         return argument;
9364     }
9365
9366   /* If the next token is "&", the argument must be the address of an
9367      object or function with external linkage.  */
9368   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
9369   if (address_p)
9370     cp_lexer_consume_token (parser->lexer);
9371   /* See if we might have an id-expression.  */
9372   token = cp_lexer_peek_token (parser->lexer);
9373   if (token->type == CPP_NAME
9374       || token->keyword == RID_OPERATOR
9375       || token->type == CPP_SCOPE
9376       || token->type == CPP_TEMPLATE_ID
9377       || token->type == CPP_NESTED_NAME_SPECIFIER)
9378     {
9379       cp_parser_parse_tentatively (parser);
9380       argument = cp_parser_primary_expression (parser,
9381                                                address_p,
9382                                                /*cast_p=*/false,
9383                                                /*template_arg_p=*/true,
9384                                                &idk);
9385       if (cp_parser_error_occurred (parser)
9386           || !cp_parser_next_token_ends_template_argument_p (parser))
9387         cp_parser_abort_tentative_parse (parser);
9388       else
9389         {
9390           if (TREE_CODE (argument) == INDIRECT_REF)
9391             {
9392               gcc_assert (REFERENCE_REF_P (argument));
9393               argument = TREE_OPERAND (argument, 0);
9394             }
9395
9396           if (TREE_CODE (argument) == VAR_DECL)
9397             {
9398               /* A variable without external linkage might still be a
9399                  valid constant-expression, so no error is issued here
9400                  if the external-linkage check fails.  */
9401               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (argument))
9402                 cp_parser_simulate_error (parser);
9403             }
9404           else if (is_overloaded_fn (argument))
9405             /* All overloaded functions are allowed; if the external
9406                linkage test does not pass, an error will be issued
9407                later.  */
9408             ;
9409           else if (address_p
9410                    && (TREE_CODE (argument) == OFFSET_REF
9411                        || TREE_CODE (argument) == SCOPE_REF))
9412             /* A pointer-to-member.  */
9413             ;
9414           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
9415             ;
9416           else
9417             cp_parser_simulate_error (parser);
9418
9419           if (cp_parser_parse_definitely (parser))
9420             {
9421               if (address_p)
9422                 argument = build_x_unary_op (ADDR_EXPR, argument);
9423               return argument;
9424             }
9425         }
9426     }
9427   /* If the argument started with "&", there are no other valid
9428      alternatives at this point.  */
9429   if (address_p)
9430     {
9431       cp_parser_error (parser, "invalid non-type template argument");
9432       return error_mark_node;
9433     }
9434
9435   /* If the argument wasn't successfully parsed as a type-id followed
9436      by '>>', the argument can only be a constant expression now.
9437      Otherwise, we try parsing the constant-expression tentatively,
9438      because the argument could really be a type-id.  */
9439   if (maybe_type_id)
9440     cp_parser_parse_tentatively (parser);
9441   argument = cp_parser_constant_expression (parser,
9442                                             /*allow_non_constant_p=*/false,
9443                                             /*non_constant_p=*/NULL);
9444   argument = fold_non_dependent_expr (argument);
9445   if (!maybe_type_id)
9446     return argument;
9447   if (!cp_parser_next_token_ends_template_argument_p (parser))
9448     cp_parser_error (parser, "expected template-argument");
9449   if (cp_parser_parse_definitely (parser))
9450     return argument;
9451   /* We did our best to parse the argument as a non type-id, but that
9452      was the only alternative that matched (albeit with a '>' after
9453      it). We can assume it's just a typo from the user, and a
9454      diagnostic will then be issued.  */
9455   return cp_parser_type_id (parser);
9456 }
9457
9458 /* Parse an explicit-instantiation.
9459
9460    explicit-instantiation:
9461      template declaration
9462
9463    Although the standard says `declaration', what it really means is:
9464
9465    explicit-instantiation:
9466      template decl-specifier-seq [opt] declarator [opt] ;
9467
9468    Things like `template int S<int>::i = 5, int S<double>::j;' are not
9469    supposed to be allowed.  A defect report has been filed about this
9470    issue.
9471
9472    GNU Extension:
9473
9474    explicit-instantiation:
9475      storage-class-specifier template
9476        decl-specifier-seq [opt] declarator [opt] ;
9477      function-specifier template
9478        decl-specifier-seq [opt] declarator [opt] ;  */
9479
9480 static void
9481 cp_parser_explicit_instantiation (cp_parser* parser)
9482 {
9483   int declares_class_or_enum;
9484   cp_decl_specifier_seq decl_specifiers;
9485   tree extension_specifier = NULL_TREE;
9486
9487   /* Look for an (optional) storage-class-specifier or
9488      function-specifier.  */
9489   if (cp_parser_allow_gnu_extensions_p (parser))
9490     {
9491       extension_specifier
9492         = cp_parser_storage_class_specifier_opt (parser);
9493       if (!extension_specifier)
9494         extension_specifier
9495           = cp_parser_function_specifier_opt (parser,
9496                                               /*decl_specs=*/NULL);
9497     }
9498
9499   /* Look for the `template' keyword.  */
9500   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9501   /* Let the front end know that we are processing an explicit
9502      instantiation.  */
9503   begin_explicit_instantiation ();
9504   /* [temp.explicit] says that we are supposed to ignore access
9505      control while processing explicit instantiation directives.  */
9506   push_deferring_access_checks (dk_no_check);
9507   /* Parse a decl-specifier-seq.  */
9508   cp_parser_decl_specifier_seq (parser,
9509                                 CP_PARSER_FLAGS_OPTIONAL,
9510                                 &decl_specifiers,
9511                                 &declares_class_or_enum);
9512   /* If there was exactly one decl-specifier, and it declared a class,
9513      and there's no declarator, then we have an explicit type
9514      instantiation.  */
9515   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
9516     {
9517       tree type;
9518
9519       type = check_tag_decl (&decl_specifiers);
9520       /* Turn access control back on for names used during
9521          template instantiation.  */
9522       pop_deferring_access_checks ();
9523       if (type)
9524         do_type_instantiation (type, extension_specifier,
9525                                /*complain=*/tf_error);
9526     }
9527   else
9528     {
9529       cp_declarator *declarator;
9530       tree decl;
9531
9532       /* Parse the declarator.  */
9533       declarator
9534         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9535                                 /*ctor_dtor_or_conv_p=*/NULL,
9536                                 /*parenthesized_p=*/NULL,
9537                                 /*member_p=*/false);
9538       if (declares_class_or_enum & 2)
9539         cp_parser_check_for_definition_in_return_type (declarator,
9540                                                        decl_specifiers.type);
9541       if (declarator != cp_error_declarator)
9542         {
9543           decl = grokdeclarator (declarator, &decl_specifiers,
9544                                  NORMAL, 0, &decl_specifiers.attributes);
9545           /* Turn access control back on for names used during
9546              template instantiation.  */
9547           pop_deferring_access_checks ();
9548           /* Do the explicit instantiation.  */
9549           do_decl_instantiation (decl, extension_specifier);
9550         }
9551       else
9552         {
9553           pop_deferring_access_checks ();
9554           /* Skip the body of the explicit instantiation.  */
9555           cp_parser_skip_to_end_of_statement (parser);
9556         }
9557     }
9558   /* We're done with the instantiation.  */
9559   end_explicit_instantiation ();
9560
9561   cp_parser_consume_semicolon_at_end_of_statement (parser);
9562 }
9563
9564 /* Parse an explicit-specialization.
9565
9566    explicit-specialization:
9567      template < > declaration
9568
9569    Although the standard says `declaration', what it really means is:
9570
9571    explicit-specialization:
9572      template <> decl-specifier [opt] init-declarator [opt] ;
9573      template <> function-definition
9574      template <> explicit-specialization
9575      template <> template-declaration  */
9576
9577 static void
9578 cp_parser_explicit_specialization (cp_parser* parser)
9579 {
9580   bool need_lang_pop;
9581   /* Look for the `template' keyword.  */
9582   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9583   /* Look for the `<'.  */
9584   cp_parser_require (parser, CPP_LESS, "`<'");
9585   /* Look for the `>'.  */
9586   cp_parser_require (parser, CPP_GREATER, "`>'");
9587   /* We have processed another parameter list.  */
9588   ++parser->num_template_parameter_lists;
9589   /* [temp]
9590
9591      A template ... explicit specialization ... shall not have C
9592      linkage.  */
9593   if (current_lang_name == lang_name_c)
9594     {
9595       error ("template specialization with C linkage");
9596       /* Give it C++ linkage to avoid confusing other parts of the
9597          front end.  */
9598       push_lang_context (lang_name_cplusplus);
9599       need_lang_pop = true;
9600     }
9601   else
9602     need_lang_pop = false;
9603   /* Let the front end know that we are beginning a specialization.  */
9604   if (!begin_specialization ())
9605     {
9606       end_specialization ();
9607       cp_parser_skip_to_end_of_block_or_statement (parser);
9608       return;
9609     }
9610
9611   /* If the next keyword is `template', we need to figure out whether
9612      or not we're looking a template-declaration.  */
9613   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
9614     {
9615       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
9616           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
9617         cp_parser_template_declaration_after_export (parser,
9618                                                      /*member_p=*/false);
9619       else
9620         cp_parser_explicit_specialization (parser);
9621     }
9622   else
9623     /* Parse the dependent declaration.  */
9624     cp_parser_single_declaration (parser,
9625                                   /*checks=*/NULL,
9626                                   /*member_p=*/false,
9627                                   /*friend_p=*/NULL);
9628   /* We're done with the specialization.  */
9629   end_specialization ();
9630   /* For the erroneous case of a template with C linkage, we pushed an
9631      implicit C++ linkage scope; exit that scope now.  */
9632   if (need_lang_pop)
9633     pop_lang_context ();
9634   /* We're done with this parameter list.  */
9635   --parser->num_template_parameter_lists;
9636 }
9637
9638 /* Parse a type-specifier.
9639
9640    type-specifier:
9641      simple-type-specifier
9642      class-specifier
9643      enum-specifier
9644      elaborated-type-specifier
9645      cv-qualifier
9646
9647    GNU Extension:
9648
9649    type-specifier:
9650      __complex__
9651
9652    Returns a representation of the type-specifier.  For a
9653    class-specifier, enum-specifier, or elaborated-type-specifier, a
9654    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
9655
9656    The parser flags FLAGS is used to control type-specifier parsing.
9657
9658    If IS_DECLARATION is TRUE, then this type-specifier is appearing
9659    in a decl-specifier-seq.
9660
9661    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
9662    class-specifier, enum-specifier, or elaborated-type-specifier, then
9663    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
9664    if a type is declared; 2 if it is defined.  Otherwise, it is set to
9665    zero.
9666
9667    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
9668    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
9669    is set to FALSE.  */
9670
9671 static tree
9672 cp_parser_type_specifier (cp_parser* parser,
9673                           cp_parser_flags flags,
9674                           cp_decl_specifier_seq *decl_specs,
9675                           bool is_declaration,
9676                           int* declares_class_or_enum,
9677                           bool* is_cv_qualifier)
9678 {
9679   tree type_spec = NULL_TREE;
9680   cp_token *token;
9681   enum rid keyword;
9682   cp_decl_spec ds = ds_last;
9683
9684   /* Assume this type-specifier does not declare a new type.  */
9685   if (declares_class_or_enum)
9686     *declares_class_or_enum = 0;
9687   /* And that it does not specify a cv-qualifier.  */
9688   if (is_cv_qualifier)
9689     *is_cv_qualifier = false;
9690   /* Peek at the next token.  */
9691   token = cp_lexer_peek_token (parser->lexer);
9692
9693   /* If we're looking at a keyword, we can use that to guide the
9694      production we choose.  */
9695   keyword = token->keyword;
9696   switch (keyword)
9697     {
9698     case RID_ENUM:
9699       /* Look for the enum-specifier.  */
9700       type_spec = cp_parser_enum_specifier (parser);
9701       /* If that worked, we're done.  */
9702       if (type_spec)
9703         {
9704           if (declares_class_or_enum)
9705             *declares_class_or_enum = 2;
9706           if (decl_specs)
9707             cp_parser_set_decl_spec_type (decl_specs,
9708                                           type_spec,
9709                                           /*user_defined_p=*/true);
9710           return type_spec;
9711         }
9712       else
9713         goto elaborated_type_specifier;
9714
9715       /* Any of these indicate either a class-specifier, or an
9716          elaborated-type-specifier.  */
9717     case RID_CLASS:
9718     case RID_STRUCT:
9719     case RID_UNION:
9720       /* Parse tentatively so that we can back up if we don't find a
9721          class-specifier.  */
9722       cp_parser_parse_tentatively (parser);
9723       /* Look for the class-specifier.  */
9724       type_spec = cp_parser_class_specifier (parser);
9725       /* If that worked, we're done.  */
9726       if (cp_parser_parse_definitely (parser))
9727         {
9728           if (declares_class_or_enum)
9729             *declares_class_or_enum = 2;
9730           if (decl_specs)
9731             cp_parser_set_decl_spec_type (decl_specs,
9732                                           type_spec,
9733                                           /*user_defined_p=*/true);
9734           return type_spec;
9735         }
9736
9737       /* Fall through.  */
9738     elaborated_type_specifier:
9739       /* We're declaring (not defining) a class or enum.  */
9740       if (declares_class_or_enum)
9741         *declares_class_or_enum = 1;
9742
9743       /* Fall through.  */
9744     case RID_TYPENAME:
9745       /* Look for an elaborated-type-specifier.  */
9746       type_spec
9747         = (cp_parser_elaborated_type_specifier
9748            (parser,
9749             decl_specs && decl_specs->specs[(int) ds_friend],
9750             is_declaration));
9751       if (decl_specs)
9752         cp_parser_set_decl_spec_type (decl_specs,
9753                                       type_spec,
9754                                       /*user_defined_p=*/true);
9755       return type_spec;
9756
9757     case RID_CONST:
9758       ds = ds_const;
9759       if (is_cv_qualifier)
9760         *is_cv_qualifier = true;
9761       break;
9762
9763     case RID_VOLATILE:
9764       ds = ds_volatile;
9765       if (is_cv_qualifier)
9766         *is_cv_qualifier = true;
9767       break;
9768
9769     case RID_RESTRICT:
9770       ds = ds_restrict;
9771       if (is_cv_qualifier)
9772         *is_cv_qualifier = true;
9773       break;
9774
9775     case RID_COMPLEX:
9776       /* The `__complex__' keyword is a GNU extension.  */
9777       ds = ds_complex;
9778       break;
9779
9780     default:
9781       break;
9782     }
9783
9784   /* Handle simple keywords.  */
9785   if (ds != ds_last)
9786     {
9787       if (decl_specs)
9788         {
9789           ++decl_specs->specs[(int)ds];
9790           decl_specs->any_specifiers_p = true;
9791         }
9792       return cp_lexer_consume_token (parser->lexer)->u.value;
9793     }
9794
9795   /* If we do not already have a type-specifier, assume we are looking
9796      at a simple-type-specifier.  */
9797   type_spec = cp_parser_simple_type_specifier (parser,
9798                                                decl_specs,
9799                                                flags);
9800
9801   /* If we didn't find a type-specifier, and a type-specifier was not
9802      optional in this context, issue an error message.  */
9803   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9804     {
9805       cp_parser_error (parser, "expected type specifier");
9806       return error_mark_node;
9807     }
9808
9809   return type_spec;
9810 }
9811
9812 /* Parse a simple-type-specifier.
9813
9814    simple-type-specifier:
9815      :: [opt] nested-name-specifier [opt] type-name
9816      :: [opt] nested-name-specifier template template-id
9817      char
9818      wchar_t
9819      bool
9820      short
9821      int
9822      long
9823      signed
9824      unsigned
9825      float
9826      double
9827      void
9828
9829    GNU Extension:
9830
9831    simple-type-specifier:
9832      __typeof__ unary-expression
9833      __typeof__ ( type-id )
9834
9835    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
9836    appropriately updated.  */
9837
9838 static tree
9839 cp_parser_simple_type_specifier (cp_parser* parser,
9840                                  cp_decl_specifier_seq *decl_specs,
9841                                  cp_parser_flags flags)
9842 {
9843   tree type = NULL_TREE;
9844   cp_token *token;
9845
9846   /* Peek at the next token.  */
9847   token = cp_lexer_peek_token (parser->lexer);
9848
9849   /* If we're looking at a keyword, things are easy.  */
9850   switch (token->keyword)
9851     {
9852     case RID_CHAR:
9853       if (decl_specs)
9854         decl_specs->explicit_char_p = true;
9855       type = char_type_node;
9856       break;
9857     case RID_WCHAR:
9858       type = wchar_type_node;
9859       break;
9860     case RID_BOOL:
9861       type = boolean_type_node;
9862       break;
9863     case RID_SHORT:
9864       if (decl_specs)
9865         ++decl_specs->specs[(int) ds_short];
9866       type = short_integer_type_node;
9867       break;
9868     case RID_INT:
9869       if (decl_specs)
9870         decl_specs->explicit_int_p = true;
9871       type = integer_type_node;
9872       break;
9873     case RID_LONG:
9874       if (decl_specs)
9875         ++decl_specs->specs[(int) ds_long];
9876       type = long_integer_type_node;
9877       break;
9878     case RID_SIGNED:
9879       if (decl_specs)
9880         ++decl_specs->specs[(int) ds_signed];
9881       type = integer_type_node;
9882       break;
9883     case RID_UNSIGNED:
9884       if (decl_specs)
9885         ++decl_specs->specs[(int) ds_unsigned];
9886       type = unsigned_type_node;
9887       break;
9888     case RID_FLOAT:
9889       type = float_type_node;
9890       break;
9891     case RID_DOUBLE:
9892       type = double_type_node;
9893       break;
9894     case RID_VOID:
9895       type = void_type_node;
9896       break;
9897
9898     case RID_TYPEOF:
9899       /* Consume the `typeof' token.  */
9900       cp_lexer_consume_token (parser->lexer);
9901       /* Parse the operand to `typeof'.  */
9902       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9903       /* If it is not already a TYPE, take its type.  */
9904       if (!TYPE_P (type))
9905         type = finish_typeof (type);
9906
9907       if (decl_specs)
9908         cp_parser_set_decl_spec_type (decl_specs, type,
9909                                       /*user_defined_p=*/true);
9910
9911       return type;
9912
9913     default:
9914       break;
9915     }
9916
9917   /* If the type-specifier was for a built-in type, we're done.  */
9918   if (type)
9919     {
9920       tree id;
9921
9922       /* Record the type.  */
9923       if (decl_specs
9924           && (token->keyword != RID_SIGNED
9925               && token->keyword != RID_UNSIGNED
9926               && token->keyword != RID_SHORT
9927               && token->keyword != RID_LONG))
9928         cp_parser_set_decl_spec_type (decl_specs,
9929                                       type,
9930                                       /*user_defined=*/false);
9931       if (decl_specs)
9932         decl_specs->any_specifiers_p = true;
9933
9934       /* Consume the token.  */
9935       id = cp_lexer_consume_token (parser->lexer)->u.value;
9936
9937       /* There is no valid C++ program where a non-template type is
9938          followed by a "<".  That usually indicates that the user thought
9939          that the type was a template.  */
9940       cp_parser_check_for_invalid_template_id (parser, type);
9941
9942       return TYPE_NAME (type);
9943     }
9944
9945   /* The type-specifier must be a user-defined type.  */
9946   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
9947     {
9948       bool qualified_p;
9949       bool global_p;
9950
9951       /* Don't gobble tokens or issue error messages if this is an
9952          optional type-specifier.  */
9953       if (flags & CP_PARSER_FLAGS_OPTIONAL)
9954         cp_parser_parse_tentatively (parser);
9955
9956       /* Look for the optional `::' operator.  */
9957       global_p
9958         = (cp_parser_global_scope_opt (parser,
9959                                        /*current_scope_valid_p=*/false)
9960            != NULL_TREE);
9961       /* Look for the nested-name specifier.  */
9962       qualified_p
9963         = (cp_parser_nested_name_specifier_opt (parser,
9964                                                 /*typename_keyword_p=*/false,
9965                                                 /*check_dependency_p=*/true,
9966                                                 /*type_p=*/false,
9967                                                 /*is_declaration=*/false)
9968            != NULL_TREE);
9969       /* If we have seen a nested-name-specifier, and the next token
9970          is `template', then we are using the template-id production.  */
9971       if (parser->scope
9972           && cp_parser_optional_template_keyword (parser))
9973         {
9974           /* Look for the template-id.  */
9975           type = cp_parser_template_id (parser,
9976                                         /*template_keyword_p=*/true,
9977                                         /*check_dependency_p=*/true,
9978                                         /*is_declaration=*/false);
9979           /* If the template-id did not name a type, we are out of
9980              luck.  */
9981           if (TREE_CODE (type) != TYPE_DECL)
9982             {
9983               cp_parser_error (parser, "expected template-id for type");
9984               type = NULL_TREE;
9985             }
9986         }
9987       /* Otherwise, look for a type-name.  */
9988       else
9989         type = cp_parser_type_name (parser);
9990       /* Keep track of all name-lookups performed in class scopes.  */
9991       if (type
9992           && !global_p
9993           && !qualified_p
9994           && TREE_CODE (type) == TYPE_DECL
9995           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
9996         maybe_note_name_used_in_class (DECL_NAME (type), type);
9997       /* If it didn't work out, we don't have a TYPE.  */
9998       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
9999           && !cp_parser_parse_definitely (parser))
10000         type = NULL_TREE;
10001       if (type && decl_specs)
10002         cp_parser_set_decl_spec_type (decl_specs, type,
10003                                       /*user_defined=*/true);
10004     }
10005
10006   /* If we didn't get a type-name, issue an error message.  */
10007   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
10008     {
10009       cp_parser_error (parser, "expected type-name");
10010       return error_mark_node;
10011     }
10012
10013   /* There is no valid C++ program where a non-template type is
10014      followed by a "<".  That usually indicates that the user thought
10015      that the type was a template.  */
10016   if (type && type != error_mark_node)
10017     {
10018       /* As a last-ditch effort, see if TYPE is an Objective-C type.
10019          If it is, then the '<'...'>' enclose protocol names rather than
10020          template arguments, and so everything is fine.  */
10021       if (c_dialect_objc ()
10022           && (objc_is_id (type) || objc_is_class_name (type)))
10023         {
10024           tree protos = cp_parser_objc_protocol_refs_opt (parser);
10025           tree qual_type = objc_get_protocol_qualified_type (type, protos);
10026
10027           /* Clobber the "unqualified" type previously entered into
10028              DECL_SPECS with the new, improved protocol-qualified version.  */
10029           if (decl_specs)
10030             decl_specs->type = qual_type;
10031
10032           return qual_type;
10033         }
10034
10035       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
10036     }
10037
10038   return type;
10039 }
10040
10041 /* Parse a type-name.
10042
10043    type-name:
10044      class-name
10045      enum-name
10046      typedef-name
10047
10048    enum-name:
10049      identifier
10050
10051    typedef-name:
10052      identifier
10053
10054    Returns a TYPE_DECL for the type.  */
10055
10056 static tree
10057 cp_parser_type_name (cp_parser* parser)
10058 {
10059   tree type_decl;
10060   tree identifier;
10061
10062   /* We can't know yet whether it is a class-name or not.  */
10063   cp_parser_parse_tentatively (parser);
10064   /* Try a class-name.  */
10065   type_decl = cp_parser_class_name (parser,
10066                                     /*typename_keyword_p=*/false,
10067                                     /*template_keyword_p=*/false,
10068                                     none_type,
10069                                     /*check_dependency_p=*/true,
10070                                     /*class_head_p=*/false,
10071                                     /*is_declaration=*/false);
10072   /* If it's not a class-name, keep looking.  */
10073   if (!cp_parser_parse_definitely (parser))
10074     {
10075       /* It must be a typedef-name or an enum-name.  */
10076       identifier = cp_parser_identifier (parser);
10077       if (identifier == error_mark_node)
10078         return error_mark_node;
10079
10080       /* Look up the type-name.  */
10081       type_decl = cp_parser_lookup_name_simple (parser, identifier);
10082
10083       if (TREE_CODE (type_decl) != TYPE_DECL
10084           && (objc_is_id (identifier) || objc_is_class_name (identifier)))
10085         {
10086           /* See if this is an Objective-C type.  */
10087           tree protos = cp_parser_objc_protocol_refs_opt (parser);
10088           tree type = objc_get_protocol_qualified_type (identifier, protos);
10089           if (type)
10090             type_decl = TYPE_NAME (type);
10091         }
10092
10093       /* Issue an error if we did not find a type-name.  */
10094       if (TREE_CODE (type_decl) != TYPE_DECL)
10095         {
10096           if (!cp_parser_simulate_error (parser))
10097             cp_parser_name_lookup_error (parser, identifier, type_decl,
10098                                          "is not a type");
10099           type_decl = error_mark_node;
10100         }
10101       /* Remember that the name was used in the definition of the
10102          current class so that we can check later to see if the
10103          meaning would have been different after the class was
10104          entirely defined.  */
10105       else if (type_decl != error_mark_node
10106                && !parser->scope)
10107         maybe_note_name_used_in_class (identifier, type_decl);
10108     }
10109
10110   return type_decl;
10111 }
10112
10113
10114 /* Parse an elaborated-type-specifier.  Note that the grammar given
10115    here incorporates the resolution to DR68.
10116
10117    elaborated-type-specifier:
10118      class-key :: [opt] nested-name-specifier [opt] identifier
10119      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
10120      enum :: [opt] nested-name-specifier [opt] identifier
10121      typename :: [opt] nested-name-specifier identifier
10122      typename :: [opt] nested-name-specifier template [opt]
10123        template-id
10124
10125    GNU extension:
10126
10127    elaborated-type-specifier:
10128      class-key attributes :: [opt] nested-name-specifier [opt] identifier
10129      class-key attributes :: [opt] nested-name-specifier [opt]
10130                template [opt] template-id
10131      enum attributes :: [opt] nested-name-specifier [opt] identifier
10132
10133    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
10134    declared `friend'.  If IS_DECLARATION is TRUE, then this
10135    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
10136    something is being declared.
10137
10138    Returns the TYPE specified.  */
10139
10140 static tree
10141 cp_parser_elaborated_type_specifier (cp_parser* parser,
10142                                      bool is_friend,
10143                                      bool is_declaration)
10144 {
10145   enum tag_types tag_type;
10146   tree identifier;
10147   tree type = NULL_TREE;
10148   tree attributes = NULL_TREE;
10149
10150   /* See if we're looking at the `enum' keyword.  */
10151   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
10152     {
10153       /* Consume the `enum' token.  */
10154       cp_lexer_consume_token (parser->lexer);
10155       /* Remember that it's an enumeration type.  */
10156       tag_type = enum_type;
10157       /* Parse the attributes.  */
10158       attributes = cp_parser_attributes_opt (parser);
10159     }
10160   /* Or, it might be `typename'.  */
10161   else if (cp_lexer_next_token_is_keyword (parser->lexer,
10162                                            RID_TYPENAME))
10163     {
10164       /* Consume the `typename' token.  */
10165       cp_lexer_consume_token (parser->lexer);
10166       /* Remember that it's a `typename' type.  */
10167       tag_type = typename_type;
10168       /* The `typename' keyword is only allowed in templates.  */
10169       if (!processing_template_decl)
10170         pedwarn ("using %<typename%> outside of template");
10171     }
10172   /* Otherwise it must be a class-key.  */
10173   else
10174     {
10175       tag_type = cp_parser_class_key (parser);
10176       if (tag_type == none_type)
10177         return error_mark_node;
10178       /* Parse the attributes.  */
10179       attributes = cp_parser_attributes_opt (parser);
10180     }
10181
10182   /* Look for the `::' operator.  */
10183   cp_parser_global_scope_opt (parser,
10184                               /*current_scope_valid_p=*/false);
10185   /* Look for the nested-name-specifier.  */
10186   if (tag_type == typename_type)
10187     {
10188       if (!cp_parser_nested_name_specifier (parser,
10189                                            /*typename_keyword_p=*/true,
10190                                            /*check_dependency_p=*/true,
10191                                            /*type_p=*/true,
10192                                             is_declaration))
10193         return error_mark_node;
10194     }
10195   else
10196     /* Even though `typename' is not present, the proposed resolution
10197        to Core Issue 180 says that in `class A<T>::B', `B' should be
10198        considered a type-name, even if `A<T>' is dependent.  */
10199     cp_parser_nested_name_specifier_opt (parser,
10200                                          /*typename_keyword_p=*/true,
10201                                          /*check_dependency_p=*/true,
10202                                          /*type_p=*/true,
10203                                          is_declaration);
10204   /* For everything but enumeration types, consider a template-id.
10205      For an enumeration type, consider only a plain identifier.  */
10206   if (tag_type != enum_type)
10207     {
10208       bool template_p = false;
10209       tree decl;
10210
10211       /* Allow the `template' keyword.  */
10212       template_p = cp_parser_optional_template_keyword (parser);
10213       /* If we didn't see `template', we don't know if there's a
10214          template-id or not.  */
10215       if (!template_p)
10216         cp_parser_parse_tentatively (parser);
10217       /* Parse the template-id.  */
10218       decl = cp_parser_template_id (parser, template_p,
10219                                     /*check_dependency_p=*/true,
10220                                     is_declaration);
10221       /* If we didn't find a template-id, look for an ordinary
10222          identifier.  */
10223       if (!template_p && !cp_parser_parse_definitely (parser))
10224         ;
10225       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
10226          in effect, then we must assume that, upon instantiation, the
10227          template will correspond to a class.  */
10228       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
10229                && tag_type == typename_type)
10230         type = make_typename_type (parser->scope, decl,
10231                                    typename_type,
10232                                    /*complain=*/tf_error);
10233       else
10234         type = TREE_TYPE (decl);
10235     }
10236
10237   if (!type)
10238     {
10239       identifier = cp_parser_identifier (parser);
10240
10241       if (identifier == error_mark_node)
10242         {
10243           parser->scope = NULL_TREE;
10244           return error_mark_node;
10245         }
10246
10247       /* For a `typename', we needn't call xref_tag.  */
10248       if (tag_type == typename_type
10249           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
10250         return cp_parser_make_typename_type (parser, parser->scope,
10251                                              identifier);
10252       /* Look up a qualified name in the usual way.  */
10253       if (parser->scope)
10254         {
10255           tree decl;
10256
10257           decl = cp_parser_lookup_name (parser, identifier,
10258                                         tag_type,
10259                                         /*is_template=*/false,
10260                                         /*is_namespace=*/false,
10261                                         /*check_dependency=*/true,
10262                                         /*ambiguous_decls=*/NULL);
10263
10264           /* If we are parsing friend declaration, DECL may be a
10265              TEMPLATE_DECL tree node here.  However, we need to check
10266              whether this TEMPLATE_DECL results in valid code.  Consider
10267              the following example:
10268
10269                namespace N {
10270                  template <class T> class C {};
10271                }
10272                class X {
10273                  template <class T> friend class N::C; // #1, valid code
10274                };
10275                template <class T> class Y {
10276                  friend class N::C;                    // #2, invalid code
10277                };
10278
10279              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
10280              name lookup of `N::C'.  We see that friend declaration must
10281              be template for the code to be valid.  Note that
10282              processing_template_decl does not work here since it is
10283              always 1 for the above two cases.  */
10284
10285           decl = (cp_parser_maybe_treat_template_as_class
10286                   (decl, /*tag_name_p=*/is_friend
10287                          && parser->num_template_parameter_lists));
10288
10289           if (TREE_CODE (decl) != TYPE_DECL)
10290             {
10291               cp_parser_diagnose_invalid_type_name (parser,
10292                                                     parser->scope,
10293                                                     identifier);
10294               return error_mark_node;
10295             }
10296
10297           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
10298             {
10299               bool allow_template = (parser->num_template_parameter_lists
10300                                       || DECL_SELF_REFERENCE_P (decl));
10301               type = check_elaborated_type_specifier (tag_type, decl, 
10302                                                       allow_template);
10303
10304               if (type == error_mark_node)
10305                 return error_mark_node;
10306             }
10307
10308           type = TREE_TYPE (decl);
10309         }
10310       else
10311         {
10312           /* An elaborated-type-specifier sometimes introduces a new type and
10313              sometimes names an existing type.  Normally, the rule is that it
10314              introduces a new type only if there is not an existing type of
10315              the same name already in scope.  For example, given:
10316
10317                struct S {};
10318                void f() { struct S s; }
10319
10320              the `struct S' in the body of `f' is the same `struct S' as in
10321              the global scope; the existing definition is used.  However, if
10322              there were no global declaration, this would introduce a new
10323              local class named `S'.
10324
10325              An exception to this rule applies to the following code:
10326
10327                namespace N { struct S; }
10328
10329              Here, the elaborated-type-specifier names a new type
10330              unconditionally; even if there is already an `S' in the
10331              containing scope this declaration names a new type.
10332              This exception only applies if the elaborated-type-specifier
10333              forms the complete declaration:
10334
10335                [class.name]
10336
10337                A declaration consisting solely of `class-key identifier ;' is
10338                either a redeclaration of the name in the current scope or a
10339                forward declaration of the identifier as a class name.  It
10340                introduces the name into the current scope.
10341
10342              We are in this situation precisely when the next token is a `;'.
10343
10344              An exception to the exception is that a `friend' declaration does
10345              *not* name a new type; i.e., given:
10346
10347                struct S { friend struct T; };
10348
10349              `T' is not a new type in the scope of `S'.
10350
10351              Also, `new struct S' or `sizeof (struct S)' never results in the
10352              definition of a new type; a new type can only be declared in a
10353              declaration context.  */
10354
10355           tag_scope ts;
10356           bool template_p;
10357
10358           if (is_friend)
10359             /* Friends have special name lookup rules.  */
10360             ts = ts_within_enclosing_non_class;
10361           else if (is_declaration
10362                    && cp_lexer_next_token_is (parser->lexer,
10363                                               CPP_SEMICOLON))
10364             /* This is a `class-key identifier ;' */
10365             ts = ts_current;
10366           else
10367             ts = ts_global;
10368
10369           template_p =
10370             (parser->num_template_parameter_lists
10371              && (cp_parser_next_token_starts_class_definition_p (parser)
10372                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
10373           /* An unqualified name was used to reference this type, so
10374              there were no qualifying templates.  */
10375           if (!cp_parser_check_template_parameters (parser,
10376                                                     /*num_templates=*/0))
10377             return error_mark_node;
10378           type = xref_tag (tag_type, identifier, ts, template_p);
10379         }
10380     }
10381
10382   if (type == error_mark_node)
10383     return error_mark_node;
10384
10385   /* Allow attributes on forward declarations of classes.  */
10386   if (attributes)
10387     {
10388       if (TREE_CODE (type) == TYPENAME_TYPE)
10389         warning (OPT_Wattributes,
10390                  "attributes ignored on uninstantiated type");
10391       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
10392                && ! processing_explicit_instantiation)
10393         warning (OPT_Wattributes,
10394                  "attributes ignored on template instantiation");
10395       else if (is_declaration && cp_parser_declares_only_class_p (parser))
10396         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
10397       else
10398         warning (OPT_Wattributes,
10399                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
10400     }
10401
10402   if (tag_type != enum_type)
10403     cp_parser_check_class_key (tag_type, type);
10404
10405   /* A "<" cannot follow an elaborated type specifier.  If that
10406      happens, the user was probably trying to form a template-id.  */
10407   cp_parser_check_for_invalid_template_id (parser, type);
10408
10409   return type;
10410 }
10411
10412 /* Parse an enum-specifier.
10413
10414    enum-specifier:
10415      enum identifier [opt] { enumerator-list [opt] }
10416
10417    GNU Extensions:
10418      enum attributes[opt] identifier [opt] { enumerator-list [opt] }
10419        attributes[opt]
10420
10421    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
10422    if the token stream isn't an enum-specifier after all.  */
10423
10424 static tree
10425 cp_parser_enum_specifier (cp_parser* parser)
10426 {
10427   tree identifier;
10428   tree type;
10429   tree attributes;
10430
10431   /* Parse tentatively so that we can back up if we don't find a
10432      enum-specifier.  */
10433   cp_parser_parse_tentatively (parser);
10434
10435   /* Caller guarantees that the current token is 'enum', an identifier
10436      possibly follows, and the token after that is an opening brace.
10437      If we don't have an identifier, fabricate an anonymous name for
10438      the enumeration being defined.  */
10439   cp_lexer_consume_token (parser->lexer);
10440
10441   attributes = cp_parser_attributes_opt (parser);
10442
10443   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10444     identifier = cp_parser_identifier (parser);
10445   else
10446     identifier = make_anon_name ();
10447
10448   /* Look for the `{' but don't consume it yet.  */
10449   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10450     cp_parser_simulate_error (parser);
10451
10452   if (!cp_parser_parse_definitely (parser))
10453     return NULL_TREE;
10454
10455   /* Issue an error message if type-definitions are forbidden here.  */
10456   if (!cp_parser_check_type_definition (parser))
10457     type = error_mark_node;
10458   else
10459     /* Create the new type.  We do this before consuming the opening
10460        brace so the enum will be recorded as being on the line of its
10461        tag (or the 'enum' keyword, if there is no tag).  */
10462     type = start_enum (identifier);
10463   
10464   /* Consume the opening brace.  */
10465   cp_lexer_consume_token (parser->lexer);
10466
10467   if (type == error_mark_node)
10468     {
10469       cp_parser_skip_to_end_of_block_or_statement (parser);
10470       return error_mark_node;
10471     }
10472
10473   /* If the next token is not '}', then there are some enumerators.  */
10474   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
10475     cp_parser_enumerator_list (parser, type);
10476
10477   /* Consume the final '}'.  */
10478   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10479
10480   /* Look for trailing attributes to apply to this enumeration, and
10481      apply them if appropriate.  */
10482   if (cp_parser_allow_gnu_extensions_p (parser))
10483     {
10484       tree trailing_attr = cp_parser_attributes_opt (parser);
10485       cplus_decl_attributes (&type,
10486                              trailing_attr,
10487                              (int) ATTR_FLAG_TYPE_IN_PLACE);
10488     }
10489
10490   /* Finish up the enumeration.  */
10491   finish_enum (type);
10492
10493   return type;
10494 }
10495
10496 /* Parse an enumerator-list.  The enumerators all have the indicated
10497    TYPE.
10498
10499    enumerator-list:
10500      enumerator-definition
10501      enumerator-list , enumerator-definition  */
10502
10503 static void
10504 cp_parser_enumerator_list (cp_parser* parser, tree type)
10505 {
10506   while (true)
10507     {
10508       /* Parse an enumerator-definition.  */
10509       cp_parser_enumerator_definition (parser, type);
10510
10511       /* If the next token is not a ',', we've reached the end of
10512          the list.  */
10513       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10514         break;
10515       /* Otherwise, consume the `,' and keep going.  */
10516       cp_lexer_consume_token (parser->lexer);
10517       /* If the next token is a `}', there is a trailing comma.  */
10518       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
10519         {
10520           if (pedantic && !in_system_header)
10521             pedwarn ("comma at end of enumerator list");
10522           break;
10523         }
10524     }
10525 }
10526
10527 /* Parse an enumerator-definition.  The enumerator has the indicated
10528    TYPE.
10529
10530    enumerator-definition:
10531      enumerator
10532      enumerator = constant-expression
10533
10534    enumerator:
10535      identifier  */
10536
10537 static void
10538 cp_parser_enumerator_definition (cp_parser* parser, tree type)
10539 {
10540   tree identifier;
10541   tree value;
10542
10543   /* Look for the identifier.  */
10544   identifier = cp_parser_identifier (parser);
10545   if (identifier == error_mark_node)
10546     return;
10547
10548   /* If the next token is an '=', then there is an explicit value.  */
10549   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10550     {
10551       /* Consume the `=' token.  */
10552       cp_lexer_consume_token (parser->lexer);
10553       /* Parse the value.  */
10554       value = cp_parser_constant_expression (parser,
10555                                              /*allow_non_constant_p=*/false,
10556                                              NULL);
10557     }
10558   else
10559     value = NULL_TREE;
10560
10561   /* Create the enumerator.  */
10562   build_enumerator (identifier, value, type);
10563 }
10564
10565 /* Parse a namespace-name.
10566
10567    namespace-name:
10568      original-namespace-name
10569      namespace-alias
10570
10571    Returns the NAMESPACE_DECL for the namespace.  */
10572
10573 static tree
10574 cp_parser_namespace_name (cp_parser* parser)
10575 {
10576   tree identifier;
10577   tree namespace_decl;
10578
10579   /* Get the name of the namespace.  */
10580   identifier = cp_parser_identifier (parser);
10581   if (identifier == error_mark_node)
10582     return error_mark_node;
10583
10584   /* Look up the identifier in the currently active scope.  Look only
10585      for namespaces, due to:
10586
10587        [basic.lookup.udir]
10588
10589        When looking up a namespace-name in a using-directive or alias
10590        definition, only namespace names are considered.
10591
10592      And:
10593
10594        [basic.lookup.qual]
10595
10596        During the lookup of a name preceding the :: scope resolution
10597        operator, object, function, and enumerator names are ignored.
10598
10599      (Note that cp_parser_class_or_namespace_name only calls this
10600      function if the token after the name is the scope resolution
10601      operator.)  */
10602   namespace_decl = cp_parser_lookup_name (parser, identifier,
10603                                           none_type,
10604                                           /*is_template=*/false,
10605                                           /*is_namespace=*/true,
10606                                           /*check_dependency=*/true,
10607                                           /*ambiguous_decls=*/NULL);
10608   /* If it's not a namespace, issue an error.  */
10609   if (namespace_decl == error_mark_node
10610       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
10611     {
10612       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
10613         error ("%qD is not a namespace-name", identifier);
10614       cp_parser_error (parser, "expected namespace-name");
10615       namespace_decl = error_mark_node;
10616     }
10617
10618   return namespace_decl;
10619 }
10620
10621 /* Parse a namespace-definition.
10622
10623    namespace-definition:
10624      named-namespace-definition
10625      unnamed-namespace-definition
10626
10627    named-namespace-definition:
10628      original-namespace-definition
10629      extension-namespace-definition
10630
10631    original-namespace-definition:
10632      namespace identifier { namespace-body }
10633
10634    extension-namespace-definition:
10635      namespace original-namespace-name { namespace-body }
10636
10637    unnamed-namespace-definition:
10638      namespace { namespace-body } */
10639
10640 static void
10641 cp_parser_namespace_definition (cp_parser* parser)
10642 {
10643   tree identifier, attribs;
10644
10645   /* Look for the `namespace' keyword.  */
10646   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10647
10648   /* Get the name of the namespace.  We do not attempt to distinguish
10649      between an original-namespace-definition and an
10650      extension-namespace-definition at this point.  The semantic
10651      analysis routines are responsible for that.  */
10652   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10653     identifier = cp_parser_identifier (parser);
10654   else
10655     identifier = NULL_TREE;
10656
10657   /* Parse any specified attributes.  */
10658   attribs = cp_parser_attributes_opt (parser);
10659
10660   /* Look for the `{' to start the namespace.  */
10661   cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
10662   /* Start the namespace.  */
10663   push_namespace_with_attribs (identifier, attribs);
10664   /* Parse the body of the namespace.  */
10665   cp_parser_namespace_body (parser);
10666   /* Finish the namespace.  */
10667   pop_namespace ();
10668   /* Look for the final `}'.  */
10669   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10670 }
10671
10672 /* Parse a namespace-body.
10673
10674    namespace-body:
10675      declaration-seq [opt]  */
10676
10677 static void
10678 cp_parser_namespace_body (cp_parser* parser)
10679 {
10680   cp_parser_declaration_seq_opt (parser);
10681 }
10682
10683 /* Parse a namespace-alias-definition.
10684
10685    namespace-alias-definition:
10686      namespace identifier = qualified-namespace-specifier ;  */
10687
10688 static void
10689 cp_parser_namespace_alias_definition (cp_parser* parser)
10690 {
10691   tree identifier;
10692   tree namespace_specifier;
10693
10694   /* Look for the `namespace' keyword.  */
10695   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10696   /* Look for the identifier.  */
10697   identifier = cp_parser_identifier (parser);
10698   if (identifier == error_mark_node)
10699     return;
10700   /* Look for the `=' token.  */
10701   cp_parser_require (parser, CPP_EQ, "`='");
10702   /* Look for the qualified-namespace-specifier.  */
10703   namespace_specifier
10704     = cp_parser_qualified_namespace_specifier (parser);
10705   /* Look for the `;' token.  */
10706   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10707
10708   /* Register the alias in the symbol table.  */
10709   do_namespace_alias (identifier, namespace_specifier);
10710 }
10711
10712 /* Parse a qualified-namespace-specifier.
10713
10714    qualified-namespace-specifier:
10715      :: [opt] nested-name-specifier [opt] namespace-name
10716
10717    Returns a NAMESPACE_DECL corresponding to the specified
10718    namespace.  */
10719
10720 static tree
10721 cp_parser_qualified_namespace_specifier (cp_parser* parser)
10722 {
10723   /* Look for the optional `::'.  */
10724   cp_parser_global_scope_opt (parser,
10725                               /*current_scope_valid_p=*/false);
10726
10727   /* Look for the optional nested-name-specifier.  */
10728   cp_parser_nested_name_specifier_opt (parser,
10729                                        /*typename_keyword_p=*/false,
10730                                        /*check_dependency_p=*/true,
10731                                        /*type_p=*/false,
10732                                        /*is_declaration=*/true);
10733
10734   return cp_parser_namespace_name (parser);
10735 }
10736
10737 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
10738    access declaration.
10739
10740    using-declaration:
10741      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
10742      using :: unqualified-id ;  
10743
10744    access-declaration:
10745      qualified-id ;  
10746
10747    */
10748
10749 static bool
10750 cp_parser_using_declaration (cp_parser* parser, 
10751                              bool access_declaration_p)
10752 {
10753   cp_token *token;
10754   bool typename_p = false;
10755   bool global_scope_p;
10756   tree decl;
10757   tree identifier;
10758   tree qscope;
10759
10760   if (access_declaration_p)
10761     cp_parser_parse_tentatively (parser);
10762   else
10763     {
10764       /* Look for the `using' keyword.  */
10765       cp_parser_require_keyword (parser, RID_USING, "`using'");
10766       
10767       /* Peek at the next token.  */
10768       token = cp_lexer_peek_token (parser->lexer);
10769       /* See if it's `typename'.  */
10770       if (token->keyword == RID_TYPENAME)
10771         {
10772           /* Remember that we've seen it.  */
10773           typename_p = true;
10774           /* Consume the `typename' token.  */
10775           cp_lexer_consume_token (parser->lexer);
10776         }
10777     }
10778
10779   /* Look for the optional global scope qualification.  */
10780   global_scope_p
10781     = (cp_parser_global_scope_opt (parser,
10782                                    /*current_scope_valid_p=*/false)
10783        != NULL_TREE);
10784
10785   /* If we saw `typename', or didn't see `::', then there must be a
10786      nested-name-specifier present.  */
10787   if (typename_p || !global_scope_p)
10788     qscope = cp_parser_nested_name_specifier (parser, typename_p,
10789                                               /*check_dependency_p=*/true,
10790                                               /*type_p=*/false,
10791                                               /*is_declaration=*/true);
10792   /* Otherwise, we could be in either of the two productions.  In that
10793      case, treat the nested-name-specifier as optional.  */
10794   else
10795     qscope = cp_parser_nested_name_specifier_opt (parser,
10796                                                   /*typename_keyword_p=*/false,
10797                                                   /*check_dependency_p=*/true,
10798                                                   /*type_p=*/false,
10799                                                   /*is_declaration=*/true);
10800   if (!qscope)
10801     qscope = global_namespace;
10802
10803   if (access_declaration_p && cp_parser_error_occurred (parser))
10804     /* Something has already gone wrong; there's no need to parse
10805        further.  Since an error has occurred, the return value of
10806        cp_parser_parse_definitely will be false, as required.  */
10807     return cp_parser_parse_definitely (parser);
10808
10809   /* Parse the unqualified-id.  */
10810   identifier = cp_parser_unqualified_id (parser,
10811                                          /*template_keyword_p=*/false,
10812                                          /*check_dependency_p=*/true,
10813                                          /*declarator_p=*/true,
10814                                          /*optional_p=*/false);
10815
10816   if (access_declaration_p)
10817     {
10818       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
10819         cp_parser_simulate_error (parser);
10820       if (!cp_parser_parse_definitely (parser))
10821         return false;
10822     }
10823
10824   /* The function we call to handle a using-declaration is different
10825      depending on what scope we are in.  */
10826   if (qscope == error_mark_node || identifier == error_mark_node)
10827     ;
10828   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
10829            && TREE_CODE (identifier) != BIT_NOT_EXPR)
10830     /* [namespace.udecl]
10831
10832        A using declaration shall not name a template-id.  */
10833     error ("a template-id may not appear in a using-declaration");
10834   else
10835     {
10836       if (at_class_scope_p ())
10837         {
10838           /* Create the USING_DECL.  */
10839           decl = do_class_using_decl (parser->scope, identifier);
10840           /* Add it to the list of members in this class.  */
10841           finish_member_declaration (decl);
10842         }
10843       else
10844         {
10845           decl = cp_parser_lookup_name_simple (parser, identifier);
10846           if (decl == error_mark_node)
10847             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
10848           else if (!at_namespace_scope_p ())
10849             do_local_using_decl (decl, qscope, identifier);
10850           else
10851             do_toplevel_using_decl (decl, qscope, identifier);
10852         }
10853     }
10854
10855   /* Look for the final `;'.  */
10856   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10857   
10858   return true;
10859 }
10860
10861 /* Parse a using-directive.
10862
10863    using-directive:
10864      using namespace :: [opt] nested-name-specifier [opt]
10865        namespace-name ;  */
10866
10867 static void
10868 cp_parser_using_directive (cp_parser* parser)
10869 {
10870   tree namespace_decl;
10871   tree attribs;
10872
10873   /* Look for the `using' keyword.  */
10874   cp_parser_require_keyword (parser, RID_USING, "`using'");
10875   /* And the `namespace' keyword.  */
10876   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10877   /* Look for the optional `::' operator.  */
10878   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
10879   /* And the optional nested-name-specifier.  */
10880   cp_parser_nested_name_specifier_opt (parser,
10881                                        /*typename_keyword_p=*/false,
10882                                        /*check_dependency_p=*/true,
10883                                        /*type_p=*/false,
10884                                        /*is_declaration=*/true);
10885   /* Get the namespace being used.  */
10886   namespace_decl = cp_parser_namespace_name (parser);
10887   /* And any specified attributes.  */
10888   attribs = cp_parser_attributes_opt (parser);
10889   /* Update the symbol table.  */
10890   parse_using_directive (namespace_decl, attribs);
10891   /* Look for the final `;'.  */
10892   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10893 }
10894
10895 /* Parse an asm-definition.
10896
10897    asm-definition:
10898      asm ( string-literal ) ;
10899
10900    GNU Extension:
10901
10902    asm-definition:
10903      asm volatile [opt] ( string-literal ) ;
10904      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
10905      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10906                           : asm-operand-list [opt] ) ;
10907      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10908                           : asm-operand-list [opt]
10909                           : asm-operand-list [opt] ) ;  */
10910
10911 static void
10912 cp_parser_asm_definition (cp_parser* parser)
10913 {
10914   tree string;
10915   tree outputs = NULL_TREE;
10916   tree inputs = NULL_TREE;
10917   tree clobbers = NULL_TREE;
10918   tree asm_stmt;
10919   bool volatile_p = false;
10920   bool extended_p = false;
10921
10922   /* Look for the `asm' keyword.  */
10923   cp_parser_require_keyword (parser, RID_ASM, "`asm'");
10924   /* See if the next token is `volatile'.  */
10925   if (cp_parser_allow_gnu_extensions_p (parser)
10926       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
10927     {
10928       /* Remember that we saw the `volatile' keyword.  */
10929       volatile_p = true;
10930       /* Consume the token.  */
10931       cp_lexer_consume_token (parser->lexer);
10932     }
10933   /* Look for the opening `('.  */
10934   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
10935     return;
10936   /* Look for the string.  */
10937   string = cp_parser_string_literal (parser, false, false);
10938   if (string == error_mark_node)
10939     {
10940       cp_parser_skip_to_closing_parenthesis (parser, true, false,
10941                                              /*consume_paren=*/true);
10942       return;
10943     }
10944
10945   /* If we're allowing GNU extensions, check for the extended assembly
10946      syntax.  Unfortunately, the `:' tokens need not be separated by
10947      a space in C, and so, for compatibility, we tolerate that here
10948      too.  Doing that means that we have to treat the `::' operator as
10949      two `:' tokens.  */
10950   if (cp_parser_allow_gnu_extensions_p (parser)
10951       && parser->in_function_body
10952       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
10953           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
10954     {
10955       bool inputs_p = false;
10956       bool clobbers_p = false;
10957
10958       /* The extended syntax was used.  */
10959       extended_p = true;
10960
10961       /* Look for outputs.  */
10962       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10963         {
10964           /* Consume the `:'.  */
10965           cp_lexer_consume_token (parser->lexer);
10966           /* Parse the output-operands.  */
10967           if (cp_lexer_next_token_is_not (parser->lexer,
10968                                           CPP_COLON)
10969               && cp_lexer_next_token_is_not (parser->lexer,
10970                                              CPP_SCOPE)
10971               && cp_lexer_next_token_is_not (parser->lexer,
10972                                              CPP_CLOSE_PAREN))
10973             outputs = cp_parser_asm_operand_list (parser);
10974         }
10975       /* If the next token is `::', there are no outputs, and the
10976          next token is the beginning of the inputs.  */
10977       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10978         /* The inputs are coming next.  */
10979         inputs_p = true;
10980
10981       /* Look for inputs.  */
10982       if (inputs_p
10983           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10984         {
10985           /* Consume the `:' or `::'.  */
10986           cp_lexer_consume_token (parser->lexer);
10987           /* Parse the output-operands.  */
10988           if (cp_lexer_next_token_is_not (parser->lexer,
10989                                           CPP_COLON)
10990               && cp_lexer_next_token_is_not (parser->lexer,
10991                                              CPP_CLOSE_PAREN))
10992             inputs = cp_parser_asm_operand_list (parser);
10993         }
10994       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10995         /* The clobbers are coming next.  */
10996         clobbers_p = true;
10997
10998       /* Look for clobbers.  */
10999       if (clobbers_p
11000           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11001         {
11002           /* Consume the `:' or `::'.  */
11003           cp_lexer_consume_token (parser->lexer);
11004           /* Parse the clobbers.  */
11005           if (cp_lexer_next_token_is_not (parser->lexer,
11006                                           CPP_CLOSE_PAREN))
11007             clobbers = cp_parser_asm_clobber_list (parser);
11008         }
11009     }
11010   /* Look for the closing `)'.  */
11011   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11012     cp_parser_skip_to_closing_parenthesis (parser, true, false,
11013                                            /*consume_paren=*/true);
11014   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
11015
11016   /* Create the ASM_EXPR.  */
11017   if (parser->in_function_body)
11018     {
11019       asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
11020                                   inputs, clobbers);
11021       /* If the extended syntax was not used, mark the ASM_EXPR.  */
11022       if (!extended_p)
11023         {
11024           tree temp = asm_stmt;
11025           if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
11026             temp = TREE_OPERAND (temp, 0);
11027
11028           ASM_INPUT_P (temp) = 1;
11029         }
11030     }
11031   else
11032     cgraph_add_asm_node (string);
11033 }
11034
11035 /* Declarators [gram.dcl.decl] */
11036
11037 /* Parse an init-declarator.
11038
11039    init-declarator:
11040      declarator initializer [opt]
11041
11042    GNU Extension:
11043
11044    init-declarator:
11045      declarator asm-specification [opt] attributes [opt] initializer [opt]
11046
11047    function-definition:
11048      decl-specifier-seq [opt] declarator ctor-initializer [opt]
11049        function-body
11050      decl-specifier-seq [opt] declarator function-try-block
11051
11052    GNU Extension:
11053
11054    function-definition:
11055      __extension__ function-definition
11056
11057    The DECL_SPECIFIERS apply to this declarator.  Returns a
11058    representation of the entity declared.  If MEMBER_P is TRUE, then
11059    this declarator appears in a class scope.  The new DECL created by
11060    this declarator is returned.
11061
11062    The CHECKS are access checks that should be performed once we know
11063    what entity is being declared (and, therefore, what classes have
11064    befriended it).
11065
11066    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
11067    for a function-definition here as well.  If the declarator is a
11068    declarator for a function-definition, *FUNCTION_DEFINITION_P will
11069    be TRUE upon return.  By that point, the function-definition will
11070    have been completely parsed.
11071
11072    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
11073    is FALSE.  */
11074
11075 static tree
11076 cp_parser_init_declarator (cp_parser* parser,
11077                            cp_decl_specifier_seq *decl_specifiers,
11078                            VEC (deferred_access_check,gc)* checks,
11079                            bool function_definition_allowed_p,
11080                            bool member_p,
11081                            int declares_class_or_enum,
11082                            bool* function_definition_p)
11083 {
11084   cp_token *token;
11085   cp_declarator *declarator;
11086   tree prefix_attributes;
11087   tree attributes;
11088   tree asm_specification;
11089   tree initializer;
11090   tree decl = NULL_TREE;
11091   tree scope;
11092   bool is_initialized;
11093   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
11094      initialized with "= ..", CPP_OPEN_PAREN if initialized with
11095      "(...)".  */
11096   enum cpp_ttype initialization_kind;
11097   bool is_parenthesized_init = false;
11098   bool is_non_constant_init;
11099   int ctor_dtor_or_conv_p;
11100   bool friend_p;
11101   tree pushed_scope = NULL;
11102
11103   /* Gather the attributes that were provided with the
11104      decl-specifiers.  */
11105   prefix_attributes = decl_specifiers->attributes;
11106
11107   /* Assume that this is not the declarator for a function
11108      definition.  */
11109   if (function_definition_p)
11110     *function_definition_p = false;
11111
11112   /* Defer access checks while parsing the declarator; we cannot know
11113      what names are accessible until we know what is being
11114      declared.  */
11115   resume_deferring_access_checks ();
11116
11117   /* Parse the declarator.  */
11118   declarator
11119     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
11120                             &ctor_dtor_or_conv_p,
11121                             /*parenthesized_p=*/NULL,
11122                             /*member_p=*/false);
11123   /* Gather up the deferred checks.  */
11124   stop_deferring_access_checks ();
11125
11126   /* If the DECLARATOR was erroneous, there's no need to go
11127      further.  */
11128   if (declarator == cp_error_declarator)
11129     return error_mark_node;
11130
11131   /* Check that the number of template-parameter-lists is OK.  */
11132   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
11133     return error_mark_node;
11134
11135   if (declares_class_or_enum & 2)
11136     cp_parser_check_for_definition_in_return_type (declarator,
11137                                                    decl_specifiers->type);
11138
11139   /* Figure out what scope the entity declared by the DECLARATOR is
11140      located in.  `grokdeclarator' sometimes changes the scope, so
11141      we compute it now.  */
11142   scope = get_scope_of_declarator (declarator);
11143
11144   /* If we're allowing GNU extensions, look for an asm-specification
11145      and attributes.  */
11146   if (cp_parser_allow_gnu_extensions_p (parser))
11147     {
11148       /* Look for an asm-specification.  */
11149       asm_specification = cp_parser_asm_specification_opt (parser);
11150       /* And attributes.  */
11151       attributes = cp_parser_attributes_opt (parser);
11152     }
11153   else
11154     {
11155       asm_specification = NULL_TREE;
11156       attributes = NULL_TREE;
11157     }
11158
11159   /* Peek at the next token.  */
11160   token = cp_lexer_peek_token (parser->lexer);
11161   /* Check to see if the token indicates the start of a
11162      function-definition.  */
11163   if (cp_parser_token_starts_function_definition_p (token))
11164     {
11165       if (!function_definition_allowed_p)
11166         {
11167           /* If a function-definition should not appear here, issue an
11168              error message.  */
11169           cp_parser_error (parser,
11170                            "a function-definition is not allowed here");
11171           return error_mark_node;
11172         }
11173       else
11174         {
11175           /* Neither attributes nor an asm-specification are allowed
11176              on a function-definition.  */
11177           if (asm_specification)
11178             error ("an asm-specification is not allowed on a function-definition");
11179           if (attributes)
11180             error ("attributes are not allowed on a function-definition");
11181           /* This is a function-definition.  */
11182           *function_definition_p = true;
11183
11184           /* Parse the function definition.  */
11185           if (member_p)
11186             decl = cp_parser_save_member_function_body (parser,
11187                                                         decl_specifiers,
11188                                                         declarator,
11189                                                         prefix_attributes);
11190           else
11191             decl
11192               = (cp_parser_function_definition_from_specifiers_and_declarator
11193                  (parser, decl_specifiers, prefix_attributes, declarator));
11194
11195           return decl;
11196         }
11197     }
11198
11199   /* [dcl.dcl]
11200
11201      Only in function declarations for constructors, destructors, and
11202      type conversions can the decl-specifier-seq be omitted.
11203
11204      We explicitly postpone this check past the point where we handle
11205      function-definitions because we tolerate function-definitions
11206      that are missing their return types in some modes.  */
11207   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
11208     {
11209       cp_parser_error (parser,
11210                        "expected constructor, destructor, or type conversion");
11211       return error_mark_node;
11212     }
11213
11214   /* An `=' or an `(' indicates an initializer.  */
11215   if (token->type == CPP_EQ
11216       || token->type == CPP_OPEN_PAREN)
11217     {
11218       is_initialized = true;
11219       initialization_kind = token->type;
11220     }
11221   else
11222     {
11223       /* If the init-declarator isn't initialized and isn't followed by a
11224          `,' or `;', it's not a valid init-declarator.  */
11225       if (token->type != CPP_COMMA
11226           && token->type != CPP_SEMICOLON)
11227         {
11228           cp_parser_error (parser, "expected initializer");
11229           return error_mark_node;
11230         }
11231       is_initialized = false;
11232       initialization_kind = CPP_EOF;
11233     }
11234
11235   /* Because start_decl has side-effects, we should only call it if we
11236      know we're going ahead.  By this point, we know that we cannot
11237      possibly be looking at any other construct.  */
11238   cp_parser_commit_to_tentative_parse (parser);
11239
11240   /* If the decl specifiers were bad, issue an error now that we're
11241      sure this was intended to be a declarator.  Then continue
11242      declaring the variable(s), as int, to try to cut down on further
11243      errors.  */
11244   if (decl_specifiers->any_specifiers_p
11245       && decl_specifiers->type == error_mark_node)
11246     {
11247       cp_parser_error (parser, "invalid type in declaration");
11248       decl_specifiers->type = integer_type_node;
11249     }
11250
11251   /* Check to see whether or not this declaration is a friend.  */
11252   friend_p = cp_parser_friend_p (decl_specifiers);
11253
11254   /* Enter the newly declared entry in the symbol table.  If we're
11255      processing a declaration in a class-specifier, we wait until
11256      after processing the initializer.  */
11257   if (!member_p)
11258     {
11259       if (parser->in_unbraced_linkage_specification_p)
11260         decl_specifiers->storage_class = sc_extern;
11261       decl = start_decl (declarator, decl_specifiers,
11262                          is_initialized, attributes, prefix_attributes,
11263                          &pushed_scope);
11264     }
11265   else if (scope)
11266     /* Enter the SCOPE.  That way unqualified names appearing in the
11267        initializer will be looked up in SCOPE.  */
11268     pushed_scope = push_scope (scope);
11269
11270   /* Perform deferred access control checks, now that we know in which
11271      SCOPE the declared entity resides.  */
11272   if (!member_p && decl)
11273     {
11274       tree saved_current_function_decl = NULL_TREE;
11275
11276       /* If the entity being declared is a function, pretend that we
11277          are in its scope.  If it is a `friend', it may have access to
11278          things that would not otherwise be accessible.  */
11279       if (TREE_CODE (decl) == FUNCTION_DECL)
11280         {
11281           saved_current_function_decl = current_function_decl;
11282           current_function_decl = decl;
11283         }
11284
11285       /* Perform access checks for template parameters.  */
11286       cp_parser_perform_template_parameter_access_checks (checks);
11287
11288       /* Perform the access control checks for the declarator and the
11289          the decl-specifiers.  */
11290       perform_deferred_access_checks ();
11291
11292       /* Restore the saved value.  */
11293       if (TREE_CODE (decl) == FUNCTION_DECL)
11294         current_function_decl = saved_current_function_decl;
11295     }
11296
11297   /* Parse the initializer.  */
11298   initializer = NULL_TREE;
11299   is_parenthesized_init = false;
11300   is_non_constant_init = true;
11301   if (is_initialized)
11302     {
11303       if (function_declarator_p (declarator))
11304         {
11305            if (initialization_kind == CPP_EQ)
11306              initializer = cp_parser_pure_specifier (parser);
11307            else
11308              {
11309                /* If the declaration was erroneous, we don't really
11310                   know what the user intended, so just silently
11311                   consume the initializer.  */
11312                if (decl != error_mark_node)
11313                  error ("initializer provided for function");
11314                cp_parser_skip_to_closing_parenthesis (parser,
11315                                                       /*recovering=*/true,
11316                                                       /*or_comma=*/false,
11317                                                       /*consume_paren=*/true);
11318              }
11319         }
11320       else
11321         initializer = cp_parser_initializer (parser,
11322                                              &is_parenthesized_init,
11323                                              &is_non_constant_init);
11324     }
11325
11326   /* The old parser allows attributes to appear after a parenthesized
11327      initializer.  Mark Mitchell proposed removing this functionality
11328      on the GCC mailing lists on 2002-08-13.  This parser accepts the
11329      attributes -- but ignores them.  */
11330   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
11331     if (cp_parser_attributes_opt (parser))
11332       warning (OPT_Wattributes,
11333                "attributes after parenthesized initializer ignored");
11334
11335   /* For an in-class declaration, use `grokfield' to create the
11336      declaration.  */
11337   if (member_p)
11338     {
11339       if (pushed_scope)
11340         {
11341           pop_scope (pushed_scope);
11342           pushed_scope = false;
11343         }
11344       decl = grokfield (declarator, decl_specifiers,
11345                         initializer, !is_non_constant_init,
11346                         /*asmspec=*/NULL_TREE,
11347                         prefix_attributes);
11348       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
11349         cp_parser_save_default_args (parser, decl);
11350     }
11351
11352   /* Finish processing the declaration.  But, skip friend
11353      declarations.  */
11354   if (!friend_p && decl && decl != error_mark_node)
11355     {
11356       cp_finish_decl (decl,
11357                       initializer, !is_non_constant_init,
11358                       asm_specification,
11359                       /* If the initializer is in parentheses, then this is
11360                          a direct-initialization, which means that an
11361                          `explicit' constructor is OK.  Otherwise, an
11362                          `explicit' constructor cannot be used.  */
11363                       ((is_parenthesized_init || !is_initialized)
11364                      ? 0 : LOOKUP_ONLYCONVERTING));
11365     }
11366   if (!friend_p && pushed_scope)
11367     pop_scope (pushed_scope);
11368
11369   return decl;
11370 }
11371
11372 /* Parse a declarator.
11373
11374    declarator:
11375      direct-declarator
11376      ptr-operator declarator
11377
11378    abstract-declarator:
11379      ptr-operator abstract-declarator [opt]
11380      direct-abstract-declarator
11381
11382    GNU Extensions:
11383
11384    declarator:
11385      attributes [opt] direct-declarator
11386      attributes [opt] ptr-operator declarator
11387
11388    abstract-declarator:
11389      attributes [opt] ptr-operator abstract-declarator [opt]
11390      attributes [opt] direct-abstract-declarator
11391
11392    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
11393    detect constructor, destructor or conversion operators. It is set
11394    to -1 if the declarator is a name, and +1 if it is a
11395    function. Otherwise it is set to zero. Usually you just want to
11396    test for >0, but internally the negative value is used.
11397
11398    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
11399    a decl-specifier-seq unless it declares a constructor, destructor,
11400    or conversion.  It might seem that we could check this condition in
11401    semantic analysis, rather than parsing, but that makes it difficult
11402    to handle something like `f()'.  We want to notice that there are
11403    no decl-specifiers, and therefore realize that this is an
11404    expression, not a declaration.)
11405
11406    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
11407    the declarator is a direct-declarator of the form "(...)".
11408
11409    MEMBER_P is true iff this declarator is a member-declarator.  */
11410
11411 static cp_declarator *
11412 cp_parser_declarator (cp_parser* parser,
11413                       cp_parser_declarator_kind dcl_kind,
11414                       int* ctor_dtor_or_conv_p,
11415                       bool* parenthesized_p,
11416                       bool member_p)
11417 {
11418   cp_token *token;
11419   cp_declarator *declarator;
11420   enum tree_code code;
11421   cp_cv_quals cv_quals;
11422   tree class_type;
11423   tree attributes = NULL_TREE;
11424
11425   /* Assume this is not a constructor, destructor, or type-conversion
11426      operator.  */
11427   if (ctor_dtor_or_conv_p)
11428     *ctor_dtor_or_conv_p = 0;
11429
11430   if (cp_parser_allow_gnu_extensions_p (parser))
11431     attributes = cp_parser_attributes_opt (parser);
11432
11433   /* Peek at the next token.  */
11434   token = cp_lexer_peek_token (parser->lexer);
11435
11436   /* Check for the ptr-operator production.  */
11437   cp_parser_parse_tentatively (parser);
11438   /* Parse the ptr-operator.  */
11439   code = cp_parser_ptr_operator (parser,
11440                                  &class_type,
11441                                  &cv_quals);
11442   /* If that worked, then we have a ptr-operator.  */
11443   if (cp_parser_parse_definitely (parser))
11444     {
11445       /* If a ptr-operator was found, then this declarator was not
11446          parenthesized.  */
11447       if (parenthesized_p)
11448         *parenthesized_p = true;
11449       /* The dependent declarator is optional if we are parsing an
11450          abstract-declarator.  */
11451       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11452         cp_parser_parse_tentatively (parser);
11453
11454       /* Parse the dependent declarator.  */
11455       declarator = cp_parser_declarator (parser, dcl_kind,
11456                                          /*ctor_dtor_or_conv_p=*/NULL,
11457                                          /*parenthesized_p=*/NULL,
11458                                          /*member_p=*/false);
11459
11460       /* If we are parsing an abstract-declarator, we must handle the
11461          case where the dependent declarator is absent.  */
11462       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
11463           && !cp_parser_parse_definitely (parser))
11464         declarator = NULL;
11465
11466       /* Build the representation of the ptr-operator.  */
11467       if (class_type)
11468         declarator = make_ptrmem_declarator (cv_quals,
11469                                              class_type,
11470                                              declarator);
11471       else if (code == INDIRECT_REF)
11472         declarator = make_pointer_declarator (cv_quals, declarator);
11473       else
11474         declarator = make_reference_declarator (cv_quals, declarator);
11475     }
11476   /* Everything else is a direct-declarator.  */
11477   else
11478     {
11479       if (parenthesized_p)
11480         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
11481                                                    CPP_OPEN_PAREN);
11482       declarator = cp_parser_direct_declarator (parser, dcl_kind,
11483                                                 ctor_dtor_or_conv_p,
11484                                                 member_p);
11485     }
11486
11487   if (attributes && declarator && declarator != cp_error_declarator)
11488     declarator->attributes = attributes;
11489
11490   return declarator;
11491 }
11492
11493 /* Parse a direct-declarator or direct-abstract-declarator.
11494
11495    direct-declarator:
11496      declarator-id
11497      direct-declarator ( parameter-declaration-clause )
11498        cv-qualifier-seq [opt]
11499        exception-specification [opt]
11500      direct-declarator [ constant-expression [opt] ]
11501      ( declarator )
11502
11503    direct-abstract-declarator:
11504      direct-abstract-declarator [opt]
11505        ( parameter-declaration-clause )
11506        cv-qualifier-seq [opt]
11507        exception-specification [opt]
11508      direct-abstract-declarator [opt] [ constant-expression [opt] ]
11509      ( abstract-declarator )
11510
11511    Returns a representation of the declarator.  DCL_KIND is
11512    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
11513    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
11514    we are parsing a direct-declarator.  It is
11515    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
11516    of ambiguity we prefer an abstract declarator, as per
11517    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
11518    cp_parser_declarator.  */
11519
11520 static cp_declarator *
11521 cp_parser_direct_declarator (cp_parser* parser,
11522                              cp_parser_declarator_kind dcl_kind,
11523                              int* ctor_dtor_or_conv_p,
11524                              bool member_p)
11525 {
11526   cp_token *token;
11527   cp_declarator *declarator = NULL;
11528   tree scope = NULL_TREE;
11529   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11530   bool saved_in_declarator_p = parser->in_declarator_p;
11531   bool first = true;
11532   tree pushed_scope = NULL_TREE;
11533
11534   while (true)
11535     {
11536       /* Peek at the next token.  */
11537       token = cp_lexer_peek_token (parser->lexer);
11538       if (token->type == CPP_OPEN_PAREN)
11539         {
11540           /* This is either a parameter-declaration-clause, or a
11541              parenthesized declarator. When we know we are parsing a
11542              named declarator, it must be a parenthesized declarator
11543              if FIRST is true. For instance, `(int)' is a
11544              parameter-declaration-clause, with an omitted
11545              direct-abstract-declarator. But `((*))', is a
11546              parenthesized abstract declarator. Finally, when T is a
11547              template parameter `(T)' is a
11548              parameter-declaration-clause, and not a parenthesized
11549              named declarator.
11550
11551              We first try and parse a parameter-declaration-clause,
11552              and then try a nested declarator (if FIRST is true).
11553
11554              It is not an error for it not to be a
11555              parameter-declaration-clause, even when FIRST is
11556              false. Consider,
11557
11558                int i (int);
11559                int i (3);
11560
11561              The first is the declaration of a function while the
11562              second is a the definition of a variable, including its
11563              initializer.
11564
11565              Having seen only the parenthesis, we cannot know which of
11566              these two alternatives should be selected.  Even more
11567              complex are examples like:
11568
11569                int i (int (a));
11570                int i (int (3));
11571
11572              The former is a function-declaration; the latter is a
11573              variable initialization.
11574
11575              Thus again, we try a parameter-declaration-clause, and if
11576              that fails, we back out and return.  */
11577
11578           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11579             {
11580               cp_parameter_declarator *params;
11581               unsigned saved_num_template_parameter_lists;
11582
11583               /* In a member-declarator, the only valid interpretation
11584                  of a parenthesis is the start of a
11585                  parameter-declaration-clause.  (It is invalid to
11586                  initialize a static data member with a parenthesized
11587                  initializer; only the "=" form of initialization is
11588                  permitted.)  */
11589               if (!member_p)
11590                 cp_parser_parse_tentatively (parser);
11591
11592               /* Consume the `('.  */
11593               cp_lexer_consume_token (parser->lexer);
11594               if (first)
11595                 {
11596                   /* If this is going to be an abstract declarator, we're
11597                      in a declarator and we can't have default args.  */
11598                   parser->default_arg_ok_p = false;
11599                   parser->in_declarator_p = true;
11600                 }
11601
11602               /* Inside the function parameter list, surrounding
11603                  template-parameter-lists do not apply.  */
11604               saved_num_template_parameter_lists
11605                 = parser->num_template_parameter_lists;
11606               parser->num_template_parameter_lists = 0;
11607
11608               /* Parse the parameter-declaration-clause.  */
11609               params = cp_parser_parameter_declaration_clause (parser);
11610
11611               parser->num_template_parameter_lists
11612                 = saved_num_template_parameter_lists;
11613
11614               /* If all went well, parse the cv-qualifier-seq and the
11615                  exception-specification.  */
11616               if (member_p || cp_parser_parse_definitely (parser))
11617                 {
11618                   cp_cv_quals cv_quals;
11619                   tree exception_specification;
11620
11621                   if (ctor_dtor_or_conv_p)
11622                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
11623                   first = false;
11624                   /* Consume the `)'.  */
11625                   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
11626
11627                   /* Parse the cv-qualifier-seq.  */
11628                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11629                   /* And the exception-specification.  */
11630                   exception_specification
11631                     = cp_parser_exception_specification_opt (parser);
11632
11633                   /* Create the function-declarator.  */
11634                   declarator = make_call_declarator (declarator,
11635                                                      params,
11636                                                      cv_quals,
11637                                                      exception_specification);
11638                   /* Any subsequent parameter lists are to do with
11639                      return type, so are not those of the declared
11640                      function.  */
11641                   parser->default_arg_ok_p = false;
11642
11643                   /* Repeat the main loop.  */
11644                   continue;
11645                 }
11646             }
11647
11648           /* If this is the first, we can try a parenthesized
11649              declarator.  */
11650           if (first)
11651             {
11652               bool saved_in_type_id_in_expr_p;
11653
11654               parser->default_arg_ok_p = saved_default_arg_ok_p;
11655               parser->in_declarator_p = saved_in_declarator_p;
11656
11657               /* Consume the `('.  */
11658               cp_lexer_consume_token (parser->lexer);
11659               /* Parse the nested declarator.  */
11660               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
11661               parser->in_type_id_in_expr_p = true;
11662               declarator
11663                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
11664                                         /*parenthesized_p=*/NULL,
11665                                         member_p);
11666               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
11667               first = false;
11668               /* Expect a `)'.  */
11669               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11670                 declarator = cp_error_declarator;
11671               if (declarator == cp_error_declarator)
11672                 break;
11673
11674               goto handle_declarator;
11675             }
11676           /* Otherwise, we must be done.  */
11677           else
11678             break;
11679         }
11680       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11681                && token->type == CPP_OPEN_SQUARE)
11682         {
11683           /* Parse an array-declarator.  */
11684           tree bounds;
11685
11686           if (ctor_dtor_or_conv_p)
11687             *ctor_dtor_or_conv_p = 0;
11688
11689           first = false;
11690           parser->default_arg_ok_p = false;
11691           parser->in_declarator_p = true;
11692           /* Consume the `['.  */
11693           cp_lexer_consume_token (parser->lexer);
11694           /* Peek at the next token.  */
11695           token = cp_lexer_peek_token (parser->lexer);
11696           /* If the next token is `]', then there is no
11697              constant-expression.  */
11698           if (token->type != CPP_CLOSE_SQUARE)
11699             {
11700               bool non_constant_p;
11701
11702               bounds
11703                 = cp_parser_constant_expression (parser,
11704                                                  /*allow_non_constant=*/true,
11705                                                  &non_constant_p);
11706               if (!non_constant_p)
11707                 bounds = fold_non_dependent_expr (bounds);
11708               /* Normally, the array bound must be an integral constant
11709                  expression.  However, as an extension, we allow VLAs
11710                  in function scopes.  */
11711               else if (!parser->in_function_body)
11712                 {
11713                   error ("array bound is not an integer constant");
11714                   bounds = error_mark_node;
11715                 }
11716             }
11717           else
11718             bounds = NULL_TREE;
11719           /* Look for the closing `]'.  */
11720           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
11721             {
11722               declarator = cp_error_declarator;
11723               break;
11724             }
11725
11726           declarator = make_array_declarator (declarator, bounds);
11727         }
11728       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
11729         {
11730           tree qualifying_scope;
11731           tree unqualified_name;
11732           special_function_kind sfk;
11733           bool abstract_ok;
11734
11735           /* Parse a declarator-id */
11736           abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
11737           if (abstract_ok)
11738             cp_parser_parse_tentatively (parser);
11739           unqualified_name
11740             = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
11741           qualifying_scope = parser->scope;
11742           if (abstract_ok)
11743             {
11744               if (!cp_parser_parse_definitely (parser))
11745                 unqualified_name = error_mark_node;
11746               else if (unqualified_name
11747                        && (qualifying_scope
11748                            || (TREE_CODE (unqualified_name)
11749                                != IDENTIFIER_NODE)))
11750                 {
11751                   cp_parser_error (parser, "expected unqualified-id");
11752                   unqualified_name = error_mark_node;
11753                 }
11754             }
11755
11756           if (!unqualified_name)
11757             return NULL;
11758           if (unqualified_name == error_mark_node)
11759             {
11760               declarator = cp_error_declarator;
11761               break;
11762             }
11763
11764           if (qualifying_scope && at_namespace_scope_p ()
11765               && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
11766             {
11767               /* In the declaration of a member of a template class
11768                  outside of the class itself, the SCOPE will sometimes
11769                  be a TYPENAME_TYPE.  For example, given:
11770
11771                  template <typename T>
11772                  int S<T>::R::i = 3;
11773
11774                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
11775                  this context, we must resolve S<T>::R to an ordinary
11776                  type, rather than a typename type.
11777
11778                  The reason we normally avoid resolving TYPENAME_TYPEs
11779                  is that a specialization of `S' might render
11780                  `S<T>::R' not a type.  However, if `S' is
11781                  specialized, then this `i' will not be used, so there
11782                  is no harm in resolving the types here.  */
11783               tree type;
11784
11785               /* Resolve the TYPENAME_TYPE.  */
11786               type = resolve_typename_type (qualifying_scope,
11787                                             /*only_current_p=*/false);
11788               /* If that failed, the declarator is invalid.  */
11789               if (type == error_mark_node)
11790                 error ("%<%T::%D%> is not a type",
11791                        TYPE_CONTEXT (qualifying_scope),
11792                        TYPE_IDENTIFIER (qualifying_scope));
11793               qualifying_scope = type;
11794             }
11795
11796           sfk = sfk_none;
11797           if (unqualified_name)
11798             {
11799               tree class_type;
11800
11801               if (qualifying_scope
11802                   && CLASS_TYPE_P (qualifying_scope))
11803                 class_type = qualifying_scope;
11804               else
11805                 class_type = current_class_type;
11806
11807               if (TREE_CODE (unqualified_name) == TYPE_DECL)
11808                 {
11809                   tree name_type = TREE_TYPE (unqualified_name);
11810                   if (class_type && same_type_p (name_type, class_type))
11811                     {
11812                       if (qualifying_scope
11813                           && CLASSTYPE_USE_TEMPLATE (name_type))
11814                         {
11815                           error ("invalid use of constructor as a template");
11816                           inform ("use %<%T::%D%> instead of %<%T::%D%> to "
11817                                   "name the constructor in a qualified name",
11818                                   class_type,
11819                                   DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
11820                                   class_type, name_type);
11821                           declarator = cp_error_declarator;
11822                           break;
11823                         }
11824                       else
11825                         unqualified_name = constructor_name (class_type);
11826                     }
11827                   else
11828                     {
11829                       /* We do not attempt to print the declarator
11830                          here because we do not have enough
11831                          information about its original syntactic
11832                          form.  */
11833                       cp_parser_error (parser, "invalid declarator");
11834                       declarator = cp_error_declarator;
11835                       break;
11836                     }
11837                 }
11838
11839               if (class_type)
11840                 {
11841                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
11842                     sfk = sfk_destructor;
11843                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
11844                     sfk = sfk_conversion;
11845                   else if (/* There's no way to declare a constructor
11846                               for an anonymous type, even if the type
11847                               got a name for linkage purposes.  */
11848                            !TYPE_WAS_ANONYMOUS (class_type)
11849                            && constructor_name_p (unqualified_name,
11850                                                   class_type))
11851                     {
11852                       unqualified_name = constructor_name (class_type);
11853                       sfk = sfk_constructor;
11854                     }
11855
11856                   if (ctor_dtor_or_conv_p && sfk != sfk_none)
11857                     *ctor_dtor_or_conv_p = -1;
11858                 }
11859             }
11860           declarator = make_id_declarator (qualifying_scope,
11861                                            unqualified_name,
11862                                            sfk);
11863           declarator->id_loc = token->location;
11864
11865         handle_declarator:;
11866           scope = get_scope_of_declarator (declarator);
11867           if (scope)
11868             /* Any names that appear after the declarator-id for a
11869                member are looked up in the containing scope.  */
11870             pushed_scope = push_scope (scope);
11871           parser->in_declarator_p = true;
11872           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
11873               || (declarator && declarator->kind == cdk_id))
11874             /* Default args are only allowed on function
11875                declarations.  */
11876             parser->default_arg_ok_p = saved_default_arg_ok_p;
11877           else
11878             parser->default_arg_ok_p = false;
11879
11880           first = false;
11881         }
11882       /* We're done.  */
11883       else
11884         break;
11885     }
11886
11887   /* For an abstract declarator, we might wind up with nothing at this
11888      point.  That's an error; the declarator is not optional.  */
11889   if (!declarator)
11890     cp_parser_error (parser, "expected declarator");
11891
11892   /* If we entered a scope, we must exit it now.  */
11893   if (pushed_scope)
11894     pop_scope (pushed_scope);
11895
11896   parser->default_arg_ok_p = saved_default_arg_ok_p;
11897   parser->in_declarator_p = saved_in_declarator_p;
11898
11899   return declarator;
11900 }
11901
11902 /* Parse a ptr-operator.
11903
11904    ptr-operator:
11905      * cv-qualifier-seq [opt]
11906      &
11907      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
11908
11909    GNU Extension:
11910
11911    ptr-operator:
11912      & cv-qualifier-seq [opt]
11913
11914    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
11915    Returns ADDR_EXPR if a reference was used.  In the case of a
11916    pointer-to-member, *TYPE is filled in with the TYPE containing the
11917    member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
11918    TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
11919    ERROR_MARK if an error occurred.  */
11920
11921 static enum tree_code
11922 cp_parser_ptr_operator (cp_parser* parser,
11923                         tree* type,
11924                         cp_cv_quals *cv_quals)
11925 {
11926   enum tree_code code = ERROR_MARK;
11927   cp_token *token;
11928
11929   /* Assume that it's not a pointer-to-member.  */
11930   *type = NULL_TREE;
11931   /* And that there are no cv-qualifiers.  */
11932   *cv_quals = TYPE_UNQUALIFIED;
11933
11934   /* Peek at the next token.  */
11935   token = cp_lexer_peek_token (parser->lexer);
11936   /* If it's a `*' or `&' we have a pointer or reference.  */
11937   if (token->type == CPP_MULT || token->type == CPP_AND)
11938     {
11939       /* Remember which ptr-operator we were processing.  */
11940       code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
11941
11942       /* Consume the `*' or `&'.  */
11943       cp_lexer_consume_token (parser->lexer);
11944
11945       /* A `*' can be followed by a cv-qualifier-seq, and so can a
11946          `&', if we are allowing GNU extensions.  (The only qualifier
11947          that can legally appear after `&' is `restrict', but that is
11948          enforced during semantic analysis.  */
11949       if (code == INDIRECT_REF
11950           || cp_parser_allow_gnu_extensions_p (parser))
11951         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11952     }
11953   else
11954     {
11955       /* Try the pointer-to-member case.  */
11956       cp_parser_parse_tentatively (parser);
11957       /* Look for the optional `::' operator.  */
11958       cp_parser_global_scope_opt (parser,
11959                                   /*current_scope_valid_p=*/false);
11960       /* Look for the nested-name specifier.  */
11961       cp_parser_nested_name_specifier (parser,
11962                                        /*typename_keyword_p=*/false,
11963                                        /*check_dependency_p=*/true,
11964                                        /*type_p=*/false,
11965                                        /*is_declaration=*/false);
11966       /* If we found it, and the next token is a `*', then we are
11967          indeed looking at a pointer-to-member operator.  */
11968       if (!cp_parser_error_occurred (parser)
11969           && cp_parser_require (parser, CPP_MULT, "`*'"))
11970         {
11971           /* Indicate that the `*' operator was used.  */
11972           code = INDIRECT_REF;
11973
11974           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
11975             error ("%qD is a namespace", parser->scope);
11976           else
11977             {
11978               /* The type of which the member is a member is given by the
11979                  current SCOPE.  */
11980               *type = parser->scope;
11981               /* The next name will not be qualified.  */
11982               parser->scope = NULL_TREE;
11983               parser->qualifying_scope = NULL_TREE;
11984               parser->object_scope = NULL_TREE;
11985               /* Look for the optional cv-qualifier-seq.  */
11986               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11987             }
11988         }
11989       /* If that didn't work we don't have a ptr-operator.  */
11990       if (!cp_parser_parse_definitely (parser))
11991         cp_parser_error (parser, "expected ptr-operator");
11992     }
11993
11994   return code;
11995 }
11996
11997 /* Parse an (optional) cv-qualifier-seq.
11998
11999    cv-qualifier-seq:
12000      cv-qualifier cv-qualifier-seq [opt]
12001
12002    cv-qualifier:
12003      const
12004      volatile
12005
12006    GNU Extension:
12007
12008    cv-qualifier:
12009      __restrict__
12010
12011    Returns a bitmask representing the cv-qualifiers.  */
12012
12013 static cp_cv_quals
12014 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
12015 {
12016   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
12017
12018   while (true)
12019     {
12020       cp_token *token;
12021       cp_cv_quals cv_qualifier;
12022
12023       /* Peek at the next token.  */
12024       token = cp_lexer_peek_token (parser->lexer);
12025       /* See if it's a cv-qualifier.  */
12026       switch (token->keyword)
12027         {
12028         case RID_CONST:
12029           cv_qualifier = TYPE_QUAL_CONST;
12030           break;
12031
12032         case RID_VOLATILE:
12033           cv_qualifier = TYPE_QUAL_VOLATILE;
12034           break;
12035
12036         case RID_RESTRICT:
12037           cv_qualifier = TYPE_QUAL_RESTRICT;
12038           break;
12039
12040         default:
12041           cv_qualifier = TYPE_UNQUALIFIED;
12042           break;
12043         }
12044
12045       if (!cv_qualifier)
12046         break;
12047
12048       if (cv_quals & cv_qualifier)
12049         {
12050           error ("duplicate cv-qualifier");
12051           cp_lexer_purge_token (parser->lexer);
12052         }
12053       else
12054         {
12055           cp_lexer_consume_token (parser->lexer);
12056           cv_quals |= cv_qualifier;
12057         }
12058     }
12059
12060   return cv_quals;
12061 }
12062
12063 /* Parse a declarator-id.
12064
12065    declarator-id:
12066      id-expression
12067      :: [opt] nested-name-specifier [opt] type-name
12068
12069    In the `id-expression' case, the value returned is as for
12070    cp_parser_id_expression if the id-expression was an unqualified-id.
12071    If the id-expression was a qualified-id, then a SCOPE_REF is
12072    returned.  The first operand is the scope (either a NAMESPACE_DECL
12073    or TREE_TYPE), but the second is still just a representation of an
12074    unqualified-id.  */
12075
12076 static tree
12077 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
12078 {
12079   tree id;
12080   /* The expression must be an id-expression.  Assume that qualified
12081      names are the names of types so that:
12082
12083        template <class T>
12084        int S<T>::R::i = 3;
12085
12086      will work; we must treat `S<T>::R' as the name of a type.
12087      Similarly, assume that qualified names are templates, where
12088      required, so that:
12089
12090        template <class T>
12091        int S<T>::R<T>::i = 3;
12092
12093      will work, too.  */
12094   id = cp_parser_id_expression (parser,
12095                                 /*template_keyword_p=*/false,
12096                                 /*check_dependency_p=*/false,
12097                                 /*template_p=*/NULL,
12098                                 /*declarator_p=*/true,
12099                                 optional_p);
12100   if (id && BASELINK_P (id))
12101     id = BASELINK_FUNCTIONS (id);
12102   return id;
12103 }
12104
12105 /* Parse a type-id.
12106
12107    type-id:
12108      type-specifier-seq abstract-declarator [opt]
12109
12110    Returns the TYPE specified.  */
12111
12112 static tree
12113 cp_parser_type_id (cp_parser* parser)
12114 {
12115   cp_decl_specifier_seq type_specifier_seq;
12116   cp_declarator *abstract_declarator;
12117
12118   /* Parse the type-specifier-seq.  */
12119   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
12120                                 &type_specifier_seq);
12121   if (type_specifier_seq.type == error_mark_node)
12122     return error_mark_node;
12123
12124   /* There might or might not be an abstract declarator.  */
12125   cp_parser_parse_tentatively (parser);
12126   /* Look for the declarator.  */
12127   abstract_declarator
12128     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
12129                             /*parenthesized_p=*/NULL,
12130                             /*member_p=*/false);
12131   /* Check to see if there really was a declarator.  */
12132   if (!cp_parser_parse_definitely (parser))
12133     abstract_declarator = NULL;
12134
12135   return groktypename (&type_specifier_seq, abstract_declarator);
12136 }
12137
12138 /* Parse a type-specifier-seq.
12139
12140    type-specifier-seq:
12141      type-specifier type-specifier-seq [opt]
12142
12143    GNU extension:
12144
12145    type-specifier-seq:
12146      attributes type-specifier-seq [opt]
12147
12148    If IS_CONDITION is true, we are at the start of a "condition",
12149    e.g., we've just seen "if (".
12150
12151    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
12152
12153 static void
12154 cp_parser_type_specifier_seq (cp_parser* parser,
12155                               bool is_condition,
12156                               cp_decl_specifier_seq *type_specifier_seq)
12157 {
12158   bool seen_type_specifier = false;
12159   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
12160
12161   /* Clear the TYPE_SPECIFIER_SEQ.  */
12162   clear_decl_specs (type_specifier_seq);
12163
12164   /* Parse the type-specifiers and attributes.  */
12165   while (true)
12166     {
12167       tree type_specifier;
12168       bool is_cv_qualifier;
12169
12170       /* Check for attributes first.  */
12171       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
12172         {
12173           type_specifier_seq->attributes =
12174             chainon (type_specifier_seq->attributes,
12175                      cp_parser_attributes_opt (parser));
12176           continue;
12177         }
12178
12179       /* Look for the type-specifier.  */
12180       type_specifier = cp_parser_type_specifier (parser,
12181                                                  flags,
12182                                                  type_specifier_seq,
12183                                                  /*is_declaration=*/false,
12184                                                  NULL,
12185                                                  &is_cv_qualifier);
12186       if (!type_specifier)
12187         {
12188           /* If the first type-specifier could not be found, this is not a
12189              type-specifier-seq at all.  */
12190           if (!seen_type_specifier)
12191             {
12192               cp_parser_error (parser, "expected type-specifier");
12193               type_specifier_seq->type = error_mark_node;
12194               return;
12195             }
12196           /* If subsequent type-specifiers could not be found, the
12197              type-specifier-seq is complete.  */
12198           break;
12199         }
12200
12201       seen_type_specifier = true;
12202       /* The standard says that a condition can be:
12203
12204             type-specifier-seq declarator = assignment-expression
12205
12206          However, given:
12207
12208            struct S {};
12209            if (int S = ...)
12210
12211          we should treat the "S" as a declarator, not as a
12212          type-specifier.  The standard doesn't say that explicitly for
12213          type-specifier-seq, but it does say that for
12214          decl-specifier-seq in an ordinary declaration.  Perhaps it
12215          would be clearer just to allow a decl-specifier-seq here, and
12216          then add a semantic restriction that if any decl-specifiers
12217          that are not type-specifiers appear, the program is invalid.  */
12218       if (is_condition && !is_cv_qualifier)
12219         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
12220     }
12221
12222   cp_parser_check_decl_spec (type_specifier_seq);
12223 }
12224
12225 /* Parse a parameter-declaration-clause.
12226
12227    parameter-declaration-clause:
12228      parameter-declaration-list [opt] ... [opt]
12229      parameter-declaration-list , ...
12230
12231    Returns a representation for the parameter declarations.  A return
12232    value of NULL indicates a parameter-declaration-clause consisting
12233    only of an ellipsis.  */
12234
12235 static cp_parameter_declarator *
12236 cp_parser_parameter_declaration_clause (cp_parser* parser)
12237 {
12238   cp_parameter_declarator *parameters;
12239   cp_token *token;
12240   bool ellipsis_p;
12241   bool is_error;
12242
12243   /* Peek at the next token.  */
12244   token = cp_lexer_peek_token (parser->lexer);
12245   /* Check for trivial parameter-declaration-clauses.  */
12246   if (token->type == CPP_ELLIPSIS)
12247     {
12248       /* Consume the `...' token.  */
12249       cp_lexer_consume_token (parser->lexer);
12250       return NULL;
12251     }
12252   else if (token->type == CPP_CLOSE_PAREN)
12253     /* There are no parameters.  */
12254     {
12255 #ifndef NO_IMPLICIT_EXTERN_C
12256       if (in_system_header && current_class_type == NULL
12257           && current_lang_name == lang_name_c)
12258         return NULL;
12259       else
12260 #endif
12261         return no_parameters;
12262     }
12263   /* Check for `(void)', too, which is a special case.  */
12264   else if (token->keyword == RID_VOID
12265            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
12266                == CPP_CLOSE_PAREN))
12267     {
12268       /* Consume the `void' token.  */
12269       cp_lexer_consume_token (parser->lexer);
12270       /* There are no parameters.  */
12271       return no_parameters;
12272     }
12273
12274   /* Parse the parameter-declaration-list.  */
12275   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
12276   /* If a parse error occurred while parsing the
12277      parameter-declaration-list, then the entire
12278      parameter-declaration-clause is erroneous.  */
12279   if (is_error)
12280     return NULL;
12281
12282   /* Peek at the next token.  */
12283   token = cp_lexer_peek_token (parser->lexer);
12284   /* If it's a `,', the clause should terminate with an ellipsis.  */
12285   if (token->type == CPP_COMMA)
12286     {
12287       /* Consume the `,'.  */
12288       cp_lexer_consume_token (parser->lexer);
12289       /* Expect an ellipsis.  */
12290       ellipsis_p
12291         = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
12292     }
12293   /* It might also be `...' if the optional trailing `,' was
12294      omitted.  */
12295   else if (token->type == CPP_ELLIPSIS)
12296     {
12297       /* Consume the `...' token.  */
12298       cp_lexer_consume_token (parser->lexer);
12299       /* And remember that we saw it.  */
12300       ellipsis_p = true;
12301     }
12302   else
12303     ellipsis_p = false;
12304
12305   /* Finish the parameter list.  */
12306   if (parameters && ellipsis_p)
12307     parameters->ellipsis_p = true;
12308
12309   return parameters;
12310 }
12311
12312 /* Parse a parameter-declaration-list.
12313
12314    parameter-declaration-list:
12315      parameter-declaration
12316      parameter-declaration-list , parameter-declaration
12317
12318    Returns a representation of the parameter-declaration-list, as for
12319    cp_parser_parameter_declaration_clause.  However, the
12320    `void_list_node' is never appended to the list.  Upon return,
12321    *IS_ERROR will be true iff an error occurred.  */
12322
12323 static cp_parameter_declarator *
12324 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
12325 {
12326   cp_parameter_declarator *parameters = NULL;
12327   cp_parameter_declarator **tail = &parameters;
12328   bool saved_in_unbraced_linkage_specification_p;
12329
12330   /* Assume all will go well.  */
12331   *is_error = false;
12332   /* The special considerations that apply to a function within an
12333      unbraced linkage specifications do not apply to the parameters
12334      to the function.  */
12335   saved_in_unbraced_linkage_specification_p 
12336     = parser->in_unbraced_linkage_specification_p;
12337   parser->in_unbraced_linkage_specification_p = false;
12338
12339   /* Look for more parameters.  */
12340   while (true)
12341     {
12342       cp_parameter_declarator *parameter;
12343       bool parenthesized_p;
12344       /* Parse the parameter.  */
12345       parameter
12346         = cp_parser_parameter_declaration (parser,
12347                                            /*template_parm_p=*/false,
12348                                            &parenthesized_p);
12349
12350       /* If a parse error occurred parsing the parameter declaration,
12351          then the entire parameter-declaration-list is erroneous.  */
12352       if (!parameter)
12353         {
12354           *is_error = true;
12355           parameters = NULL;
12356           break;
12357         }
12358       /* Add the new parameter to the list.  */
12359       *tail = parameter;
12360       tail = &parameter->next;
12361
12362       /* Peek at the next token.  */
12363       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
12364           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
12365           /* These are for Objective-C++ */
12366           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
12367           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
12368         /* The parameter-declaration-list is complete.  */
12369         break;
12370       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12371         {
12372           cp_token *token;
12373
12374           /* Peek at the next token.  */
12375           token = cp_lexer_peek_nth_token (parser->lexer, 2);
12376           /* If it's an ellipsis, then the list is complete.  */
12377           if (token->type == CPP_ELLIPSIS)
12378             break;
12379           /* Otherwise, there must be more parameters.  Consume the
12380              `,'.  */
12381           cp_lexer_consume_token (parser->lexer);
12382           /* When parsing something like:
12383
12384                 int i(float f, double d)
12385
12386              we can tell after seeing the declaration for "f" that we
12387              are not looking at an initialization of a variable "i",
12388              but rather at the declaration of a function "i".
12389
12390              Due to the fact that the parsing of template arguments
12391              (as specified to a template-id) requires backtracking we
12392              cannot use this technique when inside a template argument
12393              list.  */
12394           if (!parser->in_template_argument_list_p
12395               && !parser->in_type_id_in_expr_p
12396               && cp_parser_uncommitted_to_tentative_parse_p (parser)
12397               /* However, a parameter-declaration of the form
12398                  "foat(f)" (which is a valid declaration of a
12399                  parameter "f") can also be interpreted as an
12400                  expression (the conversion of "f" to "float").  */
12401               && !parenthesized_p)
12402             cp_parser_commit_to_tentative_parse (parser);
12403         }
12404       else
12405         {
12406           cp_parser_error (parser, "expected %<,%> or %<...%>");
12407           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
12408             cp_parser_skip_to_closing_parenthesis (parser,
12409                                                    /*recovering=*/true,
12410                                                    /*or_comma=*/false,
12411                                                    /*consume_paren=*/false);
12412           break;
12413         }
12414     }
12415
12416   parser->in_unbraced_linkage_specification_p
12417     = saved_in_unbraced_linkage_specification_p;
12418
12419   return parameters;
12420 }
12421
12422 /* Parse a parameter declaration.
12423
12424    parameter-declaration:
12425      decl-specifier-seq declarator
12426      decl-specifier-seq declarator = assignment-expression
12427      decl-specifier-seq abstract-declarator [opt]
12428      decl-specifier-seq abstract-declarator [opt] = assignment-expression
12429
12430    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
12431    declares a template parameter.  (In that case, a non-nested `>'
12432    token encountered during the parsing of the assignment-expression
12433    is not interpreted as a greater-than operator.)
12434
12435    Returns a representation of the parameter, or NULL if an error
12436    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
12437    true iff the declarator is of the form "(p)".  */
12438
12439 static cp_parameter_declarator *
12440 cp_parser_parameter_declaration (cp_parser *parser,
12441                                  bool template_parm_p,
12442                                  bool *parenthesized_p)
12443 {
12444   int declares_class_or_enum;
12445   bool greater_than_is_operator_p;
12446   cp_decl_specifier_seq decl_specifiers;
12447   cp_declarator *declarator;
12448   tree default_argument;
12449   cp_token *token;
12450   const char *saved_message;
12451
12452   /* In a template parameter, `>' is not an operator.
12453
12454      [temp.param]
12455
12456      When parsing a default template-argument for a non-type
12457      template-parameter, the first non-nested `>' is taken as the end
12458      of the template parameter-list rather than a greater-than
12459      operator.  */
12460   greater_than_is_operator_p = !template_parm_p;
12461
12462   /* Type definitions may not appear in parameter types.  */
12463   saved_message = parser->type_definition_forbidden_message;
12464   parser->type_definition_forbidden_message
12465     = "types may not be defined in parameter types";
12466
12467   /* Parse the declaration-specifiers.  */
12468   cp_parser_decl_specifier_seq (parser,
12469                                 CP_PARSER_FLAGS_NONE,
12470                                 &decl_specifiers,
12471                                 &declares_class_or_enum);
12472   /* If an error occurred, there's no reason to attempt to parse the
12473      rest of the declaration.  */
12474   if (cp_parser_error_occurred (parser))
12475     {
12476       parser->type_definition_forbidden_message = saved_message;
12477       return NULL;
12478     }
12479
12480   /* Peek at the next token.  */
12481   token = cp_lexer_peek_token (parser->lexer);
12482   /* If the next token is a `)', `,', `=', `>', or `...', then there
12483      is no declarator.  */
12484   if (token->type == CPP_CLOSE_PAREN
12485       || token->type == CPP_COMMA
12486       || token->type == CPP_EQ
12487       || token->type == CPP_ELLIPSIS
12488       || token->type == CPP_GREATER)
12489     {
12490       declarator = NULL;
12491       if (parenthesized_p)
12492         *parenthesized_p = false;
12493     }
12494   /* Otherwise, there should be a declarator.  */
12495   else
12496     {
12497       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
12498       parser->default_arg_ok_p = false;
12499
12500       /* After seeing a decl-specifier-seq, if the next token is not a
12501          "(", there is no possibility that the code is a valid
12502          expression.  Therefore, if parsing tentatively, we commit at
12503          this point.  */
12504       if (!parser->in_template_argument_list_p
12505           /* In an expression context, having seen:
12506
12507                (int((char ...
12508
12509              we cannot be sure whether we are looking at a
12510              function-type (taking a "char" as a parameter) or a cast
12511              of some object of type "char" to "int".  */
12512           && !parser->in_type_id_in_expr_p
12513           && cp_parser_uncommitted_to_tentative_parse_p (parser)
12514           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
12515         cp_parser_commit_to_tentative_parse (parser);
12516       /* Parse the declarator.  */
12517       declarator = cp_parser_declarator (parser,
12518                                          CP_PARSER_DECLARATOR_EITHER,
12519                                          /*ctor_dtor_or_conv_p=*/NULL,
12520                                          parenthesized_p,
12521                                          /*member_p=*/false);
12522       parser->default_arg_ok_p = saved_default_arg_ok_p;
12523       /* After the declarator, allow more attributes.  */
12524       decl_specifiers.attributes
12525         = chainon (decl_specifiers.attributes,
12526                    cp_parser_attributes_opt (parser));
12527     }
12528
12529   /* The restriction on defining new types applies only to the type
12530      of the parameter, not to the default argument.  */
12531   parser->type_definition_forbidden_message = saved_message;
12532
12533   /* If the next token is `=', then process a default argument.  */
12534   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12535     {
12536       bool saved_greater_than_is_operator_p;
12537       /* Consume the `='.  */
12538       cp_lexer_consume_token (parser->lexer);
12539
12540       /* If we are defining a class, then the tokens that make up the
12541          default argument must be saved and processed later.  */
12542       if (!template_parm_p && at_class_scope_p ()
12543           && TYPE_BEING_DEFINED (current_class_type))
12544         {
12545           unsigned depth = 0;
12546           cp_token *first_token;
12547           cp_token *token;
12548
12549           /* Add tokens until we have processed the entire default
12550              argument.  We add the range [first_token, token).  */
12551           first_token = cp_lexer_peek_token (parser->lexer);
12552           while (true)
12553             {
12554               bool done = false;
12555
12556               /* Peek at the next token.  */
12557               token = cp_lexer_peek_token (parser->lexer);
12558               /* What we do depends on what token we have.  */
12559               switch (token->type)
12560                 {
12561                   /* In valid code, a default argument must be
12562                      immediately followed by a `,' `)', or `...'.  */
12563                 case CPP_COMMA:
12564                 case CPP_CLOSE_PAREN:
12565                 case CPP_ELLIPSIS:
12566                   /* If we run into a non-nested `;', `}', or `]',
12567                      then the code is invalid -- but the default
12568                      argument is certainly over.  */
12569                 case CPP_SEMICOLON:
12570                 case CPP_CLOSE_BRACE:
12571                 case CPP_CLOSE_SQUARE:
12572                   if (depth == 0)
12573                     done = true;
12574                   /* Update DEPTH, if necessary.  */
12575                   else if (token->type == CPP_CLOSE_PAREN
12576                            || token->type == CPP_CLOSE_BRACE
12577                            || token->type == CPP_CLOSE_SQUARE)
12578                     --depth;
12579                   break;
12580
12581                 case CPP_OPEN_PAREN:
12582                 case CPP_OPEN_SQUARE:
12583                 case CPP_OPEN_BRACE:
12584                   ++depth;
12585                   break;
12586
12587                 case CPP_GREATER:
12588                   /* If we see a non-nested `>', and `>' is not an
12589                      operator, then it marks the end of the default
12590                      argument.  */
12591                   if (!depth && !greater_than_is_operator_p)
12592                     done = true;
12593                   break;
12594
12595                   /* If we run out of tokens, issue an error message.  */
12596                 case CPP_EOF:
12597                 case CPP_PRAGMA_EOL:
12598                   error ("file ends in default argument");
12599                   done = true;
12600                   break;
12601
12602                 case CPP_NAME:
12603                 case CPP_SCOPE:
12604                   /* In these cases, we should look for template-ids.
12605                      For example, if the default argument is
12606                      `X<int, double>()', we need to do name lookup to
12607                      figure out whether or not `X' is a template; if
12608                      so, the `,' does not end the default argument.
12609
12610                      That is not yet done.  */
12611                   break;
12612
12613                 default:
12614                   break;
12615                 }
12616
12617               /* If we've reached the end, stop.  */
12618               if (done)
12619                 break;
12620
12621               /* Add the token to the token block.  */
12622               token = cp_lexer_consume_token (parser->lexer);
12623             }
12624
12625           /* Create a DEFAULT_ARG to represented the unparsed default
12626              argument.  */
12627           default_argument = make_node (DEFAULT_ARG);
12628           DEFARG_TOKENS (default_argument)
12629             = cp_token_cache_new (first_token, token);
12630           DEFARG_INSTANTIATIONS (default_argument) = NULL;
12631         }
12632       /* Outside of a class definition, we can just parse the
12633          assignment-expression.  */
12634       else
12635         {
12636           bool saved_local_variables_forbidden_p;
12637
12638           /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
12639              set correctly.  */
12640           saved_greater_than_is_operator_p
12641             = parser->greater_than_is_operator_p;
12642           parser->greater_than_is_operator_p = greater_than_is_operator_p;
12643           /* Local variable names (and the `this' keyword) may not
12644              appear in a default argument.  */
12645           saved_local_variables_forbidden_p
12646             = parser->local_variables_forbidden_p;
12647           parser->local_variables_forbidden_p = true;
12648           /* The default argument expression may cause implicitly
12649              defined member functions to be synthesized, which will
12650              result in garbage collection.  We must treat this
12651              situation as if we were within the body of function so as
12652              to avoid collecting live data on the stack.  */
12653           ++function_depth;
12654           /* Parse the assignment-expression.  */
12655           if (template_parm_p)
12656             push_deferring_access_checks (dk_no_deferred);
12657           default_argument
12658             = cp_parser_assignment_expression (parser, /*cast_p=*/false);
12659           if (template_parm_p)
12660             pop_deferring_access_checks ();
12661           /* Restore saved state.  */
12662           --function_depth;
12663           parser->greater_than_is_operator_p
12664             = saved_greater_than_is_operator_p;
12665           parser->local_variables_forbidden_p
12666             = saved_local_variables_forbidden_p;
12667         }
12668       if (!parser->default_arg_ok_p)
12669         {
12670           if (!flag_pedantic_errors)
12671             warning (0, "deprecated use of default argument for parameter of non-function");
12672           else
12673             {
12674               error ("default arguments are only permitted for function parameters");
12675               default_argument = NULL_TREE;
12676             }
12677         }
12678     }
12679   else
12680     default_argument = NULL_TREE;
12681
12682   return make_parameter_declarator (&decl_specifiers,
12683                                     declarator,
12684                                     default_argument);
12685 }
12686
12687 /* Parse a function-body.
12688
12689    function-body:
12690      compound_statement  */
12691
12692 static void
12693 cp_parser_function_body (cp_parser *parser)
12694 {
12695   cp_parser_compound_statement (parser, NULL, false);
12696 }
12697
12698 /* Parse a ctor-initializer-opt followed by a function-body.  Return
12699    true if a ctor-initializer was present.  */
12700
12701 static bool
12702 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
12703 {
12704   tree body;
12705   bool ctor_initializer_p;
12706
12707   /* Begin the function body.  */
12708   body = begin_function_body ();
12709   /* Parse the optional ctor-initializer.  */
12710   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
12711   /* Parse the function-body.  */
12712   cp_parser_function_body (parser);
12713   /* Finish the function body.  */
12714   finish_function_body (body);
12715
12716   return ctor_initializer_p;
12717 }
12718
12719 /* Parse an initializer.
12720
12721    initializer:
12722      = initializer-clause
12723      ( expression-list )
12724
12725    Returns an expression representing the initializer.  If no
12726    initializer is present, NULL_TREE is returned.
12727
12728    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
12729    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
12730    set to FALSE if there is no initializer present.  If there is an
12731    initializer, and it is not a constant-expression, *NON_CONSTANT_P
12732    is set to true; otherwise it is set to false.  */
12733
12734 static tree
12735 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
12736                        bool* non_constant_p)
12737 {
12738   cp_token *token;
12739   tree init;
12740
12741   /* Peek at the next token.  */
12742   token = cp_lexer_peek_token (parser->lexer);
12743
12744   /* Let our caller know whether or not this initializer was
12745      parenthesized.  */
12746   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
12747   /* Assume that the initializer is constant.  */
12748   *non_constant_p = false;
12749
12750   if (token->type == CPP_EQ)
12751     {
12752       /* Consume the `='.  */
12753       cp_lexer_consume_token (parser->lexer);
12754       /* Parse the initializer-clause.  */
12755       init = cp_parser_initializer_clause (parser, non_constant_p);
12756     }
12757   else if (token->type == CPP_OPEN_PAREN)
12758     init = cp_parser_parenthesized_expression_list (parser, false,
12759                                                     /*cast_p=*/false,
12760                                                     non_constant_p);
12761   else
12762     {
12763       /* Anything else is an error.  */
12764       cp_parser_error (parser, "expected initializer");
12765       init = error_mark_node;
12766     }
12767
12768   return init;
12769 }
12770
12771 /* Parse an initializer-clause.
12772
12773    initializer-clause:
12774      assignment-expression
12775      { initializer-list , [opt] }
12776      { }
12777
12778    Returns an expression representing the initializer.
12779
12780    If the `assignment-expression' production is used the value
12781    returned is simply a representation for the expression.
12782
12783    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
12784    the elements of the initializer-list (or NULL, if the last
12785    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
12786    NULL_TREE.  There is no way to detect whether or not the optional
12787    trailing `,' was provided.  NON_CONSTANT_P is as for
12788    cp_parser_initializer.  */
12789
12790 static tree
12791 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
12792 {
12793   tree initializer;
12794
12795   /* Assume the expression is constant.  */
12796   *non_constant_p = false;
12797
12798   /* If it is not a `{', then we are looking at an
12799      assignment-expression.  */
12800   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
12801     {
12802       initializer
12803         = cp_parser_constant_expression (parser,
12804                                         /*allow_non_constant_p=*/true,
12805                                         non_constant_p);
12806       if (!*non_constant_p)
12807         initializer = fold_non_dependent_expr (initializer);
12808     }
12809   else
12810     {
12811       /* Consume the `{' token.  */
12812       cp_lexer_consume_token (parser->lexer);
12813       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
12814       initializer = make_node (CONSTRUCTOR);
12815       /* If it's not a `}', then there is a non-trivial initializer.  */
12816       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12817         {
12818           /* Parse the initializer list.  */
12819           CONSTRUCTOR_ELTS (initializer)
12820             = cp_parser_initializer_list (parser, non_constant_p);
12821           /* A trailing `,' token is allowed.  */
12822           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12823             cp_lexer_consume_token (parser->lexer);
12824         }
12825       /* Now, there should be a trailing `}'.  */
12826       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12827     }
12828
12829   return initializer;
12830 }
12831
12832 /* Parse an initializer-list.
12833
12834    initializer-list:
12835      initializer-clause
12836      initializer-list , initializer-clause
12837
12838    GNU Extension:
12839
12840    initializer-list:
12841      identifier : initializer-clause
12842      initializer-list, identifier : initializer-clause
12843
12844    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
12845    for the initializer.  If the INDEX of the elt is non-NULL, it is the
12846    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
12847    as for cp_parser_initializer.  */
12848
12849 static VEC(constructor_elt,gc) *
12850 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
12851 {
12852   VEC(constructor_elt,gc) *v = NULL;
12853
12854   /* Assume all of the expressions are constant.  */
12855   *non_constant_p = false;
12856
12857   /* Parse the rest of the list.  */
12858   while (true)
12859     {
12860       cp_token *token;
12861       tree identifier;
12862       tree initializer;
12863       bool clause_non_constant_p;
12864
12865       /* If the next token is an identifier and the following one is a
12866          colon, we are looking at the GNU designated-initializer
12867          syntax.  */
12868       if (cp_parser_allow_gnu_extensions_p (parser)
12869           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
12870           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
12871         {
12872           /* Warn the user that they are using an extension.  */
12873           if (pedantic)
12874             pedwarn ("ISO C++ does not allow designated initializers");
12875           /* Consume the identifier.  */
12876           identifier = cp_lexer_consume_token (parser->lexer)->u.value;
12877           /* Consume the `:'.  */
12878           cp_lexer_consume_token (parser->lexer);
12879         }
12880       else
12881         identifier = NULL_TREE;
12882
12883       /* Parse the initializer.  */
12884       initializer = cp_parser_initializer_clause (parser,
12885                                                   &clause_non_constant_p);
12886       /* If any clause is non-constant, so is the entire initializer.  */
12887       if (clause_non_constant_p)
12888         *non_constant_p = true;
12889
12890       /* Add it to the vector.  */
12891       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
12892
12893       /* If the next token is not a comma, we have reached the end of
12894          the list.  */
12895       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12896         break;
12897
12898       /* Peek at the next token.  */
12899       token = cp_lexer_peek_nth_token (parser->lexer, 2);
12900       /* If the next token is a `}', then we're still done.  An
12901          initializer-clause can have a trailing `,' after the
12902          initializer-list and before the closing `}'.  */
12903       if (token->type == CPP_CLOSE_BRACE)
12904         break;
12905
12906       /* Consume the `,' token.  */
12907       cp_lexer_consume_token (parser->lexer);
12908     }
12909
12910   return v;
12911 }
12912
12913 /* Classes [gram.class] */
12914
12915 /* Parse a class-name.
12916
12917    class-name:
12918      identifier
12919      template-id
12920
12921    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
12922    to indicate that names looked up in dependent types should be
12923    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
12924    keyword has been used to indicate that the name that appears next
12925    is a template.  TAG_TYPE indicates the explicit tag given before
12926    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
12927    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
12928    is the class being defined in a class-head.
12929
12930    Returns the TYPE_DECL representing the class.  */
12931
12932 static tree
12933 cp_parser_class_name (cp_parser *parser,
12934                       bool typename_keyword_p,
12935                       bool template_keyword_p,
12936                       enum tag_types tag_type,
12937                       bool check_dependency_p,
12938                       bool class_head_p,
12939                       bool is_declaration)
12940 {
12941   tree decl;
12942   tree scope;
12943   bool typename_p;
12944   cp_token *token;
12945
12946   /* All class-names start with an identifier.  */
12947   token = cp_lexer_peek_token (parser->lexer);
12948   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
12949     {
12950       cp_parser_error (parser, "expected class-name");
12951       return error_mark_node;
12952     }
12953
12954   /* PARSER->SCOPE can be cleared when parsing the template-arguments
12955      to a template-id, so we save it here.  */
12956   scope = parser->scope;
12957   if (scope == error_mark_node)
12958     return error_mark_node;
12959
12960   /* Any name names a type if we're following the `typename' keyword
12961      in a qualified name where the enclosing scope is type-dependent.  */
12962   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
12963                 && dependent_type_p (scope));
12964   /* Handle the common case (an identifier, but not a template-id)
12965      efficiently.  */
12966   if (token->type == CPP_NAME
12967       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
12968     {
12969       cp_token *identifier_token;
12970       tree identifier;
12971       bool ambiguous_p;
12972
12973       /* Look for the identifier.  */
12974       identifier_token = cp_lexer_peek_token (parser->lexer);
12975       ambiguous_p = identifier_token->ambiguous_p;
12976       identifier = cp_parser_identifier (parser);
12977       /* If the next token isn't an identifier, we are certainly not
12978          looking at a class-name.  */
12979       if (identifier == error_mark_node)
12980         decl = error_mark_node;
12981       /* If we know this is a type-name, there's no need to look it
12982          up.  */
12983       else if (typename_p)
12984         decl = identifier;
12985       else
12986         {
12987           tree ambiguous_decls;
12988           /* If we already know that this lookup is ambiguous, then
12989              we've already issued an error message; there's no reason
12990              to check again.  */
12991           if (ambiguous_p)
12992             {
12993               cp_parser_simulate_error (parser);
12994               return error_mark_node;
12995             }
12996           /* If the next token is a `::', then the name must be a type
12997              name.
12998
12999              [basic.lookup.qual]
13000
13001              During the lookup for a name preceding the :: scope
13002              resolution operator, object, function, and enumerator
13003              names are ignored.  */
13004           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13005             tag_type = typename_type;
13006           /* Look up the name.  */
13007           decl = cp_parser_lookup_name (parser, identifier,
13008                                         tag_type,
13009                                         /*is_template=*/false,
13010                                         /*is_namespace=*/false,
13011                                         check_dependency_p,
13012                                         &ambiguous_decls);
13013           if (ambiguous_decls)
13014             {
13015               error ("reference to %qD is ambiguous", identifier);
13016               print_candidates (ambiguous_decls);
13017               if (cp_parser_parsing_tentatively (parser))
13018                 {
13019                   identifier_token->ambiguous_p = true;
13020                   cp_parser_simulate_error (parser);
13021                 }
13022               return error_mark_node;
13023             }
13024         }
13025     }
13026   else
13027     {
13028       /* Try a template-id.  */
13029       decl = cp_parser_template_id (parser, template_keyword_p,
13030                                     check_dependency_p,
13031                                     is_declaration);
13032       if (decl == error_mark_node)
13033         return error_mark_node;
13034     }
13035
13036   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
13037
13038   /* If this is a typename, create a TYPENAME_TYPE.  */
13039   if (typename_p && decl != error_mark_node)
13040     {
13041       decl = make_typename_type (scope, decl, typename_type,
13042                                  /*complain=*/tf_error);
13043       if (decl != error_mark_node)
13044         decl = TYPE_NAME (decl);
13045     }
13046
13047   /* Check to see that it is really the name of a class.  */
13048   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
13049       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
13050       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13051     /* Situations like this:
13052
13053          template <typename T> struct A {
13054            typename T::template X<int>::I i;
13055          };
13056
13057        are problematic.  Is `T::template X<int>' a class-name?  The
13058        standard does not seem to be definitive, but there is no other
13059        valid interpretation of the following `::'.  Therefore, those
13060        names are considered class-names.  */
13061     {
13062       decl = make_typename_type (scope, decl, tag_type, tf_error);
13063       if (decl != error_mark_node)
13064         decl = TYPE_NAME (decl);
13065     }
13066   else if (TREE_CODE (decl) != TYPE_DECL
13067            || TREE_TYPE (decl) == error_mark_node
13068            || !IS_AGGR_TYPE (TREE_TYPE (decl)))
13069     decl = error_mark_node;
13070
13071   if (decl == error_mark_node)
13072     cp_parser_error (parser, "expected class-name");
13073
13074   return decl;
13075 }
13076
13077 /* Parse a class-specifier.
13078
13079    class-specifier:
13080      class-head { member-specification [opt] }
13081
13082    Returns the TREE_TYPE representing the class.  */
13083
13084 static tree
13085 cp_parser_class_specifier (cp_parser* parser)
13086 {
13087   cp_token *token;
13088   tree type;
13089   tree attributes = NULL_TREE;
13090   int has_trailing_semicolon;
13091   bool nested_name_specifier_p;
13092   unsigned saved_num_template_parameter_lists;
13093   bool saved_in_function_body;
13094   tree old_scope = NULL_TREE;
13095   tree scope = NULL_TREE;
13096   tree bases;
13097
13098   push_deferring_access_checks (dk_no_deferred);
13099
13100   /* Parse the class-head.  */
13101   type = cp_parser_class_head (parser,
13102                                &nested_name_specifier_p,
13103                                &attributes,
13104                                &bases);
13105   /* If the class-head was a semantic disaster, skip the entire body
13106      of the class.  */
13107   if (!type)
13108     {
13109       cp_parser_skip_to_end_of_block_or_statement (parser);
13110       pop_deferring_access_checks ();
13111       return error_mark_node;
13112     }
13113
13114   /* Look for the `{'.  */
13115   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
13116     {
13117       pop_deferring_access_checks ();
13118       return error_mark_node;
13119     }
13120
13121   /* Process the base classes. If they're invalid, skip the 
13122      entire class body.  */
13123   if (!xref_basetypes (type, bases))
13124     {
13125       cp_parser_skip_to_closing_brace (parser);
13126
13127       /* Consuming the closing brace yields better error messages
13128          later on.  */
13129       cp_lexer_consume_token (parser->lexer);
13130       pop_deferring_access_checks ();
13131       return error_mark_node;
13132     }
13133
13134   /* Issue an error message if type-definitions are forbidden here.  */
13135   cp_parser_check_type_definition (parser);
13136   /* Remember that we are defining one more class.  */
13137   ++parser->num_classes_being_defined;
13138   /* Inside the class, surrounding template-parameter-lists do not
13139      apply.  */
13140   saved_num_template_parameter_lists
13141     = parser->num_template_parameter_lists;
13142   parser->num_template_parameter_lists = 0;
13143   /* We are not in a function body.  */
13144   saved_in_function_body = parser->in_function_body;
13145   parser->in_function_body = false;
13146
13147   /* Start the class.  */
13148   if (nested_name_specifier_p)
13149     {
13150       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
13151       old_scope = push_inner_scope (scope);
13152     }
13153   type = begin_class_definition (type, attributes);
13154
13155   if (type == error_mark_node)
13156     /* If the type is erroneous, skip the entire body of the class.  */
13157     cp_parser_skip_to_closing_brace (parser);
13158   else
13159     /* Parse the member-specification.  */
13160     cp_parser_member_specification_opt (parser);
13161
13162   /* Look for the trailing `}'.  */
13163   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13164   /* We get better error messages by noticing a common problem: a
13165      missing trailing `;'.  */
13166   token = cp_lexer_peek_token (parser->lexer);
13167   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
13168   /* Look for trailing attributes to apply to this class.  */
13169   if (cp_parser_allow_gnu_extensions_p (parser))
13170     attributes = cp_parser_attributes_opt (parser);
13171   if (type != error_mark_node)
13172     type = finish_struct (type, attributes);
13173   if (nested_name_specifier_p)
13174     pop_inner_scope (old_scope, scope);
13175   /* If this class is not itself within the scope of another class,
13176      then we need to parse the bodies of all of the queued function
13177      definitions.  Note that the queued functions defined in a class
13178      are not always processed immediately following the
13179      class-specifier for that class.  Consider:
13180
13181        struct A {
13182          struct B { void f() { sizeof (A); } };
13183        };
13184
13185      If `f' were processed before the processing of `A' were
13186      completed, there would be no way to compute the size of `A'.
13187      Note that the nesting we are interested in here is lexical --
13188      not the semantic nesting given by TYPE_CONTEXT.  In particular,
13189      for:
13190
13191        struct A { struct B; };
13192        struct A::B { void f() { } };
13193
13194      there is no need to delay the parsing of `A::B::f'.  */
13195   if (--parser->num_classes_being_defined == 0)
13196     {
13197       tree queue_entry;
13198       tree fn;
13199       tree class_type = NULL_TREE;
13200       tree pushed_scope = NULL_TREE;
13201
13202       /* In a first pass, parse default arguments to the functions.
13203          Then, in a second pass, parse the bodies of the functions.
13204          This two-phased approach handles cases like:
13205
13206             struct S {
13207               void f() { g(); }
13208               void g(int i = 3);
13209             };
13210
13211          */
13212       for (TREE_PURPOSE (parser->unparsed_functions_queues)
13213              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
13214            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
13215            TREE_PURPOSE (parser->unparsed_functions_queues)
13216              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
13217         {
13218           fn = TREE_VALUE (queue_entry);
13219           /* If there are default arguments that have not yet been processed,
13220              take care of them now.  */
13221           if (class_type != TREE_PURPOSE (queue_entry))
13222             {
13223               if (pushed_scope)
13224                 pop_scope (pushed_scope);
13225               class_type = TREE_PURPOSE (queue_entry);
13226               pushed_scope = push_scope (class_type);
13227             }
13228           /* Make sure that any template parameters are in scope.  */
13229           maybe_begin_member_template_processing (fn);
13230           /* Parse the default argument expressions.  */
13231           cp_parser_late_parsing_default_args (parser, fn);
13232           /* Remove any template parameters from the symbol table.  */
13233           maybe_end_member_template_processing ();
13234         }
13235       if (pushed_scope)
13236         pop_scope (pushed_scope);
13237       /* Now parse the body of the functions.  */
13238       for (TREE_VALUE (parser->unparsed_functions_queues)
13239              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
13240            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
13241            TREE_VALUE (parser->unparsed_functions_queues)
13242              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
13243         {
13244           /* Figure out which function we need to process.  */
13245           fn = TREE_VALUE (queue_entry);
13246           /* Parse the function.  */
13247           cp_parser_late_parsing_for_member (parser, fn);
13248         }
13249     }
13250
13251   /* Put back any saved access checks.  */
13252   pop_deferring_access_checks ();
13253
13254   /* Restore saved state.  */
13255   parser->in_function_body = saved_in_function_body;
13256   parser->num_template_parameter_lists
13257     = saved_num_template_parameter_lists;
13258
13259   return type;
13260 }
13261
13262 /* Parse a class-head.
13263
13264    class-head:
13265      class-key identifier [opt] base-clause [opt]
13266      class-key nested-name-specifier identifier base-clause [opt]
13267      class-key nested-name-specifier [opt] template-id
13268        base-clause [opt]
13269
13270    GNU Extensions:
13271      class-key attributes identifier [opt] base-clause [opt]
13272      class-key attributes nested-name-specifier identifier base-clause [opt]
13273      class-key attributes nested-name-specifier [opt] template-id
13274        base-clause [opt]
13275
13276    Returns the TYPE of the indicated class.  Sets
13277    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
13278    involving a nested-name-specifier was used, and FALSE otherwise.
13279
13280    Returns error_mark_node if this is not a class-head.
13281
13282    Returns NULL_TREE if the class-head is syntactically valid, but
13283    semantically invalid in a way that means we should skip the entire
13284    body of the class.  */
13285
13286 static tree
13287 cp_parser_class_head (cp_parser* parser,
13288                       bool* nested_name_specifier_p,
13289                       tree *attributes_p,
13290                       tree *bases)
13291 {
13292   tree nested_name_specifier;
13293   enum tag_types class_key;
13294   tree id = NULL_TREE;
13295   tree type = NULL_TREE;
13296   tree attributes;
13297   bool template_id_p = false;
13298   bool qualified_p = false;
13299   bool invalid_nested_name_p = false;
13300   bool invalid_explicit_specialization_p = false;
13301   tree pushed_scope = NULL_TREE;
13302   unsigned num_templates;
13303
13304   /* Assume no nested-name-specifier will be present.  */
13305   *nested_name_specifier_p = false;
13306   /* Assume no template parameter lists will be used in defining the
13307      type.  */
13308   num_templates = 0;
13309
13310   /* Look for the class-key.  */
13311   class_key = cp_parser_class_key (parser);
13312   if (class_key == none_type)
13313     return error_mark_node;
13314
13315   /* Parse the attributes.  */
13316   attributes = cp_parser_attributes_opt (parser);
13317
13318   /* If the next token is `::', that is invalid -- but sometimes
13319      people do try to write:
13320
13321        struct ::S {};
13322
13323      Handle this gracefully by accepting the extra qualifier, and then
13324      issuing an error about it later if this really is a
13325      class-head.  If it turns out just to be an elaborated type
13326      specifier, remain silent.  */
13327   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
13328     qualified_p = true;
13329
13330   push_deferring_access_checks (dk_no_check);
13331
13332   /* Determine the name of the class.  Begin by looking for an
13333      optional nested-name-specifier.  */
13334   nested_name_specifier
13335     = cp_parser_nested_name_specifier_opt (parser,
13336                                            /*typename_keyword_p=*/false,
13337                                            /*check_dependency_p=*/false,
13338                                            /*type_p=*/false,
13339                                            /*is_declaration=*/false);
13340   /* If there was a nested-name-specifier, then there *must* be an
13341      identifier.  */
13342   if (nested_name_specifier)
13343     {
13344       /* Although the grammar says `identifier', it really means
13345          `class-name' or `template-name'.  You are only allowed to
13346          define a class that has already been declared with this
13347          syntax.
13348
13349          The proposed resolution for Core Issue 180 says that wherever
13350          you see `class T::X' you should treat `X' as a type-name.
13351
13352          It is OK to define an inaccessible class; for example:
13353
13354            class A { class B; };
13355            class A::B {};
13356
13357          We do not know if we will see a class-name, or a
13358          template-name.  We look for a class-name first, in case the
13359          class-name is a template-id; if we looked for the
13360          template-name first we would stop after the template-name.  */
13361       cp_parser_parse_tentatively (parser);
13362       type = cp_parser_class_name (parser,
13363                                    /*typename_keyword_p=*/false,
13364                                    /*template_keyword_p=*/false,
13365                                    class_type,
13366                                    /*check_dependency_p=*/false,
13367                                    /*class_head_p=*/true,
13368                                    /*is_declaration=*/false);
13369       /* If that didn't work, ignore the nested-name-specifier.  */
13370       if (!cp_parser_parse_definitely (parser))
13371         {
13372           invalid_nested_name_p = true;
13373           id = cp_parser_identifier (parser);
13374           if (id == error_mark_node)
13375             id = NULL_TREE;
13376         }
13377       /* If we could not find a corresponding TYPE, treat this
13378          declaration like an unqualified declaration.  */
13379       if (type == error_mark_node)
13380         nested_name_specifier = NULL_TREE;
13381       /* Otherwise, count the number of templates used in TYPE and its
13382          containing scopes.  */
13383       else
13384         {
13385           tree scope;
13386
13387           for (scope = TREE_TYPE (type);
13388                scope && TREE_CODE (scope) != NAMESPACE_DECL;
13389                scope = (TYPE_P (scope)
13390                         ? TYPE_CONTEXT (scope)
13391                         : DECL_CONTEXT (scope)))
13392             if (TYPE_P (scope)
13393                 && CLASS_TYPE_P (scope)
13394                 && CLASSTYPE_TEMPLATE_INFO (scope)
13395                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
13396                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
13397               ++num_templates;
13398         }
13399     }
13400   /* Otherwise, the identifier is optional.  */
13401   else
13402     {
13403       /* We don't know whether what comes next is a template-id,
13404          an identifier, or nothing at all.  */
13405       cp_parser_parse_tentatively (parser);
13406       /* Check for a template-id.  */
13407       id = cp_parser_template_id (parser,
13408                                   /*template_keyword_p=*/false,
13409                                   /*check_dependency_p=*/true,
13410                                   /*is_declaration=*/true);
13411       /* If that didn't work, it could still be an identifier.  */
13412       if (!cp_parser_parse_definitely (parser))
13413         {
13414           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13415             id = cp_parser_identifier (parser);
13416           else
13417             id = NULL_TREE;
13418         }
13419       else
13420         {
13421           template_id_p = true;
13422           ++num_templates;
13423         }
13424     }
13425
13426   pop_deferring_access_checks ();
13427
13428   if (id)
13429     cp_parser_check_for_invalid_template_id (parser, id);
13430
13431   /* If it's not a `:' or a `{' then we can't really be looking at a
13432      class-head, since a class-head only appears as part of a
13433      class-specifier.  We have to detect this situation before calling
13434      xref_tag, since that has irreversible side-effects.  */
13435   if (!cp_parser_next_token_starts_class_definition_p (parser))
13436     {
13437       cp_parser_error (parser, "expected %<{%> or %<:%>");
13438       return error_mark_node;
13439     }
13440
13441   /* At this point, we're going ahead with the class-specifier, even
13442      if some other problem occurs.  */
13443   cp_parser_commit_to_tentative_parse (parser);
13444   /* Issue the error about the overly-qualified name now.  */
13445   if (qualified_p)
13446     cp_parser_error (parser,
13447                      "global qualification of class name is invalid");
13448   else if (invalid_nested_name_p)
13449     cp_parser_error (parser,
13450                      "qualified name does not name a class");
13451   else if (nested_name_specifier)
13452     {
13453       tree scope;
13454
13455       /* Reject typedef-names in class heads.  */
13456       if (!DECL_IMPLICIT_TYPEDEF_P (type))
13457         {
13458           error ("invalid class name in declaration of %qD", type);
13459           type = NULL_TREE;
13460           goto done;
13461         }
13462
13463       /* Figure out in what scope the declaration is being placed.  */
13464       scope = current_scope ();
13465       /* If that scope does not contain the scope in which the
13466          class was originally declared, the program is invalid.  */
13467       if (scope && !is_ancestor (scope, nested_name_specifier))
13468         {
13469           error ("declaration of %qD in %qD which does not enclose %qD",
13470                  type, scope, nested_name_specifier);
13471           type = NULL_TREE;
13472           goto done;
13473         }
13474       /* [dcl.meaning]
13475
13476          A declarator-id shall not be qualified exception of the
13477          definition of a ... nested class outside of its class
13478          ... [or] a the definition or explicit instantiation of a
13479          class member of a namespace outside of its namespace.  */
13480       if (scope == nested_name_specifier)
13481         {
13482           pedwarn ("extra qualification ignored");
13483           nested_name_specifier = NULL_TREE;
13484           num_templates = 0;
13485         }
13486     }
13487   /* An explicit-specialization must be preceded by "template <>".  If
13488      it is not, try to recover gracefully.  */
13489   if (at_namespace_scope_p ()
13490       && parser->num_template_parameter_lists == 0
13491       && template_id_p)
13492     {
13493       error ("an explicit specialization must be preceded by %<template <>%>");
13494       invalid_explicit_specialization_p = true;
13495       /* Take the same action that would have been taken by
13496          cp_parser_explicit_specialization.  */
13497       ++parser->num_template_parameter_lists;
13498       begin_specialization ();
13499     }
13500   /* There must be no "return" statements between this point and the
13501      end of this function; set "type "to the correct return value and
13502      use "goto done;" to return.  */
13503   /* Make sure that the right number of template parameters were
13504      present.  */
13505   if (!cp_parser_check_template_parameters (parser, num_templates))
13506     {
13507       /* If something went wrong, there is no point in even trying to
13508          process the class-definition.  */
13509       type = NULL_TREE;
13510       goto done;
13511     }
13512
13513   /* Look up the type.  */
13514   if (template_id_p)
13515     {
13516       type = TREE_TYPE (id);
13517       type = maybe_process_partial_specialization (type);
13518       if (nested_name_specifier)
13519         pushed_scope = push_scope (nested_name_specifier);
13520     }
13521   else if (nested_name_specifier)
13522     {
13523       tree class_type;
13524
13525       /* Given:
13526
13527             template <typename T> struct S { struct T };
13528             template <typename T> struct S<T>::T { };
13529
13530          we will get a TYPENAME_TYPE when processing the definition of
13531          `S::T'.  We need to resolve it to the actual type before we
13532          try to define it.  */
13533       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
13534         {
13535           class_type = resolve_typename_type (TREE_TYPE (type),
13536                                               /*only_current_p=*/false);
13537           if (class_type != error_mark_node)
13538             type = TYPE_NAME (class_type);
13539           else
13540             {
13541               cp_parser_error (parser, "could not resolve typename type");
13542               type = error_mark_node;
13543             }
13544         }
13545
13546       maybe_process_partial_specialization (TREE_TYPE (type));
13547       class_type = current_class_type;
13548       /* Enter the scope indicated by the nested-name-specifier.  */
13549       pushed_scope = push_scope (nested_name_specifier);
13550       /* Get the canonical version of this type.  */
13551       type = TYPE_MAIN_DECL (TREE_TYPE (type));
13552       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
13553           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
13554         {
13555           type = push_template_decl (type);
13556           if (type == error_mark_node)
13557             {
13558               type = NULL_TREE;
13559               goto done;
13560             }
13561         }
13562
13563       type = TREE_TYPE (type);
13564       *nested_name_specifier_p = true;
13565     }
13566   else      /* The name is not a nested name.  */
13567     {
13568       /* If the class was unnamed, create a dummy name.  */
13569       if (!id)
13570         id = make_anon_name ();
13571       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
13572                        parser->num_template_parameter_lists);
13573     }
13574
13575   /* Indicate whether this class was declared as a `class' or as a
13576      `struct'.  */
13577   if (TREE_CODE (type) == RECORD_TYPE)
13578     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
13579   cp_parser_check_class_key (class_key, type);
13580
13581   /* If this type was already complete, and we see another definition,
13582      that's an error.  */
13583   if (type != error_mark_node && COMPLETE_TYPE_P (type))
13584     {
13585       error ("redefinition of %q#T", type);
13586       error ("previous definition of %q+#T", type);
13587       type = NULL_TREE;
13588       goto done;
13589     }
13590   else if (type == error_mark_node)
13591     type = NULL_TREE;
13592
13593   /* We will have entered the scope containing the class; the names of
13594      base classes should be looked up in that context.  For example:
13595
13596        struct A { struct B {}; struct C; };
13597        struct A::C : B {};
13598
13599      is valid.  */
13600   *bases = NULL_TREE;
13601
13602   /* Get the list of base-classes, if there is one.  */
13603   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13604     *bases = cp_parser_base_clause (parser);
13605
13606  done:
13607   /* Leave the scope given by the nested-name-specifier.  We will
13608      enter the class scope itself while processing the members.  */
13609   if (pushed_scope)
13610     pop_scope (pushed_scope);
13611
13612   if (invalid_explicit_specialization_p)
13613     {
13614       end_specialization ();
13615       --parser->num_template_parameter_lists;
13616     }
13617   *attributes_p = attributes;
13618   return type;
13619 }
13620
13621 /* Parse a class-key.
13622
13623    class-key:
13624      class
13625      struct
13626      union
13627
13628    Returns the kind of class-key specified, or none_type to indicate
13629    error.  */
13630
13631 static enum tag_types
13632 cp_parser_class_key (cp_parser* parser)
13633 {
13634   cp_token *token;
13635   enum tag_types tag_type;
13636
13637   /* Look for the class-key.  */
13638   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
13639   if (!token)
13640     return none_type;
13641
13642   /* Check to see if the TOKEN is a class-key.  */
13643   tag_type = cp_parser_token_is_class_key (token);
13644   if (!tag_type)
13645     cp_parser_error (parser, "expected class-key");
13646   return tag_type;
13647 }
13648
13649 /* Parse an (optional) member-specification.
13650
13651    member-specification:
13652      member-declaration member-specification [opt]
13653      access-specifier : member-specification [opt]  */
13654
13655 static void
13656 cp_parser_member_specification_opt (cp_parser* parser)
13657 {
13658   while (true)
13659     {
13660       cp_token *token;
13661       enum rid keyword;
13662
13663       /* Peek at the next token.  */
13664       token = cp_lexer_peek_token (parser->lexer);
13665       /* If it's a `}', or EOF then we've seen all the members.  */
13666       if (token->type == CPP_CLOSE_BRACE
13667           || token->type == CPP_EOF
13668           || token->type == CPP_PRAGMA_EOL)
13669         break;
13670
13671       /* See if this token is a keyword.  */
13672       keyword = token->keyword;
13673       switch (keyword)
13674         {
13675         case RID_PUBLIC:
13676         case RID_PROTECTED:
13677         case RID_PRIVATE:
13678           /* Consume the access-specifier.  */
13679           cp_lexer_consume_token (parser->lexer);
13680           /* Remember which access-specifier is active.  */
13681           current_access_specifier = token->u.value;
13682           /* Look for the `:'.  */
13683           cp_parser_require (parser, CPP_COLON, "`:'");
13684           break;
13685
13686         default:
13687           /* Accept #pragmas at class scope.  */
13688           if (token->type == CPP_PRAGMA)
13689             {
13690               cp_parser_pragma (parser, pragma_external);
13691               break;
13692             }
13693
13694           /* Otherwise, the next construction must be a
13695              member-declaration.  */
13696           cp_parser_member_declaration (parser);
13697         }
13698     }
13699 }
13700
13701 /* Parse a member-declaration.
13702
13703    member-declaration:
13704      decl-specifier-seq [opt] member-declarator-list [opt] ;
13705      function-definition ; [opt]
13706      :: [opt] nested-name-specifier template [opt] unqualified-id ;
13707      using-declaration
13708      template-declaration
13709
13710    member-declarator-list:
13711      member-declarator
13712      member-declarator-list , member-declarator
13713
13714    member-declarator:
13715      declarator pure-specifier [opt]
13716      declarator constant-initializer [opt]
13717      identifier [opt] : constant-expression
13718
13719    GNU Extensions:
13720
13721    member-declaration:
13722      __extension__ member-declaration
13723
13724    member-declarator:
13725      declarator attributes [opt] pure-specifier [opt]
13726      declarator attributes [opt] constant-initializer [opt]
13727      identifier [opt] attributes [opt] : constant-expression  */
13728
13729 static void
13730 cp_parser_member_declaration (cp_parser* parser)
13731 {
13732   cp_decl_specifier_seq decl_specifiers;
13733   tree prefix_attributes;
13734   tree decl;
13735   int declares_class_or_enum;
13736   bool friend_p;
13737   cp_token *token;
13738   int saved_pedantic;
13739
13740   /* Check for the `__extension__' keyword.  */
13741   if (cp_parser_extension_opt (parser, &saved_pedantic))
13742     {
13743       /* Recurse.  */
13744       cp_parser_member_declaration (parser);
13745       /* Restore the old value of the PEDANTIC flag.  */
13746       pedantic = saved_pedantic;
13747
13748       return;
13749     }
13750
13751   /* Check for a template-declaration.  */
13752   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13753     {
13754       /* An explicit specialization here is an error condition, and we
13755          expect the specialization handler to detect and report this.  */
13756       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
13757           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
13758         cp_parser_explicit_specialization (parser);
13759       else
13760         cp_parser_template_declaration (parser, /*member_p=*/true);
13761
13762       return;
13763     }
13764
13765   /* Check for a using-declaration.  */
13766   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
13767     {
13768       /* Parse the using-declaration.  */
13769       cp_parser_using_declaration (parser,
13770                                    /*access_declaration_p=*/false);
13771       return;
13772     }
13773
13774   /* Check for @defs.  */
13775   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
13776     {
13777       tree ivar, member;
13778       tree ivar_chains = cp_parser_objc_defs_expression (parser);
13779       ivar = ivar_chains;
13780       while (ivar)
13781         {
13782           member = ivar;
13783           ivar = TREE_CHAIN (member);
13784           TREE_CHAIN (member) = NULL_TREE;
13785           finish_member_declaration (member);
13786         }
13787       return;
13788     }
13789
13790   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
13791     return;
13792
13793   /* Parse the decl-specifier-seq.  */
13794   cp_parser_decl_specifier_seq (parser,
13795                                 CP_PARSER_FLAGS_OPTIONAL,
13796                                 &decl_specifiers,
13797                                 &declares_class_or_enum);
13798   prefix_attributes = decl_specifiers.attributes;
13799   decl_specifiers.attributes = NULL_TREE;
13800   /* Check for an invalid type-name.  */
13801   if (!decl_specifiers.type
13802       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
13803     return;
13804   /* If there is no declarator, then the decl-specifier-seq should
13805      specify a type.  */
13806   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13807     {
13808       /* If there was no decl-specifier-seq, and the next token is a
13809          `;', then we have something like:
13810
13811            struct S { ; };
13812
13813          [class.mem]
13814
13815          Each member-declaration shall declare at least one member
13816          name of the class.  */
13817       if (!decl_specifiers.any_specifiers_p)
13818         {
13819           cp_token *token = cp_lexer_peek_token (parser->lexer);
13820           if (pedantic && !token->in_system_header)
13821             pedwarn ("%Hextra %<;%>", &token->location);
13822         }
13823       else
13824         {
13825           tree type;
13826
13827           /* See if this declaration is a friend.  */
13828           friend_p = cp_parser_friend_p (&decl_specifiers);
13829           /* If there were decl-specifiers, check to see if there was
13830              a class-declaration.  */
13831           type = check_tag_decl (&decl_specifiers);
13832           /* Nested classes have already been added to the class, but
13833              a `friend' needs to be explicitly registered.  */
13834           if (friend_p)
13835             {
13836               /* If the `friend' keyword was present, the friend must
13837                  be introduced with a class-key.  */
13838                if (!declares_class_or_enum)
13839                  error ("a class-key must be used when declaring a friend");
13840                /* In this case:
13841
13842                     template <typename T> struct A {
13843                       friend struct A<T>::B;
13844                     };
13845
13846                   A<T>::B will be represented by a TYPENAME_TYPE, and
13847                   therefore not recognized by check_tag_decl.  */
13848                if (!type
13849                    && decl_specifiers.type
13850                    && TYPE_P (decl_specifiers.type))
13851                  type = decl_specifiers.type;
13852                if (!type || !TYPE_P (type))
13853                  error ("friend declaration does not name a class or "
13854                         "function");
13855                else
13856                  make_friend_class (current_class_type, type,
13857                                     /*complain=*/true);
13858             }
13859           /* If there is no TYPE, an error message will already have
13860              been issued.  */
13861           else if (!type || type == error_mark_node)
13862             ;
13863           /* An anonymous aggregate has to be handled specially; such
13864              a declaration really declares a data member (with a
13865              particular type), as opposed to a nested class.  */
13866           else if (ANON_AGGR_TYPE_P (type))
13867             {
13868               /* Remove constructors and such from TYPE, now that we
13869                  know it is an anonymous aggregate.  */
13870               fixup_anonymous_aggr (type);
13871               /* And make the corresponding data member.  */
13872               decl = build_decl (FIELD_DECL, NULL_TREE, type);
13873               /* Add it to the class.  */
13874               finish_member_declaration (decl);
13875             }
13876           else
13877             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
13878         }
13879     }
13880   else
13881     {
13882       /* See if these declarations will be friends.  */
13883       friend_p = cp_parser_friend_p (&decl_specifiers);
13884
13885       /* Keep going until we hit the `;' at the end of the
13886          declaration.  */
13887       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13888         {
13889           tree attributes = NULL_TREE;
13890           tree first_attribute;
13891
13892           /* Peek at the next token.  */
13893           token = cp_lexer_peek_token (parser->lexer);
13894
13895           /* Check for a bitfield declaration.  */
13896           if (token->type == CPP_COLON
13897               || (token->type == CPP_NAME
13898                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
13899                   == CPP_COLON))
13900             {
13901               tree identifier;
13902               tree width;
13903
13904               /* Get the name of the bitfield.  Note that we cannot just
13905                  check TOKEN here because it may have been invalidated by
13906                  the call to cp_lexer_peek_nth_token above.  */
13907               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
13908                 identifier = cp_parser_identifier (parser);
13909               else
13910                 identifier = NULL_TREE;
13911
13912               /* Consume the `:' token.  */
13913               cp_lexer_consume_token (parser->lexer);
13914               /* Get the width of the bitfield.  */
13915               width
13916                 = cp_parser_constant_expression (parser,
13917                                                  /*allow_non_constant=*/false,
13918                                                  NULL);
13919
13920               /* Look for attributes that apply to the bitfield.  */
13921               attributes = cp_parser_attributes_opt (parser);
13922               /* Remember which attributes are prefix attributes and
13923                  which are not.  */
13924               first_attribute = attributes;
13925               /* Combine the attributes.  */
13926               attributes = chainon (prefix_attributes, attributes);
13927
13928               /* Create the bitfield declaration.  */
13929               decl = grokbitfield (identifier
13930                                    ? make_id_declarator (NULL_TREE,
13931                                                          identifier,
13932                                                          sfk_none)
13933                                    : NULL,
13934                                    &decl_specifiers,
13935                                    width);
13936               /* Apply the attributes.  */
13937               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
13938             }
13939           else
13940             {
13941               cp_declarator *declarator;
13942               tree initializer;
13943               tree asm_specification;
13944               int ctor_dtor_or_conv_p;
13945
13946               /* Parse the declarator.  */
13947               declarator
13948                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13949                                         &ctor_dtor_or_conv_p,
13950                                         /*parenthesized_p=*/NULL,
13951                                         /*member_p=*/true);
13952
13953               /* If something went wrong parsing the declarator, make sure
13954                  that we at least consume some tokens.  */
13955               if (declarator == cp_error_declarator)
13956                 {
13957                   /* Skip to the end of the statement.  */
13958                   cp_parser_skip_to_end_of_statement (parser);
13959                   /* If the next token is not a semicolon, that is
13960                      probably because we just skipped over the body of
13961                      a function.  So, we consume a semicolon if
13962                      present, but do not issue an error message if it
13963                      is not present.  */
13964                   if (cp_lexer_next_token_is (parser->lexer,
13965                                               CPP_SEMICOLON))
13966                     cp_lexer_consume_token (parser->lexer);
13967                   return;
13968                 }
13969
13970               if (declares_class_or_enum & 2)
13971                 cp_parser_check_for_definition_in_return_type
13972                   (declarator, decl_specifiers.type);
13973
13974               /* Look for an asm-specification.  */
13975               asm_specification = cp_parser_asm_specification_opt (parser);
13976               /* Look for attributes that apply to the declaration.  */
13977               attributes = cp_parser_attributes_opt (parser);
13978               /* Remember which attributes are prefix attributes and
13979                  which are not.  */
13980               first_attribute = attributes;
13981               /* Combine the attributes.  */
13982               attributes = chainon (prefix_attributes, attributes);
13983
13984               /* If it's an `=', then we have a constant-initializer or a
13985                  pure-specifier.  It is not correct to parse the
13986                  initializer before registering the member declaration
13987                  since the member declaration should be in scope while
13988                  its initializer is processed.  However, the rest of the
13989                  front end does not yet provide an interface that allows
13990                  us to handle this correctly.  */
13991               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13992                 {
13993                   /* In [class.mem]:
13994
13995                      A pure-specifier shall be used only in the declaration of
13996                      a virtual function.
13997
13998                      A member-declarator can contain a constant-initializer
13999                      only if it declares a static member of integral or
14000                      enumeration type.
14001
14002                      Therefore, if the DECLARATOR is for a function, we look
14003                      for a pure-specifier; otherwise, we look for a
14004                      constant-initializer.  When we call `grokfield', it will
14005                      perform more stringent semantics checks.  */
14006                   if (function_declarator_p (declarator))
14007                     initializer = cp_parser_pure_specifier (parser);
14008                   else
14009                     /* Parse the initializer.  */
14010                     initializer = cp_parser_constant_initializer (parser);
14011                 }
14012               /* Otherwise, there is no initializer.  */
14013               else
14014                 initializer = NULL_TREE;
14015
14016               /* See if we are probably looking at a function
14017                  definition.  We are certainly not looking at a
14018                  member-declarator.  Calling `grokfield' has
14019                  side-effects, so we must not do it unless we are sure
14020                  that we are looking at a member-declarator.  */
14021               if (cp_parser_token_starts_function_definition_p
14022                   (cp_lexer_peek_token (parser->lexer)))
14023                 {
14024                   /* The grammar does not allow a pure-specifier to be
14025                      used when a member function is defined.  (It is
14026                      possible that this fact is an oversight in the
14027                      standard, since a pure function may be defined
14028                      outside of the class-specifier.  */
14029                   if (initializer)
14030                     error ("pure-specifier on function-definition");
14031                   decl = cp_parser_save_member_function_body (parser,
14032                                                               &decl_specifiers,
14033                                                               declarator,
14034                                                               attributes);
14035                   /* If the member was not a friend, declare it here.  */
14036                   if (!friend_p)
14037                     finish_member_declaration (decl);
14038                   /* Peek at the next token.  */
14039                   token = cp_lexer_peek_token (parser->lexer);
14040                   /* If the next token is a semicolon, consume it.  */
14041                   if (token->type == CPP_SEMICOLON)
14042                     cp_lexer_consume_token (parser->lexer);
14043                   return;
14044                 }
14045               else
14046                 /* Create the declaration.  */
14047                 decl = grokfield (declarator, &decl_specifiers,
14048                                   initializer, /*init_const_expr_p=*/true,
14049                                   asm_specification,
14050                                   attributes);
14051             }
14052
14053           /* Reset PREFIX_ATTRIBUTES.  */
14054           while (attributes && TREE_CHAIN (attributes) != first_attribute)
14055             attributes = TREE_CHAIN (attributes);
14056           if (attributes)
14057             TREE_CHAIN (attributes) = NULL_TREE;
14058
14059           /* If there is any qualification still in effect, clear it
14060              now; we will be starting fresh with the next declarator.  */
14061           parser->scope = NULL_TREE;
14062           parser->qualifying_scope = NULL_TREE;
14063           parser->object_scope = NULL_TREE;
14064           /* If it's a `,', then there are more declarators.  */
14065           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14066             cp_lexer_consume_token (parser->lexer);
14067           /* If the next token isn't a `;', then we have a parse error.  */
14068           else if (cp_lexer_next_token_is_not (parser->lexer,
14069                                                CPP_SEMICOLON))
14070             {
14071               cp_parser_error (parser, "expected %<;%>");
14072               /* Skip tokens until we find a `;'.  */
14073               cp_parser_skip_to_end_of_statement (parser);
14074
14075               break;
14076             }
14077
14078           if (decl)
14079             {
14080               /* Add DECL to the list of members.  */
14081               if (!friend_p)
14082                 finish_member_declaration (decl);
14083
14084               if (TREE_CODE (decl) == FUNCTION_DECL)
14085                 cp_parser_save_default_args (parser, decl);
14086             }
14087         }
14088     }
14089
14090   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14091 }
14092
14093 /* Parse a pure-specifier.
14094
14095    pure-specifier:
14096      = 0
14097
14098    Returns INTEGER_ZERO_NODE if a pure specifier is found.
14099    Otherwise, ERROR_MARK_NODE is returned.  */
14100
14101 static tree
14102 cp_parser_pure_specifier (cp_parser* parser)
14103 {
14104   cp_token *token;
14105
14106   /* Look for the `=' token.  */
14107   if (!cp_parser_require (parser, CPP_EQ, "`='"))
14108     return error_mark_node;
14109   /* Look for the `0' token.  */
14110   token = cp_lexer_consume_token (parser->lexer);
14111   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
14112   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
14113     {
14114       cp_parser_error (parser,
14115                        "invalid pure specifier (only `= 0' is allowed)");
14116       cp_parser_skip_to_end_of_statement (parser);
14117       return error_mark_node;
14118     }
14119   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
14120     {
14121       error ("templates may not be %<virtual%>");
14122       return error_mark_node;
14123     }
14124
14125   return integer_zero_node;
14126 }
14127
14128 /* Parse a constant-initializer.
14129
14130    constant-initializer:
14131      = constant-expression
14132
14133    Returns a representation of the constant-expression.  */
14134
14135 static tree
14136 cp_parser_constant_initializer (cp_parser* parser)
14137 {
14138   /* Look for the `=' token.  */
14139   if (!cp_parser_require (parser, CPP_EQ, "`='"))
14140     return error_mark_node;
14141
14142   /* It is invalid to write:
14143
14144        struct S { static const int i = { 7 }; };
14145
14146      */
14147   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14148     {
14149       cp_parser_error (parser,
14150                        "a brace-enclosed initializer is not allowed here");
14151       /* Consume the opening brace.  */
14152       cp_lexer_consume_token (parser->lexer);
14153       /* Skip the initializer.  */
14154       cp_parser_skip_to_closing_brace (parser);
14155       /* Look for the trailing `}'.  */
14156       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
14157
14158       return error_mark_node;
14159     }
14160
14161   return cp_parser_constant_expression (parser,
14162                                         /*allow_non_constant=*/false,
14163                                         NULL);
14164 }
14165
14166 /* Derived classes [gram.class.derived] */
14167
14168 /* Parse a base-clause.
14169
14170    base-clause:
14171      : base-specifier-list
14172
14173    base-specifier-list:
14174      base-specifier
14175      base-specifier-list , base-specifier
14176
14177    Returns a TREE_LIST representing the base-classes, in the order in
14178    which they were declared.  The representation of each node is as
14179    described by cp_parser_base_specifier.
14180
14181    In the case that no bases are specified, this function will return
14182    NULL_TREE, not ERROR_MARK_NODE.  */
14183
14184 static tree
14185 cp_parser_base_clause (cp_parser* parser)
14186 {
14187   tree bases = NULL_TREE;
14188
14189   /* Look for the `:' that begins the list.  */
14190   cp_parser_require (parser, CPP_COLON, "`:'");
14191
14192   /* Scan the base-specifier-list.  */
14193   while (true)
14194     {
14195       cp_token *token;
14196       tree base;
14197
14198       /* Look for the base-specifier.  */
14199       base = cp_parser_base_specifier (parser);
14200       /* Add BASE to the front of the list.  */
14201       if (base != error_mark_node)
14202         {
14203           TREE_CHAIN (base) = bases;
14204           bases = base;
14205         }
14206       /* Peek at the next token.  */
14207       token = cp_lexer_peek_token (parser->lexer);
14208       /* If it's not a comma, then the list is complete.  */
14209       if (token->type != CPP_COMMA)
14210         break;
14211       /* Consume the `,'.  */
14212       cp_lexer_consume_token (parser->lexer);
14213     }
14214
14215   /* PARSER->SCOPE may still be non-NULL at this point, if the last
14216      base class had a qualified name.  However, the next name that
14217      appears is certainly not qualified.  */
14218   parser->scope = NULL_TREE;
14219   parser->qualifying_scope = NULL_TREE;
14220   parser->object_scope = NULL_TREE;
14221
14222   return nreverse (bases);
14223 }
14224
14225 /* Parse a base-specifier.
14226
14227    base-specifier:
14228      :: [opt] nested-name-specifier [opt] class-name
14229      virtual access-specifier [opt] :: [opt] nested-name-specifier
14230        [opt] class-name
14231      access-specifier virtual [opt] :: [opt] nested-name-specifier
14232        [opt] class-name
14233
14234    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
14235    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
14236    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
14237    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
14238
14239 static tree
14240 cp_parser_base_specifier (cp_parser* parser)
14241 {
14242   cp_token *token;
14243   bool done = false;
14244   bool virtual_p = false;
14245   bool duplicate_virtual_error_issued_p = false;
14246   bool duplicate_access_error_issued_p = false;
14247   bool class_scope_p, template_p;
14248   tree access = access_default_node;
14249   tree type;
14250
14251   /* Process the optional `virtual' and `access-specifier'.  */
14252   while (!done)
14253     {
14254       /* Peek at the next token.  */
14255       token = cp_lexer_peek_token (parser->lexer);
14256       /* Process `virtual'.  */
14257       switch (token->keyword)
14258         {
14259         case RID_VIRTUAL:
14260           /* If `virtual' appears more than once, issue an error.  */
14261           if (virtual_p && !duplicate_virtual_error_issued_p)
14262             {
14263               cp_parser_error (parser,
14264                                "%<virtual%> specified more than once in base-specified");
14265               duplicate_virtual_error_issued_p = true;
14266             }
14267
14268           virtual_p = true;
14269
14270           /* Consume the `virtual' token.  */
14271           cp_lexer_consume_token (parser->lexer);
14272
14273           break;
14274
14275         case RID_PUBLIC:
14276         case RID_PROTECTED:
14277         case RID_PRIVATE:
14278           /* If more than one access specifier appears, issue an
14279              error.  */
14280           if (access != access_default_node
14281               && !duplicate_access_error_issued_p)
14282             {
14283               cp_parser_error (parser,
14284                                "more than one access specifier in base-specified");
14285               duplicate_access_error_issued_p = true;
14286             }
14287
14288           access = ridpointers[(int) token->keyword];
14289
14290           /* Consume the access-specifier.  */
14291           cp_lexer_consume_token (parser->lexer);
14292
14293           break;
14294
14295         default:
14296           done = true;
14297           break;
14298         }
14299     }
14300   /* It is not uncommon to see programs mechanically, erroneously, use
14301      the 'typename' keyword to denote (dependent) qualified types
14302      as base classes.  */
14303   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
14304     {
14305       if (!processing_template_decl)
14306         error ("keyword %<typename%> not allowed outside of templates");
14307       else
14308         error ("keyword %<typename%> not allowed in this context "
14309                "(the base class is implicitly a type)");
14310       cp_lexer_consume_token (parser->lexer);
14311     }
14312
14313   /* Look for the optional `::' operator.  */
14314   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
14315   /* Look for the nested-name-specifier.  The simplest way to
14316      implement:
14317
14318        [temp.res]
14319
14320        The keyword `typename' is not permitted in a base-specifier or
14321        mem-initializer; in these contexts a qualified name that
14322        depends on a template-parameter is implicitly assumed to be a
14323        type name.
14324
14325      is to pretend that we have seen the `typename' keyword at this
14326      point.  */
14327   cp_parser_nested_name_specifier_opt (parser,
14328                                        /*typename_keyword_p=*/true,
14329                                        /*check_dependency_p=*/true,
14330                                        typename_type,
14331                                        /*is_declaration=*/true);
14332   /* If the base class is given by a qualified name, assume that names
14333      we see are type names or templates, as appropriate.  */
14334   class_scope_p = (parser->scope && TYPE_P (parser->scope));
14335   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
14336
14337   /* Finally, look for the class-name.  */
14338   type = cp_parser_class_name (parser,
14339                                class_scope_p,
14340                                template_p,
14341                                typename_type,
14342                                /*check_dependency_p=*/true,
14343                                /*class_head_p=*/false,
14344                                /*is_declaration=*/true);
14345
14346   if (type == error_mark_node)
14347     return error_mark_node;
14348
14349   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
14350 }
14351
14352 /* Exception handling [gram.exception] */
14353
14354 /* Parse an (optional) exception-specification.
14355
14356    exception-specification:
14357      throw ( type-id-list [opt] )
14358
14359    Returns a TREE_LIST representing the exception-specification.  The
14360    TREE_VALUE of each node is a type.  */
14361
14362 static tree
14363 cp_parser_exception_specification_opt (cp_parser* parser)
14364 {
14365   cp_token *token;
14366   tree type_id_list;
14367
14368   /* Peek at the next token.  */
14369   token = cp_lexer_peek_token (parser->lexer);
14370   /* If it's not `throw', then there's no exception-specification.  */
14371   if (!cp_parser_is_keyword (token, RID_THROW))
14372     return NULL_TREE;
14373
14374   /* Consume the `throw'.  */
14375   cp_lexer_consume_token (parser->lexer);
14376
14377   /* Look for the `('.  */
14378   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14379
14380   /* Peek at the next token.  */
14381   token = cp_lexer_peek_token (parser->lexer);
14382   /* If it's not a `)', then there is a type-id-list.  */
14383   if (token->type != CPP_CLOSE_PAREN)
14384     {
14385       const char *saved_message;
14386
14387       /* Types may not be defined in an exception-specification.  */
14388       saved_message = parser->type_definition_forbidden_message;
14389       parser->type_definition_forbidden_message
14390         = "types may not be defined in an exception-specification";
14391       /* Parse the type-id-list.  */
14392       type_id_list = cp_parser_type_id_list (parser);
14393       /* Restore the saved message.  */
14394       parser->type_definition_forbidden_message = saved_message;
14395     }
14396   else
14397     type_id_list = empty_except_spec;
14398
14399   /* Look for the `)'.  */
14400   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14401
14402   return type_id_list;
14403 }
14404
14405 /* Parse an (optional) type-id-list.
14406
14407    type-id-list:
14408      type-id
14409      type-id-list , type-id
14410
14411    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
14412    in the order that the types were presented.  */
14413
14414 static tree
14415 cp_parser_type_id_list (cp_parser* parser)
14416 {
14417   tree types = NULL_TREE;
14418
14419   while (true)
14420     {
14421       cp_token *token;
14422       tree type;
14423
14424       /* Get the next type-id.  */
14425       type = cp_parser_type_id (parser);
14426       /* Add it to the list.  */
14427       types = add_exception_specifier (types, type, /*complain=*/1);
14428       /* Peek at the next token.  */
14429       token = cp_lexer_peek_token (parser->lexer);
14430       /* If it is not a `,', we are done.  */
14431       if (token->type != CPP_COMMA)
14432         break;
14433       /* Consume the `,'.  */
14434       cp_lexer_consume_token (parser->lexer);
14435     }
14436
14437   return nreverse (types);
14438 }
14439
14440 /* Parse a try-block.
14441
14442    try-block:
14443      try compound-statement handler-seq  */
14444
14445 static tree
14446 cp_parser_try_block (cp_parser* parser)
14447 {
14448   tree try_block;
14449
14450   cp_parser_require_keyword (parser, RID_TRY, "`try'");
14451   try_block = begin_try_block ();
14452   cp_parser_compound_statement (parser, NULL, true);
14453   finish_try_block (try_block);
14454   cp_parser_handler_seq (parser);
14455   finish_handler_sequence (try_block);
14456
14457   return try_block;
14458 }
14459
14460 /* Parse a function-try-block.
14461
14462    function-try-block:
14463      try ctor-initializer [opt] function-body handler-seq  */
14464
14465 static bool
14466 cp_parser_function_try_block (cp_parser* parser)
14467 {
14468   tree compound_stmt;
14469   tree try_block;
14470   bool ctor_initializer_p;
14471
14472   /* Look for the `try' keyword.  */
14473   if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
14474     return false;
14475   /* Let the rest of the front-end know where we are.  */
14476   try_block = begin_function_try_block (&compound_stmt);
14477   /* Parse the function-body.  */
14478   ctor_initializer_p
14479     = cp_parser_ctor_initializer_opt_and_function_body (parser);
14480   /* We're done with the `try' part.  */
14481   finish_function_try_block (try_block);
14482   /* Parse the handlers.  */
14483   cp_parser_handler_seq (parser);
14484   /* We're done with the handlers.  */
14485   finish_function_handler_sequence (try_block, compound_stmt);
14486
14487   return ctor_initializer_p;
14488 }
14489
14490 /* Parse a handler-seq.
14491
14492    handler-seq:
14493      handler handler-seq [opt]  */
14494
14495 static void
14496 cp_parser_handler_seq (cp_parser* parser)
14497 {
14498   while (true)
14499     {
14500       cp_token *token;
14501
14502       /* Parse the handler.  */
14503       cp_parser_handler (parser);
14504       /* Peek at the next token.  */
14505       token = cp_lexer_peek_token (parser->lexer);
14506       /* If it's not `catch' then there are no more handlers.  */
14507       if (!cp_parser_is_keyword (token, RID_CATCH))
14508         break;
14509     }
14510 }
14511
14512 /* Parse a handler.
14513
14514    handler:
14515      catch ( exception-declaration ) compound-statement  */
14516
14517 static void
14518 cp_parser_handler (cp_parser* parser)
14519 {
14520   tree handler;
14521   tree declaration;
14522
14523   cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
14524   handler = begin_handler ();
14525   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14526   declaration = cp_parser_exception_declaration (parser);
14527   finish_handler_parms (declaration, handler);
14528   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14529   cp_parser_compound_statement (parser, NULL, false);
14530   finish_handler (handler);
14531 }
14532
14533 /* Parse an exception-declaration.
14534
14535    exception-declaration:
14536      type-specifier-seq declarator
14537      type-specifier-seq abstract-declarator
14538      type-specifier-seq
14539      ...
14540
14541    Returns a VAR_DECL for the declaration, or NULL_TREE if the
14542    ellipsis variant is used.  */
14543
14544 static tree
14545 cp_parser_exception_declaration (cp_parser* parser)
14546 {
14547   cp_decl_specifier_seq type_specifiers;
14548   cp_declarator *declarator;
14549   const char *saved_message;
14550
14551   /* If it's an ellipsis, it's easy to handle.  */
14552   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14553     {
14554       /* Consume the `...' token.  */
14555       cp_lexer_consume_token (parser->lexer);
14556       return NULL_TREE;
14557     }
14558
14559   /* Types may not be defined in exception-declarations.  */
14560   saved_message = parser->type_definition_forbidden_message;
14561   parser->type_definition_forbidden_message
14562     = "types may not be defined in exception-declarations";
14563
14564   /* Parse the type-specifier-seq.  */
14565   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
14566                                 &type_specifiers);
14567   /* If it's a `)', then there is no declarator.  */
14568   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
14569     declarator = NULL;
14570   else
14571     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
14572                                        /*ctor_dtor_or_conv_p=*/NULL,
14573                                        /*parenthesized_p=*/NULL,
14574                                        /*member_p=*/false);
14575
14576   /* Restore the saved message.  */
14577   parser->type_definition_forbidden_message = saved_message;
14578
14579   if (!type_specifiers.any_specifiers_p)
14580     return error_mark_node;
14581
14582   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
14583 }
14584
14585 /* Parse a throw-expression.
14586
14587    throw-expression:
14588      throw assignment-expression [opt]
14589
14590    Returns a THROW_EXPR representing the throw-expression.  */
14591
14592 static tree
14593 cp_parser_throw_expression (cp_parser* parser)
14594 {
14595   tree expression;
14596   cp_token* token;
14597
14598   cp_parser_require_keyword (parser, RID_THROW, "`throw'");
14599   token = cp_lexer_peek_token (parser->lexer);
14600   /* Figure out whether or not there is an assignment-expression
14601      following the "throw" keyword.  */
14602   if (token->type == CPP_COMMA
14603       || token->type == CPP_SEMICOLON
14604       || token->type == CPP_CLOSE_PAREN
14605       || token->type == CPP_CLOSE_SQUARE
14606       || token->type == CPP_CLOSE_BRACE
14607       || token->type == CPP_COLON)
14608     expression = NULL_TREE;
14609   else
14610     expression = cp_parser_assignment_expression (parser,
14611                                                   /*cast_p=*/false);
14612
14613   return build_throw (expression);
14614 }
14615
14616 /* GNU Extensions */
14617
14618 /* Parse an (optional) asm-specification.
14619
14620    asm-specification:
14621      asm ( string-literal )
14622
14623    If the asm-specification is present, returns a STRING_CST
14624    corresponding to the string-literal.  Otherwise, returns
14625    NULL_TREE.  */
14626
14627 static tree
14628 cp_parser_asm_specification_opt (cp_parser* parser)
14629 {
14630   cp_token *token;
14631   tree asm_specification;
14632
14633   /* Peek at the next token.  */
14634   token = cp_lexer_peek_token (parser->lexer);
14635   /* If the next token isn't the `asm' keyword, then there's no
14636      asm-specification.  */
14637   if (!cp_parser_is_keyword (token, RID_ASM))
14638     return NULL_TREE;
14639
14640   /* Consume the `asm' token.  */
14641   cp_lexer_consume_token (parser->lexer);
14642   /* Look for the `('.  */
14643   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14644
14645   /* Look for the string-literal.  */
14646   asm_specification = cp_parser_string_literal (parser, false, false);
14647
14648   /* Look for the `)'.  */
14649   cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
14650
14651   return asm_specification;
14652 }
14653
14654 /* Parse an asm-operand-list.
14655
14656    asm-operand-list:
14657      asm-operand
14658      asm-operand-list , asm-operand
14659
14660    asm-operand:
14661      string-literal ( expression )
14662      [ string-literal ] string-literal ( expression )
14663
14664    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
14665    each node is the expression.  The TREE_PURPOSE is itself a
14666    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
14667    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
14668    is a STRING_CST for the string literal before the parenthesis.  */
14669
14670 static tree
14671 cp_parser_asm_operand_list (cp_parser* parser)
14672 {
14673   tree asm_operands = NULL_TREE;
14674
14675   while (true)
14676     {
14677       tree string_literal;
14678       tree expression;
14679       tree name;
14680
14681       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
14682         {
14683           /* Consume the `[' token.  */
14684           cp_lexer_consume_token (parser->lexer);
14685           /* Read the operand name.  */
14686           name = cp_parser_identifier (parser);
14687           if (name != error_mark_node)
14688             name = build_string (IDENTIFIER_LENGTH (name),
14689                                  IDENTIFIER_POINTER (name));
14690           /* Look for the closing `]'.  */
14691           cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
14692         }
14693       else
14694         name = NULL_TREE;
14695       /* Look for the string-literal.  */
14696       string_literal = cp_parser_string_literal (parser, false, false);
14697
14698       /* Look for the `('.  */
14699       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14700       /* Parse the expression.  */
14701       expression = cp_parser_expression (parser, /*cast_p=*/false);
14702       /* Look for the `)'.  */
14703       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14704
14705       /* Add this operand to the list.  */
14706       asm_operands = tree_cons (build_tree_list (name, string_literal),
14707                                 expression,
14708                                 asm_operands);
14709       /* If the next token is not a `,', there are no more
14710          operands.  */
14711       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14712         break;
14713       /* Consume the `,'.  */
14714       cp_lexer_consume_token (parser->lexer);
14715     }
14716
14717   return nreverse (asm_operands);
14718 }
14719
14720 /* Parse an asm-clobber-list.
14721
14722    asm-clobber-list:
14723      string-literal
14724      asm-clobber-list , string-literal
14725
14726    Returns a TREE_LIST, indicating the clobbers in the order that they
14727    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
14728
14729 static tree
14730 cp_parser_asm_clobber_list (cp_parser* parser)
14731 {
14732   tree clobbers = NULL_TREE;
14733
14734   while (true)
14735     {
14736       tree string_literal;
14737
14738       /* Look for the string literal.  */
14739       string_literal = cp_parser_string_literal (parser, false, false);
14740       /* Add it to the list.  */
14741       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
14742       /* If the next token is not a `,', then the list is
14743          complete.  */
14744       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14745         break;
14746       /* Consume the `,' token.  */
14747       cp_lexer_consume_token (parser->lexer);
14748     }
14749
14750   return clobbers;
14751 }
14752
14753 /* Parse an (optional) series of attributes.
14754
14755    attributes:
14756      attributes attribute
14757
14758    attribute:
14759      __attribute__ (( attribute-list [opt] ))
14760
14761    The return value is as for cp_parser_attribute_list.  */
14762
14763 static tree
14764 cp_parser_attributes_opt (cp_parser* parser)
14765 {
14766   tree attributes = NULL_TREE;
14767
14768   while (true)
14769     {
14770       cp_token *token;
14771       tree attribute_list;
14772
14773       /* Peek at the next token.  */
14774       token = cp_lexer_peek_token (parser->lexer);
14775       /* If it's not `__attribute__', then we're done.  */
14776       if (token->keyword != RID_ATTRIBUTE)
14777         break;
14778
14779       /* Consume the `__attribute__' keyword.  */
14780       cp_lexer_consume_token (parser->lexer);
14781       /* Look for the two `(' tokens.  */
14782       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14783       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14784
14785       /* Peek at the next token.  */
14786       token = cp_lexer_peek_token (parser->lexer);
14787       if (token->type != CPP_CLOSE_PAREN)
14788         /* Parse the attribute-list.  */
14789         attribute_list = cp_parser_attribute_list (parser);
14790       else
14791         /* If the next token is a `)', then there is no attribute
14792            list.  */
14793         attribute_list = NULL;
14794
14795       /* Look for the two `)' tokens.  */
14796       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14797       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14798
14799       /* Add these new attributes to the list.  */
14800       attributes = chainon (attributes, attribute_list);
14801     }
14802
14803   return attributes;
14804 }
14805
14806 /* Parse an attribute-list.
14807
14808    attribute-list:
14809      attribute
14810      attribute-list , attribute
14811
14812    attribute:
14813      identifier
14814      identifier ( identifier )
14815      identifier ( identifier , expression-list )
14816      identifier ( expression-list )
14817
14818    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
14819    to an attribute.  The TREE_PURPOSE of each node is the identifier
14820    indicating which attribute is in use.  The TREE_VALUE represents
14821    the arguments, if any.  */
14822
14823 static tree
14824 cp_parser_attribute_list (cp_parser* parser)
14825 {
14826   tree attribute_list = NULL_TREE;
14827   bool save_translate_strings_p = parser->translate_strings_p;
14828
14829   parser->translate_strings_p = false;
14830   while (true)
14831     {
14832       cp_token *token;
14833       tree identifier;
14834       tree attribute;
14835
14836       /* Look for the identifier.  We also allow keywords here; for
14837          example `__attribute__ ((const))' is legal.  */
14838       token = cp_lexer_peek_token (parser->lexer);
14839       if (token->type == CPP_NAME
14840           || token->type == CPP_KEYWORD)
14841         {
14842           tree arguments = NULL_TREE;
14843
14844           /* Consume the token.  */
14845           token = cp_lexer_consume_token (parser->lexer);
14846
14847           /* Save away the identifier that indicates which attribute
14848              this is.  */
14849           identifier = token->u.value;
14850           attribute = build_tree_list (identifier, NULL_TREE);
14851
14852           /* Peek at the next token.  */
14853           token = cp_lexer_peek_token (parser->lexer);
14854           /* If it's an `(', then parse the attribute arguments.  */
14855           if (token->type == CPP_OPEN_PAREN)
14856             {
14857               arguments = cp_parser_parenthesized_expression_list
14858                           (parser, true, /*cast_p=*/false,
14859                            /*non_constant_p=*/NULL);
14860               /* Save the arguments away.  */
14861               TREE_VALUE (attribute) = arguments;
14862             }
14863
14864           if (arguments != error_mark_node)
14865             {
14866               /* Add this attribute to the list.  */
14867               TREE_CHAIN (attribute) = attribute_list;
14868               attribute_list = attribute;
14869             }
14870
14871           token = cp_lexer_peek_token (parser->lexer);
14872         }
14873       /* Now, look for more attributes.  If the next token isn't a
14874          `,', we're done.  */
14875       if (token->type != CPP_COMMA)
14876         break;
14877
14878       /* Consume the comma and keep going.  */
14879       cp_lexer_consume_token (parser->lexer);
14880     }
14881   parser->translate_strings_p = save_translate_strings_p;
14882
14883   /* We built up the list in reverse order.  */
14884   return nreverse (attribute_list);
14885 }
14886
14887 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
14888    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
14889    current value of the PEDANTIC flag, regardless of whether or not
14890    the `__extension__' keyword is present.  The caller is responsible
14891    for restoring the value of the PEDANTIC flag.  */
14892
14893 static bool
14894 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
14895 {
14896   /* Save the old value of the PEDANTIC flag.  */
14897   *saved_pedantic = pedantic;
14898
14899   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
14900     {
14901       /* Consume the `__extension__' token.  */
14902       cp_lexer_consume_token (parser->lexer);
14903       /* We're not being pedantic while the `__extension__' keyword is
14904          in effect.  */
14905       pedantic = 0;
14906
14907       return true;
14908     }
14909
14910   return false;
14911 }
14912
14913 /* Parse a label declaration.
14914
14915    label-declaration:
14916      __label__ label-declarator-seq ;
14917
14918    label-declarator-seq:
14919      identifier , label-declarator-seq
14920      identifier  */
14921
14922 static void
14923 cp_parser_label_declaration (cp_parser* parser)
14924 {
14925   /* Look for the `__label__' keyword.  */
14926   cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
14927
14928   while (true)
14929     {
14930       tree identifier;
14931
14932       /* Look for an identifier.  */
14933       identifier = cp_parser_identifier (parser);
14934       /* If we failed, stop.  */
14935       if (identifier == error_mark_node)
14936         break;
14937       /* Declare it as a label.  */
14938       finish_label_decl (identifier);
14939       /* If the next token is a `;', stop.  */
14940       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14941         break;
14942       /* Look for the `,' separating the label declarations.  */
14943       cp_parser_require (parser, CPP_COMMA, "`,'");
14944     }
14945
14946   /* Look for the final `;'.  */
14947   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14948 }
14949
14950 /* Support Functions */
14951
14952 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
14953    NAME should have one of the representations used for an
14954    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
14955    is returned.  If PARSER->SCOPE is a dependent type, then a
14956    SCOPE_REF is returned.
14957
14958    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
14959    returned; the name was already resolved when the TEMPLATE_ID_EXPR
14960    was formed.  Abstractly, such entities should not be passed to this
14961    function, because they do not need to be looked up, but it is
14962    simpler to check for this special case here, rather than at the
14963    call-sites.
14964
14965    In cases not explicitly covered above, this function returns a
14966    DECL, OVERLOAD, or baselink representing the result of the lookup.
14967    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
14968    is returned.
14969
14970    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
14971    (e.g., "struct") that was used.  In that case bindings that do not
14972    refer to types are ignored.
14973
14974    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
14975    ignored.
14976
14977    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
14978    are ignored.
14979
14980    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
14981    types.
14982
14983    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
14984    TREE_LIST of candidates if name-lookup results in an ambiguity, and
14985    NULL_TREE otherwise.  */
14986
14987 static tree
14988 cp_parser_lookup_name (cp_parser *parser, tree name,
14989                        enum tag_types tag_type,
14990                        bool is_template,
14991                        bool is_namespace,
14992                        bool check_dependency,
14993                        tree *ambiguous_decls)
14994 {
14995   int flags = 0;
14996   tree decl;
14997   tree object_type = parser->context->object_type;
14998
14999   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
15000     flags |= LOOKUP_COMPLAIN;
15001
15002   /* Assume that the lookup will be unambiguous.  */
15003   if (ambiguous_decls)
15004     *ambiguous_decls = NULL_TREE;
15005
15006   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
15007      no longer valid.  Note that if we are parsing tentatively, and
15008      the parse fails, OBJECT_TYPE will be automatically restored.  */
15009   parser->context->object_type = NULL_TREE;
15010
15011   if (name == error_mark_node)
15012     return error_mark_node;
15013
15014   /* A template-id has already been resolved; there is no lookup to
15015      do.  */
15016   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
15017     return name;
15018   if (BASELINK_P (name))
15019     {
15020       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
15021                   == TEMPLATE_ID_EXPR);
15022       return name;
15023     }
15024
15025   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
15026      it should already have been checked to make sure that the name
15027      used matches the type being destroyed.  */
15028   if (TREE_CODE (name) == BIT_NOT_EXPR)
15029     {
15030       tree type;
15031
15032       /* Figure out to which type this destructor applies.  */
15033       if (parser->scope)
15034         type = parser->scope;
15035       else if (object_type)
15036         type = object_type;
15037       else
15038         type = current_class_type;
15039       /* If that's not a class type, there is no destructor.  */
15040       if (!type || !CLASS_TYPE_P (type))
15041         return error_mark_node;
15042       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
15043         lazily_declare_fn (sfk_destructor, type);
15044       if (!CLASSTYPE_DESTRUCTORS (type))
15045           return error_mark_node;
15046       /* If it was a class type, return the destructor.  */
15047       return CLASSTYPE_DESTRUCTORS (type);
15048     }
15049
15050   /* By this point, the NAME should be an ordinary identifier.  If
15051      the id-expression was a qualified name, the qualifying scope is
15052      stored in PARSER->SCOPE at this point.  */
15053   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
15054
15055   /* Perform the lookup.  */
15056   if (parser->scope)
15057     {
15058       bool dependent_p;
15059
15060       if (parser->scope == error_mark_node)
15061         return error_mark_node;
15062
15063       /* If the SCOPE is dependent, the lookup must be deferred until
15064          the template is instantiated -- unless we are explicitly
15065          looking up names in uninstantiated templates.  Even then, we
15066          cannot look up the name if the scope is not a class type; it
15067          might, for example, be a template type parameter.  */
15068       dependent_p = (TYPE_P (parser->scope)
15069                      && !(parser->in_declarator_p
15070                           && currently_open_class (parser->scope))
15071                      && dependent_type_p (parser->scope));
15072       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
15073            && dependent_p)
15074         {
15075           if (tag_type)
15076             {
15077               tree type;
15078
15079               /* The resolution to Core Issue 180 says that `struct
15080                  A::B' should be considered a type-name, even if `A'
15081                  is dependent.  */
15082               type = make_typename_type (parser->scope, name, tag_type,
15083                                          /*complain=*/tf_error);
15084               decl = TYPE_NAME (type);
15085             }
15086           else if (is_template
15087                    && (cp_parser_next_token_ends_template_argument_p (parser)
15088                        || cp_lexer_next_token_is (parser->lexer,
15089                                                   CPP_CLOSE_PAREN)))
15090             decl = make_unbound_class_template (parser->scope,
15091                                                 name, NULL_TREE,
15092                                                 /*complain=*/tf_error);
15093           else
15094             decl = build_qualified_name (/*type=*/NULL_TREE,
15095                                          parser->scope, name,
15096                                          is_template);
15097         }
15098       else
15099         {
15100           tree pushed_scope = NULL_TREE;
15101
15102           /* If PARSER->SCOPE is a dependent type, then it must be a
15103              class type, and we must not be checking dependencies;
15104              otherwise, we would have processed this lookup above.  So
15105              that PARSER->SCOPE is not considered a dependent base by
15106              lookup_member, we must enter the scope here.  */
15107           if (dependent_p)
15108             pushed_scope = push_scope (parser->scope);
15109           /* If the PARSER->SCOPE is a template specialization, it
15110              may be instantiated during name lookup.  In that case,
15111              errors may be issued.  Even if we rollback the current
15112              tentative parse, those errors are valid.  */
15113           decl = lookup_qualified_name (parser->scope, name,
15114                                         tag_type != none_type,
15115                                         /*complain=*/true);
15116           if (pushed_scope)
15117             pop_scope (pushed_scope);
15118         }
15119       parser->qualifying_scope = parser->scope;
15120       parser->object_scope = NULL_TREE;
15121     }
15122   else if (object_type)
15123     {
15124       tree object_decl = NULL_TREE;
15125       /* Look up the name in the scope of the OBJECT_TYPE, unless the
15126          OBJECT_TYPE is not a class.  */
15127       if (CLASS_TYPE_P (object_type))
15128         /* If the OBJECT_TYPE is a template specialization, it may
15129            be instantiated during name lookup.  In that case, errors
15130            may be issued.  Even if we rollback the current tentative
15131            parse, those errors are valid.  */
15132         object_decl = lookup_member (object_type,
15133                                      name,
15134                                      /*protect=*/0,
15135                                      tag_type != none_type);
15136       /* Look it up in the enclosing context, too.  */
15137       decl = lookup_name_real (name, tag_type != none_type,
15138                                /*nonclass=*/0,
15139                                /*block_p=*/true, is_namespace, flags);
15140       parser->object_scope = object_type;
15141       parser->qualifying_scope = NULL_TREE;
15142       if (object_decl)
15143         decl = object_decl;
15144     }
15145   else
15146     {
15147       decl = lookup_name_real (name, tag_type != none_type,
15148                                /*nonclass=*/0,
15149                                /*block_p=*/true, is_namespace, flags);
15150       parser->qualifying_scope = NULL_TREE;
15151       parser->object_scope = NULL_TREE;
15152     }
15153
15154   /* If the lookup failed, let our caller know.  */
15155   if (!decl || decl == error_mark_node)
15156     return error_mark_node;
15157
15158   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
15159   if (TREE_CODE (decl) == TREE_LIST)
15160     {
15161       if (ambiguous_decls)
15162         *ambiguous_decls = decl;
15163       /* The error message we have to print is too complicated for
15164          cp_parser_error, so we incorporate its actions directly.  */
15165       if (!cp_parser_simulate_error (parser))
15166         {
15167           error ("reference to %qD is ambiguous", name);
15168           print_candidates (decl);
15169         }
15170       return error_mark_node;
15171     }
15172
15173   gcc_assert (DECL_P (decl)
15174               || TREE_CODE (decl) == OVERLOAD
15175               || TREE_CODE (decl) == SCOPE_REF
15176               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
15177               || BASELINK_P (decl));
15178
15179   /* If we have resolved the name of a member declaration, check to
15180      see if the declaration is accessible.  When the name resolves to
15181      set of overloaded functions, accessibility is checked when
15182      overload resolution is done.
15183
15184      During an explicit instantiation, access is not checked at all,
15185      as per [temp.explicit].  */
15186   if (DECL_P (decl))
15187     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
15188
15189   return decl;
15190 }
15191
15192 /* Like cp_parser_lookup_name, but for use in the typical case where
15193    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
15194    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
15195
15196 static tree
15197 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
15198 {
15199   return cp_parser_lookup_name (parser, name,
15200                                 none_type,
15201                                 /*is_template=*/false,
15202                                 /*is_namespace=*/false,
15203                                 /*check_dependency=*/true,
15204                                 /*ambiguous_decls=*/NULL);
15205 }
15206
15207 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
15208    the current context, return the TYPE_DECL.  If TAG_NAME_P is
15209    true, the DECL indicates the class being defined in a class-head,
15210    or declared in an elaborated-type-specifier.
15211
15212    Otherwise, return DECL.  */
15213
15214 static tree
15215 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
15216 {
15217   /* If the TEMPLATE_DECL is being declared as part of a class-head,
15218      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
15219
15220        struct A {
15221          template <typename T> struct B;
15222        };
15223
15224        template <typename T> struct A::B {};
15225
15226      Similarly, in an elaborated-type-specifier:
15227
15228        namespace N { struct X{}; }
15229
15230        struct A {
15231          template <typename T> friend struct N::X;
15232        };
15233
15234      However, if the DECL refers to a class type, and we are in
15235      the scope of the class, then the name lookup automatically
15236      finds the TYPE_DECL created by build_self_reference rather
15237      than a TEMPLATE_DECL.  For example, in:
15238
15239        template <class T> struct S {
15240          S s;
15241        };
15242
15243      there is no need to handle such case.  */
15244
15245   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
15246     return DECL_TEMPLATE_RESULT (decl);
15247
15248   return decl;
15249 }
15250
15251 /* If too many, or too few, template-parameter lists apply to the
15252    declarator, issue an error message.  Returns TRUE if all went well,
15253    and FALSE otherwise.  */
15254
15255 static bool
15256 cp_parser_check_declarator_template_parameters (cp_parser* parser,
15257                                                 cp_declarator *declarator)
15258 {
15259   unsigned num_templates;
15260
15261   /* We haven't seen any classes that involve template parameters yet.  */
15262   num_templates = 0;
15263
15264   switch (declarator->kind)
15265     {
15266     case cdk_id:
15267       if (declarator->u.id.qualifying_scope)
15268         {
15269           tree scope;
15270           tree member;
15271
15272           scope = declarator->u.id.qualifying_scope;
15273           member = declarator->u.id.unqualified_name;
15274
15275           while (scope && CLASS_TYPE_P (scope))
15276             {
15277               /* You're supposed to have one `template <...>'
15278                  for every template class, but you don't need one
15279                  for a full specialization.  For example:
15280
15281                  template <class T> struct S{};
15282                  template <> struct S<int> { void f(); };
15283                  void S<int>::f () {}
15284
15285                  is correct; there shouldn't be a `template <>' for
15286                  the definition of `S<int>::f'.  */
15287               if (!CLASSTYPE_TEMPLATE_INFO (scope))
15288                 /* If SCOPE does not have template information of any
15289                    kind, then it is not a template, nor is it nested
15290                    within a template.  */
15291                 break;
15292               if (explicit_class_specialization_p (scope))
15293                 break;
15294               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
15295                 ++num_templates;
15296
15297               scope = TYPE_CONTEXT (scope);
15298             }
15299         }
15300       else if (TREE_CODE (declarator->u.id.unqualified_name)
15301                == TEMPLATE_ID_EXPR)
15302         /* If the DECLARATOR has the form `X<y>' then it uses one
15303            additional level of template parameters.  */
15304         ++num_templates;
15305
15306       return cp_parser_check_template_parameters (parser,
15307                                                   num_templates);
15308
15309     case cdk_function:
15310     case cdk_array:
15311     case cdk_pointer:
15312     case cdk_reference:
15313     case cdk_ptrmem:
15314       return (cp_parser_check_declarator_template_parameters
15315               (parser, declarator->declarator));
15316
15317     case cdk_error:
15318       return true;
15319
15320     default:
15321       gcc_unreachable ();
15322     }
15323   return false;
15324 }
15325
15326 /* NUM_TEMPLATES were used in the current declaration.  If that is
15327    invalid, return FALSE and issue an error messages.  Otherwise,
15328    return TRUE.  */
15329
15330 static bool
15331 cp_parser_check_template_parameters (cp_parser* parser,
15332                                      unsigned num_templates)
15333 {
15334   /* If there are more template classes than parameter lists, we have
15335      something like:
15336
15337        template <class T> void S<T>::R<T>::f ();  */
15338   if (parser->num_template_parameter_lists < num_templates)
15339     {
15340       error ("too few template-parameter-lists");
15341       return false;
15342     }
15343   /* If there are the same number of template classes and parameter
15344      lists, that's OK.  */
15345   if (parser->num_template_parameter_lists == num_templates)
15346     return true;
15347   /* If there are more, but only one more, then we are referring to a
15348      member template.  That's OK too.  */
15349   if (parser->num_template_parameter_lists == num_templates + 1)
15350       return true;
15351   /* Otherwise, there are too many template parameter lists.  We have
15352      something like:
15353
15354      template <class T> template <class U> void S::f();  */
15355   error ("too many template-parameter-lists");
15356   return false;
15357 }
15358
15359 /* Parse an optional `::' token indicating that the following name is
15360    from the global namespace.  If so, PARSER->SCOPE is set to the
15361    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
15362    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
15363    Returns the new value of PARSER->SCOPE, if the `::' token is
15364    present, and NULL_TREE otherwise.  */
15365
15366 static tree
15367 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
15368 {
15369   cp_token *token;
15370
15371   /* Peek at the next token.  */
15372   token = cp_lexer_peek_token (parser->lexer);
15373   /* If we're looking at a `::' token then we're starting from the
15374      global namespace, not our current location.  */
15375   if (token->type == CPP_SCOPE)
15376     {
15377       /* Consume the `::' token.  */
15378       cp_lexer_consume_token (parser->lexer);
15379       /* Set the SCOPE so that we know where to start the lookup.  */
15380       parser->scope = global_namespace;
15381       parser->qualifying_scope = global_namespace;
15382       parser->object_scope = NULL_TREE;
15383
15384       return parser->scope;
15385     }
15386   else if (!current_scope_valid_p)
15387     {
15388       parser->scope = NULL_TREE;
15389       parser->qualifying_scope = NULL_TREE;
15390       parser->object_scope = NULL_TREE;
15391     }
15392
15393   return NULL_TREE;
15394 }
15395
15396 /* Returns TRUE if the upcoming token sequence is the start of a
15397    constructor declarator.  If FRIEND_P is true, the declarator is
15398    preceded by the `friend' specifier.  */
15399
15400 static bool
15401 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
15402 {
15403   bool constructor_p;
15404   tree type_decl = NULL_TREE;
15405   bool nested_name_p;
15406   cp_token *next_token;
15407
15408   /* The common case is that this is not a constructor declarator, so
15409      try to avoid doing lots of work if at all possible.  It's not
15410      valid declare a constructor at function scope.  */
15411   if (parser->in_function_body)
15412     return false;
15413   /* And only certain tokens can begin a constructor declarator.  */
15414   next_token = cp_lexer_peek_token (parser->lexer);
15415   if (next_token->type != CPP_NAME
15416       && next_token->type != CPP_SCOPE
15417       && next_token->type != CPP_NESTED_NAME_SPECIFIER
15418       && next_token->type != CPP_TEMPLATE_ID)
15419     return false;
15420
15421   /* Parse tentatively; we are going to roll back all of the tokens
15422      consumed here.  */
15423   cp_parser_parse_tentatively (parser);
15424   /* Assume that we are looking at a constructor declarator.  */
15425   constructor_p = true;
15426
15427   /* Look for the optional `::' operator.  */
15428   cp_parser_global_scope_opt (parser,
15429                               /*current_scope_valid_p=*/false);
15430   /* Look for the nested-name-specifier.  */
15431   nested_name_p
15432     = (cp_parser_nested_name_specifier_opt (parser,
15433                                             /*typename_keyword_p=*/false,
15434                                             /*check_dependency_p=*/false,
15435                                             /*type_p=*/false,
15436                                             /*is_declaration=*/false)
15437        != NULL_TREE);
15438   /* Outside of a class-specifier, there must be a
15439      nested-name-specifier.  */
15440   if (!nested_name_p &&
15441       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
15442        || friend_p))
15443     constructor_p = false;
15444   /* If we still think that this might be a constructor-declarator,
15445      look for a class-name.  */
15446   if (constructor_p)
15447     {
15448       /* If we have:
15449
15450            template <typename T> struct S { S(); };
15451            template <typename T> S<T>::S ();
15452
15453          we must recognize that the nested `S' names a class.
15454          Similarly, for:
15455
15456            template <typename T> S<T>::S<T> ();
15457
15458          we must recognize that the nested `S' names a template.  */
15459       type_decl = cp_parser_class_name (parser,
15460                                         /*typename_keyword_p=*/false,
15461                                         /*template_keyword_p=*/false,
15462                                         none_type,
15463                                         /*check_dependency_p=*/false,
15464                                         /*class_head_p=*/false,
15465                                         /*is_declaration=*/false);
15466       /* If there was no class-name, then this is not a constructor.  */
15467       constructor_p = !cp_parser_error_occurred (parser);
15468     }
15469
15470   /* If we're still considering a constructor, we have to see a `(',
15471      to begin the parameter-declaration-clause, followed by either a
15472      `)', an `...', or a decl-specifier.  We need to check for a
15473      type-specifier to avoid being fooled into thinking that:
15474
15475        S::S (f) (int);
15476
15477      is a constructor.  (It is actually a function named `f' that
15478      takes one parameter (of type `int') and returns a value of type
15479      `S::S'.  */
15480   if (constructor_p
15481       && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
15482     {
15483       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
15484           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
15485           /* A parameter declaration begins with a decl-specifier,
15486              which is either the "attribute" keyword, a storage class
15487              specifier, or (usually) a type-specifier.  */
15488           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
15489         {
15490           tree type;
15491           tree pushed_scope = NULL_TREE;
15492           unsigned saved_num_template_parameter_lists;
15493
15494           /* Names appearing in the type-specifier should be looked up
15495              in the scope of the class.  */
15496           if (current_class_type)
15497             type = NULL_TREE;
15498           else
15499             {
15500               type = TREE_TYPE (type_decl);
15501               if (TREE_CODE (type) == TYPENAME_TYPE)
15502                 {
15503                   type = resolve_typename_type (type,
15504                                                 /*only_current_p=*/false);
15505                   if (type == error_mark_node)
15506                     {
15507                       cp_parser_abort_tentative_parse (parser);
15508                       return false;
15509                     }
15510                 }
15511               pushed_scope = push_scope (type);
15512             }
15513
15514           /* Inside the constructor parameter list, surrounding
15515              template-parameter-lists do not apply.  */
15516           saved_num_template_parameter_lists
15517             = parser->num_template_parameter_lists;
15518           parser->num_template_parameter_lists = 0;
15519
15520           /* Look for the type-specifier.  */
15521           cp_parser_type_specifier (parser,
15522                                     CP_PARSER_FLAGS_NONE,
15523                                     /*decl_specs=*/NULL,
15524                                     /*is_declarator=*/true,
15525                                     /*declares_class_or_enum=*/NULL,
15526                                     /*is_cv_qualifier=*/NULL);
15527
15528           parser->num_template_parameter_lists
15529             = saved_num_template_parameter_lists;
15530
15531           /* Leave the scope of the class.  */
15532           if (pushed_scope)
15533             pop_scope (pushed_scope);
15534
15535           constructor_p = !cp_parser_error_occurred (parser);
15536         }
15537     }
15538   else
15539     constructor_p = false;
15540   /* We did not really want to consume any tokens.  */
15541   cp_parser_abort_tentative_parse (parser);
15542
15543   return constructor_p;
15544 }
15545
15546 /* Parse the definition of the function given by the DECL_SPECIFIERS,
15547    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
15548    they must be performed once we are in the scope of the function.
15549
15550    Returns the function defined.  */
15551
15552 static tree
15553 cp_parser_function_definition_from_specifiers_and_declarator
15554   (cp_parser* parser,
15555    cp_decl_specifier_seq *decl_specifiers,
15556    tree attributes,
15557    const cp_declarator *declarator)
15558 {
15559   tree fn;
15560   bool success_p;
15561
15562   /* Begin the function-definition.  */
15563   success_p = start_function (decl_specifiers, declarator, attributes);
15564
15565   /* The things we're about to see are not directly qualified by any
15566      template headers we've seen thus far.  */
15567   reset_specialization ();
15568
15569   /* If there were names looked up in the decl-specifier-seq that we
15570      did not check, check them now.  We must wait until we are in the
15571      scope of the function to perform the checks, since the function
15572      might be a friend.  */
15573   perform_deferred_access_checks ();
15574
15575   if (!success_p)
15576     {
15577       /* Skip the entire function.  */
15578       cp_parser_skip_to_end_of_block_or_statement (parser);
15579       fn = error_mark_node;
15580     }
15581   else
15582     fn = cp_parser_function_definition_after_declarator (parser,
15583                                                          /*inline_p=*/false);
15584
15585   return fn;
15586 }
15587
15588 /* Parse the part of a function-definition that follows the
15589    declarator.  INLINE_P is TRUE iff this function is an inline
15590    function defined with a class-specifier.
15591
15592    Returns the function defined.  */
15593
15594 static tree
15595 cp_parser_function_definition_after_declarator (cp_parser* parser,
15596                                                 bool inline_p)
15597 {
15598   tree fn;
15599   bool ctor_initializer_p = false;
15600   bool saved_in_unbraced_linkage_specification_p;
15601   bool saved_in_function_body;
15602   unsigned saved_num_template_parameter_lists;
15603
15604   saved_in_function_body = parser->in_function_body;
15605   parser->in_function_body = true;
15606   /* If the next token is `return', then the code may be trying to
15607      make use of the "named return value" extension that G++ used to
15608      support.  */
15609   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
15610     {
15611       /* Consume the `return' keyword.  */
15612       cp_lexer_consume_token (parser->lexer);
15613       /* Look for the identifier that indicates what value is to be
15614          returned.  */
15615       cp_parser_identifier (parser);
15616       /* Issue an error message.  */
15617       error ("named return values are no longer supported");
15618       /* Skip tokens until we reach the start of the function body.  */
15619       while (true)
15620         {
15621           cp_token *token = cp_lexer_peek_token (parser->lexer);
15622           if (token->type == CPP_OPEN_BRACE
15623               || token->type == CPP_EOF
15624               || token->type == CPP_PRAGMA_EOL)
15625             break;
15626           cp_lexer_consume_token (parser->lexer);
15627         }
15628     }
15629   /* The `extern' in `extern "C" void f () { ... }' does not apply to
15630      anything declared inside `f'.  */
15631   saved_in_unbraced_linkage_specification_p
15632     = parser->in_unbraced_linkage_specification_p;
15633   parser->in_unbraced_linkage_specification_p = false;
15634   /* Inside the function, surrounding template-parameter-lists do not
15635      apply.  */
15636   saved_num_template_parameter_lists
15637     = parser->num_template_parameter_lists;
15638   parser->num_template_parameter_lists = 0;
15639   /* If the next token is `try', then we are looking at a
15640      function-try-block.  */
15641   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
15642     ctor_initializer_p = cp_parser_function_try_block (parser);
15643   /* A function-try-block includes the function-body, so we only do
15644      this next part if we're not processing a function-try-block.  */
15645   else
15646     ctor_initializer_p
15647       = cp_parser_ctor_initializer_opt_and_function_body (parser);
15648
15649   /* Finish the function.  */
15650   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
15651                         (inline_p ? 2 : 0));
15652   /* Generate code for it, if necessary.  */
15653   expand_or_defer_fn (fn);
15654   /* Restore the saved values.  */
15655   parser->in_unbraced_linkage_specification_p
15656     = saved_in_unbraced_linkage_specification_p;
15657   parser->num_template_parameter_lists
15658     = saved_num_template_parameter_lists;
15659   parser->in_function_body = saved_in_function_body;
15660
15661   return fn;
15662 }
15663
15664 /* Parse a template-declaration, assuming that the `export' (and
15665    `extern') keywords, if present, has already been scanned.  MEMBER_P
15666    is as for cp_parser_template_declaration.  */
15667
15668 static void
15669 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
15670 {
15671   tree decl = NULL_TREE;
15672   VEC (deferred_access_check,gc) *checks;
15673   tree parameter_list;
15674   bool friend_p = false;
15675   bool need_lang_pop;
15676
15677   /* Look for the `template' keyword.  */
15678   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
15679     return;
15680
15681   /* And the `<'.  */
15682   if (!cp_parser_require (parser, CPP_LESS, "`<'"))
15683     return;
15684   if (at_class_scope_p () && current_function_decl)
15685     {
15686       /* 14.5.2.2 [temp.mem]
15687
15688          A local class shall not have member templates.  */
15689       error ("invalid declaration of member template in local class");
15690       cp_parser_skip_to_end_of_block_or_statement (parser);
15691       return;
15692     }
15693   /* [temp]
15694
15695      A template ... shall not have C linkage.  */
15696   if (current_lang_name == lang_name_c)
15697     {
15698       error ("template with C linkage");
15699       /* Give it C++ linkage to avoid confusing other parts of the
15700          front end.  */
15701       push_lang_context (lang_name_cplusplus);
15702       need_lang_pop = true;
15703     }
15704   else
15705     need_lang_pop = false;
15706
15707   /* We cannot perform access checks on the template parameter
15708      declarations until we know what is being declared, just as we
15709      cannot check the decl-specifier list.  */
15710   push_deferring_access_checks (dk_deferred);
15711
15712   /* If the next token is `>', then we have an invalid
15713      specialization.  Rather than complain about an invalid template
15714      parameter, issue an error message here.  */
15715   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15716     {
15717       cp_parser_error (parser, "invalid explicit specialization");
15718       begin_specialization ();
15719       parameter_list = NULL_TREE;
15720     }
15721   else
15722     /* Parse the template parameters.  */
15723     parameter_list = cp_parser_template_parameter_list (parser);
15724
15725   /* Get the deferred access checks from the parameter list.  These
15726      will be checked once we know what is being declared, as for a
15727      member template the checks must be performed in the scope of the
15728      class containing the member.  */
15729   checks = get_deferred_access_checks ();
15730
15731   /* Look for the `>'.  */
15732   cp_parser_skip_to_end_of_template_parameter_list (parser);
15733   /* We just processed one more parameter list.  */
15734   ++parser->num_template_parameter_lists;
15735   /* If the next token is `template', there are more template
15736      parameters.  */
15737   if (cp_lexer_next_token_is_keyword (parser->lexer,
15738                                       RID_TEMPLATE))
15739     cp_parser_template_declaration_after_export (parser, member_p);
15740   else
15741     {
15742       /* There are no access checks when parsing a template, as we do not
15743          know if a specialization will be a friend.  */
15744       push_deferring_access_checks (dk_no_check);
15745       decl = cp_parser_single_declaration (parser,
15746                                            checks,
15747                                            member_p,
15748                                            &friend_p);
15749       pop_deferring_access_checks ();
15750
15751       /* If this is a member template declaration, let the front
15752          end know.  */
15753       if (member_p && !friend_p && decl)
15754         {
15755           if (TREE_CODE (decl) == TYPE_DECL)
15756             cp_parser_check_access_in_redeclaration (decl);
15757
15758           decl = finish_member_template_decl (decl);
15759         }
15760       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
15761         make_friend_class (current_class_type, TREE_TYPE (decl),
15762                            /*complain=*/true);
15763     }
15764   /* We are done with the current parameter list.  */
15765   --parser->num_template_parameter_lists;
15766
15767   pop_deferring_access_checks ();
15768
15769   /* Finish up.  */
15770   finish_template_decl (parameter_list);
15771
15772   /* Register member declarations.  */
15773   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
15774     finish_member_declaration (decl);
15775   /* For the erroneous case of a template with C linkage, we pushed an
15776      implicit C++ linkage scope; exit that scope now.  */
15777   if (need_lang_pop)
15778     pop_lang_context ();
15779   /* If DECL is a function template, we must return to parse it later.
15780      (Even though there is no definition, there might be default
15781      arguments that need handling.)  */
15782   if (member_p && decl
15783       && (TREE_CODE (decl) == FUNCTION_DECL
15784           || DECL_FUNCTION_TEMPLATE_P (decl)))
15785     TREE_VALUE (parser->unparsed_functions_queues)
15786       = tree_cons (NULL_TREE, decl,
15787                    TREE_VALUE (parser->unparsed_functions_queues));
15788 }
15789
15790 /* Perform the deferred access checks from a template-parameter-list.
15791    CHECKS is a TREE_LIST of access checks, as returned by
15792    get_deferred_access_checks.  */
15793
15794 static void
15795 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
15796 {
15797   ++processing_template_parmlist;
15798   perform_access_checks (checks);
15799   --processing_template_parmlist;
15800 }
15801
15802 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
15803    `function-definition' sequence.  MEMBER_P is true, this declaration
15804    appears in a class scope.
15805
15806    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
15807    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
15808
15809 static tree
15810 cp_parser_single_declaration (cp_parser* parser,
15811                               VEC (deferred_access_check,gc)* checks,
15812                               bool member_p,
15813                               bool* friend_p)
15814 {
15815   int declares_class_or_enum;
15816   tree decl = NULL_TREE;
15817   cp_decl_specifier_seq decl_specifiers;
15818   bool function_definition_p = false;
15819
15820   /* This function is only used when processing a template
15821      declaration.  */
15822   gcc_assert (innermost_scope_kind () == sk_template_parms
15823               || innermost_scope_kind () == sk_template_spec);
15824
15825   /* Defer access checks until we know what is being declared.  */
15826   push_deferring_access_checks (dk_deferred);
15827
15828   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
15829      alternative.  */
15830   cp_parser_decl_specifier_seq (parser,
15831                                 CP_PARSER_FLAGS_OPTIONAL,
15832                                 &decl_specifiers,
15833                                 &declares_class_or_enum);
15834   if (friend_p)
15835     *friend_p = cp_parser_friend_p (&decl_specifiers);
15836
15837   /* There are no template typedefs.  */
15838   if (decl_specifiers.specs[(int) ds_typedef])
15839     {
15840       error ("template declaration of %qs", "typedef");
15841       decl = error_mark_node;
15842     }
15843
15844   /* Gather up the access checks that occurred the
15845      decl-specifier-seq.  */
15846   stop_deferring_access_checks ();
15847
15848   /* Check for the declaration of a template class.  */
15849   if (declares_class_or_enum)
15850     {
15851       if (cp_parser_declares_only_class_p (parser))
15852         {
15853           decl = shadow_tag (&decl_specifiers);
15854
15855           /* In this case:
15856
15857                struct C {
15858                  friend template <typename T> struct A<T>::B;
15859                };
15860
15861              A<T>::B will be represented by a TYPENAME_TYPE, and
15862              therefore not recognized by shadow_tag.  */
15863           if (friend_p && *friend_p
15864               && !decl
15865               && decl_specifiers.type
15866               && TYPE_P (decl_specifiers.type))
15867             decl = decl_specifiers.type;
15868
15869           if (decl && decl != error_mark_node)
15870             decl = TYPE_NAME (decl);
15871           else
15872             decl = error_mark_node;
15873
15874           /* Perform access checks for template parameters.  */
15875           cp_parser_perform_template_parameter_access_checks (checks);
15876         }
15877     }
15878   /* If it's not a template class, try for a template function.  If
15879      the next token is a `;', then this declaration does not declare
15880      anything.  But, if there were errors in the decl-specifiers, then
15881      the error might well have come from an attempted class-specifier.
15882      In that case, there's no need to warn about a missing declarator.  */
15883   if (!decl
15884       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
15885           || decl_specifiers.type != error_mark_node))
15886     decl = cp_parser_init_declarator (parser,
15887                                       &decl_specifiers,
15888                                       checks,
15889                                       /*function_definition_allowed_p=*/true,
15890                                       member_p,
15891                                       declares_class_or_enum,
15892                                       &function_definition_p);
15893
15894   pop_deferring_access_checks ();
15895
15896   /* Clear any current qualification; whatever comes next is the start
15897      of something new.  */
15898   parser->scope = NULL_TREE;
15899   parser->qualifying_scope = NULL_TREE;
15900   parser->object_scope = NULL_TREE;
15901   /* Look for a trailing `;' after the declaration.  */
15902   if (!function_definition_p
15903       && (decl == error_mark_node
15904           || !cp_parser_require (parser, CPP_SEMICOLON, "`;'")))
15905     cp_parser_skip_to_end_of_block_or_statement (parser);
15906
15907   return decl;
15908 }
15909
15910 /* Parse a cast-expression that is not the operand of a unary "&".  */
15911
15912 static tree
15913 cp_parser_simple_cast_expression (cp_parser *parser)
15914 {
15915   return cp_parser_cast_expression (parser, /*address_p=*/false,
15916                                     /*cast_p=*/false);
15917 }
15918
15919 /* Parse a functional cast to TYPE.  Returns an expression
15920    representing the cast.  */
15921
15922 static tree
15923 cp_parser_functional_cast (cp_parser* parser, tree type)
15924 {
15925   tree expression_list;
15926   tree cast;
15927
15928   expression_list
15929     = cp_parser_parenthesized_expression_list (parser, false,
15930                                                /*cast_p=*/true,
15931                                                /*non_constant_p=*/NULL);
15932
15933   cast = build_functional_cast (type, expression_list);
15934   /* [expr.const]/1: In an integral constant expression "only type
15935      conversions to integral or enumeration type can be used".  */
15936   if (TREE_CODE (type) == TYPE_DECL)
15937     type = TREE_TYPE (type);
15938   if (cast != error_mark_node
15939       && !cast_valid_in_integral_constant_expression_p (type)
15940       && (cp_parser_non_integral_constant_expression
15941           (parser, "a call to a constructor")))
15942     return error_mark_node;
15943   return cast;
15944 }
15945
15946 /* Save the tokens that make up the body of a member function defined
15947    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
15948    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
15949    specifiers applied to the declaration.  Returns the FUNCTION_DECL
15950    for the member function.  */
15951
15952 static tree
15953 cp_parser_save_member_function_body (cp_parser* parser,
15954                                      cp_decl_specifier_seq *decl_specifiers,
15955                                      cp_declarator *declarator,
15956                                      tree attributes)
15957 {
15958   cp_token *first;
15959   cp_token *last;
15960   tree fn;
15961
15962   /* Create the function-declaration.  */
15963   fn = start_method (decl_specifiers, declarator, attributes);
15964   /* If something went badly wrong, bail out now.  */
15965   if (fn == error_mark_node)
15966     {
15967       /* If there's a function-body, skip it.  */
15968       if (cp_parser_token_starts_function_definition_p
15969           (cp_lexer_peek_token (parser->lexer)))
15970         cp_parser_skip_to_end_of_block_or_statement (parser);
15971       return error_mark_node;
15972     }
15973
15974   /* Remember it, if there default args to post process.  */
15975   cp_parser_save_default_args (parser, fn);
15976
15977   /* Save away the tokens that make up the body of the
15978      function.  */
15979   first = parser->lexer->next_token;
15980   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15981   /* Handle function try blocks.  */
15982   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
15983     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15984   last = parser->lexer->next_token;
15985
15986   /* Save away the inline definition; we will process it when the
15987      class is complete.  */
15988   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
15989   DECL_PENDING_INLINE_P (fn) = 1;
15990
15991   /* We need to know that this was defined in the class, so that
15992      friend templates are handled correctly.  */
15993   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
15994
15995   /* We're done with the inline definition.  */
15996   finish_method (fn);
15997
15998   /* Add FN to the queue of functions to be parsed later.  */
15999   TREE_VALUE (parser->unparsed_functions_queues)
16000     = tree_cons (NULL_TREE, fn,
16001                  TREE_VALUE (parser->unparsed_functions_queues));
16002
16003   return fn;
16004 }
16005
16006 /* Parse a template-argument-list, as well as the trailing ">" (but
16007    not the opening ">").  See cp_parser_template_argument_list for the
16008    return value.  */
16009
16010 static tree
16011 cp_parser_enclosed_template_argument_list (cp_parser* parser)
16012 {
16013   tree arguments;
16014   tree saved_scope;
16015   tree saved_qualifying_scope;
16016   tree saved_object_scope;
16017   bool saved_greater_than_is_operator_p;
16018   bool saved_skip_evaluation;
16019
16020   /* [temp.names]
16021
16022      When parsing a template-id, the first non-nested `>' is taken as
16023      the end of the template-argument-list rather than a greater-than
16024      operator.  */
16025   saved_greater_than_is_operator_p
16026     = parser->greater_than_is_operator_p;
16027   parser->greater_than_is_operator_p = false;
16028   /* Parsing the argument list may modify SCOPE, so we save it
16029      here.  */
16030   saved_scope = parser->scope;
16031   saved_qualifying_scope = parser->qualifying_scope;
16032   saved_object_scope = parser->object_scope;
16033   /* We need to evaluate the template arguments, even though this
16034      template-id may be nested within a "sizeof".  */
16035   saved_skip_evaluation = skip_evaluation;
16036   skip_evaluation = false;
16037   /* Parse the template-argument-list itself.  */
16038   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
16039     arguments = NULL_TREE;
16040   else
16041     arguments = cp_parser_template_argument_list (parser);
16042   /* Look for the `>' that ends the template-argument-list. If we find
16043      a '>>' instead, it's probably just a typo.  */
16044   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
16045     {
16046       if (!saved_greater_than_is_operator_p)
16047         {
16048           /* If we're in a nested template argument list, the '>>' has
16049             to be a typo for '> >'. We emit the error message, but we
16050             continue parsing and we push a '>' as next token, so that
16051             the argument list will be parsed correctly.  Note that the
16052             global source location is still on the token before the
16053             '>>', so we need to say explicitly where we want it.  */
16054           cp_token *token = cp_lexer_peek_token (parser->lexer);
16055           error ("%H%<>>%> should be %<> >%> "
16056                  "within a nested template argument list",
16057                  &token->location);
16058
16059           /* ??? Proper recovery should terminate two levels of
16060              template argument list here.  */
16061           token->type = CPP_GREATER;
16062         }
16063       else
16064         {
16065           /* If this is not a nested template argument list, the '>>'
16066             is a typo for '>'. Emit an error message and continue.
16067             Same deal about the token location, but here we can get it
16068             right by consuming the '>>' before issuing the diagnostic.  */
16069           cp_lexer_consume_token (parser->lexer);
16070           error ("spurious %<>>%>, use %<>%> to terminate "
16071                  "a template argument list");
16072         }
16073     }
16074   else
16075     cp_parser_skip_to_end_of_template_parameter_list (parser);
16076   /* The `>' token might be a greater-than operator again now.  */
16077   parser->greater_than_is_operator_p
16078     = saved_greater_than_is_operator_p;
16079   /* Restore the SAVED_SCOPE.  */
16080   parser->scope = saved_scope;
16081   parser->qualifying_scope = saved_qualifying_scope;
16082   parser->object_scope = saved_object_scope;
16083   skip_evaluation = saved_skip_evaluation;
16084
16085   return arguments;
16086 }
16087
16088 /* MEMBER_FUNCTION is a member function, or a friend.  If default
16089    arguments, or the body of the function have not yet been parsed,
16090    parse them now.  */
16091
16092 static void
16093 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
16094 {
16095   /* If this member is a template, get the underlying
16096      FUNCTION_DECL.  */
16097   if (DECL_FUNCTION_TEMPLATE_P (member_function))
16098     member_function = DECL_TEMPLATE_RESULT (member_function);
16099
16100   /* There should not be any class definitions in progress at this
16101      point; the bodies of members are only parsed outside of all class
16102      definitions.  */
16103   gcc_assert (parser->num_classes_being_defined == 0);
16104   /* While we're parsing the member functions we might encounter more
16105      classes.  We want to handle them right away, but we don't want
16106      them getting mixed up with functions that are currently in the
16107      queue.  */
16108   parser->unparsed_functions_queues
16109     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16110
16111   /* Make sure that any template parameters are in scope.  */
16112   maybe_begin_member_template_processing (member_function);
16113
16114   /* If the body of the function has not yet been parsed, parse it
16115      now.  */
16116   if (DECL_PENDING_INLINE_P (member_function))
16117     {
16118       tree function_scope;
16119       cp_token_cache *tokens;
16120
16121       /* The function is no longer pending; we are processing it.  */
16122       tokens = DECL_PENDING_INLINE_INFO (member_function);
16123       DECL_PENDING_INLINE_INFO (member_function) = NULL;
16124       DECL_PENDING_INLINE_P (member_function) = 0;
16125
16126       /* If this is a local class, enter the scope of the containing
16127          function.  */
16128       function_scope = current_function_decl;
16129       if (function_scope)
16130         push_function_context_to (function_scope);
16131
16132
16133       /* Push the body of the function onto the lexer stack.  */
16134       cp_parser_push_lexer_for_tokens (parser, tokens);
16135
16136       /* Let the front end know that we going to be defining this
16137          function.  */
16138       start_preparsed_function (member_function, NULL_TREE,
16139                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
16140
16141       /* Don't do access checking if it is a templated function.  */
16142       if (processing_template_decl)
16143         push_deferring_access_checks (dk_no_check);
16144
16145       /* Now, parse the body of the function.  */
16146       cp_parser_function_definition_after_declarator (parser,
16147                                                       /*inline_p=*/true);
16148
16149       if (processing_template_decl)
16150         pop_deferring_access_checks ();
16151
16152       /* Leave the scope of the containing function.  */
16153       if (function_scope)
16154         pop_function_context_from (function_scope);
16155       cp_parser_pop_lexer (parser);
16156     }
16157
16158   /* Remove any template parameters from the symbol table.  */
16159   maybe_end_member_template_processing ();
16160
16161   /* Restore the queue.  */
16162   parser->unparsed_functions_queues
16163     = TREE_CHAIN (parser->unparsed_functions_queues);
16164 }
16165
16166 /* If DECL contains any default args, remember it on the unparsed
16167    functions queue.  */
16168
16169 static void
16170 cp_parser_save_default_args (cp_parser* parser, tree decl)
16171 {
16172   tree probe;
16173
16174   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
16175        probe;
16176        probe = TREE_CHAIN (probe))
16177     if (TREE_PURPOSE (probe))
16178       {
16179         TREE_PURPOSE (parser->unparsed_functions_queues)
16180           = tree_cons (current_class_type, decl,
16181                        TREE_PURPOSE (parser->unparsed_functions_queues));
16182         break;
16183       }
16184 }
16185
16186 /* FN is a FUNCTION_DECL which may contains a parameter with an
16187    unparsed DEFAULT_ARG.  Parse the default args now.  This function
16188    assumes that the current scope is the scope in which the default
16189    argument should be processed.  */
16190
16191 static void
16192 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
16193 {
16194   bool saved_local_variables_forbidden_p;
16195   tree parm;
16196
16197   /* While we're parsing the default args, we might (due to the
16198      statement expression extension) encounter more classes.  We want
16199      to handle them right away, but we don't want them getting mixed
16200      up with default args that are currently in the queue.  */
16201   parser->unparsed_functions_queues
16202     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16203
16204   /* Local variable names (and the `this' keyword) may not appear
16205      in a default argument.  */
16206   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
16207   parser->local_variables_forbidden_p = true;
16208
16209   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
16210        parm;
16211        parm = TREE_CHAIN (parm))
16212     {
16213       cp_token_cache *tokens;
16214       tree default_arg = TREE_PURPOSE (parm);
16215       tree parsed_arg;
16216       VEC(tree,gc) *insts;
16217       tree copy;
16218       unsigned ix;
16219
16220       if (!default_arg)
16221         continue;
16222
16223       if (TREE_CODE (default_arg) != DEFAULT_ARG)
16224         /* This can happen for a friend declaration for a function
16225            already declared with default arguments.  */
16226         continue;
16227
16228        /* Push the saved tokens for the default argument onto the parser's
16229           lexer stack.  */
16230       tokens = DEFARG_TOKENS (default_arg);
16231       cp_parser_push_lexer_for_tokens (parser, tokens);
16232
16233       /* Parse the assignment-expression.  */
16234       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false);
16235
16236       if (!processing_template_decl)
16237         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
16238
16239       TREE_PURPOSE (parm) = parsed_arg;
16240
16241       /* Update any instantiations we've already created.  */
16242       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
16243            VEC_iterate (tree, insts, ix, copy); ix++)
16244         TREE_PURPOSE (copy) = parsed_arg;
16245
16246       /* If the token stream has not been completely used up, then
16247          there was extra junk after the end of the default
16248          argument.  */
16249       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
16250         cp_parser_error (parser, "expected %<,%>");
16251
16252       /* Revert to the main lexer.  */
16253       cp_parser_pop_lexer (parser);
16254     }
16255
16256   /* Make sure no default arg is missing.  */
16257   check_default_args (fn);
16258
16259   /* Restore the state of local_variables_forbidden_p.  */
16260   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
16261
16262   /* Restore the queue.  */
16263   parser->unparsed_functions_queues
16264     = TREE_CHAIN (parser->unparsed_functions_queues);
16265 }
16266
16267 /* Parse the operand of `sizeof' (or a similar operator).  Returns
16268    either a TYPE or an expression, depending on the form of the
16269    input.  The KEYWORD indicates which kind of expression we have
16270    encountered.  */
16271
16272 static tree
16273 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
16274 {
16275   static const char *format;
16276   tree expr = NULL_TREE;
16277   const char *saved_message;
16278   bool saved_integral_constant_expression_p;
16279   bool saved_non_integral_constant_expression_p;
16280
16281   /* Initialize FORMAT the first time we get here.  */
16282   if (!format)
16283     format = "types may not be defined in '%s' expressions";
16284
16285   /* Types cannot be defined in a `sizeof' expression.  Save away the
16286      old message.  */
16287   saved_message = parser->type_definition_forbidden_message;
16288   /* And create the new one.  */
16289   parser->type_definition_forbidden_message
16290     = XNEWVEC (const char, strlen (format)
16291                + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
16292                + 1 /* `\0' */);
16293   sprintf ((char *) parser->type_definition_forbidden_message,
16294            format, IDENTIFIER_POINTER (ridpointers[keyword]));
16295
16296   /* The restrictions on constant-expressions do not apply inside
16297      sizeof expressions.  */
16298   saved_integral_constant_expression_p
16299     = parser->integral_constant_expression_p;
16300   saved_non_integral_constant_expression_p
16301     = parser->non_integral_constant_expression_p;
16302   parser->integral_constant_expression_p = false;
16303
16304   /* Do not actually evaluate the expression.  */
16305   ++skip_evaluation;
16306   /* If it's a `(', then we might be looking at the type-id
16307      construction.  */
16308   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
16309     {
16310       tree type;
16311       bool saved_in_type_id_in_expr_p;
16312
16313       /* We can't be sure yet whether we're looking at a type-id or an
16314          expression.  */
16315       cp_parser_parse_tentatively (parser);
16316       /* Consume the `('.  */
16317       cp_lexer_consume_token (parser->lexer);
16318       /* Parse the type-id.  */
16319       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
16320       parser->in_type_id_in_expr_p = true;
16321       type = cp_parser_type_id (parser);
16322       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
16323       /* Now, look for the trailing `)'.  */
16324       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16325       /* If all went well, then we're done.  */
16326       if (cp_parser_parse_definitely (parser))
16327         {
16328           cp_decl_specifier_seq decl_specs;
16329
16330           /* Build a trivial decl-specifier-seq.  */
16331           clear_decl_specs (&decl_specs);
16332           decl_specs.type = type;
16333
16334           /* Call grokdeclarator to figure out what type this is.  */
16335           expr = grokdeclarator (NULL,
16336                                  &decl_specs,
16337                                  TYPENAME,
16338                                  /*initialized=*/0,
16339                                  /*attrlist=*/NULL);
16340         }
16341     }
16342
16343   /* If the type-id production did not work out, then we must be
16344      looking at the unary-expression production.  */
16345   if (!expr)
16346     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
16347                                        /*cast_p=*/false);
16348   /* Go back to evaluating expressions.  */
16349   --skip_evaluation;
16350
16351   /* Free the message we created.  */
16352   free ((char *) parser->type_definition_forbidden_message);
16353   /* And restore the old one.  */
16354   parser->type_definition_forbidden_message = saved_message;
16355   parser->integral_constant_expression_p
16356     = saved_integral_constant_expression_p;
16357   parser->non_integral_constant_expression_p
16358     = saved_non_integral_constant_expression_p;
16359
16360   return expr;
16361 }
16362
16363 /* If the current declaration has no declarator, return true.  */
16364
16365 static bool
16366 cp_parser_declares_only_class_p (cp_parser *parser)
16367 {
16368   /* If the next token is a `;' or a `,' then there is no
16369      declarator.  */
16370   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16371           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
16372 }
16373
16374 /* Update the DECL_SPECS to reflect the storage class indicated by
16375    KEYWORD.  */
16376
16377 static void
16378 cp_parser_set_storage_class (cp_parser *parser,
16379                              cp_decl_specifier_seq *decl_specs,
16380                              enum rid keyword)
16381 {
16382   cp_storage_class storage_class;
16383
16384   if (parser->in_unbraced_linkage_specification_p)
16385     {
16386       error ("invalid use of %qD in linkage specification",
16387              ridpointers[keyword]);
16388       return;
16389     }
16390   else if (decl_specs->storage_class != sc_none)
16391     {
16392       decl_specs->conflicting_specifiers_p = true;
16393       return;
16394     }
16395
16396   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
16397       && decl_specs->specs[(int) ds_thread])
16398     {
16399       error ("%<__thread%> before %qD", ridpointers[keyword]);
16400       decl_specs->specs[(int) ds_thread] = 0;
16401     }
16402
16403   switch (keyword)
16404     {
16405     case RID_AUTO:
16406       storage_class = sc_auto;
16407       break;
16408     case RID_REGISTER:
16409       storage_class = sc_register;
16410       break;
16411     case RID_STATIC:
16412       storage_class = sc_static;
16413       break;
16414     case RID_EXTERN:
16415       storage_class = sc_extern;
16416       break;
16417     case RID_MUTABLE:
16418       storage_class = sc_mutable;
16419       break;
16420     default:
16421       gcc_unreachable ();
16422     }
16423   decl_specs->storage_class = storage_class;
16424
16425   /* A storage class specifier cannot be applied alongside a typedef 
16426      specifier. If there is a typedef specifier present then set 
16427      conflicting_specifiers_p which will trigger an error later
16428      on in grokdeclarator. */
16429   if (decl_specs->specs[(int)ds_typedef])
16430     decl_specs->conflicting_specifiers_p = true;
16431 }
16432
16433 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
16434    is true, the type is a user-defined type; otherwise it is a
16435    built-in type specified by a keyword.  */
16436
16437 static void
16438 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
16439                               tree type_spec,
16440                               bool user_defined_p)
16441 {
16442   decl_specs->any_specifiers_p = true;
16443
16444   /* If the user tries to redeclare bool or wchar_t (with, for
16445      example, in "typedef int wchar_t;") we remember that this is what
16446      happened.  In system headers, we ignore these declarations so
16447      that G++ can work with system headers that are not C++-safe.  */
16448   if (decl_specs->specs[(int) ds_typedef]
16449       && !user_defined_p
16450       && (type_spec == boolean_type_node
16451           || type_spec == wchar_type_node)
16452       && (decl_specs->type
16453           || decl_specs->specs[(int) ds_long]
16454           || decl_specs->specs[(int) ds_short]
16455           || decl_specs->specs[(int) ds_unsigned]
16456           || decl_specs->specs[(int) ds_signed]))
16457     {
16458       decl_specs->redefined_builtin_type = type_spec;
16459       if (!decl_specs->type)
16460         {
16461           decl_specs->type = type_spec;
16462           decl_specs->user_defined_type_p = false;
16463         }
16464     }
16465   else if (decl_specs->type)
16466     decl_specs->multiple_types_p = true;
16467   else
16468     {
16469       decl_specs->type = type_spec;
16470       decl_specs->user_defined_type_p = user_defined_p;
16471       decl_specs->redefined_builtin_type = NULL_TREE;
16472     }
16473 }
16474
16475 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
16476    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
16477
16478 static bool
16479 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
16480 {
16481   return decl_specifiers->specs[(int) ds_friend] != 0;
16482 }
16483
16484 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
16485    issue an error message indicating that TOKEN_DESC was expected.
16486
16487    Returns the token consumed, if the token had the appropriate type.
16488    Otherwise, returns NULL.  */
16489
16490 static cp_token *
16491 cp_parser_require (cp_parser* parser,
16492                    enum cpp_ttype type,
16493                    const char* token_desc)
16494 {
16495   if (cp_lexer_next_token_is (parser->lexer, type))
16496     return cp_lexer_consume_token (parser->lexer);
16497   else
16498     {
16499       /* Output the MESSAGE -- unless we're parsing tentatively.  */
16500       if (!cp_parser_simulate_error (parser))
16501         {
16502           char *message = concat ("expected ", token_desc, NULL);
16503           cp_parser_error (parser, message);
16504           free (message);
16505         }
16506       return NULL;
16507     }
16508 }
16509
16510 /* An error message is produced if the next token is not '>'.
16511    All further tokens are skipped until the desired token is
16512    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
16513
16514 static void
16515 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
16516 {
16517   /* Current level of '< ... >'.  */
16518   unsigned level = 0;
16519   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
16520   unsigned nesting_depth = 0;
16521
16522   /* Are we ready, yet?  If not, issue error message.  */
16523   if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
16524     return;
16525
16526   /* Skip tokens until the desired token is found.  */
16527   while (true)
16528     {
16529       /* Peek at the next token.  */
16530       switch (cp_lexer_peek_token (parser->lexer)->type)
16531         {
16532         case CPP_LESS:
16533           if (!nesting_depth)
16534             ++level;
16535           break;
16536
16537         case CPP_GREATER:
16538           if (!nesting_depth && level-- == 0)
16539             {
16540               /* We've reached the token we want, consume it and stop.  */
16541               cp_lexer_consume_token (parser->lexer);
16542               return;
16543             }
16544           break;
16545
16546         case CPP_OPEN_PAREN:
16547         case CPP_OPEN_SQUARE:
16548           ++nesting_depth;
16549           break;
16550
16551         case CPP_CLOSE_PAREN:
16552         case CPP_CLOSE_SQUARE:
16553           if (nesting_depth-- == 0)
16554             return;
16555           break;
16556
16557         case CPP_EOF:
16558         case CPP_PRAGMA_EOL:
16559         case CPP_SEMICOLON:
16560         case CPP_OPEN_BRACE:
16561         case CPP_CLOSE_BRACE:
16562           /* The '>' was probably forgotten, don't look further.  */
16563           return;
16564
16565         default:
16566           break;
16567         }
16568
16569       /* Consume this token.  */
16570       cp_lexer_consume_token (parser->lexer);
16571     }
16572 }
16573
16574 /* If the next token is the indicated keyword, consume it.  Otherwise,
16575    issue an error message indicating that TOKEN_DESC was expected.
16576
16577    Returns the token consumed, if the token had the appropriate type.
16578    Otherwise, returns NULL.  */
16579
16580 static cp_token *
16581 cp_parser_require_keyword (cp_parser* parser,
16582                            enum rid keyword,
16583                            const char* token_desc)
16584 {
16585   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
16586
16587   if (token && token->keyword != keyword)
16588     {
16589       dyn_string_t error_msg;
16590
16591       /* Format the error message.  */
16592       error_msg = dyn_string_new (0);
16593       dyn_string_append_cstr (error_msg, "expected ");
16594       dyn_string_append_cstr (error_msg, token_desc);
16595       cp_parser_error (parser, error_msg->s);
16596       dyn_string_delete (error_msg);
16597       return NULL;
16598     }
16599
16600   return token;
16601 }
16602
16603 /* Returns TRUE iff TOKEN is a token that can begin the body of a
16604    function-definition.  */
16605
16606 static bool
16607 cp_parser_token_starts_function_definition_p (cp_token* token)
16608 {
16609   return (/* An ordinary function-body begins with an `{'.  */
16610           token->type == CPP_OPEN_BRACE
16611           /* A ctor-initializer begins with a `:'.  */
16612           || token->type == CPP_COLON
16613           /* A function-try-block begins with `try'.  */
16614           || token->keyword == RID_TRY
16615           /* The named return value extension begins with `return'.  */
16616           || token->keyword == RID_RETURN);
16617 }
16618
16619 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
16620    definition.  */
16621
16622 static bool
16623 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
16624 {
16625   cp_token *token;
16626
16627   token = cp_lexer_peek_token (parser->lexer);
16628   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
16629 }
16630
16631 /* Returns TRUE iff the next token is the "," or ">" ending a
16632    template-argument.  */
16633
16634 static bool
16635 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
16636 {
16637   cp_token *token;
16638
16639   token = cp_lexer_peek_token (parser->lexer);
16640   return (token->type == CPP_COMMA || token->type == CPP_GREATER);
16641 }
16642
16643 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
16644    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
16645
16646 static bool
16647 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
16648                                                      size_t n)
16649 {
16650   cp_token *token;
16651
16652   token = cp_lexer_peek_nth_token (parser->lexer, n);
16653   if (token->type == CPP_LESS)
16654     return true;
16655   /* Check for the sequence `<::' in the original code. It would be lexed as
16656      `[:', where `[' is a digraph, and there is no whitespace before
16657      `:'.  */
16658   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
16659     {
16660       cp_token *token2;
16661       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
16662       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
16663         return true;
16664     }
16665   return false;
16666 }
16667
16668 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
16669    or none_type otherwise.  */
16670
16671 static enum tag_types
16672 cp_parser_token_is_class_key (cp_token* token)
16673 {
16674   switch (token->keyword)
16675     {
16676     case RID_CLASS:
16677       return class_type;
16678     case RID_STRUCT:
16679       return record_type;
16680     case RID_UNION:
16681       return union_type;
16682
16683     default:
16684       return none_type;
16685     }
16686 }
16687
16688 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
16689
16690 static void
16691 cp_parser_check_class_key (enum tag_types class_key, tree type)
16692 {
16693   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
16694     pedwarn ("%qs tag used in naming %q#T",
16695             class_key == union_type ? "union"
16696              : class_key == record_type ? "struct" : "class",
16697              type);
16698 }
16699
16700 /* Issue an error message if DECL is redeclared with different
16701    access than its original declaration [class.access.spec/3].
16702    This applies to nested classes and nested class templates.
16703    [class.mem/1].  */
16704
16705 static void
16706 cp_parser_check_access_in_redeclaration (tree decl)
16707 {
16708   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
16709     return;
16710
16711   if ((TREE_PRIVATE (decl)
16712        != (current_access_specifier == access_private_node))
16713       || (TREE_PROTECTED (decl)
16714           != (current_access_specifier == access_protected_node)))
16715     error ("%qD redeclared with different access", decl);
16716 }
16717
16718 /* Look for the `template' keyword, as a syntactic disambiguator.
16719    Return TRUE iff it is present, in which case it will be
16720    consumed.  */
16721
16722 static bool
16723 cp_parser_optional_template_keyword (cp_parser *parser)
16724 {
16725   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
16726     {
16727       /* The `template' keyword can only be used within templates;
16728          outside templates the parser can always figure out what is a
16729          template and what is not.  */
16730       if (!processing_template_decl)
16731         {
16732           error ("%<template%> (as a disambiguator) is only allowed "
16733                  "within templates");
16734           /* If this part of the token stream is rescanned, the same
16735              error message would be generated.  So, we purge the token
16736              from the stream.  */
16737           cp_lexer_purge_token (parser->lexer);
16738           return false;
16739         }
16740       else
16741         {
16742           /* Consume the `template' keyword.  */
16743           cp_lexer_consume_token (parser->lexer);
16744           return true;
16745         }
16746     }
16747
16748   return false;
16749 }
16750
16751 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
16752    set PARSER->SCOPE, and perform other related actions.  */
16753
16754 static void
16755 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
16756 {
16757   int i;
16758   struct tree_check *check_value;
16759   deferred_access_check *chk;
16760   VEC (deferred_access_check,gc) *checks;
16761
16762   /* Get the stored value.  */
16763   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
16764   /* Perform any access checks that were deferred.  */
16765   checks = check_value->checks;
16766   if (checks)
16767     {
16768       for (i = 0 ;
16769            VEC_iterate (deferred_access_check, checks, i, chk) ;
16770            ++i)
16771         {
16772           perform_or_defer_access_check (chk->binfo,
16773                                          chk->decl,
16774                                          chk->diag_decl);
16775         }
16776     }
16777   /* Set the scope from the stored value.  */
16778   parser->scope = check_value->value;
16779   parser->qualifying_scope = check_value->qualifying_scope;
16780   parser->object_scope = NULL_TREE;
16781 }
16782
16783 /* Consume tokens up through a non-nested END token.  */
16784
16785 static void
16786 cp_parser_cache_group (cp_parser *parser,
16787                        enum cpp_ttype end,
16788                        unsigned depth)
16789 {
16790   while (true)
16791     {
16792       cp_token *token;
16793
16794       /* Abort a parenthesized expression if we encounter a brace.  */
16795       if ((end == CPP_CLOSE_PAREN || depth == 0)
16796           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16797         return;
16798       /* If we've reached the end of the file, stop.  */
16799       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF)
16800           || (end != CPP_PRAGMA_EOL
16801               && cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL)))
16802         return;
16803       /* Consume the next token.  */
16804       token = cp_lexer_consume_token (parser->lexer);
16805       /* See if it starts a new group.  */
16806       if (token->type == CPP_OPEN_BRACE)
16807         {
16808           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
16809           if (depth == 0)
16810             return;
16811         }
16812       else if (token->type == CPP_OPEN_PAREN)
16813         cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
16814       else if (token->type == CPP_PRAGMA)
16815         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
16816       else if (token->type == end)
16817         return;
16818     }
16819 }
16820
16821 /* Begin parsing tentatively.  We always save tokens while parsing
16822    tentatively so that if the tentative parsing fails we can restore the
16823    tokens.  */
16824
16825 static void
16826 cp_parser_parse_tentatively (cp_parser* parser)
16827 {
16828   /* Enter a new parsing context.  */
16829   parser->context = cp_parser_context_new (parser->context);
16830   /* Begin saving tokens.  */
16831   cp_lexer_save_tokens (parser->lexer);
16832   /* In order to avoid repetitive access control error messages,
16833      access checks are queued up until we are no longer parsing
16834      tentatively.  */
16835   push_deferring_access_checks (dk_deferred);
16836 }
16837
16838 /* Commit to the currently active tentative parse.  */
16839
16840 static void
16841 cp_parser_commit_to_tentative_parse (cp_parser* parser)
16842 {
16843   cp_parser_context *context;
16844   cp_lexer *lexer;
16845
16846   /* Mark all of the levels as committed.  */
16847   lexer = parser->lexer;
16848   for (context = parser->context; context->next; context = context->next)
16849     {
16850       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
16851         break;
16852       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
16853       while (!cp_lexer_saving_tokens (lexer))
16854         lexer = lexer->next;
16855       cp_lexer_commit_tokens (lexer);
16856     }
16857 }
16858
16859 /* Abort the currently active tentative parse.  All consumed tokens
16860    will be rolled back, and no diagnostics will be issued.  */
16861
16862 static void
16863 cp_parser_abort_tentative_parse (cp_parser* parser)
16864 {
16865   cp_parser_simulate_error (parser);
16866   /* Now, pretend that we want to see if the construct was
16867      successfully parsed.  */
16868   cp_parser_parse_definitely (parser);
16869 }
16870
16871 /* Stop parsing tentatively.  If a parse error has occurred, restore the
16872    token stream.  Otherwise, commit to the tokens we have consumed.
16873    Returns true if no error occurred; false otherwise.  */
16874
16875 static bool
16876 cp_parser_parse_definitely (cp_parser* parser)
16877 {
16878   bool error_occurred;
16879   cp_parser_context *context;
16880
16881   /* Remember whether or not an error occurred, since we are about to
16882      destroy that information.  */
16883   error_occurred = cp_parser_error_occurred (parser);
16884   /* Remove the topmost context from the stack.  */
16885   context = parser->context;
16886   parser->context = context->next;
16887   /* If no parse errors occurred, commit to the tentative parse.  */
16888   if (!error_occurred)
16889     {
16890       /* Commit to the tokens read tentatively, unless that was
16891          already done.  */
16892       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
16893         cp_lexer_commit_tokens (parser->lexer);
16894
16895       pop_to_parent_deferring_access_checks ();
16896     }
16897   /* Otherwise, if errors occurred, roll back our state so that things
16898      are just as they were before we began the tentative parse.  */
16899   else
16900     {
16901       cp_lexer_rollback_tokens (parser->lexer);
16902       pop_deferring_access_checks ();
16903     }
16904   /* Add the context to the front of the free list.  */
16905   context->next = cp_parser_context_free_list;
16906   cp_parser_context_free_list = context;
16907
16908   return !error_occurred;
16909 }
16910
16911 /* Returns true if we are parsing tentatively and are not committed to
16912    this tentative parse.  */
16913
16914 static bool
16915 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
16916 {
16917   return (cp_parser_parsing_tentatively (parser)
16918           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
16919 }
16920
16921 /* Returns nonzero iff an error has occurred during the most recent
16922    tentative parse.  */
16923
16924 static bool
16925 cp_parser_error_occurred (cp_parser* parser)
16926 {
16927   return (cp_parser_parsing_tentatively (parser)
16928           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
16929 }
16930
16931 /* Returns nonzero if GNU extensions are allowed.  */
16932
16933 static bool
16934 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
16935 {
16936   return parser->allow_gnu_extensions_p;
16937 }
16938 \f
16939 /* Objective-C++ Productions */
16940
16941
16942 /* Parse an Objective-C expression, which feeds into a primary-expression
16943    above.
16944
16945    objc-expression:
16946      objc-message-expression
16947      objc-string-literal
16948      objc-encode-expression
16949      objc-protocol-expression
16950      objc-selector-expression
16951
16952   Returns a tree representation of the expression.  */
16953
16954 static tree
16955 cp_parser_objc_expression (cp_parser* parser)
16956 {
16957   /* Try to figure out what kind of declaration is present.  */
16958   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
16959
16960   switch (kwd->type)
16961     {
16962     case CPP_OPEN_SQUARE:
16963       return cp_parser_objc_message_expression (parser);
16964
16965     case CPP_OBJC_STRING:
16966       kwd = cp_lexer_consume_token (parser->lexer);
16967       return objc_build_string_object (kwd->u.value);
16968
16969     case CPP_KEYWORD:
16970       switch (kwd->keyword)
16971         {
16972         case RID_AT_ENCODE:
16973           return cp_parser_objc_encode_expression (parser);
16974
16975         case RID_AT_PROTOCOL:
16976           return cp_parser_objc_protocol_expression (parser);
16977
16978         case RID_AT_SELECTOR:
16979           return cp_parser_objc_selector_expression (parser);
16980
16981         default:
16982           break;
16983         }
16984     default:
16985       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
16986       cp_parser_skip_to_end_of_block_or_statement (parser);
16987     }
16988
16989   return error_mark_node;
16990 }
16991
16992 /* Parse an Objective-C message expression.
16993
16994    objc-message-expression:
16995      [ objc-message-receiver objc-message-args ]
16996
16997    Returns a representation of an Objective-C message.  */
16998
16999 static tree
17000 cp_parser_objc_message_expression (cp_parser* parser)
17001 {
17002   tree receiver, messageargs;
17003
17004   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
17005   receiver = cp_parser_objc_message_receiver (parser);
17006   messageargs = cp_parser_objc_message_args (parser);
17007   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
17008
17009   return objc_build_message_expr (build_tree_list (receiver, messageargs));
17010 }
17011
17012 /* Parse an objc-message-receiver.
17013
17014    objc-message-receiver:
17015      expression
17016      simple-type-specifier
17017
17018   Returns a representation of the type or expression.  */
17019
17020 static tree
17021 cp_parser_objc_message_receiver (cp_parser* parser)
17022 {
17023   tree rcv;
17024
17025   /* An Objective-C message receiver may be either (1) a type
17026      or (2) an expression.  */
17027   cp_parser_parse_tentatively (parser);
17028   rcv = cp_parser_expression (parser, false);
17029
17030   if (cp_parser_parse_definitely (parser))
17031     return rcv;
17032
17033   rcv = cp_parser_simple_type_specifier (parser,
17034                                          /*decl_specs=*/NULL,
17035                                          CP_PARSER_FLAGS_NONE);
17036
17037   return objc_get_class_reference (rcv);
17038 }
17039
17040 /* Parse the arguments and selectors comprising an Objective-C message.
17041
17042    objc-message-args:
17043      objc-selector
17044      objc-selector-args
17045      objc-selector-args , objc-comma-args
17046
17047    objc-selector-args:
17048      objc-selector [opt] : assignment-expression
17049      objc-selector-args objc-selector [opt] : assignment-expression
17050
17051    objc-comma-args:
17052      assignment-expression
17053      objc-comma-args , assignment-expression
17054
17055    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
17056    selector arguments and TREE_VALUE containing a list of comma
17057    arguments.  */
17058
17059 static tree
17060 cp_parser_objc_message_args (cp_parser* parser)
17061 {
17062   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
17063   bool maybe_unary_selector_p = true;
17064   cp_token *token = cp_lexer_peek_token (parser->lexer);
17065
17066   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17067     {
17068       tree selector = NULL_TREE, arg;
17069
17070       if (token->type != CPP_COLON)
17071         selector = cp_parser_objc_selector (parser);
17072
17073       /* Detect if we have a unary selector.  */
17074       if (maybe_unary_selector_p
17075           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17076         return build_tree_list (selector, NULL_TREE);
17077
17078       maybe_unary_selector_p = false;
17079       cp_parser_require (parser, CPP_COLON, "`:'");
17080       arg = cp_parser_assignment_expression (parser, false);
17081
17082       sel_args
17083         = chainon (sel_args,
17084                    build_tree_list (selector, arg));
17085
17086       token = cp_lexer_peek_token (parser->lexer);
17087     }
17088
17089   /* Handle non-selector arguments, if any. */
17090   while (token->type == CPP_COMMA)
17091     {
17092       tree arg;
17093
17094       cp_lexer_consume_token (parser->lexer);
17095       arg = cp_parser_assignment_expression (parser, false);
17096
17097       addl_args
17098         = chainon (addl_args,
17099                    build_tree_list (NULL_TREE, arg));
17100
17101       token = cp_lexer_peek_token (parser->lexer);
17102     }
17103
17104   return build_tree_list (sel_args, addl_args);
17105 }
17106
17107 /* Parse an Objective-C encode expression.
17108
17109    objc-encode-expression:
17110      @encode objc-typename
17111
17112    Returns an encoded representation of the type argument.  */
17113
17114 static tree
17115 cp_parser_objc_encode_expression (cp_parser* parser)
17116 {
17117   tree type;
17118
17119   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
17120   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17121   type = complete_type (cp_parser_type_id (parser));
17122   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17123
17124   if (!type)
17125     {
17126       error ("%<@encode%> must specify a type as an argument");
17127       return error_mark_node;
17128     }
17129
17130   return objc_build_encode_expr (type);
17131 }
17132
17133 /* Parse an Objective-C @defs expression.  */
17134
17135 static tree
17136 cp_parser_objc_defs_expression (cp_parser *parser)
17137 {
17138   tree name;
17139
17140   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
17141   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17142   name = cp_parser_identifier (parser);
17143   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17144
17145   return objc_get_class_ivars (name);
17146 }
17147
17148 /* Parse an Objective-C protocol expression.
17149
17150   objc-protocol-expression:
17151     @protocol ( identifier )
17152
17153   Returns a representation of the protocol expression.  */
17154
17155 static tree
17156 cp_parser_objc_protocol_expression (cp_parser* parser)
17157 {
17158   tree proto;
17159
17160   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17161   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17162   proto = cp_parser_identifier (parser);
17163   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17164
17165   return objc_build_protocol_expr (proto);
17166 }
17167
17168 /* Parse an Objective-C selector expression.
17169
17170    objc-selector-expression:
17171      @selector ( objc-method-signature )
17172
17173    objc-method-signature:
17174      objc-selector
17175      objc-selector-seq
17176
17177    objc-selector-seq:
17178      objc-selector :
17179      objc-selector-seq objc-selector :
17180
17181   Returns a representation of the method selector.  */
17182
17183 static tree
17184 cp_parser_objc_selector_expression (cp_parser* parser)
17185 {
17186   tree sel_seq = NULL_TREE;
17187   bool maybe_unary_selector_p = true;
17188   cp_token *token;
17189
17190   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
17191   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17192   token = cp_lexer_peek_token (parser->lexer);
17193
17194   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
17195          || token->type == CPP_SCOPE)
17196     {
17197       tree selector = NULL_TREE;
17198
17199       if (token->type != CPP_COLON
17200           || token->type == CPP_SCOPE)
17201         selector = cp_parser_objc_selector (parser);
17202
17203       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
17204           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
17205         {
17206           /* Detect if we have a unary selector.  */
17207           if (maybe_unary_selector_p)
17208             {
17209               sel_seq = selector;
17210               goto finish_selector;
17211             }
17212           else
17213             {
17214               cp_parser_error (parser, "expected %<:%>");
17215             }
17216         }
17217       maybe_unary_selector_p = false;
17218       token = cp_lexer_consume_token (parser->lexer);
17219
17220       if (token->type == CPP_SCOPE)
17221         {
17222           sel_seq
17223             = chainon (sel_seq,
17224                        build_tree_list (selector, NULL_TREE));
17225           sel_seq
17226             = chainon (sel_seq,
17227                        build_tree_list (NULL_TREE, NULL_TREE));
17228         }
17229       else
17230         sel_seq
17231           = chainon (sel_seq,
17232                      build_tree_list (selector, NULL_TREE));
17233
17234       token = cp_lexer_peek_token (parser->lexer);
17235     }
17236
17237  finish_selector:
17238   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17239
17240   return objc_build_selector_expr (sel_seq);
17241 }
17242
17243 /* Parse a list of identifiers.
17244
17245    objc-identifier-list:
17246      identifier
17247      objc-identifier-list , identifier
17248
17249    Returns a TREE_LIST of identifier nodes.  */
17250
17251 static tree
17252 cp_parser_objc_identifier_list (cp_parser* parser)
17253 {
17254   tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
17255   cp_token *sep = cp_lexer_peek_token (parser->lexer);
17256
17257   while (sep->type == CPP_COMMA)
17258     {
17259       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17260       list = chainon (list,
17261                       build_tree_list (NULL_TREE,
17262                                        cp_parser_identifier (parser)));
17263       sep = cp_lexer_peek_token (parser->lexer);
17264     }
17265
17266   return list;
17267 }
17268
17269 /* Parse an Objective-C alias declaration.
17270
17271    objc-alias-declaration:
17272      @compatibility_alias identifier identifier ;
17273
17274    This function registers the alias mapping with the Objective-C front-end.
17275    It returns nothing.  */
17276
17277 static void
17278 cp_parser_objc_alias_declaration (cp_parser* parser)
17279 {
17280   tree alias, orig;
17281
17282   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
17283   alias = cp_parser_identifier (parser);
17284   orig = cp_parser_identifier (parser);
17285   objc_declare_alias (alias, orig);
17286   cp_parser_consume_semicolon_at_end_of_statement (parser);
17287 }
17288
17289 /* Parse an Objective-C class forward-declaration.
17290
17291    objc-class-declaration:
17292      @class objc-identifier-list ;
17293
17294    The function registers the forward declarations with the Objective-C
17295    front-end.  It returns nothing.  */
17296
17297 static void
17298 cp_parser_objc_class_declaration (cp_parser* parser)
17299 {
17300   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
17301   objc_declare_class (cp_parser_objc_identifier_list (parser));
17302   cp_parser_consume_semicolon_at_end_of_statement (parser);
17303 }
17304
17305 /* Parse a list of Objective-C protocol references.
17306
17307    objc-protocol-refs-opt:
17308      objc-protocol-refs [opt]
17309
17310    objc-protocol-refs:
17311      < objc-identifier-list >
17312
17313    Returns a TREE_LIST of identifiers, if any.  */
17314
17315 static tree
17316 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
17317 {
17318   tree protorefs = NULL_TREE;
17319
17320   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
17321     {
17322       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
17323       protorefs = cp_parser_objc_identifier_list (parser);
17324       cp_parser_require (parser, CPP_GREATER, "`>'");
17325     }
17326
17327   return protorefs;
17328 }
17329
17330 /* Parse a Objective-C visibility specification.  */
17331
17332 static void
17333 cp_parser_objc_visibility_spec (cp_parser* parser)
17334 {
17335   cp_token *vis = cp_lexer_peek_token (parser->lexer);
17336
17337   switch (vis->keyword)
17338     {
17339     case RID_AT_PRIVATE:
17340       objc_set_visibility (2);
17341       break;
17342     case RID_AT_PROTECTED:
17343       objc_set_visibility (0);
17344       break;
17345     case RID_AT_PUBLIC:
17346       objc_set_visibility (1);
17347       break;
17348     default:
17349       return;
17350     }
17351
17352   /* Eat '@private'/'@protected'/'@public'.  */
17353   cp_lexer_consume_token (parser->lexer);
17354 }
17355
17356 /* Parse an Objective-C method type.  */
17357
17358 static void
17359 cp_parser_objc_method_type (cp_parser* parser)
17360 {
17361   objc_set_method_type
17362    (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
17363     ? PLUS_EXPR
17364     : MINUS_EXPR);
17365 }
17366
17367 /* Parse an Objective-C protocol qualifier.  */
17368
17369 static tree
17370 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
17371 {
17372   tree quals = NULL_TREE, node;
17373   cp_token *token = cp_lexer_peek_token (parser->lexer);
17374
17375   node = token->u.value;
17376
17377   while (node && TREE_CODE (node) == IDENTIFIER_NODE
17378          && (node == ridpointers [(int) RID_IN]
17379              || node == ridpointers [(int) RID_OUT]
17380              || node == ridpointers [(int) RID_INOUT]
17381              || node == ridpointers [(int) RID_BYCOPY]
17382              || node == ridpointers [(int) RID_BYREF]
17383              || node == ridpointers [(int) RID_ONEWAY]))
17384     {
17385       quals = tree_cons (NULL_TREE, node, quals);
17386       cp_lexer_consume_token (parser->lexer);
17387       token = cp_lexer_peek_token (parser->lexer);
17388       node = token->u.value;
17389     }
17390
17391   return quals;
17392 }
17393
17394 /* Parse an Objective-C typename.  */
17395
17396 static tree
17397 cp_parser_objc_typename (cp_parser* parser)
17398 {
17399   tree typename = NULL_TREE;
17400
17401   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
17402     {
17403       tree proto_quals, cp_type = NULL_TREE;
17404
17405       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17406       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
17407
17408       /* An ObjC type name may consist of just protocol qualifiers, in which
17409          case the type shall default to 'id'.  */
17410       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
17411         cp_type = cp_parser_type_id (parser);
17412
17413       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17414       typename = build_tree_list (proto_quals, cp_type);
17415     }
17416
17417   return typename;
17418 }
17419
17420 /* Check to see if TYPE refers to an Objective-C selector name.  */
17421
17422 static bool
17423 cp_parser_objc_selector_p (enum cpp_ttype type)
17424 {
17425   return (type == CPP_NAME || type == CPP_KEYWORD
17426           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
17427           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
17428           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
17429           || type == CPP_XOR || type == CPP_XOR_EQ);
17430 }
17431
17432 /* Parse an Objective-C selector.  */
17433
17434 static tree
17435 cp_parser_objc_selector (cp_parser* parser)
17436 {
17437   cp_token *token = cp_lexer_consume_token (parser->lexer);
17438
17439   if (!cp_parser_objc_selector_p (token->type))
17440     {
17441       error ("invalid Objective-C++ selector name");
17442       return error_mark_node;
17443     }
17444
17445   /* C++ operator names are allowed to appear in ObjC selectors.  */
17446   switch (token->type)
17447     {
17448     case CPP_AND_AND: return get_identifier ("and");
17449     case CPP_AND_EQ: return get_identifier ("and_eq");
17450     case CPP_AND: return get_identifier ("bitand");
17451     case CPP_OR: return get_identifier ("bitor");
17452     case CPP_COMPL: return get_identifier ("compl");
17453     case CPP_NOT: return get_identifier ("not");
17454     case CPP_NOT_EQ: return get_identifier ("not_eq");
17455     case CPP_OR_OR: return get_identifier ("or");
17456     case CPP_OR_EQ: return get_identifier ("or_eq");
17457     case CPP_XOR: return get_identifier ("xor");
17458     case CPP_XOR_EQ: return get_identifier ("xor_eq");
17459     default: return token->u.value;
17460     }
17461 }
17462
17463 /* Parse an Objective-C params list.  */
17464
17465 static tree
17466 cp_parser_objc_method_keyword_params (cp_parser* parser)
17467 {
17468   tree params = NULL_TREE;
17469   bool maybe_unary_selector_p = true;
17470   cp_token *token = cp_lexer_peek_token (parser->lexer);
17471
17472   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17473     {
17474       tree selector = NULL_TREE, typename, identifier;
17475
17476       if (token->type != CPP_COLON)
17477         selector = cp_parser_objc_selector (parser);
17478
17479       /* Detect if we have a unary selector.  */
17480       if (maybe_unary_selector_p
17481           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17482         return selector;
17483
17484       maybe_unary_selector_p = false;
17485       cp_parser_require (parser, CPP_COLON, "`:'");
17486       typename = cp_parser_objc_typename (parser);
17487       identifier = cp_parser_identifier (parser);
17488
17489       params
17490         = chainon (params,
17491                    objc_build_keyword_decl (selector,
17492                                             typename,
17493                                             identifier));
17494
17495       token = cp_lexer_peek_token (parser->lexer);
17496     }
17497
17498   return params;
17499 }
17500
17501 /* Parse the non-keyword Objective-C params.  */
17502
17503 static tree
17504 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
17505 {
17506   tree params = make_node (TREE_LIST);
17507   cp_token *token = cp_lexer_peek_token (parser->lexer);
17508   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
17509
17510   while (token->type == CPP_COMMA)
17511     {
17512       cp_parameter_declarator *parmdecl;
17513       tree parm;
17514
17515       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17516       token = cp_lexer_peek_token (parser->lexer);
17517
17518       if (token->type == CPP_ELLIPSIS)
17519         {
17520           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
17521           *ellipsisp = true;
17522           break;
17523         }
17524
17525       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17526       parm = grokdeclarator (parmdecl->declarator,
17527                              &parmdecl->decl_specifiers,
17528                              PARM, /*initialized=*/0,
17529                              /*attrlist=*/NULL);
17530
17531       chainon (params, build_tree_list (NULL_TREE, parm));
17532       token = cp_lexer_peek_token (parser->lexer);
17533     }
17534
17535   return params;
17536 }
17537
17538 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
17539
17540 static void
17541 cp_parser_objc_interstitial_code (cp_parser* parser)
17542 {
17543   cp_token *token = cp_lexer_peek_token (parser->lexer);
17544
17545   /* If the next token is `extern' and the following token is a string
17546      literal, then we have a linkage specification.  */
17547   if (token->keyword == RID_EXTERN
17548       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
17549     cp_parser_linkage_specification (parser);
17550   /* Handle #pragma, if any.  */
17551   else if (token->type == CPP_PRAGMA)
17552     cp_parser_pragma (parser, pragma_external);
17553   /* Allow stray semicolons.  */
17554   else if (token->type == CPP_SEMICOLON)
17555     cp_lexer_consume_token (parser->lexer);
17556   /* Finally, try to parse a block-declaration, or a function-definition.  */
17557   else
17558     cp_parser_block_declaration (parser, /*statement_p=*/false);
17559 }
17560
17561 /* Parse a method signature.  */
17562
17563 static tree
17564 cp_parser_objc_method_signature (cp_parser* parser)
17565 {
17566   tree rettype, kwdparms, optparms;
17567   bool ellipsis = false;
17568
17569   cp_parser_objc_method_type (parser);
17570   rettype = cp_parser_objc_typename (parser);
17571   kwdparms = cp_parser_objc_method_keyword_params (parser);
17572   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
17573
17574   return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
17575 }
17576
17577 /* Pars an Objective-C method prototype list.  */
17578
17579 static void
17580 cp_parser_objc_method_prototype_list (cp_parser* parser)
17581 {
17582   cp_token *token = cp_lexer_peek_token (parser->lexer);
17583
17584   while (token->keyword != RID_AT_END)
17585     {
17586       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17587         {
17588           objc_add_method_declaration
17589            (cp_parser_objc_method_signature (parser));
17590           cp_parser_consume_semicolon_at_end_of_statement (parser);
17591         }
17592       else
17593         /* Allow for interspersed non-ObjC++ code.  */
17594         cp_parser_objc_interstitial_code (parser);
17595
17596       token = cp_lexer_peek_token (parser->lexer);
17597     }
17598
17599   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17600   objc_finish_interface ();
17601 }
17602
17603 /* Parse an Objective-C method definition list.  */
17604
17605 static void
17606 cp_parser_objc_method_definition_list (cp_parser* parser)
17607 {
17608   cp_token *token = cp_lexer_peek_token (parser->lexer);
17609
17610   while (token->keyword != RID_AT_END)
17611     {
17612       tree meth;
17613
17614       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17615         {
17616           push_deferring_access_checks (dk_deferred);
17617           objc_start_method_definition
17618            (cp_parser_objc_method_signature (parser));
17619
17620           /* For historical reasons, we accept an optional semicolon.  */
17621           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17622             cp_lexer_consume_token (parser->lexer);
17623
17624           perform_deferred_access_checks ();
17625           stop_deferring_access_checks ();
17626           meth = cp_parser_function_definition_after_declarator (parser,
17627                                                                  false);
17628           pop_deferring_access_checks ();
17629           objc_finish_method_definition (meth);
17630         }
17631       else
17632         /* Allow for interspersed non-ObjC++ code.  */
17633         cp_parser_objc_interstitial_code (parser);
17634
17635       token = cp_lexer_peek_token (parser->lexer);
17636     }
17637
17638   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17639   objc_finish_implementation ();
17640 }
17641
17642 /* Parse Objective-C ivars.  */
17643
17644 static void
17645 cp_parser_objc_class_ivars (cp_parser* parser)
17646 {
17647   cp_token *token = cp_lexer_peek_token (parser->lexer);
17648
17649   if (token->type != CPP_OPEN_BRACE)
17650     return;     /* No ivars specified.  */
17651
17652   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
17653   token = cp_lexer_peek_token (parser->lexer);
17654
17655   while (token->type != CPP_CLOSE_BRACE)
17656     {
17657       cp_decl_specifier_seq declspecs;
17658       int decl_class_or_enum_p;
17659       tree prefix_attributes;
17660
17661       cp_parser_objc_visibility_spec (parser);
17662
17663       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
17664         break;
17665
17666       cp_parser_decl_specifier_seq (parser,
17667                                     CP_PARSER_FLAGS_OPTIONAL,
17668                                     &declspecs,
17669                                     &decl_class_or_enum_p);
17670       prefix_attributes = declspecs.attributes;
17671       declspecs.attributes = NULL_TREE;
17672
17673       /* Keep going until we hit the `;' at the end of the
17674          declaration.  */
17675       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
17676         {
17677           tree width = NULL_TREE, attributes, first_attribute, decl;
17678           cp_declarator *declarator = NULL;
17679           int ctor_dtor_or_conv_p;
17680
17681           /* Check for a (possibly unnamed) bitfield declaration.  */
17682           token = cp_lexer_peek_token (parser->lexer);
17683           if (token->type == CPP_COLON)
17684             goto eat_colon;
17685
17686           if (token->type == CPP_NAME
17687               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
17688                   == CPP_COLON))
17689             {
17690               /* Get the name of the bitfield.  */
17691               declarator = make_id_declarator (NULL_TREE,
17692                                                cp_parser_identifier (parser),
17693                                                sfk_none);
17694
17695              eat_colon:
17696               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17697               /* Get the width of the bitfield.  */
17698               width
17699                 = cp_parser_constant_expression (parser,
17700                                                  /*allow_non_constant=*/false,
17701                                                  NULL);
17702             }
17703           else
17704             {
17705               /* Parse the declarator.  */
17706               declarator
17707                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
17708                                         &ctor_dtor_or_conv_p,
17709                                         /*parenthesized_p=*/NULL,
17710                                         /*member_p=*/false);
17711             }
17712
17713           /* Look for attributes that apply to the ivar.  */
17714           attributes = cp_parser_attributes_opt (parser);
17715           /* Remember which attributes are prefix attributes and
17716              which are not.  */
17717           first_attribute = attributes;
17718           /* Combine the attributes.  */
17719           attributes = chainon (prefix_attributes, attributes);
17720
17721           if (width)
17722             {
17723               /* Create the bitfield declaration.  */
17724               decl = grokbitfield (declarator, &declspecs, width);
17725               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
17726             }
17727           else
17728             decl = grokfield (declarator, &declspecs,
17729                               NULL_TREE, /*init_const_expr_p=*/false,
17730                               NULL_TREE, attributes);
17731
17732           /* Add the instance variable.  */
17733           objc_add_instance_variable (decl);
17734
17735           /* Reset PREFIX_ATTRIBUTES.  */
17736           while (attributes && TREE_CHAIN (attributes) != first_attribute)
17737             attributes = TREE_CHAIN (attributes);
17738           if (attributes)
17739             TREE_CHAIN (attributes) = NULL_TREE;
17740
17741           token = cp_lexer_peek_token (parser->lexer);
17742
17743           if (token->type == CPP_COMMA)
17744             {
17745               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17746               continue;
17747             }
17748           break;
17749         }
17750
17751       cp_parser_consume_semicolon_at_end_of_statement (parser);
17752       token = cp_lexer_peek_token (parser->lexer);
17753     }
17754
17755   cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
17756   /* For historical reasons, we accept an optional semicolon.  */
17757   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17758     cp_lexer_consume_token (parser->lexer);
17759 }
17760
17761 /* Parse an Objective-C protocol declaration.  */
17762
17763 static void
17764 cp_parser_objc_protocol_declaration (cp_parser* parser)
17765 {
17766   tree proto, protorefs;
17767   cp_token *tok;
17768
17769   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17770   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
17771     {
17772       error ("identifier expected after %<@protocol%>");
17773       goto finish;
17774     }
17775
17776   /* See if we have a forward declaration or a definition.  */
17777   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
17778
17779   /* Try a forward declaration first.  */
17780   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
17781     {
17782       objc_declare_protocols (cp_parser_objc_identifier_list (parser));
17783      finish:
17784       cp_parser_consume_semicolon_at_end_of_statement (parser);
17785     }
17786
17787   /* Ok, we got a full-fledged definition (or at least should).  */
17788   else
17789     {
17790       proto = cp_parser_identifier (parser);
17791       protorefs = cp_parser_objc_protocol_refs_opt (parser);
17792       objc_start_protocol (proto, protorefs);
17793       cp_parser_objc_method_prototype_list (parser);
17794     }
17795 }
17796
17797 /* Parse an Objective-C superclass or category.  */
17798
17799 static void
17800 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
17801                                                           tree *categ)
17802 {
17803   cp_token *next = cp_lexer_peek_token (parser->lexer);
17804
17805   *super = *categ = NULL_TREE;
17806   if (next->type == CPP_COLON)
17807     {
17808       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17809       *super = cp_parser_identifier (parser);
17810     }
17811   else if (next->type == CPP_OPEN_PAREN)
17812     {
17813       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17814       *categ = cp_parser_identifier (parser);
17815       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17816     }
17817 }
17818
17819 /* Parse an Objective-C class interface.  */
17820
17821 static void
17822 cp_parser_objc_class_interface (cp_parser* parser)
17823 {
17824   tree name, super, categ, protos;
17825
17826   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
17827   name = cp_parser_identifier (parser);
17828   cp_parser_objc_superclass_or_category (parser, &super, &categ);
17829   protos = cp_parser_objc_protocol_refs_opt (parser);
17830
17831   /* We have either a class or a category on our hands.  */
17832   if (categ)
17833     objc_start_category_interface (name, categ, protos);
17834   else
17835     {
17836       objc_start_class_interface (name, super, protos);
17837       /* Handle instance variable declarations, if any.  */
17838       cp_parser_objc_class_ivars (parser);
17839       objc_continue_interface ();
17840     }
17841
17842   cp_parser_objc_method_prototype_list (parser);
17843 }
17844
17845 /* Parse an Objective-C class implementation.  */
17846
17847 static void
17848 cp_parser_objc_class_implementation (cp_parser* parser)
17849 {
17850   tree name, super, categ;
17851
17852   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
17853   name = cp_parser_identifier (parser);
17854   cp_parser_objc_superclass_or_category (parser, &super, &categ);
17855
17856   /* We have either a class or a category on our hands.  */
17857   if (categ)
17858     objc_start_category_implementation (name, categ);
17859   else
17860     {
17861       objc_start_class_implementation (name, super);
17862       /* Handle instance variable declarations, if any.  */
17863       cp_parser_objc_class_ivars (parser);
17864       objc_continue_implementation ();
17865     }
17866
17867   cp_parser_objc_method_definition_list (parser);
17868 }
17869
17870 /* Consume the @end token and finish off the implementation.  */
17871
17872 static void
17873 cp_parser_objc_end_implementation (cp_parser* parser)
17874 {
17875   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17876   objc_finish_implementation ();
17877 }
17878
17879 /* Parse an Objective-C declaration.  */
17880
17881 static void
17882 cp_parser_objc_declaration (cp_parser* parser)
17883 {
17884   /* Try to figure out what kind of declaration is present.  */
17885   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17886
17887   switch (kwd->keyword)
17888     {
17889     case RID_AT_ALIAS:
17890       cp_parser_objc_alias_declaration (parser);
17891       break;
17892     case RID_AT_CLASS:
17893       cp_parser_objc_class_declaration (parser);
17894       break;
17895     case RID_AT_PROTOCOL:
17896       cp_parser_objc_protocol_declaration (parser);
17897       break;
17898     case RID_AT_INTERFACE:
17899       cp_parser_objc_class_interface (parser);
17900       break;
17901     case RID_AT_IMPLEMENTATION:
17902       cp_parser_objc_class_implementation (parser);
17903       break;
17904     case RID_AT_END:
17905       cp_parser_objc_end_implementation (parser);
17906       break;
17907     default:
17908       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
17909       cp_parser_skip_to_end_of_block_or_statement (parser);
17910     }
17911 }
17912
17913 /* Parse an Objective-C try-catch-finally statement.
17914
17915    objc-try-catch-finally-stmt:
17916      @try compound-statement objc-catch-clause-seq [opt]
17917        objc-finally-clause [opt]
17918
17919    objc-catch-clause-seq:
17920      objc-catch-clause objc-catch-clause-seq [opt]
17921
17922    objc-catch-clause:
17923      @catch ( exception-declaration ) compound-statement
17924
17925    objc-finally-clause
17926      @finally compound-statement
17927
17928    Returns NULL_TREE.  */
17929
17930 static tree
17931 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
17932   location_t location;
17933   tree stmt;
17934
17935   cp_parser_require_keyword (parser, RID_AT_TRY, "`@try'");
17936   location = cp_lexer_peek_token (parser->lexer)->location;
17937   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
17938      node, lest it get absorbed into the surrounding block.  */
17939   stmt = push_stmt_list ();
17940   cp_parser_compound_statement (parser, NULL, false);
17941   objc_begin_try_stmt (location, pop_stmt_list (stmt));
17942
17943   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
17944     {
17945       cp_parameter_declarator *parmdecl;
17946       tree parm;
17947
17948       cp_lexer_consume_token (parser->lexer);
17949       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17950       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17951       parm = grokdeclarator (parmdecl->declarator,
17952                              &parmdecl->decl_specifiers,
17953                              PARM, /*initialized=*/0,
17954                              /*attrlist=*/NULL);
17955       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17956       objc_begin_catch_clause (parm);
17957       cp_parser_compound_statement (parser, NULL, false);
17958       objc_finish_catch_clause ();
17959     }
17960
17961   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
17962     {
17963       cp_lexer_consume_token (parser->lexer);
17964       location = cp_lexer_peek_token (parser->lexer)->location;
17965       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
17966          node, lest it get absorbed into the surrounding block.  */
17967       stmt = push_stmt_list ();
17968       cp_parser_compound_statement (parser, NULL, false);
17969       objc_build_finally_clause (location, pop_stmt_list (stmt));
17970     }
17971
17972   return objc_finish_try_stmt ();
17973 }
17974
17975 /* Parse an Objective-C synchronized statement.
17976
17977    objc-synchronized-stmt:
17978      @synchronized ( expression ) compound-statement
17979
17980    Returns NULL_TREE.  */
17981
17982 static tree
17983 cp_parser_objc_synchronized_statement (cp_parser *parser) {
17984   location_t location;
17985   tree lock, stmt;
17986
17987   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "`@synchronized'");
17988
17989   location = cp_lexer_peek_token (parser->lexer)->location;
17990   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17991   lock = cp_parser_expression (parser, false);
17992   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17993
17994   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
17995      node, lest it get absorbed into the surrounding block.  */
17996   stmt = push_stmt_list ();
17997   cp_parser_compound_statement (parser, NULL, false);
17998
17999   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
18000 }
18001
18002 /* Parse an Objective-C throw statement.
18003
18004    objc-throw-stmt:
18005      @throw assignment-expression [opt] ;
18006
18007    Returns a constructed '@throw' statement.  */
18008
18009 static tree
18010 cp_parser_objc_throw_statement (cp_parser *parser) {
18011   tree expr = NULL_TREE;
18012
18013   cp_parser_require_keyword (parser, RID_AT_THROW, "`@throw'");
18014
18015   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18016     expr = cp_parser_assignment_expression (parser, false);
18017
18018   cp_parser_consume_semicolon_at_end_of_statement (parser);
18019
18020   return objc_build_throw_stmt (expr);
18021 }
18022
18023 /* Parse an Objective-C statement.  */
18024
18025 static tree
18026 cp_parser_objc_statement (cp_parser * parser) {
18027   /* Try to figure out what kind of declaration is present.  */
18028   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
18029
18030   switch (kwd->keyword)
18031     {
18032     case RID_AT_TRY:
18033       return cp_parser_objc_try_catch_finally_statement (parser);
18034     case RID_AT_SYNCHRONIZED:
18035       return cp_parser_objc_synchronized_statement (parser);
18036     case RID_AT_THROW:
18037       return cp_parser_objc_throw_statement (parser);
18038     default:
18039       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
18040       cp_parser_skip_to_end_of_block_or_statement (parser);
18041     }
18042
18043   return error_mark_node;
18044 }
18045 \f
18046 /* OpenMP 2.5 parsing routines.  */
18047
18048 /* All OpenMP clauses.  OpenMP 2.5.  */
18049 typedef enum pragma_omp_clause {
18050   PRAGMA_OMP_CLAUSE_NONE = 0,
18051
18052   PRAGMA_OMP_CLAUSE_COPYIN,
18053   PRAGMA_OMP_CLAUSE_COPYPRIVATE,
18054   PRAGMA_OMP_CLAUSE_DEFAULT,
18055   PRAGMA_OMP_CLAUSE_FIRSTPRIVATE,
18056   PRAGMA_OMP_CLAUSE_IF,
18057   PRAGMA_OMP_CLAUSE_LASTPRIVATE,
18058   PRAGMA_OMP_CLAUSE_NOWAIT,
18059   PRAGMA_OMP_CLAUSE_NUM_THREADS,
18060   PRAGMA_OMP_CLAUSE_ORDERED,
18061   PRAGMA_OMP_CLAUSE_PRIVATE,
18062   PRAGMA_OMP_CLAUSE_REDUCTION,
18063   PRAGMA_OMP_CLAUSE_SCHEDULE,
18064   PRAGMA_OMP_CLAUSE_SHARED
18065 } pragma_omp_clause;
18066
18067 /* Returns name of the next clause.
18068    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
18069    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
18070    returned and the token is consumed.  */
18071
18072 static pragma_omp_clause
18073 cp_parser_omp_clause_name (cp_parser *parser)
18074 {
18075   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
18076
18077   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
18078     result = PRAGMA_OMP_CLAUSE_IF;
18079   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
18080     result = PRAGMA_OMP_CLAUSE_DEFAULT;
18081   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
18082     result = PRAGMA_OMP_CLAUSE_PRIVATE;
18083   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18084     {
18085       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18086       const char *p = IDENTIFIER_POINTER (id);
18087
18088       switch (p[0])
18089         {
18090         case 'c':
18091           if (!strcmp ("copyin", p))
18092             result = PRAGMA_OMP_CLAUSE_COPYIN;
18093           else if (!strcmp ("copyprivate", p))
18094             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
18095           break;
18096         case 'f':
18097           if (!strcmp ("firstprivate", p))
18098             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
18099           break;
18100         case 'l':
18101           if (!strcmp ("lastprivate", p))
18102             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
18103           break;
18104         case 'n':
18105           if (!strcmp ("nowait", p))
18106             result = PRAGMA_OMP_CLAUSE_NOWAIT;
18107           else if (!strcmp ("num_threads", p))
18108             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
18109           break;
18110         case 'o':
18111           if (!strcmp ("ordered", p))
18112             result = PRAGMA_OMP_CLAUSE_ORDERED;
18113           break;
18114         case 'r':
18115           if (!strcmp ("reduction", p))
18116             result = PRAGMA_OMP_CLAUSE_REDUCTION;
18117           break;
18118         case 's':
18119           if (!strcmp ("schedule", p))
18120             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
18121           else if (!strcmp ("shared", p))
18122             result = PRAGMA_OMP_CLAUSE_SHARED;
18123           break;
18124         }
18125     }
18126
18127   if (result != PRAGMA_OMP_CLAUSE_NONE)
18128     cp_lexer_consume_token (parser->lexer);
18129
18130   return result;
18131 }
18132
18133 /* Validate that a clause of the given type does not already exist.  */
18134
18135 static void
18136 check_no_duplicate_clause (tree clauses, enum tree_code code, const char *name)
18137 {
18138   tree c;
18139
18140   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
18141     if (OMP_CLAUSE_CODE (c) == code)
18142       {
18143         error ("too many %qs clauses", name);
18144         break;
18145       }
18146 }
18147
18148 /* OpenMP 2.5:
18149    variable-list:
18150      identifier
18151      variable-list , identifier
18152
18153    In addition, we match a closing parenthesis.  An opening parenthesis
18154    will have been consumed by the caller.
18155
18156    If KIND is nonzero, create the appropriate node and install the decl
18157    in OMP_CLAUSE_DECL and add the node to the head of the list.
18158
18159    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
18160    return the list created.  */
18161
18162 static tree
18163 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
18164                                 tree list)
18165 {
18166   while (1)
18167     {
18168       tree name, decl;
18169
18170       name = cp_parser_id_expression (parser, /*template_p=*/false,
18171                                       /*check_dependency_p=*/true,
18172                                       /*template_p=*/NULL,
18173                                       /*declarator_p=*/false,
18174                                       /*optional_p=*/false);
18175       if (name == error_mark_node)
18176         goto skip_comma;
18177
18178       decl = cp_parser_lookup_name_simple (parser, name);
18179       if (decl == error_mark_node)
18180         cp_parser_name_lookup_error (parser, name, decl, NULL);
18181       else if (kind != 0)
18182         {
18183           tree u = build_omp_clause (kind);
18184           OMP_CLAUSE_DECL (u) = decl;
18185           OMP_CLAUSE_CHAIN (u) = list;
18186           list = u;
18187         }
18188       else
18189         list = tree_cons (decl, NULL_TREE, list);
18190
18191     get_comma:
18192       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
18193         break;
18194       cp_lexer_consume_token (parser->lexer);
18195     }
18196
18197   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18198     {
18199       int ending;
18200
18201       /* Try to resync to an unnested comma.  Copied from
18202          cp_parser_parenthesized_expression_list.  */
18203     skip_comma:
18204       ending = cp_parser_skip_to_closing_parenthesis (parser,
18205                                                       /*recovering=*/true,
18206                                                       /*or_comma=*/true,
18207                                                       /*consume_paren=*/true);
18208       if (ending < 0)
18209         goto get_comma;
18210     }
18211
18212   return list;
18213 }
18214
18215 /* Similarly, but expect leading and trailing parenthesis.  This is a very
18216    common case for omp clauses.  */
18217
18218 static tree
18219 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
18220 {
18221   if (cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18222     return cp_parser_omp_var_list_no_open (parser, kind, list);
18223   return list;
18224 }
18225
18226 /* OpenMP 2.5:
18227    default ( shared | none ) */
18228
18229 static tree
18230 cp_parser_omp_clause_default (cp_parser *parser, tree list)
18231 {
18232   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
18233   tree c;
18234
18235   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18236     return list;
18237   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18238     {
18239       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18240       const char *p = IDENTIFIER_POINTER (id);
18241
18242       switch (p[0])
18243         {
18244         case 'n':
18245           if (strcmp ("none", p) != 0)
18246             goto invalid_kind;
18247           kind = OMP_CLAUSE_DEFAULT_NONE;
18248           break;
18249
18250         case 's':
18251           if (strcmp ("shared", p) != 0)
18252             goto invalid_kind;
18253           kind = OMP_CLAUSE_DEFAULT_SHARED;
18254           break;
18255
18256         default:
18257           goto invalid_kind;
18258         }
18259
18260       cp_lexer_consume_token (parser->lexer);
18261     }
18262   else
18263     {
18264     invalid_kind:
18265       cp_parser_error (parser, "expected %<none%> or %<shared%>");
18266     }
18267
18268   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18269     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18270                                            /*or_comma=*/false,
18271                                            /*consume_paren=*/true);
18272
18273   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
18274     return list;
18275
18276   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default");
18277   c = build_omp_clause (OMP_CLAUSE_DEFAULT);
18278   OMP_CLAUSE_CHAIN (c) = list;
18279   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
18280
18281   return c;
18282 }
18283
18284 /* OpenMP 2.5:
18285    if ( expression ) */
18286
18287 static tree
18288 cp_parser_omp_clause_if (cp_parser *parser, tree list)
18289 {
18290   tree t, c;
18291
18292   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18293     return list;
18294
18295   t = cp_parser_condition (parser);
18296
18297   if (t == error_mark_node
18298       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18299     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18300                                            /*or_comma=*/false,
18301                                            /*consume_paren=*/true);
18302
18303   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if");
18304
18305   c = build_omp_clause (OMP_CLAUSE_IF);
18306   OMP_CLAUSE_IF_EXPR (c) = t;
18307   OMP_CLAUSE_CHAIN (c) = list;
18308
18309   return c;
18310 }
18311
18312 /* OpenMP 2.5:
18313    nowait */
18314
18315 static tree
18316 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18317 {
18318   tree c;
18319
18320   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait");
18321
18322   c = build_omp_clause (OMP_CLAUSE_NOWAIT);
18323   OMP_CLAUSE_CHAIN (c) = list;
18324   return c;
18325 }
18326
18327 /* OpenMP 2.5:
18328    num_threads ( expression ) */
18329
18330 static tree
18331 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list)
18332 {
18333   tree t, c;
18334
18335   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18336     return list;
18337
18338   t = cp_parser_expression (parser, false);
18339
18340   if (t == error_mark_node
18341       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18342     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18343                                            /*or_comma=*/false,
18344                                            /*consume_paren=*/true);
18345
18346   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS, "num_threads");
18347
18348   c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
18349   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
18350   OMP_CLAUSE_CHAIN (c) = list;
18351
18352   return c;
18353 }
18354
18355 /* OpenMP 2.5:
18356    ordered */
18357
18358 static tree
18359 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18360 {
18361   tree c;
18362
18363   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED, "ordered");
18364
18365   c = build_omp_clause (OMP_CLAUSE_ORDERED);
18366   OMP_CLAUSE_CHAIN (c) = list;
18367   return c;
18368 }
18369
18370 /* OpenMP 2.5:
18371    reduction ( reduction-operator : variable-list )
18372
18373    reduction-operator:
18374      One of: + * - & ^ | && || */
18375
18376 static tree
18377 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
18378 {
18379   enum tree_code code;
18380   tree nlist, c;
18381
18382   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18383     return list;
18384
18385   switch (cp_lexer_peek_token (parser->lexer)->type)
18386     {
18387     case CPP_PLUS:
18388       code = PLUS_EXPR;
18389       break;
18390     case CPP_MULT:
18391       code = MULT_EXPR;
18392       break;
18393     case CPP_MINUS:
18394       code = MINUS_EXPR;
18395       break;
18396     case CPP_AND:
18397       code = BIT_AND_EXPR;
18398       break;
18399     case CPP_XOR:
18400       code = BIT_XOR_EXPR;
18401       break;
18402     case CPP_OR:
18403       code = BIT_IOR_EXPR;
18404       break;
18405     case CPP_AND_AND:
18406       code = TRUTH_ANDIF_EXPR;
18407       break;
18408     case CPP_OR_OR:
18409       code = TRUTH_ORIF_EXPR;
18410       break;
18411     default:
18412       cp_parser_error (parser, "`+', `*', `-', `&', `^', `|', `&&', or `||'");
18413     resync_fail:
18414       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18415                                              /*or_comma=*/false,
18416                                              /*consume_paren=*/true);
18417       return list;
18418     }
18419   cp_lexer_consume_token (parser->lexer);
18420
18421   if (!cp_parser_require (parser, CPP_COLON, "`:'"))
18422     goto resync_fail;
18423
18424   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
18425   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
18426     OMP_CLAUSE_REDUCTION_CODE (c) = code;
18427
18428   return nlist;
18429 }
18430
18431 /* OpenMP 2.5:
18432    schedule ( schedule-kind )
18433    schedule ( schedule-kind , expression )
18434
18435    schedule-kind:
18436      static | dynamic | guided | runtime  */
18437
18438 static tree
18439 cp_parser_omp_clause_schedule (cp_parser *parser, tree list)
18440 {
18441   tree c, t;
18442
18443   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
18444     return list;
18445
18446   c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
18447
18448   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18449     {
18450       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18451       const char *p = IDENTIFIER_POINTER (id);
18452
18453       switch (p[0])
18454         {
18455         case 'd':
18456           if (strcmp ("dynamic", p) != 0)
18457             goto invalid_kind;
18458           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
18459           break;
18460
18461         case 'g':
18462           if (strcmp ("guided", p) != 0)
18463             goto invalid_kind;
18464           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
18465           break;
18466
18467         case 'r':
18468           if (strcmp ("runtime", p) != 0)
18469             goto invalid_kind;
18470           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
18471           break;
18472
18473         default:
18474           goto invalid_kind;
18475         }
18476     }
18477   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
18478     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
18479   else
18480     goto invalid_kind;
18481   cp_lexer_consume_token (parser->lexer);
18482
18483   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
18484     {
18485       cp_lexer_consume_token (parser->lexer);
18486
18487       t = cp_parser_assignment_expression (parser, false);
18488
18489       if (t == error_mark_node)
18490         goto resync_fail;
18491       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
18492         error ("schedule %<runtime%> does not take "
18493                "a %<chunk_size%> parameter");
18494       else
18495         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
18496
18497       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18498         goto resync_fail;
18499     }
18500   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`,' or `)'"))
18501     goto resync_fail;
18502
18503   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule");
18504   OMP_CLAUSE_CHAIN (c) = list;
18505   return c;
18506
18507  invalid_kind:
18508   cp_parser_error (parser, "invalid schedule kind");
18509  resync_fail:
18510   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18511                                          /*or_comma=*/false,
18512                                          /*consume_paren=*/true);
18513   return list;
18514 }
18515
18516 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
18517    is a bitmask in MASK.  Return the list of clauses found; the result
18518    of clause default goes in *pdefault.  */
18519
18520 static tree
18521 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
18522                            const char *where, cp_token *pragma_tok)
18523 {
18524   tree clauses = NULL;
18525
18526   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
18527     {
18528       pragma_omp_clause c_kind = cp_parser_omp_clause_name (parser);
18529       const char *c_name;
18530       tree prev = clauses;
18531
18532       switch (c_kind)
18533         {
18534         case PRAGMA_OMP_CLAUSE_COPYIN:
18535           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
18536           c_name = "copyin";
18537           break;
18538         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
18539           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
18540                                             clauses);
18541           c_name = "copyprivate";
18542           break;
18543         case PRAGMA_OMP_CLAUSE_DEFAULT:
18544           clauses = cp_parser_omp_clause_default (parser, clauses);
18545           c_name = "default";
18546           break;
18547         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
18548           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
18549                                             clauses);
18550           c_name = "firstprivate";
18551           break;
18552         case PRAGMA_OMP_CLAUSE_IF:
18553           clauses = cp_parser_omp_clause_if (parser, clauses);
18554           c_name = "if";
18555           break;
18556         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
18557           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
18558                                             clauses);
18559           c_name = "lastprivate";
18560           break;
18561         case PRAGMA_OMP_CLAUSE_NOWAIT:
18562           clauses = cp_parser_omp_clause_nowait (parser, clauses);
18563           c_name = "nowait";
18564           break;
18565         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
18566           clauses = cp_parser_omp_clause_num_threads (parser, clauses);
18567           c_name = "num_threads";
18568           break;
18569         case PRAGMA_OMP_CLAUSE_ORDERED:
18570           clauses = cp_parser_omp_clause_ordered (parser, clauses);
18571           c_name = "ordered";
18572           break;
18573         case PRAGMA_OMP_CLAUSE_PRIVATE:
18574           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
18575                                             clauses);
18576           c_name = "private";
18577           break;
18578         case PRAGMA_OMP_CLAUSE_REDUCTION:
18579           clauses = cp_parser_omp_clause_reduction (parser, clauses);
18580           c_name = "reduction";
18581           break;
18582         case PRAGMA_OMP_CLAUSE_SCHEDULE:
18583           clauses = cp_parser_omp_clause_schedule (parser, clauses);
18584           c_name = "schedule";
18585           break;
18586         case PRAGMA_OMP_CLAUSE_SHARED:
18587           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
18588                                             clauses);
18589           c_name = "shared";
18590           break;
18591         default:
18592           cp_parser_error (parser, "expected %<#pragma omp%> clause");
18593           goto saw_error;
18594         }
18595
18596       if (((mask >> c_kind) & 1) == 0)
18597         {
18598           /* Remove the invalid clause(s) from the list to avoid
18599              confusing the rest of the compiler.  */
18600           clauses = prev;
18601           error ("%qs is not valid for %qs", c_name, where);
18602         }
18603     }
18604  saw_error:
18605   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
18606   return finish_omp_clauses (clauses);
18607 }
18608
18609 /* OpenMP 2.5:
18610    structured-block:
18611      statement
18612
18613    In practice, we're also interested in adding the statement to an
18614    outer node.  So it is convenient if we work around the fact that
18615    cp_parser_statement calls add_stmt.  */
18616
18617 static unsigned
18618 cp_parser_begin_omp_structured_block (cp_parser *parser)
18619 {
18620   unsigned save = parser->in_statement;
18621
18622   /* Only move the values to IN_OMP_BLOCK if they weren't false.
18623      This preserves the "not within loop or switch" style error messages
18624      for nonsense cases like
18625         void foo() {
18626         #pragma omp single
18627           break;
18628         }
18629   */
18630   if (parser->in_statement)
18631     parser->in_statement = IN_OMP_BLOCK;
18632
18633   return save;
18634 }
18635
18636 static void
18637 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
18638 {
18639   parser->in_statement = save;
18640 }
18641
18642 static tree
18643 cp_parser_omp_structured_block (cp_parser *parser)
18644 {
18645   tree stmt = begin_omp_structured_block ();
18646   unsigned int save = cp_parser_begin_omp_structured_block (parser);
18647
18648   cp_parser_statement (parser, NULL_TREE, false);
18649
18650   cp_parser_end_omp_structured_block (parser, save);
18651   return finish_omp_structured_block (stmt);
18652 }
18653
18654 /* OpenMP 2.5:
18655    # pragma omp atomic new-line
18656      expression-stmt
18657
18658    expression-stmt:
18659      x binop= expr | x++ | ++x | x-- | --x
18660    binop:
18661      +, *, -, /, &, ^, |, <<, >>
18662
18663   where x is an lvalue expression with scalar type.  */
18664
18665 static void
18666 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
18667 {
18668   tree lhs, rhs;
18669   enum tree_code code;
18670
18671   cp_parser_require_pragma_eol (parser, pragma_tok);
18672
18673   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
18674                                     /*cast_p=*/false);
18675   switch (TREE_CODE (lhs))
18676     {
18677     case ERROR_MARK:
18678       goto saw_error;
18679
18680     case PREINCREMENT_EXPR:
18681     case POSTINCREMENT_EXPR:
18682       lhs = TREE_OPERAND (lhs, 0);
18683       code = PLUS_EXPR;
18684       rhs = integer_one_node;
18685       break;
18686
18687     case PREDECREMENT_EXPR:
18688     case POSTDECREMENT_EXPR:
18689       lhs = TREE_OPERAND (lhs, 0);
18690       code = MINUS_EXPR;
18691       rhs = integer_one_node;
18692       break;
18693
18694     default:
18695       switch (cp_lexer_peek_token (parser->lexer)->type)
18696         {
18697         case CPP_MULT_EQ:
18698           code = MULT_EXPR;
18699           break;
18700         case CPP_DIV_EQ:
18701           code = TRUNC_DIV_EXPR;
18702           break;
18703         case CPP_PLUS_EQ:
18704           code = PLUS_EXPR;
18705           break;
18706         case CPP_MINUS_EQ:
18707           code = MINUS_EXPR;
18708           break;
18709         case CPP_LSHIFT_EQ:
18710           code = LSHIFT_EXPR;
18711           break;
18712         case CPP_RSHIFT_EQ:
18713           code = RSHIFT_EXPR;
18714           break;
18715         case CPP_AND_EQ:
18716           code = BIT_AND_EXPR;
18717           break;
18718         case CPP_OR_EQ:
18719           code = BIT_IOR_EXPR;
18720           break;
18721         case CPP_XOR_EQ:
18722           code = BIT_XOR_EXPR;
18723           break;
18724         default:
18725           cp_parser_error (parser,
18726                            "invalid operator for %<#pragma omp atomic%>");
18727           goto saw_error;
18728         }
18729       cp_lexer_consume_token (parser->lexer);
18730
18731       rhs = cp_parser_expression (parser, false);
18732       if (rhs == error_mark_node)
18733         goto saw_error;
18734       break;
18735     }
18736   finish_omp_atomic (code, lhs, rhs);
18737   cp_parser_consume_semicolon_at_end_of_statement (parser);
18738   return;
18739
18740  saw_error:
18741   cp_parser_skip_to_end_of_block_or_statement (parser);
18742 }
18743
18744
18745 /* OpenMP 2.5:
18746    # pragma omp barrier new-line  */
18747
18748 static void
18749 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
18750 {
18751   cp_parser_require_pragma_eol (parser, pragma_tok);
18752   finish_omp_barrier ();
18753 }
18754
18755 /* OpenMP 2.5:
18756    # pragma omp critical [(name)] new-line
18757      structured-block  */
18758
18759 static tree
18760 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
18761 {
18762   tree stmt, name = NULL;
18763
18764   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18765     {
18766       cp_lexer_consume_token (parser->lexer);
18767
18768       name = cp_parser_identifier (parser);
18769
18770       if (name == error_mark_node
18771           || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18772         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18773                                                /*or_comma=*/false,
18774                                                /*consume_paren=*/true);
18775       if (name == error_mark_node)
18776         name = NULL;
18777     }
18778   cp_parser_require_pragma_eol (parser, pragma_tok);
18779
18780   stmt = cp_parser_omp_structured_block (parser);
18781   return c_finish_omp_critical (stmt, name);
18782 }
18783
18784 /* OpenMP 2.5:
18785    # pragma omp flush flush-vars[opt] new-line
18786
18787    flush-vars:
18788      ( variable-list ) */
18789
18790 static void
18791 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
18792 {
18793   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18794     (void) cp_parser_omp_var_list (parser, 0, NULL);
18795   cp_parser_require_pragma_eol (parser, pragma_tok);
18796
18797   finish_omp_flush ();
18798 }
18799
18800 /* Parse the restricted form of the for statment allowed by OpenMP.  */
18801
18802 static tree
18803 cp_parser_omp_for_loop (cp_parser *parser)
18804 {
18805   tree init, cond, incr, body, decl, pre_body;
18806   location_t loc;
18807
18808   if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
18809     {
18810       cp_parser_error (parser, "for statement expected");
18811       return NULL;
18812     }
18813   loc = cp_lexer_consume_token (parser->lexer)->location;
18814   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18815     return NULL;
18816
18817   init = decl = NULL;
18818   pre_body = push_stmt_list ();
18819   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18820     {
18821       cp_decl_specifier_seq type_specifiers;
18822
18823       /* First, try to parse as an initialized declaration.  See
18824          cp_parser_condition, from whence the bulk of this is copied.  */
18825
18826       cp_parser_parse_tentatively (parser);
18827       cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
18828                                     &type_specifiers);
18829       if (!cp_parser_error_occurred (parser))
18830         {
18831           tree asm_specification, attributes;
18832           cp_declarator *declarator;
18833
18834           declarator = cp_parser_declarator (parser,
18835                                              CP_PARSER_DECLARATOR_NAMED,
18836                                              /*ctor_dtor_or_conv_p=*/NULL,
18837                                              /*parenthesized_p=*/NULL,
18838                                              /*member_p=*/false);
18839           attributes = cp_parser_attributes_opt (parser);
18840           asm_specification = cp_parser_asm_specification_opt (parser);
18841
18842           cp_parser_require (parser, CPP_EQ, "`='");
18843           if (cp_parser_parse_definitely (parser))
18844             {
18845               tree pushed_scope;
18846
18847               decl = start_decl (declarator, &type_specifiers,
18848                                  /*initialized_p=*/false, attributes,
18849                                  /*prefix_attributes=*/NULL_TREE,
18850                                  &pushed_scope);
18851
18852               init = cp_parser_assignment_expression (parser, false);
18853
18854               cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
18855                               asm_specification, LOOKUP_ONLYCONVERTING);
18856
18857               if (pushed_scope)
18858                 pop_scope (pushed_scope);
18859             }
18860         }
18861       else
18862         cp_parser_abort_tentative_parse (parser);
18863
18864       /* If parsing as an initialized declaration failed, try again as
18865          a simple expression.  */
18866       if (decl == NULL)
18867         init = cp_parser_expression (parser, false);
18868     }
18869   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18870   pre_body = pop_stmt_list (pre_body);
18871
18872   cond = NULL;
18873   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18874     cond = cp_parser_condition (parser);
18875   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18876
18877   incr = NULL;
18878   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
18879     incr = cp_parser_expression (parser, false);
18880
18881   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18882     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18883                                            /*or_comma=*/false,
18884                                            /*consume_paren=*/true);
18885
18886   /* Note that we saved the original contents of this flag when we entered
18887      the structured block, and so we don't need to re-save it here.  */
18888   parser->in_statement = IN_OMP_FOR;
18889
18890   /* Note that the grammar doesn't call for a structured block here,
18891      though the loop as a whole is a structured block.  */
18892   body = push_stmt_list ();
18893   cp_parser_statement (parser, NULL_TREE, false);
18894   body = pop_stmt_list (body);
18895
18896   return finish_omp_for (loc, decl, init, cond, incr, body, pre_body);
18897 }
18898
18899 /* OpenMP 2.5:
18900    #pragma omp for for-clause[optseq] new-line
18901      for-loop  */
18902
18903 #define OMP_FOR_CLAUSE_MASK                             \
18904         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18905         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18906         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
18907         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
18908         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
18909         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
18910         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18911
18912 static tree
18913 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
18914 {
18915   tree clauses, sb, ret;
18916   unsigned int save;
18917
18918   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
18919                                        "#pragma omp for", pragma_tok);
18920
18921   sb = begin_omp_structured_block ();
18922   save = cp_parser_begin_omp_structured_block (parser);
18923
18924   ret = cp_parser_omp_for_loop (parser);
18925   if (ret)
18926     OMP_FOR_CLAUSES (ret) = clauses;
18927
18928   cp_parser_end_omp_structured_block (parser, save);
18929   add_stmt (finish_omp_structured_block (sb));
18930
18931   return ret;
18932 }
18933
18934 /* OpenMP 2.5:
18935    # pragma omp master new-line
18936      structured-block  */
18937
18938 static tree
18939 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
18940 {
18941   cp_parser_require_pragma_eol (parser, pragma_tok);
18942   return c_finish_omp_master (cp_parser_omp_structured_block (parser));
18943 }
18944
18945 /* OpenMP 2.5:
18946    # pragma omp ordered new-line
18947      structured-block  */
18948
18949 static tree
18950 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
18951 {
18952   cp_parser_require_pragma_eol (parser, pragma_tok);
18953   return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
18954 }
18955
18956 /* OpenMP 2.5:
18957
18958    section-scope:
18959      { section-sequence }
18960
18961    section-sequence:
18962      section-directive[opt] structured-block
18963      section-sequence section-directive structured-block  */
18964
18965 static tree
18966 cp_parser_omp_sections_scope (cp_parser *parser)
18967 {
18968   tree stmt, substmt;
18969   bool error_suppress = false;
18970   cp_token *tok;
18971
18972   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
18973     return NULL_TREE;
18974
18975   stmt = push_stmt_list ();
18976
18977   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
18978     {
18979       unsigned save;
18980
18981       substmt = begin_omp_structured_block ();
18982       save = cp_parser_begin_omp_structured_block (parser);
18983
18984       while (1)
18985         {
18986           cp_parser_statement (parser, NULL_TREE, false);
18987
18988           tok = cp_lexer_peek_token (parser->lexer);
18989           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
18990             break;
18991           if (tok->type == CPP_CLOSE_BRACE)
18992             break;
18993           if (tok->type == CPP_EOF)
18994             break;
18995         }
18996
18997       cp_parser_end_omp_structured_block (parser, save);
18998       substmt = finish_omp_structured_block (substmt);
18999       substmt = build1 (OMP_SECTION, void_type_node, substmt);
19000       add_stmt (substmt);
19001     }
19002
19003   while (1)
19004     {
19005       tok = cp_lexer_peek_token (parser->lexer);
19006       if (tok->type == CPP_CLOSE_BRACE)
19007         break;
19008       if (tok->type == CPP_EOF)
19009         break;
19010
19011       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
19012         {
19013           cp_lexer_consume_token (parser->lexer);
19014           cp_parser_require_pragma_eol (parser, tok);
19015           error_suppress = false;
19016         }
19017       else if (!error_suppress)
19018         {
19019           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
19020           error_suppress = true;
19021         }
19022
19023       substmt = cp_parser_omp_structured_block (parser);
19024       substmt = build1 (OMP_SECTION, void_type_node, substmt);
19025       add_stmt (substmt);
19026     }
19027   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
19028
19029   substmt = pop_stmt_list (stmt);
19030
19031   stmt = make_node (OMP_SECTIONS);
19032   TREE_TYPE (stmt) = void_type_node;
19033   OMP_SECTIONS_BODY (stmt) = substmt;
19034
19035   add_stmt (stmt);
19036   return stmt;
19037 }
19038
19039 /* OpenMP 2.5:
19040    # pragma omp sections sections-clause[optseq] newline
19041      sections-scope  */
19042
19043 #define OMP_SECTIONS_CLAUSE_MASK                        \
19044         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19045         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19046         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
19047         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
19048         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19049
19050 static tree
19051 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
19052 {
19053   tree clauses, ret;
19054
19055   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
19056                                        "#pragma omp sections", pragma_tok);
19057
19058   ret = cp_parser_omp_sections_scope (parser);
19059   if (ret)
19060     OMP_SECTIONS_CLAUSES (ret) = clauses;
19061
19062   return ret;
19063 }
19064
19065 /* OpenMP 2.5:
19066    # pragma parallel parallel-clause new-line
19067    # pragma parallel for parallel-for-clause new-line
19068    # pragma parallel sections parallel-sections-clause new-line  */
19069
19070 #define OMP_PARALLEL_CLAUSE_MASK                        \
19071         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
19072         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19073         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19074         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
19075         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
19076         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
19077         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
19078         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
19079
19080 static tree
19081 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
19082 {
19083   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
19084   const char *p_name = "#pragma omp parallel";
19085   tree stmt, clauses, par_clause, ws_clause, block;
19086   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
19087   unsigned int save;
19088
19089   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
19090     {
19091       cp_lexer_consume_token (parser->lexer);
19092       p_kind = PRAGMA_OMP_PARALLEL_FOR;
19093       p_name = "#pragma omp parallel for";
19094       mask |= OMP_FOR_CLAUSE_MASK;
19095       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19096     }
19097   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19098     {
19099       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19100       const char *p = IDENTIFIER_POINTER (id);
19101       if (strcmp (p, "sections") == 0)
19102         {
19103           cp_lexer_consume_token (parser->lexer);
19104           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
19105           p_name = "#pragma omp parallel sections";
19106           mask |= OMP_SECTIONS_CLAUSE_MASK;
19107           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19108         }
19109     }
19110
19111   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
19112   block = begin_omp_parallel ();
19113   save = cp_parser_begin_omp_structured_block (parser);
19114
19115   switch (p_kind)
19116     {
19117     case PRAGMA_OMP_PARALLEL:
19118       cp_parser_already_scoped_statement (parser);
19119       par_clause = clauses;
19120       break;
19121
19122     case PRAGMA_OMP_PARALLEL_FOR:
19123       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19124       stmt = cp_parser_omp_for_loop (parser);
19125       if (stmt)
19126         OMP_FOR_CLAUSES (stmt) = ws_clause;
19127       break;
19128
19129     case PRAGMA_OMP_PARALLEL_SECTIONS:
19130       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19131       stmt = cp_parser_omp_sections_scope (parser);
19132       if (stmt)
19133         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
19134       break;
19135
19136     default:
19137       gcc_unreachable ();
19138     }
19139
19140   cp_parser_end_omp_structured_block (parser, save);
19141   stmt = finish_omp_parallel (par_clause, block);
19142   if (p_kind != PRAGMA_OMP_PARALLEL)
19143     OMP_PARALLEL_COMBINED (stmt) = 1;
19144   return stmt;
19145 }
19146
19147 /* OpenMP 2.5:
19148    # pragma omp single single-clause[optseq] new-line
19149      structured-block  */
19150
19151 #define OMP_SINGLE_CLAUSE_MASK                          \
19152         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19153         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19154         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
19155         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19156
19157 static tree
19158 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
19159 {
19160   tree stmt = make_node (OMP_SINGLE);
19161   TREE_TYPE (stmt) = void_type_node;
19162
19163   OMP_SINGLE_CLAUSES (stmt)
19164     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
19165                                  "#pragma omp single", pragma_tok);
19166   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
19167
19168   return add_stmt (stmt);
19169 }
19170
19171 /* OpenMP 2.5:
19172    # pragma omp threadprivate (variable-list) */
19173
19174 static void
19175 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
19176 {
19177   tree vars;
19178
19179   vars = cp_parser_omp_var_list (parser, 0, NULL);
19180   cp_parser_require_pragma_eol (parser, pragma_tok);
19181
19182   if (!targetm.have_tls)
19183     sorry ("threadprivate variables not supported in this target");
19184
19185   finish_omp_threadprivate (vars);
19186 }
19187
19188 /* Main entry point to OpenMP statement pragmas.  */
19189
19190 static void
19191 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
19192 {
19193   tree stmt;
19194
19195   switch (pragma_tok->pragma_kind)
19196     {
19197     case PRAGMA_OMP_ATOMIC:
19198       cp_parser_omp_atomic (parser, pragma_tok);
19199       return;
19200     case PRAGMA_OMP_CRITICAL:
19201       stmt = cp_parser_omp_critical (parser, pragma_tok);
19202       break;
19203     case PRAGMA_OMP_FOR:
19204       stmt = cp_parser_omp_for (parser, pragma_tok);
19205       break;
19206     case PRAGMA_OMP_MASTER:
19207       stmt = cp_parser_omp_master (parser, pragma_tok);
19208       break;
19209     case PRAGMA_OMP_ORDERED:
19210       stmt = cp_parser_omp_ordered (parser, pragma_tok);
19211       break;
19212     case PRAGMA_OMP_PARALLEL:
19213       stmt = cp_parser_omp_parallel (parser, pragma_tok);
19214       break;
19215     case PRAGMA_OMP_SECTIONS:
19216       stmt = cp_parser_omp_sections (parser, pragma_tok);
19217       break;
19218     case PRAGMA_OMP_SINGLE:
19219       stmt = cp_parser_omp_single (parser, pragma_tok);
19220       break;
19221     default:
19222       gcc_unreachable ();
19223     }
19224
19225   if (stmt)
19226     SET_EXPR_LOCATION (stmt, pragma_tok->location);
19227 }
19228 \f
19229 /* The parser.  */
19230
19231 static GTY (()) cp_parser *the_parser;
19232
19233 \f
19234 /* Special handling for the first token or line in the file.  The first
19235    thing in the file might be #pragma GCC pch_preprocess, which loads a
19236    PCH file, which is a GC collection point.  So we need to handle this
19237    first pragma without benefit of an existing lexer structure.
19238
19239    Always returns one token to the caller in *FIRST_TOKEN.  This is
19240    either the true first token of the file, or the first token after
19241    the initial pragma.  */
19242
19243 static void
19244 cp_parser_initial_pragma (cp_token *first_token)
19245 {
19246   tree name = NULL;
19247
19248   cp_lexer_get_preprocessor_token (NULL, first_token);
19249   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
19250     return;
19251
19252   cp_lexer_get_preprocessor_token (NULL, first_token);
19253   if (first_token->type == CPP_STRING)
19254     {
19255       name = first_token->u.value;
19256
19257       cp_lexer_get_preprocessor_token (NULL, first_token);
19258       if (first_token->type != CPP_PRAGMA_EOL)
19259         error ("junk at end of %<#pragma GCC pch_preprocess%>");
19260     }
19261   else
19262     error ("expected string literal");
19263
19264   /* Skip to the end of the pragma.  */
19265   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
19266     cp_lexer_get_preprocessor_token (NULL, first_token);
19267
19268   /* Now actually load the PCH file.  */
19269   if (name)
19270     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
19271
19272   /* Read one more token to return to our caller.  We have to do this
19273      after reading the PCH file in, since its pointers have to be
19274      live.  */
19275   cp_lexer_get_preprocessor_token (NULL, first_token);
19276 }
19277
19278 /* Normal parsing of a pragma token.  Here we can (and must) use the
19279    regular lexer.  */
19280
19281 static bool
19282 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
19283 {
19284   cp_token *pragma_tok;
19285   unsigned int id;
19286
19287   pragma_tok = cp_lexer_consume_token (parser->lexer);
19288   gcc_assert (pragma_tok->type == CPP_PRAGMA);
19289   parser->lexer->in_pragma = true;
19290
19291   id = pragma_tok->pragma_kind;
19292   switch (id)
19293     {
19294     case PRAGMA_GCC_PCH_PREPROCESS:
19295       error ("%<#pragma GCC pch_preprocess%> must be first");
19296       break;
19297
19298     case PRAGMA_OMP_BARRIER:
19299       switch (context)
19300         {
19301         case pragma_compound:
19302           cp_parser_omp_barrier (parser, pragma_tok);
19303           return false;
19304         case pragma_stmt:
19305           error ("%<#pragma omp barrier%> may only be "
19306                  "used in compound statements");
19307           break;
19308         default:
19309           goto bad_stmt;
19310         }
19311       break;
19312
19313     case PRAGMA_OMP_FLUSH:
19314       switch (context)
19315         {
19316         case pragma_compound:
19317           cp_parser_omp_flush (parser, pragma_tok);
19318           return false;
19319         case pragma_stmt:
19320           error ("%<#pragma omp flush%> may only be "
19321                  "used in compound statements");
19322           break;
19323         default:
19324           goto bad_stmt;
19325         }
19326       break;
19327
19328     case PRAGMA_OMP_THREADPRIVATE:
19329       cp_parser_omp_threadprivate (parser, pragma_tok);
19330       return false;
19331
19332     case PRAGMA_OMP_ATOMIC:
19333     case PRAGMA_OMP_CRITICAL:
19334     case PRAGMA_OMP_FOR:
19335     case PRAGMA_OMP_MASTER:
19336     case PRAGMA_OMP_ORDERED:
19337     case PRAGMA_OMP_PARALLEL:
19338     case PRAGMA_OMP_SECTIONS:
19339     case PRAGMA_OMP_SINGLE:
19340       if (context == pragma_external)
19341         goto bad_stmt;
19342       cp_parser_omp_construct (parser, pragma_tok);
19343       return true;
19344
19345     case PRAGMA_OMP_SECTION:
19346       error ("%<#pragma omp section%> may only be used in "
19347              "%<#pragma omp sections%> construct");
19348       break;
19349
19350     default:
19351       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
19352       c_invoke_pragma_handler (id);
19353       break;
19354
19355     bad_stmt:
19356       cp_parser_error (parser, "expected declaration specifiers");
19357       break;
19358     }
19359
19360   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
19361   return false;
19362 }
19363
19364 /* The interface the pragma parsers have to the lexer.  */
19365
19366 enum cpp_ttype
19367 pragma_lex (tree *value)
19368 {
19369   cp_token *tok;
19370   enum cpp_ttype ret;
19371
19372   tok = cp_lexer_peek_token (the_parser->lexer);
19373
19374   ret = tok->type;
19375   *value = tok->u.value;
19376
19377   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
19378     ret = CPP_EOF;
19379   else if (ret == CPP_STRING)
19380     *value = cp_parser_string_literal (the_parser, false, false);
19381   else
19382     {
19383       cp_lexer_consume_token (the_parser->lexer);
19384       if (ret == CPP_KEYWORD)
19385         ret = CPP_NAME;
19386     }
19387
19388   return ret;
19389 }
19390
19391 \f
19392 /* External interface.  */
19393
19394 /* Parse one entire translation unit.  */
19395
19396 void
19397 c_parse_file (void)
19398 {
19399   bool error_occurred;
19400   static bool already_called = false;
19401
19402   if (already_called)
19403     {
19404       sorry ("inter-module optimizations not implemented for C++");
19405       return;
19406     }
19407   already_called = true;
19408
19409   the_parser = cp_parser_new ();
19410   push_deferring_access_checks (flag_access_control
19411                                 ? dk_no_deferred : dk_no_check);
19412   error_occurred = cp_parser_translation_unit (the_parser);
19413   the_parser = NULL;
19414 }
19415
19416 /* This variable must be provided by every front end.  */
19417
19418 int yydebug;
19419
19420 #include "gt-cp-parser.h"