]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/gcc/cp/parser.c
MFC r259655 (partial), r259944:
[FreeBSD/stable/10.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   /* Left hand side of the binary operation we are currently
1181      parsing.  */
1182   tree lhs;
1183   /* Original tree code for left hand side, if it was a binary
1184      expression itself (used for -Wparentheses).  */
1185   enum tree_code lhs_type;
1186   /* Tree code for the binary operation we are parsing.  */
1187   enum tree_code tree_type;
1188   /* Precedence of the binary operation we are parsing.  */
1189   int prec;
1190 } cp_parser_expression_stack_entry;
1191
1192 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1193    entries because precedence levels on the stack are monotonically
1194    increasing.  */
1195 typedef struct cp_parser_expression_stack_entry
1196   cp_parser_expression_stack[NUM_PREC_VALUES];
1197
1198 /* Context that is saved and restored when parsing tentatively.  */
1199 typedef struct cp_parser_context GTY (())
1200 {
1201   /* If this is a tentative parsing context, the status of the
1202      tentative parse.  */
1203   enum cp_parser_status_kind status;
1204   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1205      that are looked up in this context must be looked up both in the
1206      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1207      the context of the containing expression.  */
1208   tree object_type;
1209
1210   /* The next parsing context in the stack.  */
1211   struct cp_parser_context *next;
1212 } cp_parser_context;
1213
1214 /* Prototypes.  */
1215
1216 /* Constructors and destructors.  */
1217
1218 static cp_parser_context *cp_parser_context_new
1219   (cp_parser_context *);
1220
1221 /* Class variables.  */
1222
1223 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1224
1225 /* The operator-precedence table used by cp_parser_binary_expression.
1226    Transformed into an associative array (binops_by_token) by
1227    cp_parser_new.  */
1228
1229 static const cp_parser_binary_operations_map_node binops[] = {
1230   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1231   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1232
1233   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1234   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1235   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1236
1237   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1238   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1239
1240   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1241   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1242
1243   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1244   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1245   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1246   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1247
1248   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1249   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1250
1251   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1252
1253   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1254
1255   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1256
1257   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1258
1259   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1260 };
1261
1262 /* The same as binops, but initialized by cp_parser_new so that
1263    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1264    for speed.  */
1265 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1266
1267 /* Constructors and destructors.  */
1268
1269 /* Construct a new context.  The context below this one on the stack
1270    is given by NEXT.  */
1271
1272 static cp_parser_context *
1273 cp_parser_context_new (cp_parser_context* next)
1274 {
1275   cp_parser_context *context;
1276
1277   /* Allocate the storage.  */
1278   if (cp_parser_context_free_list != NULL)
1279     {
1280       /* Pull the first entry from the free list.  */
1281       context = cp_parser_context_free_list;
1282       cp_parser_context_free_list = context->next;
1283       memset (context, 0, sizeof (*context));
1284     }
1285   else
1286     context = GGC_CNEW (cp_parser_context);
1287
1288   /* No errors have occurred yet in this context.  */
1289   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1290   /* If this is not the bottomost context, copy information that we
1291      need from the previous context.  */
1292   if (next)
1293     {
1294       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1295          expression, then we are parsing one in this context, too.  */
1296       context->object_type = next->object_type;
1297       /* Thread the stack.  */
1298       context->next = next;
1299     }
1300
1301   return context;
1302 }
1303
1304 /* The cp_parser structure represents the C++ parser.  */
1305
1306 typedef struct cp_parser GTY(())
1307 {
1308   /* The lexer from which we are obtaining tokens.  */
1309   cp_lexer *lexer;
1310
1311   /* The scope in which names should be looked up.  If NULL_TREE, then
1312      we look up names in the scope that is currently open in the
1313      source program.  If non-NULL, this is either a TYPE or
1314      NAMESPACE_DECL for the scope in which we should look.  It can
1315      also be ERROR_MARK, when we've parsed a bogus scope.
1316
1317      This value is not cleared automatically after a name is looked
1318      up, so we must be careful to clear it before starting a new look
1319      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1320      will look up `Z' in the scope of `X', rather than the current
1321      scope.)  Unfortunately, it is difficult to tell when name lookup
1322      is complete, because we sometimes peek at a token, look it up,
1323      and then decide not to consume it.   */
1324   tree scope;
1325
1326   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1327      last lookup took place.  OBJECT_SCOPE is used if an expression
1328      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1329      respectively.  QUALIFYING_SCOPE is used for an expression of the
1330      form "X::Y"; it refers to X.  */
1331   tree object_scope;
1332   tree qualifying_scope;
1333
1334   /* A stack of parsing contexts.  All but the bottom entry on the
1335      stack will be tentative contexts.
1336
1337      We parse tentatively in order to determine which construct is in
1338      use in some situations.  For example, in order to determine
1339      whether a statement is an expression-statement or a
1340      declaration-statement we parse it tentatively as a
1341      declaration-statement.  If that fails, we then reparse the same
1342      token stream as an expression-statement.  */
1343   cp_parser_context *context;
1344
1345   /* True if we are parsing GNU C++.  If this flag is not set, then
1346      GNU extensions are not recognized.  */
1347   bool allow_gnu_extensions_p;
1348
1349   /* TRUE if the `>' token should be interpreted as the greater-than
1350      operator.  FALSE if it is the end of a template-id or
1351      template-parameter-list.  */
1352   bool greater_than_is_operator_p;
1353
1354   /* TRUE if default arguments are allowed within a parameter list
1355      that starts at this point. FALSE if only a gnu extension makes
1356      them permissible.  */
1357   bool default_arg_ok_p;
1358
1359   /* TRUE if we are parsing an integral constant-expression.  See
1360      [expr.const] for a precise definition.  */
1361   bool integral_constant_expression_p;
1362
1363   /* TRUE if we are parsing an integral constant-expression -- but a
1364      non-constant expression should be permitted as well.  This flag
1365      is used when parsing an array bound so that GNU variable-length
1366      arrays are tolerated.  */
1367   bool allow_non_integral_constant_expression_p;
1368
1369   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1370      been seen that makes the expression non-constant.  */
1371   bool non_integral_constant_expression_p;
1372
1373   /* TRUE if local variable names and `this' are forbidden in the
1374      current context.  */
1375   bool local_variables_forbidden_p;
1376
1377   /* TRUE if the declaration we are parsing is part of a
1378      linkage-specification of the form `extern string-literal
1379      declaration'.  */
1380   bool in_unbraced_linkage_specification_p;
1381
1382   /* TRUE if we are presently parsing a declarator, after the
1383      direct-declarator.  */
1384   bool in_declarator_p;
1385
1386   /* TRUE if we are presently parsing a template-argument-list.  */
1387   bool in_template_argument_list_p;
1388
1389   /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1390      to IN_OMP_BLOCK if parsing OpenMP structured block and
1391      IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1392      this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1393      iteration-statement, OpenMP block or loop within that switch.  */
1394 #define IN_SWITCH_STMT          1
1395 #define IN_ITERATION_STMT       2
1396 #define IN_OMP_BLOCK            4
1397 #define IN_OMP_FOR              8
1398   unsigned char in_statement;
1399
1400   /* TRUE if we are presently parsing the body of a switch statement.
1401      Note that this doesn't quite overlap with in_statement above.
1402      The difference relates to giving the right sets of error messages:
1403      "case not in switch" vs "break statement used with OpenMP...".  */
1404   bool in_switch_statement_p;
1405
1406   /* TRUE if we are parsing a type-id in an expression context.  In
1407      such a situation, both "type (expr)" and "type (type)" are valid
1408      alternatives.  */
1409   bool in_type_id_in_expr_p;
1410
1411   /* TRUE if we are currently in a header file where declarations are
1412      implicitly extern "C".  */
1413   bool implicit_extern_c;
1414
1415   /* TRUE if strings in expressions should be translated to the execution
1416      character set.  */
1417   bool translate_strings_p;
1418
1419   /* TRUE if we are presently parsing the body of a function, but not
1420      a local class.  */
1421   bool in_function_body;
1422
1423   /* If non-NULL, then we are parsing a construct where new type
1424      definitions are not permitted.  The string stored here will be
1425      issued as an error message if a type is defined.  */
1426   const char *type_definition_forbidden_message;
1427
1428   /* A list of lists. The outer list is a stack, used for member
1429      functions of local classes. At each level there are two sub-list,
1430      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1431      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1432      TREE_VALUE's. The functions are chained in reverse declaration
1433      order.
1434
1435      The TREE_PURPOSE sublist contains those functions with default
1436      arguments that need post processing, and the TREE_VALUE sublist
1437      contains those functions with definitions that need post
1438      processing.
1439
1440      These lists can only be processed once the outermost class being
1441      defined is complete.  */
1442   tree unparsed_functions_queues;
1443
1444   /* The number of classes whose definitions are currently in
1445      progress.  */
1446   unsigned num_classes_being_defined;
1447
1448   /* The number of template parameter lists that apply directly to the
1449      current declaration.  */
1450   unsigned num_template_parameter_lists;
1451 } cp_parser;
1452
1453 /* Prototypes.  */
1454
1455 /* Constructors and destructors.  */
1456
1457 static cp_parser *cp_parser_new
1458   (void);
1459
1460 /* Routines to parse various constructs.
1461
1462    Those that return `tree' will return the error_mark_node (rather
1463    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1464    Sometimes, they will return an ordinary node if error-recovery was
1465    attempted, even though a parse error occurred.  So, to check
1466    whether or not a parse error occurred, you should always use
1467    cp_parser_error_occurred.  If the construct is optional (indicated
1468    either by an `_opt' in the name of the function that does the
1469    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1470    the construct is not present.  */
1471
1472 /* Lexical conventions [gram.lex]  */
1473
1474 static tree cp_parser_identifier
1475   (cp_parser *);
1476 static tree cp_parser_string_literal
1477   (cp_parser *, bool, bool);
1478
1479 /* Basic concepts [gram.basic]  */
1480
1481 static bool cp_parser_translation_unit
1482   (cp_parser *);
1483
1484 /* Expressions [gram.expr]  */
1485
1486 static tree cp_parser_primary_expression
1487   (cp_parser *, bool, bool, bool, cp_id_kind *);
1488 static tree cp_parser_id_expression
1489   (cp_parser *, bool, bool, bool *, bool, bool);
1490 static tree cp_parser_unqualified_id
1491   (cp_parser *, bool, bool, bool, bool);
1492 static tree cp_parser_nested_name_specifier_opt
1493   (cp_parser *, bool, bool, bool, bool);
1494 static tree cp_parser_nested_name_specifier
1495   (cp_parser *, bool, bool, bool, bool);
1496 static tree cp_parser_class_or_namespace_name
1497   (cp_parser *, bool, bool, bool, bool, bool);
1498 static tree cp_parser_postfix_expression
1499   (cp_parser *, bool, bool);
1500 static tree cp_parser_postfix_open_square_expression
1501   (cp_parser *, tree, bool);
1502 static tree cp_parser_postfix_dot_deref_expression
1503   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1504 static tree cp_parser_parenthesized_expression_list
1505   (cp_parser *, bool, bool, bool *);
1506 static void cp_parser_pseudo_destructor_name
1507   (cp_parser *, tree *, tree *);
1508 static tree cp_parser_unary_expression
1509   (cp_parser *, bool, bool);
1510 static enum tree_code cp_parser_unary_operator
1511   (cp_token *);
1512 static tree cp_parser_new_expression
1513   (cp_parser *);
1514 static tree cp_parser_new_placement
1515   (cp_parser *);
1516 static tree cp_parser_new_type_id
1517   (cp_parser *, tree *);
1518 static cp_declarator *cp_parser_new_declarator_opt
1519   (cp_parser *);
1520 static cp_declarator *cp_parser_direct_new_declarator
1521   (cp_parser *);
1522 static tree cp_parser_new_initializer
1523   (cp_parser *);
1524 static tree cp_parser_delete_expression
1525   (cp_parser *);
1526 static tree cp_parser_cast_expression
1527   (cp_parser *, bool, bool);
1528 static tree cp_parser_binary_expression
1529   (cp_parser *, bool);
1530 static tree cp_parser_question_colon_clause
1531   (cp_parser *, tree);
1532 static tree cp_parser_assignment_expression
1533   (cp_parser *, bool);
1534 static enum tree_code cp_parser_assignment_operator_opt
1535   (cp_parser *);
1536 static tree cp_parser_expression
1537   (cp_parser *, bool);
1538 static tree cp_parser_constant_expression
1539   (cp_parser *, bool, bool *);
1540 static tree cp_parser_builtin_offsetof
1541   (cp_parser *);
1542
1543 /* Statements [gram.stmt.stmt]  */
1544
1545 static void cp_parser_statement
1546   (cp_parser *, tree, bool, bool *);
1547 static void cp_parser_label_for_labeled_statement
1548   (cp_parser *);
1549 static tree cp_parser_expression_statement
1550   (cp_parser *, tree);
1551 static tree cp_parser_compound_statement
1552   (cp_parser *, tree, bool);
1553 static void cp_parser_statement_seq_opt
1554   (cp_parser *, tree);
1555 static tree cp_parser_selection_statement
1556   (cp_parser *, bool *);
1557 static tree cp_parser_condition
1558   (cp_parser *);
1559 static tree cp_parser_iteration_statement
1560   (cp_parser *);
1561 static void cp_parser_for_init_statement
1562   (cp_parser *);
1563 static tree cp_parser_jump_statement
1564   (cp_parser *);
1565 static void cp_parser_declaration_statement
1566   (cp_parser *);
1567
1568 static tree cp_parser_implicitly_scoped_statement
1569   (cp_parser *, bool *);
1570 static void cp_parser_already_scoped_statement
1571   (cp_parser *);
1572
1573 /* Declarations [gram.dcl.dcl] */
1574
1575 static void cp_parser_declaration_seq_opt
1576   (cp_parser *);
1577 static void cp_parser_declaration
1578   (cp_parser *);
1579 static void cp_parser_block_declaration
1580   (cp_parser *, bool);
1581 static void cp_parser_simple_declaration
1582   (cp_parser *, bool);
1583 static void cp_parser_decl_specifier_seq
1584   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1585 static tree cp_parser_storage_class_specifier_opt
1586   (cp_parser *);
1587 static tree cp_parser_function_specifier_opt
1588   (cp_parser *, cp_decl_specifier_seq *);
1589 static tree cp_parser_type_specifier
1590   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1591    int *, bool *);
1592 static tree cp_parser_simple_type_specifier
1593   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1594 static tree cp_parser_type_name
1595   (cp_parser *);
1596 static tree cp_parser_elaborated_type_specifier
1597   (cp_parser *, bool, bool);
1598 static tree cp_parser_enum_specifier
1599   (cp_parser *);
1600 static void cp_parser_enumerator_list
1601   (cp_parser *, tree);
1602 static void cp_parser_enumerator_definition
1603   (cp_parser *, tree);
1604 static tree cp_parser_namespace_name
1605   (cp_parser *);
1606 static void cp_parser_namespace_definition
1607   (cp_parser *);
1608 static void cp_parser_namespace_body
1609   (cp_parser *);
1610 static tree cp_parser_qualified_namespace_specifier
1611   (cp_parser *);
1612 static void cp_parser_namespace_alias_definition
1613   (cp_parser *);
1614 static bool cp_parser_using_declaration
1615   (cp_parser *, bool);
1616 static void cp_parser_using_directive
1617   (cp_parser *);
1618 static void cp_parser_asm_definition
1619   (cp_parser *);
1620 static void cp_parser_linkage_specification
1621   (cp_parser *);
1622
1623 /* Declarators [gram.dcl.decl] */
1624
1625 static tree cp_parser_init_declarator
1626   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *);
1627 static cp_declarator *cp_parser_declarator
1628   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1629 static cp_declarator *cp_parser_direct_declarator
1630   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1631 static enum tree_code cp_parser_ptr_operator
1632   (cp_parser *, tree *, cp_cv_quals *);
1633 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1634   (cp_parser *);
1635 static tree cp_parser_declarator_id
1636   (cp_parser *, bool);
1637 static tree cp_parser_type_id
1638   (cp_parser *);
1639 static void cp_parser_type_specifier_seq
1640   (cp_parser *, bool, cp_decl_specifier_seq *);
1641 static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1642   (cp_parser *);
1643 static cp_parameter_declarator *cp_parser_parameter_declaration_list
1644   (cp_parser *, bool *);
1645 static cp_parameter_declarator *cp_parser_parameter_declaration
1646   (cp_parser *, bool, bool *);
1647 static void cp_parser_function_body
1648   (cp_parser *);
1649 static tree cp_parser_initializer
1650   (cp_parser *, bool *, bool *);
1651 static tree cp_parser_initializer_clause
1652   (cp_parser *, bool *);
1653 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1654   (cp_parser *, bool *);
1655
1656 static bool cp_parser_ctor_initializer_opt_and_function_body
1657   (cp_parser *);
1658
1659 /* Classes [gram.class] */
1660
1661 static tree cp_parser_class_name
1662   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1663 static tree cp_parser_class_specifier
1664   (cp_parser *);
1665 static tree cp_parser_class_head
1666   (cp_parser *, bool *, tree *, tree *);
1667 static enum tag_types cp_parser_class_key
1668   (cp_parser *);
1669 static void cp_parser_member_specification_opt
1670   (cp_parser *);
1671 static void cp_parser_member_declaration
1672   (cp_parser *);
1673 static tree cp_parser_pure_specifier
1674   (cp_parser *);
1675 static tree cp_parser_constant_initializer
1676   (cp_parser *);
1677
1678 /* Derived classes [gram.class.derived] */
1679
1680 static tree cp_parser_base_clause
1681   (cp_parser *);
1682 static tree cp_parser_base_specifier
1683   (cp_parser *);
1684
1685 /* Special member functions [gram.special] */
1686
1687 static tree cp_parser_conversion_function_id
1688   (cp_parser *);
1689 static tree cp_parser_conversion_type_id
1690   (cp_parser *);
1691 static cp_declarator *cp_parser_conversion_declarator_opt
1692   (cp_parser *);
1693 static bool cp_parser_ctor_initializer_opt
1694   (cp_parser *);
1695 static void cp_parser_mem_initializer_list
1696   (cp_parser *);
1697 static tree cp_parser_mem_initializer
1698   (cp_parser *);
1699 static tree cp_parser_mem_initializer_id
1700   (cp_parser *);
1701
1702 /* Overloading [gram.over] */
1703
1704 static tree cp_parser_operator_function_id
1705   (cp_parser *);
1706 static tree cp_parser_operator
1707   (cp_parser *);
1708
1709 /* Templates [gram.temp] */
1710
1711 static void cp_parser_template_declaration
1712   (cp_parser *, bool);
1713 static tree cp_parser_template_parameter_list
1714   (cp_parser *);
1715 static tree cp_parser_template_parameter
1716   (cp_parser *, bool *);
1717 static tree cp_parser_type_parameter
1718   (cp_parser *);
1719 static tree cp_parser_template_id
1720   (cp_parser *, bool, bool, bool);
1721 static tree cp_parser_template_name
1722   (cp_parser *, bool, bool, bool, bool *);
1723 static tree cp_parser_template_argument_list
1724   (cp_parser *);
1725 static tree cp_parser_template_argument
1726   (cp_parser *);
1727 static void cp_parser_explicit_instantiation
1728   (cp_parser *);
1729 static void cp_parser_explicit_specialization
1730   (cp_parser *);
1731
1732 /* Exception handling [gram.exception] */
1733
1734 static tree cp_parser_try_block
1735   (cp_parser *);
1736 static bool cp_parser_function_try_block
1737   (cp_parser *);
1738 static void cp_parser_handler_seq
1739   (cp_parser *);
1740 static void cp_parser_handler
1741   (cp_parser *);
1742 static tree cp_parser_exception_declaration
1743   (cp_parser *);
1744 static tree cp_parser_throw_expression
1745   (cp_parser *);
1746 static tree cp_parser_exception_specification_opt
1747   (cp_parser *);
1748 static tree cp_parser_type_id_list
1749   (cp_parser *);
1750
1751 /* GNU Extensions */
1752
1753 static tree cp_parser_asm_specification_opt
1754   (cp_parser *);
1755 static tree cp_parser_asm_operand_list
1756   (cp_parser *);
1757 static tree cp_parser_asm_clobber_list
1758   (cp_parser *);
1759 static tree cp_parser_attributes_opt
1760   (cp_parser *);
1761 static tree cp_parser_attribute_list
1762   (cp_parser *);
1763 static bool cp_parser_extension_opt
1764   (cp_parser *, int *);
1765 static void cp_parser_label_declaration
1766   (cp_parser *);
1767
1768 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1769 static bool cp_parser_pragma
1770   (cp_parser *, enum pragma_context);
1771
1772 /* Objective-C++ Productions */
1773
1774 static tree cp_parser_objc_message_receiver
1775   (cp_parser *);
1776 static tree cp_parser_objc_message_args
1777   (cp_parser *);
1778 static tree cp_parser_objc_message_expression
1779   (cp_parser *);
1780 static tree cp_parser_objc_encode_expression
1781   (cp_parser *);
1782 static tree cp_parser_objc_defs_expression
1783   (cp_parser *);
1784 static tree cp_parser_objc_protocol_expression
1785   (cp_parser *);
1786 static tree cp_parser_objc_selector_expression
1787   (cp_parser *);
1788 static tree cp_parser_objc_expression
1789   (cp_parser *);
1790 static bool cp_parser_objc_selector_p
1791   (enum cpp_ttype);
1792 static tree cp_parser_objc_selector
1793   (cp_parser *);
1794 static tree cp_parser_objc_protocol_refs_opt
1795   (cp_parser *);
1796 static void cp_parser_objc_declaration
1797   (cp_parser *);
1798 static tree cp_parser_objc_statement
1799   (cp_parser *);
1800
1801 /* Utility Routines */
1802
1803 static tree cp_parser_lookup_name
1804   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *);
1805 static tree cp_parser_lookup_name_simple
1806   (cp_parser *, tree);
1807 static tree cp_parser_maybe_treat_template_as_class
1808   (tree, bool);
1809 static bool cp_parser_check_declarator_template_parameters
1810   (cp_parser *, cp_declarator *);
1811 static bool cp_parser_check_template_parameters
1812   (cp_parser *, unsigned);
1813 static tree cp_parser_simple_cast_expression
1814   (cp_parser *);
1815 static tree cp_parser_global_scope_opt
1816   (cp_parser *, bool);
1817 static bool cp_parser_constructor_declarator_p
1818   (cp_parser *, bool);
1819 static tree cp_parser_function_definition_from_specifiers_and_declarator
1820   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1821 static tree cp_parser_function_definition_after_declarator
1822   (cp_parser *, bool);
1823 static void cp_parser_template_declaration_after_export
1824   (cp_parser *, bool);
1825 static void cp_parser_perform_template_parameter_access_checks
1826   (VEC (deferred_access_check,gc)*);
1827 static tree cp_parser_single_declaration
1828   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool *);
1829 static tree cp_parser_functional_cast
1830   (cp_parser *, tree);
1831 static tree cp_parser_save_member_function_body
1832   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1833 static tree cp_parser_enclosed_template_argument_list
1834   (cp_parser *);
1835 static void cp_parser_save_default_args
1836   (cp_parser *, tree);
1837 static void cp_parser_late_parsing_for_member
1838   (cp_parser *, tree);
1839 static void cp_parser_late_parsing_default_args
1840   (cp_parser *, tree);
1841 static tree cp_parser_sizeof_operand
1842   (cp_parser *, enum rid);
1843 static bool cp_parser_declares_only_class_p
1844   (cp_parser *);
1845 static void cp_parser_set_storage_class
1846   (cp_parser *, cp_decl_specifier_seq *, enum rid);
1847 static void cp_parser_set_decl_spec_type
1848   (cp_decl_specifier_seq *, tree, bool);
1849 static bool cp_parser_friend_p
1850   (const cp_decl_specifier_seq *);
1851 static cp_token *cp_parser_require
1852   (cp_parser *, enum cpp_ttype, const char *);
1853 static cp_token *cp_parser_require_keyword
1854   (cp_parser *, enum rid, const char *);
1855 static bool cp_parser_token_starts_function_definition_p
1856   (cp_token *);
1857 static bool cp_parser_next_token_starts_class_definition_p
1858   (cp_parser *);
1859 static bool cp_parser_next_token_ends_template_argument_p
1860   (cp_parser *);
1861 static bool cp_parser_nth_token_starts_template_argument_list_p
1862   (cp_parser *, size_t);
1863 static enum tag_types cp_parser_token_is_class_key
1864   (cp_token *);
1865 static void cp_parser_check_class_key
1866   (enum tag_types, tree type);
1867 static void cp_parser_check_access_in_redeclaration
1868   (tree type);
1869 static bool cp_parser_optional_template_keyword
1870   (cp_parser *);
1871 static void cp_parser_pre_parsed_nested_name_specifier
1872   (cp_parser *);
1873 static void cp_parser_cache_group
1874   (cp_parser *, enum cpp_ttype, unsigned);
1875 static void cp_parser_parse_tentatively
1876   (cp_parser *);
1877 static void cp_parser_commit_to_tentative_parse
1878   (cp_parser *);
1879 static void cp_parser_abort_tentative_parse
1880   (cp_parser *);
1881 static bool cp_parser_parse_definitely
1882   (cp_parser *);
1883 static inline bool cp_parser_parsing_tentatively
1884   (cp_parser *);
1885 static bool cp_parser_uncommitted_to_tentative_parse_p
1886   (cp_parser *);
1887 static void cp_parser_error
1888   (cp_parser *, const char *);
1889 static void cp_parser_name_lookup_error
1890   (cp_parser *, tree, tree, const char *);
1891 static bool cp_parser_simulate_error
1892   (cp_parser *);
1893 static bool cp_parser_check_type_definition
1894   (cp_parser *);
1895 static void cp_parser_check_for_definition_in_return_type
1896   (cp_declarator *, tree);
1897 static void cp_parser_check_for_invalid_template_id
1898   (cp_parser *, tree);
1899 static bool cp_parser_non_integral_constant_expression
1900   (cp_parser *, const char *);
1901 static void cp_parser_diagnose_invalid_type_name
1902   (cp_parser *, tree, tree);
1903 static bool cp_parser_parse_and_diagnose_invalid_type_name
1904   (cp_parser *);
1905 static int cp_parser_skip_to_closing_parenthesis
1906   (cp_parser *, bool, bool, bool);
1907 static void cp_parser_skip_to_end_of_statement
1908   (cp_parser *);
1909 static void cp_parser_consume_semicolon_at_end_of_statement
1910   (cp_parser *);
1911 static void cp_parser_skip_to_end_of_block_or_statement
1912   (cp_parser *);
1913 static void cp_parser_skip_to_closing_brace
1914   (cp_parser *);
1915 static void cp_parser_skip_to_end_of_template_parameter_list
1916   (cp_parser *);
1917 static void cp_parser_skip_to_pragma_eol
1918   (cp_parser*, cp_token *);
1919 static bool cp_parser_error_occurred
1920   (cp_parser *);
1921 static bool cp_parser_allow_gnu_extensions_p
1922   (cp_parser *);
1923 static bool cp_parser_is_string_literal
1924   (cp_token *);
1925 static bool cp_parser_is_keyword
1926   (cp_token *, enum rid);
1927 static tree cp_parser_make_typename_type
1928   (cp_parser *, tree, tree);
1929
1930 /* Returns nonzero if we are parsing tentatively.  */
1931
1932 static inline bool
1933 cp_parser_parsing_tentatively (cp_parser* parser)
1934 {
1935   return parser->context->next != NULL;
1936 }
1937
1938 /* Returns nonzero if TOKEN is a string literal.  */
1939
1940 static bool
1941 cp_parser_is_string_literal (cp_token* token)
1942 {
1943   return (token->type == CPP_STRING || token->type == CPP_WSTRING);
1944 }
1945
1946 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
1947
1948 static bool
1949 cp_parser_is_keyword (cp_token* token, enum rid keyword)
1950 {
1951   return token->keyword == keyword;
1952 }
1953
1954 /* If not parsing tentatively, issue a diagnostic of the form
1955       FILE:LINE: MESSAGE before TOKEN
1956    where TOKEN is the next token in the input stream.  MESSAGE
1957    (specified by the caller) is usually of the form "expected
1958    OTHER-TOKEN".  */
1959
1960 static void
1961 cp_parser_error (cp_parser* parser, const char* message)
1962 {
1963   if (!cp_parser_simulate_error (parser))
1964     {
1965       cp_token *token = cp_lexer_peek_token (parser->lexer);
1966       /* This diagnostic makes more sense if it is tagged to the line
1967          of the token we just peeked at.  */
1968       cp_lexer_set_source_position_from_token (token);
1969
1970       if (token->type == CPP_PRAGMA)
1971         {
1972           error ("%<#pragma%> is not allowed here");
1973           cp_parser_skip_to_pragma_eol (parser, token);
1974           return;
1975         }
1976
1977       c_parse_error (message,
1978                      /* Because c_parser_error does not understand
1979                         CPP_KEYWORD, keywords are treated like
1980                         identifiers.  */
1981                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
1982                      token->u.value);
1983     }
1984 }
1985
1986 /* Issue an error about name-lookup failing.  NAME is the
1987    IDENTIFIER_NODE DECL is the result of
1988    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
1989    the thing that we hoped to find.  */
1990
1991 static void
1992 cp_parser_name_lookup_error (cp_parser* parser,
1993                              tree name,
1994                              tree decl,
1995                              const char* desired)
1996 {
1997   /* If name lookup completely failed, tell the user that NAME was not
1998      declared.  */
1999   if (decl == error_mark_node)
2000     {
2001       if (parser->scope && parser->scope != global_namespace)
2002         error ("%<%D::%D%> has not been declared",
2003                parser->scope, name);
2004       else if (parser->scope == global_namespace)
2005         error ("%<::%D%> has not been declared", name);
2006       else if (parser->object_scope
2007                && !CLASS_TYPE_P (parser->object_scope))
2008         error ("request for member %qD in non-class type %qT",
2009                name, parser->object_scope);
2010       else if (parser->object_scope)
2011         error ("%<%T::%D%> has not been declared",
2012                parser->object_scope, name);
2013       else
2014         error ("%qD has not been declared", name);
2015     }
2016   else if (parser->scope && parser->scope != global_namespace)
2017     error ("%<%D::%D%> %s", parser->scope, name, desired);
2018   else if (parser->scope == global_namespace)
2019     error ("%<::%D%> %s", name, desired);
2020   else
2021     error ("%qD %s", name, desired);
2022 }
2023
2024 /* If we are parsing tentatively, remember that an error has occurred
2025    during this tentative parse.  Returns true if the error was
2026    simulated; false if a message should be issued by the caller.  */
2027
2028 static bool
2029 cp_parser_simulate_error (cp_parser* parser)
2030 {
2031   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2032     {
2033       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2034       return true;
2035     }
2036   return false;
2037 }
2038
2039 /* Check for repeated decl-specifiers.  */
2040
2041 static void
2042 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs)
2043 {
2044   cp_decl_spec ds;
2045
2046   for (ds = ds_first; ds != ds_last; ++ds)
2047     {
2048       unsigned count = decl_specs->specs[(int)ds];
2049       if (count < 2)
2050         continue;
2051       /* The "long" specifier is a special case because of "long long".  */
2052       if (ds == ds_long)
2053         {
2054           if (count > 2)
2055             error ("%<long long long%> is too long for GCC");
2056           else if (pedantic && !in_system_header && warn_long_long)
2057             pedwarn ("ISO C++ does not support %<long long%>");
2058         }
2059       else if (count > 1)
2060         {
2061           static const char *const decl_spec_names[] = {
2062             "signed",
2063             "unsigned",
2064             "short",
2065             "long",
2066             "const",
2067             "volatile",
2068             "restrict",
2069             "inline",
2070             "virtual",
2071             "explicit",
2072             "friend",
2073             "typedef",
2074             "__complex",
2075             "__thread"
2076           };
2077           error ("duplicate %qs", decl_spec_names[(int)ds]);
2078         }
2079     }
2080 }
2081
2082 /* This function is called when a type is defined.  If type
2083    definitions are forbidden at this point, an error message is
2084    issued.  */
2085
2086 static bool
2087 cp_parser_check_type_definition (cp_parser* parser)
2088 {
2089   /* If types are forbidden here, issue a message.  */
2090   if (parser->type_definition_forbidden_message)
2091     {
2092       /* Use `%s' to print the string in case there are any escape
2093          characters in the message.  */
2094       error ("%s", parser->type_definition_forbidden_message);
2095       return false;
2096     }
2097   return true;
2098 }
2099
2100 /* This function is called when the DECLARATOR is processed.  The TYPE
2101    was a type defined in the decl-specifiers.  If it is invalid to
2102    define a type in the decl-specifiers for DECLARATOR, an error is
2103    issued.  */
2104
2105 static void
2106 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2107                                                tree type)
2108 {
2109   /* [dcl.fct] forbids type definitions in return types.
2110      Unfortunately, it's not easy to know whether or not we are
2111      processing a return type until after the fact.  */
2112   while (declarator
2113          && (declarator->kind == cdk_pointer
2114              || declarator->kind == cdk_reference
2115              || declarator->kind == cdk_ptrmem))
2116     declarator = declarator->declarator;
2117   if (declarator
2118       && declarator->kind == cdk_function)
2119     {
2120       error ("new types may not be defined in a return type");
2121       inform ("(perhaps a semicolon is missing after the definition of %qT)",
2122               type);
2123     }
2124 }
2125
2126 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2127    "<" in any valid C++ program.  If the next token is indeed "<",
2128    issue a message warning the user about what appears to be an
2129    invalid attempt to form a template-id.  */
2130
2131 static void
2132 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2133                                          tree type)
2134 {
2135   cp_token_position start = 0;
2136
2137   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2138     {
2139       if (TYPE_P (type))
2140         error ("%qT is not a template", type);
2141       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2142         error ("%qE is not a template", type);
2143       else
2144         error ("invalid template-id");
2145       /* Remember the location of the invalid "<".  */
2146       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2147         start = cp_lexer_token_position (parser->lexer, true);
2148       /* Consume the "<".  */
2149       cp_lexer_consume_token (parser->lexer);
2150       /* Parse the template arguments.  */
2151       cp_parser_enclosed_template_argument_list (parser);
2152       /* Permanently remove the invalid template arguments so that
2153          this error message is not issued again.  */
2154       if (start)
2155         cp_lexer_purge_tokens_after (parser->lexer, start);
2156     }
2157 }
2158
2159 /* If parsing an integral constant-expression, issue an error message
2160    about the fact that THING appeared and return true.  Otherwise,
2161    return false.  In either case, set
2162    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2163
2164 static bool
2165 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2166                                             const char *thing)
2167 {
2168   parser->non_integral_constant_expression_p = true;
2169   if (parser->integral_constant_expression_p)
2170     {
2171       if (!parser->allow_non_integral_constant_expression_p)
2172         {
2173           error ("%s cannot appear in a constant-expression", thing);
2174           return true;
2175         }
2176     }
2177   return false;
2178 }
2179
2180 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2181    qualifying scope (or NULL, if none) for ID.  This function commits
2182    to the current active tentative parse, if any.  (Otherwise, the
2183    problematic construct might be encountered again later, resulting
2184    in duplicate error messages.)  */
2185
2186 static void
2187 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
2188 {
2189   tree decl, old_scope;
2190   /* Try to lookup the identifier.  */
2191   old_scope = parser->scope;
2192   parser->scope = scope;
2193   decl = cp_parser_lookup_name_simple (parser, id);
2194   parser->scope = old_scope;
2195   /* If the lookup found a template-name, it means that the user forgot
2196   to specify an argument list. Emit a useful error message.  */
2197   if (TREE_CODE (decl) == TEMPLATE_DECL)
2198     error ("invalid use of template-name %qE without an argument list", decl);
2199   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2200     error ("invalid use of destructor %qD as a type", id);
2201   else if (TREE_CODE (decl) == TYPE_DECL)
2202     /* Something like 'unsigned A a;'  */
2203     error ("invalid combination of multiple type-specifiers");
2204   else if (!parser->scope)
2205     {
2206       /* Issue an error message.  */
2207       error ("%qE does not name a type", id);
2208       /* If we're in a template class, it's possible that the user was
2209          referring to a type from a base class.  For example:
2210
2211            template <typename T> struct A { typedef T X; };
2212            template <typename T> struct B : public A<T> { X x; };
2213
2214          The user should have said "typename A<T>::X".  */
2215       if (processing_template_decl && current_class_type
2216           && TYPE_BINFO (current_class_type))
2217         {
2218           tree b;
2219
2220           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2221                b;
2222                b = TREE_CHAIN (b))
2223             {
2224               tree base_type = BINFO_TYPE (b);
2225               if (CLASS_TYPE_P (base_type)
2226                   && dependent_type_p (base_type))
2227                 {
2228                   tree field;
2229                   /* Go from a particular instantiation of the
2230                      template (which will have an empty TYPE_FIELDs),
2231                      to the main version.  */
2232                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2233                   for (field = TYPE_FIELDS (base_type);
2234                        field;
2235                        field = TREE_CHAIN (field))
2236                     if (TREE_CODE (field) == TYPE_DECL
2237                         && DECL_NAME (field) == id)
2238                       {
2239                         inform ("(perhaps %<typename %T::%E%> was intended)",
2240                                 BINFO_TYPE (b), id);
2241                         break;
2242                       }
2243                   if (field)
2244                     break;
2245                 }
2246             }
2247         }
2248     }
2249   /* Here we diagnose qualified-ids where the scope is actually correct,
2250      but the identifier does not resolve to a valid type name.  */
2251   else if (parser->scope != error_mark_node)
2252     {
2253       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2254         error ("%qE in namespace %qE does not name a type",
2255                id, parser->scope);
2256       else if (TYPE_P (parser->scope))
2257         error ("%qE in class %qT does not name a type", id, parser->scope);
2258       else
2259         gcc_unreachable ();
2260     }
2261   cp_parser_commit_to_tentative_parse (parser);
2262 }
2263
2264 /* Check for a common situation where a type-name should be present,
2265    but is not, and issue a sensible error message.  Returns true if an
2266    invalid type-name was detected.
2267
2268    The situation handled by this function are variable declarations of the
2269    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2270    Usually, `ID' should name a type, but if we got here it means that it
2271    does not. We try to emit the best possible error message depending on
2272    how exactly the id-expression looks like.  */
2273
2274 static bool
2275 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2276 {
2277   tree id;
2278
2279   cp_parser_parse_tentatively (parser);
2280   id = cp_parser_id_expression (parser,
2281                                 /*template_keyword_p=*/false,
2282                                 /*check_dependency_p=*/true,
2283                                 /*template_p=*/NULL,
2284                                 /*declarator_p=*/true,
2285                                 /*optional_p=*/false);
2286   /* After the id-expression, there should be a plain identifier,
2287      otherwise this is not a simple variable declaration. Also, if
2288      the scope is dependent, we cannot do much.  */
2289   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2290       || (parser->scope && TYPE_P (parser->scope)
2291           && dependent_type_p (parser->scope))
2292       || TREE_CODE (id) == TYPE_DECL)
2293     {
2294       cp_parser_abort_tentative_parse (parser);
2295       return false;
2296     }
2297   if (!cp_parser_parse_definitely (parser))
2298     return false;
2299
2300   /* Emit a diagnostic for the invalid type.  */
2301   cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2302   /* Skip to the end of the declaration; there's no point in
2303      trying to process it.  */
2304   cp_parser_skip_to_end_of_block_or_statement (parser);
2305   return true;
2306 }
2307
2308 /* Consume tokens up to, and including, the next non-nested closing `)'.
2309    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2310    are doing error recovery. Returns -1 if OR_COMMA is true and we
2311    found an unnested comma.  */
2312
2313 static int
2314 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2315                                        bool recovering,
2316                                        bool or_comma,
2317                                        bool consume_paren)
2318 {
2319   unsigned paren_depth = 0;
2320   unsigned brace_depth = 0;
2321
2322   if (recovering && !or_comma
2323       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2324     return 0;
2325
2326   while (true)
2327     {
2328       cp_token * token = cp_lexer_peek_token (parser->lexer);
2329
2330       switch (token->type)
2331         {
2332         case CPP_EOF:
2333         case CPP_PRAGMA_EOL:
2334           /* If we've run out of tokens, then there is no closing `)'.  */
2335           return 0;
2336
2337         case CPP_SEMICOLON:
2338           /* This matches the processing in skip_to_end_of_statement.  */
2339           if (!brace_depth)
2340             return 0;
2341           break;
2342
2343         case CPP_OPEN_BRACE:
2344           ++brace_depth;
2345           break;
2346         case CPP_CLOSE_BRACE:
2347           if (!brace_depth--)
2348             return 0;
2349           break;
2350
2351         case CPP_COMMA:
2352           if (recovering && or_comma && !brace_depth && !paren_depth)
2353             return -1;
2354           break;
2355
2356         case CPP_OPEN_PAREN:
2357           if (!brace_depth)
2358             ++paren_depth;
2359           break;
2360
2361         case CPP_CLOSE_PAREN:
2362           if (!brace_depth && !paren_depth--)
2363             {
2364               if (consume_paren)
2365                 cp_lexer_consume_token (parser->lexer);
2366               return 1;
2367             }
2368           break;
2369
2370         default:
2371           break;
2372         }
2373
2374       /* Consume the token.  */
2375       cp_lexer_consume_token (parser->lexer);
2376     }
2377 }
2378
2379 /* Consume tokens until we reach the end of the current statement.
2380    Normally, that will be just before consuming a `;'.  However, if a
2381    non-nested `}' comes first, then we stop before consuming that.  */
2382
2383 static void
2384 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2385 {
2386   unsigned nesting_depth = 0;
2387
2388   while (true)
2389     {
2390       cp_token *token = cp_lexer_peek_token (parser->lexer);
2391
2392       switch (token->type)
2393         {
2394         case CPP_EOF:
2395         case CPP_PRAGMA_EOL:
2396           /* If we've run out of tokens, stop.  */
2397           return;
2398
2399         case CPP_SEMICOLON:
2400           /* If the next token is a `;', we have reached the end of the
2401              statement.  */
2402           if (!nesting_depth)
2403             return;
2404           break;
2405
2406         case CPP_CLOSE_BRACE:
2407           /* If this is a non-nested '}', stop before consuming it.
2408              That way, when confronted with something like:
2409
2410                { 3 + }
2411
2412              we stop before consuming the closing '}', even though we
2413              have not yet reached a `;'.  */
2414           if (nesting_depth == 0)
2415             return;
2416
2417           /* If it is the closing '}' for a block that we have
2418              scanned, stop -- but only after consuming the token.
2419              That way given:
2420
2421                 void f g () { ... }
2422                 typedef int I;
2423
2424              we will stop after the body of the erroneously declared
2425              function, but before consuming the following `typedef'
2426              declaration.  */
2427           if (--nesting_depth == 0)
2428             {
2429               cp_lexer_consume_token (parser->lexer);
2430               return;
2431             }
2432
2433         case CPP_OPEN_BRACE:
2434           ++nesting_depth;
2435           break;
2436
2437         default:
2438           break;
2439         }
2440
2441       /* Consume the token.  */
2442       cp_lexer_consume_token (parser->lexer);
2443     }
2444 }
2445
2446 /* This function is called at the end of a statement or declaration.
2447    If the next token is a semicolon, it is consumed; otherwise, error
2448    recovery is attempted.  */
2449
2450 static void
2451 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2452 {
2453   /* Look for the trailing `;'.  */
2454   if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2455     {
2456       /* If there is additional (erroneous) input, skip to the end of
2457          the statement.  */
2458       cp_parser_skip_to_end_of_statement (parser);
2459       /* If the next token is now a `;', consume it.  */
2460       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2461         cp_lexer_consume_token (parser->lexer);
2462     }
2463 }
2464
2465 /* Skip tokens until we have consumed an entire block, or until we
2466    have consumed a non-nested `;'.  */
2467
2468 static void
2469 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2470 {
2471   int nesting_depth = 0;
2472
2473   while (nesting_depth >= 0)
2474     {
2475       cp_token *token = cp_lexer_peek_token (parser->lexer);
2476
2477       switch (token->type)
2478         {
2479         case CPP_EOF:
2480         case CPP_PRAGMA_EOL:
2481           /* If we've run out of tokens, stop.  */
2482           return;
2483
2484         case CPP_SEMICOLON:
2485           /* Stop if this is an unnested ';'. */
2486           if (!nesting_depth)
2487             nesting_depth = -1;
2488           break;
2489
2490         case CPP_CLOSE_BRACE:
2491           /* Stop if this is an unnested '}', or closes the outermost
2492              nesting level.  */
2493           nesting_depth--;
2494           if (!nesting_depth)
2495             nesting_depth = -1;
2496           break;
2497
2498         case CPP_OPEN_BRACE:
2499           /* Nest. */
2500           nesting_depth++;
2501           break;
2502
2503         default:
2504           break;
2505         }
2506
2507       /* Consume the token.  */
2508       cp_lexer_consume_token (parser->lexer);
2509     }
2510 }
2511
2512 /* Skip tokens until a non-nested closing curly brace is the next
2513    token.  */
2514
2515 static void
2516 cp_parser_skip_to_closing_brace (cp_parser *parser)
2517 {
2518   unsigned nesting_depth = 0;
2519
2520   while (true)
2521     {
2522       cp_token *token = cp_lexer_peek_token (parser->lexer);
2523
2524       switch (token->type)
2525         {
2526         case CPP_EOF:
2527         case CPP_PRAGMA_EOL:
2528           /* If we've run out of tokens, stop.  */
2529           return;
2530
2531         case CPP_CLOSE_BRACE:
2532           /* If the next token is a non-nested `}', then we have reached
2533              the end of the current block.  */
2534           if (nesting_depth-- == 0)
2535             return;
2536           break;
2537
2538         case CPP_OPEN_BRACE:
2539           /* If it the next token is a `{', then we are entering a new
2540              block.  Consume the entire block.  */
2541           ++nesting_depth;
2542           break;
2543
2544         default:
2545           break;
2546         }
2547
2548       /* Consume the token.  */
2549       cp_lexer_consume_token (parser->lexer);
2550     }
2551 }
2552
2553 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2554    parameter is the PRAGMA token, allowing us to purge the entire pragma
2555    sequence.  */
2556
2557 static void
2558 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2559 {
2560   cp_token *token;
2561
2562   parser->lexer->in_pragma = false;
2563
2564   do
2565     token = cp_lexer_consume_token (parser->lexer);
2566   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2567
2568   /* Ensure that the pragma is not parsed again.  */
2569   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2570 }
2571
2572 /* Require pragma end of line, resyncing with it as necessary.  The
2573    arguments are as for cp_parser_skip_to_pragma_eol.  */
2574
2575 static void
2576 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2577 {
2578   parser->lexer->in_pragma = false;
2579   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2580     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2581 }
2582
2583 /* This is a simple wrapper around make_typename_type. When the id is
2584    an unresolved identifier node, we can provide a superior diagnostic
2585    using cp_parser_diagnose_invalid_type_name.  */
2586
2587 static tree
2588 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2589 {
2590   tree result;
2591   if (TREE_CODE (id) == IDENTIFIER_NODE)
2592     {
2593       result = make_typename_type (scope, id, typename_type,
2594                                    /*complain=*/tf_none);
2595       if (result == error_mark_node)
2596         cp_parser_diagnose_invalid_type_name (parser, scope, id);
2597       return result;
2598     }
2599   return make_typename_type (scope, id, typename_type, tf_error);
2600 }
2601
2602
2603 /* Create a new C++ parser.  */
2604
2605 static cp_parser *
2606 cp_parser_new (void)
2607 {
2608   cp_parser *parser;
2609   cp_lexer *lexer;
2610   unsigned i;
2611
2612   /* cp_lexer_new_main is called before calling ggc_alloc because
2613      cp_lexer_new_main might load a PCH file.  */
2614   lexer = cp_lexer_new_main ();
2615
2616   /* Initialize the binops_by_token so that we can get the tree
2617      directly from the token.  */
2618   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2619     binops_by_token[binops[i].token_type] = binops[i];
2620
2621   parser = GGC_CNEW (cp_parser);
2622   parser->lexer = lexer;
2623   parser->context = cp_parser_context_new (NULL);
2624
2625   /* For now, we always accept GNU extensions.  */
2626   parser->allow_gnu_extensions_p = 1;
2627
2628   /* The `>' token is a greater-than operator, not the end of a
2629      template-id.  */
2630   parser->greater_than_is_operator_p = true;
2631
2632   parser->default_arg_ok_p = true;
2633
2634   /* We are not parsing a constant-expression.  */
2635   parser->integral_constant_expression_p = false;
2636   parser->allow_non_integral_constant_expression_p = false;
2637   parser->non_integral_constant_expression_p = false;
2638
2639   /* Local variable names are not forbidden.  */
2640   parser->local_variables_forbidden_p = false;
2641
2642   /* We are not processing an `extern "C"' declaration.  */
2643   parser->in_unbraced_linkage_specification_p = false;
2644
2645   /* We are not processing a declarator.  */
2646   parser->in_declarator_p = false;
2647
2648   /* We are not processing a template-argument-list.  */
2649   parser->in_template_argument_list_p = false;
2650
2651   /* We are not in an iteration statement.  */
2652   parser->in_statement = 0;
2653
2654   /* We are not in a switch statement.  */
2655   parser->in_switch_statement_p = false;
2656
2657   /* We are not parsing a type-id inside an expression.  */
2658   parser->in_type_id_in_expr_p = false;
2659
2660   /* Declarations aren't implicitly extern "C".  */
2661   parser->implicit_extern_c = false;
2662
2663   /* String literals should be translated to the execution character set.  */
2664   parser->translate_strings_p = true;
2665
2666   /* We are not parsing a function body.  */
2667   parser->in_function_body = false;
2668
2669   /* The unparsed function queue is empty.  */
2670   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2671
2672   /* There are no classes being defined.  */
2673   parser->num_classes_being_defined = 0;
2674
2675   /* No template parameters apply.  */
2676   parser->num_template_parameter_lists = 0;
2677
2678   return parser;
2679 }
2680
2681 /* Create a cp_lexer structure which will emit the tokens in CACHE
2682    and push it onto the parser's lexer stack.  This is used for delayed
2683    parsing of in-class method bodies and default arguments, and should
2684    not be confused with tentative parsing.  */
2685 static void
2686 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2687 {
2688   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2689   lexer->next = parser->lexer;
2690   parser->lexer = lexer;
2691
2692   /* Move the current source position to that of the first token in the
2693      new lexer.  */
2694   cp_lexer_set_source_position_from_token (lexer->next_token);
2695 }
2696
2697 /* Pop the top lexer off the parser stack.  This is never used for the
2698    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2699 static void
2700 cp_parser_pop_lexer (cp_parser *parser)
2701 {
2702   cp_lexer *lexer = parser->lexer;
2703   parser->lexer = lexer->next;
2704   cp_lexer_destroy (lexer);
2705
2706   /* Put the current source position back where it was before this
2707      lexer was pushed.  */
2708   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2709 }
2710
2711 /* Lexical conventions [gram.lex]  */
2712
2713 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2714    identifier.  */
2715
2716 static tree
2717 cp_parser_identifier (cp_parser* parser)
2718 {
2719   cp_token *token;
2720
2721   /* Look for the identifier.  */
2722   token = cp_parser_require (parser, CPP_NAME, "identifier");
2723   /* Return the value.  */
2724   return token ? token->u.value : error_mark_node;
2725 }
2726
2727 /* Parse a sequence of adjacent string constants.  Returns a
2728    TREE_STRING representing the combined, nul-terminated string
2729    constant.  If TRANSLATE is true, translate the string to the
2730    execution character set.  If WIDE_OK is true, a wide string is
2731    invalid here.
2732
2733    C++98 [lex.string] says that if a narrow string literal token is
2734    adjacent to a wide string literal token, the behavior is undefined.
2735    However, C99 6.4.5p4 says that this results in a wide string literal.
2736    We follow C99 here, for consistency with the C front end.
2737
2738    This code is largely lifted from lex_string() in c-lex.c.
2739
2740    FUTURE: ObjC++ will need to handle @-strings here.  */
2741 static tree
2742 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2743 {
2744   tree value;
2745   bool wide = false;
2746   size_t count;
2747   struct obstack str_ob;
2748   cpp_string str, istr, *strs;
2749   cp_token *tok;
2750
2751   tok = cp_lexer_peek_token (parser->lexer);
2752   if (!cp_parser_is_string_literal (tok))
2753     {
2754       cp_parser_error (parser, "expected string-literal");
2755       return error_mark_node;
2756     }
2757
2758   /* Try to avoid the overhead of creating and destroying an obstack
2759      for the common case of just one string.  */
2760   if (!cp_parser_is_string_literal
2761       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2762     {
2763       cp_lexer_consume_token (parser->lexer);
2764
2765       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2766       str.len = TREE_STRING_LENGTH (tok->u.value);
2767       count = 1;
2768       if (tok->type == CPP_WSTRING)
2769         wide = true;
2770
2771       strs = &str;
2772     }
2773   else
2774     {
2775       gcc_obstack_init (&str_ob);
2776       count = 0;
2777
2778       do
2779         {
2780           cp_lexer_consume_token (parser->lexer);
2781           count++;
2782           str.text = (unsigned char *)TREE_STRING_POINTER (tok->u.value);
2783           str.len = TREE_STRING_LENGTH (tok->u.value);
2784           if (tok->type == CPP_WSTRING)
2785             wide = true;
2786
2787           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2788
2789           tok = cp_lexer_peek_token (parser->lexer);
2790         }
2791       while (cp_parser_is_string_literal (tok));
2792
2793       strs = (cpp_string *) obstack_finish (&str_ob);
2794     }
2795
2796   if (wide && !wide_ok)
2797     {
2798       cp_parser_error (parser, "a wide string is invalid in this context");
2799       wide = false;
2800     }
2801
2802   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2803       (parse_in, strs, count, &istr, wide))
2804     {
2805       value = build_string (istr.len, (char *)istr.text);
2806       free ((void *)istr.text);
2807
2808       TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
2809       value = fix_string_type (value);
2810     }
2811   else
2812     /* cpp_interpret_string has issued an error.  */
2813     value = error_mark_node;
2814
2815   if (count > 1)
2816     obstack_free (&str_ob, 0);
2817
2818   return value;
2819 }
2820
2821
2822 /* Basic concepts [gram.basic]  */
2823
2824 /* Parse a translation-unit.
2825
2826    translation-unit:
2827      declaration-seq [opt]
2828
2829    Returns TRUE if all went well.  */
2830
2831 static bool
2832 cp_parser_translation_unit (cp_parser* parser)
2833 {
2834   /* The address of the first non-permanent object on the declarator
2835      obstack.  */
2836   static void *declarator_obstack_base;
2837
2838   bool success;
2839
2840   /* Create the declarator obstack, if necessary.  */
2841   if (!cp_error_declarator)
2842     {
2843       gcc_obstack_init (&declarator_obstack);
2844       /* Create the error declarator.  */
2845       cp_error_declarator = make_declarator (cdk_error);
2846       /* Create the empty parameter list.  */
2847       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
2848       /* Remember where the base of the declarator obstack lies.  */
2849       declarator_obstack_base = obstack_next_free (&declarator_obstack);
2850     }
2851
2852   cp_parser_declaration_seq_opt (parser);
2853
2854   /* If there are no tokens left then all went well.  */
2855   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2856     {
2857       /* Get rid of the token array; we don't need it any more.  */
2858       cp_lexer_destroy (parser->lexer);
2859       parser->lexer = NULL;
2860
2861       /* This file might have been a context that's implicitly extern
2862          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
2863       if (parser->implicit_extern_c)
2864         {
2865           pop_lang_context ();
2866           parser->implicit_extern_c = false;
2867         }
2868
2869       /* Finish up.  */
2870       finish_translation_unit ();
2871
2872       success = true;
2873     }
2874   else
2875     {
2876       cp_parser_error (parser, "expected declaration");
2877       success = false;
2878     }
2879
2880   /* Make sure the declarator obstack was fully cleaned up.  */
2881   gcc_assert (obstack_next_free (&declarator_obstack)
2882               == declarator_obstack_base);
2883
2884   /* All went well.  */
2885   return success;
2886 }
2887
2888 /* Expressions [gram.expr] */
2889
2890 /* Parse a primary-expression.
2891
2892    primary-expression:
2893      literal
2894      this
2895      ( expression )
2896      id-expression
2897
2898    GNU Extensions:
2899
2900    primary-expression:
2901      ( compound-statement )
2902      __builtin_va_arg ( assignment-expression , type-id )
2903      __builtin_offsetof ( type-id , offsetof-expression )
2904
2905    Objective-C++ Extension:
2906
2907    primary-expression:
2908      objc-expression
2909
2910    literal:
2911      __null
2912
2913    ADDRESS_P is true iff this expression was immediately preceded by
2914    "&" and therefore might denote a pointer-to-member.  CAST_P is true
2915    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
2916    true iff this expression is a template argument.
2917
2918    Returns a representation of the expression.  Upon return, *IDK
2919    indicates what kind of id-expression (if any) was present.  */
2920
2921 static tree
2922 cp_parser_primary_expression (cp_parser *parser,
2923                               bool address_p,
2924                               bool cast_p,
2925                               bool template_arg_p,
2926                               cp_id_kind *idk)
2927 {
2928   cp_token *token;
2929
2930   /* Assume the primary expression is not an id-expression.  */
2931   *idk = CP_ID_KIND_NONE;
2932
2933   /* Peek at the next token.  */
2934   token = cp_lexer_peek_token (parser->lexer);
2935   switch (token->type)
2936     {
2937       /* literal:
2938            integer-literal
2939            character-literal
2940            floating-literal
2941            string-literal
2942            boolean-literal  */
2943     case CPP_CHAR:
2944     case CPP_WCHAR:
2945     case CPP_NUMBER:
2946       token = cp_lexer_consume_token (parser->lexer);
2947       /* Floating-point literals are only allowed in an integral
2948          constant expression if they are cast to an integral or
2949          enumeration type.  */
2950       if (TREE_CODE (token->u.value) == REAL_CST
2951           && parser->integral_constant_expression_p
2952           && pedantic)
2953         {
2954           /* CAST_P will be set even in invalid code like "int(2.7 +
2955              ...)".   Therefore, we have to check that the next token
2956              is sure to end the cast.  */
2957           if (cast_p)
2958             {
2959               cp_token *next_token;
2960
2961               next_token = cp_lexer_peek_token (parser->lexer);
2962               if (/* The comma at the end of an
2963                      enumerator-definition.  */
2964                   next_token->type != CPP_COMMA
2965                   /* The curly brace at the end of an enum-specifier.  */
2966                   && next_token->type != CPP_CLOSE_BRACE
2967                   /* The end of a statement.  */
2968                   && next_token->type != CPP_SEMICOLON
2969                   /* The end of the cast-expression.  */
2970                   && next_token->type != CPP_CLOSE_PAREN
2971                   /* The end of an array bound.  */
2972                   && next_token->type != CPP_CLOSE_SQUARE
2973                   /* The closing ">" in a template-argument-list.  */
2974                   && (next_token->type != CPP_GREATER
2975                       || parser->greater_than_is_operator_p))
2976                 cast_p = false;
2977             }
2978
2979           /* If we are within a cast, then the constraint that the
2980              cast is to an integral or enumeration type will be
2981              checked at that point.  If we are not within a cast, then
2982              this code is invalid.  */
2983           if (!cast_p)
2984             cp_parser_non_integral_constant_expression
2985               (parser, "floating-point literal");
2986         }
2987       return token->u.value;
2988
2989     case CPP_STRING:
2990     case CPP_WSTRING:
2991       /* ??? Should wide strings be allowed when parser->translate_strings_p
2992          is false (i.e. in attributes)?  If not, we can kill the third
2993          argument to cp_parser_string_literal.  */
2994       return cp_parser_string_literal (parser,
2995                                        parser->translate_strings_p,
2996                                        true);
2997
2998     case CPP_OPEN_PAREN:
2999       {
3000         tree expr;
3001         bool saved_greater_than_is_operator_p;
3002
3003         /* Consume the `('.  */
3004         cp_lexer_consume_token (parser->lexer);
3005         /* Within a parenthesized expression, a `>' token is always
3006            the greater-than operator.  */
3007         saved_greater_than_is_operator_p
3008           = parser->greater_than_is_operator_p;
3009         parser->greater_than_is_operator_p = true;
3010         /* If we see `( { ' then we are looking at the beginning of
3011            a GNU statement-expression.  */
3012         if (cp_parser_allow_gnu_extensions_p (parser)
3013             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3014           {
3015             /* Statement-expressions are not allowed by the standard.  */
3016             if (pedantic)
3017               pedwarn ("ISO C++ forbids braced-groups within expressions");
3018
3019             /* And they're not allowed outside of a function-body; you
3020                cannot, for example, write:
3021
3022                  int i = ({ int j = 3; j + 1; });
3023
3024                at class or namespace scope.  */
3025             if (!parser->in_function_body)
3026               error ("statement-expressions are allowed only inside functions");
3027             /* Start the statement-expression.  */
3028             expr = begin_stmt_expr ();
3029             /* Parse the compound-statement.  */
3030             cp_parser_compound_statement (parser, expr, false);
3031             /* Finish up.  */
3032             expr = finish_stmt_expr (expr, false);
3033           }
3034         else
3035           {
3036             /* Parse the parenthesized expression.  */
3037             expr = cp_parser_expression (parser, cast_p);
3038             /* Let the front end know that this expression was
3039                enclosed in parentheses. This matters in case, for
3040                example, the expression is of the form `A::B', since
3041                `&A::B' might be a pointer-to-member, but `&(A::B)' is
3042                not.  */
3043             finish_parenthesized_expr (expr);
3044           }
3045         /* The `>' token might be the end of a template-id or
3046            template-parameter-list now.  */
3047         parser->greater_than_is_operator_p
3048           = saved_greater_than_is_operator_p;
3049         /* Consume the `)'.  */
3050         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
3051           cp_parser_skip_to_end_of_statement (parser);
3052
3053         return expr;
3054       }
3055
3056     case CPP_KEYWORD:
3057       switch (token->keyword)
3058         {
3059           /* These two are the boolean literals.  */
3060         case RID_TRUE:
3061           cp_lexer_consume_token (parser->lexer);
3062           return boolean_true_node;
3063         case RID_FALSE:
3064           cp_lexer_consume_token (parser->lexer);
3065           return boolean_false_node;
3066
3067           /* The `__null' literal.  */
3068         case RID_NULL:
3069           cp_lexer_consume_token (parser->lexer);
3070           return null_node;
3071
3072           /* Recognize the `this' keyword.  */
3073         case RID_THIS:
3074           cp_lexer_consume_token (parser->lexer);
3075           if (parser->local_variables_forbidden_p)
3076             {
3077               error ("%<this%> may not be used in this context");
3078               return error_mark_node;
3079             }
3080           /* Pointers cannot appear in constant-expressions.  */
3081           if (cp_parser_non_integral_constant_expression (parser,
3082                                                           "`this'"))
3083             return error_mark_node;
3084           return finish_this_expr ();
3085
3086           /* The `operator' keyword can be the beginning of an
3087              id-expression.  */
3088         case RID_OPERATOR:
3089           goto id_expression;
3090
3091         case RID_FUNCTION_NAME:
3092         case RID_PRETTY_FUNCTION_NAME:
3093         case RID_C99_FUNCTION_NAME:
3094           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3095              __func__ are the names of variables -- but they are
3096              treated specially.  Therefore, they are handled here,
3097              rather than relying on the generic id-expression logic
3098              below.  Grammatically, these names are id-expressions.
3099
3100              Consume the token.  */
3101           token = cp_lexer_consume_token (parser->lexer);
3102           /* Look up the name.  */
3103           return finish_fname (token->u.value);
3104
3105         case RID_VA_ARG:
3106           {
3107             tree expression;
3108             tree type;
3109
3110             /* The `__builtin_va_arg' construct is used to handle
3111                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3112             cp_lexer_consume_token (parser->lexer);
3113             /* Look for the opening `('.  */
3114             cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3115             /* Now, parse the assignment-expression.  */
3116             expression = cp_parser_assignment_expression (parser,
3117                                                           /*cast_p=*/false);
3118             /* Look for the `,'.  */
3119             cp_parser_require (parser, CPP_COMMA, "`,'");
3120             /* Parse the type-id.  */
3121             type = cp_parser_type_id (parser);
3122             /* Look for the closing `)'.  */
3123             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3124             /* Using `va_arg' in a constant-expression is not
3125                allowed.  */
3126             if (cp_parser_non_integral_constant_expression (parser,
3127                                                             "`va_arg'"))
3128               return error_mark_node;
3129             return build_x_va_arg (expression, type);
3130           }
3131
3132         case RID_OFFSETOF:
3133           return cp_parser_builtin_offsetof (parser);
3134
3135           /* Objective-C++ expressions.  */
3136         case RID_AT_ENCODE:
3137         case RID_AT_PROTOCOL:
3138         case RID_AT_SELECTOR:
3139           return cp_parser_objc_expression (parser);
3140
3141         default:
3142           cp_parser_error (parser, "expected primary-expression");
3143           return error_mark_node;
3144         }
3145
3146       /* An id-expression can start with either an identifier, a
3147          `::' as the beginning of a qualified-id, or the "operator"
3148          keyword.  */
3149     case CPP_NAME:
3150     case CPP_SCOPE:
3151     case CPP_TEMPLATE_ID:
3152     case CPP_NESTED_NAME_SPECIFIER:
3153       {
3154         tree id_expression;
3155         tree decl;
3156         const char *error_msg;
3157         bool template_p;
3158         bool done;
3159
3160       id_expression:
3161         /* Parse the id-expression.  */
3162         id_expression
3163           = cp_parser_id_expression (parser,
3164                                      /*template_keyword_p=*/false,
3165                                      /*check_dependency_p=*/true,
3166                                      &template_p,
3167                                      /*declarator_p=*/false,
3168                                      /*optional_p=*/false);
3169         if (id_expression == error_mark_node)
3170           return error_mark_node;
3171         token = cp_lexer_peek_token (parser->lexer);
3172         done = (token->type != CPP_OPEN_SQUARE
3173                 && token->type != CPP_OPEN_PAREN
3174                 && token->type != CPP_DOT
3175                 && token->type != CPP_DEREF
3176                 && token->type != CPP_PLUS_PLUS
3177                 && token->type != CPP_MINUS_MINUS);
3178         /* If we have a template-id, then no further lookup is
3179            required.  If the template-id was for a template-class, we
3180            will sometimes have a TYPE_DECL at this point.  */
3181         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3182                  || TREE_CODE (id_expression) == TYPE_DECL)
3183           decl = id_expression;
3184         /* Look up the name.  */
3185         else
3186           {
3187             tree ambiguous_decls;
3188
3189             decl = cp_parser_lookup_name (parser, id_expression,
3190                                           none_type,
3191                                           template_p,
3192                                           /*is_namespace=*/false,
3193                                           /*check_dependency=*/true,
3194                                           &ambiguous_decls);
3195             /* If the lookup was ambiguous, an error will already have
3196                been issued.  */
3197             if (ambiguous_decls)
3198               return error_mark_node;
3199
3200             /* In Objective-C++, an instance variable (ivar) may be preferred
3201                to whatever cp_parser_lookup_name() found.  */
3202             decl = objc_lookup_ivar (decl, id_expression);
3203
3204             /* If name lookup gives us a SCOPE_REF, then the
3205                qualifying scope was dependent.  */
3206             if (TREE_CODE (decl) == SCOPE_REF)
3207               {
3208                 /* At this point, we do not know if DECL is a valid
3209                    integral constant expression.  We assume that it is
3210                    in fact such an expression, so that code like:
3211
3212                       template <int N> struct A {
3213                         int a[B<N>::i];
3214                       };
3215                      
3216                    is accepted.  At template-instantiation time, we
3217                    will check that B<N>::i is actually a constant.  */
3218                 return decl;
3219               }
3220             /* Check to see if DECL is a local variable in a context
3221                where that is forbidden.  */
3222             if (parser->local_variables_forbidden_p
3223                 && local_variable_p (decl))
3224               {
3225                 /* It might be that we only found DECL because we are
3226                    trying to be generous with pre-ISO scoping rules.
3227                    For example, consider:
3228
3229                      int i;
3230                      void g() {
3231                        for (int i = 0; i < 10; ++i) {}
3232                        extern void f(int j = i);
3233                      }
3234
3235                    Here, name look up will originally find the out
3236                    of scope `i'.  We need to issue a warning message,
3237                    but then use the global `i'.  */
3238                 decl = check_for_out_of_scope_variable (decl);
3239                 if (local_variable_p (decl))
3240                   {
3241                     error ("local variable %qD may not appear in this context",
3242                            decl);
3243                     return error_mark_node;
3244                   }
3245               }
3246           }
3247
3248         decl = (finish_id_expression
3249                 (id_expression, decl, parser->scope,
3250                  idk,
3251                  parser->integral_constant_expression_p,
3252                  parser->allow_non_integral_constant_expression_p,
3253                  &parser->non_integral_constant_expression_p,
3254                  template_p, done, address_p,
3255                  template_arg_p,
3256                  &error_msg));
3257         if (error_msg)
3258           cp_parser_error (parser, error_msg);
3259         return decl;
3260       }
3261
3262       /* Anything else is an error.  */
3263     default:
3264       /* ...unless we have an Objective-C++ message or string literal, that is.  */
3265       if (c_dialect_objc ()
3266           && (token->type == CPP_OPEN_SQUARE || token->type == CPP_OBJC_STRING))
3267         return cp_parser_objc_expression (parser);
3268
3269       cp_parser_error (parser, "expected primary-expression");
3270       return error_mark_node;
3271     }
3272 }
3273
3274 /* Parse an id-expression.
3275
3276    id-expression:
3277      unqualified-id
3278      qualified-id
3279
3280    qualified-id:
3281      :: [opt] nested-name-specifier template [opt] unqualified-id
3282      :: identifier
3283      :: operator-function-id
3284      :: template-id
3285
3286    Return a representation of the unqualified portion of the
3287    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3288    a `::' or nested-name-specifier.
3289
3290    Often, if the id-expression was a qualified-id, the caller will
3291    want to make a SCOPE_REF to represent the qualified-id.  This
3292    function does not do this in order to avoid wastefully creating
3293    SCOPE_REFs when they are not required.
3294
3295    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3296    `template' keyword.
3297
3298    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3299    uninstantiated templates.
3300
3301    If *TEMPLATE_P is non-NULL, it is set to true iff the
3302    `template' keyword is used to explicitly indicate that the entity
3303    named is a template.
3304
3305    If DECLARATOR_P is true, the id-expression is appearing as part of
3306    a declarator, rather than as part of an expression.  */
3307
3308 static tree
3309 cp_parser_id_expression (cp_parser *parser,
3310                          bool template_keyword_p,
3311                          bool check_dependency_p,
3312                          bool *template_p,
3313                          bool declarator_p,
3314                          bool optional_p)
3315 {
3316   bool global_scope_p;
3317   bool nested_name_specifier_p;
3318
3319   /* Assume the `template' keyword was not used.  */
3320   if (template_p)
3321     *template_p = template_keyword_p;
3322
3323   /* Look for the optional `::' operator.  */
3324   global_scope_p
3325     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3326        != NULL_TREE);
3327   /* Look for the optional nested-name-specifier.  */
3328   nested_name_specifier_p
3329     = (cp_parser_nested_name_specifier_opt (parser,
3330                                             /*typename_keyword_p=*/false,
3331                                             check_dependency_p,
3332                                             /*type_p=*/false,
3333                                             declarator_p)
3334        != NULL_TREE);
3335   /* If there is a nested-name-specifier, then we are looking at
3336      the first qualified-id production.  */
3337   if (nested_name_specifier_p)
3338     {
3339       tree saved_scope;
3340       tree saved_object_scope;
3341       tree saved_qualifying_scope;
3342       tree unqualified_id;
3343       bool is_template;
3344
3345       /* See if the next token is the `template' keyword.  */
3346       if (!template_p)
3347         template_p = &is_template;
3348       *template_p = cp_parser_optional_template_keyword (parser);
3349       /* Name lookup we do during the processing of the
3350          unqualified-id might obliterate SCOPE.  */
3351       saved_scope = parser->scope;
3352       saved_object_scope = parser->object_scope;
3353       saved_qualifying_scope = parser->qualifying_scope;
3354       /* Process the final unqualified-id.  */
3355       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3356                                                  check_dependency_p,
3357                                                  declarator_p,
3358                                                  /*optional_p=*/false);
3359       /* Restore the SAVED_SCOPE for our caller.  */
3360       parser->scope = saved_scope;
3361       parser->object_scope = saved_object_scope;
3362       parser->qualifying_scope = saved_qualifying_scope;
3363
3364       return unqualified_id;
3365     }
3366   /* Otherwise, if we are in global scope, then we are looking at one
3367      of the other qualified-id productions.  */
3368   else if (global_scope_p)
3369     {
3370       cp_token *token;
3371       tree id;
3372
3373       /* Peek at the next token.  */
3374       token = cp_lexer_peek_token (parser->lexer);
3375
3376       /* If it's an identifier, and the next token is not a "<", then
3377          we can avoid the template-id case.  This is an optimization
3378          for this common case.  */
3379       if (token->type == CPP_NAME
3380           && !cp_parser_nth_token_starts_template_argument_list_p
3381                (parser, 2))
3382         return cp_parser_identifier (parser);
3383
3384       cp_parser_parse_tentatively (parser);
3385       /* Try a template-id.  */
3386       id = cp_parser_template_id (parser,
3387                                   /*template_keyword_p=*/false,
3388                                   /*check_dependency_p=*/true,
3389                                   declarator_p);
3390       /* If that worked, we're done.  */
3391       if (cp_parser_parse_definitely (parser))
3392         return id;
3393
3394       /* Peek at the next token.  (Changes in the token buffer may
3395          have invalidated the pointer obtained above.)  */
3396       token = cp_lexer_peek_token (parser->lexer);
3397
3398       switch (token->type)
3399         {
3400         case CPP_NAME:
3401           return cp_parser_identifier (parser);
3402
3403         case CPP_KEYWORD:
3404           if (token->keyword == RID_OPERATOR)
3405             return cp_parser_operator_function_id (parser);
3406           /* Fall through.  */
3407
3408         default:
3409           cp_parser_error (parser, "expected id-expression");
3410           return error_mark_node;
3411         }
3412     }
3413   else
3414     return cp_parser_unqualified_id (parser, template_keyword_p,
3415                                      /*check_dependency_p=*/true,
3416                                      declarator_p,
3417                                      optional_p);
3418 }
3419
3420 /* Parse an unqualified-id.
3421
3422    unqualified-id:
3423      identifier
3424      operator-function-id
3425      conversion-function-id
3426      ~ class-name
3427      template-id
3428
3429    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3430    keyword, in a construct like `A::template ...'.
3431
3432    Returns a representation of unqualified-id.  For the `identifier'
3433    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3434    production a BIT_NOT_EXPR is returned; the operand of the
3435    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3436    other productions, see the documentation accompanying the
3437    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3438    names are looked up in uninstantiated templates.  If DECLARATOR_P
3439    is true, the unqualified-id is appearing as part of a declarator,
3440    rather than as part of an expression.  */
3441
3442 static tree
3443 cp_parser_unqualified_id (cp_parser* parser,
3444                           bool template_keyword_p,
3445                           bool check_dependency_p,
3446                           bool declarator_p,
3447                           bool optional_p)
3448 {
3449   cp_token *token;
3450
3451   /* Peek at the next token.  */
3452   token = cp_lexer_peek_token (parser->lexer);
3453
3454   switch (token->type)
3455     {
3456     case CPP_NAME:
3457       {
3458         tree id;
3459
3460         /* We don't know yet whether or not this will be a
3461            template-id.  */
3462         cp_parser_parse_tentatively (parser);
3463         /* Try a template-id.  */
3464         id = cp_parser_template_id (parser, template_keyword_p,
3465                                     check_dependency_p,
3466                                     declarator_p);
3467         /* If it worked, we're done.  */
3468         if (cp_parser_parse_definitely (parser))
3469           return id;
3470         /* Otherwise, it's an ordinary identifier.  */
3471         return cp_parser_identifier (parser);
3472       }
3473
3474     case CPP_TEMPLATE_ID:
3475       return cp_parser_template_id (parser, template_keyword_p,
3476                                     check_dependency_p,
3477                                     declarator_p);
3478
3479     case CPP_COMPL:
3480       {
3481         tree type_decl;
3482         tree qualifying_scope;
3483         tree object_scope;
3484         tree scope;
3485         bool done;
3486
3487         /* Consume the `~' token.  */
3488         cp_lexer_consume_token (parser->lexer);
3489         /* Parse the class-name.  The standard, as written, seems to
3490            say that:
3491
3492              template <typename T> struct S { ~S (); };
3493              template <typename T> S<T>::~S() {}
3494
3495            is invalid, since `~' must be followed by a class-name, but
3496            `S<T>' is dependent, and so not known to be a class.
3497            That's not right; we need to look in uninstantiated
3498            templates.  A further complication arises from:
3499
3500              template <typename T> void f(T t) {
3501                t.T::~T();
3502              }
3503
3504            Here, it is not possible to look up `T' in the scope of `T'
3505            itself.  We must look in both the current scope, and the
3506            scope of the containing complete expression.
3507
3508            Yet another issue is:
3509
3510              struct S {
3511                int S;
3512                ~S();
3513              };
3514
3515              S::~S() {}
3516
3517            The standard does not seem to say that the `S' in `~S'
3518            should refer to the type `S' and not the data member
3519            `S::S'.  */
3520
3521         /* DR 244 says that we look up the name after the "~" in the
3522            same scope as we looked up the qualifying name.  That idea
3523            isn't fully worked out; it's more complicated than that.  */
3524         scope = parser->scope;
3525         object_scope = parser->object_scope;
3526         qualifying_scope = parser->qualifying_scope;
3527
3528         /* Check for invalid scopes.  */
3529         if (scope == error_mark_node)
3530           {
3531             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3532               cp_lexer_consume_token (parser->lexer);
3533             return error_mark_node;
3534           }
3535         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3536           {
3537             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3538               error ("scope %qT before %<~%> is not a class-name", scope);
3539             cp_parser_simulate_error (parser);
3540             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3541               cp_lexer_consume_token (parser->lexer);
3542             return error_mark_node;
3543           }
3544         gcc_assert (!scope || TYPE_P (scope));
3545
3546         /* If the name is of the form "X::~X" it's OK.  */
3547         token = cp_lexer_peek_token (parser->lexer);
3548         if (scope
3549             && token->type == CPP_NAME
3550             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3551                 == CPP_OPEN_PAREN)
3552             && constructor_name_p (token->u.value, scope))
3553           {
3554             cp_lexer_consume_token (parser->lexer);
3555             return build_nt (BIT_NOT_EXPR, scope);
3556           }
3557
3558         /* If there was an explicit qualification (S::~T), first look
3559            in the scope given by the qualification (i.e., S).  */
3560         done = false;
3561         type_decl = NULL_TREE;
3562         if (scope)
3563           {
3564             cp_parser_parse_tentatively (parser);
3565             type_decl = cp_parser_class_name (parser,
3566                                               /*typename_keyword_p=*/false,
3567                                               /*template_keyword_p=*/false,
3568                                               none_type,
3569                                               /*check_dependency=*/false,
3570                                               /*class_head_p=*/false,
3571                                               declarator_p);
3572             if (cp_parser_parse_definitely (parser))
3573               done = true;
3574           }
3575         /* In "N::S::~S", look in "N" as well.  */
3576         if (!done && scope && qualifying_scope)
3577           {
3578             cp_parser_parse_tentatively (parser);
3579             parser->scope = qualifying_scope;
3580             parser->object_scope = NULL_TREE;
3581             parser->qualifying_scope = NULL_TREE;
3582             type_decl
3583               = cp_parser_class_name (parser,
3584                                       /*typename_keyword_p=*/false,
3585                                       /*template_keyword_p=*/false,
3586                                       none_type,
3587                                       /*check_dependency=*/false,
3588                                       /*class_head_p=*/false,
3589                                       declarator_p);
3590             if (cp_parser_parse_definitely (parser))
3591               done = true;
3592           }
3593         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3594         else if (!done && object_scope)
3595           {
3596             cp_parser_parse_tentatively (parser);
3597             parser->scope = object_scope;
3598             parser->object_scope = NULL_TREE;
3599             parser->qualifying_scope = NULL_TREE;
3600             type_decl
3601               = cp_parser_class_name (parser,
3602                                       /*typename_keyword_p=*/false,
3603                                       /*template_keyword_p=*/false,
3604                                       none_type,
3605                                       /*check_dependency=*/false,
3606                                       /*class_head_p=*/false,
3607                                       declarator_p);
3608             if (cp_parser_parse_definitely (parser))
3609               done = true;
3610           }
3611         /* Look in the surrounding context.  */
3612         if (!done)
3613           {
3614             parser->scope = NULL_TREE;
3615             parser->object_scope = NULL_TREE;
3616             parser->qualifying_scope = NULL_TREE;
3617             type_decl
3618               = cp_parser_class_name (parser,
3619                                       /*typename_keyword_p=*/false,
3620                                       /*template_keyword_p=*/false,
3621                                       none_type,
3622                                       /*check_dependency=*/false,
3623                                       /*class_head_p=*/false,
3624                                       declarator_p);
3625           }
3626         /* If an error occurred, assume that the name of the
3627            destructor is the same as the name of the qualifying
3628            class.  That allows us to keep parsing after running
3629            into ill-formed destructor names.  */
3630         if (type_decl == error_mark_node && scope)
3631           return build_nt (BIT_NOT_EXPR, scope);
3632         else if (type_decl == error_mark_node)
3633           return error_mark_node;
3634
3635         /* Check that destructor name and scope match.  */
3636         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3637           {
3638             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3639               error ("declaration of %<~%T%> as member of %qT",
3640                      type_decl, scope);
3641             cp_parser_simulate_error (parser);
3642             return error_mark_node;
3643           }
3644
3645         /* [class.dtor]
3646
3647            A typedef-name that names a class shall not be used as the
3648            identifier in the declarator for a destructor declaration.  */
3649         if (declarator_p
3650             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3651             && !DECL_SELF_REFERENCE_P (type_decl)
3652             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3653           error ("typedef-name %qD used as destructor declarator",
3654                  type_decl);
3655
3656         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3657       }
3658
3659     case CPP_KEYWORD:
3660       if (token->keyword == RID_OPERATOR)
3661         {
3662           tree id;
3663
3664           /* This could be a template-id, so we try that first.  */
3665           cp_parser_parse_tentatively (parser);
3666           /* Try a template-id.  */
3667           id = cp_parser_template_id (parser, template_keyword_p,
3668                                       /*check_dependency_p=*/true,
3669                                       declarator_p);
3670           /* If that worked, we're done.  */
3671           if (cp_parser_parse_definitely (parser))
3672             return id;
3673           /* We still don't know whether we're looking at an
3674              operator-function-id or a conversion-function-id.  */
3675           cp_parser_parse_tentatively (parser);
3676           /* Try an operator-function-id.  */
3677           id = cp_parser_operator_function_id (parser);
3678           /* If that didn't work, try a conversion-function-id.  */
3679           if (!cp_parser_parse_definitely (parser))
3680             id = cp_parser_conversion_function_id (parser);
3681
3682           return id;
3683         }
3684       /* Fall through.  */
3685
3686     default:
3687       if (optional_p)
3688         return NULL_TREE;
3689       cp_parser_error (parser, "expected unqualified-id");
3690       return error_mark_node;
3691     }
3692 }
3693
3694 /* Parse an (optional) nested-name-specifier.
3695
3696    nested-name-specifier:
3697      class-or-namespace-name :: nested-name-specifier [opt]
3698      class-or-namespace-name :: template nested-name-specifier [opt]
3699
3700    PARSER->SCOPE should be set appropriately before this function is
3701    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3702    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3703    in name lookups.
3704
3705    Sets PARSER->SCOPE to the class (TYPE) or namespace
3706    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3707    it unchanged if there is no nested-name-specifier.  Returns the new
3708    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3709
3710    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3711    part of a declaration and/or decl-specifier.  */
3712
3713 static tree
3714 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3715                                      bool typename_keyword_p,
3716                                      bool check_dependency_p,
3717                                      bool type_p,
3718                                      bool is_declaration)
3719 {
3720   bool success = false;
3721   cp_token_position start = 0;
3722   cp_token *token;
3723
3724   /* Remember where the nested-name-specifier starts.  */
3725   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3726     {
3727       start = cp_lexer_token_position (parser->lexer, false);
3728       push_deferring_access_checks (dk_deferred);
3729     }
3730
3731   while (true)
3732     {
3733       tree new_scope;
3734       tree old_scope;
3735       tree saved_qualifying_scope;
3736       bool template_keyword_p;
3737
3738       /* Spot cases that cannot be the beginning of a
3739          nested-name-specifier.  */
3740       token = cp_lexer_peek_token (parser->lexer);
3741
3742       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3743          the already parsed nested-name-specifier.  */
3744       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3745         {
3746           /* Grab the nested-name-specifier and continue the loop.  */
3747           cp_parser_pre_parsed_nested_name_specifier (parser);
3748           /* If we originally encountered this nested-name-specifier
3749              with IS_DECLARATION set to false, we will not have
3750              resolved TYPENAME_TYPEs, so we must do so here.  */
3751           if (is_declaration
3752               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3753             {
3754               new_scope = resolve_typename_type (parser->scope,
3755                                                  /*only_current_p=*/false);
3756               if (new_scope != error_mark_node)
3757                 parser->scope = new_scope;
3758             }
3759           success = true;
3760           continue;
3761         }
3762
3763       /* Spot cases that cannot be the beginning of a
3764          nested-name-specifier.  On the second and subsequent times
3765          through the loop, we look for the `template' keyword.  */
3766       if (success && token->keyword == RID_TEMPLATE)
3767         ;
3768       /* A template-id can start a nested-name-specifier.  */
3769       else if (token->type == CPP_TEMPLATE_ID)
3770         ;
3771       else
3772         {
3773           /* If the next token is not an identifier, then it is
3774              definitely not a class-or-namespace-name.  */
3775           if (token->type != CPP_NAME)
3776             break;
3777           /* If the following token is neither a `<' (to begin a
3778              template-id), nor a `::', then we are not looking at a
3779              nested-name-specifier.  */
3780           token = cp_lexer_peek_nth_token (parser->lexer, 2);
3781           if (token->type != CPP_SCOPE
3782               && !cp_parser_nth_token_starts_template_argument_list_p
3783                   (parser, 2))
3784             break;
3785         }
3786
3787       /* The nested-name-specifier is optional, so we parse
3788          tentatively.  */
3789       cp_parser_parse_tentatively (parser);
3790
3791       /* Look for the optional `template' keyword, if this isn't the
3792          first time through the loop.  */
3793       if (success)
3794         template_keyword_p = cp_parser_optional_template_keyword (parser);
3795       else
3796         template_keyword_p = false;
3797
3798       /* Save the old scope since the name lookup we are about to do
3799          might destroy it.  */
3800       old_scope = parser->scope;
3801       saved_qualifying_scope = parser->qualifying_scope;
3802       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
3803          look up names in "X<T>::I" in order to determine that "Y" is
3804          a template.  So, if we have a typename at this point, we make
3805          an effort to look through it.  */
3806       if (is_declaration
3807           && !typename_keyword_p
3808           && parser->scope
3809           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3810         parser->scope = resolve_typename_type (parser->scope,
3811                                                /*only_current_p=*/false);
3812       /* Parse the qualifying entity.  */
3813       new_scope
3814         = cp_parser_class_or_namespace_name (parser,
3815                                              typename_keyword_p,
3816                                              template_keyword_p,
3817                                              check_dependency_p,
3818                                              type_p,
3819                                              is_declaration);
3820       /* Look for the `::' token.  */
3821       cp_parser_require (parser, CPP_SCOPE, "`::'");
3822
3823       /* If we found what we wanted, we keep going; otherwise, we're
3824          done.  */
3825       if (!cp_parser_parse_definitely (parser))
3826         {
3827           bool error_p = false;
3828
3829           /* Restore the OLD_SCOPE since it was valid before the
3830              failed attempt at finding the last
3831              class-or-namespace-name.  */
3832           parser->scope = old_scope;
3833           parser->qualifying_scope = saved_qualifying_scope;
3834           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3835             break;
3836           /* If the next token is an identifier, and the one after
3837              that is a `::', then any valid interpretation would have
3838              found a class-or-namespace-name.  */
3839           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3840                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3841                      == CPP_SCOPE)
3842                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3843                      != CPP_COMPL))
3844             {
3845               token = cp_lexer_consume_token (parser->lexer);
3846               if (!error_p)
3847                 {
3848                   if (!token->ambiguous_p)
3849                     {
3850                       tree decl;
3851                       tree ambiguous_decls;
3852
3853                       decl = cp_parser_lookup_name (parser, token->u.value,
3854                                                     none_type,
3855                                                     /*is_template=*/false,
3856                                                     /*is_namespace=*/false,
3857                                                     /*check_dependency=*/true,
3858                                                     &ambiguous_decls);
3859                       if (TREE_CODE (decl) == TEMPLATE_DECL)
3860                         error ("%qD used without template parameters", decl);
3861                       else if (ambiguous_decls)
3862                         {
3863                           error ("reference to %qD is ambiguous",
3864                                  token->u.value);
3865                           print_candidates (ambiguous_decls);
3866                           decl = error_mark_node;
3867                         }
3868                       else
3869                         cp_parser_name_lookup_error
3870                           (parser, token->u.value, decl,
3871                            "is not a class or namespace");
3872                     }
3873                   parser->scope = error_mark_node;
3874                   error_p = true;
3875                   /* Treat this as a successful nested-name-specifier
3876                      due to:
3877
3878                      [basic.lookup.qual]
3879
3880                      If the name found is not a class-name (clause
3881                      _class_) or namespace-name (_namespace.def_), the
3882                      program is ill-formed.  */
3883                   success = true;
3884                 }
3885               cp_lexer_consume_token (parser->lexer);
3886             }
3887           break;
3888         }
3889       /* We've found one valid nested-name-specifier.  */
3890       success = true;
3891       /* Name lookup always gives us a DECL.  */
3892       if (TREE_CODE (new_scope) == TYPE_DECL)
3893         new_scope = TREE_TYPE (new_scope);
3894       /* Uses of "template" must be followed by actual templates.  */
3895       if (template_keyword_p
3896           && !(CLASS_TYPE_P (new_scope)
3897                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
3898                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
3899                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
3900           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
3901                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
3902                    == TEMPLATE_ID_EXPR)))
3903         pedwarn (TYPE_P (new_scope)
3904                  ? "%qT is not a template"
3905                  : "%qD is not a template",
3906                  new_scope);
3907       /* If it is a class scope, try to complete it; we are about to
3908          be looking up names inside the class.  */
3909       if (TYPE_P (new_scope)
3910           /* Since checking types for dependency can be expensive,
3911              avoid doing it if the type is already complete.  */
3912           && !COMPLETE_TYPE_P (new_scope)
3913           /* Do not try to complete dependent types.  */
3914           && !dependent_type_p (new_scope))
3915         new_scope = complete_type (new_scope);
3916       /* Make sure we look in the right scope the next time through
3917          the loop.  */
3918       parser->scope = new_scope;
3919     }
3920
3921   /* If parsing tentatively, replace the sequence of tokens that makes
3922      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
3923      token.  That way, should we re-parse the token stream, we will
3924      not have to repeat the effort required to do the parse, nor will
3925      we issue duplicate error messages.  */
3926   if (success && start)
3927     {
3928       cp_token *token;
3929
3930       token = cp_lexer_token_at (parser->lexer, start);
3931       /* Reset the contents of the START token.  */
3932       token->type = CPP_NESTED_NAME_SPECIFIER;
3933       /* Retrieve any deferred checks.  Do not pop this access checks yet
3934          so the memory will not be reclaimed during token replacing below.  */
3935       token->u.tree_check_value = GGC_CNEW (struct tree_check);
3936       token->u.tree_check_value->value = parser->scope;
3937       token->u.tree_check_value->checks = get_deferred_access_checks ();
3938       token->u.tree_check_value->qualifying_scope =
3939         parser->qualifying_scope;
3940       token->keyword = RID_MAX;
3941
3942       /* Purge all subsequent tokens.  */
3943       cp_lexer_purge_tokens_after (parser->lexer, start);
3944     }
3945
3946   if (start)
3947     pop_to_parent_deferring_access_checks ();
3948
3949   return success ? parser->scope : NULL_TREE;
3950 }
3951
3952 /* Parse a nested-name-specifier.  See
3953    cp_parser_nested_name_specifier_opt for details.  This function
3954    behaves identically, except that it will an issue an error if no
3955    nested-name-specifier is present.  */
3956
3957 static tree
3958 cp_parser_nested_name_specifier (cp_parser *parser,
3959                                  bool typename_keyword_p,
3960                                  bool check_dependency_p,
3961                                  bool type_p,
3962                                  bool is_declaration)
3963 {
3964   tree scope;
3965
3966   /* Look for the nested-name-specifier.  */
3967   scope = cp_parser_nested_name_specifier_opt (parser,
3968                                                typename_keyword_p,
3969                                                check_dependency_p,
3970                                                type_p,
3971                                                is_declaration);
3972   /* If it was not present, issue an error message.  */
3973   if (!scope)
3974     {
3975       cp_parser_error (parser, "expected nested-name-specifier");
3976       parser->scope = NULL_TREE;
3977     }
3978
3979   return scope;
3980 }
3981
3982 /* Parse a class-or-namespace-name.
3983
3984    class-or-namespace-name:
3985      class-name
3986      namespace-name
3987
3988    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
3989    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
3990    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
3991    TYPE_P is TRUE iff the next name should be taken as a class-name,
3992    even the same name is declared to be another entity in the same
3993    scope.
3994
3995    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
3996    specified by the class-or-namespace-name.  If neither is found the
3997    ERROR_MARK_NODE is returned.  */
3998
3999 static tree
4000 cp_parser_class_or_namespace_name (cp_parser *parser,
4001                                    bool typename_keyword_p,
4002                                    bool template_keyword_p,
4003                                    bool check_dependency_p,
4004                                    bool type_p,
4005                                    bool is_declaration)
4006 {
4007   tree saved_scope;
4008   tree saved_qualifying_scope;
4009   tree saved_object_scope;
4010   tree scope;
4011   bool only_class_p;
4012
4013   /* Before we try to parse the class-name, we must save away the
4014      current PARSER->SCOPE since cp_parser_class_name will destroy
4015      it.  */
4016   saved_scope = parser->scope;
4017   saved_qualifying_scope = parser->qualifying_scope;
4018   saved_object_scope = parser->object_scope;
4019   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4020      there is no need to look for a namespace-name.  */
4021   only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
4022   if (!only_class_p)
4023     cp_parser_parse_tentatively (parser);
4024   scope = cp_parser_class_name (parser,
4025                                 typename_keyword_p,
4026                                 template_keyword_p,
4027                                 type_p ? class_type : none_type,
4028                                 check_dependency_p,
4029                                 /*class_head_p=*/false,
4030                                 is_declaration);
4031   /* If that didn't work, try for a namespace-name.  */
4032   if (!only_class_p && !cp_parser_parse_definitely (parser))
4033     {
4034       /* Restore the saved scope.  */
4035       parser->scope = saved_scope;
4036       parser->qualifying_scope = saved_qualifying_scope;
4037       parser->object_scope = saved_object_scope;
4038       /* If we are not looking at an identifier followed by the scope
4039          resolution operator, then this is not part of a
4040          nested-name-specifier.  (Note that this function is only used
4041          to parse the components of a nested-name-specifier.)  */
4042       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4043           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4044         return error_mark_node;
4045       scope = cp_parser_namespace_name (parser);
4046     }
4047
4048   return scope;
4049 }
4050
4051 /* Parse a postfix-expression.
4052
4053    postfix-expression:
4054      primary-expression
4055      postfix-expression [ expression ]
4056      postfix-expression ( expression-list [opt] )
4057      simple-type-specifier ( expression-list [opt] )
4058      typename :: [opt] nested-name-specifier identifier
4059        ( expression-list [opt] )
4060      typename :: [opt] nested-name-specifier template [opt] template-id
4061        ( expression-list [opt] )
4062      postfix-expression . template [opt] id-expression
4063      postfix-expression -> template [opt] id-expression
4064      postfix-expression . pseudo-destructor-name
4065      postfix-expression -> pseudo-destructor-name
4066      postfix-expression ++
4067      postfix-expression --
4068      dynamic_cast < type-id > ( expression )
4069      static_cast < type-id > ( expression )
4070      reinterpret_cast < type-id > ( expression )
4071      const_cast < type-id > ( expression )
4072      typeid ( expression )
4073      typeid ( type-id )
4074
4075    GNU Extension:
4076
4077    postfix-expression:
4078      ( type-id ) { initializer-list , [opt] }
4079
4080    This extension is a GNU version of the C99 compound-literal
4081    construct.  (The C99 grammar uses `type-name' instead of `type-id',
4082    but they are essentially the same concept.)
4083
4084    If ADDRESS_P is true, the postfix expression is the operand of the
4085    `&' operator.  CAST_P is true if this expression is the target of a
4086    cast.
4087
4088    Returns a representation of the expression.  */
4089
4090 static tree
4091 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
4092 {
4093   cp_token *token;
4094   enum rid keyword;
4095   cp_id_kind idk = CP_ID_KIND_NONE;
4096   tree postfix_expression = NULL_TREE;
4097
4098   /* Peek at the next token.  */
4099   token = cp_lexer_peek_token (parser->lexer);
4100   /* Some of the productions are determined by keywords.  */
4101   keyword = token->keyword;
4102   switch (keyword)
4103     {
4104     case RID_DYNCAST:
4105     case RID_STATCAST:
4106     case RID_REINTCAST:
4107     case RID_CONSTCAST:
4108       {
4109         tree type;
4110         tree expression;
4111         const char *saved_message;
4112
4113         /* All of these can be handled in the same way from the point
4114            of view of parsing.  Begin by consuming the token
4115            identifying the cast.  */
4116         cp_lexer_consume_token (parser->lexer);
4117
4118         /* New types cannot be defined in the cast.  */
4119         saved_message = parser->type_definition_forbidden_message;
4120         parser->type_definition_forbidden_message
4121           = "types may not be defined in casts";
4122
4123         /* Look for the opening `<'.  */
4124         cp_parser_require (parser, CPP_LESS, "`<'");
4125         /* Parse the type to which we are casting.  */
4126         type = cp_parser_type_id (parser);
4127         /* Look for the closing `>'.  */
4128         cp_parser_require (parser, CPP_GREATER, "`>'");
4129         /* Restore the old message.  */
4130         parser->type_definition_forbidden_message = saved_message;
4131
4132         /* And the expression which is being cast.  */
4133         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4134         expression = cp_parser_expression (parser, /*cast_p=*/true);
4135         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4136
4137         /* Only type conversions to integral or enumeration types
4138            can be used in constant-expressions.  */
4139         if (!cast_valid_in_integral_constant_expression_p (type)
4140             && (cp_parser_non_integral_constant_expression
4141                 (parser,
4142                  "a cast to a type other than an integral or "
4143                  "enumeration type")))
4144           return error_mark_node;
4145
4146         switch (keyword)
4147           {
4148           case RID_DYNCAST:
4149             postfix_expression
4150               = build_dynamic_cast (type, expression);
4151             break;
4152           case RID_STATCAST:
4153             postfix_expression
4154               = build_static_cast (type, expression);
4155             break;
4156           case RID_REINTCAST:
4157             postfix_expression
4158               = build_reinterpret_cast (type, expression);
4159             break;
4160           case RID_CONSTCAST:
4161             postfix_expression
4162               = build_const_cast (type, expression);
4163             break;
4164           default:
4165             gcc_unreachable ();
4166           }
4167       }
4168       break;
4169
4170     case RID_TYPEID:
4171       {
4172         tree type;
4173         const char *saved_message;
4174         bool saved_in_type_id_in_expr_p;
4175
4176         /* Consume the `typeid' token.  */
4177         cp_lexer_consume_token (parser->lexer);
4178         /* Look for the `(' token.  */
4179         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4180         /* Types cannot be defined in a `typeid' expression.  */
4181         saved_message = parser->type_definition_forbidden_message;
4182         parser->type_definition_forbidden_message
4183           = "types may not be defined in a `typeid\' expression";
4184         /* We can't be sure yet whether we're looking at a type-id or an
4185            expression.  */
4186         cp_parser_parse_tentatively (parser);
4187         /* Try a type-id first.  */
4188         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4189         parser->in_type_id_in_expr_p = true;
4190         type = cp_parser_type_id (parser);
4191         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4192         /* Look for the `)' token.  Otherwise, we can't be sure that
4193            we're not looking at an expression: consider `typeid (int
4194            (3))', for example.  */
4195         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4196         /* If all went well, simply lookup the type-id.  */
4197         if (cp_parser_parse_definitely (parser))
4198           postfix_expression = get_typeid (type);
4199         /* Otherwise, fall back to the expression variant.  */
4200         else
4201           {
4202             tree expression;
4203
4204             /* Look for an expression.  */
4205             expression = cp_parser_expression (parser, /*cast_p=*/false);
4206             /* Compute its typeid.  */
4207             postfix_expression = build_typeid (expression);
4208             /* Look for the `)' token.  */
4209             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4210           }
4211         /* Restore the saved message.  */
4212         parser->type_definition_forbidden_message = saved_message;
4213         /* `typeid' may not appear in an integral constant expression.  */
4214         if (cp_parser_non_integral_constant_expression(parser,
4215                                                        "`typeid' operator"))
4216           return error_mark_node;
4217       }
4218       break;
4219
4220     case RID_TYPENAME:
4221       {
4222         tree type;
4223         /* The syntax permitted here is the same permitted for an
4224            elaborated-type-specifier.  */
4225         type = cp_parser_elaborated_type_specifier (parser,
4226                                                     /*is_friend=*/false,
4227                                                     /*is_declaration=*/false);
4228         postfix_expression = cp_parser_functional_cast (parser, type);
4229       }
4230       break;
4231
4232     default:
4233       {
4234         tree type;
4235
4236         /* If the next thing is a simple-type-specifier, we may be
4237            looking at a functional cast.  We could also be looking at
4238            an id-expression.  So, we try the functional cast, and if
4239            that doesn't work we fall back to the primary-expression.  */
4240         cp_parser_parse_tentatively (parser);
4241         /* Look for the simple-type-specifier.  */
4242         type = cp_parser_simple_type_specifier (parser,
4243                                                 /*decl_specs=*/NULL,
4244                                                 CP_PARSER_FLAGS_NONE);
4245         /* Parse the cast itself.  */
4246         if (!cp_parser_error_occurred (parser))
4247           postfix_expression
4248             = cp_parser_functional_cast (parser, type);
4249         /* If that worked, we're done.  */
4250         if (cp_parser_parse_definitely (parser))
4251           break;
4252
4253         /* If the functional-cast didn't work out, try a
4254            compound-literal.  */
4255         if (cp_parser_allow_gnu_extensions_p (parser)
4256             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4257           {
4258             VEC(constructor_elt,gc) *initializer_list = NULL;
4259             bool saved_in_type_id_in_expr_p;
4260
4261             cp_parser_parse_tentatively (parser);
4262             /* Consume the `('.  */
4263             cp_lexer_consume_token (parser->lexer);
4264             /* Parse the type.  */
4265             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4266             parser->in_type_id_in_expr_p = true;
4267             type = cp_parser_type_id (parser);
4268             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4269             /* Look for the `)'.  */
4270             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4271             /* Look for the `{'.  */
4272             cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
4273             /* If things aren't going well, there's no need to
4274                keep going.  */
4275             if (!cp_parser_error_occurred (parser))
4276               {
4277                 bool non_constant_p;
4278                 /* Parse the initializer-list.  */
4279                 initializer_list
4280                   = cp_parser_initializer_list (parser, &non_constant_p);
4281                 /* Allow a trailing `,'.  */
4282                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4283                   cp_lexer_consume_token (parser->lexer);
4284                 /* Look for the final `}'.  */
4285                 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
4286               }
4287             /* If that worked, we're definitely looking at a
4288                compound-literal expression.  */
4289             if (cp_parser_parse_definitely (parser))
4290               {
4291                 /* Warn the user that a compound literal is not
4292                    allowed in standard C++.  */
4293                 if (pedantic)
4294                   pedwarn ("ISO C++ forbids compound-literals");
4295                 /* For simplicitly, we disallow compound literals in
4296                    constant-expressions for simpliicitly.  We could
4297                    allow compound literals of integer type, whose
4298                    initializer was a constant, in constant
4299                    expressions.  Permitting that usage, as a further
4300                    extension, would not change the meaning of any
4301                    currently accepted programs.  (Of course, as
4302                    compound literals are not part of ISO C++, the
4303                    standard has nothing to say.)  */
4304                 if (cp_parser_non_integral_constant_expression 
4305                     (parser, "non-constant compound literals"))
4306                   {
4307                     postfix_expression = error_mark_node;
4308                     break;
4309                   }
4310                 /* Form the representation of the compound-literal.  */
4311                 postfix_expression
4312                   = finish_compound_literal (type, initializer_list);
4313                 break;
4314               }
4315           }
4316
4317         /* It must be a primary-expression.  */
4318         postfix_expression
4319           = cp_parser_primary_expression (parser, address_p, cast_p,
4320                                           /*template_arg_p=*/false,
4321                                           &idk);
4322       }
4323       break;
4324     }
4325
4326   /* Keep looping until the postfix-expression is complete.  */
4327   while (true)
4328     {
4329       if (idk == CP_ID_KIND_UNQUALIFIED
4330           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4331           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4332         /* It is not a Koenig lookup function call.  */
4333         postfix_expression
4334           = unqualified_name_lookup_error (postfix_expression);
4335
4336       /* Peek at the next token.  */
4337       token = cp_lexer_peek_token (parser->lexer);
4338
4339       switch (token->type)
4340         {
4341         case CPP_OPEN_SQUARE:
4342           postfix_expression
4343             = cp_parser_postfix_open_square_expression (parser,
4344                                                         postfix_expression,
4345                                                         false);
4346           idk = CP_ID_KIND_NONE;
4347           break;
4348
4349         case CPP_OPEN_PAREN:
4350           /* postfix-expression ( expression-list [opt] ) */
4351           {
4352             bool koenig_p;
4353             bool is_builtin_constant_p;
4354             bool saved_integral_constant_expression_p = false;
4355             bool saved_non_integral_constant_expression_p = false;
4356             tree args;
4357
4358             is_builtin_constant_p
4359               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4360             if (is_builtin_constant_p)
4361               {
4362                 /* The whole point of __builtin_constant_p is to allow
4363                    non-constant expressions to appear as arguments.  */
4364                 saved_integral_constant_expression_p
4365                   = parser->integral_constant_expression_p;
4366                 saved_non_integral_constant_expression_p
4367                   = parser->non_integral_constant_expression_p;
4368                 parser->integral_constant_expression_p = false;
4369               }
4370             args = (cp_parser_parenthesized_expression_list
4371                     (parser, /*is_attribute_list=*/false,
4372                      /*cast_p=*/false,
4373                      /*non_constant_p=*/NULL));
4374             if (is_builtin_constant_p)
4375               {
4376                 parser->integral_constant_expression_p
4377                   = saved_integral_constant_expression_p;
4378                 parser->non_integral_constant_expression_p
4379                   = saved_non_integral_constant_expression_p;
4380               }
4381
4382             if (args == error_mark_node)
4383               {
4384                 postfix_expression = error_mark_node;
4385                 break;
4386               }
4387
4388             /* Function calls are not permitted in
4389                constant-expressions.  */
4390             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4391                 && cp_parser_non_integral_constant_expression (parser,
4392                                                                "a function call"))
4393               {
4394                 postfix_expression = error_mark_node;
4395                 break;
4396               }
4397
4398             koenig_p = false;
4399             if (idk == CP_ID_KIND_UNQUALIFIED)
4400               {
4401                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4402                   {
4403                     if (args)
4404                       {
4405                         koenig_p = true;
4406                         postfix_expression
4407                           = perform_koenig_lookup (postfix_expression, args);
4408                       }
4409                     else
4410                       postfix_expression
4411                         = unqualified_fn_lookup_error (postfix_expression);
4412                   }
4413                 /* We do not perform argument-dependent lookup if
4414                    normal lookup finds a non-function, in accordance
4415                    with the expected resolution of DR 218.  */
4416                 else if (args && is_overloaded_fn (postfix_expression))
4417                   {
4418                     tree fn = get_first_fn (postfix_expression);
4419
4420                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4421                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4422
4423                     /* Only do argument dependent lookup if regular
4424                        lookup does not find a set of member functions.
4425                        [basic.lookup.koenig]/2a  */
4426                     if (!DECL_FUNCTION_MEMBER_P (fn))
4427                       {
4428                         koenig_p = true;
4429                         postfix_expression
4430                           = perform_koenig_lookup (postfix_expression, args);
4431                       }
4432                   }
4433               }
4434
4435             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4436               {
4437                 tree instance = TREE_OPERAND (postfix_expression, 0);
4438                 tree fn = TREE_OPERAND (postfix_expression, 1);
4439
4440                 if (processing_template_decl
4441                     && (type_dependent_expression_p (instance)
4442                         || (!BASELINK_P (fn)
4443                             && TREE_CODE (fn) != FIELD_DECL)
4444                         || type_dependent_expression_p (fn)
4445                         || any_type_dependent_arguments_p (args)))
4446                   {
4447                     postfix_expression
4448                       = build_min_nt (CALL_EXPR, postfix_expression,
4449                                       args, NULL_TREE);
4450                     break;
4451                   }
4452
4453                 if (BASELINK_P (fn))
4454                   postfix_expression
4455                     = (build_new_method_call
4456                        (instance, fn, args, NULL_TREE,
4457                         (idk == CP_ID_KIND_QUALIFIED
4458                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4459                         /*fn_p=*/NULL));
4460                 else
4461                   postfix_expression
4462                     = finish_call_expr (postfix_expression, args,
4463                                         /*disallow_virtual=*/false,
4464                                         /*koenig_p=*/false);
4465               }
4466             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4467                      || TREE_CODE (postfix_expression) == MEMBER_REF
4468                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4469               postfix_expression = (build_offset_ref_call_from_tree
4470                                     (postfix_expression, args));
4471             else if (idk == CP_ID_KIND_QUALIFIED)
4472               /* A call to a static class member, or a namespace-scope
4473                  function.  */
4474               postfix_expression
4475                 = finish_call_expr (postfix_expression, args,
4476                                     /*disallow_virtual=*/true,
4477                                     koenig_p);
4478             else
4479               /* All other function calls.  */
4480               postfix_expression
4481                 = finish_call_expr (postfix_expression, args,
4482                                     /*disallow_virtual=*/false,
4483                                     koenig_p);
4484
4485             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4486             idk = CP_ID_KIND_NONE;
4487           }
4488           break;
4489
4490         case CPP_DOT:
4491         case CPP_DEREF:
4492           /* postfix-expression . template [opt] id-expression
4493              postfix-expression . pseudo-destructor-name
4494              postfix-expression -> template [opt] id-expression
4495              postfix-expression -> pseudo-destructor-name */
4496
4497           /* Consume the `.' or `->' operator.  */
4498           cp_lexer_consume_token (parser->lexer);
4499
4500           postfix_expression
4501             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4502                                                       postfix_expression,
4503                                                       false, &idk);
4504           break;
4505
4506         case CPP_PLUS_PLUS:
4507           /* postfix-expression ++  */
4508           /* Consume the `++' token.  */
4509           cp_lexer_consume_token (parser->lexer);
4510           /* Generate a representation for the complete expression.  */
4511           postfix_expression
4512             = finish_increment_expr (postfix_expression,
4513                                      POSTINCREMENT_EXPR);
4514           /* Increments may not appear in constant-expressions.  */
4515           if (cp_parser_non_integral_constant_expression (parser,
4516                                                           "an increment"))
4517             postfix_expression = error_mark_node;
4518           idk = CP_ID_KIND_NONE;
4519           break;
4520
4521         case CPP_MINUS_MINUS:
4522           /* postfix-expression -- */
4523           /* Consume the `--' token.  */
4524           cp_lexer_consume_token (parser->lexer);
4525           /* Generate a representation for the complete expression.  */
4526           postfix_expression
4527             = finish_increment_expr (postfix_expression,
4528                                      POSTDECREMENT_EXPR);
4529           /* Decrements may not appear in constant-expressions.  */
4530           if (cp_parser_non_integral_constant_expression (parser,
4531                                                           "a decrement"))
4532             postfix_expression = error_mark_node;
4533           idk = CP_ID_KIND_NONE;
4534           break;
4535
4536         default:
4537           return postfix_expression;
4538         }
4539     }
4540
4541   /* We should never get here.  */
4542   gcc_unreachable ();
4543   return error_mark_node;
4544 }
4545
4546 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4547    by cp_parser_builtin_offsetof.  We're looking for
4548
4549      postfix-expression [ expression ]
4550
4551    FOR_OFFSETOF is set if we're being called in that context, which
4552    changes how we deal with integer constant expressions.  */
4553
4554 static tree
4555 cp_parser_postfix_open_square_expression (cp_parser *parser,
4556                                           tree postfix_expression,
4557                                           bool for_offsetof)
4558 {
4559   tree index;
4560
4561   /* Consume the `[' token.  */
4562   cp_lexer_consume_token (parser->lexer);
4563
4564   /* Parse the index expression.  */
4565   /* ??? For offsetof, there is a question of what to allow here.  If
4566      offsetof is not being used in an integral constant expression context,
4567      then we *could* get the right answer by computing the value at runtime.
4568      If we are in an integral constant expression context, then we might
4569      could accept any constant expression; hard to say without analysis.
4570      Rather than open the barn door too wide right away, allow only integer
4571      constant expressions here.  */
4572   if (for_offsetof)
4573     index = cp_parser_constant_expression (parser, false, NULL);
4574   else
4575     index = cp_parser_expression (parser, /*cast_p=*/false);
4576
4577   /* Look for the closing `]'.  */
4578   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4579
4580   /* Build the ARRAY_REF.  */
4581   postfix_expression = grok_array_decl (postfix_expression, index);
4582
4583   /* When not doing offsetof, array references are not permitted in
4584      constant-expressions.  */
4585   if (!for_offsetof
4586       && (cp_parser_non_integral_constant_expression
4587           (parser, "an array reference")))
4588     postfix_expression = error_mark_node;
4589
4590   return postfix_expression;
4591 }
4592
4593 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4594    by cp_parser_builtin_offsetof.  We're looking for
4595
4596      postfix-expression . template [opt] id-expression
4597      postfix-expression . pseudo-destructor-name
4598      postfix-expression -> template [opt] id-expression
4599      postfix-expression -> pseudo-destructor-name
4600
4601    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4602    limits what of the above we'll actually accept, but nevermind.
4603    TOKEN_TYPE is the "." or "->" token, which will already have been
4604    removed from the stream.  */
4605
4606 static tree
4607 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4608                                         enum cpp_ttype token_type,
4609                                         tree postfix_expression,
4610                                         bool for_offsetof, cp_id_kind *idk)
4611 {
4612   tree name;
4613   bool dependent_p;
4614   bool pseudo_destructor_p;
4615   tree scope = NULL_TREE;
4616
4617   /* If this is a `->' operator, dereference the pointer.  */
4618   if (token_type == CPP_DEREF)
4619     postfix_expression = build_x_arrow (postfix_expression);
4620   /* Check to see whether or not the expression is type-dependent.  */
4621   dependent_p = type_dependent_expression_p (postfix_expression);
4622   /* The identifier following the `->' or `.' is not qualified.  */
4623   parser->scope = NULL_TREE;
4624   parser->qualifying_scope = NULL_TREE;
4625   parser->object_scope = NULL_TREE;
4626   *idk = CP_ID_KIND_NONE;
4627   /* Enter the scope corresponding to the type of the object
4628      given by the POSTFIX_EXPRESSION.  */
4629   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4630     {
4631       scope = TREE_TYPE (postfix_expression);
4632       /* According to the standard, no expression should ever have
4633          reference type.  Unfortunately, we do not currently match
4634          the standard in this respect in that our internal representation
4635          of an expression may have reference type even when the standard
4636          says it does not.  Therefore, we have to manually obtain the
4637          underlying type here.  */
4638       scope = non_reference (scope);
4639       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4640       if (scope == unknown_type_node)
4641         {
4642           error ("%qE does not have class type", postfix_expression);
4643           scope = NULL_TREE;
4644         }
4645       else
4646         scope = complete_type_or_else (scope, NULL_TREE);
4647       /* Let the name lookup machinery know that we are processing a
4648          class member access expression.  */
4649       parser->context->object_type = scope;
4650       /* If something went wrong, we want to be able to discern that case,
4651          as opposed to the case where there was no SCOPE due to the type
4652          of expression being dependent.  */
4653       if (!scope)
4654         scope = error_mark_node;
4655       /* If the SCOPE was erroneous, make the various semantic analysis
4656          functions exit quickly -- and without issuing additional error
4657          messages.  */
4658       if (scope == error_mark_node)
4659         postfix_expression = error_mark_node;
4660     }
4661
4662   /* Assume this expression is not a pseudo-destructor access.  */
4663   pseudo_destructor_p = false;
4664
4665   /* If the SCOPE is a scalar type, then, if this is a valid program,
4666      we must be looking at a pseudo-destructor-name.  */
4667   if (scope && SCALAR_TYPE_P (scope))
4668     {
4669       tree s;
4670       tree type;
4671
4672       cp_parser_parse_tentatively (parser);
4673       /* Parse the pseudo-destructor-name.  */
4674       s = NULL_TREE;
4675       cp_parser_pseudo_destructor_name (parser, &s, &type);
4676       if (cp_parser_parse_definitely (parser))
4677         {
4678           pseudo_destructor_p = true;
4679           postfix_expression
4680             = finish_pseudo_destructor_expr (postfix_expression,
4681                                              s, TREE_TYPE (type));
4682         }
4683     }
4684
4685   if (!pseudo_destructor_p)
4686     {
4687       /* If the SCOPE is not a scalar type, we are looking at an
4688          ordinary class member access expression, rather than a
4689          pseudo-destructor-name.  */
4690       bool template_p;
4691       /* Parse the id-expression.  */
4692       name = (cp_parser_id_expression
4693               (parser,
4694                cp_parser_optional_template_keyword (parser),
4695                /*check_dependency_p=*/true,
4696                &template_p,
4697                /*declarator_p=*/false,
4698                /*optional_p=*/false));
4699       /* In general, build a SCOPE_REF if the member name is qualified.
4700          However, if the name was not dependent and has already been
4701          resolved; there is no need to build the SCOPE_REF.  For example;
4702
4703              struct X { void f(); };
4704              template <typename T> void f(T* t) { t->X::f(); }
4705
4706          Even though "t" is dependent, "X::f" is not and has been resolved
4707          to a BASELINK; there is no need to include scope information.  */
4708
4709       /* But we do need to remember that there was an explicit scope for
4710          virtual function calls.  */
4711       if (parser->scope)
4712         *idk = CP_ID_KIND_QUALIFIED;
4713
4714       /* If the name is a template-id that names a type, we will get a
4715          TYPE_DECL here.  That is invalid code.  */
4716       if (TREE_CODE (name) == TYPE_DECL)
4717         {
4718           error ("invalid use of %qD", name);
4719           postfix_expression = error_mark_node;
4720         }
4721       else
4722         {
4723           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4724             {
4725               name = build_qualified_name (/*type=*/NULL_TREE,
4726                                            parser->scope,
4727                                            name,
4728                                            template_p);
4729               parser->scope = NULL_TREE;
4730               parser->qualifying_scope = NULL_TREE;
4731               parser->object_scope = NULL_TREE;
4732             }
4733           if (scope && name && BASELINK_P (name))
4734             adjust_result_of_qualified_name_lookup
4735               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
4736           postfix_expression
4737             = finish_class_member_access_expr (postfix_expression, name,
4738                                                template_p);
4739         }
4740     }
4741
4742   /* We no longer need to look up names in the scope of the object on
4743      the left-hand side of the `.' or `->' operator.  */
4744   parser->context->object_type = NULL_TREE;
4745
4746   /* Outside of offsetof, these operators may not appear in
4747      constant-expressions.  */
4748   if (!for_offsetof
4749       && (cp_parser_non_integral_constant_expression
4750           (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4751     postfix_expression = error_mark_node;
4752
4753   return postfix_expression;
4754 }
4755
4756 /* Parse a parenthesized expression-list.
4757
4758    expression-list:
4759      assignment-expression
4760      expression-list, assignment-expression
4761
4762    attribute-list:
4763      expression-list
4764      identifier
4765      identifier, expression-list
4766
4767    CAST_P is true if this expression is the target of a cast.
4768
4769    Returns a TREE_LIST.  The TREE_VALUE of each node is a
4770    representation of an assignment-expression.  Note that a TREE_LIST
4771    is returned even if there is only a single expression in the list.
4772    error_mark_node is returned if the ( and or ) are
4773    missing. NULL_TREE is returned on no expressions. The parentheses
4774    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4775    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4776    indicates whether or not all of the expressions in the list were
4777    constant.  */
4778
4779 static tree
4780 cp_parser_parenthesized_expression_list (cp_parser* parser,
4781                                          bool is_attribute_list,
4782                                          bool cast_p,
4783                                          bool *non_constant_p)
4784 {
4785   tree expression_list = NULL_TREE;
4786   bool fold_expr_p = is_attribute_list;
4787   tree identifier = NULL_TREE;
4788
4789   /* Assume all the expressions will be constant.  */
4790   if (non_constant_p)
4791     *non_constant_p = false;
4792
4793   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4794     return error_mark_node;
4795
4796   /* Consume expressions until there are no more.  */
4797   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4798     while (true)
4799       {
4800         tree expr;
4801
4802         /* At the beginning of attribute lists, check to see if the
4803            next token is an identifier.  */
4804         if (is_attribute_list
4805             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4806           {
4807             cp_token *token;
4808
4809             /* Consume the identifier.  */
4810             token = cp_lexer_consume_token (parser->lexer);
4811             /* Save the identifier.  */
4812             identifier = token->u.value;
4813           }
4814         else
4815           {
4816             /* Parse the next assignment-expression.  */
4817             if (non_constant_p)
4818               {
4819                 bool expr_non_constant_p;
4820                 expr = (cp_parser_constant_expression
4821                         (parser, /*allow_non_constant_p=*/true,
4822                          &expr_non_constant_p));
4823                 if (expr_non_constant_p)
4824                   *non_constant_p = true;
4825               }
4826             else
4827               expr = cp_parser_assignment_expression (parser, cast_p);
4828
4829             if (fold_expr_p)
4830               expr = fold_non_dependent_expr (expr);
4831
4832              /* Add it to the list.  We add error_mark_node
4833                 expressions to the list, so that we can still tell if
4834                 the correct form for a parenthesized expression-list
4835                 is found. That gives better errors.  */
4836             expression_list = tree_cons (NULL_TREE, expr, expression_list);
4837
4838             if (expr == error_mark_node)
4839               goto skip_comma;
4840           }
4841
4842         /* After the first item, attribute lists look the same as
4843            expression lists.  */
4844         is_attribute_list = false;
4845
4846       get_comma:;
4847         /* If the next token isn't a `,', then we are done.  */
4848         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4849           break;
4850
4851         /* Otherwise, consume the `,' and keep going.  */
4852         cp_lexer_consume_token (parser->lexer);
4853       }
4854
4855   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
4856     {
4857       int ending;
4858
4859     skip_comma:;
4860       /* We try and resync to an unnested comma, as that will give the
4861          user better diagnostics.  */
4862       ending = cp_parser_skip_to_closing_parenthesis (parser,
4863                                                       /*recovering=*/true,
4864                                                       /*or_comma=*/true,
4865                                                       /*consume_paren=*/true);
4866       if (ending < 0)
4867         goto get_comma;
4868       if (!ending)
4869         return error_mark_node;
4870     }
4871
4872   /* We built up the list in reverse order so we must reverse it now.  */
4873   expression_list = nreverse (expression_list);
4874   if (identifier)
4875     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
4876
4877   return expression_list;
4878 }
4879
4880 /* Parse a pseudo-destructor-name.
4881
4882    pseudo-destructor-name:
4883      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
4884      :: [opt] nested-name-specifier template template-id :: ~ type-name
4885      :: [opt] nested-name-specifier [opt] ~ type-name
4886
4887    If either of the first two productions is used, sets *SCOPE to the
4888    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
4889    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
4890    or ERROR_MARK_NODE if the parse fails.  */
4891
4892 static void
4893 cp_parser_pseudo_destructor_name (cp_parser* parser,
4894                                   tree* scope,
4895                                   tree* type)
4896 {
4897   bool nested_name_specifier_p;
4898
4899   /* Assume that things will not work out.  */
4900   *type = error_mark_node;
4901
4902   /* Look for the optional `::' operator.  */
4903   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
4904   /* Look for the optional nested-name-specifier.  */
4905   nested_name_specifier_p
4906     = (cp_parser_nested_name_specifier_opt (parser,
4907                                             /*typename_keyword_p=*/false,
4908                                             /*check_dependency_p=*/true,
4909                                             /*type_p=*/false,
4910                                             /*is_declaration=*/true)
4911        != NULL_TREE);
4912   /* Now, if we saw a nested-name-specifier, we might be doing the
4913      second production.  */
4914   if (nested_name_specifier_p
4915       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
4916     {
4917       /* Consume the `template' keyword.  */
4918       cp_lexer_consume_token (parser->lexer);
4919       /* Parse the template-id.  */
4920       cp_parser_template_id (parser,
4921                              /*template_keyword_p=*/true,
4922                              /*check_dependency_p=*/false,
4923                              /*is_declaration=*/true);
4924       /* Look for the `::' token.  */
4925       cp_parser_require (parser, CPP_SCOPE, "`::'");
4926     }
4927   /* If the next token is not a `~', then there might be some
4928      additional qualification.  */
4929   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
4930     {
4931       /* Look for the type-name.  */
4932       *scope = TREE_TYPE (cp_parser_type_name (parser));
4933
4934       if (*scope == error_mark_node)
4935         return;
4936
4937       /* If we don't have ::~, then something has gone wrong.  Since
4938          the only caller of this function is looking for something
4939          after `.' or `->' after a scalar type, most likely the
4940          program is trying to get a member of a non-aggregate
4941          type.  */
4942       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
4943           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
4944         {
4945           cp_parser_error (parser, "request for member of non-aggregate type");
4946           return;
4947         }
4948
4949       /* Look for the `::' token.  */
4950       cp_parser_require (parser, CPP_SCOPE, "`::'");
4951     }
4952   else
4953     *scope = NULL_TREE;
4954
4955   /* Look for the `~'.  */
4956   cp_parser_require (parser, CPP_COMPL, "`~'");
4957   /* Look for the type-name again.  We are not responsible for
4958      checking that it matches the first type-name.  */
4959   *type = cp_parser_type_name (parser);
4960 }
4961
4962 /* Parse a unary-expression.
4963
4964    unary-expression:
4965      postfix-expression
4966      ++ cast-expression
4967      -- cast-expression
4968      unary-operator cast-expression
4969      sizeof unary-expression
4970      sizeof ( type-id )
4971      new-expression
4972      delete-expression
4973
4974    GNU Extensions:
4975
4976    unary-expression:
4977      __extension__ cast-expression
4978      __alignof__ unary-expression
4979      __alignof__ ( type-id )
4980      __real__ cast-expression
4981      __imag__ cast-expression
4982      && identifier
4983
4984    ADDRESS_P is true iff the unary-expression is appearing as the
4985    operand of the `&' operator.   CAST_P is true if this expression is
4986    the target of a cast.
4987
4988    Returns a representation of the expression.  */
4989
4990 static tree
4991 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
4992 {
4993   cp_token *token;
4994   enum tree_code unary_operator;
4995
4996   /* Peek at the next token.  */
4997   token = cp_lexer_peek_token (parser->lexer);
4998   /* Some keywords give away the kind of expression.  */
4999   if (token->type == CPP_KEYWORD)
5000     {
5001       enum rid keyword = token->keyword;
5002
5003       switch (keyword)
5004         {
5005         case RID_ALIGNOF:
5006         case RID_SIZEOF:
5007           {
5008             tree operand;
5009             enum tree_code op;
5010
5011             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5012             /* Consume the token.  */
5013             cp_lexer_consume_token (parser->lexer);
5014             /* Parse the operand.  */
5015             operand = cp_parser_sizeof_operand (parser, keyword);
5016
5017             if (TYPE_P (operand))
5018               return cxx_sizeof_or_alignof_type (operand, op, true);
5019             else
5020               return cxx_sizeof_or_alignof_expr (operand, op);
5021           }
5022
5023         case RID_NEW:
5024           return cp_parser_new_expression (parser);
5025
5026         case RID_DELETE:
5027           return cp_parser_delete_expression (parser);
5028
5029         case RID_EXTENSION:
5030           {
5031             /* The saved value of the PEDANTIC flag.  */
5032             int saved_pedantic;
5033             tree expr;
5034
5035             /* Save away the PEDANTIC flag.  */
5036             cp_parser_extension_opt (parser, &saved_pedantic);
5037             /* Parse the cast-expression.  */
5038             expr = cp_parser_simple_cast_expression (parser);
5039             /* Restore the PEDANTIC flag.  */
5040             pedantic = saved_pedantic;
5041
5042             return expr;
5043           }
5044
5045         case RID_REALPART:
5046         case RID_IMAGPART:
5047           {
5048             tree expression;
5049
5050             /* Consume the `__real__' or `__imag__' token.  */
5051             cp_lexer_consume_token (parser->lexer);
5052             /* Parse the cast-expression.  */
5053             expression = cp_parser_simple_cast_expression (parser);
5054             /* Create the complete representation.  */
5055             return build_x_unary_op ((keyword == RID_REALPART
5056                                       ? REALPART_EXPR : IMAGPART_EXPR),
5057                                      expression);
5058           }
5059           break;
5060
5061         default:
5062           break;
5063         }
5064     }
5065
5066   /* Look for the `:: new' and `:: delete', which also signal the
5067      beginning of a new-expression, or delete-expression,
5068      respectively.  If the next token is `::', then it might be one of
5069      these.  */
5070   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5071     {
5072       enum rid keyword;
5073
5074       /* See if the token after the `::' is one of the keywords in
5075          which we're interested.  */
5076       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5077       /* If it's `new', we have a new-expression.  */
5078       if (keyword == RID_NEW)
5079         return cp_parser_new_expression (parser);
5080       /* Similarly, for `delete'.  */
5081       else if (keyword == RID_DELETE)
5082         return cp_parser_delete_expression (parser);
5083     }
5084
5085   /* Look for a unary operator.  */
5086   unary_operator = cp_parser_unary_operator (token);
5087   /* The `++' and `--' operators can be handled similarly, even though
5088      they are not technically unary-operators in the grammar.  */
5089   if (unary_operator == ERROR_MARK)
5090     {
5091       if (token->type == CPP_PLUS_PLUS)
5092         unary_operator = PREINCREMENT_EXPR;
5093       else if (token->type == CPP_MINUS_MINUS)
5094         unary_operator = PREDECREMENT_EXPR;
5095       /* Handle the GNU address-of-label extension.  */
5096       else if (cp_parser_allow_gnu_extensions_p (parser)
5097                && token->type == CPP_AND_AND)
5098         {
5099           tree identifier;
5100
5101           /* Consume the '&&' token.  */
5102           cp_lexer_consume_token (parser->lexer);
5103           /* Look for the identifier.  */
5104           identifier = cp_parser_identifier (parser);
5105           /* Create an expression representing the address.  */
5106           return finish_label_address_expr (identifier);
5107         }
5108     }
5109   if (unary_operator != ERROR_MARK)
5110     {
5111       tree cast_expression;
5112       tree expression = error_mark_node;
5113       const char *non_constant_p = NULL;
5114
5115       /* Consume the operator token.  */
5116       token = cp_lexer_consume_token (parser->lexer);
5117       /* Parse the cast-expression.  */
5118       cast_expression
5119         = cp_parser_cast_expression (parser,
5120                                      unary_operator == ADDR_EXPR,
5121                                      /*cast_p=*/false);
5122       /* Now, build an appropriate representation.  */
5123       switch (unary_operator)
5124         {
5125         case INDIRECT_REF:
5126           non_constant_p = "`*'";
5127           expression = build_x_indirect_ref (cast_expression, "unary *");
5128           break;
5129
5130         case ADDR_EXPR:
5131           non_constant_p = "`&'";
5132           /* Fall through.  */
5133         case BIT_NOT_EXPR:
5134           expression = build_x_unary_op (unary_operator, cast_expression);
5135           break;
5136
5137         case PREINCREMENT_EXPR:
5138         case PREDECREMENT_EXPR:
5139           non_constant_p = (unary_operator == PREINCREMENT_EXPR
5140                             ? "`++'" : "`--'");
5141           /* Fall through.  */
5142         case UNARY_PLUS_EXPR:
5143         case NEGATE_EXPR:
5144         case TRUTH_NOT_EXPR:
5145           expression = finish_unary_op_expr (unary_operator, cast_expression);
5146           break;
5147
5148         default:
5149           gcc_unreachable ();
5150         }
5151
5152       if (non_constant_p
5153           && cp_parser_non_integral_constant_expression (parser,
5154                                                          non_constant_p))
5155         expression = error_mark_node;
5156
5157       return expression;
5158     }
5159
5160   return cp_parser_postfix_expression (parser, address_p, cast_p);
5161 }
5162
5163 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5164    unary-operator, the corresponding tree code is returned.  */
5165
5166 static enum tree_code
5167 cp_parser_unary_operator (cp_token* token)
5168 {
5169   switch (token->type)
5170     {
5171     case CPP_MULT:
5172       return INDIRECT_REF;
5173
5174     case CPP_AND:
5175       return ADDR_EXPR;
5176
5177     case CPP_PLUS:
5178       return UNARY_PLUS_EXPR;
5179
5180     case CPP_MINUS:
5181       return NEGATE_EXPR;
5182
5183     case CPP_NOT:
5184       return TRUTH_NOT_EXPR;
5185
5186     case CPP_COMPL:
5187       return BIT_NOT_EXPR;
5188
5189     default:
5190       return ERROR_MARK;
5191     }
5192 }
5193
5194 /* Parse a new-expression.
5195
5196    new-expression:
5197      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5198      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5199
5200    Returns a representation of the expression.  */
5201
5202 static tree
5203 cp_parser_new_expression (cp_parser* parser)
5204 {
5205   bool global_scope_p;
5206   tree placement;
5207   tree type;
5208   tree initializer;
5209   tree nelts;
5210
5211   /* Look for the optional `::' operator.  */
5212   global_scope_p
5213     = (cp_parser_global_scope_opt (parser,
5214                                    /*current_scope_valid_p=*/false)
5215        != NULL_TREE);
5216   /* Look for the `new' operator.  */
5217   cp_parser_require_keyword (parser, RID_NEW, "`new'");
5218   /* There's no easy way to tell a new-placement from the
5219      `( type-id )' construct.  */
5220   cp_parser_parse_tentatively (parser);
5221   /* Look for a new-placement.  */
5222   placement = cp_parser_new_placement (parser);
5223   /* If that didn't work out, there's no new-placement.  */
5224   if (!cp_parser_parse_definitely (parser))
5225     placement = NULL_TREE;
5226
5227   /* If the next token is a `(', then we have a parenthesized
5228      type-id.  */
5229   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5230     {
5231       /* Consume the `('.  */
5232       cp_lexer_consume_token (parser->lexer);
5233       /* Parse the type-id.  */
5234       type = cp_parser_type_id (parser);
5235       /* Look for the closing `)'.  */
5236       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5237       /* There should not be a direct-new-declarator in this production,
5238          but GCC used to allowed this, so we check and emit a sensible error
5239          message for this case.  */
5240       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5241         {
5242           error ("array bound forbidden after parenthesized type-id");
5243           inform ("try removing the parentheses around the type-id");
5244           cp_parser_direct_new_declarator (parser);
5245         }
5246       nelts = NULL_TREE;
5247     }
5248   /* Otherwise, there must be a new-type-id.  */
5249   else
5250     type = cp_parser_new_type_id (parser, &nelts);
5251
5252   /* If the next token is a `(', then we have a new-initializer.  */
5253   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5254     initializer = cp_parser_new_initializer (parser);
5255   else
5256     initializer = NULL_TREE;
5257
5258   /* A new-expression may not appear in an integral constant
5259      expression.  */
5260   if (cp_parser_non_integral_constant_expression (parser, "`new'"))
5261     return error_mark_node;
5262
5263   /* Create a representation of the new-expression.  */
5264   return build_new (placement, type, nelts, initializer, global_scope_p);
5265 }
5266
5267 /* Parse a new-placement.
5268
5269    new-placement:
5270      ( expression-list )
5271
5272    Returns the same representation as for an expression-list.  */
5273
5274 static tree
5275 cp_parser_new_placement (cp_parser* parser)
5276 {
5277   tree expression_list;
5278
5279   /* Parse the expression-list.  */
5280   expression_list = (cp_parser_parenthesized_expression_list
5281                      (parser, false, /*cast_p=*/false,
5282                       /*non_constant_p=*/NULL));
5283
5284   return expression_list;
5285 }
5286
5287 /* Parse a new-type-id.
5288
5289    new-type-id:
5290      type-specifier-seq new-declarator [opt]
5291
5292    Returns the TYPE allocated.  If the new-type-id indicates an array
5293    type, *NELTS is set to the number of elements in the last array
5294    bound; the TYPE will not include the last array bound.  */
5295
5296 static tree
5297 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5298 {
5299   cp_decl_specifier_seq type_specifier_seq;
5300   cp_declarator *new_declarator;
5301   cp_declarator *declarator;
5302   cp_declarator *outer_declarator;
5303   const char *saved_message;
5304   tree type;
5305
5306   /* The type-specifier sequence must not contain type definitions.
5307      (It cannot contain declarations of new types either, but if they
5308      are not definitions we will catch that because they are not
5309      complete.)  */
5310   saved_message = parser->type_definition_forbidden_message;
5311   parser->type_definition_forbidden_message
5312     = "types may not be defined in a new-type-id";
5313   /* Parse the type-specifier-seq.  */
5314   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5315                                 &type_specifier_seq);
5316   /* Restore the old message.  */
5317   parser->type_definition_forbidden_message = saved_message;
5318   /* Parse the new-declarator.  */
5319   new_declarator = cp_parser_new_declarator_opt (parser);
5320
5321   /* Determine the number of elements in the last array dimension, if
5322      any.  */
5323   *nelts = NULL_TREE;
5324   /* Skip down to the last array dimension.  */
5325   declarator = new_declarator;
5326   outer_declarator = NULL;
5327   while (declarator && (declarator->kind == cdk_pointer
5328                         || declarator->kind == cdk_ptrmem))
5329     {
5330       outer_declarator = declarator;
5331       declarator = declarator->declarator;
5332     }
5333   while (declarator
5334          && declarator->kind == cdk_array
5335          && declarator->declarator
5336          && declarator->declarator->kind == cdk_array)
5337     {
5338       outer_declarator = declarator;
5339       declarator = declarator->declarator;
5340     }
5341
5342   if (declarator && declarator->kind == cdk_array)
5343     {
5344       *nelts = declarator->u.array.bounds;
5345       if (*nelts == error_mark_node)
5346         *nelts = integer_one_node;
5347
5348       if (outer_declarator)
5349         outer_declarator->declarator = declarator->declarator;
5350       else
5351         new_declarator = NULL;
5352     }
5353
5354   type = groktypename (&type_specifier_seq, new_declarator);
5355   if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
5356     {
5357       *nelts = array_type_nelts_top (type);
5358       type = TREE_TYPE (type);
5359     }
5360   return type;
5361 }
5362
5363 /* Parse an (optional) new-declarator.
5364
5365    new-declarator:
5366      ptr-operator new-declarator [opt]
5367      direct-new-declarator
5368
5369    Returns the declarator.  */
5370
5371 static cp_declarator *
5372 cp_parser_new_declarator_opt (cp_parser* parser)
5373 {
5374   enum tree_code code;
5375   tree type;
5376   cp_cv_quals cv_quals;
5377
5378   /* We don't know if there's a ptr-operator next, or not.  */
5379   cp_parser_parse_tentatively (parser);
5380   /* Look for a ptr-operator.  */
5381   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5382   /* If that worked, look for more new-declarators.  */
5383   if (cp_parser_parse_definitely (parser))
5384     {
5385       cp_declarator *declarator;
5386
5387       /* Parse another optional declarator.  */
5388       declarator = cp_parser_new_declarator_opt (parser);
5389
5390       /* Create the representation of the declarator.  */
5391       if (type)
5392         declarator = make_ptrmem_declarator (cv_quals, type, declarator);
5393       else if (code == INDIRECT_REF)
5394         declarator = make_pointer_declarator (cv_quals, declarator);
5395       else
5396         declarator = make_reference_declarator (cv_quals, declarator);
5397
5398       return declarator;
5399     }
5400
5401   /* If the next token is a `[', there is a direct-new-declarator.  */
5402   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5403     return cp_parser_direct_new_declarator (parser);
5404
5405   return NULL;
5406 }
5407
5408 /* Parse a direct-new-declarator.
5409
5410    direct-new-declarator:
5411      [ expression ]
5412      direct-new-declarator [constant-expression]
5413
5414    */
5415
5416 static cp_declarator *
5417 cp_parser_direct_new_declarator (cp_parser* parser)
5418 {
5419   cp_declarator *declarator = NULL;
5420
5421   while (true)
5422     {
5423       tree expression;
5424
5425       /* Look for the opening `['.  */
5426       cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
5427       /* The first expression is not required to be constant.  */
5428       if (!declarator)
5429         {
5430           expression = cp_parser_expression (parser, /*cast_p=*/false);
5431           /* The standard requires that the expression have integral
5432              type.  DR 74 adds enumeration types.  We believe that the
5433              real intent is that these expressions be handled like the
5434              expression in a `switch' condition, which also allows
5435              classes with a single conversion to integral or
5436              enumeration type.  */
5437           if (!processing_template_decl)
5438             {
5439               expression
5440                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5441                                               expression,
5442                                               /*complain=*/true);
5443               if (!expression)
5444                 {
5445                   error ("expression in new-declarator must have integral "
5446                          "or enumeration type");
5447                   expression = error_mark_node;
5448                 }
5449             }
5450         }
5451       /* But all the other expressions must be.  */
5452       else
5453         expression
5454           = cp_parser_constant_expression (parser,
5455                                            /*allow_non_constant=*/false,
5456                                            NULL);
5457       /* Look for the closing `]'.  */
5458       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5459
5460       /* Add this bound to the declarator.  */
5461       declarator = make_array_declarator (declarator, expression);
5462
5463       /* If the next token is not a `[', then there are no more
5464          bounds.  */
5465       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5466         break;
5467     }
5468
5469   return declarator;
5470 }
5471
5472 /* Parse a new-initializer.
5473
5474    new-initializer:
5475      ( expression-list [opt] )
5476
5477    Returns a representation of the expression-list.  If there is no
5478    expression-list, VOID_ZERO_NODE is returned.  */
5479
5480 static tree
5481 cp_parser_new_initializer (cp_parser* parser)
5482 {
5483   tree expression_list;
5484
5485   expression_list = (cp_parser_parenthesized_expression_list
5486                      (parser, false, /*cast_p=*/false,
5487                       /*non_constant_p=*/NULL));
5488   if (!expression_list)
5489     expression_list = void_zero_node;
5490
5491   return expression_list;
5492 }
5493
5494 /* Parse a delete-expression.
5495
5496    delete-expression:
5497      :: [opt] delete cast-expression
5498      :: [opt] delete [ ] cast-expression
5499
5500    Returns a representation of the expression.  */
5501
5502 static tree
5503 cp_parser_delete_expression (cp_parser* parser)
5504 {
5505   bool global_scope_p;
5506   bool array_p;
5507   tree expression;
5508
5509   /* Look for the optional `::' operator.  */
5510   global_scope_p
5511     = (cp_parser_global_scope_opt (parser,
5512                                    /*current_scope_valid_p=*/false)
5513        != NULL_TREE);
5514   /* Look for the `delete' keyword.  */
5515   cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
5516   /* See if the array syntax is in use.  */
5517   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5518     {
5519       /* Consume the `[' token.  */
5520       cp_lexer_consume_token (parser->lexer);
5521       /* Look for the `]' token.  */
5522       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5523       /* Remember that this is the `[]' construct.  */
5524       array_p = true;
5525     }
5526   else
5527     array_p = false;
5528
5529   /* Parse the cast-expression.  */
5530   expression = cp_parser_simple_cast_expression (parser);
5531
5532   /* A delete-expression may not appear in an integral constant
5533      expression.  */
5534   if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
5535     return error_mark_node;
5536
5537   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5538 }
5539
5540 /* Parse a cast-expression.
5541
5542    cast-expression:
5543      unary-expression
5544      ( type-id ) cast-expression
5545
5546    ADDRESS_P is true iff the unary-expression is appearing as the
5547    operand of the `&' operator.   CAST_P is true if this expression is
5548    the target of a cast.
5549
5550    Returns a representation of the expression.  */
5551
5552 static tree
5553 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5554 {
5555   /* If it's a `(', then we might be looking at a cast.  */
5556   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5557     {
5558       tree type = NULL_TREE;
5559       tree expr = NULL_TREE;
5560       bool compound_literal_p;
5561       const char *saved_message;
5562
5563       /* There's no way to know yet whether or not this is a cast.
5564          For example, `(int (3))' is a unary-expression, while `(int)
5565          3' is a cast.  So, we resort to parsing tentatively.  */
5566       cp_parser_parse_tentatively (parser);
5567       /* Types may not be defined in a cast.  */
5568       saved_message = parser->type_definition_forbidden_message;
5569       parser->type_definition_forbidden_message
5570         = "types may not be defined in casts";
5571       /* Consume the `('.  */
5572       cp_lexer_consume_token (parser->lexer);
5573       /* A very tricky bit is that `(struct S) { 3 }' is a
5574          compound-literal (which we permit in C++ as an extension).
5575          But, that construct is not a cast-expression -- it is a
5576          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5577          is legal; if the compound-literal were a cast-expression,
5578          you'd need an extra set of parentheses.)  But, if we parse
5579          the type-id, and it happens to be a class-specifier, then we
5580          will commit to the parse at that point, because we cannot
5581          undo the action that is done when creating a new class.  So,
5582          then we cannot back up and do a postfix-expression.
5583
5584          Therefore, we scan ahead to the closing `)', and check to see
5585          if the token after the `)' is a `{'.  If so, we are not
5586          looking at a cast-expression.
5587
5588          Save tokens so that we can put them back.  */
5589       cp_lexer_save_tokens (parser->lexer);
5590       /* Skip tokens until the next token is a closing parenthesis.
5591          If we find the closing `)', and the next token is a `{', then
5592          we are looking at a compound-literal.  */
5593       compound_literal_p
5594         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5595                                                   /*consume_paren=*/true)
5596            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5597       /* Roll back the tokens we skipped.  */
5598       cp_lexer_rollback_tokens (parser->lexer);
5599       /* If we were looking at a compound-literal, simulate an error
5600          so that the call to cp_parser_parse_definitely below will
5601          fail.  */
5602       if (compound_literal_p)
5603         cp_parser_simulate_error (parser);
5604       else
5605         {
5606           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5607           parser->in_type_id_in_expr_p = true;
5608           /* Look for the type-id.  */
5609           type = cp_parser_type_id (parser);
5610           /* Look for the closing `)'.  */
5611           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5612           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5613         }
5614
5615       /* Restore the saved message.  */
5616       parser->type_definition_forbidden_message = saved_message;
5617
5618       /* If ok so far, parse the dependent expression. We cannot be
5619          sure it is a cast. Consider `(T ())'.  It is a parenthesized
5620          ctor of T, but looks like a cast to function returning T
5621          without a dependent expression.  */
5622       if (!cp_parser_error_occurred (parser))
5623         expr = cp_parser_cast_expression (parser,
5624                                           /*address_p=*/false,
5625                                           /*cast_p=*/true);
5626
5627       if (cp_parser_parse_definitely (parser))
5628         {
5629           /* Warn about old-style casts, if so requested.  */
5630           if (warn_old_style_cast
5631               && !in_system_header
5632               && !VOID_TYPE_P (type)
5633               && current_lang_name != lang_name_c)
5634             warning (OPT_Wold_style_cast, "use of old-style cast");
5635
5636           /* Only type conversions to integral or enumeration types
5637              can be used in constant-expressions.  */
5638           if (!cast_valid_in_integral_constant_expression_p (type)
5639               && (cp_parser_non_integral_constant_expression
5640                   (parser,
5641                    "a cast to a type other than an integral or "
5642                    "enumeration type")))
5643             return error_mark_node;
5644
5645           /* Perform the cast.  */
5646           expr = build_c_cast (type, expr);
5647           return expr;
5648         }
5649     }
5650
5651   /* If we get here, then it's not a cast, so it must be a
5652      unary-expression.  */
5653   return cp_parser_unary_expression (parser, address_p, cast_p);
5654 }
5655
5656 /* Parse a binary expression of the general form:
5657
5658    pm-expression:
5659      cast-expression
5660      pm-expression .* cast-expression
5661      pm-expression ->* cast-expression
5662
5663    multiplicative-expression:
5664      pm-expression
5665      multiplicative-expression * pm-expression
5666      multiplicative-expression / pm-expression
5667      multiplicative-expression % pm-expression
5668
5669    additive-expression:
5670      multiplicative-expression
5671      additive-expression + multiplicative-expression
5672      additive-expression - multiplicative-expression
5673
5674    shift-expression:
5675      additive-expression
5676      shift-expression << additive-expression
5677      shift-expression >> additive-expression
5678
5679    relational-expression:
5680      shift-expression
5681      relational-expression < shift-expression
5682      relational-expression > shift-expression
5683      relational-expression <= shift-expression
5684      relational-expression >= shift-expression
5685
5686   GNU Extension:
5687
5688    relational-expression:
5689      relational-expression <? shift-expression
5690      relational-expression >? shift-expression
5691
5692    equality-expression:
5693      relational-expression
5694      equality-expression == relational-expression
5695      equality-expression != relational-expression
5696
5697    and-expression:
5698      equality-expression
5699      and-expression & equality-expression
5700
5701    exclusive-or-expression:
5702      and-expression
5703      exclusive-or-expression ^ and-expression
5704
5705    inclusive-or-expression:
5706      exclusive-or-expression
5707      inclusive-or-expression | exclusive-or-expression
5708
5709    logical-and-expression:
5710      inclusive-or-expression
5711      logical-and-expression && inclusive-or-expression
5712
5713    logical-or-expression:
5714      logical-and-expression
5715      logical-or-expression || logical-and-expression
5716
5717    All these are implemented with a single function like:
5718
5719    binary-expression:
5720      simple-cast-expression
5721      binary-expression <token> binary-expression
5722
5723    CAST_P is true if this expression is the target of a cast.
5724
5725    The binops_by_token map is used to get the tree codes for each <token> type.
5726    binary-expressions are associated according to a precedence table.  */
5727
5728 #define TOKEN_PRECEDENCE(token) \
5729   ((token->type == CPP_GREATER && !parser->greater_than_is_operator_p) \
5730    ? PREC_NOT_OPERATOR \
5731    : binops_by_token[token->type].prec)
5732
5733 static tree
5734 cp_parser_binary_expression (cp_parser* parser, bool cast_p)
5735 {
5736   cp_parser_expression_stack stack;
5737   cp_parser_expression_stack_entry *sp = &stack[0];
5738   tree lhs, rhs;
5739   cp_token *token;
5740   enum tree_code tree_type, lhs_type, rhs_type;
5741   enum cp_parser_prec prec = PREC_NOT_OPERATOR, new_prec, lookahead_prec;
5742   bool overloaded_p;
5743
5744   /* Parse the first expression.  */
5745   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
5746   lhs_type = ERROR_MARK;
5747
5748   for (;;)
5749     {
5750       /* Get an operator token.  */
5751       token = cp_lexer_peek_token (parser->lexer);
5752
5753       new_prec = TOKEN_PRECEDENCE (token);
5754
5755       /* Popping an entry off the stack means we completed a subexpression:
5756          - either we found a token which is not an operator (`>' where it is not
5757            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
5758            will happen repeatedly;
5759          - or, we found an operator which has lower priority.  This is the case
5760            where the recursive descent *ascends*, as in `3 * 4 + 5' after
5761            parsing `3 * 4'.  */
5762       if (new_prec <= prec)
5763         {
5764           if (sp == stack)
5765             break;
5766           else
5767             goto pop;
5768         }
5769
5770      get_rhs:
5771       tree_type = binops_by_token[token->type].tree_type;
5772
5773       /* We used the operator token.  */
5774       cp_lexer_consume_token (parser->lexer);
5775
5776       /* Extract another operand.  It may be the RHS of this expression
5777          or the LHS of a new, higher priority expression.  */
5778       rhs = cp_parser_simple_cast_expression (parser);
5779       rhs_type = ERROR_MARK;
5780
5781       /* Get another operator token.  Look up its precedence to avoid
5782          building a useless (immediately popped) stack entry for common
5783          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
5784       token = cp_lexer_peek_token (parser->lexer);
5785       lookahead_prec = TOKEN_PRECEDENCE (token);
5786       if (lookahead_prec > new_prec)
5787         {
5788           /* ... and prepare to parse the RHS of the new, higher priority
5789              expression.  Since precedence levels on the stack are
5790              monotonically increasing, we do not have to care about
5791              stack overflows.  */
5792           sp->prec = prec;
5793           sp->tree_type = tree_type;
5794           sp->lhs = lhs;
5795           sp->lhs_type = lhs_type;
5796           sp++;
5797           lhs = rhs;
5798           lhs_type = rhs_type;
5799           prec = new_prec;
5800           new_prec = lookahead_prec;
5801           goto get_rhs;
5802
5803          pop:
5804           /* If the stack is not empty, we have parsed into LHS the right side
5805              (`4' in the example above) of an expression we had suspended.
5806              We can use the information on the stack to recover the LHS (`3')
5807              from the stack together with the tree code (`MULT_EXPR'), and
5808              the precedence of the higher level subexpression
5809              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
5810              which will be used to actually build the additive expression.  */
5811           --sp;
5812           prec = sp->prec;
5813           tree_type = sp->tree_type;
5814           rhs = lhs;
5815           rhs_type = lhs_type;
5816           lhs = sp->lhs;
5817           lhs_type = sp->lhs_type;
5818         }
5819
5820       overloaded_p = false;
5821       lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
5822                                &overloaded_p);
5823       lhs_type = tree_type;
5824
5825       /* If the binary operator required the use of an overloaded operator,
5826          then this expression cannot be an integral constant-expression.
5827          An overloaded operator can be used even if both operands are
5828          otherwise permissible in an integral constant-expression if at
5829          least one of the operands is of enumeration type.  */
5830
5831       if (overloaded_p
5832           && (cp_parser_non_integral_constant_expression
5833               (parser, "calls to overloaded operators")))
5834         return error_mark_node;
5835     }
5836
5837   return lhs;
5838 }
5839
5840
5841 /* Parse the `? expression : assignment-expression' part of a
5842    conditional-expression.  The LOGICAL_OR_EXPR is the
5843    logical-or-expression that started the conditional-expression.
5844    Returns a representation of the entire conditional-expression.
5845
5846    This routine is used by cp_parser_assignment_expression.
5847
5848      ? expression : assignment-expression
5849
5850    GNU Extensions:
5851
5852      ? : assignment-expression */
5853
5854 static tree
5855 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
5856 {
5857   tree expr;
5858   tree assignment_expr;
5859
5860   /* Consume the `?' token.  */
5861   cp_lexer_consume_token (parser->lexer);
5862   if (cp_parser_allow_gnu_extensions_p (parser)
5863       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
5864     /* Implicit true clause.  */
5865     expr = NULL_TREE;
5866   else
5867     /* Parse the expression.  */
5868     expr = cp_parser_expression (parser, /*cast_p=*/false);
5869
5870   /* The next token should be a `:'.  */
5871   cp_parser_require (parser, CPP_COLON, "`:'");
5872   /* Parse the assignment-expression.  */
5873   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5874
5875   /* Build the conditional-expression.  */
5876   return build_x_conditional_expr (logical_or_expr,
5877                                    expr,
5878                                    assignment_expr);
5879 }
5880
5881 /* Parse an assignment-expression.
5882
5883    assignment-expression:
5884      conditional-expression
5885      logical-or-expression assignment-operator assignment_expression
5886      throw-expression
5887
5888    CAST_P is true if this expression is the target of a cast.
5889
5890    Returns a representation for the expression.  */
5891
5892 static tree
5893 cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
5894 {
5895   tree expr;
5896
5897   /* If the next token is the `throw' keyword, then we're looking at
5898      a throw-expression.  */
5899   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
5900     expr = cp_parser_throw_expression (parser);
5901   /* Otherwise, it must be that we are looking at a
5902      logical-or-expression.  */
5903   else
5904     {
5905       /* Parse the binary expressions (logical-or-expression).  */
5906       expr = cp_parser_binary_expression (parser, cast_p);
5907       /* If the next token is a `?' then we're actually looking at a
5908          conditional-expression.  */
5909       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
5910         return cp_parser_question_colon_clause (parser, expr);
5911       else
5912         {
5913           enum tree_code assignment_operator;
5914
5915           /* If it's an assignment-operator, we're using the second
5916              production.  */
5917           assignment_operator
5918             = cp_parser_assignment_operator_opt (parser);
5919           if (assignment_operator != ERROR_MARK)
5920             {
5921               tree rhs;
5922
5923               /* Parse the right-hand side of the assignment.  */
5924               rhs = cp_parser_assignment_expression (parser, cast_p);
5925               /* An assignment may not appear in a
5926                  constant-expression.  */
5927               if (cp_parser_non_integral_constant_expression (parser,
5928                                                               "an assignment"))
5929                 return error_mark_node;
5930               /* Build the assignment expression.  */
5931               expr = build_x_modify_expr (expr,
5932                                           assignment_operator,
5933                                           rhs);
5934             }
5935         }
5936     }
5937
5938   return expr;
5939 }
5940
5941 /* Parse an (optional) assignment-operator.
5942
5943    assignment-operator: one of
5944      = *= /= %= += -= >>= <<= &= ^= |=
5945
5946    GNU Extension:
5947
5948    assignment-operator: one of
5949      <?= >?=
5950
5951    If the next token is an assignment operator, the corresponding tree
5952    code is returned, and the token is consumed.  For example, for
5953    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
5954    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
5955    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
5956    operator, ERROR_MARK is returned.  */
5957
5958 static enum tree_code
5959 cp_parser_assignment_operator_opt (cp_parser* parser)
5960 {
5961   enum tree_code op;
5962   cp_token *token;
5963
5964   /* Peek at the next toen.  */
5965   token = cp_lexer_peek_token (parser->lexer);
5966
5967   switch (token->type)
5968     {
5969     case CPP_EQ:
5970       op = NOP_EXPR;
5971       break;
5972
5973     case CPP_MULT_EQ:
5974       op = MULT_EXPR;
5975       break;
5976
5977     case CPP_DIV_EQ:
5978       op = TRUNC_DIV_EXPR;
5979       break;
5980
5981     case CPP_MOD_EQ:
5982       op = TRUNC_MOD_EXPR;
5983       break;
5984
5985     case CPP_PLUS_EQ:
5986       op = PLUS_EXPR;
5987       break;
5988
5989     case CPP_MINUS_EQ:
5990       op = MINUS_EXPR;
5991       break;
5992
5993     case CPP_RSHIFT_EQ:
5994       op = RSHIFT_EXPR;
5995       break;
5996
5997     case CPP_LSHIFT_EQ:
5998       op = LSHIFT_EXPR;
5999       break;
6000
6001     case CPP_AND_EQ:
6002       op = BIT_AND_EXPR;
6003       break;
6004
6005     case CPP_XOR_EQ:
6006       op = BIT_XOR_EXPR;
6007       break;
6008
6009     case CPP_OR_EQ:
6010       op = BIT_IOR_EXPR;
6011       break;
6012
6013     default:
6014       /* Nothing else is an assignment operator.  */
6015       op = ERROR_MARK;
6016     }
6017
6018   /* If it was an assignment operator, consume it.  */
6019   if (op != ERROR_MARK)
6020     cp_lexer_consume_token (parser->lexer);
6021
6022   return op;
6023 }
6024
6025 /* Parse an expression.
6026
6027    expression:
6028      assignment-expression
6029      expression , assignment-expression
6030
6031    CAST_P is true if this expression is the target of a cast.
6032
6033    Returns a representation of the expression.  */
6034
6035 static tree
6036 cp_parser_expression (cp_parser* parser, bool cast_p)
6037 {
6038   tree expression = NULL_TREE;
6039
6040   while (true)
6041     {
6042       tree assignment_expression;
6043
6044       /* Parse the next assignment-expression.  */
6045       assignment_expression
6046         = cp_parser_assignment_expression (parser, cast_p);
6047       /* If this is the first assignment-expression, we can just
6048          save it away.  */
6049       if (!expression)
6050         expression = assignment_expression;
6051       else
6052         expression = build_x_compound_expr (expression,
6053                                             assignment_expression);
6054       /* If the next token is not a comma, then we are done with the
6055          expression.  */
6056       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6057         break;
6058       /* Consume the `,'.  */
6059       cp_lexer_consume_token (parser->lexer);
6060       /* A comma operator cannot appear in a constant-expression.  */
6061       if (cp_parser_non_integral_constant_expression (parser,
6062                                                       "a comma operator"))
6063         expression = error_mark_node;
6064     }
6065
6066   return expression;
6067 }
6068
6069 /* Parse a constant-expression.
6070
6071    constant-expression:
6072      conditional-expression
6073
6074   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6075   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6076   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6077   is false, NON_CONSTANT_P should be NULL.  */
6078
6079 static tree
6080 cp_parser_constant_expression (cp_parser* parser,
6081                                bool allow_non_constant_p,
6082                                bool *non_constant_p)
6083 {
6084   bool saved_integral_constant_expression_p;
6085   bool saved_allow_non_integral_constant_expression_p;
6086   bool saved_non_integral_constant_expression_p;
6087   tree expression;
6088
6089   /* It might seem that we could simply parse the
6090      conditional-expression, and then check to see if it were
6091      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
6092      one that the compiler can figure out is constant, possibly after
6093      doing some simplifications or optimizations.  The standard has a
6094      precise definition of constant-expression, and we must honor
6095      that, even though it is somewhat more restrictive.
6096
6097      For example:
6098
6099        int i[(2, 3)];
6100
6101      is not a legal declaration, because `(2, 3)' is not a
6102      constant-expression.  The `,' operator is forbidden in a
6103      constant-expression.  However, GCC's constant-folding machinery
6104      will fold this operation to an INTEGER_CST for `3'.  */
6105
6106   /* Save the old settings.  */
6107   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
6108   saved_allow_non_integral_constant_expression_p
6109     = parser->allow_non_integral_constant_expression_p;
6110   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
6111   /* We are now parsing a constant-expression.  */
6112   parser->integral_constant_expression_p = true;
6113   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
6114   parser->non_integral_constant_expression_p = false;
6115   /* Although the grammar says "conditional-expression", we parse an
6116      "assignment-expression", which also permits "throw-expression"
6117      and the use of assignment operators.  In the case that
6118      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6119      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
6120      actually essential that we look for an assignment-expression.
6121      For example, cp_parser_initializer_clauses uses this function to
6122      determine whether a particular assignment-expression is in fact
6123      constant.  */
6124   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6125   /* Restore the old settings.  */
6126   parser->integral_constant_expression_p
6127     = saved_integral_constant_expression_p;
6128   parser->allow_non_integral_constant_expression_p
6129     = saved_allow_non_integral_constant_expression_p;
6130   if (allow_non_constant_p)
6131     *non_constant_p = parser->non_integral_constant_expression_p;
6132   else if (parser->non_integral_constant_expression_p)
6133     expression = error_mark_node;
6134   parser->non_integral_constant_expression_p
6135     = saved_non_integral_constant_expression_p;
6136
6137   return expression;
6138 }
6139
6140 /* Parse __builtin_offsetof.
6141
6142    offsetof-expression:
6143      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6144
6145    offsetof-member-designator:
6146      id-expression
6147      | offsetof-member-designator "." id-expression
6148      | offsetof-member-designator "[" expression "]"  */
6149
6150 static tree
6151 cp_parser_builtin_offsetof (cp_parser *parser)
6152 {
6153   int save_ice_p, save_non_ice_p;
6154   tree type, expr;
6155   cp_id_kind dummy;
6156
6157   /* We're about to accept non-integral-constant things, but will
6158      definitely yield an integral constant expression.  Save and
6159      restore these values around our local parsing.  */
6160   save_ice_p = parser->integral_constant_expression_p;
6161   save_non_ice_p = parser->non_integral_constant_expression_p;
6162
6163   /* Consume the "__builtin_offsetof" token.  */
6164   cp_lexer_consume_token (parser->lexer);
6165   /* Consume the opening `('.  */
6166   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6167   /* Parse the type-id.  */
6168   type = cp_parser_type_id (parser);
6169   /* Look for the `,'.  */
6170   cp_parser_require (parser, CPP_COMMA, "`,'");
6171
6172   /* Build the (type *)null that begins the traditional offsetof macro.  */
6173   expr = build_static_cast (build_pointer_type (type), null_pointer_node);
6174
6175   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6176   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6177                                                  true, &dummy);
6178   while (true)
6179     {
6180       cp_token *token = cp_lexer_peek_token (parser->lexer);
6181       switch (token->type)
6182         {
6183         case CPP_OPEN_SQUARE:
6184           /* offsetof-member-designator "[" expression "]" */
6185           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6186           break;
6187
6188         case CPP_DOT:
6189           /* offsetof-member-designator "." identifier */
6190           cp_lexer_consume_token (parser->lexer);
6191           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
6192                                                          true, &dummy);
6193           break;
6194
6195         case CPP_CLOSE_PAREN:
6196           /* Consume the ")" token.  */
6197           cp_lexer_consume_token (parser->lexer);
6198           goto success;
6199
6200         default:
6201           /* Error.  We know the following require will fail, but
6202              that gives the proper error message.  */
6203           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6204           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6205           expr = error_mark_node;
6206           goto failure;
6207         }
6208     }
6209
6210  success:
6211   /* If we're processing a template, we can't finish the semantics yet.
6212      Otherwise we can fold the entire expression now.  */
6213   if (processing_template_decl)
6214     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6215   else
6216     expr = finish_offsetof (expr);
6217
6218  failure:
6219   parser->integral_constant_expression_p = save_ice_p;
6220   parser->non_integral_constant_expression_p = save_non_ice_p;
6221
6222   return expr;
6223 }
6224
6225 /* Statements [gram.stmt.stmt]  */
6226
6227 /* Parse a statement.
6228
6229    statement:
6230      labeled-statement
6231      expression-statement
6232      compound-statement
6233      selection-statement
6234      iteration-statement
6235      jump-statement
6236      declaration-statement
6237      try-block
6238
6239   IN_COMPOUND is true when the statement is nested inside a
6240   cp_parser_compound_statement; this matters for certain pragmas.
6241
6242   If IF_P is not NULL, *IF_P is set to indicate whether the statement
6243   is a (possibly labeled) if statement which is not enclosed in braces
6244   and has an else clause.  This is used to implement -Wparentheses.  */
6245
6246 static void
6247 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6248                      bool in_compound, bool *if_p)
6249 {
6250   tree statement;
6251   cp_token *token;
6252   location_t statement_location;
6253
6254  restart:
6255   if (if_p != NULL)
6256     *if_p = false;
6257   /* There is no statement yet.  */
6258   statement = NULL_TREE;
6259   /* Peek at the next token.  */
6260   token = cp_lexer_peek_token (parser->lexer);
6261   /* Remember the location of the first token in the statement.  */
6262   statement_location = token->location;
6263   /* If this is a keyword, then that will often determine what kind of
6264      statement we have.  */
6265   if (token->type == CPP_KEYWORD)
6266     {
6267       enum rid keyword = token->keyword;
6268
6269       switch (keyword)
6270         {
6271         case RID_CASE:
6272         case RID_DEFAULT:
6273           /* Looks like a labeled-statement with a case label.
6274              Parse the label, and then use tail recursion to parse
6275              the statement.  */
6276           cp_parser_label_for_labeled_statement (parser);
6277           goto restart;
6278
6279         case RID_IF:
6280         case RID_SWITCH:
6281           statement = cp_parser_selection_statement (parser, if_p);
6282           break;
6283
6284         case RID_WHILE:
6285         case RID_DO:
6286         case RID_FOR:
6287           statement = cp_parser_iteration_statement (parser);
6288           break;
6289
6290         case RID_BREAK:
6291         case RID_CONTINUE:
6292         case RID_RETURN:
6293         case RID_GOTO:
6294           statement = cp_parser_jump_statement (parser);
6295           break;
6296
6297           /* Objective-C++ exception-handling constructs.  */
6298         case RID_AT_TRY:
6299         case RID_AT_CATCH:
6300         case RID_AT_FINALLY:
6301         case RID_AT_SYNCHRONIZED:
6302         case RID_AT_THROW:
6303           statement = cp_parser_objc_statement (parser);
6304           break;
6305
6306         case RID_TRY:
6307           statement = cp_parser_try_block (parser);
6308           break;
6309
6310         default:
6311           /* It might be a keyword like `int' that can start a
6312              declaration-statement.  */
6313           break;
6314         }
6315     }
6316   else if (token->type == CPP_NAME)
6317     {
6318       /* If the next token is a `:', then we are looking at a
6319          labeled-statement.  */
6320       token = cp_lexer_peek_nth_token (parser->lexer, 2);
6321       if (token->type == CPP_COLON)
6322         {
6323           /* Looks like a labeled-statement with an ordinary label.
6324              Parse the label, and then use tail recursion to parse
6325              the statement.  */
6326           cp_parser_label_for_labeled_statement (parser);
6327           goto restart;
6328         }
6329     }
6330   /* Anything that starts with a `{' must be a compound-statement.  */
6331   else if (token->type == CPP_OPEN_BRACE)
6332     statement = cp_parser_compound_statement (parser, NULL, false);
6333   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6334      a statement all its own.  */
6335   else if (token->type == CPP_PRAGMA)
6336     {
6337       /* Only certain OpenMP pragmas are attached to statements, and thus
6338          are considered statements themselves.  All others are not.  In
6339          the context of a compound, accept the pragma as a "statement" and
6340          return so that we can check for a close brace.  Otherwise we
6341          require a real statement and must go back and read one.  */
6342       if (in_compound)
6343         cp_parser_pragma (parser, pragma_compound);
6344       else if (!cp_parser_pragma (parser, pragma_stmt))
6345         goto restart;
6346       return;
6347     }
6348   else if (token->type == CPP_EOF)
6349     {
6350       cp_parser_error (parser, "expected statement");
6351       return;
6352     }
6353
6354   /* Everything else must be a declaration-statement or an
6355      expression-statement.  Try for the declaration-statement
6356      first, unless we are looking at a `;', in which case we know that
6357      we have an expression-statement.  */
6358   if (!statement)
6359     {
6360       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6361         {
6362           cp_parser_parse_tentatively (parser);
6363           /* Try to parse the declaration-statement.  */
6364           cp_parser_declaration_statement (parser);
6365           /* If that worked, we're done.  */
6366           if (cp_parser_parse_definitely (parser))
6367             return;
6368         }
6369       /* Look for an expression-statement instead.  */
6370       statement = cp_parser_expression_statement (parser, in_statement_expr);
6371     }
6372
6373   /* Set the line number for the statement.  */
6374   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
6375     SET_EXPR_LOCATION (statement, statement_location);
6376 }
6377
6378 /* Parse the label for a labeled-statement, i.e.
6379
6380    identifier :
6381    case constant-expression :
6382    default :
6383
6384    GNU Extension:
6385    case constant-expression ... constant-expression : statement
6386
6387    When a label is parsed without errors, the label is added to the
6388    parse tree by the finish_* functions, so this function doesn't
6389    have to return the label.  */
6390
6391 static void
6392 cp_parser_label_for_labeled_statement (cp_parser* parser)
6393 {
6394   cp_token *token;
6395
6396   /* The next token should be an identifier.  */
6397   token = cp_lexer_peek_token (parser->lexer);
6398   if (token->type != CPP_NAME
6399       && token->type != CPP_KEYWORD)
6400     {
6401       cp_parser_error (parser, "expected labeled-statement");
6402       return;
6403     }
6404
6405   switch (token->keyword)
6406     {
6407     case RID_CASE:
6408       {
6409         tree expr, expr_hi;
6410         cp_token *ellipsis;
6411
6412         /* Consume the `case' token.  */
6413         cp_lexer_consume_token (parser->lexer);
6414         /* Parse the constant-expression.  */
6415         expr = cp_parser_constant_expression (parser,
6416                                               /*allow_non_constant_p=*/false,
6417                                               NULL);
6418
6419         ellipsis = cp_lexer_peek_token (parser->lexer);
6420         if (ellipsis->type == CPP_ELLIPSIS)
6421           {
6422             /* Consume the `...' token.  */
6423             cp_lexer_consume_token (parser->lexer);
6424             expr_hi =
6425               cp_parser_constant_expression (parser,
6426                                              /*allow_non_constant_p=*/false,
6427                                              NULL);
6428             /* We don't need to emit warnings here, as the common code
6429                will do this for us.  */
6430           }
6431         else
6432           expr_hi = NULL_TREE;
6433
6434         if (parser->in_switch_statement_p)
6435           finish_case_label (expr, expr_hi);
6436         else
6437           error ("case label %qE not within a switch statement", expr);
6438       }
6439       break;
6440
6441     case RID_DEFAULT:
6442       /* Consume the `default' token.  */
6443       cp_lexer_consume_token (parser->lexer);
6444
6445       if (parser->in_switch_statement_p)
6446         finish_case_label (NULL_TREE, NULL_TREE);
6447       else
6448         error ("case label not within a switch statement");
6449       break;
6450
6451     default:
6452       /* Anything else must be an ordinary label.  */
6453       finish_label_stmt (cp_parser_identifier (parser));
6454       break;
6455     }
6456
6457   /* Require the `:' token.  */
6458   cp_parser_require (parser, CPP_COLON, "`:'");
6459 }
6460
6461 /* Parse an expression-statement.
6462
6463    expression-statement:
6464      expression [opt] ;
6465
6466    Returns the new EXPR_STMT -- or NULL_TREE if the expression
6467    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6468    indicates whether this expression-statement is part of an
6469    expression statement.  */
6470
6471 static tree
6472 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6473 {
6474   tree statement = NULL_TREE;
6475
6476   /* If the next token is a ';', then there is no expression
6477      statement.  */
6478   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6479     statement = cp_parser_expression (parser, /*cast_p=*/false);
6480
6481   /* Consume the final `;'.  */
6482   cp_parser_consume_semicolon_at_end_of_statement (parser);
6483
6484   if (in_statement_expr
6485       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6486     /* This is the final expression statement of a statement
6487        expression.  */
6488     statement = finish_stmt_expr_expr (statement, in_statement_expr);
6489   else if (statement)
6490     statement = finish_expr_stmt (statement);
6491   else
6492     finish_stmt ();
6493
6494   return statement;
6495 }
6496
6497 /* Parse a compound-statement.
6498
6499    compound-statement:
6500      { statement-seq [opt] }
6501
6502    Returns a tree representing the statement.  */
6503
6504 static tree
6505 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6506                               bool in_try)
6507 {
6508   tree compound_stmt;
6509
6510   /* Consume the `{'.  */
6511   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6512     return error_mark_node;
6513   /* Begin the compound-statement.  */
6514   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6515   /* Parse an (optional) statement-seq.  */
6516   cp_parser_statement_seq_opt (parser, in_statement_expr);
6517   /* Finish the compound-statement.  */
6518   finish_compound_stmt (compound_stmt);
6519   /* Consume the `}'.  */
6520   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6521
6522   return compound_stmt;
6523 }
6524
6525 /* Parse an (optional) statement-seq.
6526
6527    statement-seq:
6528      statement
6529      statement-seq [opt] statement  */
6530
6531 static void
6532 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6533 {
6534   /* Scan statements until there aren't any more.  */
6535   while (true)
6536     {
6537       cp_token *token = cp_lexer_peek_token (parser->lexer);
6538
6539       /* If we're looking at a `}', then we've run out of statements.  */
6540       if (token->type == CPP_CLOSE_BRACE
6541           || token->type == CPP_EOF
6542           || token->type == CPP_PRAGMA_EOL)
6543         break;
6544
6545       /* Parse the statement.  */
6546       cp_parser_statement (parser, in_statement_expr, true, NULL);
6547     }
6548 }
6549
6550 /* Parse a selection-statement.
6551
6552    selection-statement:
6553      if ( condition ) statement
6554      if ( condition ) statement else statement
6555      switch ( condition ) statement
6556
6557    Returns the new IF_STMT or SWITCH_STMT.
6558
6559    If IF_P is not NULL, *IF_P is set to indicate whether the statement
6560    is a (possibly labeled) if statement which is not enclosed in
6561    braces and has an else clause.  This is used to implement
6562    -Wparentheses.  */
6563
6564 static tree
6565 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
6566 {
6567   cp_token *token;
6568   enum rid keyword;
6569
6570   if (if_p != NULL)
6571     *if_p = false;
6572
6573   /* Peek at the next token.  */
6574   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6575
6576   /* See what kind of keyword it is.  */
6577   keyword = token->keyword;
6578   switch (keyword)
6579     {
6580     case RID_IF:
6581     case RID_SWITCH:
6582       {
6583         tree statement;
6584         tree condition;
6585
6586         /* Look for the `('.  */
6587         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6588           {
6589             cp_parser_skip_to_end_of_statement (parser);
6590             return error_mark_node;
6591           }
6592
6593         /* Begin the selection-statement.  */
6594         if (keyword == RID_IF)
6595           statement = begin_if_stmt ();
6596         else
6597           statement = begin_switch_stmt ();
6598
6599         /* Parse the condition.  */
6600         condition = cp_parser_condition (parser);
6601         /* Look for the `)'.  */
6602         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6603           cp_parser_skip_to_closing_parenthesis (parser, true, false,
6604                                                  /*consume_paren=*/true);
6605
6606         if (keyword == RID_IF)
6607           {
6608             bool nested_if;
6609
6610             /* Add the condition.  */
6611             finish_if_stmt_cond (condition, statement);
6612
6613             /* Parse the then-clause.  */
6614             cp_parser_implicitly_scoped_statement (parser, &nested_if);
6615             finish_then_clause (statement);
6616
6617             /* If the next token is `else', parse the else-clause.  */
6618             if (cp_lexer_next_token_is_keyword (parser->lexer,
6619                                                 RID_ELSE))
6620               {
6621                 /* Consume the `else' keyword.  */
6622                 cp_lexer_consume_token (parser->lexer);
6623                 begin_else_clause (statement);
6624                 /* Parse the else-clause.  */
6625                 cp_parser_implicitly_scoped_statement (parser, NULL);
6626                 finish_else_clause (statement);
6627
6628                 /* If we are currently parsing a then-clause, then
6629                    IF_P will not be NULL.  We set it to true to
6630                    indicate that this if statement has an else clause.
6631                    This may trigger the Wparentheses warning below
6632                    when we get back up to the parent if statement.  */
6633                 if (if_p != NULL)
6634                   *if_p = true;
6635               }
6636             else
6637               {
6638                 /* This if statement does not have an else clause.  If
6639                    NESTED_IF is true, then the then-clause is an if
6640                    statement which does have an else clause.  We warn
6641                    about the potential ambiguity.  */
6642                 if (nested_if)
6643                   warning (OPT_Wparentheses,
6644                            ("%Hsuggest explicit braces "
6645                             "to avoid ambiguous %<else%>"),
6646                            EXPR_LOCUS (statement));
6647               }
6648
6649             /* Now we're all done with the if-statement.  */
6650             finish_if_stmt (statement);
6651           }
6652         else
6653           {
6654             bool in_switch_statement_p;
6655             unsigned char in_statement;
6656
6657             /* Add the condition.  */
6658             finish_switch_cond (condition, statement);
6659
6660             /* Parse the body of the switch-statement.  */
6661             in_switch_statement_p = parser->in_switch_statement_p;
6662             in_statement = parser->in_statement;
6663             parser->in_switch_statement_p = true;
6664             parser->in_statement |= IN_SWITCH_STMT;
6665             cp_parser_implicitly_scoped_statement (parser, NULL);
6666             parser->in_switch_statement_p = in_switch_statement_p;
6667             parser->in_statement = in_statement;
6668
6669             /* Now we're all done with the switch-statement.  */
6670             finish_switch_stmt (statement);
6671           }
6672
6673         return statement;
6674       }
6675       break;
6676
6677     default:
6678       cp_parser_error (parser, "expected selection-statement");
6679       return error_mark_node;
6680     }
6681 }
6682
6683 /* Parse a condition.
6684
6685    condition:
6686      expression
6687      type-specifier-seq declarator = assignment-expression
6688
6689    GNU Extension:
6690
6691    condition:
6692      type-specifier-seq declarator asm-specification [opt]
6693        attributes [opt] = assignment-expression
6694
6695    Returns the expression that should be tested.  */
6696
6697 static tree
6698 cp_parser_condition (cp_parser* parser)
6699 {
6700   cp_decl_specifier_seq type_specifiers;
6701   const char *saved_message;
6702
6703   /* Try the declaration first.  */
6704   cp_parser_parse_tentatively (parser);
6705   /* New types are not allowed in the type-specifier-seq for a
6706      condition.  */
6707   saved_message = parser->type_definition_forbidden_message;
6708   parser->type_definition_forbidden_message
6709     = "types may not be defined in conditions";
6710   /* Parse the type-specifier-seq.  */
6711   cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
6712                                 &type_specifiers);
6713   /* Restore the saved message.  */
6714   parser->type_definition_forbidden_message = saved_message;
6715   /* If all is well, we might be looking at a declaration.  */
6716   if (!cp_parser_error_occurred (parser))
6717     {
6718       tree decl;
6719       tree asm_specification;
6720       tree attributes;
6721       cp_declarator *declarator;
6722       tree initializer = NULL_TREE;
6723
6724       /* Parse the declarator.  */
6725       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6726                                          /*ctor_dtor_or_conv_p=*/NULL,
6727                                          /*parenthesized_p=*/NULL,
6728                                          /*member_p=*/false);
6729       /* Parse the attributes.  */
6730       attributes = cp_parser_attributes_opt (parser);
6731       /* Parse the asm-specification.  */
6732       asm_specification = cp_parser_asm_specification_opt (parser);
6733       /* If the next token is not an `=', then we might still be
6734          looking at an expression.  For example:
6735
6736            if (A(a).x)
6737
6738          looks like a decl-specifier-seq and a declarator -- but then
6739          there is no `=', so this is an expression.  */
6740       cp_parser_require (parser, CPP_EQ, "`='");
6741       /* If we did see an `=', then we are looking at a declaration
6742          for sure.  */
6743       if (cp_parser_parse_definitely (parser))
6744         {
6745           tree pushed_scope;
6746           bool non_constant_p;
6747
6748           /* Create the declaration.  */
6749           decl = start_decl (declarator, &type_specifiers,
6750                              /*initialized_p=*/true,
6751                              attributes, /*prefix_attributes=*/NULL_TREE,
6752                              &pushed_scope);
6753           /* Parse the assignment-expression.  */
6754           initializer
6755             = cp_parser_constant_expression (parser,
6756                                              /*allow_non_constant_p=*/true,
6757                                              &non_constant_p);
6758           if (!non_constant_p)
6759             initializer = fold_non_dependent_expr (initializer);
6760
6761           /* Process the initializer.  */
6762           cp_finish_decl (decl,
6763                           initializer, !non_constant_p,
6764                           asm_specification,
6765                           LOOKUP_ONLYCONVERTING);
6766
6767           if (pushed_scope)
6768             pop_scope (pushed_scope);
6769
6770           return convert_from_reference (decl);
6771         }
6772     }
6773   /* If we didn't even get past the declarator successfully, we are
6774      definitely not looking at a declaration.  */
6775   else
6776     cp_parser_abort_tentative_parse (parser);
6777
6778   /* Otherwise, we are looking at an expression.  */
6779   return cp_parser_expression (parser, /*cast_p=*/false);
6780 }
6781
6782 /* Parse an iteration-statement.
6783
6784    iteration-statement:
6785      while ( condition ) statement
6786      do statement while ( expression ) ;
6787      for ( for-init-statement condition [opt] ; expression [opt] )
6788        statement
6789
6790    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6791
6792 static tree
6793 cp_parser_iteration_statement (cp_parser* parser)
6794 {
6795   cp_token *token;
6796   enum rid keyword;
6797   tree statement;
6798   unsigned char in_statement;
6799
6800   /* Peek at the next token.  */
6801   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6802   if (!token)
6803     return error_mark_node;
6804
6805   /* Remember whether or not we are already within an iteration
6806      statement.  */
6807   in_statement = parser->in_statement;
6808
6809   /* See what kind of keyword it is.  */
6810   keyword = token->keyword;
6811   switch (keyword)
6812     {
6813     case RID_WHILE:
6814       {
6815         tree condition;
6816
6817         /* Begin the while-statement.  */
6818         statement = begin_while_stmt ();
6819         /* Look for the `('.  */
6820         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6821         /* Parse the condition.  */
6822         condition = cp_parser_condition (parser);
6823         finish_while_stmt_cond (condition, statement);
6824         /* Look for the `)'.  */
6825         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6826         /* Parse the dependent statement.  */
6827         parser->in_statement = IN_ITERATION_STMT;
6828         cp_parser_already_scoped_statement (parser);
6829         parser->in_statement = in_statement;
6830         /* We're done with the while-statement.  */
6831         finish_while_stmt (statement);
6832       }
6833       break;
6834
6835     case RID_DO:
6836       {
6837         tree expression;
6838
6839         /* Begin the do-statement.  */
6840         statement = begin_do_stmt ();
6841         /* Parse the body of the do-statement.  */
6842         parser->in_statement = IN_ITERATION_STMT;
6843         cp_parser_implicitly_scoped_statement (parser, NULL);
6844         parser->in_statement = in_statement;
6845         finish_do_body (statement);
6846         /* Look for the `while' keyword.  */
6847         cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6848         /* Look for the `('.  */
6849         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6850         /* Parse the expression.  */
6851         expression = cp_parser_expression (parser, /*cast_p=*/false);
6852         /* We're done with the do-statement.  */
6853         finish_do_stmt (expression, statement);
6854         /* Look for the `)'.  */
6855         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6856         /* Look for the `;'.  */
6857         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6858       }
6859       break;
6860
6861     case RID_FOR:
6862       {
6863         tree condition = NULL_TREE;
6864         tree expression = NULL_TREE;
6865
6866         /* Begin the for-statement.  */
6867         statement = begin_for_stmt ();
6868         /* Look for the `('.  */
6869         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6870         /* Parse the initialization.  */
6871         cp_parser_for_init_statement (parser);
6872         finish_for_init_stmt (statement);
6873
6874         /* If there's a condition, process it.  */
6875         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6876           condition = cp_parser_condition (parser);
6877         finish_for_cond (condition, statement);
6878         /* Look for the `;'.  */
6879         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6880
6881         /* If there's an expression, process it.  */
6882         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6883           expression = cp_parser_expression (parser, /*cast_p=*/false);
6884         finish_for_expr (expression, statement);
6885         /* Look for the `)'.  */
6886         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6887
6888         /* Parse the body of the for-statement.  */
6889         parser->in_statement = IN_ITERATION_STMT;
6890         cp_parser_already_scoped_statement (parser);
6891         parser->in_statement = in_statement;
6892
6893         /* We're done with the for-statement.  */
6894         finish_for_stmt (statement);
6895       }
6896       break;
6897
6898     default:
6899       cp_parser_error (parser, "expected iteration-statement");
6900       statement = error_mark_node;
6901       break;
6902     }
6903
6904   return statement;
6905 }
6906
6907 /* Parse a for-init-statement.
6908
6909    for-init-statement:
6910      expression-statement
6911      simple-declaration  */
6912
6913 static void
6914 cp_parser_for_init_statement (cp_parser* parser)
6915 {
6916   /* If the next token is a `;', then we have an empty
6917      expression-statement.  Grammatically, this is also a
6918      simple-declaration, but an invalid one, because it does not
6919      declare anything.  Therefore, if we did not handle this case
6920      specially, we would issue an error message about an invalid
6921      declaration.  */
6922   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6923     {
6924       /* We're going to speculatively look for a declaration, falling back
6925          to an expression, if necessary.  */
6926       cp_parser_parse_tentatively (parser);
6927       /* Parse the declaration.  */
6928       cp_parser_simple_declaration (parser,
6929                                     /*function_definition_allowed_p=*/false);
6930       /* If the tentative parse failed, then we shall need to look for an
6931          expression-statement.  */
6932       if (cp_parser_parse_definitely (parser))
6933         return;
6934     }
6935
6936   cp_parser_expression_statement (parser, false);
6937 }
6938
6939 /* Parse a jump-statement.
6940
6941    jump-statement:
6942      break ;
6943      continue ;
6944      return expression [opt] ;
6945      goto identifier ;
6946
6947    GNU extension:
6948
6949    jump-statement:
6950      goto * expression ;
6951
6952    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
6953
6954 static tree
6955 cp_parser_jump_statement (cp_parser* parser)
6956 {
6957   tree statement = error_mark_node;
6958   cp_token *token;
6959   enum rid keyword;
6960
6961   /* Peek at the next token.  */
6962   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6963   if (!token)
6964     return error_mark_node;
6965
6966   /* See what kind of keyword it is.  */
6967   keyword = token->keyword;
6968   switch (keyword)
6969     {
6970     case RID_BREAK:
6971       switch (parser->in_statement)
6972         {
6973         case 0:
6974           error ("break statement not within loop or switch");
6975           break;
6976         default:
6977           gcc_assert ((parser->in_statement & IN_SWITCH_STMT)
6978                       || parser->in_statement == IN_ITERATION_STMT);
6979           statement = finish_break_stmt ();
6980           break;
6981         case IN_OMP_BLOCK:
6982           error ("invalid exit from OpenMP structured block");
6983           break;
6984         case IN_OMP_FOR:
6985           error ("break statement used with OpenMP for loop");
6986           break;
6987         }
6988       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6989       break;
6990
6991     case RID_CONTINUE:
6992       switch (parser->in_statement & ~IN_SWITCH_STMT)
6993         {
6994         case 0:
6995           error ("continue statement not within a loop");
6996           break;
6997         case IN_ITERATION_STMT:
6998         case IN_OMP_FOR:
6999           statement = finish_continue_stmt ();
7000           break;
7001         case IN_OMP_BLOCK:
7002           error ("invalid exit from OpenMP structured block");
7003           break;
7004         default:
7005           gcc_unreachable ();
7006         }
7007       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7008       break;
7009
7010     case RID_RETURN:
7011       {
7012         tree expr;
7013
7014         /* If the next token is a `;', then there is no
7015            expression.  */
7016         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7017           expr = cp_parser_expression (parser, /*cast_p=*/false);
7018         else
7019           expr = NULL_TREE;
7020         /* Build the return-statement.  */
7021         statement = finish_return_stmt (expr);
7022         /* Look for the final `;'.  */
7023         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7024       }
7025       break;
7026
7027     case RID_GOTO:
7028       /* Create the goto-statement.  */
7029       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
7030         {
7031           /* Issue a warning about this use of a GNU extension.  */
7032           if (pedantic)
7033             pedwarn ("ISO C++ forbids computed gotos");
7034           /* Consume the '*' token.  */
7035           cp_lexer_consume_token (parser->lexer);
7036           /* Parse the dependent expression.  */
7037           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
7038         }
7039       else
7040         finish_goto_stmt (cp_parser_identifier (parser));
7041       /* Look for the final `;'.  */
7042       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7043       break;
7044
7045     default:
7046       cp_parser_error (parser, "expected jump-statement");
7047       break;
7048     }
7049
7050   return statement;
7051 }
7052
7053 /* Parse a declaration-statement.
7054
7055    declaration-statement:
7056      block-declaration  */
7057
7058 static void
7059 cp_parser_declaration_statement (cp_parser* parser)
7060 {
7061   void *p;
7062
7063   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7064   p = obstack_alloc (&declarator_obstack, 0);
7065
7066  /* Parse the block-declaration.  */
7067   cp_parser_block_declaration (parser, /*statement_p=*/true);
7068
7069   /* Free any declarators allocated.  */
7070   obstack_free (&declarator_obstack, p);
7071
7072   /* Finish off the statement.  */
7073   finish_stmt ();
7074 }
7075
7076 /* Some dependent statements (like `if (cond) statement'), are
7077    implicitly in their own scope.  In other words, if the statement is
7078    a single statement (as opposed to a compound-statement), it is
7079    none-the-less treated as if it were enclosed in braces.  Any
7080    declarations appearing in the dependent statement are out of scope
7081    after control passes that point.  This function parses a statement,
7082    but ensures that is in its own scope, even if it is not a
7083    compound-statement.
7084
7085    If IF_P is not NULL, *IF_P is set to indicate whether the statement
7086    is a (possibly labeled) if statement which is not enclosed in
7087    braces and has an else clause.  This is used to implement
7088    -Wparentheses.
7089
7090    Returns the new statement.  */
7091
7092 static tree
7093 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
7094 {
7095   tree statement;
7096
7097   if (if_p != NULL)
7098     *if_p = false;
7099
7100   /* Mark if () ; with a special NOP_EXPR.  */
7101   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7102     {
7103       cp_lexer_consume_token (parser->lexer);
7104       statement = add_stmt (build_empty_stmt ());
7105     }
7106   /* if a compound is opened, we simply parse the statement directly.  */
7107   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7108     statement = cp_parser_compound_statement (parser, NULL, false);
7109   /* If the token is not a `{', then we must take special action.  */
7110   else
7111     {
7112       /* Create a compound-statement.  */
7113       statement = begin_compound_stmt (0);
7114       /* Parse the dependent-statement.  */
7115       cp_parser_statement (parser, NULL_TREE, false, if_p);
7116       /* Finish the dummy compound-statement.  */
7117       finish_compound_stmt (statement);
7118     }
7119
7120   /* Return the statement.  */
7121   return statement;
7122 }
7123
7124 /* For some dependent statements (like `while (cond) statement'), we
7125    have already created a scope.  Therefore, even if the dependent
7126    statement is a compound-statement, we do not want to create another
7127    scope.  */
7128
7129 static void
7130 cp_parser_already_scoped_statement (cp_parser* parser)
7131 {
7132   /* If the token is a `{', then we must take special action.  */
7133   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7134     cp_parser_statement (parser, NULL_TREE, false, NULL);
7135   else
7136     {
7137       /* Avoid calling cp_parser_compound_statement, so that we
7138          don't create a new scope.  Do everything else by hand.  */
7139       cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
7140       cp_parser_statement_seq_opt (parser, NULL_TREE);
7141       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7142     }
7143 }
7144
7145 /* Declarations [gram.dcl.dcl] */
7146
7147 /* Parse an optional declaration-sequence.
7148
7149    declaration-seq:
7150      declaration
7151      declaration-seq declaration  */
7152
7153 static void
7154 cp_parser_declaration_seq_opt (cp_parser* parser)
7155 {
7156   while (true)
7157     {
7158       cp_token *token;
7159
7160       token = cp_lexer_peek_token (parser->lexer);
7161
7162       if (token->type == CPP_CLOSE_BRACE
7163           || token->type == CPP_EOF
7164           || token->type == CPP_PRAGMA_EOL)
7165         break;
7166
7167       if (token->type == CPP_SEMICOLON)
7168         {
7169           /* A declaration consisting of a single semicolon is
7170              invalid.  Allow it unless we're being pedantic.  */
7171           cp_lexer_consume_token (parser->lexer);
7172           if (pedantic && !in_system_header)
7173             pedwarn ("extra %<;%>");
7174           continue;
7175         }
7176
7177       /* If we're entering or exiting a region that's implicitly
7178          extern "C", modify the lang context appropriately.  */
7179       if (!parser->implicit_extern_c && token->implicit_extern_c)
7180         {
7181           push_lang_context (lang_name_c);
7182           parser->implicit_extern_c = true;
7183         }
7184       else if (parser->implicit_extern_c && !token->implicit_extern_c)
7185         {
7186           pop_lang_context ();
7187           parser->implicit_extern_c = false;
7188         }
7189
7190       if (token->type == CPP_PRAGMA)
7191         {
7192           /* A top-level declaration can consist solely of a #pragma.
7193              A nested declaration cannot, so this is done here and not
7194              in cp_parser_declaration.  (A #pragma at block scope is
7195              handled in cp_parser_statement.)  */
7196           cp_parser_pragma (parser, pragma_external);
7197           continue;
7198         }
7199
7200       /* Parse the declaration itself.  */
7201       cp_parser_declaration (parser);
7202     }
7203 }
7204
7205 /* Parse a declaration.
7206
7207    declaration:
7208      block-declaration
7209      function-definition
7210      template-declaration
7211      explicit-instantiation
7212      explicit-specialization
7213      linkage-specification
7214      namespace-definition
7215
7216    GNU extension:
7217
7218    declaration:
7219       __extension__ declaration */
7220
7221 static void
7222 cp_parser_declaration (cp_parser* parser)
7223 {
7224   cp_token token1;
7225   cp_token token2;
7226   int saved_pedantic;
7227   void *p;
7228
7229   /* Check for the `__extension__' keyword.  */
7230   if (cp_parser_extension_opt (parser, &saved_pedantic))
7231     {
7232       /* Parse the qualified declaration.  */
7233       cp_parser_declaration (parser);
7234       /* Restore the PEDANTIC flag.  */
7235       pedantic = saved_pedantic;
7236
7237       return;
7238     }
7239
7240   /* Try to figure out what kind of declaration is present.  */
7241   token1 = *cp_lexer_peek_token (parser->lexer);
7242
7243   if (token1.type != CPP_EOF)
7244     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7245   else
7246     {
7247       token2.type = CPP_EOF;
7248       token2.keyword = RID_MAX;
7249     }
7250
7251   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7252   p = obstack_alloc (&declarator_obstack, 0);
7253
7254   /* If the next token is `extern' and the following token is a string
7255      literal, then we have a linkage specification.  */
7256   if (token1.keyword == RID_EXTERN
7257       && cp_parser_is_string_literal (&token2))
7258     cp_parser_linkage_specification (parser);
7259   /* If the next token is `template', then we have either a template
7260      declaration, an explicit instantiation, or an explicit
7261      specialization.  */
7262   else if (token1.keyword == RID_TEMPLATE)
7263     {
7264       /* `template <>' indicates a template specialization.  */
7265       if (token2.type == CPP_LESS
7266           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
7267         cp_parser_explicit_specialization (parser);
7268       /* `template <' indicates a template declaration.  */
7269       else if (token2.type == CPP_LESS)
7270         cp_parser_template_declaration (parser, /*member_p=*/false);
7271       /* Anything else must be an explicit instantiation.  */
7272       else
7273         cp_parser_explicit_instantiation (parser);
7274     }
7275   /* If the next token is `export', then we have a template
7276      declaration.  */
7277   else if (token1.keyword == RID_EXPORT)
7278     cp_parser_template_declaration (parser, /*member_p=*/false);
7279   /* If the next token is `extern', 'static' or 'inline' and the one
7280      after that is `template', we have a GNU extended explicit
7281      instantiation directive.  */
7282   else if (cp_parser_allow_gnu_extensions_p (parser)
7283            && (token1.keyword == RID_EXTERN
7284                || token1.keyword == RID_STATIC
7285                || token1.keyword == RID_INLINE)
7286            && token2.keyword == RID_TEMPLATE)
7287     cp_parser_explicit_instantiation (parser);
7288   /* If the next token is `namespace', check for a named or unnamed
7289      namespace definition.  */
7290   else if (token1.keyword == RID_NAMESPACE
7291            && (/* A named namespace definition.  */
7292                (token2.type == CPP_NAME
7293                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
7294                     != CPP_EQ))
7295                /* An unnamed namespace definition.  */
7296                || token2.type == CPP_OPEN_BRACE
7297                || token2.keyword == RID_ATTRIBUTE))
7298     cp_parser_namespace_definition (parser);
7299   /* Objective-C++ declaration/definition.  */
7300   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
7301     cp_parser_objc_declaration (parser);
7302   /* We must have either a block declaration or a function
7303      definition.  */
7304   else
7305     /* Try to parse a block-declaration, or a function-definition.  */
7306     cp_parser_block_declaration (parser, /*statement_p=*/false);
7307
7308   /* Free any declarators allocated.  */
7309   obstack_free (&declarator_obstack, p);
7310 }
7311
7312 /* Parse a block-declaration.
7313
7314    block-declaration:
7315      simple-declaration
7316      asm-definition
7317      namespace-alias-definition
7318      using-declaration
7319      using-directive
7320
7321    GNU Extension:
7322
7323    block-declaration:
7324      __extension__ block-declaration
7325      label-declaration
7326
7327    If STATEMENT_P is TRUE, then this block-declaration is occurring as
7328    part of a declaration-statement.  */
7329
7330 static void
7331 cp_parser_block_declaration (cp_parser *parser,
7332                              bool      statement_p)
7333 {
7334   cp_token *token1;
7335   int saved_pedantic;
7336
7337   /* Check for the `__extension__' keyword.  */
7338   if (cp_parser_extension_opt (parser, &saved_pedantic))
7339     {
7340       /* Parse the qualified declaration.  */
7341       cp_parser_block_declaration (parser, statement_p);
7342       /* Restore the PEDANTIC flag.  */
7343       pedantic = saved_pedantic;
7344
7345       return;
7346     }
7347
7348   /* Peek at the next token to figure out which kind of declaration is
7349      present.  */
7350   token1 = cp_lexer_peek_token (parser->lexer);
7351
7352   /* If the next keyword is `asm', we have an asm-definition.  */
7353   if (token1->keyword == RID_ASM)
7354     {
7355       if (statement_p)
7356         cp_parser_commit_to_tentative_parse (parser);
7357       cp_parser_asm_definition (parser);
7358     }
7359   /* If the next keyword is `namespace', we have a
7360      namespace-alias-definition.  */
7361   else if (token1->keyword == RID_NAMESPACE)
7362     cp_parser_namespace_alias_definition (parser);
7363   /* If the next keyword is `using', we have either a
7364      using-declaration or a using-directive.  */
7365   else if (token1->keyword == RID_USING)
7366     {
7367       cp_token *token2;
7368
7369       if (statement_p)
7370         cp_parser_commit_to_tentative_parse (parser);
7371       /* If the token after `using' is `namespace', then we have a
7372          using-directive.  */
7373       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
7374       if (token2->keyword == RID_NAMESPACE)
7375         cp_parser_using_directive (parser);
7376       /* Otherwise, it's a using-declaration.  */
7377       else
7378         cp_parser_using_declaration (parser,
7379                                      /*access_declaration_p=*/false);
7380     }
7381   /* If the next keyword is `__label__' we have a label declaration.  */
7382   else if (token1->keyword == RID_LABEL)
7383     {
7384       if (statement_p)
7385         cp_parser_commit_to_tentative_parse (parser);
7386       cp_parser_label_declaration (parser);
7387     }
7388   /* Anything else must be a simple-declaration.  */
7389   else
7390     cp_parser_simple_declaration (parser, !statement_p);
7391 }
7392
7393 /* Parse a simple-declaration.
7394
7395    simple-declaration:
7396      decl-specifier-seq [opt] init-declarator-list [opt] ;
7397
7398    init-declarator-list:
7399      init-declarator
7400      init-declarator-list , init-declarator
7401
7402    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
7403    function-definition as a simple-declaration.  */
7404
7405 static void
7406 cp_parser_simple_declaration (cp_parser* parser,
7407                               bool function_definition_allowed_p)
7408 {
7409   cp_decl_specifier_seq decl_specifiers;
7410   int declares_class_or_enum;
7411   bool saw_declarator;
7412
7413   /* Defer access checks until we know what is being declared; the
7414      checks for names appearing in the decl-specifier-seq should be
7415      done as if we were in the scope of the thing being declared.  */
7416   push_deferring_access_checks (dk_deferred);
7417
7418   /* Parse the decl-specifier-seq.  We have to keep track of whether
7419      or not the decl-specifier-seq declares a named class or
7420      enumeration type, since that is the only case in which the
7421      init-declarator-list is allowed to be empty.
7422
7423      [dcl.dcl]
7424
7425      In a simple-declaration, the optional init-declarator-list can be
7426      omitted only when declaring a class or enumeration, that is when
7427      the decl-specifier-seq contains either a class-specifier, an
7428      elaborated-type-specifier, or an enum-specifier.  */
7429   cp_parser_decl_specifier_seq (parser,
7430                                 CP_PARSER_FLAGS_OPTIONAL,
7431                                 &decl_specifiers,
7432                                 &declares_class_or_enum);
7433   /* We no longer need to defer access checks.  */
7434   stop_deferring_access_checks ();
7435
7436   /* In a block scope, a valid declaration must always have a
7437      decl-specifier-seq.  By not trying to parse declarators, we can
7438      resolve the declaration/expression ambiguity more quickly.  */
7439   if (!function_definition_allowed_p
7440       && !decl_specifiers.any_specifiers_p)
7441     {
7442       cp_parser_error (parser, "expected declaration");
7443       goto done;
7444     }
7445
7446   /* If the next two tokens are both identifiers, the code is
7447      erroneous. The usual cause of this situation is code like:
7448
7449        T t;
7450
7451      where "T" should name a type -- but does not.  */
7452   if (!decl_specifiers.type
7453       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
7454     {
7455       /* If parsing tentatively, we should commit; we really are
7456          looking at a declaration.  */
7457       cp_parser_commit_to_tentative_parse (parser);
7458       /* Give up.  */
7459       goto done;
7460     }
7461
7462   /* If we have seen at least one decl-specifier, and the next token
7463      is not a parenthesis, then we must be looking at a declaration.
7464      (After "int (" we might be looking at a functional cast.)  */
7465   if (decl_specifiers.any_specifiers_p
7466       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
7467     cp_parser_commit_to_tentative_parse (parser);
7468
7469   /* Keep going until we hit the `;' at the end of the simple
7470      declaration.  */
7471   saw_declarator = false;
7472   while (cp_lexer_next_token_is_not (parser->lexer,
7473                                      CPP_SEMICOLON))
7474     {
7475       cp_token *token;
7476       bool function_definition_p;
7477       tree decl;
7478
7479       if (saw_declarator)
7480         {
7481           /* If we are processing next declarator, coma is expected */
7482           token = cp_lexer_peek_token (parser->lexer);
7483           gcc_assert (token->type == CPP_COMMA);
7484           cp_lexer_consume_token (parser->lexer);
7485         }
7486       else
7487         saw_declarator = true;
7488
7489       /* Parse the init-declarator.  */
7490       decl = cp_parser_init_declarator (parser, &decl_specifiers,
7491                                         /*checks=*/NULL,
7492                                         function_definition_allowed_p,
7493                                         /*member_p=*/false,
7494                                         declares_class_or_enum,
7495                                         &function_definition_p);
7496       /* If an error occurred while parsing tentatively, exit quickly.
7497          (That usually happens when in the body of a function; each
7498          statement is treated as a declaration-statement until proven
7499          otherwise.)  */
7500       if (cp_parser_error_occurred (parser))
7501         goto done;
7502       /* Handle function definitions specially.  */
7503       if (function_definition_p)
7504         {
7505           /* If the next token is a `,', then we are probably
7506              processing something like:
7507
7508                void f() {}, *p;
7509
7510              which is erroneous.  */
7511           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7512             error ("mixing declarations and function-definitions is forbidden");
7513           /* Otherwise, we're done with the list of declarators.  */
7514           else
7515             {
7516               pop_deferring_access_checks ();
7517               return;
7518             }
7519         }
7520       /* The next token should be either a `,' or a `;'.  */
7521       token = cp_lexer_peek_token (parser->lexer);
7522       /* If it's a `,', there are more declarators to come.  */
7523       if (token->type == CPP_COMMA)
7524         /* will be consumed next time around */;
7525       /* If it's a `;', we are done.  */
7526       else if (token->type == CPP_SEMICOLON)
7527         break;
7528       /* Anything else is an error.  */
7529       else
7530         {
7531           /* If we have already issued an error message we don't need
7532              to issue another one.  */
7533           if (decl != error_mark_node
7534               || cp_parser_uncommitted_to_tentative_parse_p (parser))
7535             cp_parser_error (parser, "expected %<,%> or %<;%>");
7536           /* Skip tokens until we reach the end of the statement.  */
7537           cp_parser_skip_to_end_of_statement (parser);
7538           /* If the next token is now a `;', consume it.  */
7539           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7540             cp_lexer_consume_token (parser->lexer);
7541           goto done;
7542         }
7543       /* After the first time around, a function-definition is not
7544          allowed -- even if it was OK at first.  For example:
7545
7546            int i, f() {}
7547
7548          is not valid.  */
7549       function_definition_allowed_p = false;
7550     }
7551
7552   /* Issue an error message if no declarators are present, and the
7553      decl-specifier-seq does not itself declare a class or
7554      enumeration.  */
7555   if (!saw_declarator)
7556     {
7557       if (cp_parser_declares_only_class_p (parser))
7558         shadow_tag (&decl_specifiers);
7559       /* Perform any deferred access checks.  */
7560       perform_deferred_access_checks ();
7561     }
7562
7563   /* Consume the `;'.  */
7564   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7565
7566  done:
7567   pop_deferring_access_checks ();
7568 }
7569
7570 /* Parse a decl-specifier-seq.
7571
7572    decl-specifier-seq:
7573      decl-specifier-seq [opt] decl-specifier
7574
7575    decl-specifier:
7576      storage-class-specifier
7577      type-specifier
7578      function-specifier
7579      friend
7580      typedef
7581
7582    GNU Extension:
7583
7584    decl-specifier:
7585      attributes
7586
7587    Set *DECL_SPECS to a representation of the decl-specifier-seq.
7588
7589    The parser flags FLAGS is used to control type-specifier parsing.
7590
7591    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7592    flags:
7593
7594      1: one of the decl-specifiers is an elaborated-type-specifier
7595         (i.e., a type declaration)
7596      2: one of the decl-specifiers is an enum-specifier or a
7597         class-specifier (i.e., a type definition)
7598
7599    */
7600
7601 static void
7602 cp_parser_decl_specifier_seq (cp_parser* parser,
7603                               cp_parser_flags flags,
7604                               cp_decl_specifier_seq *decl_specs,
7605                               int* declares_class_or_enum)
7606 {
7607   bool constructor_possible_p = !parser->in_declarator_p;
7608
7609   /* Clear DECL_SPECS.  */
7610   clear_decl_specs (decl_specs);
7611
7612   /* Assume no class or enumeration type is declared.  */
7613   *declares_class_or_enum = 0;
7614
7615   /* Keep reading specifiers until there are no more to read.  */
7616   while (true)
7617     {
7618       bool constructor_p;
7619       bool found_decl_spec;
7620       cp_token *token;
7621
7622       /* Peek at the next token.  */
7623       token = cp_lexer_peek_token (parser->lexer);
7624       /* Handle attributes.  */
7625       if (token->keyword == RID_ATTRIBUTE)
7626         {
7627           /* Parse the attributes.  */
7628           decl_specs->attributes
7629             = chainon (decl_specs->attributes,
7630                        cp_parser_attributes_opt (parser));
7631           continue;
7632         }
7633       /* Assume we will find a decl-specifier keyword.  */
7634       found_decl_spec = true;
7635       /* If the next token is an appropriate keyword, we can simply
7636          add it to the list.  */
7637       switch (token->keyword)
7638         {
7639           /* decl-specifier:
7640                friend  */
7641         case RID_FRIEND:
7642           if (!at_class_scope_p ())
7643             {
7644               error ("%<friend%> used outside of class");
7645               cp_lexer_purge_token (parser->lexer);
7646             }
7647           else
7648             {
7649               ++decl_specs->specs[(int) ds_friend];
7650               /* Consume the token.  */
7651               cp_lexer_consume_token (parser->lexer);
7652             }
7653           break;
7654
7655           /* function-specifier:
7656                inline
7657                virtual
7658                explicit  */
7659         case RID_INLINE:
7660         case RID_VIRTUAL:
7661         case RID_EXPLICIT:
7662           cp_parser_function_specifier_opt (parser, decl_specs);
7663           break;
7664
7665           /* decl-specifier:
7666                typedef  */
7667         case RID_TYPEDEF:
7668           ++decl_specs->specs[(int) ds_typedef];
7669           /* Consume the token.  */
7670           cp_lexer_consume_token (parser->lexer);
7671           /* A constructor declarator cannot appear in a typedef.  */
7672           constructor_possible_p = false;
7673           /* The "typedef" keyword can only occur in a declaration; we
7674              may as well commit at this point.  */
7675           cp_parser_commit_to_tentative_parse (parser);
7676
7677           if (decl_specs->storage_class != sc_none)
7678             decl_specs->conflicting_specifiers_p = true;
7679           break;
7680
7681           /* storage-class-specifier:
7682                auto
7683                register
7684                static
7685                extern
7686                mutable
7687
7688              GNU Extension:
7689                thread  */
7690         case RID_AUTO:
7691         case RID_REGISTER:
7692         case RID_STATIC:
7693         case RID_EXTERN:
7694         case RID_MUTABLE:
7695           /* Consume the token.  */
7696           cp_lexer_consume_token (parser->lexer);
7697           cp_parser_set_storage_class (parser, decl_specs, token->keyword);
7698           break;
7699         case RID_THREAD:
7700           /* Consume the token.  */
7701           cp_lexer_consume_token (parser->lexer);
7702           ++decl_specs->specs[(int) ds_thread];
7703           break;
7704
7705         default:
7706           /* We did not yet find a decl-specifier yet.  */
7707           found_decl_spec = false;
7708           break;
7709         }
7710
7711       /* Constructors are a special case.  The `S' in `S()' is not a
7712          decl-specifier; it is the beginning of the declarator.  */
7713       constructor_p
7714         = (!found_decl_spec
7715            && constructor_possible_p
7716            && (cp_parser_constructor_declarator_p
7717                (parser, decl_specs->specs[(int) ds_friend] != 0)));
7718
7719       /* If we don't have a DECL_SPEC yet, then we must be looking at
7720          a type-specifier.  */
7721       if (!found_decl_spec && !constructor_p)
7722         {
7723           int decl_spec_declares_class_or_enum;
7724           bool is_cv_qualifier;
7725           tree type_spec;
7726
7727           type_spec
7728             = cp_parser_type_specifier (parser, flags,
7729                                         decl_specs,
7730                                         /*is_declaration=*/true,
7731                                         &decl_spec_declares_class_or_enum,
7732                                         &is_cv_qualifier);
7733
7734           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
7735
7736           /* If this type-specifier referenced a user-defined type
7737              (a typedef, class-name, etc.), then we can't allow any
7738              more such type-specifiers henceforth.
7739
7740              [dcl.spec]
7741
7742              The longest sequence of decl-specifiers that could
7743              possibly be a type name is taken as the
7744              decl-specifier-seq of a declaration.  The sequence shall
7745              be self-consistent as described below.
7746
7747              [dcl.type]
7748
7749              As a general rule, at most one type-specifier is allowed
7750              in the complete decl-specifier-seq of a declaration.  The
7751              only exceptions are the following:
7752
7753              -- const or volatile can be combined with any other
7754                 type-specifier.
7755
7756              -- signed or unsigned can be combined with char, long,
7757                 short, or int.
7758
7759              -- ..
7760
7761              Example:
7762
7763                typedef char* Pc;
7764                void g (const int Pc);
7765
7766              Here, Pc is *not* part of the decl-specifier seq; it's
7767              the declarator.  Therefore, once we see a type-specifier
7768              (other than a cv-qualifier), we forbid any additional
7769              user-defined types.  We *do* still allow things like `int
7770              int' to be considered a decl-specifier-seq, and issue the
7771              error message later.  */
7772           if (type_spec && !is_cv_qualifier)
7773             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
7774           /* A constructor declarator cannot follow a type-specifier.  */
7775           if (type_spec)
7776             {
7777               constructor_possible_p = false;
7778               found_decl_spec = true;
7779             }
7780         }
7781
7782       /* If we still do not have a DECL_SPEC, then there are no more
7783          decl-specifiers.  */
7784       if (!found_decl_spec)
7785         break;
7786
7787       decl_specs->any_specifiers_p = true;
7788       /* After we see one decl-specifier, further decl-specifiers are
7789          always optional.  */
7790       flags |= CP_PARSER_FLAGS_OPTIONAL;
7791     }
7792
7793   cp_parser_check_decl_spec (decl_specs);
7794
7795   /* Don't allow a friend specifier with a class definition.  */
7796   if (decl_specs->specs[(int) ds_friend] != 0
7797       && (*declares_class_or_enum & 2))
7798     error ("class definition may not be declared a friend");
7799 }
7800
7801 /* Parse an (optional) storage-class-specifier.
7802
7803    storage-class-specifier:
7804      auto
7805      register
7806      static
7807      extern
7808      mutable
7809
7810    GNU Extension:
7811
7812    storage-class-specifier:
7813      thread
7814
7815    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7816
7817 static tree
7818 cp_parser_storage_class_specifier_opt (cp_parser* parser)
7819 {
7820   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7821     {
7822     case RID_AUTO:
7823     case RID_REGISTER:
7824     case RID_STATIC:
7825     case RID_EXTERN:
7826     case RID_MUTABLE:
7827     case RID_THREAD:
7828       /* Consume the token.  */
7829       return cp_lexer_consume_token (parser->lexer)->u.value;
7830
7831     default:
7832       return NULL_TREE;
7833     }
7834 }
7835
7836 /* Parse an (optional) function-specifier.
7837
7838    function-specifier:
7839      inline
7840      virtual
7841      explicit
7842
7843    Returns an IDENTIFIER_NODE corresponding to the keyword used.
7844    Updates DECL_SPECS, if it is non-NULL.  */
7845
7846 static tree
7847 cp_parser_function_specifier_opt (cp_parser* parser,
7848                                   cp_decl_specifier_seq *decl_specs)
7849 {
7850   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7851     {
7852     case RID_INLINE:
7853       if (decl_specs)
7854         ++decl_specs->specs[(int) ds_inline];
7855       break;
7856
7857     case RID_VIRTUAL:
7858       /* 14.5.2.3 [temp.mem]
7859
7860          A member function template shall not be virtual.  */
7861       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7862         error ("templates may not be %<virtual%>");
7863       else if (decl_specs)
7864         ++decl_specs->specs[(int) ds_virtual];
7865       break;
7866
7867     case RID_EXPLICIT:
7868       if (decl_specs)
7869         ++decl_specs->specs[(int) ds_explicit];
7870       break;
7871
7872     default:
7873       return NULL_TREE;
7874     }
7875
7876   /* Consume the token.  */
7877   return cp_lexer_consume_token (parser->lexer)->u.value;
7878 }
7879
7880 /* Parse a linkage-specification.
7881
7882    linkage-specification:
7883      extern string-literal { declaration-seq [opt] }
7884      extern string-literal declaration  */
7885
7886 static void
7887 cp_parser_linkage_specification (cp_parser* parser)
7888 {
7889   tree linkage;
7890
7891   /* Look for the `extern' keyword.  */
7892   cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7893
7894   /* Look for the string-literal.  */
7895   linkage = cp_parser_string_literal (parser, false, false);
7896
7897   /* Transform the literal into an identifier.  If the literal is a
7898      wide-character string, or contains embedded NULs, then we can't
7899      handle it as the user wants.  */
7900   if (strlen (TREE_STRING_POINTER (linkage))
7901       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
7902     {
7903       cp_parser_error (parser, "invalid linkage-specification");
7904       /* Assume C++ linkage.  */
7905       linkage = lang_name_cplusplus;
7906     }
7907   else
7908     linkage = get_identifier (TREE_STRING_POINTER (linkage));
7909
7910   /* We're now using the new linkage.  */
7911   push_lang_context (linkage);
7912
7913   /* If the next token is a `{', then we're using the first
7914      production.  */
7915   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7916     {
7917       /* Consume the `{' token.  */
7918       cp_lexer_consume_token (parser->lexer);
7919       /* Parse the declarations.  */
7920       cp_parser_declaration_seq_opt (parser);
7921       /* Look for the closing `}'.  */
7922       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7923     }
7924   /* Otherwise, there's just one declaration.  */
7925   else
7926     {
7927       bool saved_in_unbraced_linkage_specification_p;
7928
7929       saved_in_unbraced_linkage_specification_p
7930         = parser->in_unbraced_linkage_specification_p;
7931       parser->in_unbraced_linkage_specification_p = true;
7932       cp_parser_declaration (parser);
7933       parser->in_unbraced_linkage_specification_p
7934         = saved_in_unbraced_linkage_specification_p;
7935     }
7936
7937   /* We're done with the linkage-specification.  */
7938   pop_lang_context ();
7939 }
7940
7941 /* Special member functions [gram.special] */
7942
7943 /* Parse a conversion-function-id.
7944
7945    conversion-function-id:
7946      operator conversion-type-id
7947
7948    Returns an IDENTIFIER_NODE representing the operator.  */
7949
7950 static tree
7951 cp_parser_conversion_function_id (cp_parser* parser)
7952 {
7953   tree type;
7954   tree saved_scope;
7955   tree saved_qualifying_scope;
7956   tree saved_object_scope;
7957   tree pushed_scope = NULL_TREE;
7958
7959   /* Look for the `operator' token.  */
7960   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7961     return error_mark_node;
7962   /* When we parse the conversion-type-id, the current scope will be
7963      reset.  However, we need that information in able to look up the
7964      conversion function later, so we save it here.  */
7965   saved_scope = parser->scope;
7966   saved_qualifying_scope = parser->qualifying_scope;
7967   saved_object_scope = parser->object_scope;
7968   /* We must enter the scope of the class so that the names of
7969      entities declared within the class are available in the
7970      conversion-type-id.  For example, consider:
7971
7972        struct S {
7973          typedef int I;
7974          operator I();
7975        };
7976
7977        S::operator I() { ... }
7978
7979      In order to see that `I' is a type-name in the definition, we
7980      must be in the scope of `S'.  */
7981   if (saved_scope)
7982     pushed_scope = push_scope (saved_scope);
7983   /* Parse the conversion-type-id.  */
7984   type = cp_parser_conversion_type_id (parser);
7985   /* Leave the scope of the class, if any.  */
7986   if (pushed_scope)
7987     pop_scope (pushed_scope);
7988   /* Restore the saved scope.  */
7989   parser->scope = saved_scope;
7990   parser->qualifying_scope = saved_qualifying_scope;
7991   parser->object_scope = saved_object_scope;
7992   /* If the TYPE is invalid, indicate failure.  */
7993   if (type == error_mark_node)
7994     return error_mark_node;
7995   return mangle_conv_op_name_for_type (type);
7996 }
7997
7998 /* Parse a conversion-type-id:
7999
8000    conversion-type-id:
8001      type-specifier-seq conversion-declarator [opt]
8002
8003    Returns the TYPE specified.  */
8004
8005 static tree
8006 cp_parser_conversion_type_id (cp_parser* parser)
8007 {
8008   tree attributes;
8009   cp_decl_specifier_seq type_specifiers;
8010   cp_declarator *declarator;
8011   tree type_specified;
8012
8013   /* Parse the attributes.  */
8014   attributes = cp_parser_attributes_opt (parser);
8015   /* Parse the type-specifiers.  */
8016   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
8017                                 &type_specifiers);
8018   /* If that didn't work, stop.  */
8019   if (type_specifiers.type == error_mark_node)
8020     return error_mark_node;
8021   /* Parse the conversion-declarator.  */
8022   declarator = cp_parser_conversion_declarator_opt (parser);
8023
8024   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
8025                                     /*initialized=*/0, &attributes);
8026   if (attributes)
8027     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
8028   return type_specified;
8029 }
8030
8031 /* Parse an (optional) conversion-declarator.
8032
8033    conversion-declarator:
8034      ptr-operator conversion-declarator [opt]
8035
8036    */
8037
8038 static cp_declarator *
8039 cp_parser_conversion_declarator_opt (cp_parser* parser)
8040 {
8041   enum tree_code code;
8042   tree class_type;
8043   cp_cv_quals cv_quals;
8044
8045   /* We don't know if there's a ptr-operator next, or not.  */
8046   cp_parser_parse_tentatively (parser);
8047   /* Try the ptr-operator.  */
8048   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
8049   /* If it worked, look for more conversion-declarators.  */
8050   if (cp_parser_parse_definitely (parser))
8051     {
8052       cp_declarator *declarator;
8053
8054       /* Parse another optional declarator.  */
8055       declarator = cp_parser_conversion_declarator_opt (parser);
8056
8057       /* Create the representation of the declarator.  */
8058       if (class_type)
8059         declarator = make_ptrmem_declarator (cv_quals, class_type,
8060                                              declarator);
8061       else if (code == INDIRECT_REF)
8062         declarator = make_pointer_declarator (cv_quals, declarator);
8063       else
8064         declarator = make_reference_declarator (cv_quals, declarator);
8065
8066       return declarator;
8067    }
8068
8069   return NULL;
8070 }
8071
8072 /* Parse an (optional) ctor-initializer.
8073
8074    ctor-initializer:
8075      : mem-initializer-list
8076
8077    Returns TRUE iff the ctor-initializer was actually present.  */
8078
8079 static bool
8080 cp_parser_ctor_initializer_opt (cp_parser* parser)
8081 {
8082   /* If the next token is not a `:', then there is no
8083      ctor-initializer.  */
8084   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
8085     {
8086       /* Do default initialization of any bases and members.  */
8087       if (DECL_CONSTRUCTOR_P (current_function_decl))
8088         finish_mem_initializers (NULL_TREE);
8089
8090       return false;
8091     }
8092
8093   /* Consume the `:' token.  */
8094   cp_lexer_consume_token (parser->lexer);
8095   /* And the mem-initializer-list.  */
8096   cp_parser_mem_initializer_list (parser);
8097
8098   return true;
8099 }
8100
8101 /* Parse a mem-initializer-list.
8102
8103    mem-initializer-list:
8104      mem-initializer
8105      mem-initializer , mem-initializer-list  */
8106
8107 static void
8108 cp_parser_mem_initializer_list (cp_parser* parser)
8109 {
8110   tree mem_initializer_list = NULL_TREE;
8111
8112   /* Let the semantic analysis code know that we are starting the
8113      mem-initializer-list.  */
8114   if (!DECL_CONSTRUCTOR_P (current_function_decl))
8115     error ("only constructors take base initializers");
8116
8117   /* Loop through the list.  */
8118   while (true)
8119     {
8120       tree mem_initializer;
8121
8122       /* Parse the mem-initializer.  */
8123       mem_initializer = cp_parser_mem_initializer (parser);
8124       /* Add it to the list, unless it was erroneous.  */
8125       if (mem_initializer != error_mark_node)
8126         {
8127           TREE_CHAIN (mem_initializer) = mem_initializer_list;
8128           mem_initializer_list = mem_initializer;
8129         }
8130       /* If the next token is not a `,', we're done.  */
8131       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8132         break;
8133       /* Consume the `,' token.  */
8134       cp_lexer_consume_token (parser->lexer);
8135     }
8136
8137   /* Perform semantic analysis.  */
8138   if (DECL_CONSTRUCTOR_P (current_function_decl))
8139     finish_mem_initializers (mem_initializer_list);
8140 }
8141
8142 /* Parse a mem-initializer.
8143
8144    mem-initializer:
8145      mem-initializer-id ( expression-list [opt] )
8146
8147    GNU extension:
8148
8149    mem-initializer:
8150      ( expression-list [opt] )
8151
8152    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
8153    class) or FIELD_DECL (for a non-static data member) to initialize;
8154    the TREE_VALUE is the expression-list.  An empty initialization
8155    list is represented by void_list_node.  */
8156
8157 static tree
8158 cp_parser_mem_initializer (cp_parser* parser)
8159 {
8160   tree mem_initializer_id;
8161   tree expression_list;
8162   tree member;
8163
8164   /* Find out what is being initialized.  */
8165   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
8166     {
8167       pedwarn ("anachronistic old-style base class initializer");
8168       mem_initializer_id = NULL_TREE;
8169     }
8170   else
8171     mem_initializer_id = cp_parser_mem_initializer_id (parser);
8172   member = expand_member_init (mem_initializer_id);
8173   if (member && !DECL_P (member))
8174     in_base_initializer = 1;
8175
8176   expression_list
8177     = cp_parser_parenthesized_expression_list (parser, false,
8178                                                /*cast_p=*/false,
8179                                                /*non_constant_p=*/NULL);
8180   if (expression_list == error_mark_node)
8181     return error_mark_node;
8182   if (!expression_list)
8183     expression_list = void_type_node;
8184
8185   in_base_initializer = 0;
8186
8187   return member ? build_tree_list (member, expression_list) : error_mark_node;
8188 }
8189
8190 /* Parse a mem-initializer-id.
8191
8192    mem-initializer-id:
8193      :: [opt] nested-name-specifier [opt] class-name
8194      identifier
8195
8196    Returns a TYPE indicating the class to be initializer for the first
8197    production.  Returns an IDENTIFIER_NODE indicating the data member
8198    to be initialized for the second production.  */
8199
8200 static tree
8201 cp_parser_mem_initializer_id (cp_parser* parser)
8202 {
8203   bool global_scope_p;
8204   bool nested_name_specifier_p;
8205   bool template_p = false;
8206   tree id;
8207
8208   /* `typename' is not allowed in this context ([temp.res]).  */
8209   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
8210     {
8211       error ("keyword %<typename%> not allowed in this context (a qualified "
8212              "member initializer is implicitly a type)");
8213       cp_lexer_consume_token (parser->lexer);
8214     }
8215   /* Look for the optional `::' operator.  */
8216   global_scope_p
8217     = (cp_parser_global_scope_opt (parser,
8218                                    /*current_scope_valid_p=*/false)
8219        != NULL_TREE);
8220   /* Look for the optional nested-name-specifier.  The simplest way to
8221      implement:
8222
8223        [temp.res]
8224
8225        The keyword `typename' is not permitted in a base-specifier or
8226        mem-initializer; in these contexts a qualified name that
8227        depends on a template-parameter is implicitly assumed to be a
8228        type name.
8229
8230      is to assume that we have seen the `typename' keyword at this
8231      point.  */
8232   nested_name_specifier_p
8233     = (cp_parser_nested_name_specifier_opt (parser,
8234                                             /*typename_keyword_p=*/true,
8235                                             /*check_dependency_p=*/true,
8236                                             /*type_p=*/true,
8237                                             /*is_declaration=*/true)
8238        != NULL_TREE);
8239   if (nested_name_specifier_p)
8240     template_p = cp_parser_optional_template_keyword (parser);
8241   /* If there is a `::' operator or a nested-name-specifier, then we
8242      are definitely looking for a class-name.  */
8243   if (global_scope_p || nested_name_specifier_p)
8244     return cp_parser_class_name (parser,
8245                                  /*typename_keyword_p=*/true,
8246                                  /*template_keyword_p=*/template_p,
8247                                  none_type,
8248                                  /*check_dependency_p=*/true,
8249                                  /*class_head_p=*/false,
8250                                  /*is_declaration=*/true);
8251   /* Otherwise, we could also be looking for an ordinary identifier.  */
8252   cp_parser_parse_tentatively (parser);
8253   /* Try a class-name.  */
8254   id = cp_parser_class_name (parser,
8255                              /*typename_keyword_p=*/true,
8256                              /*template_keyword_p=*/false,
8257                              none_type,
8258                              /*check_dependency_p=*/true,
8259                              /*class_head_p=*/false,
8260                              /*is_declaration=*/true);
8261   /* If we found one, we're done.  */
8262   if (cp_parser_parse_definitely (parser))
8263     return id;
8264   /* Otherwise, look for an ordinary identifier.  */
8265   return cp_parser_identifier (parser);
8266 }
8267
8268 /* Overloading [gram.over] */
8269
8270 /* Parse an operator-function-id.
8271
8272    operator-function-id:
8273      operator operator
8274
8275    Returns an IDENTIFIER_NODE for the operator which is a
8276    human-readable spelling of the identifier, e.g., `operator +'.  */
8277
8278 static tree
8279 cp_parser_operator_function_id (cp_parser* parser)
8280 {
8281   /* Look for the `operator' keyword.  */
8282   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
8283     return error_mark_node;
8284   /* And then the name of the operator itself.  */
8285   return cp_parser_operator (parser);
8286 }
8287
8288 /* Parse an operator.
8289
8290    operator:
8291      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
8292      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
8293      || ++ -- , ->* -> () []
8294
8295    GNU Extensions:
8296
8297    operator:
8298      <? >? <?= >?=
8299
8300    Returns an IDENTIFIER_NODE for the operator which is a
8301    human-readable spelling of the identifier, e.g., `operator +'.  */
8302
8303 static tree
8304 cp_parser_operator (cp_parser* parser)
8305 {
8306   tree id = NULL_TREE;
8307   cp_token *token;
8308
8309   /* Peek at the next token.  */
8310   token = cp_lexer_peek_token (parser->lexer);
8311   /* Figure out which operator we have.  */
8312   switch (token->type)
8313     {
8314     case CPP_KEYWORD:
8315       {
8316         enum tree_code op;
8317
8318         /* The keyword should be either `new' or `delete'.  */
8319         if (token->keyword == RID_NEW)
8320           op = NEW_EXPR;
8321         else if (token->keyword == RID_DELETE)
8322           op = DELETE_EXPR;
8323         else
8324           break;
8325
8326         /* Consume the `new' or `delete' token.  */
8327         cp_lexer_consume_token (parser->lexer);
8328
8329         /* Peek at the next token.  */
8330         token = cp_lexer_peek_token (parser->lexer);
8331         /* If it's a `[' token then this is the array variant of the
8332            operator.  */
8333         if (token->type == CPP_OPEN_SQUARE)
8334           {
8335             /* Consume the `[' token.  */
8336             cp_lexer_consume_token (parser->lexer);
8337             /* Look for the `]' token.  */
8338             cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8339             id = ansi_opname (op == NEW_EXPR
8340                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
8341           }
8342         /* Otherwise, we have the non-array variant.  */
8343         else
8344           id = ansi_opname (op);
8345
8346         return id;
8347       }
8348
8349     case CPP_PLUS:
8350       id = ansi_opname (PLUS_EXPR);
8351       break;
8352
8353     case CPP_MINUS:
8354       id = ansi_opname (MINUS_EXPR);
8355       break;
8356
8357     case CPP_MULT:
8358       id = ansi_opname (MULT_EXPR);
8359       break;
8360
8361     case CPP_DIV:
8362       id = ansi_opname (TRUNC_DIV_EXPR);
8363       break;
8364
8365     case CPP_MOD:
8366       id = ansi_opname (TRUNC_MOD_EXPR);
8367       break;
8368
8369     case CPP_XOR:
8370       id = ansi_opname (BIT_XOR_EXPR);
8371       break;
8372
8373     case CPP_AND:
8374       id = ansi_opname (BIT_AND_EXPR);
8375       break;
8376
8377     case CPP_OR:
8378       id = ansi_opname (BIT_IOR_EXPR);
8379       break;
8380
8381     case CPP_COMPL:
8382       id = ansi_opname (BIT_NOT_EXPR);
8383       break;
8384
8385     case CPP_NOT:
8386       id = ansi_opname (TRUTH_NOT_EXPR);
8387       break;
8388
8389     case CPP_EQ:
8390       id = ansi_assopname (NOP_EXPR);
8391       break;
8392
8393     case CPP_LESS:
8394       id = ansi_opname (LT_EXPR);
8395       break;
8396
8397     case CPP_GREATER:
8398       id = ansi_opname (GT_EXPR);
8399       break;
8400
8401     case CPP_PLUS_EQ:
8402       id = ansi_assopname (PLUS_EXPR);
8403       break;
8404
8405     case CPP_MINUS_EQ:
8406       id = ansi_assopname (MINUS_EXPR);
8407       break;
8408
8409     case CPP_MULT_EQ:
8410       id = ansi_assopname (MULT_EXPR);
8411       break;
8412
8413     case CPP_DIV_EQ:
8414       id = ansi_assopname (TRUNC_DIV_EXPR);
8415       break;
8416
8417     case CPP_MOD_EQ:
8418       id = ansi_assopname (TRUNC_MOD_EXPR);
8419       break;
8420
8421     case CPP_XOR_EQ:
8422       id = ansi_assopname (BIT_XOR_EXPR);
8423       break;
8424
8425     case CPP_AND_EQ:
8426       id = ansi_assopname (BIT_AND_EXPR);
8427       break;
8428
8429     case CPP_OR_EQ:
8430       id = ansi_assopname (BIT_IOR_EXPR);
8431       break;
8432
8433     case CPP_LSHIFT:
8434       id = ansi_opname (LSHIFT_EXPR);
8435       break;
8436
8437     case CPP_RSHIFT:
8438       id = ansi_opname (RSHIFT_EXPR);
8439       break;
8440
8441     case CPP_LSHIFT_EQ:
8442       id = ansi_assopname (LSHIFT_EXPR);
8443       break;
8444
8445     case CPP_RSHIFT_EQ:
8446       id = ansi_assopname (RSHIFT_EXPR);
8447       break;
8448
8449     case CPP_EQ_EQ:
8450       id = ansi_opname (EQ_EXPR);
8451       break;
8452
8453     case CPP_NOT_EQ:
8454       id = ansi_opname (NE_EXPR);
8455       break;
8456
8457     case CPP_LESS_EQ:
8458       id = ansi_opname (LE_EXPR);
8459       break;
8460
8461     case CPP_GREATER_EQ:
8462       id = ansi_opname (GE_EXPR);
8463       break;
8464
8465     case CPP_AND_AND:
8466       id = ansi_opname (TRUTH_ANDIF_EXPR);
8467       break;
8468
8469     case CPP_OR_OR:
8470       id = ansi_opname (TRUTH_ORIF_EXPR);
8471       break;
8472
8473     case CPP_PLUS_PLUS:
8474       id = ansi_opname (POSTINCREMENT_EXPR);
8475       break;
8476
8477     case CPP_MINUS_MINUS:
8478       id = ansi_opname (PREDECREMENT_EXPR);
8479       break;
8480
8481     case CPP_COMMA:
8482       id = ansi_opname (COMPOUND_EXPR);
8483       break;
8484
8485     case CPP_DEREF_STAR:
8486       id = ansi_opname (MEMBER_REF);
8487       break;
8488
8489     case CPP_DEREF:
8490       id = ansi_opname (COMPONENT_REF);
8491       break;
8492
8493     case CPP_OPEN_PAREN:
8494       /* Consume the `('.  */
8495       cp_lexer_consume_token (parser->lexer);
8496       /* Look for the matching `)'.  */
8497       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8498       return ansi_opname (CALL_EXPR);
8499
8500     case CPP_OPEN_SQUARE:
8501       /* Consume the `['.  */
8502       cp_lexer_consume_token (parser->lexer);
8503       /* Look for the matching `]'.  */
8504       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8505       return ansi_opname (ARRAY_REF);
8506
8507     default:
8508       /* Anything else is an error.  */
8509       break;
8510     }
8511
8512   /* If we have selected an identifier, we need to consume the
8513      operator token.  */
8514   if (id)
8515     cp_lexer_consume_token (parser->lexer);
8516   /* Otherwise, no valid operator name was present.  */
8517   else
8518     {
8519       cp_parser_error (parser, "expected operator");
8520       id = error_mark_node;
8521     }
8522
8523   return id;
8524 }
8525
8526 /* Parse a template-declaration.
8527
8528    template-declaration:
8529      export [opt] template < template-parameter-list > declaration
8530
8531    If MEMBER_P is TRUE, this template-declaration occurs within a
8532    class-specifier.
8533
8534    The grammar rule given by the standard isn't correct.  What
8535    is really meant is:
8536
8537    template-declaration:
8538      export [opt] template-parameter-list-seq
8539        decl-specifier-seq [opt] init-declarator [opt] ;
8540      export [opt] template-parameter-list-seq
8541        function-definition
8542
8543    template-parameter-list-seq:
8544      template-parameter-list-seq [opt]
8545      template < template-parameter-list >  */
8546
8547 static void
8548 cp_parser_template_declaration (cp_parser* parser, bool member_p)
8549 {
8550   /* Check for `export'.  */
8551   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8552     {
8553       /* Consume the `export' token.  */
8554       cp_lexer_consume_token (parser->lexer);
8555       /* Warn that we do not support `export'.  */
8556       warning (0, "keyword %<export%> not implemented, and will be ignored");
8557     }
8558
8559   cp_parser_template_declaration_after_export (parser, member_p);
8560 }
8561
8562 /* Parse a template-parameter-list.
8563
8564    template-parameter-list:
8565      template-parameter
8566      template-parameter-list , template-parameter
8567
8568    Returns a TREE_LIST.  Each node represents a template parameter.
8569    The nodes are connected via their TREE_CHAINs.  */
8570
8571 static tree
8572 cp_parser_template_parameter_list (cp_parser* parser)
8573 {
8574   tree parameter_list = NULL_TREE;
8575
8576   begin_template_parm_list ();
8577   while (true)
8578     {
8579       tree parameter;
8580       cp_token *token;
8581       bool is_non_type;
8582
8583       /* Parse the template-parameter.  */
8584       parameter = cp_parser_template_parameter (parser, &is_non_type);
8585       /* Add it to the list.  */
8586       if (parameter != error_mark_node)
8587         parameter_list = process_template_parm (parameter_list,
8588                                                 parameter,
8589                                                 is_non_type);
8590       else
8591        {
8592          tree err_parm = build_tree_list (parameter, parameter);
8593          TREE_VALUE (err_parm) = error_mark_node;
8594          parameter_list = chainon (parameter_list, err_parm);
8595        }
8596
8597       /* Peek at the next token.  */
8598       token = cp_lexer_peek_token (parser->lexer);
8599       /* If it's not a `,', we're done.  */
8600       if (token->type != CPP_COMMA)
8601         break;
8602       /* Otherwise, consume the `,' token.  */
8603       cp_lexer_consume_token (parser->lexer);
8604     }
8605
8606   return end_template_parm_list (parameter_list);
8607 }
8608
8609 /* Parse a template-parameter.
8610
8611    template-parameter:
8612      type-parameter
8613      parameter-declaration
8614
8615    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
8616    the parameter.  The TREE_PURPOSE is the default value, if any.
8617    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
8618    iff this parameter is a non-type parameter.  */
8619
8620 static tree
8621 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
8622 {
8623   cp_token *token;
8624   cp_parameter_declarator *parameter_declarator;
8625   tree parm;
8626
8627   /* Assume it is a type parameter or a template parameter.  */
8628   *is_non_type = false;
8629   /* Peek at the next token.  */
8630   token = cp_lexer_peek_token (parser->lexer);
8631   /* If it is `class' or `template', we have a type-parameter.  */
8632   if (token->keyword == RID_TEMPLATE)
8633     return cp_parser_type_parameter (parser);
8634   /* If it is `class' or `typename' we do not know yet whether it is a
8635      type parameter or a non-type parameter.  Consider:
8636
8637        template <typename T, typename T::X X> ...
8638
8639      or:
8640
8641        template <class C, class D*> ...
8642
8643      Here, the first parameter is a type parameter, and the second is
8644      a non-type parameter.  We can tell by looking at the token after
8645      the identifier -- if it is a `,', `=', or `>' then we have a type
8646      parameter.  */
8647   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
8648     {
8649       /* Peek at the token after `class' or `typename'.  */
8650       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8651       /* If it's an identifier, skip it.  */
8652       if (token->type == CPP_NAME)
8653         token = cp_lexer_peek_nth_token (parser->lexer, 3);
8654       /* Now, see if the token looks like the end of a template
8655          parameter.  */
8656       if (token->type == CPP_COMMA
8657           || token->type == CPP_EQ
8658           || token->type == CPP_GREATER)
8659         return cp_parser_type_parameter (parser);
8660     }
8661
8662   /* Otherwise, it is a non-type parameter.
8663
8664      [temp.param]
8665
8666      When parsing a default template-argument for a non-type
8667      template-parameter, the first non-nested `>' is taken as the end
8668      of the template parameter-list rather than a greater-than
8669      operator.  */
8670   *is_non_type = true;
8671   parameter_declarator
8672      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
8673                                         /*parenthesized_p=*/NULL);
8674   parm = grokdeclarator (parameter_declarator->declarator,
8675                          &parameter_declarator->decl_specifiers,
8676                          PARM, /*initialized=*/0,
8677                          /*attrlist=*/NULL);
8678   if (parm == error_mark_node)
8679     return error_mark_node;
8680   return build_tree_list (parameter_declarator->default_argument, parm);
8681 }
8682
8683 /* Parse a type-parameter.
8684
8685    type-parameter:
8686      class identifier [opt]
8687      class identifier [opt] = type-id
8688      typename identifier [opt]
8689      typename identifier [opt] = type-id
8690      template < template-parameter-list > class identifier [opt]
8691      template < template-parameter-list > class identifier [opt]
8692        = id-expression
8693
8694    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
8695    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
8696    the declaration of the parameter.  */
8697
8698 static tree
8699 cp_parser_type_parameter (cp_parser* parser)
8700 {
8701   cp_token *token;
8702   tree parameter;
8703
8704   /* Look for a keyword to tell us what kind of parameter this is.  */
8705   token = cp_parser_require (parser, CPP_KEYWORD,
8706                              "`class', `typename', or `template'");
8707   if (!token)
8708     return error_mark_node;
8709
8710   switch (token->keyword)
8711     {
8712     case RID_CLASS:
8713     case RID_TYPENAME:
8714       {
8715         tree identifier;
8716         tree default_argument;
8717
8718         /* If the next token is an identifier, then it names the
8719            parameter.  */
8720         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8721           identifier = cp_parser_identifier (parser);
8722         else
8723           identifier = NULL_TREE;
8724
8725         /* Create the parameter.  */
8726         parameter = finish_template_type_parm (class_type_node, identifier);
8727
8728         /* If the next token is an `=', we have a default argument.  */
8729         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8730           {
8731             /* Consume the `=' token.  */
8732             cp_lexer_consume_token (parser->lexer);
8733             /* Parse the default-argument.  */
8734             push_deferring_access_checks (dk_no_deferred);
8735             default_argument = cp_parser_type_id (parser);
8736             pop_deferring_access_checks ();
8737           }
8738         else
8739           default_argument = NULL_TREE;
8740
8741         /* Create the combined representation of the parameter and the
8742            default argument.  */
8743         parameter = build_tree_list (default_argument, parameter);
8744       }
8745       break;
8746
8747     case RID_TEMPLATE:
8748       {
8749         tree parameter_list;
8750         tree identifier;
8751         tree default_argument;
8752
8753         /* Look for the `<'.  */
8754         cp_parser_require (parser, CPP_LESS, "`<'");
8755         /* Parse the template-parameter-list.  */
8756         parameter_list = cp_parser_template_parameter_list (parser);
8757         /* Look for the `>'.  */
8758         cp_parser_require (parser, CPP_GREATER, "`>'");
8759         /* Look for the `class' keyword.  */
8760         cp_parser_require_keyword (parser, RID_CLASS, "`class'");
8761         /* If the next token is an `=', then there is a
8762            default-argument.  If the next token is a `>', we are at
8763            the end of the parameter-list.  If the next token is a `,',
8764            then we are at the end of this parameter.  */
8765         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8766             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
8767             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8768           {
8769             identifier = cp_parser_identifier (parser);
8770             /* Treat invalid names as if the parameter were nameless.  */
8771             if (identifier == error_mark_node)
8772               identifier = NULL_TREE;
8773           }
8774         else
8775           identifier = NULL_TREE;
8776
8777         /* Create the template parameter.  */
8778         parameter = finish_template_template_parm (class_type_node,
8779                                                    identifier);
8780
8781         /* If the next token is an `=', then there is a
8782            default-argument.  */
8783         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8784           {
8785             bool is_template;
8786
8787             /* Consume the `='.  */
8788             cp_lexer_consume_token (parser->lexer);
8789             /* Parse the id-expression.  */
8790             push_deferring_access_checks (dk_no_deferred);
8791             default_argument
8792               = cp_parser_id_expression (parser,
8793                                          /*template_keyword_p=*/false,
8794                                          /*check_dependency_p=*/true,
8795                                          /*template_p=*/&is_template,
8796                                          /*declarator_p=*/false,
8797                                          /*optional_p=*/false);
8798             if (TREE_CODE (default_argument) == TYPE_DECL)
8799               /* If the id-expression was a template-id that refers to
8800                  a template-class, we already have the declaration here,
8801                  so no further lookup is needed.  */
8802                  ;
8803             else
8804               /* Look up the name.  */
8805               default_argument
8806                 = cp_parser_lookup_name (parser, default_argument,
8807                                          none_type,
8808                                          /*is_template=*/is_template,
8809                                          /*is_namespace=*/false,
8810                                          /*check_dependency=*/true,
8811                                          /*ambiguous_decls=*/NULL);
8812             /* See if the default argument is valid.  */
8813             default_argument
8814               = check_template_template_default_arg (default_argument);
8815             pop_deferring_access_checks ();
8816           }
8817         else
8818           default_argument = NULL_TREE;
8819
8820         /* Create the combined representation of the parameter and the
8821            default argument.  */
8822         parameter = build_tree_list (default_argument, parameter);
8823       }
8824       break;
8825
8826     default:
8827       gcc_unreachable ();
8828       break;
8829     }
8830
8831   return parameter;
8832 }
8833
8834 /* Parse a template-id.
8835
8836    template-id:
8837      template-name < template-argument-list [opt] >
8838
8839    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8840    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8841    returned.  Otherwise, if the template-name names a function, or set
8842    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8843    names a class, returns a TYPE_DECL for the specialization.
8844
8845    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8846    uninstantiated templates.  */
8847
8848 static tree
8849 cp_parser_template_id (cp_parser *parser,
8850                        bool template_keyword_p,
8851                        bool check_dependency_p,
8852                        bool is_declaration)
8853 {
8854   int i;
8855   tree template;
8856   tree arguments;
8857   tree template_id;
8858   cp_token_position start_of_id = 0;
8859   deferred_access_check *chk;
8860   VEC (deferred_access_check,gc) *access_check;
8861   cp_token *next_token, *next_token_2;
8862   bool is_identifier;
8863
8864   /* If the next token corresponds to a template-id, there is no need
8865      to reparse it.  */
8866   next_token = cp_lexer_peek_token (parser->lexer);
8867   if (next_token->type == CPP_TEMPLATE_ID)
8868     {
8869       struct tree_check *check_value;
8870
8871       /* Get the stored value.  */
8872       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
8873       /* Perform any access checks that were deferred.  */
8874       access_check = check_value->checks;
8875       if (access_check)
8876         {
8877           for (i = 0 ;
8878                VEC_iterate (deferred_access_check, access_check, i, chk) ;
8879                ++i)
8880             {
8881               perform_or_defer_access_check (chk->binfo,
8882                                              chk->decl,
8883                                              chk->diag_decl);
8884             }
8885         }
8886       /* Return the stored value.  */
8887       return check_value->value;
8888     }
8889
8890   /* Avoid performing name lookup if there is no possibility of
8891      finding a template-id.  */
8892   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8893       || (next_token->type == CPP_NAME
8894           && !cp_parser_nth_token_starts_template_argument_list_p
8895                (parser, 2)))
8896     {
8897       cp_parser_error (parser, "expected template-id");
8898       return error_mark_node;
8899     }
8900
8901   /* Remember where the template-id starts.  */
8902   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
8903     start_of_id = cp_lexer_token_position (parser->lexer, false);
8904
8905   push_deferring_access_checks (dk_deferred);
8906
8907   /* Parse the template-name.  */
8908   is_identifier = false;
8909   template = cp_parser_template_name (parser, template_keyword_p,
8910                                       check_dependency_p,
8911                                       is_declaration,
8912                                       &is_identifier);
8913   if (template == error_mark_node || is_identifier)
8914     {
8915       pop_deferring_access_checks ();
8916       return template;
8917     }
8918
8919   /* If we find the sequence `[:' after a template-name, it's probably
8920      a digraph-typo for `< ::'. Substitute the tokens and check if we can
8921      parse correctly the argument list.  */
8922   next_token = cp_lexer_peek_token (parser->lexer);
8923   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8924   if (next_token->type == CPP_OPEN_SQUARE
8925       && next_token->flags & DIGRAPH
8926       && next_token_2->type == CPP_COLON
8927       && !(next_token_2->flags & PREV_WHITE))
8928     {
8929       cp_parser_parse_tentatively (parser);
8930       /* Change `:' into `::'.  */
8931       next_token_2->type = CPP_SCOPE;
8932       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8933          CPP_LESS.  */
8934       cp_lexer_consume_token (parser->lexer);
8935       /* Parse the arguments.  */
8936       arguments = cp_parser_enclosed_template_argument_list (parser);
8937       if (!cp_parser_parse_definitely (parser))
8938         {
8939           /* If we couldn't parse an argument list, then we revert our changes
8940              and return simply an error. Maybe this is not a template-id
8941              after all.  */
8942           next_token_2->type = CPP_COLON;
8943           cp_parser_error (parser, "expected %<<%>");
8944           pop_deferring_access_checks ();
8945           return error_mark_node;
8946         }
8947       /* Otherwise, emit an error about the invalid digraph, but continue
8948          parsing because we got our argument list.  */
8949       pedwarn ("%<<::%> cannot begin a template-argument list");
8950       inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
8951               "between %<<%> and %<::%>");
8952       if (!flag_permissive)
8953         {
8954           static bool hint;
8955           if (!hint)
8956             {
8957               inform ("(if you use -fpermissive G++ will accept your code)");
8958               hint = true;
8959             }
8960         }
8961     }
8962   else
8963     {
8964       /* Look for the `<' that starts the template-argument-list.  */
8965       if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8966         {
8967           pop_deferring_access_checks ();
8968           return error_mark_node;
8969         }
8970       /* Parse the arguments.  */
8971       arguments = cp_parser_enclosed_template_argument_list (parser);
8972     }
8973
8974   /* Build a representation of the specialization.  */
8975   if (TREE_CODE (template) == IDENTIFIER_NODE)
8976     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8977   else if (DECL_CLASS_TEMPLATE_P (template)
8978            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8979     {
8980       bool entering_scope;
8981       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
8982          template (rather than some instantiation thereof) only if
8983          is not nested within some other construct.  For example, in
8984          "template <typename T> void f(T) { A<T>::", A<T> is just an
8985          instantiation of A.  */
8986       entering_scope = (template_parm_scope_p ()
8987                         && cp_lexer_next_token_is (parser->lexer,
8988                                                    CPP_SCOPE));
8989       template_id
8990         = finish_template_type (template, arguments, entering_scope);
8991     }
8992   else
8993     {
8994       /* If it's not a class-template or a template-template, it should be
8995          a function-template.  */
8996       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8997                    || TREE_CODE (template) == OVERLOAD
8998                    || BASELINK_P (template)));
8999
9000       template_id = lookup_template_function (template, arguments);
9001     }
9002
9003   /* If parsing tentatively, replace the sequence of tokens that makes
9004      up the template-id with a CPP_TEMPLATE_ID token.  That way,
9005      should we re-parse the token stream, we will not have to repeat
9006      the effort required to do the parse, nor will we issue duplicate
9007      error messages about problems during instantiation of the
9008      template.  */
9009   if (start_of_id)
9010     {
9011       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
9012
9013       /* Reset the contents of the START_OF_ID token.  */
9014       token->type = CPP_TEMPLATE_ID;
9015       /* Retrieve any deferred checks.  Do not pop this access checks yet
9016          so the memory will not be reclaimed during token replacing below.  */
9017       token->u.tree_check_value = GGC_CNEW (struct tree_check);
9018       token->u.tree_check_value->value = template_id;
9019       token->u.tree_check_value->checks = get_deferred_access_checks ();
9020       token->keyword = RID_MAX;
9021
9022       /* Purge all subsequent tokens.  */
9023       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
9024
9025       /* ??? Can we actually assume that, if template_id ==
9026          error_mark_node, we will have issued a diagnostic to the
9027          user, as opposed to simply marking the tentative parse as
9028          failed?  */
9029       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
9030         error ("parse error in template argument list");
9031     }
9032
9033   pop_deferring_access_checks ();
9034   return template_id;
9035 }
9036
9037 /* Parse a template-name.
9038
9039    template-name:
9040      identifier
9041
9042    The standard should actually say:
9043
9044    template-name:
9045      identifier
9046      operator-function-id
9047
9048    A defect report has been filed about this issue.
9049
9050    A conversion-function-id cannot be a template name because they cannot
9051    be part of a template-id. In fact, looking at this code:
9052
9053    a.operator K<int>()
9054
9055    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
9056    It is impossible to call a templated conversion-function-id with an
9057    explicit argument list, since the only allowed template parameter is
9058    the type to which it is converting.
9059
9060    If TEMPLATE_KEYWORD_P is true, then we have just seen the
9061    `template' keyword, in a construction like:
9062
9063      T::template f<3>()
9064
9065    In that case `f' is taken to be a template-name, even though there
9066    is no way of knowing for sure.
9067
9068    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
9069    name refers to a set of overloaded functions, at least one of which
9070    is a template, or an IDENTIFIER_NODE with the name of the template,
9071    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
9072    names are looked up inside uninstantiated templates.  */
9073
9074 static tree
9075 cp_parser_template_name (cp_parser* parser,
9076                          bool template_keyword_p,
9077                          bool check_dependency_p,
9078                          bool is_declaration,
9079                          bool *is_identifier)
9080 {
9081   tree identifier;
9082   tree decl;
9083   tree fns;
9084
9085   /* If the next token is `operator', then we have either an
9086      operator-function-id or a conversion-function-id.  */
9087   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
9088     {
9089       /* We don't know whether we're looking at an
9090          operator-function-id or a conversion-function-id.  */
9091       cp_parser_parse_tentatively (parser);
9092       /* Try an operator-function-id.  */
9093       identifier = cp_parser_operator_function_id (parser);
9094       /* If that didn't work, try a conversion-function-id.  */
9095       if (!cp_parser_parse_definitely (parser))
9096         {
9097           cp_parser_error (parser, "expected template-name");
9098           return error_mark_node;
9099         }
9100     }
9101   /* Look for the identifier.  */
9102   else
9103     identifier = cp_parser_identifier (parser);
9104
9105   /* If we didn't find an identifier, we don't have a template-id.  */
9106   if (identifier == error_mark_node)
9107     return error_mark_node;
9108
9109   /* If the name immediately followed the `template' keyword, then it
9110      is a template-name.  However, if the next token is not `<', then
9111      we do not treat it as a template-name, since it is not being used
9112      as part of a template-id.  This enables us to handle constructs
9113      like:
9114
9115        template <typename T> struct S { S(); };
9116        template <typename T> S<T>::S();
9117
9118      correctly.  We would treat `S' as a template -- if it were `S<T>'
9119      -- but we do not if there is no `<'.  */
9120
9121   if (processing_template_decl
9122       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
9123     {
9124       /* In a declaration, in a dependent context, we pretend that the
9125          "template" keyword was present in order to improve error
9126          recovery.  For example, given:
9127
9128            template <typename T> void f(T::X<int>);
9129
9130          we want to treat "X<int>" as a template-id.  */
9131       if (is_declaration
9132           && !template_keyword_p
9133           && parser->scope && TYPE_P (parser->scope)
9134           && check_dependency_p
9135           && dependent_type_p (parser->scope)
9136           /* Do not do this for dtors (or ctors), since they never
9137              need the template keyword before their name.  */
9138           && !constructor_name_p (identifier, parser->scope))
9139         {
9140           cp_token_position start = 0;
9141
9142           /* Explain what went wrong.  */
9143           error ("non-template %qD used as template", identifier);
9144           inform ("use %<%T::template %D%> to indicate that it is a template",
9145                   parser->scope, identifier);
9146           /* If parsing tentatively, find the location of the "<" token.  */
9147           if (cp_parser_simulate_error (parser))
9148             start = cp_lexer_token_position (parser->lexer, true);
9149           /* Parse the template arguments so that we can issue error
9150              messages about them.  */
9151           cp_lexer_consume_token (parser->lexer);
9152           cp_parser_enclosed_template_argument_list (parser);
9153           /* Skip tokens until we find a good place from which to
9154              continue parsing.  */
9155           cp_parser_skip_to_closing_parenthesis (parser,
9156                                                  /*recovering=*/true,
9157                                                  /*or_comma=*/true,
9158                                                  /*consume_paren=*/false);
9159           /* If parsing tentatively, permanently remove the
9160              template argument list.  That will prevent duplicate
9161              error messages from being issued about the missing
9162              "template" keyword.  */
9163           if (start)
9164             cp_lexer_purge_tokens_after (parser->lexer, start);
9165           if (is_identifier)
9166             *is_identifier = true;
9167           return identifier;
9168         }
9169
9170       /* If the "template" keyword is present, then there is generally
9171          no point in doing name-lookup, so we just return IDENTIFIER.
9172          But, if the qualifying scope is non-dependent then we can
9173          (and must) do name-lookup normally.  */
9174       if (template_keyword_p
9175           && (!parser->scope
9176               || (TYPE_P (parser->scope)
9177                   && dependent_type_p (parser->scope))))
9178         return identifier;
9179     }
9180
9181   /* Look up the name.  */
9182   decl = cp_parser_lookup_name (parser, identifier,
9183                                 none_type,
9184                                 /*is_template=*/false,
9185                                 /*is_namespace=*/false,
9186                                 check_dependency_p,
9187                                 /*ambiguous_decls=*/NULL);
9188   decl = maybe_get_template_decl_from_type_decl (decl);
9189
9190   /* If DECL is a template, then the name was a template-name.  */
9191   if (TREE_CODE (decl) == TEMPLATE_DECL)
9192     ;
9193   else
9194     {
9195       tree fn = NULL_TREE;
9196
9197       /* The standard does not explicitly indicate whether a name that
9198          names a set of overloaded declarations, some of which are
9199          templates, is a template-name.  However, such a name should
9200          be a template-name; otherwise, there is no way to form a
9201          template-id for the overloaded templates.  */
9202       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
9203       if (TREE_CODE (fns) == OVERLOAD)
9204         for (fn = fns; fn; fn = OVL_NEXT (fn))
9205           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
9206             break;
9207
9208       if (!fn)
9209         {
9210           /* The name does not name a template.  */
9211           cp_parser_error (parser, "expected template-name");
9212           return error_mark_node;
9213         }
9214     }
9215
9216   /* If DECL is dependent, and refers to a function, then just return
9217      its name; we will look it up again during template instantiation.  */
9218   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
9219     {
9220       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
9221       if (TYPE_P (scope) && dependent_type_p (scope))
9222         return identifier;
9223     }
9224
9225   return decl;
9226 }
9227
9228 /* Parse a template-argument-list.
9229
9230    template-argument-list:
9231      template-argument
9232      template-argument-list , template-argument
9233
9234    Returns a TREE_VEC containing the arguments.  */
9235
9236 static tree
9237 cp_parser_template_argument_list (cp_parser* parser)
9238 {
9239   tree fixed_args[10];
9240   unsigned n_args = 0;
9241   unsigned alloced = 10;
9242   tree *arg_ary = fixed_args;
9243   tree vec;
9244   bool saved_in_template_argument_list_p;
9245   bool saved_ice_p;
9246   bool saved_non_ice_p;
9247
9248   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
9249   parser->in_template_argument_list_p = true;
9250   /* Even if the template-id appears in an integral
9251      constant-expression, the contents of the argument list do
9252      not.  */
9253   saved_ice_p = parser->integral_constant_expression_p;
9254   parser->integral_constant_expression_p = false;
9255   saved_non_ice_p = parser->non_integral_constant_expression_p;
9256   parser->non_integral_constant_expression_p = false;
9257   /* Parse the arguments.  */
9258   do
9259     {
9260       tree argument;
9261
9262       if (n_args)
9263         /* Consume the comma.  */
9264         cp_lexer_consume_token (parser->lexer);
9265
9266       /* Parse the template-argument.  */
9267       argument = cp_parser_template_argument (parser);
9268       if (n_args == alloced)
9269         {
9270           alloced *= 2;
9271
9272           if (arg_ary == fixed_args)
9273             {
9274               arg_ary = XNEWVEC (tree, alloced);
9275               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
9276             }
9277           else
9278             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
9279         }
9280       arg_ary[n_args++] = argument;
9281     }
9282   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
9283
9284   vec = make_tree_vec (n_args);
9285
9286   while (n_args--)
9287     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
9288
9289   if (arg_ary != fixed_args)
9290     free (arg_ary);
9291   parser->non_integral_constant_expression_p = saved_non_ice_p;
9292   parser->integral_constant_expression_p = saved_ice_p;
9293   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
9294   return vec;
9295 }
9296
9297 /* Parse a template-argument.
9298
9299    template-argument:
9300      assignment-expression
9301      type-id
9302      id-expression
9303
9304    The representation is that of an assignment-expression, type-id, or
9305    id-expression -- except that the qualified id-expression is
9306    evaluated, so that the value returned is either a DECL or an
9307    OVERLOAD.
9308
9309    Although the standard says "assignment-expression", it forbids
9310    throw-expressions or assignments in the template argument.
9311    Therefore, we use "conditional-expression" instead.  */
9312
9313 static tree
9314 cp_parser_template_argument (cp_parser* parser)
9315 {
9316   tree argument;
9317   bool template_p;
9318   bool address_p;
9319   bool maybe_type_id = false;
9320   cp_token *token;
9321   cp_id_kind idk;
9322
9323   /* There's really no way to know what we're looking at, so we just
9324      try each alternative in order.
9325
9326        [temp.arg]
9327
9328        In a template-argument, an ambiguity between a type-id and an
9329        expression is resolved to a type-id, regardless of the form of
9330        the corresponding template-parameter.
9331
9332      Therefore, we try a type-id first.  */
9333   cp_parser_parse_tentatively (parser);
9334   argument = cp_parser_type_id (parser);
9335   /* If there was no error parsing the type-id but the next token is a '>>',
9336      we probably found a typo for '> >'. But there are type-id which are
9337      also valid expressions. For instance:
9338
9339      struct X { int operator >> (int); };
9340      template <int V> struct Foo {};
9341      Foo<X () >> 5> r;
9342
9343      Here 'X()' is a valid type-id of a function type, but the user just
9344      wanted to write the expression "X() >> 5". Thus, we remember that we
9345      found a valid type-id, but we still try to parse the argument as an
9346      expression to see what happens.  */
9347   if (!cp_parser_error_occurred (parser)
9348       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
9349     {
9350       maybe_type_id = true;
9351       cp_parser_abort_tentative_parse (parser);
9352     }
9353   else
9354     {
9355       /* If the next token isn't a `,' or a `>', then this argument wasn't
9356       really finished. This means that the argument is not a valid
9357       type-id.  */
9358       if (!cp_parser_next_token_ends_template_argument_p (parser))
9359         cp_parser_error (parser, "expected template-argument");
9360       /* If that worked, we're done.  */
9361       if (cp_parser_parse_definitely (parser))
9362         return argument;
9363     }
9364   /* We're still not sure what the argument will be.  */
9365   cp_parser_parse_tentatively (parser);
9366   /* Try a template.  */
9367   argument = cp_parser_id_expression (parser,
9368                                       /*template_keyword_p=*/false,
9369                                       /*check_dependency_p=*/true,
9370                                       &template_p,
9371                                       /*declarator_p=*/false,
9372                                       /*optional_p=*/false);
9373   /* If the next token isn't a `,' or a `>', then this argument wasn't
9374      really finished.  */
9375   if (!cp_parser_next_token_ends_template_argument_p (parser))
9376     cp_parser_error (parser, "expected template-argument");
9377   if (!cp_parser_error_occurred (parser))
9378     {
9379       /* Figure out what is being referred to.  If the id-expression
9380          was for a class template specialization, then we will have a
9381          TYPE_DECL at this point.  There is no need to do name lookup
9382          at this point in that case.  */
9383       if (TREE_CODE (argument) != TYPE_DECL)
9384         argument = cp_parser_lookup_name (parser, argument,
9385                                           none_type,
9386                                           /*is_template=*/template_p,
9387                                           /*is_namespace=*/false,
9388                                           /*check_dependency=*/true,
9389                                           /*ambiguous_decls=*/NULL);
9390       if (TREE_CODE (argument) != TEMPLATE_DECL
9391           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
9392         cp_parser_error (parser, "expected template-name");
9393     }
9394   if (cp_parser_parse_definitely (parser))
9395     return argument;
9396   /* It must be a non-type argument.  There permitted cases are given
9397      in [temp.arg.nontype]:
9398
9399      -- an integral constant-expression of integral or enumeration
9400         type; or
9401
9402      -- the name of a non-type template-parameter; or
9403
9404      -- the name of an object or function with external linkage...
9405
9406      -- the address of an object or function with external linkage...
9407
9408      -- a pointer to member...  */
9409   /* Look for a non-type template parameter.  */
9410   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9411     {
9412       cp_parser_parse_tentatively (parser);
9413       argument = cp_parser_primary_expression (parser,
9414                                                /*adress_p=*/false,
9415                                                /*cast_p=*/false,
9416                                                /*template_arg_p=*/true,
9417                                                &idk);
9418       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
9419           || !cp_parser_next_token_ends_template_argument_p (parser))
9420         cp_parser_simulate_error (parser);
9421       if (cp_parser_parse_definitely (parser))
9422         return argument;
9423     }
9424
9425   /* If the next token is "&", the argument must be the address of an
9426      object or function with external linkage.  */
9427   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
9428   if (address_p)
9429     cp_lexer_consume_token (parser->lexer);
9430   /* See if we might have an id-expression.  */
9431   token = cp_lexer_peek_token (parser->lexer);
9432   if (token->type == CPP_NAME
9433       || token->keyword == RID_OPERATOR
9434       || token->type == CPP_SCOPE
9435       || token->type == CPP_TEMPLATE_ID
9436       || token->type == CPP_NESTED_NAME_SPECIFIER)
9437     {
9438       cp_parser_parse_tentatively (parser);
9439       argument = cp_parser_primary_expression (parser,
9440                                                address_p,
9441                                                /*cast_p=*/false,
9442                                                /*template_arg_p=*/true,
9443                                                &idk);
9444       if (cp_parser_error_occurred (parser)
9445           || !cp_parser_next_token_ends_template_argument_p (parser))
9446         cp_parser_abort_tentative_parse (parser);
9447       else
9448         {
9449           if (TREE_CODE (argument) == INDIRECT_REF)
9450             {
9451               gcc_assert (REFERENCE_REF_P (argument));
9452               argument = TREE_OPERAND (argument, 0);
9453             }
9454
9455           if (TREE_CODE (argument) == VAR_DECL)
9456             {
9457               /* A variable without external linkage might still be a
9458                  valid constant-expression, so no error is issued here
9459                  if the external-linkage check fails.  */
9460               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (argument))
9461                 cp_parser_simulate_error (parser);
9462             }
9463           else if (is_overloaded_fn (argument))
9464             /* All overloaded functions are allowed; if the external
9465                linkage test does not pass, an error will be issued
9466                later.  */
9467             ;
9468           else if (address_p
9469                    && (TREE_CODE (argument) == OFFSET_REF
9470                        || TREE_CODE (argument) == SCOPE_REF))
9471             /* A pointer-to-member.  */
9472             ;
9473           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
9474             ;
9475           else
9476             cp_parser_simulate_error (parser);
9477
9478           if (cp_parser_parse_definitely (parser))
9479             {
9480               if (address_p)
9481                 argument = build_x_unary_op (ADDR_EXPR, argument);
9482               return argument;
9483             }
9484         }
9485     }
9486   /* If the argument started with "&", there are no other valid
9487      alternatives at this point.  */
9488   if (address_p)
9489     {
9490       cp_parser_error (parser, "invalid non-type template argument");
9491       return error_mark_node;
9492     }
9493
9494   /* If the argument wasn't successfully parsed as a type-id followed
9495      by '>>', the argument can only be a constant expression now.
9496      Otherwise, we try parsing the constant-expression tentatively,
9497      because the argument could really be a type-id.  */
9498   if (maybe_type_id)
9499     cp_parser_parse_tentatively (parser);
9500   argument = cp_parser_constant_expression (parser,
9501                                             /*allow_non_constant_p=*/false,
9502                                             /*non_constant_p=*/NULL);
9503   argument = fold_non_dependent_expr (argument);
9504   if (!maybe_type_id)
9505     return argument;
9506   if (!cp_parser_next_token_ends_template_argument_p (parser))
9507     cp_parser_error (parser, "expected template-argument");
9508   if (cp_parser_parse_definitely (parser))
9509     return argument;
9510   /* We did our best to parse the argument as a non type-id, but that
9511      was the only alternative that matched (albeit with a '>' after
9512      it). We can assume it's just a typo from the user, and a
9513      diagnostic will then be issued.  */
9514   return cp_parser_type_id (parser);
9515 }
9516
9517 /* Parse an explicit-instantiation.
9518
9519    explicit-instantiation:
9520      template declaration
9521
9522    Although the standard says `declaration', what it really means is:
9523
9524    explicit-instantiation:
9525      template decl-specifier-seq [opt] declarator [opt] ;
9526
9527    Things like `template int S<int>::i = 5, int S<double>::j;' are not
9528    supposed to be allowed.  A defect report has been filed about this
9529    issue.
9530
9531    GNU Extension:
9532
9533    explicit-instantiation:
9534      storage-class-specifier template
9535        decl-specifier-seq [opt] declarator [opt] ;
9536      function-specifier template
9537        decl-specifier-seq [opt] declarator [opt] ;  */
9538
9539 static void
9540 cp_parser_explicit_instantiation (cp_parser* parser)
9541 {
9542   int declares_class_or_enum;
9543   cp_decl_specifier_seq decl_specifiers;
9544   tree extension_specifier = NULL_TREE;
9545
9546   /* Look for an (optional) storage-class-specifier or
9547      function-specifier.  */
9548   if (cp_parser_allow_gnu_extensions_p (parser))
9549     {
9550       extension_specifier
9551         = cp_parser_storage_class_specifier_opt (parser);
9552       if (!extension_specifier)
9553         extension_specifier
9554           = cp_parser_function_specifier_opt (parser,
9555                                               /*decl_specs=*/NULL);
9556     }
9557
9558   /* Look for the `template' keyword.  */
9559   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9560   /* Let the front end know that we are processing an explicit
9561      instantiation.  */
9562   begin_explicit_instantiation ();
9563   /* [temp.explicit] says that we are supposed to ignore access
9564      control while processing explicit instantiation directives.  */
9565   push_deferring_access_checks (dk_no_check);
9566   /* Parse a decl-specifier-seq.  */
9567   cp_parser_decl_specifier_seq (parser,
9568                                 CP_PARSER_FLAGS_OPTIONAL,
9569                                 &decl_specifiers,
9570                                 &declares_class_or_enum);
9571   /* If there was exactly one decl-specifier, and it declared a class,
9572      and there's no declarator, then we have an explicit type
9573      instantiation.  */
9574   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
9575     {
9576       tree type;
9577
9578       type = check_tag_decl (&decl_specifiers);
9579       /* Turn access control back on for names used during
9580          template instantiation.  */
9581       pop_deferring_access_checks ();
9582       if (type)
9583         do_type_instantiation (type, extension_specifier,
9584                                /*complain=*/tf_error);
9585     }
9586   else
9587     {
9588       cp_declarator *declarator;
9589       tree decl;
9590
9591       /* Parse the declarator.  */
9592       declarator
9593         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9594                                 /*ctor_dtor_or_conv_p=*/NULL,
9595                                 /*parenthesized_p=*/NULL,
9596                                 /*member_p=*/false);
9597       if (declares_class_or_enum & 2)
9598         cp_parser_check_for_definition_in_return_type (declarator,
9599                                                        decl_specifiers.type);
9600       if (declarator != cp_error_declarator)
9601         {
9602           decl = grokdeclarator (declarator, &decl_specifiers,
9603                                  NORMAL, 0, &decl_specifiers.attributes);
9604           /* Turn access control back on for names used during
9605              template instantiation.  */
9606           pop_deferring_access_checks ();
9607           /* Do the explicit instantiation.  */
9608           do_decl_instantiation (decl, extension_specifier);
9609         }
9610       else
9611         {
9612           pop_deferring_access_checks ();
9613           /* Skip the body of the explicit instantiation.  */
9614           cp_parser_skip_to_end_of_statement (parser);
9615         }
9616     }
9617   /* We're done with the instantiation.  */
9618   end_explicit_instantiation ();
9619
9620   cp_parser_consume_semicolon_at_end_of_statement (parser);
9621 }
9622
9623 /* Parse an explicit-specialization.
9624
9625    explicit-specialization:
9626      template < > declaration
9627
9628    Although the standard says `declaration', what it really means is:
9629
9630    explicit-specialization:
9631      template <> decl-specifier [opt] init-declarator [opt] ;
9632      template <> function-definition
9633      template <> explicit-specialization
9634      template <> template-declaration  */
9635
9636 static void
9637 cp_parser_explicit_specialization (cp_parser* parser)
9638 {
9639   bool need_lang_pop;
9640   /* Look for the `template' keyword.  */
9641   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9642   /* Look for the `<'.  */
9643   cp_parser_require (parser, CPP_LESS, "`<'");
9644   /* Look for the `>'.  */
9645   cp_parser_require (parser, CPP_GREATER, "`>'");
9646   /* We have processed another parameter list.  */
9647   ++parser->num_template_parameter_lists;
9648   /* [temp]
9649
9650      A template ... explicit specialization ... shall not have C
9651      linkage.  */
9652   if (current_lang_name == lang_name_c)
9653     {
9654       error ("template specialization with C linkage");
9655       /* Give it C++ linkage to avoid confusing other parts of the
9656          front end.  */
9657       push_lang_context (lang_name_cplusplus);
9658       need_lang_pop = true;
9659     }
9660   else
9661     need_lang_pop = false;
9662   /* Let the front end know that we are beginning a specialization.  */
9663   if (!begin_specialization ())
9664     {
9665       end_specialization ();
9666       cp_parser_skip_to_end_of_block_or_statement (parser);
9667       return;
9668     }
9669
9670   /* If the next keyword is `template', we need to figure out whether
9671      or not we're looking a template-declaration.  */
9672   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
9673     {
9674       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
9675           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
9676         cp_parser_template_declaration_after_export (parser,
9677                                                      /*member_p=*/false);
9678       else
9679         cp_parser_explicit_specialization (parser);
9680     }
9681   else
9682     /* Parse the dependent declaration.  */
9683     cp_parser_single_declaration (parser,
9684                                   /*checks=*/NULL,
9685                                   /*member_p=*/false,
9686                                   /*friend_p=*/NULL);
9687   /* We're done with the specialization.  */
9688   end_specialization ();
9689   /* For the erroneous case of a template with C linkage, we pushed an
9690      implicit C++ linkage scope; exit that scope now.  */
9691   if (need_lang_pop)
9692     pop_lang_context ();
9693   /* We're done with this parameter list.  */
9694   --parser->num_template_parameter_lists;
9695 }
9696
9697 /* Parse a type-specifier.
9698
9699    type-specifier:
9700      simple-type-specifier
9701      class-specifier
9702      enum-specifier
9703      elaborated-type-specifier
9704      cv-qualifier
9705
9706    GNU Extension:
9707
9708    type-specifier:
9709      __complex__
9710
9711    Returns a representation of the type-specifier.  For a
9712    class-specifier, enum-specifier, or elaborated-type-specifier, a
9713    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
9714
9715    The parser flags FLAGS is used to control type-specifier parsing.
9716
9717    If IS_DECLARATION is TRUE, then this type-specifier is appearing
9718    in a decl-specifier-seq.
9719
9720    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
9721    class-specifier, enum-specifier, or elaborated-type-specifier, then
9722    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
9723    if a type is declared; 2 if it is defined.  Otherwise, it is set to
9724    zero.
9725
9726    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
9727    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
9728    is set to FALSE.  */
9729
9730 static tree
9731 cp_parser_type_specifier (cp_parser* parser,
9732                           cp_parser_flags flags,
9733                           cp_decl_specifier_seq *decl_specs,
9734                           bool is_declaration,
9735                           int* declares_class_or_enum,
9736                           bool* is_cv_qualifier)
9737 {
9738   tree type_spec = NULL_TREE;
9739   cp_token *token;
9740   enum rid keyword;
9741   cp_decl_spec ds = ds_last;
9742
9743   /* Assume this type-specifier does not declare a new type.  */
9744   if (declares_class_or_enum)
9745     *declares_class_or_enum = 0;
9746   /* And that it does not specify a cv-qualifier.  */
9747   if (is_cv_qualifier)
9748     *is_cv_qualifier = false;
9749   /* Peek at the next token.  */
9750   token = cp_lexer_peek_token (parser->lexer);
9751
9752   /* If we're looking at a keyword, we can use that to guide the
9753      production we choose.  */
9754   keyword = token->keyword;
9755   switch (keyword)
9756     {
9757     case RID_ENUM:
9758       /* Look for the enum-specifier.  */
9759       type_spec = cp_parser_enum_specifier (parser);
9760       /* If that worked, we're done.  */
9761       if (type_spec)
9762         {
9763           if (declares_class_or_enum)
9764             *declares_class_or_enum = 2;
9765           if (decl_specs)
9766             cp_parser_set_decl_spec_type (decl_specs,
9767                                           type_spec,
9768                                           /*user_defined_p=*/true);
9769           return type_spec;
9770         }
9771       else
9772         goto elaborated_type_specifier;
9773
9774       /* Any of these indicate either a class-specifier, or an
9775          elaborated-type-specifier.  */
9776     case RID_CLASS:
9777     case RID_STRUCT:
9778     case RID_UNION:
9779       /* Parse tentatively so that we can back up if we don't find a
9780          class-specifier.  */
9781       cp_parser_parse_tentatively (parser);
9782       /* Look for the class-specifier.  */
9783       type_spec = cp_parser_class_specifier (parser);
9784       /* If that worked, we're done.  */
9785       if (cp_parser_parse_definitely (parser))
9786         {
9787           if (declares_class_or_enum)
9788             *declares_class_or_enum = 2;
9789           if (decl_specs)
9790             cp_parser_set_decl_spec_type (decl_specs,
9791                                           type_spec,
9792                                           /*user_defined_p=*/true);
9793           return type_spec;
9794         }
9795
9796       /* Fall through.  */
9797     elaborated_type_specifier:
9798       /* We're declaring (not defining) a class or enum.  */
9799       if (declares_class_or_enum)
9800         *declares_class_or_enum = 1;
9801
9802       /* Fall through.  */
9803     case RID_TYPENAME:
9804       /* Look for an elaborated-type-specifier.  */
9805       type_spec
9806         = (cp_parser_elaborated_type_specifier
9807            (parser,
9808             decl_specs && decl_specs->specs[(int) ds_friend],
9809             is_declaration));
9810       if (decl_specs)
9811         cp_parser_set_decl_spec_type (decl_specs,
9812                                       type_spec,
9813                                       /*user_defined_p=*/true);
9814       return type_spec;
9815
9816     case RID_CONST:
9817       ds = ds_const;
9818       if (is_cv_qualifier)
9819         *is_cv_qualifier = true;
9820       break;
9821
9822     case RID_VOLATILE:
9823       ds = ds_volatile;
9824       if (is_cv_qualifier)
9825         *is_cv_qualifier = true;
9826       break;
9827
9828     case RID_RESTRICT:
9829       ds = ds_restrict;
9830       if (is_cv_qualifier)
9831         *is_cv_qualifier = true;
9832       break;
9833
9834     case RID_COMPLEX:
9835       /* The `__complex__' keyword is a GNU extension.  */
9836       ds = ds_complex;
9837       break;
9838
9839     default:
9840       break;
9841     }
9842
9843   /* Handle simple keywords.  */
9844   if (ds != ds_last)
9845     {
9846       if (decl_specs)
9847         {
9848           ++decl_specs->specs[(int)ds];
9849           decl_specs->any_specifiers_p = true;
9850         }
9851       return cp_lexer_consume_token (parser->lexer)->u.value;
9852     }
9853
9854   /* If we do not already have a type-specifier, assume we are looking
9855      at a simple-type-specifier.  */
9856   type_spec = cp_parser_simple_type_specifier (parser,
9857                                                decl_specs,
9858                                                flags);
9859
9860   /* If we didn't find a type-specifier, and a type-specifier was not
9861      optional in this context, issue an error message.  */
9862   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9863     {
9864       cp_parser_error (parser, "expected type specifier");
9865       return error_mark_node;
9866     }
9867
9868   return type_spec;
9869 }
9870
9871 /* Parse a simple-type-specifier.
9872
9873    simple-type-specifier:
9874      :: [opt] nested-name-specifier [opt] type-name
9875      :: [opt] nested-name-specifier template template-id
9876      char
9877      wchar_t
9878      bool
9879      short
9880      int
9881      long
9882      signed
9883      unsigned
9884      float
9885      double
9886      void
9887
9888    GNU Extension:
9889
9890    simple-type-specifier:
9891      __typeof__ unary-expression
9892      __typeof__ ( type-id )
9893
9894    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
9895    appropriately updated.  */
9896
9897 static tree
9898 cp_parser_simple_type_specifier (cp_parser* parser,
9899                                  cp_decl_specifier_seq *decl_specs,
9900                                  cp_parser_flags flags)
9901 {
9902   tree type = NULL_TREE;
9903   cp_token *token;
9904
9905   /* Peek at the next token.  */
9906   token = cp_lexer_peek_token (parser->lexer);
9907
9908   /* If we're looking at a keyword, things are easy.  */
9909   switch (token->keyword)
9910     {
9911     case RID_CHAR:
9912       if (decl_specs)
9913         decl_specs->explicit_char_p = true;
9914       type = char_type_node;
9915       break;
9916     case RID_WCHAR:
9917       type = wchar_type_node;
9918       break;
9919     case RID_BOOL:
9920       type = boolean_type_node;
9921       break;
9922     case RID_SHORT:
9923       if (decl_specs)
9924         ++decl_specs->specs[(int) ds_short];
9925       type = short_integer_type_node;
9926       break;
9927     case RID_INT:
9928       if (decl_specs)
9929         decl_specs->explicit_int_p = true;
9930       type = integer_type_node;
9931       break;
9932     case RID_LONG:
9933       if (decl_specs)
9934         ++decl_specs->specs[(int) ds_long];
9935       type = long_integer_type_node;
9936       break;
9937     case RID_SIGNED:
9938       if (decl_specs)
9939         ++decl_specs->specs[(int) ds_signed];
9940       type = integer_type_node;
9941       break;
9942     case RID_UNSIGNED:
9943       if (decl_specs)
9944         ++decl_specs->specs[(int) ds_unsigned];
9945       type = unsigned_type_node;
9946       break;
9947     case RID_FLOAT:
9948       type = float_type_node;
9949       break;
9950     case RID_DOUBLE:
9951       type = double_type_node;
9952       break;
9953     case RID_VOID:
9954       type = void_type_node;
9955       break;
9956
9957     case RID_TYPEOF:
9958       /* Consume the `typeof' token.  */
9959       cp_lexer_consume_token (parser->lexer);
9960       /* Parse the operand to `typeof'.  */
9961       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9962       /* If it is not already a TYPE, take its type.  */
9963       if (!TYPE_P (type))
9964         type = finish_typeof (type);
9965
9966       if (decl_specs)
9967         cp_parser_set_decl_spec_type (decl_specs, type,
9968                                       /*user_defined_p=*/true);
9969
9970       return type;
9971
9972     default:
9973       break;
9974     }
9975
9976   /* If the type-specifier was for a built-in type, we're done.  */
9977   if (type)
9978     {
9979       tree id;
9980
9981       /* Record the type.  */
9982       if (decl_specs
9983           && (token->keyword != RID_SIGNED
9984               && token->keyword != RID_UNSIGNED
9985               && token->keyword != RID_SHORT
9986               && token->keyword != RID_LONG))
9987         cp_parser_set_decl_spec_type (decl_specs,
9988                                       type,
9989                                       /*user_defined=*/false);
9990       if (decl_specs)
9991         decl_specs->any_specifiers_p = true;
9992
9993       /* Consume the token.  */
9994       id = cp_lexer_consume_token (parser->lexer)->u.value;
9995
9996       /* There is no valid C++ program where a non-template type is
9997          followed by a "<".  That usually indicates that the user thought
9998          that the type was a template.  */
9999       cp_parser_check_for_invalid_template_id (parser, type);
10000
10001       return TYPE_NAME (type);
10002     }
10003
10004   /* The type-specifier must be a user-defined type.  */
10005   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
10006     {
10007       bool qualified_p;
10008       bool global_p;
10009
10010       /* Don't gobble tokens or issue error messages if this is an
10011          optional type-specifier.  */
10012       if (flags & CP_PARSER_FLAGS_OPTIONAL)
10013         cp_parser_parse_tentatively (parser);
10014
10015       /* Look for the optional `::' operator.  */
10016       global_p
10017         = (cp_parser_global_scope_opt (parser,
10018                                        /*current_scope_valid_p=*/false)
10019            != NULL_TREE);
10020       /* Look for the nested-name specifier.  */
10021       qualified_p
10022         = (cp_parser_nested_name_specifier_opt (parser,
10023                                                 /*typename_keyword_p=*/false,
10024                                                 /*check_dependency_p=*/true,
10025                                                 /*type_p=*/false,
10026                                                 /*is_declaration=*/false)
10027            != NULL_TREE);
10028       /* If we have seen a nested-name-specifier, and the next token
10029          is `template', then we are using the template-id production.  */
10030       if (parser->scope
10031           && cp_parser_optional_template_keyword (parser))
10032         {
10033           /* Look for the template-id.  */
10034           type = cp_parser_template_id (parser,
10035                                         /*template_keyword_p=*/true,
10036                                         /*check_dependency_p=*/true,
10037                                         /*is_declaration=*/false);
10038           /* If the template-id did not name a type, we are out of
10039              luck.  */
10040           if (TREE_CODE (type) != TYPE_DECL)
10041             {
10042               cp_parser_error (parser, "expected template-id for type");
10043               type = NULL_TREE;
10044             }
10045         }
10046       /* Otherwise, look for a type-name.  */
10047       else
10048         type = cp_parser_type_name (parser);
10049       /* Keep track of all name-lookups performed in class scopes.  */
10050       if (type
10051           && !global_p
10052           && !qualified_p
10053           && TREE_CODE (type) == TYPE_DECL
10054           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
10055         maybe_note_name_used_in_class (DECL_NAME (type), type);
10056       /* If it didn't work out, we don't have a TYPE.  */
10057       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
10058           && !cp_parser_parse_definitely (parser))
10059         type = NULL_TREE;
10060       if (type && decl_specs)
10061         cp_parser_set_decl_spec_type (decl_specs, type,
10062                                       /*user_defined=*/true);
10063     }
10064
10065   /* If we didn't get a type-name, issue an error message.  */
10066   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
10067     {
10068       cp_parser_error (parser, "expected type-name");
10069       return error_mark_node;
10070     }
10071
10072   /* There is no valid C++ program where a non-template type is
10073      followed by a "<".  That usually indicates that the user thought
10074      that the type was a template.  */
10075   if (type && type != error_mark_node)
10076     {
10077       /* As a last-ditch effort, see if TYPE is an Objective-C type.
10078          If it is, then the '<'...'>' enclose protocol names rather than
10079          template arguments, and so everything is fine.  */
10080       if (c_dialect_objc ()
10081           && (objc_is_id (type) || objc_is_class_name (type)))
10082         {
10083           tree protos = cp_parser_objc_protocol_refs_opt (parser);
10084           tree qual_type = objc_get_protocol_qualified_type (type, protos);
10085
10086           /* Clobber the "unqualified" type previously entered into
10087              DECL_SPECS with the new, improved protocol-qualified version.  */
10088           if (decl_specs)
10089             decl_specs->type = qual_type;
10090
10091           return qual_type;
10092         }
10093
10094       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
10095     }
10096
10097   return type;
10098 }
10099
10100 /* Parse a type-name.
10101
10102    type-name:
10103      class-name
10104      enum-name
10105      typedef-name
10106
10107    enum-name:
10108      identifier
10109
10110    typedef-name:
10111      identifier
10112
10113    Returns a TYPE_DECL for the type.  */
10114
10115 static tree
10116 cp_parser_type_name (cp_parser* parser)
10117 {
10118   tree type_decl;
10119   tree identifier;
10120
10121   /* We can't know yet whether it is a class-name or not.  */
10122   cp_parser_parse_tentatively (parser);
10123   /* Try a class-name.  */
10124   type_decl = cp_parser_class_name (parser,
10125                                     /*typename_keyword_p=*/false,
10126                                     /*template_keyword_p=*/false,
10127                                     none_type,
10128                                     /*check_dependency_p=*/true,
10129                                     /*class_head_p=*/false,
10130                                     /*is_declaration=*/false);
10131   /* If it's not a class-name, keep looking.  */
10132   if (!cp_parser_parse_definitely (parser))
10133     {
10134       /* It must be a typedef-name or an enum-name.  */
10135       identifier = cp_parser_identifier (parser);
10136       if (identifier == error_mark_node)
10137         return error_mark_node;
10138
10139       /* Look up the type-name.  */
10140       type_decl = cp_parser_lookup_name_simple (parser, identifier);
10141
10142       if (TREE_CODE (type_decl) != TYPE_DECL
10143           && (objc_is_id (identifier) || objc_is_class_name (identifier)))
10144         {
10145           /* See if this is an Objective-C type.  */
10146           tree protos = cp_parser_objc_protocol_refs_opt (parser);
10147           tree type = objc_get_protocol_qualified_type (identifier, protos);
10148           if (type)
10149             type_decl = TYPE_NAME (type);
10150         }
10151
10152       /* Issue an error if we did not find a type-name.  */
10153       if (TREE_CODE (type_decl) != TYPE_DECL)
10154         {
10155           if (!cp_parser_simulate_error (parser))
10156             cp_parser_name_lookup_error (parser, identifier, type_decl,
10157                                          "is not a type");
10158           type_decl = error_mark_node;
10159         }
10160       /* Remember that the name was used in the definition of the
10161          current class so that we can check later to see if the
10162          meaning would have been different after the class was
10163          entirely defined.  */
10164       else if (type_decl != error_mark_node
10165                && !parser->scope)
10166         maybe_note_name_used_in_class (identifier, type_decl);
10167     }
10168
10169   return type_decl;
10170 }
10171
10172
10173 /* Parse an elaborated-type-specifier.  Note that the grammar given
10174    here incorporates the resolution to DR68.
10175
10176    elaborated-type-specifier:
10177      class-key :: [opt] nested-name-specifier [opt] identifier
10178      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
10179      enum :: [opt] nested-name-specifier [opt] identifier
10180      typename :: [opt] nested-name-specifier identifier
10181      typename :: [opt] nested-name-specifier template [opt]
10182        template-id
10183
10184    GNU extension:
10185
10186    elaborated-type-specifier:
10187      class-key attributes :: [opt] nested-name-specifier [opt] identifier
10188      class-key attributes :: [opt] nested-name-specifier [opt]
10189                template [opt] template-id
10190      enum attributes :: [opt] nested-name-specifier [opt] identifier
10191
10192    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
10193    declared `friend'.  If IS_DECLARATION is TRUE, then this
10194    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
10195    something is being declared.
10196
10197    Returns the TYPE specified.  */
10198
10199 static tree
10200 cp_parser_elaborated_type_specifier (cp_parser* parser,
10201                                      bool is_friend,
10202                                      bool is_declaration)
10203 {
10204   enum tag_types tag_type;
10205   tree identifier;
10206   tree type = NULL_TREE;
10207   tree attributes = NULL_TREE;
10208
10209   /* See if we're looking at the `enum' keyword.  */
10210   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
10211     {
10212       /* Consume the `enum' token.  */
10213       cp_lexer_consume_token (parser->lexer);
10214       /* Remember that it's an enumeration type.  */
10215       tag_type = enum_type;
10216       /* Parse the attributes.  */
10217       attributes = cp_parser_attributes_opt (parser);
10218     }
10219   /* Or, it might be `typename'.  */
10220   else if (cp_lexer_next_token_is_keyword (parser->lexer,
10221                                            RID_TYPENAME))
10222     {
10223       /* Consume the `typename' token.  */
10224       cp_lexer_consume_token (parser->lexer);
10225       /* Remember that it's a `typename' type.  */
10226       tag_type = typename_type;
10227       /* The `typename' keyword is only allowed in templates.  */
10228       if (!processing_template_decl)
10229         pedwarn ("using %<typename%> outside of template");
10230     }
10231   /* Otherwise it must be a class-key.  */
10232   else
10233     {
10234       tag_type = cp_parser_class_key (parser);
10235       if (tag_type == none_type)
10236         return error_mark_node;
10237       /* Parse the attributes.  */
10238       attributes = cp_parser_attributes_opt (parser);
10239     }
10240
10241   /* Look for the `::' operator.  */
10242   cp_parser_global_scope_opt (parser,
10243                               /*current_scope_valid_p=*/false);
10244   /* Look for the nested-name-specifier.  */
10245   if (tag_type == typename_type)
10246     {
10247       if (!cp_parser_nested_name_specifier (parser,
10248                                            /*typename_keyword_p=*/true,
10249                                            /*check_dependency_p=*/true,
10250                                            /*type_p=*/true,
10251                                             is_declaration))
10252         return error_mark_node;
10253     }
10254   else
10255     /* Even though `typename' is not present, the proposed resolution
10256        to Core Issue 180 says that in `class A<T>::B', `B' should be
10257        considered a type-name, even if `A<T>' is dependent.  */
10258     cp_parser_nested_name_specifier_opt (parser,
10259                                          /*typename_keyword_p=*/true,
10260                                          /*check_dependency_p=*/true,
10261                                          /*type_p=*/true,
10262                                          is_declaration);
10263   /* For everything but enumeration types, consider a template-id.
10264      For an enumeration type, consider only a plain identifier.  */
10265   if (tag_type != enum_type)
10266     {
10267       bool template_p = false;
10268       tree decl;
10269
10270       /* Allow the `template' keyword.  */
10271       template_p = cp_parser_optional_template_keyword (parser);
10272       /* If we didn't see `template', we don't know if there's a
10273          template-id or not.  */
10274       if (!template_p)
10275         cp_parser_parse_tentatively (parser);
10276       /* Parse the template-id.  */
10277       decl = cp_parser_template_id (parser, template_p,
10278                                     /*check_dependency_p=*/true,
10279                                     is_declaration);
10280       /* If we didn't find a template-id, look for an ordinary
10281          identifier.  */
10282       if (!template_p && !cp_parser_parse_definitely (parser))
10283         ;
10284       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
10285          in effect, then we must assume that, upon instantiation, the
10286          template will correspond to a class.  */
10287       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
10288                && tag_type == typename_type)
10289         type = make_typename_type (parser->scope, decl,
10290                                    typename_type,
10291                                    /*complain=*/tf_error);
10292       else
10293         type = TREE_TYPE (decl);
10294     }
10295
10296   if (!type)
10297     {
10298       identifier = cp_parser_identifier (parser);
10299
10300       if (identifier == error_mark_node)
10301         {
10302           parser->scope = NULL_TREE;
10303           return error_mark_node;
10304         }
10305
10306       /* For a `typename', we needn't call xref_tag.  */
10307       if (tag_type == typename_type
10308           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
10309         return cp_parser_make_typename_type (parser, parser->scope,
10310                                              identifier);
10311       /* Look up a qualified name in the usual way.  */
10312       if (parser->scope)
10313         {
10314           tree decl;
10315
10316           decl = cp_parser_lookup_name (parser, identifier,
10317                                         tag_type,
10318                                         /*is_template=*/false,
10319                                         /*is_namespace=*/false,
10320                                         /*check_dependency=*/true,
10321                                         /*ambiguous_decls=*/NULL);
10322
10323           /* If we are parsing friend declaration, DECL may be a
10324              TEMPLATE_DECL tree node here.  However, we need to check
10325              whether this TEMPLATE_DECL results in valid code.  Consider
10326              the following example:
10327
10328                namespace N {
10329                  template <class T> class C {};
10330                }
10331                class X {
10332                  template <class T> friend class N::C; // #1, valid code
10333                };
10334                template <class T> class Y {
10335                  friend class N::C;                    // #2, invalid code
10336                };
10337
10338              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
10339              name lookup of `N::C'.  We see that friend declaration must
10340              be template for the code to be valid.  Note that
10341              processing_template_decl does not work here since it is
10342              always 1 for the above two cases.  */
10343
10344           decl = (cp_parser_maybe_treat_template_as_class
10345                   (decl, /*tag_name_p=*/is_friend
10346                          && parser->num_template_parameter_lists));
10347
10348           if (TREE_CODE (decl) != TYPE_DECL)
10349             {
10350               cp_parser_diagnose_invalid_type_name (parser,
10351                                                     parser->scope,
10352                                                     identifier);
10353               return error_mark_node;
10354             }
10355
10356           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
10357             {
10358               bool allow_template = (parser->num_template_parameter_lists
10359                                       || DECL_SELF_REFERENCE_P (decl));
10360               type = check_elaborated_type_specifier (tag_type, decl, 
10361                                                       allow_template);
10362
10363               if (type == error_mark_node)
10364                 return error_mark_node;
10365             }
10366
10367           type = TREE_TYPE (decl);
10368         }
10369       else
10370         {
10371           /* An elaborated-type-specifier sometimes introduces a new type and
10372              sometimes names an existing type.  Normally, the rule is that it
10373              introduces a new type only if there is not an existing type of
10374              the same name already in scope.  For example, given:
10375
10376                struct S {};
10377                void f() { struct S s; }
10378
10379              the `struct S' in the body of `f' is the same `struct S' as in
10380              the global scope; the existing definition is used.  However, if
10381              there were no global declaration, this would introduce a new
10382              local class named `S'.
10383
10384              An exception to this rule applies to the following code:
10385
10386                namespace N { struct S; }
10387
10388              Here, the elaborated-type-specifier names a new type
10389              unconditionally; even if there is already an `S' in the
10390              containing scope this declaration names a new type.
10391              This exception only applies if the elaborated-type-specifier
10392              forms the complete declaration:
10393
10394                [class.name]
10395
10396                A declaration consisting solely of `class-key identifier ;' is
10397                either a redeclaration of the name in the current scope or a
10398                forward declaration of the identifier as a class name.  It
10399                introduces the name into the current scope.
10400
10401              We are in this situation precisely when the next token is a `;'.
10402
10403              An exception to the exception is that a `friend' declaration does
10404              *not* name a new type; i.e., given:
10405
10406                struct S { friend struct T; };
10407
10408              `T' is not a new type in the scope of `S'.
10409
10410              Also, `new struct S' or `sizeof (struct S)' never results in the
10411              definition of a new type; a new type can only be declared in a
10412              declaration context.  */
10413
10414           tag_scope ts;
10415           bool template_p;
10416
10417           if (is_friend)
10418             /* Friends have special name lookup rules.  */
10419             ts = ts_within_enclosing_non_class;
10420           else if (is_declaration
10421                    && cp_lexer_next_token_is (parser->lexer,
10422                                               CPP_SEMICOLON))
10423             /* This is a `class-key identifier ;' */
10424             ts = ts_current;
10425           else
10426             ts = ts_global;
10427
10428           template_p =
10429             (parser->num_template_parameter_lists
10430              && (cp_parser_next_token_starts_class_definition_p (parser)
10431                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
10432           /* An unqualified name was used to reference this type, so
10433              there were no qualifying templates.  */
10434           if (!cp_parser_check_template_parameters (parser,
10435                                                     /*num_templates=*/0))
10436             return error_mark_node;
10437           type = xref_tag (tag_type, identifier, ts, template_p);
10438         }
10439     }
10440
10441   if (type == error_mark_node)
10442     return error_mark_node;
10443
10444   /* Allow attributes on forward declarations of classes.  */
10445   if (attributes)
10446     {
10447       if (TREE_CODE (type) == TYPENAME_TYPE)
10448         warning (OPT_Wattributes,
10449                  "attributes ignored on uninstantiated type");
10450       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
10451                && ! processing_explicit_instantiation)
10452         warning (OPT_Wattributes,
10453                  "attributes ignored on template instantiation");
10454       else if (is_declaration && cp_parser_declares_only_class_p (parser))
10455         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
10456       else
10457         warning (OPT_Wattributes,
10458                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
10459     }
10460
10461   if (tag_type != enum_type)
10462     cp_parser_check_class_key (tag_type, type);
10463
10464   /* A "<" cannot follow an elaborated type specifier.  If that
10465      happens, the user was probably trying to form a template-id.  */
10466   cp_parser_check_for_invalid_template_id (parser, type);
10467
10468   return type;
10469 }
10470
10471 /* Parse an enum-specifier.
10472
10473    enum-specifier:
10474      enum identifier [opt] { enumerator-list [opt] }
10475
10476    GNU Extensions:
10477      enum attributes[opt] identifier [opt] { enumerator-list [opt] }
10478        attributes[opt]
10479
10480    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
10481    if the token stream isn't an enum-specifier after all.  */
10482
10483 static tree
10484 cp_parser_enum_specifier (cp_parser* parser)
10485 {
10486   tree identifier;
10487   tree type;
10488   tree attributes;
10489
10490   /* Parse tentatively so that we can back up if we don't find a
10491      enum-specifier.  */
10492   cp_parser_parse_tentatively (parser);
10493
10494   /* Caller guarantees that the current token is 'enum', an identifier
10495      possibly follows, and the token after that is an opening brace.
10496      If we don't have an identifier, fabricate an anonymous name for
10497      the enumeration being defined.  */
10498   cp_lexer_consume_token (parser->lexer);
10499
10500   attributes = cp_parser_attributes_opt (parser);
10501
10502   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10503     identifier = cp_parser_identifier (parser);
10504   else
10505     identifier = make_anon_name ();
10506
10507   /* Look for the `{' but don't consume it yet.  */
10508   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10509     cp_parser_simulate_error (parser);
10510
10511   if (!cp_parser_parse_definitely (parser))
10512     return NULL_TREE;
10513
10514   /* Issue an error message if type-definitions are forbidden here.  */
10515   if (!cp_parser_check_type_definition (parser))
10516     type = error_mark_node;
10517   else
10518     /* Create the new type.  We do this before consuming the opening
10519        brace so the enum will be recorded as being on the line of its
10520        tag (or the 'enum' keyword, if there is no tag).  */
10521     type = start_enum (identifier);
10522   
10523   /* Consume the opening brace.  */
10524   cp_lexer_consume_token (parser->lexer);
10525
10526   if (type == error_mark_node)
10527     {
10528       cp_parser_skip_to_end_of_block_or_statement (parser);
10529       return error_mark_node;
10530     }
10531
10532   /* If the next token is not '}', then there are some enumerators.  */
10533   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
10534     cp_parser_enumerator_list (parser, type);
10535
10536   /* Consume the final '}'.  */
10537   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10538
10539   /* Look for trailing attributes to apply to this enumeration, and
10540      apply them if appropriate.  */
10541   if (cp_parser_allow_gnu_extensions_p (parser))
10542     {
10543       tree trailing_attr = cp_parser_attributes_opt (parser);
10544       cplus_decl_attributes (&type,
10545                              trailing_attr,
10546                              (int) ATTR_FLAG_TYPE_IN_PLACE);
10547     }
10548
10549   /* Finish up the enumeration.  */
10550   finish_enum (type);
10551
10552   return type;
10553 }
10554
10555 /* Parse an enumerator-list.  The enumerators all have the indicated
10556    TYPE.
10557
10558    enumerator-list:
10559      enumerator-definition
10560      enumerator-list , enumerator-definition  */
10561
10562 static void
10563 cp_parser_enumerator_list (cp_parser* parser, tree type)
10564 {
10565   while (true)
10566     {
10567       /* Parse an enumerator-definition.  */
10568       cp_parser_enumerator_definition (parser, type);
10569
10570       /* If the next token is not a ',', we've reached the end of
10571          the list.  */
10572       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10573         break;
10574       /* Otherwise, consume the `,' and keep going.  */
10575       cp_lexer_consume_token (parser->lexer);
10576       /* If the next token is a `}', there is a trailing comma.  */
10577       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
10578         {
10579           if (pedantic && !in_system_header)
10580             pedwarn ("comma at end of enumerator list");
10581           break;
10582         }
10583     }
10584 }
10585
10586 /* Parse an enumerator-definition.  The enumerator has the indicated
10587    TYPE.
10588
10589    enumerator-definition:
10590      enumerator
10591      enumerator = constant-expression
10592
10593    enumerator:
10594      identifier  */
10595
10596 static void
10597 cp_parser_enumerator_definition (cp_parser* parser, tree type)
10598 {
10599   tree identifier;
10600   tree value;
10601
10602   /* Look for the identifier.  */
10603   identifier = cp_parser_identifier (parser);
10604   if (identifier == error_mark_node)
10605     return;
10606
10607   /* If the next token is an '=', then there is an explicit value.  */
10608   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10609     {
10610       /* Consume the `=' token.  */
10611       cp_lexer_consume_token (parser->lexer);
10612       /* Parse the value.  */
10613       value = cp_parser_constant_expression (parser,
10614                                              /*allow_non_constant_p=*/false,
10615                                              NULL);
10616     }
10617   else
10618     value = NULL_TREE;
10619
10620   /* Create the enumerator.  */
10621   build_enumerator (identifier, value, type);
10622 }
10623
10624 /* Parse a namespace-name.
10625
10626    namespace-name:
10627      original-namespace-name
10628      namespace-alias
10629
10630    Returns the NAMESPACE_DECL for the namespace.  */
10631
10632 static tree
10633 cp_parser_namespace_name (cp_parser* parser)
10634 {
10635   tree identifier;
10636   tree namespace_decl;
10637
10638   /* Get the name of the namespace.  */
10639   identifier = cp_parser_identifier (parser);
10640   if (identifier == error_mark_node)
10641     return error_mark_node;
10642
10643   /* Look up the identifier in the currently active scope.  Look only
10644      for namespaces, due to:
10645
10646        [basic.lookup.udir]
10647
10648        When looking up a namespace-name in a using-directive or alias
10649        definition, only namespace names are considered.
10650
10651      And:
10652
10653        [basic.lookup.qual]
10654
10655        During the lookup of a name preceding the :: scope resolution
10656        operator, object, function, and enumerator names are ignored.
10657
10658      (Note that cp_parser_class_or_namespace_name only calls this
10659      function if the token after the name is the scope resolution
10660      operator.)  */
10661   namespace_decl = cp_parser_lookup_name (parser, identifier,
10662                                           none_type,
10663                                           /*is_template=*/false,
10664                                           /*is_namespace=*/true,
10665                                           /*check_dependency=*/true,
10666                                           /*ambiguous_decls=*/NULL);
10667   /* If it's not a namespace, issue an error.  */
10668   if (namespace_decl == error_mark_node
10669       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
10670     {
10671       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
10672         error ("%qD is not a namespace-name", identifier);
10673       cp_parser_error (parser, "expected namespace-name");
10674       namespace_decl = error_mark_node;
10675     }
10676
10677   return namespace_decl;
10678 }
10679
10680 /* Parse a namespace-definition.
10681
10682    namespace-definition:
10683      named-namespace-definition
10684      unnamed-namespace-definition
10685
10686    named-namespace-definition:
10687      original-namespace-definition
10688      extension-namespace-definition
10689
10690    original-namespace-definition:
10691      namespace identifier { namespace-body }
10692
10693    extension-namespace-definition:
10694      namespace original-namespace-name { namespace-body }
10695
10696    unnamed-namespace-definition:
10697      namespace { namespace-body } */
10698
10699 static void
10700 cp_parser_namespace_definition (cp_parser* parser)
10701 {
10702   tree identifier, attribs;
10703
10704   /* Look for the `namespace' keyword.  */
10705   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10706
10707   /* Get the name of the namespace.  We do not attempt to distinguish
10708      between an original-namespace-definition and an
10709      extension-namespace-definition at this point.  The semantic
10710      analysis routines are responsible for that.  */
10711   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10712     identifier = cp_parser_identifier (parser);
10713   else
10714     identifier = NULL_TREE;
10715
10716   /* Parse any specified attributes.  */
10717   attribs = cp_parser_attributes_opt (parser);
10718
10719   /* Look for the `{' to start the namespace.  */
10720   cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
10721   /* Start the namespace.  */
10722   push_namespace_with_attribs (identifier, attribs);
10723   /* Parse the body of the namespace.  */
10724   cp_parser_namespace_body (parser);
10725   /* Finish the namespace.  */
10726   pop_namespace ();
10727   /* Look for the final `}'.  */
10728   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10729 }
10730
10731 /* Parse a namespace-body.
10732
10733    namespace-body:
10734      declaration-seq [opt]  */
10735
10736 static void
10737 cp_parser_namespace_body (cp_parser* parser)
10738 {
10739   cp_parser_declaration_seq_opt (parser);
10740 }
10741
10742 /* Parse a namespace-alias-definition.
10743
10744    namespace-alias-definition:
10745      namespace identifier = qualified-namespace-specifier ;  */
10746
10747 static void
10748 cp_parser_namespace_alias_definition (cp_parser* parser)
10749 {
10750   tree identifier;
10751   tree namespace_specifier;
10752
10753   /* Look for the `namespace' keyword.  */
10754   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10755   /* Look for the identifier.  */
10756   identifier = cp_parser_identifier (parser);
10757   if (identifier == error_mark_node)
10758     return;
10759   /* Look for the `=' token.  */
10760   cp_parser_require (parser, CPP_EQ, "`='");
10761   /* Look for the qualified-namespace-specifier.  */
10762   namespace_specifier
10763     = cp_parser_qualified_namespace_specifier (parser);
10764   /* Look for the `;' token.  */
10765   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10766
10767   /* Register the alias in the symbol table.  */
10768   do_namespace_alias (identifier, namespace_specifier);
10769 }
10770
10771 /* Parse a qualified-namespace-specifier.
10772
10773    qualified-namespace-specifier:
10774      :: [opt] nested-name-specifier [opt] namespace-name
10775
10776    Returns a NAMESPACE_DECL corresponding to the specified
10777    namespace.  */
10778
10779 static tree
10780 cp_parser_qualified_namespace_specifier (cp_parser* parser)
10781 {
10782   /* Look for the optional `::'.  */
10783   cp_parser_global_scope_opt (parser,
10784                               /*current_scope_valid_p=*/false);
10785
10786   /* Look for the optional nested-name-specifier.  */
10787   cp_parser_nested_name_specifier_opt (parser,
10788                                        /*typename_keyword_p=*/false,
10789                                        /*check_dependency_p=*/true,
10790                                        /*type_p=*/false,
10791                                        /*is_declaration=*/true);
10792
10793   return cp_parser_namespace_name (parser);
10794 }
10795
10796 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
10797    access declaration.
10798
10799    using-declaration:
10800      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
10801      using :: unqualified-id ;  
10802
10803    access-declaration:
10804      qualified-id ;  
10805
10806    */
10807
10808 static bool
10809 cp_parser_using_declaration (cp_parser* parser, 
10810                              bool access_declaration_p)
10811 {
10812   cp_token *token;
10813   bool typename_p = false;
10814   bool global_scope_p;
10815   tree decl;
10816   tree identifier;
10817   tree qscope;
10818
10819   if (access_declaration_p)
10820     cp_parser_parse_tentatively (parser);
10821   else
10822     {
10823       /* Look for the `using' keyword.  */
10824       cp_parser_require_keyword (parser, RID_USING, "`using'");
10825       
10826       /* Peek at the next token.  */
10827       token = cp_lexer_peek_token (parser->lexer);
10828       /* See if it's `typename'.  */
10829       if (token->keyword == RID_TYPENAME)
10830         {
10831           /* Remember that we've seen it.  */
10832           typename_p = true;
10833           /* Consume the `typename' token.  */
10834           cp_lexer_consume_token (parser->lexer);
10835         }
10836     }
10837
10838   /* Look for the optional global scope qualification.  */
10839   global_scope_p
10840     = (cp_parser_global_scope_opt (parser,
10841                                    /*current_scope_valid_p=*/false)
10842        != NULL_TREE);
10843
10844   /* If we saw `typename', or didn't see `::', then there must be a
10845      nested-name-specifier present.  */
10846   if (typename_p || !global_scope_p)
10847     qscope = cp_parser_nested_name_specifier (parser, typename_p,
10848                                               /*check_dependency_p=*/true,
10849                                               /*type_p=*/false,
10850                                               /*is_declaration=*/true);
10851   /* Otherwise, we could be in either of the two productions.  In that
10852      case, treat the nested-name-specifier as optional.  */
10853   else
10854     qscope = cp_parser_nested_name_specifier_opt (parser,
10855                                                   /*typename_keyword_p=*/false,
10856                                                   /*check_dependency_p=*/true,
10857                                                   /*type_p=*/false,
10858                                                   /*is_declaration=*/true);
10859   if (!qscope)
10860     qscope = global_namespace;
10861
10862   if (access_declaration_p && cp_parser_error_occurred (parser))
10863     /* Something has already gone wrong; there's no need to parse
10864        further.  Since an error has occurred, the return value of
10865        cp_parser_parse_definitely will be false, as required.  */
10866     return cp_parser_parse_definitely (parser);
10867
10868   /* Parse the unqualified-id.  */
10869   identifier = cp_parser_unqualified_id (parser,
10870                                          /*template_keyword_p=*/false,
10871                                          /*check_dependency_p=*/true,
10872                                          /*declarator_p=*/true,
10873                                          /*optional_p=*/false);
10874
10875   if (access_declaration_p)
10876     {
10877       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
10878         cp_parser_simulate_error (parser);
10879       if (!cp_parser_parse_definitely (parser))
10880         return false;
10881     }
10882
10883   /* The function we call to handle a using-declaration is different
10884      depending on what scope we are in.  */
10885   if (qscope == error_mark_node || identifier == error_mark_node)
10886     ;
10887   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
10888            && TREE_CODE (identifier) != BIT_NOT_EXPR)
10889     /* [namespace.udecl]
10890
10891        A using declaration shall not name a template-id.  */
10892     error ("a template-id may not appear in a using-declaration");
10893   else
10894     {
10895       if (at_class_scope_p ())
10896         {
10897           /* Create the USING_DECL.  */
10898           decl = do_class_using_decl (parser->scope, identifier);
10899           /* Add it to the list of members in this class.  */
10900           finish_member_declaration (decl);
10901         }
10902       else
10903         {
10904           decl = cp_parser_lookup_name_simple (parser, identifier);
10905           if (decl == error_mark_node)
10906             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
10907           else if (!at_namespace_scope_p ())
10908             do_local_using_decl (decl, qscope, identifier);
10909           else
10910             do_toplevel_using_decl (decl, qscope, identifier);
10911         }
10912     }
10913
10914   /* Look for the final `;'.  */
10915   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10916   
10917   return true;
10918 }
10919
10920 /* Parse a using-directive.
10921
10922    using-directive:
10923      using namespace :: [opt] nested-name-specifier [opt]
10924        namespace-name ;  */
10925
10926 static void
10927 cp_parser_using_directive (cp_parser* parser)
10928 {
10929   tree namespace_decl;
10930   tree attribs;
10931
10932   /* Look for the `using' keyword.  */
10933   cp_parser_require_keyword (parser, RID_USING, "`using'");
10934   /* And the `namespace' keyword.  */
10935   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10936   /* Look for the optional `::' operator.  */
10937   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
10938   /* And the optional nested-name-specifier.  */
10939   cp_parser_nested_name_specifier_opt (parser,
10940                                        /*typename_keyword_p=*/false,
10941                                        /*check_dependency_p=*/true,
10942                                        /*type_p=*/false,
10943                                        /*is_declaration=*/true);
10944   /* Get the namespace being used.  */
10945   namespace_decl = cp_parser_namespace_name (parser);
10946   /* And any specified attributes.  */
10947   attribs = cp_parser_attributes_opt (parser);
10948   /* Update the symbol table.  */
10949   parse_using_directive (namespace_decl, attribs);
10950   /* Look for the final `;'.  */
10951   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10952 }
10953
10954 /* Parse an asm-definition.
10955
10956    asm-definition:
10957      asm ( string-literal ) ;
10958
10959    GNU Extension:
10960
10961    asm-definition:
10962      asm volatile [opt] ( string-literal ) ;
10963      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
10964      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10965                           : asm-operand-list [opt] ) ;
10966      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10967                           : asm-operand-list [opt]
10968                           : asm-operand-list [opt] ) ;  */
10969
10970 static void
10971 cp_parser_asm_definition (cp_parser* parser)
10972 {
10973   tree string;
10974   tree outputs = NULL_TREE;
10975   tree inputs = NULL_TREE;
10976   tree clobbers = NULL_TREE;
10977   tree asm_stmt;
10978   bool volatile_p = false;
10979   bool extended_p = false;
10980
10981   /* Look for the `asm' keyword.  */
10982   cp_parser_require_keyword (parser, RID_ASM, "`asm'");
10983   /* See if the next token is `volatile'.  */
10984   if (cp_parser_allow_gnu_extensions_p (parser)
10985       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
10986     {
10987       /* Remember that we saw the `volatile' keyword.  */
10988       volatile_p = true;
10989       /* Consume the token.  */
10990       cp_lexer_consume_token (parser->lexer);
10991     }
10992   /* Look for the opening `('.  */
10993   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
10994     return;
10995   /* Look for the string.  */
10996   string = cp_parser_string_literal (parser, false, false);
10997   if (string == error_mark_node)
10998     {
10999       cp_parser_skip_to_closing_parenthesis (parser, true, false,
11000                                              /*consume_paren=*/true);
11001       return;
11002     }
11003
11004   /* If we're allowing GNU extensions, check for the extended assembly
11005      syntax.  Unfortunately, the `:' tokens need not be separated by
11006      a space in C, and so, for compatibility, we tolerate that here
11007      too.  Doing that means that we have to treat the `::' operator as
11008      two `:' tokens.  */
11009   if (cp_parser_allow_gnu_extensions_p (parser)
11010       && parser->in_function_body
11011       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
11012           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
11013     {
11014       bool inputs_p = false;
11015       bool clobbers_p = false;
11016
11017       /* The extended syntax was used.  */
11018       extended_p = true;
11019
11020       /* Look for outputs.  */
11021       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11022         {
11023           /* Consume the `:'.  */
11024           cp_lexer_consume_token (parser->lexer);
11025           /* Parse the output-operands.  */
11026           if (cp_lexer_next_token_is_not (parser->lexer,
11027                                           CPP_COLON)
11028               && cp_lexer_next_token_is_not (parser->lexer,
11029                                              CPP_SCOPE)
11030               && cp_lexer_next_token_is_not (parser->lexer,
11031                                              CPP_CLOSE_PAREN))
11032             outputs = cp_parser_asm_operand_list (parser);
11033         }
11034       /* If the next token is `::', there are no outputs, and the
11035          next token is the beginning of the inputs.  */
11036       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
11037         /* The inputs are coming next.  */
11038         inputs_p = true;
11039
11040       /* Look for inputs.  */
11041       if (inputs_p
11042           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11043         {
11044           /* Consume the `:' or `::'.  */
11045           cp_lexer_consume_token (parser->lexer);
11046           /* Parse the output-operands.  */
11047           if (cp_lexer_next_token_is_not (parser->lexer,
11048                                           CPP_COLON)
11049               && cp_lexer_next_token_is_not (parser->lexer,
11050                                              CPP_CLOSE_PAREN))
11051             inputs = cp_parser_asm_operand_list (parser);
11052         }
11053       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
11054         /* The clobbers are coming next.  */
11055         clobbers_p = true;
11056
11057       /* Look for clobbers.  */
11058       if (clobbers_p
11059           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11060         {
11061           /* Consume the `:' or `::'.  */
11062           cp_lexer_consume_token (parser->lexer);
11063           /* Parse the clobbers.  */
11064           if (cp_lexer_next_token_is_not (parser->lexer,
11065                                           CPP_CLOSE_PAREN))
11066             clobbers = cp_parser_asm_clobber_list (parser);
11067         }
11068     }
11069   /* Look for the closing `)'.  */
11070   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11071     cp_parser_skip_to_closing_parenthesis (parser, true, false,
11072                                            /*consume_paren=*/true);
11073   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
11074
11075   /* Create the ASM_EXPR.  */
11076   if (parser->in_function_body)
11077     {
11078       asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
11079                                   inputs, clobbers);
11080       /* If the extended syntax was not used, mark the ASM_EXPR.  */
11081       if (!extended_p)
11082         {
11083           tree temp = asm_stmt;
11084           if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
11085             temp = TREE_OPERAND (temp, 0);
11086
11087           ASM_INPUT_P (temp) = 1;
11088         }
11089     }
11090   else
11091     cgraph_add_asm_node (string);
11092 }
11093
11094 /* Declarators [gram.dcl.decl] */
11095
11096 /* Parse an init-declarator.
11097
11098    init-declarator:
11099      declarator initializer [opt]
11100
11101    GNU Extension:
11102
11103    init-declarator:
11104      declarator asm-specification [opt] attributes [opt] initializer [opt]
11105
11106    function-definition:
11107      decl-specifier-seq [opt] declarator ctor-initializer [opt]
11108        function-body
11109      decl-specifier-seq [opt] declarator function-try-block
11110
11111    GNU Extension:
11112
11113    function-definition:
11114      __extension__ function-definition
11115
11116    The DECL_SPECIFIERS apply to this declarator.  Returns a
11117    representation of the entity declared.  If MEMBER_P is TRUE, then
11118    this declarator appears in a class scope.  The new DECL created by
11119    this declarator is returned.
11120
11121    The CHECKS are access checks that should be performed once we know
11122    what entity is being declared (and, therefore, what classes have
11123    befriended it).
11124
11125    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
11126    for a function-definition here as well.  If the declarator is a
11127    declarator for a function-definition, *FUNCTION_DEFINITION_P will
11128    be TRUE upon return.  By that point, the function-definition will
11129    have been completely parsed.
11130
11131    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
11132    is FALSE.  */
11133
11134 static tree
11135 cp_parser_init_declarator (cp_parser* parser,
11136                            cp_decl_specifier_seq *decl_specifiers,
11137                            VEC (deferred_access_check,gc)* checks,
11138                            bool function_definition_allowed_p,
11139                            bool member_p,
11140                            int declares_class_or_enum,
11141                            bool* function_definition_p)
11142 {
11143   cp_token *token;
11144   cp_declarator *declarator;
11145   tree prefix_attributes;
11146   tree attributes;
11147   tree asm_specification;
11148   tree initializer;
11149   tree decl = NULL_TREE;
11150   tree scope;
11151   bool is_initialized;
11152   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
11153      initialized with "= ..", CPP_OPEN_PAREN if initialized with
11154      "(...)".  */
11155   enum cpp_ttype initialization_kind;
11156   bool is_parenthesized_init = false;
11157   bool is_non_constant_init;
11158   int ctor_dtor_or_conv_p;
11159   bool friend_p;
11160   tree pushed_scope = NULL;
11161
11162   /* Gather the attributes that were provided with the
11163      decl-specifiers.  */
11164   prefix_attributes = decl_specifiers->attributes;
11165
11166   /* Assume that this is not the declarator for a function
11167      definition.  */
11168   if (function_definition_p)
11169     *function_definition_p = false;
11170
11171   /* Defer access checks while parsing the declarator; we cannot know
11172      what names are accessible until we know what is being
11173      declared.  */
11174   resume_deferring_access_checks ();
11175
11176   /* Parse the declarator.  */
11177   declarator
11178     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
11179                             &ctor_dtor_or_conv_p,
11180                             /*parenthesized_p=*/NULL,
11181                             /*member_p=*/false);
11182   /* Gather up the deferred checks.  */
11183   stop_deferring_access_checks ();
11184
11185   /* If the DECLARATOR was erroneous, there's no need to go
11186      further.  */
11187   if (declarator == cp_error_declarator)
11188     return error_mark_node;
11189
11190   /* Check that the number of template-parameter-lists is OK.  */
11191   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
11192     return error_mark_node;
11193
11194   if (declares_class_or_enum & 2)
11195     cp_parser_check_for_definition_in_return_type (declarator,
11196                                                    decl_specifiers->type);
11197
11198   /* Figure out what scope the entity declared by the DECLARATOR is
11199      located in.  `grokdeclarator' sometimes changes the scope, so
11200      we compute it now.  */
11201   scope = get_scope_of_declarator (declarator);
11202
11203   /* If we're allowing GNU extensions, look for an asm-specification
11204      and attributes.  */
11205   if (cp_parser_allow_gnu_extensions_p (parser))
11206     {
11207       /* Look for an asm-specification.  */
11208       asm_specification = cp_parser_asm_specification_opt (parser);
11209       /* And attributes.  */
11210       attributes = cp_parser_attributes_opt (parser);
11211     }
11212   else
11213     {
11214       asm_specification = NULL_TREE;
11215       attributes = NULL_TREE;
11216     }
11217
11218   /* Peek at the next token.  */
11219   token = cp_lexer_peek_token (parser->lexer);
11220   /* Check to see if the token indicates the start of a
11221      function-definition.  */
11222   if (cp_parser_token_starts_function_definition_p (token))
11223     {
11224       if (!function_definition_allowed_p)
11225         {
11226           /* If a function-definition should not appear here, issue an
11227              error message.  */
11228           cp_parser_error (parser,
11229                            "a function-definition is not allowed here");
11230           return error_mark_node;
11231         }
11232       else
11233         {
11234           /* Neither attributes nor an asm-specification are allowed
11235              on a function-definition.  */
11236           if (asm_specification)
11237             error ("an asm-specification is not allowed on a function-definition");
11238           if (attributes)
11239             error ("attributes are not allowed on a function-definition");
11240           /* This is a function-definition.  */
11241           *function_definition_p = true;
11242
11243           /* Parse the function definition.  */
11244           if (member_p)
11245             decl = cp_parser_save_member_function_body (parser,
11246                                                         decl_specifiers,
11247                                                         declarator,
11248                                                         prefix_attributes);
11249           else
11250             decl
11251               = (cp_parser_function_definition_from_specifiers_and_declarator
11252                  (parser, decl_specifiers, prefix_attributes, declarator));
11253
11254           return decl;
11255         }
11256     }
11257
11258   /* [dcl.dcl]
11259
11260      Only in function declarations for constructors, destructors, and
11261      type conversions can the decl-specifier-seq be omitted.
11262
11263      We explicitly postpone this check past the point where we handle
11264      function-definitions because we tolerate function-definitions
11265      that are missing their return types in some modes.  */
11266   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
11267     {
11268       cp_parser_error (parser,
11269                        "expected constructor, destructor, or type conversion");
11270       return error_mark_node;
11271     }
11272
11273   /* An `=' or an `(' indicates an initializer.  */
11274   if (token->type == CPP_EQ
11275       || token->type == CPP_OPEN_PAREN)
11276     {
11277       is_initialized = true;
11278       initialization_kind = token->type;
11279     }
11280   else
11281     {
11282       /* If the init-declarator isn't initialized and isn't followed by a
11283          `,' or `;', it's not a valid init-declarator.  */
11284       if (token->type != CPP_COMMA
11285           && token->type != CPP_SEMICOLON)
11286         {
11287           cp_parser_error (parser, "expected initializer");
11288           return error_mark_node;
11289         }
11290       is_initialized = false;
11291       initialization_kind = CPP_EOF;
11292     }
11293
11294   /* Because start_decl has side-effects, we should only call it if we
11295      know we're going ahead.  By this point, we know that we cannot
11296      possibly be looking at any other construct.  */
11297   cp_parser_commit_to_tentative_parse (parser);
11298
11299   /* If the decl specifiers were bad, issue an error now that we're
11300      sure this was intended to be a declarator.  Then continue
11301      declaring the variable(s), as int, to try to cut down on further
11302      errors.  */
11303   if (decl_specifiers->any_specifiers_p
11304       && decl_specifiers->type == error_mark_node)
11305     {
11306       cp_parser_error (parser, "invalid type in declaration");
11307       decl_specifiers->type = integer_type_node;
11308     }
11309
11310   /* Check to see whether or not this declaration is a friend.  */
11311   friend_p = cp_parser_friend_p (decl_specifiers);
11312
11313   /* Enter the newly declared entry in the symbol table.  If we're
11314      processing a declaration in a class-specifier, we wait until
11315      after processing the initializer.  */
11316   if (!member_p)
11317     {
11318       if (parser->in_unbraced_linkage_specification_p)
11319         decl_specifiers->storage_class = sc_extern;
11320       decl = start_decl (declarator, decl_specifiers,
11321                          is_initialized, attributes, prefix_attributes,
11322                          &pushed_scope);
11323     }
11324   else if (scope)
11325     /* Enter the SCOPE.  That way unqualified names appearing in the
11326        initializer will be looked up in SCOPE.  */
11327     pushed_scope = push_scope (scope);
11328
11329   /* Perform deferred access control checks, now that we know in which
11330      SCOPE the declared entity resides.  */
11331   if (!member_p && decl)
11332     {
11333       tree saved_current_function_decl = NULL_TREE;
11334
11335       /* If the entity being declared is a function, pretend that we
11336          are in its scope.  If it is a `friend', it may have access to
11337          things that would not otherwise be accessible.  */
11338       if (TREE_CODE (decl) == FUNCTION_DECL)
11339         {
11340           saved_current_function_decl = current_function_decl;
11341           current_function_decl = decl;
11342         }
11343
11344       /* Perform access checks for template parameters.  */
11345       cp_parser_perform_template_parameter_access_checks (checks);
11346
11347       /* Perform the access control checks for the declarator and the
11348          the decl-specifiers.  */
11349       perform_deferred_access_checks ();
11350
11351       /* Restore the saved value.  */
11352       if (TREE_CODE (decl) == FUNCTION_DECL)
11353         current_function_decl = saved_current_function_decl;
11354     }
11355
11356   /* Parse the initializer.  */
11357   initializer = NULL_TREE;
11358   is_parenthesized_init = false;
11359   is_non_constant_init = true;
11360   if (is_initialized)
11361     {
11362       if (function_declarator_p (declarator))
11363         {
11364            if (initialization_kind == CPP_EQ)
11365              initializer = cp_parser_pure_specifier (parser);
11366            else
11367              {
11368                /* If the declaration was erroneous, we don't really
11369                   know what the user intended, so just silently
11370                   consume the initializer.  */
11371                if (decl != error_mark_node)
11372                  error ("initializer provided for function");
11373                cp_parser_skip_to_closing_parenthesis (parser,
11374                                                       /*recovering=*/true,
11375                                                       /*or_comma=*/false,
11376                                                       /*consume_paren=*/true);
11377              }
11378         }
11379       else
11380         initializer = cp_parser_initializer (parser,
11381                                              &is_parenthesized_init,
11382                                              &is_non_constant_init);
11383     }
11384
11385   /* The old parser allows attributes to appear after a parenthesized
11386      initializer.  Mark Mitchell proposed removing this functionality
11387      on the GCC mailing lists on 2002-08-13.  This parser accepts the
11388      attributes -- but ignores them.  */
11389   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
11390     if (cp_parser_attributes_opt (parser))
11391       warning (OPT_Wattributes,
11392                "attributes after parenthesized initializer ignored");
11393
11394   /* For an in-class declaration, use `grokfield' to create the
11395      declaration.  */
11396   if (member_p)
11397     {
11398       if (pushed_scope)
11399         {
11400           pop_scope (pushed_scope);
11401           pushed_scope = false;
11402         }
11403       decl = grokfield (declarator, decl_specifiers,
11404                         initializer, !is_non_constant_init,
11405                         /*asmspec=*/NULL_TREE,
11406                         prefix_attributes);
11407       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
11408         cp_parser_save_default_args (parser, decl);
11409     }
11410
11411   /* Finish processing the declaration.  But, skip friend
11412      declarations.  */
11413   if (!friend_p && decl && decl != error_mark_node)
11414     {
11415       cp_finish_decl (decl,
11416                       initializer, !is_non_constant_init,
11417                       asm_specification,
11418                       /* If the initializer is in parentheses, then this is
11419                          a direct-initialization, which means that an
11420                          `explicit' constructor is OK.  Otherwise, an
11421                          `explicit' constructor cannot be used.  */
11422                       ((is_parenthesized_init || !is_initialized)
11423                      ? 0 : LOOKUP_ONLYCONVERTING));
11424     }
11425   if (!friend_p && pushed_scope)
11426     pop_scope (pushed_scope);
11427
11428   return decl;
11429 }
11430
11431 /* Parse a declarator.
11432
11433    declarator:
11434      direct-declarator
11435      ptr-operator declarator
11436
11437    abstract-declarator:
11438      ptr-operator abstract-declarator [opt]
11439      direct-abstract-declarator
11440
11441    GNU Extensions:
11442
11443    declarator:
11444      attributes [opt] direct-declarator
11445      attributes [opt] ptr-operator declarator
11446
11447    abstract-declarator:
11448      attributes [opt] ptr-operator abstract-declarator [opt]
11449      attributes [opt] direct-abstract-declarator
11450
11451    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
11452    detect constructor, destructor or conversion operators. It is set
11453    to -1 if the declarator is a name, and +1 if it is a
11454    function. Otherwise it is set to zero. Usually you just want to
11455    test for >0, but internally the negative value is used.
11456
11457    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
11458    a decl-specifier-seq unless it declares a constructor, destructor,
11459    or conversion.  It might seem that we could check this condition in
11460    semantic analysis, rather than parsing, but that makes it difficult
11461    to handle something like `f()'.  We want to notice that there are
11462    no decl-specifiers, and therefore realize that this is an
11463    expression, not a declaration.)
11464
11465    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
11466    the declarator is a direct-declarator of the form "(...)".
11467
11468    MEMBER_P is true iff this declarator is a member-declarator.  */
11469
11470 static cp_declarator *
11471 cp_parser_declarator (cp_parser* parser,
11472                       cp_parser_declarator_kind dcl_kind,
11473                       int* ctor_dtor_or_conv_p,
11474                       bool* parenthesized_p,
11475                       bool member_p)
11476 {
11477   cp_token *token;
11478   cp_declarator *declarator;
11479   enum tree_code code;
11480   cp_cv_quals cv_quals;
11481   tree class_type;
11482   tree attributes = NULL_TREE;
11483
11484   /* Assume this is not a constructor, destructor, or type-conversion
11485      operator.  */
11486   if (ctor_dtor_or_conv_p)
11487     *ctor_dtor_or_conv_p = 0;
11488
11489   if (cp_parser_allow_gnu_extensions_p (parser))
11490     attributes = cp_parser_attributes_opt (parser);
11491
11492   /* Peek at the next token.  */
11493   token = cp_lexer_peek_token (parser->lexer);
11494
11495   /* Check for the ptr-operator production.  */
11496   cp_parser_parse_tentatively (parser);
11497   /* Parse the ptr-operator.  */
11498   code = cp_parser_ptr_operator (parser,
11499                                  &class_type,
11500                                  &cv_quals);
11501   /* If that worked, then we have a ptr-operator.  */
11502   if (cp_parser_parse_definitely (parser))
11503     {
11504       /* If a ptr-operator was found, then this declarator was not
11505          parenthesized.  */
11506       if (parenthesized_p)
11507         *parenthesized_p = true;
11508       /* The dependent declarator is optional if we are parsing an
11509          abstract-declarator.  */
11510       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11511         cp_parser_parse_tentatively (parser);
11512
11513       /* Parse the dependent declarator.  */
11514       declarator = cp_parser_declarator (parser, dcl_kind,
11515                                          /*ctor_dtor_or_conv_p=*/NULL,
11516                                          /*parenthesized_p=*/NULL,
11517                                          /*member_p=*/false);
11518
11519       /* If we are parsing an abstract-declarator, we must handle the
11520          case where the dependent declarator is absent.  */
11521       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
11522           && !cp_parser_parse_definitely (parser))
11523         declarator = NULL;
11524
11525       /* Build the representation of the ptr-operator.  */
11526       if (class_type)
11527         declarator = make_ptrmem_declarator (cv_quals,
11528                                              class_type,
11529                                              declarator);
11530       else if (code == INDIRECT_REF)
11531         declarator = make_pointer_declarator (cv_quals, declarator);
11532       else
11533         declarator = make_reference_declarator (cv_quals, declarator);
11534     }
11535   /* Everything else is a direct-declarator.  */
11536   else
11537     {
11538       if (parenthesized_p)
11539         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
11540                                                    CPP_OPEN_PAREN);
11541       declarator = cp_parser_direct_declarator (parser, dcl_kind,
11542                                                 ctor_dtor_or_conv_p,
11543                                                 member_p);
11544     }
11545
11546   if (attributes && declarator && declarator != cp_error_declarator)
11547     declarator->attributes = attributes;
11548
11549   return declarator;
11550 }
11551
11552 /* Parse a direct-declarator or direct-abstract-declarator.
11553
11554    direct-declarator:
11555      declarator-id
11556      direct-declarator ( parameter-declaration-clause )
11557        cv-qualifier-seq [opt]
11558        exception-specification [opt]
11559      direct-declarator [ constant-expression [opt] ]
11560      ( declarator )
11561
11562    direct-abstract-declarator:
11563      direct-abstract-declarator [opt]
11564        ( parameter-declaration-clause )
11565        cv-qualifier-seq [opt]
11566        exception-specification [opt]
11567      direct-abstract-declarator [opt] [ constant-expression [opt] ]
11568      ( abstract-declarator )
11569
11570    Returns a representation of the declarator.  DCL_KIND is
11571    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
11572    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
11573    we are parsing a direct-declarator.  It is
11574    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
11575    of ambiguity we prefer an abstract declarator, as per
11576    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
11577    cp_parser_declarator.  */
11578
11579 static cp_declarator *
11580 cp_parser_direct_declarator (cp_parser* parser,
11581                              cp_parser_declarator_kind dcl_kind,
11582                              int* ctor_dtor_or_conv_p,
11583                              bool member_p)
11584 {
11585   cp_token *token;
11586   cp_declarator *declarator = NULL;
11587   tree scope = NULL_TREE;
11588   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11589   bool saved_in_declarator_p = parser->in_declarator_p;
11590   bool first = true;
11591   tree pushed_scope = NULL_TREE;
11592
11593   while (true)
11594     {
11595       /* Peek at the next token.  */
11596       token = cp_lexer_peek_token (parser->lexer);
11597       if (token->type == CPP_OPEN_PAREN)
11598         {
11599           /* This is either a parameter-declaration-clause, or a
11600              parenthesized declarator. When we know we are parsing a
11601              named declarator, it must be a parenthesized declarator
11602              if FIRST is true. For instance, `(int)' is a
11603              parameter-declaration-clause, with an omitted
11604              direct-abstract-declarator. But `((*))', is a
11605              parenthesized abstract declarator. Finally, when T is a
11606              template parameter `(T)' is a
11607              parameter-declaration-clause, and not a parenthesized
11608              named declarator.
11609
11610              We first try and parse a parameter-declaration-clause,
11611              and then try a nested declarator (if FIRST is true).
11612
11613              It is not an error for it not to be a
11614              parameter-declaration-clause, even when FIRST is
11615              false. Consider,
11616
11617                int i (int);
11618                int i (3);
11619
11620              The first is the declaration of a function while the
11621              second is a the definition of a variable, including its
11622              initializer.
11623
11624              Having seen only the parenthesis, we cannot know which of
11625              these two alternatives should be selected.  Even more
11626              complex are examples like:
11627
11628                int i (int (a));
11629                int i (int (3));
11630
11631              The former is a function-declaration; the latter is a
11632              variable initialization.
11633
11634              Thus again, we try a parameter-declaration-clause, and if
11635              that fails, we back out and return.  */
11636
11637           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11638             {
11639               cp_parameter_declarator *params;
11640               unsigned saved_num_template_parameter_lists;
11641
11642               /* In a member-declarator, the only valid interpretation
11643                  of a parenthesis is the start of a
11644                  parameter-declaration-clause.  (It is invalid to
11645                  initialize a static data member with a parenthesized
11646                  initializer; only the "=" form of initialization is
11647                  permitted.)  */
11648               if (!member_p)
11649                 cp_parser_parse_tentatively (parser);
11650
11651               /* Consume the `('.  */
11652               cp_lexer_consume_token (parser->lexer);
11653               if (first)
11654                 {
11655                   /* If this is going to be an abstract declarator, we're
11656                      in a declarator and we can't have default args.  */
11657                   parser->default_arg_ok_p = false;
11658                   parser->in_declarator_p = true;
11659                 }
11660
11661               /* Inside the function parameter list, surrounding
11662                  template-parameter-lists do not apply.  */
11663               saved_num_template_parameter_lists
11664                 = parser->num_template_parameter_lists;
11665               parser->num_template_parameter_lists = 0;
11666
11667               /* Parse the parameter-declaration-clause.  */
11668               params = cp_parser_parameter_declaration_clause (parser);
11669
11670               parser->num_template_parameter_lists
11671                 = saved_num_template_parameter_lists;
11672
11673               /* If all went well, parse the cv-qualifier-seq and the
11674                  exception-specification.  */
11675               if (member_p || cp_parser_parse_definitely (parser))
11676                 {
11677                   cp_cv_quals cv_quals;
11678                   tree exception_specification;
11679
11680                   if (ctor_dtor_or_conv_p)
11681                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
11682                   first = false;
11683                   /* Consume the `)'.  */
11684                   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
11685
11686                   /* Parse the cv-qualifier-seq.  */
11687                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11688                   /* And the exception-specification.  */
11689                   exception_specification
11690                     = cp_parser_exception_specification_opt (parser);
11691
11692                   /* Create the function-declarator.  */
11693                   declarator = make_call_declarator (declarator,
11694                                                      params,
11695                                                      cv_quals,
11696                                                      exception_specification);
11697                   /* Any subsequent parameter lists are to do with
11698                      return type, so are not those of the declared
11699                      function.  */
11700                   parser->default_arg_ok_p = false;
11701
11702                   /* Repeat the main loop.  */
11703                   continue;
11704                 }
11705             }
11706
11707           /* If this is the first, we can try a parenthesized
11708              declarator.  */
11709           if (first)
11710             {
11711               bool saved_in_type_id_in_expr_p;
11712
11713               parser->default_arg_ok_p = saved_default_arg_ok_p;
11714               parser->in_declarator_p = saved_in_declarator_p;
11715
11716               /* Consume the `('.  */
11717               cp_lexer_consume_token (parser->lexer);
11718               /* Parse the nested declarator.  */
11719               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
11720               parser->in_type_id_in_expr_p = true;
11721               declarator
11722                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
11723                                         /*parenthesized_p=*/NULL,
11724                                         member_p);
11725               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
11726               first = false;
11727               /* Expect a `)'.  */
11728               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11729                 declarator = cp_error_declarator;
11730               if (declarator == cp_error_declarator)
11731                 break;
11732
11733               goto handle_declarator;
11734             }
11735           /* Otherwise, we must be done.  */
11736           else
11737             break;
11738         }
11739       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11740                && token->type == CPP_OPEN_SQUARE)
11741         {
11742           /* Parse an array-declarator.  */
11743           tree bounds;
11744
11745           if (ctor_dtor_or_conv_p)
11746             *ctor_dtor_or_conv_p = 0;
11747
11748           first = false;
11749           parser->default_arg_ok_p = false;
11750           parser->in_declarator_p = true;
11751           /* Consume the `['.  */
11752           cp_lexer_consume_token (parser->lexer);
11753           /* Peek at the next token.  */
11754           token = cp_lexer_peek_token (parser->lexer);
11755           /* If the next token is `]', then there is no
11756              constant-expression.  */
11757           if (token->type != CPP_CLOSE_SQUARE)
11758             {
11759               bool non_constant_p;
11760
11761               bounds
11762                 = cp_parser_constant_expression (parser,
11763                                                  /*allow_non_constant=*/true,
11764                                                  &non_constant_p);
11765               if (!non_constant_p)
11766                 bounds = fold_non_dependent_expr (bounds);
11767               /* Normally, the array bound must be an integral constant
11768                  expression.  However, as an extension, we allow VLAs
11769                  in function scopes.  */
11770               else if (!parser->in_function_body)
11771                 {
11772                   error ("array bound is not an integer constant");
11773                   bounds = error_mark_node;
11774                 }
11775             }
11776           else
11777             bounds = NULL_TREE;
11778           /* Look for the closing `]'.  */
11779           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
11780             {
11781               declarator = cp_error_declarator;
11782               break;
11783             }
11784
11785           declarator = make_array_declarator (declarator, bounds);
11786         }
11787       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
11788         {
11789           tree qualifying_scope;
11790           tree unqualified_name;
11791           special_function_kind sfk;
11792           bool abstract_ok;
11793
11794           /* Parse a declarator-id */
11795           abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
11796           if (abstract_ok)
11797             cp_parser_parse_tentatively (parser);
11798           unqualified_name
11799             = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
11800           qualifying_scope = parser->scope;
11801           if (abstract_ok)
11802             {
11803               if (!cp_parser_parse_definitely (parser))
11804                 unqualified_name = error_mark_node;
11805               else if (unqualified_name
11806                        && (qualifying_scope
11807                            || (TREE_CODE (unqualified_name)
11808                                != IDENTIFIER_NODE)))
11809                 {
11810                   cp_parser_error (parser, "expected unqualified-id");
11811                   unqualified_name = error_mark_node;
11812                 }
11813             }
11814
11815           if (!unqualified_name)
11816             return NULL;
11817           if (unqualified_name == error_mark_node)
11818             {
11819               declarator = cp_error_declarator;
11820               break;
11821             }
11822
11823           if (qualifying_scope && at_namespace_scope_p ()
11824               && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
11825             {
11826               /* In the declaration of a member of a template class
11827                  outside of the class itself, the SCOPE will sometimes
11828                  be a TYPENAME_TYPE.  For example, given:
11829
11830                  template <typename T>
11831                  int S<T>::R::i = 3;
11832
11833                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
11834                  this context, we must resolve S<T>::R to an ordinary
11835                  type, rather than a typename type.
11836
11837                  The reason we normally avoid resolving TYPENAME_TYPEs
11838                  is that a specialization of `S' might render
11839                  `S<T>::R' not a type.  However, if `S' is
11840                  specialized, then this `i' will not be used, so there
11841                  is no harm in resolving the types here.  */
11842               tree type;
11843
11844               /* Resolve the TYPENAME_TYPE.  */
11845               type = resolve_typename_type (qualifying_scope,
11846                                             /*only_current_p=*/false);
11847               /* If that failed, the declarator is invalid.  */
11848               if (type == error_mark_node)
11849                 error ("%<%T::%D%> is not a type",
11850                        TYPE_CONTEXT (qualifying_scope),
11851                        TYPE_IDENTIFIER (qualifying_scope));
11852               qualifying_scope = type;
11853             }
11854
11855           sfk = sfk_none;
11856           if (unqualified_name)
11857             {
11858               tree class_type;
11859
11860               if (qualifying_scope
11861                   && CLASS_TYPE_P (qualifying_scope))
11862                 class_type = qualifying_scope;
11863               else
11864                 class_type = current_class_type;
11865
11866               if (TREE_CODE (unqualified_name) == TYPE_DECL)
11867                 {
11868                   tree name_type = TREE_TYPE (unqualified_name);
11869                   if (class_type && same_type_p (name_type, class_type))
11870                     {
11871                       if (qualifying_scope
11872                           && CLASSTYPE_USE_TEMPLATE (name_type))
11873                         {
11874                           error ("invalid use of constructor as a template");
11875                           inform ("use %<%T::%D%> instead of %<%T::%D%> to "
11876                                   "name the constructor in a qualified name",
11877                                   class_type,
11878                                   DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
11879                                   class_type, name_type);
11880                           declarator = cp_error_declarator;
11881                           break;
11882                         }
11883                       else
11884                         unqualified_name = constructor_name (class_type);
11885                     }
11886                   else
11887                     {
11888                       /* We do not attempt to print the declarator
11889                          here because we do not have enough
11890                          information about its original syntactic
11891                          form.  */
11892                       cp_parser_error (parser, "invalid declarator");
11893                       declarator = cp_error_declarator;
11894                       break;
11895                     }
11896                 }
11897
11898               if (class_type)
11899                 {
11900                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
11901                     sfk = sfk_destructor;
11902                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
11903                     sfk = sfk_conversion;
11904                   else if (/* There's no way to declare a constructor
11905                               for an anonymous type, even if the type
11906                               got a name for linkage purposes.  */
11907                            !TYPE_WAS_ANONYMOUS (class_type)
11908                            && constructor_name_p (unqualified_name,
11909                                                   class_type))
11910                     {
11911                       unqualified_name = constructor_name (class_type);
11912                       sfk = sfk_constructor;
11913                     }
11914
11915                   if (ctor_dtor_or_conv_p && sfk != sfk_none)
11916                     *ctor_dtor_or_conv_p = -1;
11917                 }
11918             }
11919           declarator = make_id_declarator (qualifying_scope,
11920                                            unqualified_name,
11921                                            sfk);
11922           declarator->id_loc = token->location;
11923
11924         handle_declarator:;
11925           scope = get_scope_of_declarator (declarator);
11926           if (scope)
11927             /* Any names that appear after the declarator-id for a
11928                member are looked up in the containing scope.  */
11929             pushed_scope = push_scope (scope);
11930           parser->in_declarator_p = true;
11931           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
11932               || (declarator && declarator->kind == cdk_id))
11933             /* Default args are only allowed on function
11934                declarations.  */
11935             parser->default_arg_ok_p = saved_default_arg_ok_p;
11936           else
11937             parser->default_arg_ok_p = false;
11938
11939           first = false;
11940         }
11941       /* We're done.  */
11942       else
11943         break;
11944     }
11945
11946   /* For an abstract declarator, we might wind up with nothing at this
11947      point.  That's an error; the declarator is not optional.  */
11948   if (!declarator)
11949     cp_parser_error (parser, "expected declarator");
11950
11951   /* If we entered a scope, we must exit it now.  */
11952   if (pushed_scope)
11953     pop_scope (pushed_scope);
11954
11955   parser->default_arg_ok_p = saved_default_arg_ok_p;
11956   parser->in_declarator_p = saved_in_declarator_p;
11957
11958   return declarator;
11959 }
11960
11961 /* Parse a ptr-operator.
11962
11963    ptr-operator:
11964      * cv-qualifier-seq [opt]
11965      &
11966      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
11967
11968    GNU Extension:
11969
11970    ptr-operator:
11971      & cv-qualifier-seq [opt]
11972
11973    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
11974    Returns ADDR_EXPR if a reference was used.  In the case of a
11975    pointer-to-member, *TYPE is filled in with the TYPE containing the
11976    member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
11977    TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
11978    ERROR_MARK if an error occurred.  */
11979
11980 static enum tree_code
11981 cp_parser_ptr_operator (cp_parser* parser,
11982                         tree* type,
11983                         cp_cv_quals *cv_quals)
11984 {
11985   enum tree_code code = ERROR_MARK;
11986   cp_token *token;
11987
11988   /* Assume that it's not a pointer-to-member.  */
11989   *type = NULL_TREE;
11990   /* And that there are no cv-qualifiers.  */
11991   *cv_quals = TYPE_UNQUALIFIED;
11992
11993   /* Peek at the next token.  */
11994   token = cp_lexer_peek_token (parser->lexer);
11995   /* If it's a `*' or `&' we have a pointer or reference.  */
11996   if (token->type == CPP_MULT || token->type == CPP_AND)
11997     {
11998       /* Remember which ptr-operator we were processing.  */
11999       code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
12000
12001       /* Consume the `*' or `&'.  */
12002       cp_lexer_consume_token (parser->lexer);
12003
12004       /* A `*' can be followed by a cv-qualifier-seq, and so can a
12005          `&', if we are allowing GNU extensions.  (The only qualifier
12006          that can legally appear after `&' is `restrict', but that is
12007          enforced during semantic analysis.  */
12008       if (code == INDIRECT_REF
12009           || cp_parser_allow_gnu_extensions_p (parser))
12010         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
12011     }
12012   else
12013     {
12014       /* Try the pointer-to-member case.  */
12015       cp_parser_parse_tentatively (parser);
12016       /* Look for the optional `::' operator.  */
12017       cp_parser_global_scope_opt (parser,
12018                                   /*current_scope_valid_p=*/false);
12019       /* Look for the nested-name specifier.  */
12020       cp_parser_nested_name_specifier (parser,
12021                                        /*typename_keyword_p=*/false,
12022                                        /*check_dependency_p=*/true,
12023                                        /*type_p=*/false,
12024                                        /*is_declaration=*/false);
12025       /* If we found it, and the next token is a `*', then we are
12026          indeed looking at a pointer-to-member operator.  */
12027       if (!cp_parser_error_occurred (parser)
12028           && cp_parser_require (parser, CPP_MULT, "`*'"))
12029         {
12030           /* Indicate that the `*' operator was used.  */
12031           code = INDIRECT_REF;
12032
12033           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
12034             error ("%qD is a namespace", parser->scope);
12035           else
12036             {
12037               /* The type of which the member is a member is given by the
12038                  current SCOPE.  */
12039               *type = parser->scope;
12040               /* The next name will not be qualified.  */
12041               parser->scope = NULL_TREE;
12042               parser->qualifying_scope = NULL_TREE;
12043               parser->object_scope = NULL_TREE;
12044               /* Look for the optional cv-qualifier-seq.  */
12045               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
12046             }
12047         }
12048       /* If that didn't work we don't have a ptr-operator.  */
12049       if (!cp_parser_parse_definitely (parser))
12050         cp_parser_error (parser, "expected ptr-operator");
12051     }
12052
12053   return code;
12054 }
12055
12056 /* Parse an (optional) cv-qualifier-seq.
12057
12058    cv-qualifier-seq:
12059      cv-qualifier cv-qualifier-seq [opt]
12060
12061    cv-qualifier:
12062      const
12063      volatile
12064
12065    GNU Extension:
12066
12067    cv-qualifier:
12068      __restrict__
12069
12070    Returns a bitmask representing the cv-qualifiers.  */
12071
12072 static cp_cv_quals
12073 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
12074 {
12075   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
12076
12077   while (true)
12078     {
12079       cp_token *token;
12080       cp_cv_quals cv_qualifier;
12081
12082       /* Peek at the next token.  */
12083       token = cp_lexer_peek_token (parser->lexer);
12084       /* See if it's a cv-qualifier.  */
12085       switch (token->keyword)
12086         {
12087         case RID_CONST:
12088           cv_qualifier = TYPE_QUAL_CONST;
12089           break;
12090
12091         case RID_VOLATILE:
12092           cv_qualifier = TYPE_QUAL_VOLATILE;
12093           break;
12094
12095         case RID_RESTRICT:
12096           cv_qualifier = TYPE_QUAL_RESTRICT;
12097           break;
12098
12099         default:
12100           cv_qualifier = TYPE_UNQUALIFIED;
12101           break;
12102         }
12103
12104       if (!cv_qualifier)
12105         break;
12106
12107       if (cv_quals & cv_qualifier)
12108         {
12109           error ("duplicate cv-qualifier");
12110           cp_lexer_purge_token (parser->lexer);
12111         }
12112       else
12113         {
12114           cp_lexer_consume_token (parser->lexer);
12115           cv_quals |= cv_qualifier;
12116         }
12117     }
12118
12119   return cv_quals;
12120 }
12121
12122 /* Parse a declarator-id.
12123
12124    declarator-id:
12125      id-expression
12126      :: [opt] nested-name-specifier [opt] type-name
12127
12128    In the `id-expression' case, the value returned is as for
12129    cp_parser_id_expression if the id-expression was an unqualified-id.
12130    If the id-expression was a qualified-id, then a SCOPE_REF is
12131    returned.  The first operand is the scope (either a NAMESPACE_DECL
12132    or TREE_TYPE), but the second is still just a representation of an
12133    unqualified-id.  */
12134
12135 static tree
12136 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
12137 {
12138   tree id;
12139   /* The expression must be an id-expression.  Assume that qualified
12140      names are the names of types so that:
12141
12142        template <class T>
12143        int S<T>::R::i = 3;
12144
12145      will work; we must treat `S<T>::R' as the name of a type.
12146      Similarly, assume that qualified names are templates, where
12147      required, so that:
12148
12149        template <class T>
12150        int S<T>::R<T>::i = 3;
12151
12152      will work, too.  */
12153   id = cp_parser_id_expression (parser,
12154                                 /*template_keyword_p=*/false,
12155                                 /*check_dependency_p=*/false,
12156                                 /*template_p=*/NULL,
12157                                 /*declarator_p=*/true,
12158                                 optional_p);
12159   if (id && BASELINK_P (id))
12160     id = BASELINK_FUNCTIONS (id);
12161   return id;
12162 }
12163
12164 /* Parse a type-id.
12165
12166    type-id:
12167      type-specifier-seq abstract-declarator [opt]
12168
12169    Returns the TYPE specified.  */
12170
12171 static tree
12172 cp_parser_type_id (cp_parser* parser)
12173 {
12174   cp_decl_specifier_seq type_specifier_seq;
12175   cp_declarator *abstract_declarator;
12176
12177   /* Parse the type-specifier-seq.  */
12178   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
12179                                 &type_specifier_seq);
12180   if (type_specifier_seq.type == error_mark_node)
12181     return error_mark_node;
12182
12183   /* There might or might not be an abstract declarator.  */
12184   cp_parser_parse_tentatively (parser);
12185   /* Look for the declarator.  */
12186   abstract_declarator
12187     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
12188                             /*parenthesized_p=*/NULL,
12189                             /*member_p=*/false);
12190   /* Check to see if there really was a declarator.  */
12191   if (!cp_parser_parse_definitely (parser))
12192     abstract_declarator = NULL;
12193
12194   return groktypename (&type_specifier_seq, abstract_declarator);
12195 }
12196
12197 /* Parse a type-specifier-seq.
12198
12199    type-specifier-seq:
12200      type-specifier type-specifier-seq [opt]
12201
12202    GNU extension:
12203
12204    type-specifier-seq:
12205      attributes type-specifier-seq [opt]
12206
12207    If IS_CONDITION is true, we are at the start of a "condition",
12208    e.g., we've just seen "if (".
12209
12210    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
12211
12212 static void
12213 cp_parser_type_specifier_seq (cp_parser* parser,
12214                               bool is_condition,
12215                               cp_decl_specifier_seq *type_specifier_seq)
12216 {
12217   bool seen_type_specifier = false;
12218   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
12219
12220   /* Clear the TYPE_SPECIFIER_SEQ.  */
12221   clear_decl_specs (type_specifier_seq);
12222
12223   /* Parse the type-specifiers and attributes.  */
12224   while (true)
12225     {
12226       tree type_specifier;
12227       bool is_cv_qualifier;
12228
12229       /* Check for attributes first.  */
12230       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
12231         {
12232           type_specifier_seq->attributes =
12233             chainon (type_specifier_seq->attributes,
12234                      cp_parser_attributes_opt (parser));
12235           continue;
12236         }
12237
12238       /* Look for the type-specifier.  */
12239       type_specifier = cp_parser_type_specifier (parser,
12240                                                  flags,
12241                                                  type_specifier_seq,
12242                                                  /*is_declaration=*/false,
12243                                                  NULL,
12244                                                  &is_cv_qualifier);
12245       if (!type_specifier)
12246         {
12247           /* If the first type-specifier could not be found, this is not a
12248              type-specifier-seq at all.  */
12249           if (!seen_type_specifier)
12250             {
12251               cp_parser_error (parser, "expected type-specifier");
12252               type_specifier_seq->type = error_mark_node;
12253               return;
12254             }
12255           /* If subsequent type-specifiers could not be found, the
12256              type-specifier-seq is complete.  */
12257           break;
12258         }
12259
12260       seen_type_specifier = true;
12261       /* The standard says that a condition can be:
12262
12263             type-specifier-seq declarator = assignment-expression
12264
12265          However, given:
12266
12267            struct S {};
12268            if (int S = ...)
12269
12270          we should treat the "S" as a declarator, not as a
12271          type-specifier.  The standard doesn't say that explicitly for
12272          type-specifier-seq, but it does say that for
12273          decl-specifier-seq in an ordinary declaration.  Perhaps it
12274          would be clearer just to allow a decl-specifier-seq here, and
12275          then add a semantic restriction that if any decl-specifiers
12276          that are not type-specifiers appear, the program is invalid.  */
12277       if (is_condition && !is_cv_qualifier)
12278         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
12279     }
12280
12281   cp_parser_check_decl_spec (type_specifier_seq);
12282 }
12283
12284 /* Parse a parameter-declaration-clause.
12285
12286    parameter-declaration-clause:
12287      parameter-declaration-list [opt] ... [opt]
12288      parameter-declaration-list , ...
12289
12290    Returns a representation for the parameter declarations.  A return
12291    value of NULL indicates a parameter-declaration-clause consisting
12292    only of an ellipsis.  */
12293
12294 static cp_parameter_declarator *
12295 cp_parser_parameter_declaration_clause (cp_parser* parser)
12296 {
12297   cp_parameter_declarator *parameters;
12298   cp_token *token;
12299   bool ellipsis_p;
12300   bool is_error;
12301
12302   /* Peek at the next token.  */
12303   token = cp_lexer_peek_token (parser->lexer);
12304   /* Check for trivial parameter-declaration-clauses.  */
12305   if (token->type == CPP_ELLIPSIS)
12306     {
12307       /* Consume the `...' token.  */
12308       cp_lexer_consume_token (parser->lexer);
12309       return NULL;
12310     }
12311   else if (token->type == CPP_CLOSE_PAREN)
12312     /* There are no parameters.  */
12313     {
12314 #ifndef NO_IMPLICIT_EXTERN_C
12315       if (in_system_header && current_class_type == NULL
12316           && current_lang_name == lang_name_c)
12317         return NULL;
12318       else
12319 #endif
12320         return no_parameters;
12321     }
12322   /* Check for `(void)', too, which is a special case.  */
12323   else if (token->keyword == RID_VOID
12324            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
12325                == CPP_CLOSE_PAREN))
12326     {
12327       /* Consume the `void' token.  */
12328       cp_lexer_consume_token (parser->lexer);
12329       /* There are no parameters.  */
12330       return no_parameters;
12331     }
12332
12333   /* Parse the parameter-declaration-list.  */
12334   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
12335   /* If a parse error occurred while parsing the
12336      parameter-declaration-list, then the entire
12337      parameter-declaration-clause is erroneous.  */
12338   if (is_error)
12339     return NULL;
12340
12341   /* Peek at the next token.  */
12342   token = cp_lexer_peek_token (parser->lexer);
12343   /* If it's a `,', the clause should terminate with an ellipsis.  */
12344   if (token->type == CPP_COMMA)
12345     {
12346       /* Consume the `,'.  */
12347       cp_lexer_consume_token (parser->lexer);
12348       /* Expect an ellipsis.  */
12349       ellipsis_p
12350         = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
12351     }
12352   /* It might also be `...' if the optional trailing `,' was
12353      omitted.  */
12354   else if (token->type == CPP_ELLIPSIS)
12355     {
12356       /* Consume the `...' token.  */
12357       cp_lexer_consume_token (parser->lexer);
12358       /* And remember that we saw it.  */
12359       ellipsis_p = true;
12360     }
12361   else
12362     ellipsis_p = false;
12363
12364   /* Finish the parameter list.  */
12365   if (parameters && ellipsis_p)
12366     parameters->ellipsis_p = true;
12367
12368   return parameters;
12369 }
12370
12371 /* Parse a parameter-declaration-list.
12372
12373    parameter-declaration-list:
12374      parameter-declaration
12375      parameter-declaration-list , parameter-declaration
12376
12377    Returns a representation of the parameter-declaration-list, as for
12378    cp_parser_parameter_declaration_clause.  However, the
12379    `void_list_node' is never appended to the list.  Upon return,
12380    *IS_ERROR will be true iff an error occurred.  */
12381
12382 static cp_parameter_declarator *
12383 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
12384 {
12385   cp_parameter_declarator *parameters = NULL;
12386   cp_parameter_declarator **tail = &parameters;
12387   bool saved_in_unbraced_linkage_specification_p;
12388
12389   /* Assume all will go well.  */
12390   *is_error = false;
12391   /* The special considerations that apply to a function within an
12392      unbraced linkage specifications do not apply to the parameters
12393      to the function.  */
12394   saved_in_unbraced_linkage_specification_p 
12395     = parser->in_unbraced_linkage_specification_p;
12396   parser->in_unbraced_linkage_specification_p = false;
12397
12398   /* Look for more parameters.  */
12399   while (true)
12400     {
12401       cp_parameter_declarator *parameter;
12402       bool parenthesized_p;
12403       /* Parse the parameter.  */
12404       parameter
12405         = cp_parser_parameter_declaration (parser,
12406                                            /*template_parm_p=*/false,
12407                                            &parenthesized_p);
12408
12409       /* If a parse error occurred parsing the parameter declaration,
12410          then the entire parameter-declaration-list is erroneous.  */
12411       if (!parameter)
12412         {
12413           *is_error = true;
12414           parameters = NULL;
12415           break;
12416         }
12417       /* Add the new parameter to the list.  */
12418       *tail = parameter;
12419       tail = &parameter->next;
12420
12421       /* Peek at the next token.  */
12422       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
12423           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
12424           /* These are for Objective-C++ */
12425           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
12426           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
12427         /* The parameter-declaration-list is complete.  */
12428         break;
12429       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12430         {
12431           cp_token *token;
12432
12433           /* Peek at the next token.  */
12434           token = cp_lexer_peek_nth_token (parser->lexer, 2);
12435           /* If it's an ellipsis, then the list is complete.  */
12436           if (token->type == CPP_ELLIPSIS)
12437             break;
12438           /* Otherwise, there must be more parameters.  Consume the
12439              `,'.  */
12440           cp_lexer_consume_token (parser->lexer);
12441           /* When parsing something like:
12442
12443                 int i(float f, double d)
12444
12445              we can tell after seeing the declaration for "f" that we
12446              are not looking at an initialization of a variable "i",
12447              but rather at the declaration of a function "i".
12448
12449              Due to the fact that the parsing of template arguments
12450              (as specified to a template-id) requires backtracking we
12451              cannot use this technique when inside a template argument
12452              list.  */
12453           if (!parser->in_template_argument_list_p
12454               && !parser->in_type_id_in_expr_p
12455               && cp_parser_uncommitted_to_tentative_parse_p (parser)
12456               /* However, a parameter-declaration of the form
12457                  "foat(f)" (which is a valid declaration of a
12458                  parameter "f") can also be interpreted as an
12459                  expression (the conversion of "f" to "float").  */
12460               && !parenthesized_p)
12461             cp_parser_commit_to_tentative_parse (parser);
12462         }
12463       else
12464         {
12465           cp_parser_error (parser, "expected %<,%> or %<...%>");
12466           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
12467             cp_parser_skip_to_closing_parenthesis (parser,
12468                                                    /*recovering=*/true,
12469                                                    /*or_comma=*/false,
12470                                                    /*consume_paren=*/false);
12471           break;
12472         }
12473     }
12474
12475   parser->in_unbraced_linkage_specification_p
12476     = saved_in_unbraced_linkage_specification_p;
12477
12478   return parameters;
12479 }
12480
12481 /* Parse a parameter declaration.
12482
12483    parameter-declaration:
12484      decl-specifier-seq declarator
12485      decl-specifier-seq declarator = assignment-expression
12486      decl-specifier-seq abstract-declarator [opt]
12487      decl-specifier-seq abstract-declarator [opt] = assignment-expression
12488
12489    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
12490    declares a template parameter.  (In that case, a non-nested `>'
12491    token encountered during the parsing of the assignment-expression
12492    is not interpreted as a greater-than operator.)
12493
12494    Returns a representation of the parameter, or NULL if an error
12495    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
12496    true iff the declarator is of the form "(p)".  */
12497
12498 static cp_parameter_declarator *
12499 cp_parser_parameter_declaration (cp_parser *parser,
12500                                  bool template_parm_p,
12501                                  bool *parenthesized_p)
12502 {
12503   int declares_class_or_enum;
12504   bool greater_than_is_operator_p;
12505   cp_decl_specifier_seq decl_specifiers;
12506   cp_declarator *declarator;
12507   tree default_argument;
12508   cp_token *token;
12509   const char *saved_message;
12510
12511   /* In a template parameter, `>' is not an operator.
12512
12513      [temp.param]
12514
12515      When parsing a default template-argument for a non-type
12516      template-parameter, the first non-nested `>' is taken as the end
12517      of the template parameter-list rather than a greater-than
12518      operator.  */
12519   greater_than_is_operator_p = !template_parm_p;
12520
12521   /* Type definitions may not appear in parameter types.  */
12522   saved_message = parser->type_definition_forbidden_message;
12523   parser->type_definition_forbidden_message
12524     = "types may not be defined in parameter types";
12525
12526   /* Parse the declaration-specifiers.  */
12527   cp_parser_decl_specifier_seq (parser,
12528                                 CP_PARSER_FLAGS_NONE,
12529                                 &decl_specifiers,
12530                                 &declares_class_or_enum);
12531   /* If an error occurred, there's no reason to attempt to parse the
12532      rest of the declaration.  */
12533   if (cp_parser_error_occurred (parser))
12534     {
12535       parser->type_definition_forbidden_message = saved_message;
12536       return NULL;
12537     }
12538
12539   /* Peek at the next token.  */
12540   token = cp_lexer_peek_token (parser->lexer);
12541   /* If the next token is a `)', `,', `=', `>', or `...', then there
12542      is no declarator.  */
12543   if (token->type == CPP_CLOSE_PAREN
12544       || token->type == CPP_COMMA
12545       || token->type == CPP_EQ
12546       || token->type == CPP_ELLIPSIS
12547       || token->type == CPP_GREATER)
12548     {
12549       declarator = NULL;
12550       if (parenthesized_p)
12551         *parenthesized_p = false;
12552     }
12553   /* Otherwise, there should be a declarator.  */
12554   else
12555     {
12556       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
12557       parser->default_arg_ok_p = false;
12558
12559       /* After seeing a decl-specifier-seq, if the next token is not a
12560          "(", there is no possibility that the code is a valid
12561          expression.  Therefore, if parsing tentatively, we commit at
12562          this point.  */
12563       if (!parser->in_template_argument_list_p
12564           /* In an expression context, having seen:
12565
12566                (int((char ...
12567
12568              we cannot be sure whether we are looking at a
12569              function-type (taking a "char" as a parameter) or a cast
12570              of some object of type "char" to "int".  */
12571           && !parser->in_type_id_in_expr_p
12572           && cp_parser_uncommitted_to_tentative_parse_p (parser)
12573           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
12574         cp_parser_commit_to_tentative_parse (parser);
12575       /* Parse the declarator.  */
12576       declarator = cp_parser_declarator (parser,
12577                                          CP_PARSER_DECLARATOR_EITHER,
12578                                          /*ctor_dtor_or_conv_p=*/NULL,
12579                                          parenthesized_p,
12580                                          /*member_p=*/false);
12581       parser->default_arg_ok_p = saved_default_arg_ok_p;
12582       /* After the declarator, allow more attributes.  */
12583       decl_specifiers.attributes
12584         = chainon (decl_specifiers.attributes,
12585                    cp_parser_attributes_opt (parser));
12586     }
12587
12588   /* The restriction on defining new types applies only to the type
12589      of the parameter, not to the default argument.  */
12590   parser->type_definition_forbidden_message = saved_message;
12591
12592   /* If the next token is `=', then process a default argument.  */
12593   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12594     {
12595       bool saved_greater_than_is_operator_p;
12596       /* Consume the `='.  */
12597       cp_lexer_consume_token (parser->lexer);
12598
12599       /* If we are defining a class, then the tokens that make up the
12600          default argument must be saved and processed later.  */
12601       if (!template_parm_p && at_class_scope_p ()
12602           && TYPE_BEING_DEFINED (current_class_type))
12603         {
12604           unsigned depth = 0;
12605           cp_token *first_token;
12606           cp_token *token;
12607
12608           /* Add tokens until we have processed the entire default
12609              argument.  We add the range [first_token, token).  */
12610           first_token = cp_lexer_peek_token (parser->lexer);
12611           while (true)
12612             {
12613               bool done = false;
12614
12615               /* Peek at the next token.  */
12616               token = cp_lexer_peek_token (parser->lexer);
12617               /* What we do depends on what token we have.  */
12618               switch (token->type)
12619                 {
12620                   /* In valid code, a default argument must be
12621                      immediately followed by a `,' `)', or `...'.  */
12622                 case CPP_COMMA:
12623                 case CPP_CLOSE_PAREN:
12624                 case CPP_ELLIPSIS:
12625                   /* If we run into a non-nested `;', `}', or `]',
12626                      then the code is invalid -- but the default
12627                      argument is certainly over.  */
12628                 case CPP_SEMICOLON:
12629                 case CPP_CLOSE_BRACE:
12630                 case CPP_CLOSE_SQUARE:
12631                   if (depth == 0)
12632                     done = true;
12633                   /* Update DEPTH, if necessary.  */
12634                   else if (token->type == CPP_CLOSE_PAREN
12635                            || token->type == CPP_CLOSE_BRACE
12636                            || token->type == CPP_CLOSE_SQUARE)
12637                     --depth;
12638                   break;
12639
12640                 case CPP_OPEN_PAREN:
12641                 case CPP_OPEN_SQUARE:
12642                 case CPP_OPEN_BRACE:
12643                   ++depth;
12644                   break;
12645
12646                 case CPP_GREATER:
12647                   /* If we see a non-nested `>', and `>' is not an
12648                      operator, then it marks the end of the default
12649                      argument.  */
12650                   if (!depth && !greater_than_is_operator_p)
12651                     done = true;
12652                   break;
12653
12654                   /* If we run out of tokens, issue an error message.  */
12655                 case CPP_EOF:
12656                 case CPP_PRAGMA_EOL:
12657                   error ("file ends in default argument");
12658                   done = true;
12659                   break;
12660
12661                 case CPP_NAME:
12662                 case CPP_SCOPE:
12663                   /* In these cases, we should look for template-ids.
12664                      For example, if the default argument is
12665                      `X<int, double>()', we need to do name lookup to
12666                      figure out whether or not `X' is a template; if
12667                      so, the `,' does not end the default argument.
12668
12669                      That is not yet done.  */
12670                   break;
12671
12672                 default:
12673                   break;
12674                 }
12675
12676               /* If we've reached the end, stop.  */
12677               if (done)
12678                 break;
12679
12680               /* Add the token to the token block.  */
12681               token = cp_lexer_consume_token (parser->lexer);
12682             }
12683
12684           /* Create a DEFAULT_ARG to represented the unparsed default
12685              argument.  */
12686           default_argument = make_node (DEFAULT_ARG);
12687           DEFARG_TOKENS (default_argument)
12688             = cp_token_cache_new (first_token, token);
12689           DEFARG_INSTANTIATIONS (default_argument) = NULL;
12690         }
12691       /* Outside of a class definition, we can just parse the
12692          assignment-expression.  */
12693       else
12694         {
12695           bool saved_local_variables_forbidden_p;
12696
12697           /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
12698              set correctly.  */
12699           saved_greater_than_is_operator_p
12700             = parser->greater_than_is_operator_p;
12701           parser->greater_than_is_operator_p = greater_than_is_operator_p;
12702           /* Local variable names (and the `this' keyword) may not
12703              appear in a default argument.  */
12704           saved_local_variables_forbidden_p
12705             = parser->local_variables_forbidden_p;
12706           parser->local_variables_forbidden_p = true;
12707           /* The default argument expression may cause implicitly
12708              defined member functions to be synthesized, which will
12709              result in garbage collection.  We must treat this
12710              situation as if we were within the body of function so as
12711              to avoid collecting live data on the stack.  */
12712           ++function_depth;
12713           /* Parse the assignment-expression.  */
12714           if (template_parm_p)
12715             push_deferring_access_checks (dk_no_deferred);
12716           default_argument
12717             = cp_parser_assignment_expression (parser, /*cast_p=*/false);
12718           if (template_parm_p)
12719             pop_deferring_access_checks ();
12720           /* Restore saved state.  */
12721           --function_depth;
12722           parser->greater_than_is_operator_p
12723             = saved_greater_than_is_operator_p;
12724           parser->local_variables_forbidden_p
12725             = saved_local_variables_forbidden_p;
12726         }
12727       if (!parser->default_arg_ok_p)
12728         {
12729           if (!flag_pedantic_errors)
12730             warning (0, "deprecated use of default argument for parameter of non-function");
12731           else
12732             {
12733               error ("default arguments are only permitted for function parameters");
12734               default_argument = NULL_TREE;
12735             }
12736         }
12737     }
12738   else
12739     default_argument = NULL_TREE;
12740
12741   return make_parameter_declarator (&decl_specifiers,
12742                                     declarator,
12743                                     default_argument);
12744 }
12745
12746 /* Parse a function-body.
12747
12748    function-body:
12749      compound_statement  */
12750
12751 static void
12752 cp_parser_function_body (cp_parser *parser)
12753 {
12754   cp_parser_compound_statement (parser, NULL, false);
12755 }
12756
12757 /* Parse a ctor-initializer-opt followed by a function-body.  Return
12758    true if a ctor-initializer was present.  */
12759
12760 static bool
12761 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
12762 {
12763   tree body;
12764   bool ctor_initializer_p;
12765
12766   /* Begin the function body.  */
12767   body = begin_function_body ();
12768   /* Parse the optional ctor-initializer.  */
12769   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
12770   /* Parse the function-body.  */
12771   cp_parser_function_body (parser);
12772   /* Finish the function body.  */
12773   finish_function_body (body);
12774
12775   return ctor_initializer_p;
12776 }
12777
12778 /* Parse an initializer.
12779
12780    initializer:
12781      = initializer-clause
12782      ( expression-list )
12783
12784    Returns an expression representing the initializer.  If no
12785    initializer is present, NULL_TREE is returned.
12786
12787    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
12788    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
12789    set to FALSE if there is no initializer present.  If there is an
12790    initializer, and it is not a constant-expression, *NON_CONSTANT_P
12791    is set to true; otherwise it is set to false.  */
12792
12793 static tree
12794 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
12795                        bool* non_constant_p)
12796 {
12797   cp_token *token;
12798   tree init;
12799
12800   /* Peek at the next token.  */
12801   token = cp_lexer_peek_token (parser->lexer);
12802
12803   /* Let our caller know whether or not this initializer was
12804      parenthesized.  */
12805   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
12806   /* Assume that the initializer is constant.  */
12807   *non_constant_p = false;
12808
12809   if (token->type == CPP_EQ)
12810     {
12811       /* Consume the `='.  */
12812       cp_lexer_consume_token (parser->lexer);
12813       /* Parse the initializer-clause.  */
12814       init = cp_parser_initializer_clause (parser, non_constant_p);
12815     }
12816   else if (token->type == CPP_OPEN_PAREN)
12817     init = cp_parser_parenthesized_expression_list (parser, false,
12818                                                     /*cast_p=*/false,
12819                                                     non_constant_p);
12820   else
12821     {
12822       /* Anything else is an error.  */
12823       cp_parser_error (parser, "expected initializer");
12824       init = error_mark_node;
12825     }
12826
12827   return init;
12828 }
12829
12830 /* Parse an initializer-clause.
12831
12832    initializer-clause:
12833      assignment-expression
12834      { initializer-list , [opt] }
12835      { }
12836
12837    Returns an expression representing the initializer.
12838
12839    If the `assignment-expression' production is used the value
12840    returned is simply a representation for the expression.
12841
12842    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
12843    the elements of the initializer-list (or NULL, if the last
12844    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
12845    NULL_TREE.  There is no way to detect whether or not the optional
12846    trailing `,' was provided.  NON_CONSTANT_P is as for
12847    cp_parser_initializer.  */
12848
12849 static tree
12850 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
12851 {
12852   tree initializer;
12853
12854   /* Assume the expression is constant.  */
12855   *non_constant_p = false;
12856
12857   /* If it is not a `{', then we are looking at an
12858      assignment-expression.  */
12859   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
12860     {
12861       initializer
12862         = cp_parser_constant_expression (parser,
12863                                         /*allow_non_constant_p=*/true,
12864                                         non_constant_p);
12865       if (!*non_constant_p)
12866         initializer = fold_non_dependent_expr (initializer);
12867     }
12868   else
12869     {
12870       /* Consume the `{' token.  */
12871       cp_lexer_consume_token (parser->lexer);
12872       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
12873       initializer = make_node (CONSTRUCTOR);
12874       /* If it's not a `}', then there is a non-trivial initializer.  */
12875       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12876         {
12877           /* Parse the initializer list.  */
12878           CONSTRUCTOR_ELTS (initializer)
12879             = cp_parser_initializer_list (parser, non_constant_p);
12880           /* A trailing `,' token is allowed.  */
12881           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12882             cp_lexer_consume_token (parser->lexer);
12883         }
12884       /* Now, there should be a trailing `}'.  */
12885       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12886     }
12887
12888   return initializer;
12889 }
12890
12891 /* Parse an initializer-list.
12892
12893    initializer-list:
12894      initializer-clause
12895      initializer-list , initializer-clause
12896
12897    GNU Extension:
12898
12899    initializer-list:
12900      identifier : initializer-clause
12901      initializer-list, identifier : initializer-clause
12902
12903    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
12904    for the initializer.  If the INDEX of the elt is non-NULL, it is the
12905    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
12906    as for cp_parser_initializer.  */
12907
12908 static VEC(constructor_elt,gc) *
12909 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
12910 {
12911   VEC(constructor_elt,gc) *v = NULL;
12912
12913   /* Assume all of the expressions are constant.  */
12914   *non_constant_p = false;
12915
12916   /* Parse the rest of the list.  */
12917   while (true)
12918     {
12919       cp_token *token;
12920       tree identifier;
12921       tree initializer;
12922       bool clause_non_constant_p;
12923
12924       /* If the next token is an identifier and the following one is a
12925          colon, we are looking at the GNU designated-initializer
12926          syntax.  */
12927       if (cp_parser_allow_gnu_extensions_p (parser)
12928           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
12929           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
12930         {
12931           /* Warn the user that they are using an extension.  */
12932           if (pedantic)
12933             pedwarn ("ISO C++ does not allow designated initializers");
12934           /* Consume the identifier.  */
12935           identifier = cp_lexer_consume_token (parser->lexer)->u.value;
12936           /* Consume the `:'.  */
12937           cp_lexer_consume_token (parser->lexer);
12938         }
12939       else
12940         identifier = NULL_TREE;
12941
12942       /* Parse the initializer.  */
12943       initializer = cp_parser_initializer_clause (parser,
12944                                                   &clause_non_constant_p);
12945       /* If any clause is non-constant, so is the entire initializer.  */
12946       if (clause_non_constant_p)
12947         *non_constant_p = true;
12948
12949       /* Add it to the vector.  */
12950       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
12951
12952       /* If the next token is not a comma, we have reached the end of
12953          the list.  */
12954       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12955         break;
12956
12957       /* Peek at the next token.  */
12958       token = cp_lexer_peek_nth_token (parser->lexer, 2);
12959       /* If the next token is a `}', then we're still done.  An
12960          initializer-clause can have a trailing `,' after the
12961          initializer-list and before the closing `}'.  */
12962       if (token->type == CPP_CLOSE_BRACE)
12963         break;
12964
12965       /* Consume the `,' token.  */
12966       cp_lexer_consume_token (parser->lexer);
12967     }
12968
12969   return v;
12970 }
12971
12972 /* Classes [gram.class] */
12973
12974 /* Parse a class-name.
12975
12976    class-name:
12977      identifier
12978      template-id
12979
12980    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
12981    to indicate that names looked up in dependent types should be
12982    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
12983    keyword has been used to indicate that the name that appears next
12984    is a template.  TAG_TYPE indicates the explicit tag given before
12985    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
12986    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
12987    is the class being defined in a class-head.
12988
12989    Returns the TYPE_DECL representing the class.  */
12990
12991 static tree
12992 cp_parser_class_name (cp_parser *parser,
12993                       bool typename_keyword_p,
12994                       bool template_keyword_p,
12995                       enum tag_types tag_type,
12996                       bool check_dependency_p,
12997                       bool class_head_p,
12998                       bool is_declaration)
12999 {
13000   tree decl;
13001   tree scope;
13002   bool typename_p;
13003   cp_token *token;
13004
13005   /* All class-names start with an identifier.  */
13006   token = cp_lexer_peek_token (parser->lexer);
13007   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
13008     {
13009       cp_parser_error (parser, "expected class-name");
13010       return error_mark_node;
13011     }
13012
13013   /* PARSER->SCOPE can be cleared when parsing the template-arguments
13014      to a template-id, so we save it here.  */
13015   scope = parser->scope;
13016   if (scope == error_mark_node)
13017     return error_mark_node;
13018
13019   /* Any name names a type if we're following the `typename' keyword
13020      in a qualified name where the enclosing scope is type-dependent.  */
13021   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
13022                 && dependent_type_p (scope));
13023   /* Handle the common case (an identifier, but not a template-id)
13024      efficiently.  */
13025   if (token->type == CPP_NAME
13026       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
13027     {
13028       cp_token *identifier_token;
13029       tree identifier;
13030       bool ambiguous_p;
13031
13032       /* Look for the identifier.  */
13033       identifier_token = cp_lexer_peek_token (parser->lexer);
13034       ambiguous_p = identifier_token->ambiguous_p;
13035       identifier = cp_parser_identifier (parser);
13036       /* If the next token isn't an identifier, we are certainly not
13037          looking at a class-name.  */
13038       if (identifier == error_mark_node)
13039         decl = error_mark_node;
13040       /* If we know this is a type-name, there's no need to look it
13041          up.  */
13042       else if (typename_p)
13043         decl = identifier;
13044       else
13045         {
13046           tree ambiguous_decls;
13047           /* If we already know that this lookup is ambiguous, then
13048              we've already issued an error message; there's no reason
13049              to check again.  */
13050           if (ambiguous_p)
13051             {
13052               cp_parser_simulate_error (parser);
13053               return error_mark_node;
13054             }
13055           /* If the next token is a `::', then the name must be a type
13056              name.
13057
13058              [basic.lookup.qual]
13059
13060              During the lookup for a name preceding the :: scope
13061              resolution operator, object, function, and enumerator
13062              names are ignored.  */
13063           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13064             tag_type = typename_type;
13065           /* Look up the name.  */
13066           decl = cp_parser_lookup_name (parser, identifier,
13067                                         tag_type,
13068                                         /*is_template=*/false,
13069                                         /*is_namespace=*/false,
13070                                         check_dependency_p,
13071                                         &ambiguous_decls);
13072           if (ambiguous_decls)
13073             {
13074               error ("reference to %qD is ambiguous", identifier);
13075               print_candidates (ambiguous_decls);
13076               if (cp_parser_parsing_tentatively (parser))
13077                 {
13078                   identifier_token->ambiguous_p = true;
13079                   cp_parser_simulate_error (parser);
13080                 }
13081               return error_mark_node;
13082             }
13083         }
13084     }
13085   else
13086     {
13087       /* Try a template-id.  */
13088       decl = cp_parser_template_id (parser, template_keyword_p,
13089                                     check_dependency_p,
13090                                     is_declaration);
13091       if (decl == error_mark_node)
13092         return error_mark_node;
13093     }
13094
13095   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
13096
13097   /* If this is a typename, create a TYPENAME_TYPE.  */
13098   if (typename_p && decl != error_mark_node)
13099     {
13100       decl = make_typename_type (scope, decl, typename_type,
13101                                  /*complain=*/tf_error);
13102       if (decl != error_mark_node)
13103         decl = TYPE_NAME (decl);
13104     }
13105
13106   /* Check to see that it is really the name of a class.  */
13107   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
13108       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
13109       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13110     /* Situations like this:
13111
13112          template <typename T> struct A {
13113            typename T::template X<int>::I i;
13114          };
13115
13116        are problematic.  Is `T::template X<int>' a class-name?  The
13117        standard does not seem to be definitive, but there is no other
13118        valid interpretation of the following `::'.  Therefore, those
13119        names are considered class-names.  */
13120     {
13121       decl = make_typename_type (scope, decl, tag_type, tf_error);
13122       if (decl != error_mark_node)
13123         decl = TYPE_NAME (decl);
13124     }
13125   else if (TREE_CODE (decl) != TYPE_DECL
13126            || TREE_TYPE (decl) == error_mark_node
13127            || !IS_AGGR_TYPE (TREE_TYPE (decl)))
13128     decl = error_mark_node;
13129
13130   if (decl == error_mark_node)
13131     cp_parser_error (parser, "expected class-name");
13132
13133   return decl;
13134 }
13135
13136 /* Parse a class-specifier.
13137
13138    class-specifier:
13139      class-head { member-specification [opt] }
13140
13141    Returns the TREE_TYPE representing the class.  */
13142
13143 static tree
13144 cp_parser_class_specifier (cp_parser* parser)
13145 {
13146   cp_token *token;
13147   tree type;
13148   tree attributes = NULL_TREE;
13149   int has_trailing_semicolon;
13150   bool nested_name_specifier_p;
13151   unsigned saved_num_template_parameter_lists;
13152   bool saved_in_function_body;
13153   tree old_scope = NULL_TREE;
13154   tree scope = NULL_TREE;
13155   tree bases;
13156
13157   push_deferring_access_checks (dk_no_deferred);
13158
13159   /* Parse the class-head.  */
13160   type = cp_parser_class_head (parser,
13161                                &nested_name_specifier_p,
13162                                &attributes,
13163                                &bases);
13164   /* If the class-head was a semantic disaster, skip the entire body
13165      of the class.  */
13166   if (!type)
13167     {
13168       cp_parser_skip_to_end_of_block_or_statement (parser);
13169       pop_deferring_access_checks ();
13170       return error_mark_node;
13171     }
13172
13173   /* Look for the `{'.  */
13174   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
13175     {
13176       pop_deferring_access_checks ();
13177       return error_mark_node;
13178     }
13179
13180   /* Process the base classes. If they're invalid, skip the 
13181      entire class body.  */
13182   if (!xref_basetypes (type, bases))
13183     {
13184       cp_parser_skip_to_closing_brace (parser);
13185
13186       /* Consuming the closing brace yields better error messages
13187          later on.  */
13188       cp_lexer_consume_token (parser->lexer);
13189       pop_deferring_access_checks ();
13190       return error_mark_node;
13191     }
13192
13193   /* Issue an error message if type-definitions are forbidden here.  */
13194   cp_parser_check_type_definition (parser);
13195   /* Remember that we are defining one more class.  */
13196   ++parser->num_classes_being_defined;
13197   /* Inside the class, surrounding template-parameter-lists do not
13198      apply.  */
13199   saved_num_template_parameter_lists
13200     = parser->num_template_parameter_lists;
13201   parser->num_template_parameter_lists = 0;
13202   /* We are not in a function body.  */
13203   saved_in_function_body = parser->in_function_body;
13204   parser->in_function_body = false;
13205
13206   /* Start the class.  */
13207   if (nested_name_specifier_p)
13208     {
13209       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
13210       old_scope = push_inner_scope (scope);
13211     }
13212   type = begin_class_definition (type, attributes);
13213
13214   if (type == error_mark_node)
13215     /* If the type is erroneous, skip the entire body of the class.  */
13216     cp_parser_skip_to_closing_brace (parser);
13217   else
13218     /* Parse the member-specification.  */
13219     cp_parser_member_specification_opt (parser);
13220
13221   /* Look for the trailing `}'.  */
13222   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13223   /* We get better error messages by noticing a common problem: a
13224      missing trailing `;'.  */
13225   token = cp_lexer_peek_token (parser->lexer);
13226   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
13227   /* Look for trailing attributes to apply to this class.  */
13228   if (cp_parser_allow_gnu_extensions_p (parser))
13229     attributes = cp_parser_attributes_opt (parser);
13230   if (type != error_mark_node)
13231     type = finish_struct (type, attributes);
13232   if (nested_name_specifier_p)
13233     pop_inner_scope (old_scope, scope);
13234   /* If this class is not itself within the scope of another class,
13235      then we need to parse the bodies of all of the queued function
13236      definitions.  Note that the queued functions defined in a class
13237      are not always processed immediately following the
13238      class-specifier for that class.  Consider:
13239
13240        struct A {
13241          struct B { void f() { sizeof (A); } };
13242        };
13243
13244      If `f' were processed before the processing of `A' were
13245      completed, there would be no way to compute the size of `A'.
13246      Note that the nesting we are interested in here is lexical --
13247      not the semantic nesting given by TYPE_CONTEXT.  In particular,
13248      for:
13249
13250        struct A { struct B; };
13251        struct A::B { void f() { } };
13252
13253      there is no need to delay the parsing of `A::B::f'.  */
13254   if (--parser->num_classes_being_defined == 0)
13255     {
13256       tree queue_entry;
13257       tree fn;
13258       tree class_type = NULL_TREE;
13259       tree pushed_scope = NULL_TREE;
13260
13261       /* In a first pass, parse default arguments to the functions.
13262          Then, in a second pass, parse the bodies of the functions.
13263          This two-phased approach handles cases like:
13264
13265             struct S {
13266               void f() { g(); }
13267               void g(int i = 3);
13268             };
13269
13270          */
13271       for (TREE_PURPOSE (parser->unparsed_functions_queues)
13272              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
13273            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
13274            TREE_PURPOSE (parser->unparsed_functions_queues)
13275              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
13276         {
13277           fn = TREE_VALUE (queue_entry);
13278           /* If there are default arguments that have not yet been processed,
13279              take care of them now.  */
13280           if (class_type != TREE_PURPOSE (queue_entry))
13281             {
13282               if (pushed_scope)
13283                 pop_scope (pushed_scope);
13284               class_type = TREE_PURPOSE (queue_entry);
13285               pushed_scope = push_scope (class_type);
13286             }
13287           /* Make sure that any template parameters are in scope.  */
13288           maybe_begin_member_template_processing (fn);
13289           /* Parse the default argument expressions.  */
13290           cp_parser_late_parsing_default_args (parser, fn);
13291           /* Remove any template parameters from the symbol table.  */
13292           maybe_end_member_template_processing ();
13293         }
13294       if (pushed_scope)
13295         pop_scope (pushed_scope);
13296       /* Now parse the body of the functions.  */
13297       for (TREE_VALUE (parser->unparsed_functions_queues)
13298              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
13299            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
13300            TREE_VALUE (parser->unparsed_functions_queues)
13301              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
13302         {
13303           /* Figure out which function we need to process.  */
13304           fn = TREE_VALUE (queue_entry);
13305           /* Parse the function.  */
13306           cp_parser_late_parsing_for_member (parser, fn);
13307         }
13308     }
13309
13310   /* Put back any saved access checks.  */
13311   pop_deferring_access_checks ();
13312
13313   /* Restore saved state.  */
13314   parser->in_function_body = saved_in_function_body;
13315   parser->num_template_parameter_lists
13316     = saved_num_template_parameter_lists;
13317
13318   return type;
13319 }
13320
13321 /* Parse a class-head.
13322
13323    class-head:
13324      class-key identifier [opt] base-clause [opt]
13325      class-key nested-name-specifier identifier base-clause [opt]
13326      class-key nested-name-specifier [opt] template-id
13327        base-clause [opt]
13328
13329    GNU Extensions:
13330      class-key attributes identifier [opt] base-clause [opt]
13331      class-key attributes nested-name-specifier identifier base-clause [opt]
13332      class-key attributes nested-name-specifier [opt] template-id
13333        base-clause [opt]
13334
13335    Returns the TYPE of the indicated class.  Sets
13336    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
13337    involving a nested-name-specifier was used, and FALSE otherwise.
13338
13339    Returns error_mark_node if this is not a class-head.
13340
13341    Returns NULL_TREE if the class-head is syntactically valid, but
13342    semantically invalid in a way that means we should skip the entire
13343    body of the class.  */
13344
13345 static tree
13346 cp_parser_class_head (cp_parser* parser,
13347                       bool* nested_name_specifier_p,
13348                       tree *attributes_p,
13349                       tree *bases)
13350 {
13351   tree nested_name_specifier;
13352   enum tag_types class_key;
13353   tree id = NULL_TREE;
13354   tree type = NULL_TREE;
13355   tree attributes;
13356   bool template_id_p = false;
13357   bool qualified_p = false;
13358   bool invalid_nested_name_p = false;
13359   bool invalid_explicit_specialization_p = false;
13360   tree pushed_scope = NULL_TREE;
13361   unsigned num_templates;
13362
13363   /* Assume no nested-name-specifier will be present.  */
13364   *nested_name_specifier_p = false;
13365   /* Assume no template parameter lists will be used in defining the
13366      type.  */
13367   num_templates = 0;
13368
13369   /* Look for the class-key.  */
13370   class_key = cp_parser_class_key (parser);
13371   if (class_key == none_type)
13372     return error_mark_node;
13373
13374   /* Parse the attributes.  */
13375   attributes = cp_parser_attributes_opt (parser);
13376
13377   /* If the next token is `::', that is invalid -- but sometimes
13378      people do try to write:
13379
13380        struct ::S {};
13381
13382      Handle this gracefully by accepting the extra qualifier, and then
13383      issuing an error about it later if this really is a
13384      class-head.  If it turns out just to be an elaborated type
13385      specifier, remain silent.  */
13386   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
13387     qualified_p = true;
13388
13389   push_deferring_access_checks (dk_no_check);
13390
13391   /* Determine the name of the class.  Begin by looking for an
13392      optional nested-name-specifier.  */
13393   nested_name_specifier
13394     = cp_parser_nested_name_specifier_opt (parser,
13395                                            /*typename_keyword_p=*/false,
13396                                            /*check_dependency_p=*/false,
13397                                            /*type_p=*/false,
13398                                            /*is_declaration=*/false);
13399   /* If there was a nested-name-specifier, then there *must* be an
13400      identifier.  */
13401   if (nested_name_specifier)
13402     {
13403       /* Although the grammar says `identifier', it really means
13404          `class-name' or `template-name'.  You are only allowed to
13405          define a class that has already been declared with this
13406          syntax.
13407
13408          The proposed resolution for Core Issue 180 says that wherever
13409          you see `class T::X' you should treat `X' as a type-name.
13410
13411          It is OK to define an inaccessible class; for example:
13412
13413            class A { class B; };
13414            class A::B {};
13415
13416          We do not know if we will see a class-name, or a
13417          template-name.  We look for a class-name first, in case the
13418          class-name is a template-id; if we looked for the
13419          template-name first we would stop after the template-name.  */
13420       cp_parser_parse_tentatively (parser);
13421       type = cp_parser_class_name (parser,
13422                                    /*typename_keyword_p=*/false,
13423                                    /*template_keyword_p=*/false,
13424                                    class_type,
13425                                    /*check_dependency_p=*/false,
13426                                    /*class_head_p=*/true,
13427                                    /*is_declaration=*/false);
13428       /* If that didn't work, ignore the nested-name-specifier.  */
13429       if (!cp_parser_parse_definitely (parser))
13430         {
13431           invalid_nested_name_p = true;
13432           id = cp_parser_identifier (parser);
13433           if (id == error_mark_node)
13434             id = NULL_TREE;
13435         }
13436       /* If we could not find a corresponding TYPE, treat this
13437          declaration like an unqualified declaration.  */
13438       if (type == error_mark_node)
13439         nested_name_specifier = NULL_TREE;
13440       /* Otherwise, count the number of templates used in TYPE and its
13441          containing scopes.  */
13442       else
13443         {
13444           tree scope;
13445
13446           for (scope = TREE_TYPE (type);
13447                scope && TREE_CODE (scope) != NAMESPACE_DECL;
13448                scope = (TYPE_P (scope)
13449                         ? TYPE_CONTEXT (scope)
13450                         : DECL_CONTEXT (scope)))
13451             if (TYPE_P (scope)
13452                 && CLASS_TYPE_P (scope)
13453                 && CLASSTYPE_TEMPLATE_INFO (scope)
13454                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
13455                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
13456               ++num_templates;
13457         }
13458     }
13459   /* Otherwise, the identifier is optional.  */
13460   else
13461     {
13462       /* We don't know whether what comes next is a template-id,
13463          an identifier, or nothing at all.  */
13464       cp_parser_parse_tentatively (parser);
13465       /* Check for a template-id.  */
13466       id = cp_parser_template_id (parser,
13467                                   /*template_keyword_p=*/false,
13468                                   /*check_dependency_p=*/true,
13469                                   /*is_declaration=*/true);
13470       /* If that didn't work, it could still be an identifier.  */
13471       if (!cp_parser_parse_definitely (parser))
13472         {
13473           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13474             id = cp_parser_identifier (parser);
13475           else
13476             id = NULL_TREE;
13477         }
13478       else
13479         {
13480           template_id_p = true;
13481           ++num_templates;
13482         }
13483     }
13484
13485   pop_deferring_access_checks ();
13486
13487   if (id)
13488     cp_parser_check_for_invalid_template_id (parser, id);
13489
13490   /* If it's not a `:' or a `{' then we can't really be looking at a
13491      class-head, since a class-head only appears as part of a
13492      class-specifier.  We have to detect this situation before calling
13493      xref_tag, since that has irreversible side-effects.  */
13494   if (!cp_parser_next_token_starts_class_definition_p (parser))
13495     {
13496       cp_parser_error (parser, "expected %<{%> or %<:%>");
13497       return error_mark_node;
13498     }
13499
13500   /* At this point, we're going ahead with the class-specifier, even
13501      if some other problem occurs.  */
13502   cp_parser_commit_to_tentative_parse (parser);
13503   /* Issue the error about the overly-qualified name now.  */
13504   if (qualified_p)
13505     cp_parser_error (parser,
13506                      "global qualification of class name is invalid");
13507   else if (invalid_nested_name_p)
13508     cp_parser_error (parser,
13509                      "qualified name does not name a class");
13510   else if (nested_name_specifier)
13511     {
13512       tree scope;
13513
13514       /* Reject typedef-names in class heads.  */
13515       if (!DECL_IMPLICIT_TYPEDEF_P (type))
13516         {
13517           error ("invalid class name in declaration of %qD", type);
13518           type = NULL_TREE;
13519           goto done;
13520         }
13521
13522       /* Figure out in what scope the declaration is being placed.  */
13523       scope = current_scope ();
13524       /* If that scope does not contain the scope in which the
13525          class was originally declared, the program is invalid.  */
13526       if (scope && !is_ancestor (scope, nested_name_specifier))
13527         {
13528           error ("declaration of %qD in %qD which does not enclose %qD",
13529                  type, scope, nested_name_specifier);
13530           type = NULL_TREE;
13531           goto done;
13532         }
13533       /* [dcl.meaning]
13534
13535          A declarator-id shall not be qualified exception of the
13536          definition of a ... nested class outside of its class
13537          ... [or] a the definition or explicit instantiation of a
13538          class member of a namespace outside of its namespace.  */
13539       if (scope == nested_name_specifier)
13540         {
13541           pedwarn ("extra qualification ignored");
13542           nested_name_specifier = NULL_TREE;
13543           num_templates = 0;
13544         }
13545     }
13546   /* An explicit-specialization must be preceded by "template <>".  If
13547      it is not, try to recover gracefully.  */
13548   if (at_namespace_scope_p ()
13549       && parser->num_template_parameter_lists == 0
13550       && template_id_p)
13551     {
13552       error ("an explicit specialization must be preceded by %<template <>%>");
13553       invalid_explicit_specialization_p = true;
13554       /* Take the same action that would have been taken by
13555          cp_parser_explicit_specialization.  */
13556       ++parser->num_template_parameter_lists;
13557       begin_specialization ();
13558     }
13559   /* There must be no "return" statements between this point and the
13560      end of this function; set "type "to the correct return value and
13561      use "goto done;" to return.  */
13562   /* Make sure that the right number of template parameters were
13563      present.  */
13564   if (!cp_parser_check_template_parameters (parser, num_templates))
13565     {
13566       /* If something went wrong, there is no point in even trying to
13567          process the class-definition.  */
13568       type = NULL_TREE;
13569       goto done;
13570     }
13571
13572   /* Look up the type.  */
13573   if (template_id_p)
13574     {
13575       type = TREE_TYPE (id);
13576       type = maybe_process_partial_specialization (type);
13577       if (nested_name_specifier)
13578         pushed_scope = push_scope (nested_name_specifier);
13579     }
13580   else if (nested_name_specifier)
13581     {
13582       tree class_type;
13583
13584       /* Given:
13585
13586             template <typename T> struct S { struct T };
13587             template <typename T> struct S<T>::T { };
13588
13589          we will get a TYPENAME_TYPE when processing the definition of
13590          `S::T'.  We need to resolve it to the actual type before we
13591          try to define it.  */
13592       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
13593         {
13594           class_type = resolve_typename_type (TREE_TYPE (type),
13595                                               /*only_current_p=*/false);
13596           if (class_type != error_mark_node)
13597             type = TYPE_NAME (class_type);
13598           else
13599             {
13600               cp_parser_error (parser, "could not resolve typename type");
13601               type = error_mark_node;
13602             }
13603         }
13604
13605       maybe_process_partial_specialization (TREE_TYPE (type));
13606       class_type = current_class_type;
13607       /* Enter the scope indicated by the nested-name-specifier.  */
13608       pushed_scope = push_scope (nested_name_specifier);
13609       /* Get the canonical version of this type.  */
13610       type = TYPE_MAIN_DECL (TREE_TYPE (type));
13611       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
13612           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
13613         {
13614           type = push_template_decl (type);
13615           if (type == error_mark_node)
13616             {
13617               type = NULL_TREE;
13618               goto done;
13619             }
13620         }
13621
13622       type = TREE_TYPE (type);
13623       *nested_name_specifier_p = true;
13624     }
13625   else      /* The name is not a nested name.  */
13626     {
13627       /* If the class was unnamed, create a dummy name.  */
13628       if (!id)
13629         id = make_anon_name ();
13630       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
13631                        parser->num_template_parameter_lists);
13632     }
13633
13634   /* Indicate whether this class was declared as a `class' or as a
13635      `struct'.  */
13636   if (TREE_CODE (type) == RECORD_TYPE)
13637     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
13638   cp_parser_check_class_key (class_key, type);
13639
13640   /* If this type was already complete, and we see another definition,
13641      that's an error.  */
13642   if (type != error_mark_node && COMPLETE_TYPE_P (type))
13643     {
13644       error ("redefinition of %q#T", type);
13645       error ("previous definition of %q+#T", type);
13646       type = NULL_TREE;
13647       goto done;
13648     }
13649   else if (type == error_mark_node)
13650     type = NULL_TREE;
13651
13652   /* We will have entered the scope containing the class; the names of
13653      base classes should be looked up in that context.  For example:
13654
13655        struct A { struct B {}; struct C; };
13656        struct A::C : B {};
13657
13658      is valid.  */
13659   *bases = NULL_TREE;
13660
13661   /* Get the list of base-classes, if there is one.  */
13662   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13663     *bases = cp_parser_base_clause (parser);
13664
13665  done:
13666   /* Leave the scope given by the nested-name-specifier.  We will
13667      enter the class scope itself while processing the members.  */
13668   if (pushed_scope)
13669     pop_scope (pushed_scope);
13670
13671   if (invalid_explicit_specialization_p)
13672     {
13673       end_specialization ();
13674       --parser->num_template_parameter_lists;
13675     }
13676   *attributes_p = attributes;
13677   return type;
13678 }
13679
13680 /* Parse a class-key.
13681
13682    class-key:
13683      class
13684      struct
13685      union
13686
13687    Returns the kind of class-key specified, or none_type to indicate
13688    error.  */
13689
13690 static enum tag_types
13691 cp_parser_class_key (cp_parser* parser)
13692 {
13693   cp_token *token;
13694   enum tag_types tag_type;
13695
13696   /* Look for the class-key.  */
13697   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
13698   if (!token)
13699     return none_type;
13700
13701   /* Check to see if the TOKEN is a class-key.  */
13702   tag_type = cp_parser_token_is_class_key (token);
13703   if (!tag_type)
13704     cp_parser_error (parser, "expected class-key");
13705   return tag_type;
13706 }
13707
13708 /* Parse an (optional) member-specification.
13709
13710    member-specification:
13711      member-declaration member-specification [opt]
13712      access-specifier : member-specification [opt]  */
13713
13714 static void
13715 cp_parser_member_specification_opt (cp_parser* parser)
13716 {
13717   while (true)
13718     {
13719       cp_token *token;
13720       enum rid keyword;
13721
13722       /* Peek at the next token.  */
13723       token = cp_lexer_peek_token (parser->lexer);
13724       /* If it's a `}', or EOF then we've seen all the members.  */
13725       if (token->type == CPP_CLOSE_BRACE
13726           || token->type == CPP_EOF
13727           || token->type == CPP_PRAGMA_EOL)
13728         break;
13729
13730       /* See if this token is a keyword.  */
13731       keyword = token->keyword;
13732       switch (keyword)
13733         {
13734         case RID_PUBLIC:
13735         case RID_PROTECTED:
13736         case RID_PRIVATE:
13737           /* Consume the access-specifier.  */
13738           cp_lexer_consume_token (parser->lexer);
13739           /* Remember which access-specifier is active.  */
13740           current_access_specifier = token->u.value;
13741           /* Look for the `:'.  */
13742           cp_parser_require (parser, CPP_COLON, "`:'");
13743           break;
13744
13745         default:
13746           /* Accept #pragmas at class scope.  */
13747           if (token->type == CPP_PRAGMA)
13748             {
13749               cp_parser_pragma (parser, pragma_external);
13750               break;
13751             }
13752
13753           /* Otherwise, the next construction must be a
13754              member-declaration.  */
13755           cp_parser_member_declaration (parser);
13756         }
13757     }
13758 }
13759
13760 /* Parse a member-declaration.
13761
13762    member-declaration:
13763      decl-specifier-seq [opt] member-declarator-list [opt] ;
13764      function-definition ; [opt]
13765      :: [opt] nested-name-specifier template [opt] unqualified-id ;
13766      using-declaration
13767      template-declaration
13768
13769    member-declarator-list:
13770      member-declarator
13771      member-declarator-list , member-declarator
13772
13773    member-declarator:
13774      declarator pure-specifier [opt]
13775      declarator constant-initializer [opt]
13776      identifier [opt] : constant-expression
13777
13778    GNU Extensions:
13779
13780    member-declaration:
13781      __extension__ member-declaration
13782
13783    member-declarator:
13784      declarator attributes [opt] pure-specifier [opt]
13785      declarator attributes [opt] constant-initializer [opt]
13786      identifier [opt] attributes [opt] : constant-expression  */
13787
13788 static void
13789 cp_parser_member_declaration (cp_parser* parser)
13790 {
13791   cp_decl_specifier_seq decl_specifiers;
13792   tree prefix_attributes;
13793   tree decl;
13794   int declares_class_or_enum;
13795   bool friend_p;
13796   cp_token *token;
13797   int saved_pedantic;
13798
13799   /* Check for the `__extension__' keyword.  */
13800   if (cp_parser_extension_opt (parser, &saved_pedantic))
13801     {
13802       /* Recurse.  */
13803       cp_parser_member_declaration (parser);
13804       /* Restore the old value of the PEDANTIC flag.  */
13805       pedantic = saved_pedantic;
13806
13807       return;
13808     }
13809
13810   /* Check for a template-declaration.  */
13811   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13812     {
13813       /* An explicit specialization here is an error condition, and we
13814          expect the specialization handler to detect and report this.  */
13815       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
13816           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
13817         cp_parser_explicit_specialization (parser);
13818       else
13819         cp_parser_template_declaration (parser, /*member_p=*/true);
13820
13821       return;
13822     }
13823
13824   /* Check for a using-declaration.  */
13825   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
13826     {
13827       /* Parse the using-declaration.  */
13828       cp_parser_using_declaration (parser,
13829                                    /*access_declaration_p=*/false);
13830       return;
13831     }
13832
13833   /* Check for @defs.  */
13834   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
13835     {
13836       tree ivar, member;
13837       tree ivar_chains = cp_parser_objc_defs_expression (parser);
13838       ivar = ivar_chains;
13839       while (ivar)
13840         {
13841           member = ivar;
13842           ivar = TREE_CHAIN (member);
13843           TREE_CHAIN (member) = NULL_TREE;
13844           finish_member_declaration (member);
13845         }
13846       return;
13847     }
13848
13849   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
13850     return;
13851
13852   /* Parse the decl-specifier-seq.  */
13853   cp_parser_decl_specifier_seq (parser,
13854                                 CP_PARSER_FLAGS_OPTIONAL,
13855                                 &decl_specifiers,
13856                                 &declares_class_or_enum);
13857   prefix_attributes = decl_specifiers.attributes;
13858   decl_specifiers.attributes = NULL_TREE;
13859   /* Check for an invalid type-name.  */
13860   if (!decl_specifiers.type
13861       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
13862     return;
13863   /* If there is no declarator, then the decl-specifier-seq should
13864      specify a type.  */
13865   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13866     {
13867       /* If there was no decl-specifier-seq, and the next token is a
13868          `;', then we have something like:
13869
13870            struct S { ; };
13871
13872          [class.mem]
13873
13874          Each member-declaration shall declare at least one member
13875          name of the class.  */
13876       if (!decl_specifiers.any_specifiers_p)
13877         {
13878           cp_token *token = cp_lexer_peek_token (parser->lexer);
13879           if (pedantic && !token->in_system_header)
13880             pedwarn ("%Hextra %<;%>", &token->location);
13881         }
13882       else
13883         {
13884           tree type;
13885
13886           /* See if this declaration is a friend.  */
13887           friend_p = cp_parser_friend_p (&decl_specifiers);
13888           /* If there were decl-specifiers, check to see if there was
13889              a class-declaration.  */
13890           type = check_tag_decl (&decl_specifiers);
13891           /* Nested classes have already been added to the class, but
13892              a `friend' needs to be explicitly registered.  */
13893           if (friend_p)
13894             {
13895               /* If the `friend' keyword was present, the friend must
13896                  be introduced with a class-key.  */
13897                if (!declares_class_or_enum)
13898                  error ("a class-key must be used when declaring a friend");
13899                /* In this case:
13900
13901                     template <typename T> struct A {
13902                       friend struct A<T>::B;
13903                     };
13904
13905                   A<T>::B will be represented by a TYPENAME_TYPE, and
13906                   therefore not recognized by check_tag_decl.  */
13907                if (!type
13908                    && decl_specifiers.type
13909                    && TYPE_P (decl_specifiers.type))
13910                  type = decl_specifiers.type;
13911                if (!type || !TYPE_P (type))
13912                  error ("friend declaration does not name a class or "
13913                         "function");
13914                else
13915                  make_friend_class (current_class_type, type,
13916                                     /*complain=*/true);
13917             }
13918           /* If there is no TYPE, an error message will already have
13919              been issued.  */
13920           else if (!type || type == error_mark_node)
13921             ;
13922           /* An anonymous aggregate has to be handled specially; such
13923              a declaration really declares a data member (with a
13924              particular type), as opposed to a nested class.  */
13925           else if (ANON_AGGR_TYPE_P (type))
13926             {
13927               /* Remove constructors and such from TYPE, now that we
13928                  know it is an anonymous aggregate.  */
13929               fixup_anonymous_aggr (type);
13930               /* And make the corresponding data member.  */
13931               decl = build_decl (FIELD_DECL, NULL_TREE, type);
13932               /* Add it to the class.  */
13933               finish_member_declaration (decl);
13934             }
13935           else
13936             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
13937         }
13938     }
13939   else
13940     {
13941       /* See if these declarations will be friends.  */
13942       friend_p = cp_parser_friend_p (&decl_specifiers);
13943
13944       /* Keep going until we hit the `;' at the end of the
13945          declaration.  */
13946       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13947         {
13948           tree attributes = NULL_TREE;
13949           tree first_attribute;
13950
13951           /* Peek at the next token.  */
13952           token = cp_lexer_peek_token (parser->lexer);
13953
13954           /* Check for a bitfield declaration.  */
13955           if (token->type == CPP_COLON
13956               || (token->type == CPP_NAME
13957                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
13958                   == CPP_COLON))
13959             {
13960               tree identifier;
13961               tree width;
13962
13963               /* Get the name of the bitfield.  Note that we cannot just
13964                  check TOKEN here because it may have been invalidated by
13965                  the call to cp_lexer_peek_nth_token above.  */
13966               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
13967                 identifier = cp_parser_identifier (parser);
13968               else
13969                 identifier = NULL_TREE;
13970
13971               /* Consume the `:' token.  */
13972               cp_lexer_consume_token (parser->lexer);
13973               /* Get the width of the bitfield.  */
13974               width
13975                 = cp_parser_constant_expression (parser,
13976                                                  /*allow_non_constant=*/false,
13977                                                  NULL);
13978
13979               /* Look for attributes that apply to the bitfield.  */
13980               attributes = cp_parser_attributes_opt (parser);
13981               /* Remember which attributes are prefix attributes and
13982                  which are not.  */
13983               first_attribute = attributes;
13984               /* Combine the attributes.  */
13985               attributes = chainon (prefix_attributes, attributes);
13986
13987               /* Create the bitfield declaration.  */
13988               decl = grokbitfield (identifier
13989                                    ? make_id_declarator (NULL_TREE,
13990                                                          identifier,
13991                                                          sfk_none)
13992                                    : NULL,
13993                                    &decl_specifiers,
13994                                    width);
13995               /* Apply the attributes.  */
13996               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
13997             }
13998           else
13999             {
14000               cp_declarator *declarator;
14001               tree initializer;
14002               tree asm_specification;
14003               int ctor_dtor_or_conv_p;
14004
14005               /* Parse the declarator.  */
14006               declarator
14007                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
14008                                         &ctor_dtor_or_conv_p,
14009                                         /*parenthesized_p=*/NULL,
14010                                         /*member_p=*/true);
14011
14012               /* If something went wrong parsing the declarator, make sure
14013                  that we at least consume some tokens.  */
14014               if (declarator == cp_error_declarator)
14015                 {
14016                   /* Skip to the end of the statement.  */
14017                   cp_parser_skip_to_end_of_statement (parser);
14018                   /* If the next token is not a semicolon, that is
14019                      probably because we just skipped over the body of
14020                      a function.  So, we consume a semicolon if
14021                      present, but do not issue an error message if it
14022                      is not present.  */
14023                   if (cp_lexer_next_token_is (parser->lexer,
14024                                               CPP_SEMICOLON))
14025                     cp_lexer_consume_token (parser->lexer);
14026                   return;
14027                 }
14028
14029               if (declares_class_or_enum & 2)
14030                 cp_parser_check_for_definition_in_return_type
14031                   (declarator, decl_specifiers.type);
14032
14033               /* Look for an asm-specification.  */
14034               asm_specification = cp_parser_asm_specification_opt (parser);
14035               /* Look for attributes that apply to the declaration.  */
14036               attributes = cp_parser_attributes_opt (parser);
14037               /* Remember which attributes are prefix attributes and
14038                  which are not.  */
14039               first_attribute = attributes;
14040               /* Combine the attributes.  */
14041               attributes = chainon (prefix_attributes, attributes);
14042
14043               /* If it's an `=', then we have a constant-initializer or a
14044                  pure-specifier.  It is not correct to parse the
14045                  initializer before registering the member declaration
14046                  since the member declaration should be in scope while
14047                  its initializer is processed.  However, the rest of the
14048                  front end does not yet provide an interface that allows
14049                  us to handle this correctly.  */
14050               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
14051                 {
14052                   /* In [class.mem]:
14053
14054                      A pure-specifier shall be used only in the declaration of
14055                      a virtual function.
14056
14057                      A member-declarator can contain a constant-initializer
14058                      only if it declares a static member of integral or
14059                      enumeration type.
14060
14061                      Therefore, if the DECLARATOR is for a function, we look
14062                      for a pure-specifier; otherwise, we look for a
14063                      constant-initializer.  When we call `grokfield', it will
14064                      perform more stringent semantics checks.  */
14065                   if (function_declarator_p (declarator))
14066                     initializer = cp_parser_pure_specifier (parser);
14067                   else
14068                     /* Parse the initializer.  */
14069                     initializer = cp_parser_constant_initializer (parser);
14070                 }
14071               /* Otherwise, there is no initializer.  */
14072               else
14073                 initializer = NULL_TREE;
14074
14075               /* See if we are probably looking at a function
14076                  definition.  We are certainly not looking at a
14077                  member-declarator.  Calling `grokfield' has
14078                  side-effects, so we must not do it unless we are sure
14079                  that we are looking at a member-declarator.  */
14080               if (cp_parser_token_starts_function_definition_p
14081                   (cp_lexer_peek_token (parser->lexer)))
14082                 {
14083                   /* The grammar does not allow a pure-specifier to be
14084                      used when a member function is defined.  (It is
14085                      possible that this fact is an oversight in the
14086                      standard, since a pure function may be defined
14087                      outside of the class-specifier.  */
14088                   if (initializer)
14089                     error ("pure-specifier on function-definition");
14090                   decl = cp_parser_save_member_function_body (parser,
14091                                                               &decl_specifiers,
14092                                                               declarator,
14093                                                               attributes);
14094                   /* If the member was not a friend, declare it here.  */
14095                   if (!friend_p)
14096                     finish_member_declaration (decl);
14097                   /* Peek at the next token.  */
14098                   token = cp_lexer_peek_token (parser->lexer);
14099                   /* If the next token is a semicolon, consume it.  */
14100                   if (token->type == CPP_SEMICOLON)
14101                     cp_lexer_consume_token (parser->lexer);
14102                   return;
14103                 }
14104               else
14105                 /* Create the declaration.  */
14106                 decl = grokfield (declarator, &decl_specifiers,
14107                                   initializer, /*init_const_expr_p=*/true,
14108                                   asm_specification,
14109                                   attributes);
14110             }
14111
14112           /* Reset PREFIX_ATTRIBUTES.  */
14113           while (attributes && TREE_CHAIN (attributes) != first_attribute)
14114             attributes = TREE_CHAIN (attributes);
14115           if (attributes)
14116             TREE_CHAIN (attributes) = NULL_TREE;
14117
14118           /* If there is any qualification still in effect, clear it
14119              now; we will be starting fresh with the next declarator.  */
14120           parser->scope = NULL_TREE;
14121           parser->qualifying_scope = NULL_TREE;
14122           parser->object_scope = NULL_TREE;
14123           /* If it's a `,', then there are more declarators.  */
14124           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14125             cp_lexer_consume_token (parser->lexer);
14126           /* If the next token isn't a `;', then we have a parse error.  */
14127           else if (cp_lexer_next_token_is_not (parser->lexer,
14128                                                CPP_SEMICOLON))
14129             {
14130               cp_parser_error (parser, "expected %<;%>");
14131               /* Skip tokens until we find a `;'.  */
14132               cp_parser_skip_to_end_of_statement (parser);
14133
14134               break;
14135             }
14136
14137           if (decl)
14138             {
14139               /* Add DECL to the list of members.  */
14140               if (!friend_p)
14141                 finish_member_declaration (decl);
14142
14143               if (TREE_CODE (decl) == FUNCTION_DECL)
14144                 cp_parser_save_default_args (parser, decl);
14145             }
14146         }
14147     }
14148
14149   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14150 }
14151
14152 /* Parse a pure-specifier.
14153
14154    pure-specifier:
14155      = 0
14156
14157    Returns INTEGER_ZERO_NODE if a pure specifier is found.
14158    Otherwise, ERROR_MARK_NODE is returned.  */
14159
14160 static tree
14161 cp_parser_pure_specifier (cp_parser* parser)
14162 {
14163   cp_token *token;
14164
14165   /* Look for the `=' token.  */
14166   if (!cp_parser_require (parser, CPP_EQ, "`='"))
14167     return error_mark_node;
14168   /* Look for the `0' token.  */
14169   token = cp_lexer_consume_token (parser->lexer);
14170   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
14171   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
14172     {
14173       cp_parser_error (parser,
14174                        "invalid pure specifier (only `= 0' is allowed)");
14175       cp_parser_skip_to_end_of_statement (parser);
14176       return error_mark_node;
14177     }
14178   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
14179     {
14180       error ("templates may not be %<virtual%>");
14181       return error_mark_node;
14182     }
14183
14184   return integer_zero_node;
14185 }
14186
14187 /* Parse a constant-initializer.
14188
14189    constant-initializer:
14190      = constant-expression
14191
14192    Returns a representation of the constant-expression.  */
14193
14194 static tree
14195 cp_parser_constant_initializer (cp_parser* parser)
14196 {
14197   /* Look for the `=' token.  */
14198   if (!cp_parser_require (parser, CPP_EQ, "`='"))
14199     return error_mark_node;
14200
14201   /* It is invalid to write:
14202
14203        struct S { static const int i = { 7 }; };
14204
14205      */
14206   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14207     {
14208       cp_parser_error (parser,
14209                        "a brace-enclosed initializer is not allowed here");
14210       /* Consume the opening brace.  */
14211       cp_lexer_consume_token (parser->lexer);
14212       /* Skip the initializer.  */
14213       cp_parser_skip_to_closing_brace (parser);
14214       /* Look for the trailing `}'.  */
14215       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
14216
14217       return error_mark_node;
14218     }
14219
14220   return cp_parser_constant_expression (parser,
14221                                         /*allow_non_constant=*/false,
14222                                         NULL);
14223 }
14224
14225 /* Derived classes [gram.class.derived] */
14226
14227 /* Parse a base-clause.
14228
14229    base-clause:
14230      : base-specifier-list
14231
14232    base-specifier-list:
14233      base-specifier
14234      base-specifier-list , base-specifier
14235
14236    Returns a TREE_LIST representing the base-classes, in the order in
14237    which they were declared.  The representation of each node is as
14238    described by cp_parser_base_specifier.
14239
14240    In the case that no bases are specified, this function will return
14241    NULL_TREE, not ERROR_MARK_NODE.  */
14242
14243 static tree
14244 cp_parser_base_clause (cp_parser* parser)
14245 {
14246   tree bases = NULL_TREE;
14247
14248   /* Look for the `:' that begins the list.  */
14249   cp_parser_require (parser, CPP_COLON, "`:'");
14250
14251   /* Scan the base-specifier-list.  */
14252   while (true)
14253     {
14254       cp_token *token;
14255       tree base;
14256
14257       /* Look for the base-specifier.  */
14258       base = cp_parser_base_specifier (parser);
14259       /* Add BASE to the front of the list.  */
14260       if (base != error_mark_node)
14261         {
14262           TREE_CHAIN (base) = bases;
14263           bases = base;
14264         }
14265       /* Peek at the next token.  */
14266       token = cp_lexer_peek_token (parser->lexer);
14267       /* If it's not a comma, then the list is complete.  */
14268       if (token->type != CPP_COMMA)
14269         break;
14270       /* Consume the `,'.  */
14271       cp_lexer_consume_token (parser->lexer);
14272     }
14273
14274   /* PARSER->SCOPE may still be non-NULL at this point, if the last
14275      base class had a qualified name.  However, the next name that
14276      appears is certainly not qualified.  */
14277   parser->scope = NULL_TREE;
14278   parser->qualifying_scope = NULL_TREE;
14279   parser->object_scope = NULL_TREE;
14280
14281   return nreverse (bases);
14282 }
14283
14284 /* Parse a base-specifier.
14285
14286    base-specifier:
14287      :: [opt] nested-name-specifier [opt] class-name
14288      virtual access-specifier [opt] :: [opt] nested-name-specifier
14289        [opt] class-name
14290      access-specifier virtual [opt] :: [opt] nested-name-specifier
14291        [opt] class-name
14292
14293    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
14294    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
14295    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
14296    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
14297
14298 static tree
14299 cp_parser_base_specifier (cp_parser* parser)
14300 {
14301   cp_token *token;
14302   bool done = false;
14303   bool virtual_p = false;
14304   bool duplicate_virtual_error_issued_p = false;
14305   bool duplicate_access_error_issued_p = false;
14306   bool class_scope_p, template_p;
14307   tree access = access_default_node;
14308   tree type;
14309
14310   /* Process the optional `virtual' and `access-specifier'.  */
14311   while (!done)
14312     {
14313       /* Peek at the next token.  */
14314       token = cp_lexer_peek_token (parser->lexer);
14315       /* Process `virtual'.  */
14316       switch (token->keyword)
14317         {
14318         case RID_VIRTUAL:
14319           /* If `virtual' appears more than once, issue an error.  */
14320           if (virtual_p && !duplicate_virtual_error_issued_p)
14321             {
14322               cp_parser_error (parser,
14323                                "%<virtual%> specified more than once in base-specified");
14324               duplicate_virtual_error_issued_p = true;
14325             }
14326
14327           virtual_p = true;
14328
14329           /* Consume the `virtual' token.  */
14330           cp_lexer_consume_token (parser->lexer);
14331
14332           break;
14333
14334         case RID_PUBLIC:
14335         case RID_PROTECTED:
14336         case RID_PRIVATE:
14337           /* If more than one access specifier appears, issue an
14338              error.  */
14339           if (access != access_default_node
14340               && !duplicate_access_error_issued_p)
14341             {
14342               cp_parser_error (parser,
14343                                "more than one access specifier in base-specified");
14344               duplicate_access_error_issued_p = true;
14345             }
14346
14347           access = ridpointers[(int) token->keyword];
14348
14349           /* Consume the access-specifier.  */
14350           cp_lexer_consume_token (parser->lexer);
14351
14352           break;
14353
14354         default:
14355           done = true;
14356           break;
14357         }
14358     }
14359   /* It is not uncommon to see programs mechanically, erroneously, use
14360      the 'typename' keyword to denote (dependent) qualified types
14361      as base classes.  */
14362   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
14363     {
14364       if (!processing_template_decl)
14365         error ("keyword %<typename%> not allowed outside of templates");
14366       else
14367         error ("keyword %<typename%> not allowed in this context "
14368                "(the base class is implicitly a type)");
14369       cp_lexer_consume_token (parser->lexer);
14370     }
14371
14372   /* Look for the optional `::' operator.  */
14373   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
14374   /* Look for the nested-name-specifier.  The simplest way to
14375      implement:
14376
14377        [temp.res]
14378
14379        The keyword `typename' is not permitted in a base-specifier or
14380        mem-initializer; in these contexts a qualified name that
14381        depends on a template-parameter is implicitly assumed to be a
14382        type name.
14383
14384      is to pretend that we have seen the `typename' keyword at this
14385      point.  */
14386   cp_parser_nested_name_specifier_opt (parser,
14387                                        /*typename_keyword_p=*/true,
14388                                        /*check_dependency_p=*/true,
14389                                        typename_type,
14390                                        /*is_declaration=*/true);
14391   /* If the base class is given by a qualified name, assume that names
14392      we see are type names or templates, as appropriate.  */
14393   class_scope_p = (parser->scope && TYPE_P (parser->scope));
14394   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
14395
14396   /* Finally, look for the class-name.  */
14397   type = cp_parser_class_name (parser,
14398                                class_scope_p,
14399                                template_p,
14400                                typename_type,
14401                                /*check_dependency_p=*/true,
14402                                /*class_head_p=*/false,
14403                                /*is_declaration=*/true);
14404
14405   if (type == error_mark_node)
14406     return error_mark_node;
14407
14408   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
14409 }
14410
14411 /* Exception handling [gram.exception] */
14412
14413 /* Parse an (optional) exception-specification.
14414
14415    exception-specification:
14416      throw ( type-id-list [opt] )
14417
14418    Returns a TREE_LIST representing the exception-specification.  The
14419    TREE_VALUE of each node is a type.  */
14420
14421 static tree
14422 cp_parser_exception_specification_opt (cp_parser* parser)
14423 {
14424   cp_token *token;
14425   tree type_id_list;
14426
14427   /* Peek at the next token.  */
14428   token = cp_lexer_peek_token (parser->lexer);
14429   /* If it's not `throw', then there's no exception-specification.  */
14430   if (!cp_parser_is_keyword (token, RID_THROW))
14431     return NULL_TREE;
14432
14433   /* Consume the `throw'.  */
14434   cp_lexer_consume_token (parser->lexer);
14435
14436   /* Look for the `('.  */
14437   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14438
14439   /* Peek at the next token.  */
14440   token = cp_lexer_peek_token (parser->lexer);
14441   /* If it's not a `)', then there is a type-id-list.  */
14442   if (token->type != CPP_CLOSE_PAREN)
14443     {
14444       const char *saved_message;
14445
14446       /* Types may not be defined in an exception-specification.  */
14447       saved_message = parser->type_definition_forbidden_message;
14448       parser->type_definition_forbidden_message
14449         = "types may not be defined in an exception-specification";
14450       /* Parse the type-id-list.  */
14451       type_id_list = cp_parser_type_id_list (parser);
14452       /* Restore the saved message.  */
14453       parser->type_definition_forbidden_message = saved_message;
14454     }
14455   else
14456     type_id_list = empty_except_spec;
14457
14458   /* Look for the `)'.  */
14459   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14460
14461   return type_id_list;
14462 }
14463
14464 /* Parse an (optional) type-id-list.
14465
14466    type-id-list:
14467      type-id
14468      type-id-list , type-id
14469
14470    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
14471    in the order that the types were presented.  */
14472
14473 static tree
14474 cp_parser_type_id_list (cp_parser* parser)
14475 {
14476   tree types = NULL_TREE;
14477
14478   while (true)
14479     {
14480       cp_token *token;
14481       tree type;
14482
14483       /* Get the next type-id.  */
14484       type = cp_parser_type_id (parser);
14485       /* Add it to the list.  */
14486       types = add_exception_specifier (types, type, /*complain=*/1);
14487       /* Peek at the next token.  */
14488       token = cp_lexer_peek_token (parser->lexer);
14489       /* If it is not a `,', we are done.  */
14490       if (token->type != CPP_COMMA)
14491         break;
14492       /* Consume the `,'.  */
14493       cp_lexer_consume_token (parser->lexer);
14494     }
14495
14496   return nreverse (types);
14497 }
14498
14499 /* Parse a try-block.
14500
14501    try-block:
14502      try compound-statement handler-seq  */
14503
14504 static tree
14505 cp_parser_try_block (cp_parser* parser)
14506 {
14507   tree try_block;
14508
14509   cp_parser_require_keyword (parser, RID_TRY, "`try'");
14510   try_block = begin_try_block ();
14511   cp_parser_compound_statement (parser, NULL, true);
14512   finish_try_block (try_block);
14513   cp_parser_handler_seq (parser);
14514   finish_handler_sequence (try_block);
14515
14516   return try_block;
14517 }
14518
14519 /* Parse a function-try-block.
14520
14521    function-try-block:
14522      try ctor-initializer [opt] function-body handler-seq  */
14523
14524 static bool
14525 cp_parser_function_try_block (cp_parser* parser)
14526 {
14527   tree compound_stmt;
14528   tree try_block;
14529   bool ctor_initializer_p;
14530
14531   /* Look for the `try' keyword.  */
14532   if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
14533     return false;
14534   /* Let the rest of the front-end know where we are.  */
14535   try_block = begin_function_try_block (&compound_stmt);
14536   /* Parse the function-body.  */
14537   ctor_initializer_p
14538     = cp_parser_ctor_initializer_opt_and_function_body (parser);
14539   /* We're done with the `try' part.  */
14540   finish_function_try_block (try_block);
14541   /* Parse the handlers.  */
14542   cp_parser_handler_seq (parser);
14543   /* We're done with the handlers.  */
14544   finish_function_handler_sequence (try_block, compound_stmt);
14545
14546   return ctor_initializer_p;
14547 }
14548
14549 /* Parse a handler-seq.
14550
14551    handler-seq:
14552      handler handler-seq [opt]  */
14553
14554 static void
14555 cp_parser_handler_seq (cp_parser* parser)
14556 {
14557   while (true)
14558     {
14559       cp_token *token;
14560
14561       /* Parse the handler.  */
14562       cp_parser_handler (parser);
14563       /* Peek at the next token.  */
14564       token = cp_lexer_peek_token (parser->lexer);
14565       /* If it's not `catch' then there are no more handlers.  */
14566       if (!cp_parser_is_keyword (token, RID_CATCH))
14567         break;
14568     }
14569 }
14570
14571 /* Parse a handler.
14572
14573    handler:
14574      catch ( exception-declaration ) compound-statement  */
14575
14576 static void
14577 cp_parser_handler (cp_parser* parser)
14578 {
14579   tree handler;
14580   tree declaration;
14581
14582   cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
14583   handler = begin_handler ();
14584   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14585   declaration = cp_parser_exception_declaration (parser);
14586   finish_handler_parms (declaration, handler);
14587   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14588   cp_parser_compound_statement (parser, NULL, false);
14589   finish_handler (handler);
14590 }
14591
14592 /* Parse an exception-declaration.
14593
14594    exception-declaration:
14595      type-specifier-seq declarator
14596      type-specifier-seq abstract-declarator
14597      type-specifier-seq
14598      ...
14599
14600    Returns a VAR_DECL for the declaration, or NULL_TREE if the
14601    ellipsis variant is used.  */
14602
14603 static tree
14604 cp_parser_exception_declaration (cp_parser* parser)
14605 {
14606   cp_decl_specifier_seq type_specifiers;
14607   cp_declarator *declarator;
14608   const char *saved_message;
14609
14610   /* If it's an ellipsis, it's easy to handle.  */
14611   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14612     {
14613       /* Consume the `...' token.  */
14614       cp_lexer_consume_token (parser->lexer);
14615       return NULL_TREE;
14616     }
14617
14618   /* Types may not be defined in exception-declarations.  */
14619   saved_message = parser->type_definition_forbidden_message;
14620   parser->type_definition_forbidden_message
14621     = "types may not be defined in exception-declarations";
14622
14623   /* Parse the type-specifier-seq.  */
14624   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
14625                                 &type_specifiers);
14626   /* If it's a `)', then there is no declarator.  */
14627   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
14628     declarator = NULL;
14629   else
14630     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
14631                                        /*ctor_dtor_or_conv_p=*/NULL,
14632                                        /*parenthesized_p=*/NULL,
14633                                        /*member_p=*/false);
14634
14635   /* Restore the saved message.  */
14636   parser->type_definition_forbidden_message = saved_message;
14637
14638   if (!type_specifiers.any_specifiers_p)
14639     return error_mark_node;
14640
14641   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
14642 }
14643
14644 /* Parse a throw-expression.
14645
14646    throw-expression:
14647      throw assignment-expression [opt]
14648
14649    Returns a THROW_EXPR representing the throw-expression.  */
14650
14651 static tree
14652 cp_parser_throw_expression (cp_parser* parser)
14653 {
14654   tree expression;
14655   cp_token* token;
14656
14657   cp_parser_require_keyword (parser, RID_THROW, "`throw'");
14658   token = cp_lexer_peek_token (parser->lexer);
14659   /* Figure out whether or not there is an assignment-expression
14660      following the "throw" keyword.  */
14661   if (token->type == CPP_COMMA
14662       || token->type == CPP_SEMICOLON
14663       || token->type == CPP_CLOSE_PAREN
14664       || token->type == CPP_CLOSE_SQUARE
14665       || token->type == CPP_CLOSE_BRACE
14666       || token->type == CPP_COLON)
14667     expression = NULL_TREE;
14668   else
14669     expression = cp_parser_assignment_expression (parser,
14670                                                   /*cast_p=*/false);
14671
14672   return build_throw (expression);
14673 }
14674
14675 /* GNU Extensions */
14676
14677 /* Parse an (optional) asm-specification.
14678
14679    asm-specification:
14680      asm ( string-literal )
14681
14682    If the asm-specification is present, returns a STRING_CST
14683    corresponding to the string-literal.  Otherwise, returns
14684    NULL_TREE.  */
14685
14686 static tree
14687 cp_parser_asm_specification_opt (cp_parser* parser)
14688 {
14689   cp_token *token;
14690   tree asm_specification;
14691
14692   /* Peek at the next token.  */
14693   token = cp_lexer_peek_token (parser->lexer);
14694   /* If the next token isn't the `asm' keyword, then there's no
14695      asm-specification.  */
14696   if (!cp_parser_is_keyword (token, RID_ASM))
14697     return NULL_TREE;
14698
14699   /* Consume the `asm' token.  */
14700   cp_lexer_consume_token (parser->lexer);
14701   /* Look for the `('.  */
14702   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14703
14704   /* Look for the string-literal.  */
14705   asm_specification = cp_parser_string_literal (parser, false, false);
14706
14707   /* Look for the `)'.  */
14708   cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
14709
14710   return asm_specification;
14711 }
14712
14713 /* Parse an asm-operand-list.
14714
14715    asm-operand-list:
14716      asm-operand
14717      asm-operand-list , asm-operand
14718
14719    asm-operand:
14720      string-literal ( expression )
14721      [ string-literal ] string-literal ( expression )
14722
14723    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
14724    each node is the expression.  The TREE_PURPOSE is itself a
14725    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
14726    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
14727    is a STRING_CST for the string literal before the parenthesis.  */
14728
14729 static tree
14730 cp_parser_asm_operand_list (cp_parser* parser)
14731 {
14732   tree asm_operands = NULL_TREE;
14733
14734   while (true)
14735     {
14736       tree string_literal;
14737       tree expression;
14738       tree name;
14739
14740       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
14741         {
14742           /* Consume the `[' token.  */
14743           cp_lexer_consume_token (parser->lexer);
14744           /* Read the operand name.  */
14745           name = cp_parser_identifier (parser);
14746           if (name != error_mark_node)
14747             name = build_string (IDENTIFIER_LENGTH (name),
14748                                  IDENTIFIER_POINTER (name));
14749           /* Look for the closing `]'.  */
14750           cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
14751         }
14752       else
14753         name = NULL_TREE;
14754       /* Look for the string-literal.  */
14755       string_literal = cp_parser_string_literal (parser, false, false);
14756
14757       /* Look for the `('.  */
14758       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14759       /* Parse the expression.  */
14760       expression = cp_parser_expression (parser, /*cast_p=*/false);
14761       /* Look for the `)'.  */
14762       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14763
14764       /* Add this operand to the list.  */
14765       asm_operands = tree_cons (build_tree_list (name, string_literal),
14766                                 expression,
14767                                 asm_operands);
14768       /* If the next token is not a `,', there are no more
14769          operands.  */
14770       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14771         break;
14772       /* Consume the `,'.  */
14773       cp_lexer_consume_token (parser->lexer);
14774     }
14775
14776   return nreverse (asm_operands);
14777 }
14778
14779 /* Parse an asm-clobber-list.
14780
14781    asm-clobber-list:
14782      string-literal
14783      asm-clobber-list , string-literal
14784
14785    Returns a TREE_LIST, indicating the clobbers in the order that they
14786    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
14787
14788 static tree
14789 cp_parser_asm_clobber_list (cp_parser* parser)
14790 {
14791   tree clobbers = NULL_TREE;
14792
14793   while (true)
14794     {
14795       tree string_literal;
14796
14797       /* Look for the string literal.  */
14798       string_literal = cp_parser_string_literal (parser, false, false);
14799       /* Add it to the list.  */
14800       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
14801       /* If the next token is not a `,', then the list is
14802          complete.  */
14803       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14804         break;
14805       /* Consume the `,' token.  */
14806       cp_lexer_consume_token (parser->lexer);
14807     }
14808
14809   return clobbers;
14810 }
14811
14812 /* Parse an (optional) series of attributes.
14813
14814    attributes:
14815      attributes attribute
14816
14817    attribute:
14818      __attribute__ (( attribute-list [opt] ))
14819
14820    The return value is as for cp_parser_attribute_list.  */
14821
14822 static tree
14823 cp_parser_attributes_opt (cp_parser* parser)
14824 {
14825   tree attributes = NULL_TREE;
14826
14827   while (true)
14828     {
14829       cp_token *token;
14830       tree attribute_list;
14831
14832       /* Peek at the next token.  */
14833       token = cp_lexer_peek_token (parser->lexer);
14834       /* If it's not `__attribute__', then we're done.  */
14835       if (token->keyword != RID_ATTRIBUTE)
14836         break;
14837
14838       /* Consume the `__attribute__' keyword.  */
14839       cp_lexer_consume_token (parser->lexer);
14840       /* Look for the two `(' tokens.  */
14841       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14842       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14843
14844       /* Peek at the next token.  */
14845       token = cp_lexer_peek_token (parser->lexer);
14846       if (token->type != CPP_CLOSE_PAREN)
14847         /* Parse the attribute-list.  */
14848         attribute_list = cp_parser_attribute_list (parser);
14849       else
14850         /* If the next token is a `)', then there is no attribute
14851            list.  */
14852         attribute_list = NULL;
14853
14854       /* Look for the two `)' tokens.  */
14855       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14856       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14857
14858       /* Add these new attributes to the list.  */
14859       attributes = chainon (attributes, attribute_list);
14860     }
14861
14862   return attributes;
14863 }
14864
14865 /* Parse an attribute-list.
14866
14867    attribute-list:
14868      attribute
14869      attribute-list , attribute
14870
14871    attribute:
14872      identifier
14873      identifier ( identifier )
14874      identifier ( identifier , expression-list )
14875      identifier ( expression-list )
14876
14877    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
14878    to an attribute.  The TREE_PURPOSE of each node is the identifier
14879    indicating which attribute is in use.  The TREE_VALUE represents
14880    the arguments, if any.  */
14881
14882 static tree
14883 cp_parser_attribute_list (cp_parser* parser)
14884 {
14885   tree attribute_list = NULL_TREE;
14886   bool save_translate_strings_p = parser->translate_strings_p;
14887
14888   parser->translate_strings_p = false;
14889   while (true)
14890     {
14891       cp_token *token;
14892       tree identifier;
14893       tree attribute;
14894
14895       /* Look for the identifier.  We also allow keywords here; for
14896          example `__attribute__ ((const))' is legal.  */
14897       token = cp_lexer_peek_token (parser->lexer);
14898       if (token->type == CPP_NAME
14899           || token->type == CPP_KEYWORD)
14900         {
14901           tree arguments = NULL_TREE;
14902
14903           /* Consume the token.  */
14904           token = cp_lexer_consume_token (parser->lexer);
14905
14906           /* Save away the identifier that indicates which attribute
14907              this is.  */
14908           identifier = token->u.value;
14909           attribute = build_tree_list (identifier, NULL_TREE);
14910
14911           /* Peek at the next token.  */
14912           token = cp_lexer_peek_token (parser->lexer);
14913           /* If it's an `(', then parse the attribute arguments.  */
14914           if (token->type == CPP_OPEN_PAREN)
14915             {
14916               arguments = cp_parser_parenthesized_expression_list
14917                           (parser, true, /*cast_p=*/false,
14918                            /*non_constant_p=*/NULL);
14919               /* Save the arguments away.  */
14920               TREE_VALUE (attribute) = arguments;
14921             }
14922
14923           if (arguments != error_mark_node)
14924             {
14925               /* Add this attribute to the list.  */
14926               TREE_CHAIN (attribute) = attribute_list;
14927               attribute_list = attribute;
14928             }
14929
14930           token = cp_lexer_peek_token (parser->lexer);
14931         }
14932       /* Now, look for more attributes.  If the next token isn't a
14933          `,', we're done.  */
14934       if (token->type != CPP_COMMA)
14935         break;
14936
14937       /* Consume the comma and keep going.  */
14938       cp_lexer_consume_token (parser->lexer);
14939     }
14940   parser->translate_strings_p = save_translate_strings_p;
14941
14942   /* We built up the list in reverse order.  */
14943   return nreverse (attribute_list);
14944 }
14945
14946 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
14947    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
14948    current value of the PEDANTIC flag, regardless of whether or not
14949    the `__extension__' keyword is present.  The caller is responsible
14950    for restoring the value of the PEDANTIC flag.  */
14951
14952 static bool
14953 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
14954 {
14955   /* Save the old value of the PEDANTIC flag.  */
14956   *saved_pedantic = pedantic;
14957
14958   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
14959     {
14960       /* Consume the `__extension__' token.  */
14961       cp_lexer_consume_token (parser->lexer);
14962       /* We're not being pedantic while the `__extension__' keyword is
14963          in effect.  */
14964       pedantic = 0;
14965
14966       return true;
14967     }
14968
14969   return false;
14970 }
14971
14972 /* Parse a label declaration.
14973
14974    label-declaration:
14975      __label__ label-declarator-seq ;
14976
14977    label-declarator-seq:
14978      identifier , label-declarator-seq
14979      identifier  */
14980
14981 static void
14982 cp_parser_label_declaration (cp_parser* parser)
14983 {
14984   /* Look for the `__label__' keyword.  */
14985   cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
14986
14987   while (true)
14988     {
14989       tree identifier;
14990
14991       /* Look for an identifier.  */
14992       identifier = cp_parser_identifier (parser);
14993       /* If we failed, stop.  */
14994       if (identifier == error_mark_node)
14995         break;
14996       /* Declare it as a label.  */
14997       finish_label_decl (identifier);
14998       /* If the next token is a `;', stop.  */
14999       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15000         break;
15001       /* Look for the `,' separating the label declarations.  */
15002       cp_parser_require (parser, CPP_COMMA, "`,'");
15003     }
15004
15005   /* Look for the final `;'.  */
15006   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
15007 }
15008
15009 /* Support Functions */
15010
15011 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
15012    NAME should have one of the representations used for an
15013    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
15014    is returned.  If PARSER->SCOPE is a dependent type, then a
15015    SCOPE_REF is returned.
15016
15017    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
15018    returned; the name was already resolved when the TEMPLATE_ID_EXPR
15019    was formed.  Abstractly, such entities should not be passed to this
15020    function, because they do not need to be looked up, but it is
15021    simpler to check for this special case here, rather than at the
15022    call-sites.
15023
15024    In cases not explicitly covered above, this function returns a
15025    DECL, OVERLOAD, or baselink representing the result of the lookup.
15026    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
15027    is returned.
15028
15029    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
15030    (e.g., "struct") that was used.  In that case bindings that do not
15031    refer to types are ignored.
15032
15033    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
15034    ignored.
15035
15036    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
15037    are ignored.
15038
15039    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
15040    types.
15041
15042    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
15043    TREE_LIST of candidates if name-lookup results in an ambiguity, and
15044    NULL_TREE otherwise.  */
15045
15046 static tree
15047 cp_parser_lookup_name (cp_parser *parser, tree name,
15048                        enum tag_types tag_type,
15049                        bool is_template,
15050                        bool is_namespace,
15051                        bool check_dependency,
15052                        tree *ambiguous_decls)
15053 {
15054   int flags = 0;
15055   tree decl;
15056   tree object_type = parser->context->object_type;
15057
15058   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
15059     flags |= LOOKUP_COMPLAIN;
15060
15061   /* Assume that the lookup will be unambiguous.  */
15062   if (ambiguous_decls)
15063     *ambiguous_decls = NULL_TREE;
15064
15065   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
15066      no longer valid.  Note that if we are parsing tentatively, and
15067      the parse fails, OBJECT_TYPE will be automatically restored.  */
15068   parser->context->object_type = NULL_TREE;
15069
15070   if (name == error_mark_node)
15071     return error_mark_node;
15072
15073   /* A template-id has already been resolved; there is no lookup to
15074      do.  */
15075   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
15076     return name;
15077   if (BASELINK_P (name))
15078     {
15079       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
15080                   == TEMPLATE_ID_EXPR);
15081       return name;
15082     }
15083
15084   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
15085      it should already have been checked to make sure that the name
15086      used matches the type being destroyed.  */
15087   if (TREE_CODE (name) == BIT_NOT_EXPR)
15088     {
15089       tree type;
15090
15091       /* Figure out to which type this destructor applies.  */
15092       if (parser->scope)
15093         type = parser->scope;
15094       else if (object_type)
15095         type = object_type;
15096       else
15097         type = current_class_type;
15098       /* If that's not a class type, there is no destructor.  */
15099       if (!type || !CLASS_TYPE_P (type))
15100         return error_mark_node;
15101       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
15102         lazily_declare_fn (sfk_destructor, type);
15103       if (!CLASSTYPE_DESTRUCTORS (type))
15104           return error_mark_node;
15105       /* If it was a class type, return the destructor.  */
15106       return CLASSTYPE_DESTRUCTORS (type);
15107     }
15108
15109   /* By this point, the NAME should be an ordinary identifier.  If
15110      the id-expression was a qualified name, the qualifying scope is
15111      stored in PARSER->SCOPE at this point.  */
15112   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
15113
15114   /* Perform the lookup.  */
15115   if (parser->scope)
15116     {
15117       bool dependent_p;
15118
15119       if (parser->scope == error_mark_node)
15120         return error_mark_node;
15121
15122       /* If the SCOPE is dependent, the lookup must be deferred until
15123          the template is instantiated -- unless we are explicitly
15124          looking up names in uninstantiated templates.  Even then, we
15125          cannot look up the name if the scope is not a class type; it
15126          might, for example, be a template type parameter.  */
15127       dependent_p = (TYPE_P (parser->scope)
15128                      && !(parser->in_declarator_p
15129                           && currently_open_class (parser->scope))
15130                      && dependent_type_p (parser->scope));
15131       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
15132            && dependent_p)
15133         {
15134           if (tag_type)
15135             {
15136               tree type;
15137
15138               /* The resolution to Core Issue 180 says that `struct
15139                  A::B' should be considered a type-name, even if `A'
15140                  is dependent.  */
15141               type = make_typename_type (parser->scope, name, tag_type,
15142                                          /*complain=*/tf_error);
15143               decl = TYPE_NAME (type);
15144             }
15145           else if (is_template
15146                    && (cp_parser_next_token_ends_template_argument_p (parser)
15147                        || cp_lexer_next_token_is (parser->lexer,
15148                                                   CPP_CLOSE_PAREN)))
15149             decl = make_unbound_class_template (parser->scope,
15150                                                 name, NULL_TREE,
15151                                                 /*complain=*/tf_error);
15152           else
15153             decl = build_qualified_name (/*type=*/NULL_TREE,
15154                                          parser->scope, name,
15155                                          is_template);
15156         }
15157       else
15158         {
15159           tree pushed_scope = NULL_TREE;
15160
15161           /* If PARSER->SCOPE is a dependent type, then it must be a
15162              class type, and we must not be checking dependencies;
15163              otherwise, we would have processed this lookup above.  So
15164              that PARSER->SCOPE is not considered a dependent base by
15165              lookup_member, we must enter the scope here.  */
15166           if (dependent_p)
15167             pushed_scope = push_scope (parser->scope);
15168           /* If the PARSER->SCOPE is a template specialization, it
15169              may be instantiated during name lookup.  In that case,
15170              errors may be issued.  Even if we rollback the current
15171              tentative parse, those errors are valid.  */
15172           decl = lookup_qualified_name (parser->scope, name,
15173                                         tag_type != none_type,
15174                                         /*complain=*/true);
15175           if (pushed_scope)
15176             pop_scope (pushed_scope);
15177         }
15178       parser->qualifying_scope = parser->scope;
15179       parser->object_scope = NULL_TREE;
15180     }
15181   else if (object_type)
15182     {
15183       tree object_decl = NULL_TREE;
15184       /* Look up the name in the scope of the OBJECT_TYPE, unless the
15185          OBJECT_TYPE is not a class.  */
15186       if (CLASS_TYPE_P (object_type))
15187         /* If the OBJECT_TYPE is a template specialization, it may
15188            be instantiated during name lookup.  In that case, errors
15189            may be issued.  Even if we rollback the current tentative
15190            parse, those errors are valid.  */
15191         object_decl = lookup_member (object_type,
15192                                      name,
15193                                      /*protect=*/0,
15194                                      tag_type != none_type);
15195       /* Look it up in the enclosing context, too.  */
15196       decl = lookup_name_real (name, tag_type != none_type,
15197                                /*nonclass=*/0,
15198                                /*block_p=*/true, is_namespace, flags);
15199       parser->object_scope = object_type;
15200       parser->qualifying_scope = NULL_TREE;
15201       if (object_decl)
15202         decl = object_decl;
15203     }
15204   else
15205     {
15206       decl = lookup_name_real (name, tag_type != none_type,
15207                                /*nonclass=*/0,
15208                                /*block_p=*/true, is_namespace, flags);
15209       parser->qualifying_scope = NULL_TREE;
15210       parser->object_scope = NULL_TREE;
15211     }
15212
15213   /* If the lookup failed, let our caller know.  */
15214   if (!decl || decl == error_mark_node)
15215     return error_mark_node;
15216
15217   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
15218   if (TREE_CODE (decl) == TREE_LIST)
15219     {
15220       if (ambiguous_decls)
15221         *ambiguous_decls = decl;
15222       /* The error message we have to print is too complicated for
15223          cp_parser_error, so we incorporate its actions directly.  */
15224       if (!cp_parser_simulate_error (parser))
15225         {
15226           error ("reference to %qD is ambiguous", name);
15227           print_candidates (decl);
15228         }
15229       return error_mark_node;
15230     }
15231
15232   gcc_assert (DECL_P (decl)
15233               || TREE_CODE (decl) == OVERLOAD
15234               || TREE_CODE (decl) == SCOPE_REF
15235               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
15236               || BASELINK_P (decl));
15237
15238   /* If we have resolved the name of a member declaration, check to
15239      see if the declaration is accessible.  When the name resolves to
15240      set of overloaded functions, accessibility is checked when
15241      overload resolution is done.
15242
15243      During an explicit instantiation, access is not checked at all,
15244      as per [temp.explicit].  */
15245   if (DECL_P (decl))
15246     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
15247
15248   return decl;
15249 }
15250
15251 /* Like cp_parser_lookup_name, but for use in the typical case where
15252    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
15253    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
15254
15255 static tree
15256 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
15257 {
15258   return cp_parser_lookup_name (parser, name,
15259                                 none_type,
15260                                 /*is_template=*/false,
15261                                 /*is_namespace=*/false,
15262                                 /*check_dependency=*/true,
15263                                 /*ambiguous_decls=*/NULL);
15264 }
15265
15266 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
15267    the current context, return the TYPE_DECL.  If TAG_NAME_P is
15268    true, the DECL indicates the class being defined in a class-head,
15269    or declared in an elaborated-type-specifier.
15270
15271    Otherwise, return DECL.  */
15272
15273 static tree
15274 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
15275 {
15276   /* If the TEMPLATE_DECL is being declared as part of a class-head,
15277      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
15278
15279        struct A {
15280          template <typename T> struct B;
15281        };
15282
15283        template <typename T> struct A::B {};
15284
15285      Similarly, in an elaborated-type-specifier:
15286
15287        namespace N { struct X{}; }
15288
15289        struct A {
15290          template <typename T> friend struct N::X;
15291        };
15292
15293      However, if the DECL refers to a class type, and we are in
15294      the scope of the class, then the name lookup automatically
15295      finds the TYPE_DECL created by build_self_reference rather
15296      than a TEMPLATE_DECL.  For example, in:
15297
15298        template <class T> struct S {
15299          S s;
15300        };
15301
15302      there is no need to handle such case.  */
15303
15304   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
15305     return DECL_TEMPLATE_RESULT (decl);
15306
15307   return decl;
15308 }
15309
15310 /* If too many, or too few, template-parameter lists apply to the
15311    declarator, issue an error message.  Returns TRUE if all went well,
15312    and FALSE otherwise.  */
15313
15314 static bool
15315 cp_parser_check_declarator_template_parameters (cp_parser* parser,
15316                                                 cp_declarator *declarator)
15317 {
15318   unsigned num_templates;
15319
15320   /* We haven't seen any classes that involve template parameters yet.  */
15321   num_templates = 0;
15322
15323   switch (declarator->kind)
15324     {
15325     case cdk_id:
15326       if (declarator->u.id.qualifying_scope)
15327         {
15328           tree scope;
15329           tree member;
15330
15331           scope = declarator->u.id.qualifying_scope;
15332           member = declarator->u.id.unqualified_name;
15333
15334           while (scope && CLASS_TYPE_P (scope))
15335             {
15336               /* You're supposed to have one `template <...>'
15337                  for every template class, but you don't need one
15338                  for a full specialization.  For example:
15339
15340                  template <class T> struct S{};
15341                  template <> struct S<int> { void f(); };
15342                  void S<int>::f () {}
15343
15344                  is correct; there shouldn't be a `template <>' for
15345                  the definition of `S<int>::f'.  */
15346               if (!CLASSTYPE_TEMPLATE_INFO (scope))
15347                 /* If SCOPE does not have template information of any
15348                    kind, then it is not a template, nor is it nested
15349                    within a template.  */
15350                 break;
15351               if (explicit_class_specialization_p (scope))
15352                 break;
15353               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
15354                 ++num_templates;
15355
15356               scope = TYPE_CONTEXT (scope);
15357             }
15358         }
15359       else if (TREE_CODE (declarator->u.id.unqualified_name)
15360                == TEMPLATE_ID_EXPR)
15361         /* If the DECLARATOR has the form `X<y>' then it uses one
15362            additional level of template parameters.  */
15363         ++num_templates;
15364
15365       return cp_parser_check_template_parameters (parser,
15366                                                   num_templates);
15367
15368     case cdk_function:
15369     case cdk_array:
15370     case cdk_pointer:
15371     case cdk_reference:
15372     case cdk_ptrmem:
15373       return (cp_parser_check_declarator_template_parameters
15374               (parser, declarator->declarator));
15375
15376     case cdk_error:
15377       return true;
15378
15379     default:
15380       gcc_unreachable ();
15381     }
15382   return false;
15383 }
15384
15385 /* NUM_TEMPLATES were used in the current declaration.  If that is
15386    invalid, return FALSE and issue an error messages.  Otherwise,
15387    return TRUE.  */
15388
15389 static bool
15390 cp_parser_check_template_parameters (cp_parser* parser,
15391                                      unsigned num_templates)
15392 {
15393   /* If there are more template classes than parameter lists, we have
15394      something like:
15395
15396        template <class T> void S<T>::R<T>::f ();  */
15397   if (parser->num_template_parameter_lists < num_templates)
15398     {
15399       error ("too few template-parameter-lists");
15400       return false;
15401     }
15402   /* If there are the same number of template classes and parameter
15403      lists, that's OK.  */
15404   if (parser->num_template_parameter_lists == num_templates)
15405     return true;
15406   /* If there are more, but only one more, then we are referring to a
15407      member template.  That's OK too.  */
15408   if (parser->num_template_parameter_lists == num_templates + 1)
15409       return true;
15410   /* Otherwise, there are too many template parameter lists.  We have
15411      something like:
15412
15413      template <class T> template <class U> void S::f();  */
15414   error ("too many template-parameter-lists");
15415   return false;
15416 }
15417
15418 /* Parse an optional `::' token indicating that the following name is
15419    from the global namespace.  If so, PARSER->SCOPE is set to the
15420    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
15421    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
15422    Returns the new value of PARSER->SCOPE, if the `::' token is
15423    present, and NULL_TREE otherwise.  */
15424
15425 static tree
15426 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
15427 {
15428   cp_token *token;
15429
15430   /* Peek at the next token.  */
15431   token = cp_lexer_peek_token (parser->lexer);
15432   /* If we're looking at a `::' token then we're starting from the
15433      global namespace, not our current location.  */
15434   if (token->type == CPP_SCOPE)
15435     {
15436       /* Consume the `::' token.  */
15437       cp_lexer_consume_token (parser->lexer);
15438       /* Set the SCOPE so that we know where to start the lookup.  */
15439       parser->scope = global_namespace;
15440       parser->qualifying_scope = global_namespace;
15441       parser->object_scope = NULL_TREE;
15442
15443       return parser->scope;
15444     }
15445   else if (!current_scope_valid_p)
15446     {
15447       parser->scope = NULL_TREE;
15448       parser->qualifying_scope = NULL_TREE;
15449       parser->object_scope = NULL_TREE;
15450     }
15451
15452   return NULL_TREE;
15453 }
15454
15455 /* Returns TRUE if the upcoming token sequence is the start of a
15456    constructor declarator.  If FRIEND_P is true, the declarator is
15457    preceded by the `friend' specifier.  */
15458
15459 static bool
15460 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
15461 {
15462   bool constructor_p;
15463   tree type_decl = NULL_TREE;
15464   bool nested_name_p;
15465   cp_token *next_token;
15466
15467   /* The common case is that this is not a constructor declarator, so
15468      try to avoid doing lots of work if at all possible.  It's not
15469      valid declare a constructor at function scope.  */
15470   if (parser->in_function_body)
15471     return false;
15472   /* And only certain tokens can begin a constructor declarator.  */
15473   next_token = cp_lexer_peek_token (parser->lexer);
15474   if (next_token->type != CPP_NAME
15475       && next_token->type != CPP_SCOPE
15476       && next_token->type != CPP_NESTED_NAME_SPECIFIER
15477       && next_token->type != CPP_TEMPLATE_ID)
15478     return false;
15479
15480   /* Parse tentatively; we are going to roll back all of the tokens
15481      consumed here.  */
15482   cp_parser_parse_tentatively (parser);
15483   /* Assume that we are looking at a constructor declarator.  */
15484   constructor_p = true;
15485
15486   /* Look for the optional `::' operator.  */
15487   cp_parser_global_scope_opt (parser,
15488                               /*current_scope_valid_p=*/false);
15489   /* Look for the nested-name-specifier.  */
15490   nested_name_p
15491     = (cp_parser_nested_name_specifier_opt (parser,
15492                                             /*typename_keyword_p=*/false,
15493                                             /*check_dependency_p=*/false,
15494                                             /*type_p=*/false,
15495                                             /*is_declaration=*/false)
15496        != NULL_TREE);
15497   /* Outside of a class-specifier, there must be a
15498      nested-name-specifier.  */
15499   if (!nested_name_p &&
15500       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
15501        || friend_p))
15502     constructor_p = false;
15503   /* If we still think that this might be a constructor-declarator,
15504      look for a class-name.  */
15505   if (constructor_p)
15506     {
15507       /* If we have:
15508
15509            template <typename T> struct S { S(); };
15510            template <typename T> S<T>::S ();
15511
15512          we must recognize that the nested `S' names a class.
15513          Similarly, for:
15514
15515            template <typename T> S<T>::S<T> ();
15516
15517          we must recognize that the nested `S' names a template.  */
15518       type_decl = cp_parser_class_name (parser,
15519                                         /*typename_keyword_p=*/false,
15520                                         /*template_keyword_p=*/false,
15521                                         none_type,
15522                                         /*check_dependency_p=*/false,
15523                                         /*class_head_p=*/false,
15524                                         /*is_declaration=*/false);
15525       /* If there was no class-name, then this is not a constructor.  */
15526       constructor_p = !cp_parser_error_occurred (parser);
15527     }
15528
15529   /* If we're still considering a constructor, we have to see a `(',
15530      to begin the parameter-declaration-clause, followed by either a
15531      `)', an `...', or a decl-specifier.  We need to check for a
15532      type-specifier to avoid being fooled into thinking that:
15533
15534        S::S (f) (int);
15535
15536      is a constructor.  (It is actually a function named `f' that
15537      takes one parameter (of type `int') and returns a value of type
15538      `S::S'.  */
15539   if (constructor_p
15540       && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
15541     {
15542       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
15543           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
15544           /* A parameter declaration begins with a decl-specifier,
15545              which is either the "attribute" keyword, a storage class
15546              specifier, or (usually) a type-specifier.  */
15547           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
15548         {
15549           tree type;
15550           tree pushed_scope = NULL_TREE;
15551           unsigned saved_num_template_parameter_lists;
15552
15553           /* Names appearing in the type-specifier should be looked up
15554              in the scope of the class.  */
15555           if (current_class_type)
15556             type = NULL_TREE;
15557           else
15558             {
15559               type = TREE_TYPE (type_decl);
15560               if (TREE_CODE (type) == TYPENAME_TYPE)
15561                 {
15562                   type = resolve_typename_type (type,
15563                                                 /*only_current_p=*/false);
15564                   if (type == error_mark_node)
15565                     {
15566                       cp_parser_abort_tentative_parse (parser);
15567                       return false;
15568                     }
15569                 }
15570               pushed_scope = push_scope (type);
15571             }
15572
15573           /* Inside the constructor parameter list, surrounding
15574              template-parameter-lists do not apply.  */
15575           saved_num_template_parameter_lists
15576             = parser->num_template_parameter_lists;
15577           parser->num_template_parameter_lists = 0;
15578
15579           /* Look for the type-specifier.  */
15580           cp_parser_type_specifier (parser,
15581                                     CP_PARSER_FLAGS_NONE,
15582                                     /*decl_specs=*/NULL,
15583                                     /*is_declarator=*/true,
15584                                     /*declares_class_or_enum=*/NULL,
15585                                     /*is_cv_qualifier=*/NULL);
15586
15587           parser->num_template_parameter_lists
15588             = saved_num_template_parameter_lists;
15589
15590           /* Leave the scope of the class.  */
15591           if (pushed_scope)
15592             pop_scope (pushed_scope);
15593
15594           constructor_p = !cp_parser_error_occurred (parser);
15595         }
15596     }
15597   else
15598     constructor_p = false;
15599   /* We did not really want to consume any tokens.  */
15600   cp_parser_abort_tentative_parse (parser);
15601
15602   return constructor_p;
15603 }
15604
15605 /* Parse the definition of the function given by the DECL_SPECIFIERS,
15606    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
15607    they must be performed once we are in the scope of the function.
15608
15609    Returns the function defined.  */
15610
15611 static tree
15612 cp_parser_function_definition_from_specifiers_and_declarator
15613   (cp_parser* parser,
15614    cp_decl_specifier_seq *decl_specifiers,
15615    tree attributes,
15616    const cp_declarator *declarator)
15617 {
15618   tree fn;
15619   bool success_p;
15620
15621   /* Begin the function-definition.  */
15622   success_p = start_function (decl_specifiers, declarator, attributes);
15623
15624   /* The things we're about to see are not directly qualified by any
15625      template headers we've seen thus far.  */
15626   reset_specialization ();
15627
15628   /* If there were names looked up in the decl-specifier-seq that we
15629      did not check, check them now.  We must wait until we are in the
15630      scope of the function to perform the checks, since the function
15631      might be a friend.  */
15632   perform_deferred_access_checks ();
15633
15634   if (!success_p)
15635     {
15636       /* Skip the entire function.  */
15637       cp_parser_skip_to_end_of_block_or_statement (parser);
15638       fn = error_mark_node;
15639     }
15640   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
15641     {
15642       /* Seen already, skip it.  An error message has already been output.  */
15643       cp_parser_skip_to_end_of_block_or_statement (parser);
15644       fn = current_function_decl;
15645       current_function_decl = NULL_TREE;
15646       /* If this is a function from a class, pop the nested class.  */
15647       if (current_class_name)
15648         pop_nested_class ();
15649     }
15650   else
15651     fn = cp_parser_function_definition_after_declarator (parser,
15652                                                          /*inline_p=*/false);
15653
15654   return fn;
15655 }
15656
15657 /* Parse the part of a function-definition that follows the
15658    declarator.  INLINE_P is TRUE iff this function is an inline
15659    function defined with a class-specifier.
15660
15661    Returns the function defined.  */
15662
15663 static tree
15664 cp_parser_function_definition_after_declarator (cp_parser* parser,
15665                                                 bool inline_p)
15666 {
15667   tree fn;
15668   bool ctor_initializer_p = false;
15669   bool saved_in_unbraced_linkage_specification_p;
15670   bool saved_in_function_body;
15671   unsigned saved_num_template_parameter_lists;
15672
15673   saved_in_function_body = parser->in_function_body;
15674   parser->in_function_body = true;
15675   /* If the next token is `return', then the code may be trying to
15676      make use of the "named return value" extension that G++ used to
15677      support.  */
15678   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
15679     {
15680       /* Consume the `return' keyword.  */
15681       cp_lexer_consume_token (parser->lexer);
15682       /* Look for the identifier that indicates what value is to be
15683          returned.  */
15684       cp_parser_identifier (parser);
15685       /* Issue an error message.  */
15686       error ("named return values are no longer supported");
15687       /* Skip tokens until we reach the start of the function body.  */
15688       while (true)
15689         {
15690           cp_token *token = cp_lexer_peek_token (parser->lexer);
15691           if (token->type == CPP_OPEN_BRACE
15692               || token->type == CPP_EOF
15693               || token->type == CPP_PRAGMA_EOL)
15694             break;
15695           cp_lexer_consume_token (parser->lexer);
15696         }
15697     }
15698   /* The `extern' in `extern "C" void f () { ... }' does not apply to
15699      anything declared inside `f'.  */
15700   saved_in_unbraced_linkage_specification_p
15701     = parser->in_unbraced_linkage_specification_p;
15702   parser->in_unbraced_linkage_specification_p = false;
15703   /* Inside the function, surrounding template-parameter-lists do not
15704      apply.  */
15705   saved_num_template_parameter_lists
15706     = parser->num_template_parameter_lists;
15707   parser->num_template_parameter_lists = 0;
15708   /* If the next token is `try', then we are looking at a
15709      function-try-block.  */
15710   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
15711     ctor_initializer_p = cp_parser_function_try_block (parser);
15712   /* A function-try-block includes the function-body, so we only do
15713      this next part if we're not processing a function-try-block.  */
15714   else
15715     ctor_initializer_p
15716       = cp_parser_ctor_initializer_opt_and_function_body (parser);
15717
15718   /* Finish the function.  */
15719   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
15720                         (inline_p ? 2 : 0));
15721   /* Generate code for it, if necessary.  */
15722   expand_or_defer_fn (fn);
15723   /* Restore the saved values.  */
15724   parser->in_unbraced_linkage_specification_p
15725     = saved_in_unbraced_linkage_specification_p;
15726   parser->num_template_parameter_lists
15727     = saved_num_template_parameter_lists;
15728   parser->in_function_body = saved_in_function_body;
15729
15730   return fn;
15731 }
15732
15733 /* Parse a template-declaration, assuming that the `export' (and
15734    `extern') keywords, if present, has already been scanned.  MEMBER_P
15735    is as for cp_parser_template_declaration.  */
15736
15737 static void
15738 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
15739 {
15740   tree decl = NULL_TREE;
15741   VEC (deferred_access_check,gc) *checks;
15742   tree parameter_list;
15743   bool friend_p = false;
15744   bool need_lang_pop;
15745
15746   /* Look for the `template' keyword.  */
15747   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
15748     return;
15749
15750   /* And the `<'.  */
15751   if (!cp_parser_require (parser, CPP_LESS, "`<'"))
15752     return;
15753   if (at_class_scope_p () && current_function_decl)
15754     {
15755       /* 14.5.2.2 [temp.mem]
15756
15757          A local class shall not have member templates.  */
15758       error ("invalid declaration of member template in local class");
15759       cp_parser_skip_to_end_of_block_or_statement (parser);
15760       return;
15761     }
15762   /* [temp]
15763
15764      A template ... shall not have C linkage.  */
15765   if (current_lang_name == lang_name_c)
15766     {
15767       error ("template with C linkage");
15768       /* Give it C++ linkage to avoid confusing other parts of the
15769          front end.  */
15770       push_lang_context (lang_name_cplusplus);
15771       need_lang_pop = true;
15772     }
15773   else
15774     need_lang_pop = false;
15775
15776   /* We cannot perform access checks on the template parameter
15777      declarations until we know what is being declared, just as we
15778      cannot check the decl-specifier list.  */
15779   push_deferring_access_checks (dk_deferred);
15780
15781   /* If the next token is `>', then we have an invalid
15782      specialization.  Rather than complain about an invalid template
15783      parameter, issue an error message here.  */
15784   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15785     {
15786       cp_parser_error (parser, "invalid explicit specialization");
15787       begin_specialization ();
15788       parameter_list = NULL_TREE;
15789     }
15790   else
15791     /* Parse the template parameters.  */
15792     parameter_list = cp_parser_template_parameter_list (parser);
15793
15794   /* Get the deferred access checks from the parameter list.  These
15795      will be checked once we know what is being declared, as for a
15796      member template the checks must be performed in the scope of the
15797      class containing the member.  */
15798   checks = get_deferred_access_checks ();
15799
15800   /* Look for the `>'.  */
15801   cp_parser_skip_to_end_of_template_parameter_list (parser);
15802   /* We just processed one more parameter list.  */
15803   ++parser->num_template_parameter_lists;
15804   /* If the next token is `template', there are more template
15805      parameters.  */
15806   if (cp_lexer_next_token_is_keyword (parser->lexer,
15807                                       RID_TEMPLATE))
15808     cp_parser_template_declaration_after_export (parser, member_p);
15809   else
15810     {
15811       /* There are no access checks when parsing a template, as we do not
15812          know if a specialization will be a friend.  */
15813       push_deferring_access_checks (dk_no_check);
15814       decl = cp_parser_single_declaration (parser,
15815                                            checks,
15816                                            member_p,
15817                                            &friend_p);
15818       pop_deferring_access_checks ();
15819
15820       /* If this is a member template declaration, let the front
15821          end know.  */
15822       if (member_p && !friend_p && decl)
15823         {
15824           if (TREE_CODE (decl) == TYPE_DECL)
15825             cp_parser_check_access_in_redeclaration (decl);
15826
15827           decl = finish_member_template_decl (decl);
15828         }
15829       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
15830         make_friend_class (current_class_type, TREE_TYPE (decl),
15831                            /*complain=*/true);
15832     }
15833   /* We are done with the current parameter list.  */
15834   --parser->num_template_parameter_lists;
15835
15836   pop_deferring_access_checks ();
15837
15838   /* Finish up.  */
15839   finish_template_decl (parameter_list);
15840
15841   /* Register member declarations.  */
15842   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
15843     finish_member_declaration (decl);
15844   /* For the erroneous case of a template with C linkage, we pushed an
15845      implicit C++ linkage scope; exit that scope now.  */
15846   if (need_lang_pop)
15847     pop_lang_context ();
15848   /* If DECL is a function template, we must return to parse it later.
15849      (Even though there is no definition, there might be default
15850      arguments that need handling.)  */
15851   if (member_p && decl
15852       && (TREE_CODE (decl) == FUNCTION_DECL
15853           || DECL_FUNCTION_TEMPLATE_P (decl)))
15854     TREE_VALUE (parser->unparsed_functions_queues)
15855       = tree_cons (NULL_TREE, decl,
15856                    TREE_VALUE (parser->unparsed_functions_queues));
15857 }
15858
15859 /* Perform the deferred access checks from a template-parameter-list.
15860    CHECKS is a TREE_LIST of access checks, as returned by
15861    get_deferred_access_checks.  */
15862
15863 static void
15864 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
15865 {
15866   ++processing_template_parmlist;
15867   perform_access_checks (checks);
15868   --processing_template_parmlist;
15869 }
15870
15871 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
15872    `function-definition' sequence.  MEMBER_P is true, this declaration
15873    appears in a class scope.
15874
15875    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
15876    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
15877
15878 static tree
15879 cp_parser_single_declaration (cp_parser* parser,
15880                               VEC (deferred_access_check,gc)* checks,
15881                               bool member_p,
15882                               bool* friend_p)
15883 {
15884   int declares_class_or_enum;
15885   tree decl = NULL_TREE;
15886   cp_decl_specifier_seq decl_specifiers;
15887   bool function_definition_p = false;
15888
15889   /* This function is only used when processing a template
15890      declaration.  */
15891   gcc_assert (innermost_scope_kind () == sk_template_parms
15892               || innermost_scope_kind () == sk_template_spec);
15893
15894   /* Defer access checks until we know what is being declared.  */
15895   push_deferring_access_checks (dk_deferred);
15896
15897   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
15898      alternative.  */
15899   cp_parser_decl_specifier_seq (parser,
15900                                 CP_PARSER_FLAGS_OPTIONAL,
15901                                 &decl_specifiers,
15902                                 &declares_class_or_enum);
15903   if (friend_p)
15904     *friend_p = cp_parser_friend_p (&decl_specifiers);
15905
15906   /* There are no template typedefs.  */
15907   if (decl_specifiers.specs[(int) ds_typedef])
15908     {
15909       error ("template declaration of %qs", "typedef");
15910       decl = error_mark_node;
15911     }
15912
15913   /* Gather up the access checks that occurred the
15914      decl-specifier-seq.  */
15915   stop_deferring_access_checks ();
15916
15917   /* Check for the declaration of a template class.  */
15918   if (declares_class_or_enum)
15919     {
15920       if (cp_parser_declares_only_class_p (parser))
15921         {
15922           decl = shadow_tag (&decl_specifiers);
15923
15924           /* In this case:
15925
15926                struct C {
15927                  friend template <typename T> struct A<T>::B;
15928                };
15929
15930              A<T>::B will be represented by a TYPENAME_TYPE, and
15931              therefore not recognized by shadow_tag.  */
15932           if (friend_p && *friend_p
15933               && !decl
15934               && decl_specifiers.type
15935               && TYPE_P (decl_specifiers.type))
15936             decl = decl_specifiers.type;
15937
15938           if (decl && decl != error_mark_node)
15939             decl = TYPE_NAME (decl);
15940           else
15941             decl = error_mark_node;
15942
15943           /* Perform access checks for template parameters.  */
15944           cp_parser_perform_template_parameter_access_checks (checks);
15945         }
15946     }
15947   /* If it's not a template class, try for a template function.  If
15948      the next token is a `;', then this declaration does not declare
15949      anything.  But, if there were errors in the decl-specifiers, then
15950      the error might well have come from an attempted class-specifier.
15951      In that case, there's no need to warn about a missing declarator.  */
15952   if (!decl
15953       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
15954           || decl_specifiers.type != error_mark_node))
15955     decl = cp_parser_init_declarator (parser,
15956                                       &decl_specifiers,
15957                                       checks,
15958                                       /*function_definition_allowed_p=*/true,
15959                                       member_p,
15960                                       declares_class_or_enum,
15961                                       &function_definition_p);
15962
15963   pop_deferring_access_checks ();
15964
15965   /* Clear any current qualification; whatever comes next is the start
15966      of something new.  */
15967   parser->scope = NULL_TREE;
15968   parser->qualifying_scope = NULL_TREE;
15969   parser->object_scope = NULL_TREE;
15970   /* Look for a trailing `;' after the declaration.  */
15971   if (!function_definition_p
15972       && (decl == error_mark_node
15973           || !cp_parser_require (parser, CPP_SEMICOLON, "`;'")))
15974     cp_parser_skip_to_end_of_block_or_statement (parser);
15975
15976   return decl;
15977 }
15978
15979 /* Parse a cast-expression that is not the operand of a unary "&".  */
15980
15981 static tree
15982 cp_parser_simple_cast_expression (cp_parser *parser)
15983 {
15984   return cp_parser_cast_expression (parser, /*address_p=*/false,
15985                                     /*cast_p=*/false);
15986 }
15987
15988 /* Parse a functional cast to TYPE.  Returns an expression
15989    representing the cast.  */
15990
15991 static tree
15992 cp_parser_functional_cast (cp_parser* parser, tree type)
15993 {
15994   tree expression_list;
15995   tree cast;
15996
15997   expression_list
15998     = cp_parser_parenthesized_expression_list (parser, false,
15999                                                /*cast_p=*/true,
16000                                                /*non_constant_p=*/NULL);
16001
16002   cast = build_functional_cast (type, expression_list);
16003   /* [expr.const]/1: In an integral constant expression "only type
16004      conversions to integral or enumeration type can be used".  */
16005   if (TREE_CODE (type) == TYPE_DECL)
16006     type = TREE_TYPE (type);
16007   if (cast != error_mark_node
16008       && !cast_valid_in_integral_constant_expression_p (type)
16009       && (cp_parser_non_integral_constant_expression
16010           (parser, "a call to a constructor")))
16011     return error_mark_node;
16012   return cast;
16013 }
16014
16015 /* Save the tokens that make up the body of a member function defined
16016    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
16017    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
16018    specifiers applied to the declaration.  Returns the FUNCTION_DECL
16019    for the member function.  */
16020
16021 static tree
16022 cp_parser_save_member_function_body (cp_parser* parser,
16023                                      cp_decl_specifier_seq *decl_specifiers,
16024                                      cp_declarator *declarator,
16025                                      tree attributes)
16026 {
16027   cp_token *first;
16028   cp_token *last;
16029   tree fn;
16030
16031   /* Create the function-declaration.  */
16032   fn = start_method (decl_specifiers, declarator, attributes);
16033   /* If something went badly wrong, bail out now.  */
16034   if (fn == error_mark_node)
16035     {
16036       /* If there's a function-body, skip it.  */
16037       if (cp_parser_token_starts_function_definition_p
16038           (cp_lexer_peek_token (parser->lexer)))
16039         cp_parser_skip_to_end_of_block_or_statement (parser);
16040       return error_mark_node;
16041     }
16042
16043   /* Remember it, if there default args to post process.  */
16044   cp_parser_save_default_args (parser, fn);
16045
16046   /* Save away the tokens that make up the body of the
16047      function.  */
16048   first = parser->lexer->next_token;
16049   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
16050   /* Handle function try blocks.  */
16051   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
16052     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
16053   last = parser->lexer->next_token;
16054
16055   /* Save away the inline definition; we will process it when the
16056      class is complete.  */
16057   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
16058   DECL_PENDING_INLINE_P (fn) = 1;
16059
16060   /* We need to know that this was defined in the class, so that
16061      friend templates are handled correctly.  */
16062   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
16063
16064   /* We're done with the inline definition.  */
16065   finish_method (fn);
16066
16067   /* Add FN to the queue of functions to be parsed later.  */
16068   TREE_VALUE (parser->unparsed_functions_queues)
16069     = tree_cons (NULL_TREE, fn,
16070                  TREE_VALUE (parser->unparsed_functions_queues));
16071
16072   return fn;
16073 }
16074
16075 /* Parse a template-argument-list, as well as the trailing ">" (but
16076    not the opening ">").  See cp_parser_template_argument_list for the
16077    return value.  */
16078
16079 static tree
16080 cp_parser_enclosed_template_argument_list (cp_parser* parser)
16081 {
16082   tree arguments;
16083   tree saved_scope;
16084   tree saved_qualifying_scope;
16085   tree saved_object_scope;
16086   bool saved_greater_than_is_operator_p;
16087   bool saved_skip_evaluation;
16088
16089   /* [temp.names]
16090
16091      When parsing a template-id, the first non-nested `>' is taken as
16092      the end of the template-argument-list rather than a greater-than
16093      operator.  */
16094   saved_greater_than_is_operator_p
16095     = parser->greater_than_is_operator_p;
16096   parser->greater_than_is_operator_p = false;
16097   /* Parsing the argument list may modify SCOPE, so we save it
16098      here.  */
16099   saved_scope = parser->scope;
16100   saved_qualifying_scope = parser->qualifying_scope;
16101   saved_object_scope = parser->object_scope;
16102   /* We need to evaluate the template arguments, even though this
16103      template-id may be nested within a "sizeof".  */
16104   saved_skip_evaluation = skip_evaluation;
16105   skip_evaluation = false;
16106   /* Parse the template-argument-list itself.  */
16107   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
16108     arguments = NULL_TREE;
16109   else
16110     arguments = cp_parser_template_argument_list (parser);
16111   /* Look for the `>' that ends the template-argument-list. If we find
16112      a '>>' instead, it's probably just a typo.  */
16113   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
16114     {
16115       if (!saved_greater_than_is_operator_p)
16116         {
16117           /* If we're in a nested template argument list, the '>>' has
16118             to be a typo for '> >'. We emit the error message, but we
16119             continue parsing and we push a '>' as next token, so that
16120             the argument list will be parsed correctly.  Note that the
16121             global source location is still on the token before the
16122             '>>', so we need to say explicitly where we want it.  */
16123           cp_token *token = cp_lexer_peek_token (parser->lexer);
16124           error ("%H%<>>%> should be %<> >%> "
16125                  "within a nested template argument list",
16126                  &token->location);
16127
16128           /* ??? Proper recovery should terminate two levels of
16129              template argument list here.  */
16130           token->type = CPP_GREATER;
16131         }
16132       else
16133         {
16134           /* If this is not a nested template argument list, the '>>'
16135             is a typo for '>'. Emit an error message and continue.
16136             Same deal about the token location, but here we can get it
16137             right by consuming the '>>' before issuing the diagnostic.  */
16138           cp_lexer_consume_token (parser->lexer);
16139           error ("spurious %<>>%>, use %<>%> to terminate "
16140                  "a template argument list");
16141         }
16142     }
16143   else
16144     cp_parser_skip_to_end_of_template_parameter_list (parser);
16145   /* The `>' token might be a greater-than operator again now.  */
16146   parser->greater_than_is_operator_p
16147     = saved_greater_than_is_operator_p;
16148   /* Restore the SAVED_SCOPE.  */
16149   parser->scope = saved_scope;
16150   parser->qualifying_scope = saved_qualifying_scope;
16151   parser->object_scope = saved_object_scope;
16152   skip_evaluation = saved_skip_evaluation;
16153
16154   return arguments;
16155 }
16156
16157 /* MEMBER_FUNCTION is a member function, or a friend.  If default
16158    arguments, or the body of the function have not yet been parsed,
16159    parse them now.  */
16160
16161 static void
16162 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
16163 {
16164   /* If this member is a template, get the underlying
16165      FUNCTION_DECL.  */
16166   if (DECL_FUNCTION_TEMPLATE_P (member_function))
16167     member_function = DECL_TEMPLATE_RESULT (member_function);
16168
16169   /* There should not be any class definitions in progress at this
16170      point; the bodies of members are only parsed outside of all class
16171      definitions.  */
16172   gcc_assert (parser->num_classes_being_defined == 0);
16173   /* While we're parsing the member functions we might encounter more
16174      classes.  We want to handle them right away, but we don't want
16175      them getting mixed up with functions that are currently in the
16176      queue.  */
16177   parser->unparsed_functions_queues
16178     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16179
16180   /* Make sure that any template parameters are in scope.  */
16181   maybe_begin_member_template_processing (member_function);
16182
16183   /* If the body of the function has not yet been parsed, parse it
16184      now.  */
16185   if (DECL_PENDING_INLINE_P (member_function))
16186     {
16187       tree function_scope;
16188       cp_token_cache *tokens;
16189
16190       /* The function is no longer pending; we are processing it.  */
16191       tokens = DECL_PENDING_INLINE_INFO (member_function);
16192       DECL_PENDING_INLINE_INFO (member_function) = NULL;
16193       DECL_PENDING_INLINE_P (member_function) = 0;
16194
16195       /* If this is a local class, enter the scope of the containing
16196          function.  */
16197       function_scope = current_function_decl;
16198       if (function_scope)
16199         push_function_context_to (function_scope);
16200
16201
16202       /* Push the body of the function onto the lexer stack.  */
16203       cp_parser_push_lexer_for_tokens (parser, tokens);
16204
16205       /* Let the front end know that we going to be defining this
16206          function.  */
16207       start_preparsed_function (member_function, NULL_TREE,
16208                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
16209
16210       /* Don't do access checking if it is a templated function.  */
16211       if (processing_template_decl)
16212         push_deferring_access_checks (dk_no_check);
16213
16214       /* Now, parse the body of the function.  */
16215       cp_parser_function_definition_after_declarator (parser,
16216                                                       /*inline_p=*/true);
16217
16218       if (processing_template_decl)
16219         pop_deferring_access_checks ();
16220
16221       /* Leave the scope of the containing function.  */
16222       if (function_scope)
16223         pop_function_context_from (function_scope);
16224       cp_parser_pop_lexer (parser);
16225     }
16226
16227   /* Remove any template parameters from the symbol table.  */
16228   maybe_end_member_template_processing ();
16229
16230   /* Restore the queue.  */
16231   parser->unparsed_functions_queues
16232     = TREE_CHAIN (parser->unparsed_functions_queues);
16233 }
16234
16235 /* If DECL contains any default args, remember it on the unparsed
16236    functions queue.  */
16237
16238 static void
16239 cp_parser_save_default_args (cp_parser* parser, tree decl)
16240 {
16241   tree probe;
16242
16243   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
16244        probe;
16245        probe = TREE_CHAIN (probe))
16246     if (TREE_PURPOSE (probe))
16247       {
16248         TREE_PURPOSE (parser->unparsed_functions_queues)
16249           = tree_cons (current_class_type, decl,
16250                        TREE_PURPOSE (parser->unparsed_functions_queues));
16251         break;
16252       }
16253 }
16254
16255 /* FN is a FUNCTION_DECL which may contains a parameter with an
16256    unparsed DEFAULT_ARG.  Parse the default args now.  This function
16257    assumes that the current scope is the scope in which the default
16258    argument should be processed.  */
16259
16260 static void
16261 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
16262 {
16263   bool saved_local_variables_forbidden_p;
16264   tree parm;
16265
16266   /* While we're parsing the default args, we might (due to the
16267      statement expression extension) encounter more classes.  We want
16268      to handle them right away, but we don't want them getting mixed
16269      up with default args that are currently in the queue.  */
16270   parser->unparsed_functions_queues
16271     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16272
16273   /* Local variable names (and the `this' keyword) may not appear
16274      in a default argument.  */
16275   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
16276   parser->local_variables_forbidden_p = true;
16277
16278   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
16279        parm;
16280        parm = TREE_CHAIN (parm))
16281     {
16282       cp_token_cache *tokens;
16283       tree default_arg = TREE_PURPOSE (parm);
16284       tree parsed_arg;
16285       VEC(tree,gc) *insts;
16286       tree copy;
16287       unsigned ix;
16288
16289       if (!default_arg)
16290         continue;
16291
16292       if (TREE_CODE (default_arg) != DEFAULT_ARG)
16293         /* This can happen for a friend declaration for a function
16294            already declared with default arguments.  */
16295         continue;
16296
16297        /* Push the saved tokens for the default argument onto the parser's
16298           lexer stack.  */
16299       tokens = DEFARG_TOKENS (default_arg);
16300       cp_parser_push_lexer_for_tokens (parser, tokens);
16301
16302       /* Parse the assignment-expression.  */
16303       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false);
16304
16305       if (!processing_template_decl)
16306         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
16307
16308       TREE_PURPOSE (parm) = parsed_arg;
16309
16310       /* Update any instantiations we've already created.  */
16311       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
16312            VEC_iterate (tree, insts, ix, copy); ix++)
16313         TREE_PURPOSE (copy) = parsed_arg;
16314
16315       /* If the token stream has not been completely used up, then
16316          there was extra junk after the end of the default
16317          argument.  */
16318       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
16319         cp_parser_error (parser, "expected %<,%>");
16320
16321       /* Revert to the main lexer.  */
16322       cp_parser_pop_lexer (parser);
16323     }
16324
16325   /* Make sure no default arg is missing.  */
16326   check_default_args (fn);
16327
16328   /* Restore the state of local_variables_forbidden_p.  */
16329   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
16330
16331   /* Restore the queue.  */
16332   parser->unparsed_functions_queues
16333     = TREE_CHAIN (parser->unparsed_functions_queues);
16334 }
16335
16336 /* Parse the operand of `sizeof' (or a similar operator).  Returns
16337    either a TYPE or an expression, depending on the form of the
16338    input.  The KEYWORD indicates which kind of expression we have
16339    encountered.  */
16340
16341 static tree
16342 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
16343 {
16344   static const char *format;
16345   tree expr = NULL_TREE;
16346   const char *saved_message;
16347   bool saved_integral_constant_expression_p;
16348   bool saved_non_integral_constant_expression_p;
16349
16350   /* Initialize FORMAT the first time we get here.  */
16351   if (!format)
16352     format = "types may not be defined in '%s' expressions";
16353
16354   /* Types cannot be defined in a `sizeof' expression.  Save away the
16355      old message.  */
16356   saved_message = parser->type_definition_forbidden_message;
16357   /* And create the new one.  */
16358   parser->type_definition_forbidden_message
16359     = XNEWVEC (const char, strlen (format)
16360                + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
16361                + 1 /* `\0' */);
16362   sprintf ((char *) parser->type_definition_forbidden_message,
16363            format, IDENTIFIER_POINTER (ridpointers[keyword]));
16364
16365   /* The restrictions on constant-expressions do not apply inside
16366      sizeof expressions.  */
16367   saved_integral_constant_expression_p
16368     = parser->integral_constant_expression_p;
16369   saved_non_integral_constant_expression_p
16370     = parser->non_integral_constant_expression_p;
16371   parser->integral_constant_expression_p = false;
16372
16373   /* Do not actually evaluate the expression.  */
16374   ++skip_evaluation;
16375   /* If it's a `(', then we might be looking at the type-id
16376      construction.  */
16377   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
16378     {
16379       tree type;
16380       bool saved_in_type_id_in_expr_p;
16381
16382       /* We can't be sure yet whether we're looking at a type-id or an
16383          expression.  */
16384       cp_parser_parse_tentatively (parser);
16385       /* Consume the `('.  */
16386       cp_lexer_consume_token (parser->lexer);
16387       /* Parse the type-id.  */
16388       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
16389       parser->in_type_id_in_expr_p = true;
16390       type = cp_parser_type_id (parser);
16391       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
16392       /* Now, look for the trailing `)'.  */
16393       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16394       /* If all went well, then we're done.  */
16395       if (cp_parser_parse_definitely (parser))
16396         {
16397           cp_decl_specifier_seq decl_specs;
16398
16399           /* Build a trivial decl-specifier-seq.  */
16400           clear_decl_specs (&decl_specs);
16401           decl_specs.type = type;
16402
16403           /* Call grokdeclarator to figure out what type this is.  */
16404           expr = grokdeclarator (NULL,
16405                                  &decl_specs,
16406                                  TYPENAME,
16407                                  /*initialized=*/0,
16408                                  /*attrlist=*/NULL);
16409         }
16410     }
16411
16412   /* If the type-id production did not work out, then we must be
16413      looking at the unary-expression production.  */
16414   if (!expr)
16415     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
16416                                        /*cast_p=*/false);
16417   /* Go back to evaluating expressions.  */
16418   --skip_evaluation;
16419
16420   /* Free the message we created.  */
16421   free ((char *) parser->type_definition_forbidden_message);
16422   /* And restore the old one.  */
16423   parser->type_definition_forbidden_message = saved_message;
16424   parser->integral_constant_expression_p
16425     = saved_integral_constant_expression_p;
16426   parser->non_integral_constant_expression_p
16427     = saved_non_integral_constant_expression_p;
16428
16429   return expr;
16430 }
16431
16432 /* If the current declaration has no declarator, return true.  */
16433
16434 static bool
16435 cp_parser_declares_only_class_p (cp_parser *parser)
16436 {
16437   /* If the next token is a `;' or a `,' then there is no
16438      declarator.  */
16439   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16440           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
16441 }
16442
16443 /* Update the DECL_SPECS to reflect the storage class indicated by
16444    KEYWORD.  */
16445
16446 static void
16447 cp_parser_set_storage_class (cp_parser *parser,
16448                              cp_decl_specifier_seq *decl_specs,
16449                              enum rid keyword)
16450 {
16451   cp_storage_class storage_class;
16452
16453   if (parser->in_unbraced_linkage_specification_p)
16454     {
16455       error ("invalid use of %qD in linkage specification",
16456              ridpointers[keyword]);
16457       return;
16458     }
16459   else if (decl_specs->storage_class != sc_none)
16460     {
16461       decl_specs->conflicting_specifiers_p = true;
16462       return;
16463     }
16464
16465   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
16466       && decl_specs->specs[(int) ds_thread])
16467     {
16468       error ("%<__thread%> before %qD", ridpointers[keyword]);
16469       decl_specs->specs[(int) ds_thread] = 0;
16470     }
16471
16472   switch (keyword)
16473     {
16474     case RID_AUTO:
16475       storage_class = sc_auto;
16476       break;
16477     case RID_REGISTER:
16478       storage_class = sc_register;
16479       break;
16480     case RID_STATIC:
16481       storage_class = sc_static;
16482       break;
16483     case RID_EXTERN:
16484       storage_class = sc_extern;
16485       break;
16486     case RID_MUTABLE:
16487       storage_class = sc_mutable;
16488       break;
16489     default:
16490       gcc_unreachable ();
16491     }
16492   decl_specs->storage_class = storage_class;
16493
16494   /* A storage class specifier cannot be applied alongside a typedef 
16495      specifier. If there is a typedef specifier present then set 
16496      conflicting_specifiers_p which will trigger an error later
16497      on in grokdeclarator. */
16498   if (decl_specs->specs[(int)ds_typedef])
16499     decl_specs->conflicting_specifiers_p = true;
16500 }
16501
16502 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
16503    is true, the type is a user-defined type; otherwise it is a
16504    built-in type specified by a keyword.  */
16505
16506 static void
16507 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
16508                               tree type_spec,
16509                               bool user_defined_p)
16510 {
16511   decl_specs->any_specifiers_p = true;
16512
16513   /* If the user tries to redeclare bool or wchar_t (with, for
16514      example, in "typedef int wchar_t;") we remember that this is what
16515      happened.  In system headers, we ignore these declarations so
16516      that G++ can work with system headers that are not C++-safe.  */
16517   if (decl_specs->specs[(int) ds_typedef]
16518       && !user_defined_p
16519       && (type_spec == boolean_type_node
16520           || type_spec == wchar_type_node)
16521       && (decl_specs->type
16522           || decl_specs->specs[(int) ds_long]
16523           || decl_specs->specs[(int) ds_short]
16524           || decl_specs->specs[(int) ds_unsigned]
16525           || decl_specs->specs[(int) ds_signed]))
16526     {
16527       decl_specs->redefined_builtin_type = type_spec;
16528       if (!decl_specs->type)
16529         {
16530           decl_specs->type = type_spec;
16531           decl_specs->user_defined_type_p = false;
16532         }
16533     }
16534   else if (decl_specs->type)
16535     decl_specs->multiple_types_p = true;
16536   else
16537     {
16538       decl_specs->type = type_spec;
16539       decl_specs->user_defined_type_p = user_defined_p;
16540       decl_specs->redefined_builtin_type = NULL_TREE;
16541     }
16542 }
16543
16544 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
16545    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
16546
16547 static bool
16548 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
16549 {
16550   return decl_specifiers->specs[(int) ds_friend] != 0;
16551 }
16552
16553 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
16554    issue an error message indicating that TOKEN_DESC was expected.
16555
16556    Returns the token consumed, if the token had the appropriate type.
16557    Otherwise, returns NULL.  */
16558
16559 static cp_token *
16560 cp_parser_require (cp_parser* parser,
16561                    enum cpp_ttype type,
16562                    const char* token_desc)
16563 {
16564   if (cp_lexer_next_token_is (parser->lexer, type))
16565     return cp_lexer_consume_token (parser->lexer);
16566   else
16567     {
16568       /* Output the MESSAGE -- unless we're parsing tentatively.  */
16569       if (!cp_parser_simulate_error (parser))
16570         {
16571           char *message = concat ("expected ", token_desc, NULL);
16572           cp_parser_error (parser, message);
16573           free (message);
16574         }
16575       return NULL;
16576     }
16577 }
16578
16579 /* An error message is produced if the next token is not '>'.
16580    All further tokens are skipped until the desired token is
16581    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
16582
16583 static void
16584 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
16585 {
16586   /* Current level of '< ... >'.  */
16587   unsigned level = 0;
16588   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
16589   unsigned nesting_depth = 0;
16590
16591   /* Are we ready, yet?  If not, issue error message.  */
16592   if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
16593     return;
16594
16595   /* Skip tokens until the desired token is found.  */
16596   while (true)
16597     {
16598       /* Peek at the next token.  */
16599       switch (cp_lexer_peek_token (parser->lexer)->type)
16600         {
16601         case CPP_LESS:
16602           if (!nesting_depth)
16603             ++level;
16604           break;
16605
16606         case CPP_GREATER:
16607           if (!nesting_depth && level-- == 0)
16608             {
16609               /* We've reached the token we want, consume it and stop.  */
16610               cp_lexer_consume_token (parser->lexer);
16611               return;
16612             }
16613           break;
16614
16615         case CPP_OPEN_PAREN:
16616         case CPP_OPEN_SQUARE:
16617           ++nesting_depth;
16618           break;
16619
16620         case CPP_CLOSE_PAREN:
16621         case CPP_CLOSE_SQUARE:
16622           if (nesting_depth-- == 0)
16623             return;
16624           break;
16625
16626         case CPP_EOF:
16627         case CPP_PRAGMA_EOL:
16628         case CPP_SEMICOLON:
16629         case CPP_OPEN_BRACE:
16630         case CPP_CLOSE_BRACE:
16631           /* The '>' was probably forgotten, don't look further.  */
16632           return;
16633
16634         default:
16635           break;
16636         }
16637
16638       /* Consume this token.  */
16639       cp_lexer_consume_token (parser->lexer);
16640     }
16641 }
16642
16643 /* If the next token is the indicated keyword, consume it.  Otherwise,
16644    issue an error message indicating that TOKEN_DESC was expected.
16645
16646    Returns the token consumed, if the token had the appropriate type.
16647    Otherwise, returns NULL.  */
16648
16649 static cp_token *
16650 cp_parser_require_keyword (cp_parser* parser,
16651                            enum rid keyword,
16652                            const char* token_desc)
16653 {
16654   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
16655
16656   if (token && token->keyword != keyword)
16657     {
16658       dyn_string_t error_msg;
16659
16660       /* Format the error message.  */
16661       error_msg = dyn_string_new (0);
16662       dyn_string_append_cstr (error_msg, "expected ");
16663       dyn_string_append_cstr (error_msg, token_desc);
16664       cp_parser_error (parser, error_msg->s);
16665       dyn_string_delete (error_msg);
16666       return NULL;
16667     }
16668
16669   return token;
16670 }
16671
16672 /* Returns TRUE iff TOKEN is a token that can begin the body of a
16673    function-definition.  */
16674
16675 static bool
16676 cp_parser_token_starts_function_definition_p (cp_token* token)
16677 {
16678   return (/* An ordinary function-body begins with an `{'.  */
16679           token->type == CPP_OPEN_BRACE
16680           /* A ctor-initializer begins with a `:'.  */
16681           || token->type == CPP_COLON
16682           /* A function-try-block begins with `try'.  */
16683           || token->keyword == RID_TRY
16684           /* The named return value extension begins with `return'.  */
16685           || token->keyword == RID_RETURN);
16686 }
16687
16688 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
16689    definition.  */
16690
16691 static bool
16692 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
16693 {
16694   cp_token *token;
16695
16696   token = cp_lexer_peek_token (parser->lexer);
16697   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
16698 }
16699
16700 /* Returns TRUE iff the next token is the "," or ">" ending a
16701    template-argument.  */
16702
16703 static bool
16704 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
16705 {
16706   cp_token *token;
16707
16708   token = cp_lexer_peek_token (parser->lexer);
16709   return (token->type == CPP_COMMA || token->type == CPP_GREATER);
16710 }
16711
16712 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
16713    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
16714
16715 static bool
16716 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
16717                                                      size_t n)
16718 {
16719   cp_token *token;
16720
16721   token = cp_lexer_peek_nth_token (parser->lexer, n);
16722   if (token->type == CPP_LESS)
16723     return true;
16724   /* Check for the sequence `<::' in the original code. It would be lexed as
16725      `[:', where `[' is a digraph, and there is no whitespace before
16726      `:'.  */
16727   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
16728     {
16729       cp_token *token2;
16730       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
16731       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
16732         return true;
16733     }
16734   return false;
16735 }
16736
16737 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
16738    or none_type otherwise.  */
16739
16740 static enum tag_types
16741 cp_parser_token_is_class_key (cp_token* token)
16742 {
16743   switch (token->keyword)
16744     {
16745     case RID_CLASS:
16746       return class_type;
16747     case RID_STRUCT:
16748       return record_type;
16749     case RID_UNION:
16750       return union_type;
16751
16752     default:
16753       return none_type;
16754     }
16755 }
16756
16757 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
16758
16759 static void
16760 cp_parser_check_class_key (enum tag_types class_key, tree type)
16761 {
16762   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
16763     pedwarn ("%qs tag used in naming %q#T",
16764             class_key == union_type ? "union"
16765              : class_key == record_type ? "struct" : "class",
16766              type);
16767 }
16768
16769 /* Issue an error message if DECL is redeclared with different
16770    access than its original declaration [class.access.spec/3].
16771    This applies to nested classes and nested class templates.
16772    [class.mem/1].  */
16773
16774 static void
16775 cp_parser_check_access_in_redeclaration (tree decl)
16776 {
16777   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
16778     return;
16779
16780   if ((TREE_PRIVATE (decl)
16781        != (current_access_specifier == access_private_node))
16782       || (TREE_PROTECTED (decl)
16783           != (current_access_specifier == access_protected_node)))
16784     error ("%qD redeclared with different access", decl);
16785 }
16786
16787 /* Look for the `template' keyword, as a syntactic disambiguator.
16788    Return TRUE iff it is present, in which case it will be
16789    consumed.  */
16790
16791 static bool
16792 cp_parser_optional_template_keyword (cp_parser *parser)
16793 {
16794   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
16795     {
16796       /* The `template' keyword can only be used within templates;
16797          outside templates the parser can always figure out what is a
16798          template and what is not.  */
16799       if (!processing_template_decl)
16800         {
16801           error ("%<template%> (as a disambiguator) is only allowed "
16802                  "within templates");
16803           /* If this part of the token stream is rescanned, the same
16804              error message would be generated.  So, we purge the token
16805              from the stream.  */
16806           cp_lexer_purge_token (parser->lexer);
16807           return false;
16808         }
16809       else
16810         {
16811           /* Consume the `template' keyword.  */
16812           cp_lexer_consume_token (parser->lexer);
16813           return true;
16814         }
16815     }
16816
16817   return false;
16818 }
16819
16820 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
16821    set PARSER->SCOPE, and perform other related actions.  */
16822
16823 static void
16824 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
16825 {
16826   int i;
16827   struct tree_check *check_value;
16828   deferred_access_check *chk;
16829   VEC (deferred_access_check,gc) *checks;
16830
16831   /* Get the stored value.  */
16832   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
16833   /* Perform any access checks that were deferred.  */
16834   checks = check_value->checks;
16835   if (checks)
16836     {
16837       for (i = 0 ;
16838            VEC_iterate (deferred_access_check, checks, i, chk) ;
16839            ++i)
16840         {
16841           perform_or_defer_access_check (chk->binfo,
16842                                          chk->decl,
16843                                          chk->diag_decl);
16844         }
16845     }
16846   /* Set the scope from the stored value.  */
16847   parser->scope = check_value->value;
16848   parser->qualifying_scope = check_value->qualifying_scope;
16849   parser->object_scope = NULL_TREE;
16850 }
16851
16852 /* Consume tokens up through a non-nested END token.  */
16853
16854 static void
16855 cp_parser_cache_group (cp_parser *parser,
16856                        enum cpp_ttype end,
16857                        unsigned depth)
16858 {
16859   while (true)
16860     {
16861       cp_token *token;
16862
16863       /* Abort a parenthesized expression if we encounter a brace.  */
16864       if ((end == CPP_CLOSE_PAREN || depth == 0)
16865           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16866         return;
16867       /* If we've reached the end of the file, stop.  */
16868       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF)
16869           || (end != CPP_PRAGMA_EOL
16870               && cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL)))
16871         return;
16872       /* Consume the next token.  */
16873       token = cp_lexer_consume_token (parser->lexer);
16874       /* See if it starts a new group.  */
16875       if (token->type == CPP_OPEN_BRACE)
16876         {
16877           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
16878           if (depth == 0)
16879             return;
16880         }
16881       else if (token->type == CPP_OPEN_PAREN)
16882         cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
16883       else if (token->type == CPP_PRAGMA)
16884         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
16885       else if (token->type == end)
16886         return;
16887     }
16888 }
16889
16890 /* Begin parsing tentatively.  We always save tokens while parsing
16891    tentatively so that if the tentative parsing fails we can restore the
16892    tokens.  */
16893
16894 static void
16895 cp_parser_parse_tentatively (cp_parser* parser)
16896 {
16897   /* Enter a new parsing context.  */
16898   parser->context = cp_parser_context_new (parser->context);
16899   /* Begin saving tokens.  */
16900   cp_lexer_save_tokens (parser->lexer);
16901   /* In order to avoid repetitive access control error messages,
16902      access checks are queued up until we are no longer parsing
16903      tentatively.  */
16904   push_deferring_access_checks (dk_deferred);
16905 }
16906
16907 /* Commit to the currently active tentative parse.  */
16908
16909 static void
16910 cp_parser_commit_to_tentative_parse (cp_parser* parser)
16911 {
16912   cp_parser_context *context;
16913   cp_lexer *lexer;
16914
16915   /* Mark all of the levels as committed.  */
16916   lexer = parser->lexer;
16917   for (context = parser->context; context->next; context = context->next)
16918     {
16919       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
16920         break;
16921       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
16922       while (!cp_lexer_saving_tokens (lexer))
16923         lexer = lexer->next;
16924       cp_lexer_commit_tokens (lexer);
16925     }
16926 }
16927
16928 /* Abort the currently active tentative parse.  All consumed tokens
16929    will be rolled back, and no diagnostics will be issued.  */
16930
16931 static void
16932 cp_parser_abort_tentative_parse (cp_parser* parser)
16933 {
16934   cp_parser_simulate_error (parser);
16935   /* Now, pretend that we want to see if the construct was
16936      successfully parsed.  */
16937   cp_parser_parse_definitely (parser);
16938 }
16939
16940 /* Stop parsing tentatively.  If a parse error has occurred, restore the
16941    token stream.  Otherwise, commit to the tokens we have consumed.
16942    Returns true if no error occurred; false otherwise.  */
16943
16944 static bool
16945 cp_parser_parse_definitely (cp_parser* parser)
16946 {
16947   bool error_occurred;
16948   cp_parser_context *context;
16949
16950   /* Remember whether or not an error occurred, since we are about to
16951      destroy that information.  */
16952   error_occurred = cp_parser_error_occurred (parser);
16953   /* Remove the topmost context from the stack.  */
16954   context = parser->context;
16955   parser->context = context->next;
16956   /* If no parse errors occurred, commit to the tentative parse.  */
16957   if (!error_occurred)
16958     {
16959       /* Commit to the tokens read tentatively, unless that was
16960          already done.  */
16961       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
16962         cp_lexer_commit_tokens (parser->lexer);
16963
16964       pop_to_parent_deferring_access_checks ();
16965     }
16966   /* Otherwise, if errors occurred, roll back our state so that things
16967      are just as they were before we began the tentative parse.  */
16968   else
16969     {
16970       cp_lexer_rollback_tokens (parser->lexer);
16971       pop_deferring_access_checks ();
16972     }
16973   /* Add the context to the front of the free list.  */
16974   context->next = cp_parser_context_free_list;
16975   cp_parser_context_free_list = context;
16976
16977   return !error_occurred;
16978 }
16979
16980 /* Returns true if we are parsing tentatively and are not committed to
16981    this tentative parse.  */
16982
16983 static bool
16984 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
16985 {
16986   return (cp_parser_parsing_tentatively (parser)
16987           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
16988 }
16989
16990 /* Returns nonzero iff an error has occurred during the most recent
16991    tentative parse.  */
16992
16993 static bool
16994 cp_parser_error_occurred (cp_parser* parser)
16995 {
16996   return (cp_parser_parsing_tentatively (parser)
16997           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
16998 }
16999
17000 /* Returns nonzero if GNU extensions are allowed.  */
17001
17002 static bool
17003 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
17004 {
17005   return parser->allow_gnu_extensions_p;
17006 }
17007 \f
17008 /* Objective-C++ Productions */
17009
17010
17011 /* Parse an Objective-C expression, which feeds into a primary-expression
17012    above.
17013
17014    objc-expression:
17015      objc-message-expression
17016      objc-string-literal
17017      objc-encode-expression
17018      objc-protocol-expression
17019      objc-selector-expression
17020
17021   Returns a tree representation of the expression.  */
17022
17023 static tree
17024 cp_parser_objc_expression (cp_parser* parser)
17025 {
17026   /* Try to figure out what kind of declaration is present.  */
17027   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17028
17029   switch (kwd->type)
17030     {
17031     case CPP_OPEN_SQUARE:
17032       return cp_parser_objc_message_expression (parser);
17033
17034     case CPP_OBJC_STRING:
17035       kwd = cp_lexer_consume_token (parser->lexer);
17036       return objc_build_string_object (kwd->u.value);
17037
17038     case CPP_KEYWORD:
17039       switch (kwd->keyword)
17040         {
17041         case RID_AT_ENCODE:
17042           return cp_parser_objc_encode_expression (parser);
17043
17044         case RID_AT_PROTOCOL:
17045           return cp_parser_objc_protocol_expression (parser);
17046
17047         case RID_AT_SELECTOR:
17048           return cp_parser_objc_selector_expression (parser);
17049
17050         default:
17051           break;
17052         }
17053     default:
17054       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
17055       cp_parser_skip_to_end_of_block_or_statement (parser);
17056     }
17057
17058   return error_mark_node;
17059 }
17060
17061 /* Parse an Objective-C message expression.
17062
17063    objc-message-expression:
17064      [ objc-message-receiver objc-message-args ]
17065
17066    Returns a representation of an Objective-C message.  */
17067
17068 static tree
17069 cp_parser_objc_message_expression (cp_parser* parser)
17070 {
17071   tree receiver, messageargs;
17072
17073   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
17074   receiver = cp_parser_objc_message_receiver (parser);
17075   messageargs = cp_parser_objc_message_args (parser);
17076   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
17077
17078   return objc_build_message_expr (build_tree_list (receiver, messageargs));
17079 }
17080
17081 /* Parse an objc-message-receiver.
17082
17083    objc-message-receiver:
17084      expression
17085      simple-type-specifier
17086
17087   Returns a representation of the type or expression.  */
17088
17089 static tree
17090 cp_parser_objc_message_receiver (cp_parser* parser)
17091 {
17092   tree rcv;
17093
17094   /* An Objective-C message receiver may be either (1) a type
17095      or (2) an expression.  */
17096   cp_parser_parse_tentatively (parser);
17097   rcv = cp_parser_expression (parser, false);
17098
17099   if (cp_parser_parse_definitely (parser))
17100     return rcv;
17101
17102   rcv = cp_parser_simple_type_specifier (parser,
17103                                          /*decl_specs=*/NULL,
17104                                          CP_PARSER_FLAGS_NONE);
17105
17106   return objc_get_class_reference (rcv);
17107 }
17108
17109 /* Parse the arguments and selectors comprising an Objective-C message.
17110
17111    objc-message-args:
17112      objc-selector
17113      objc-selector-args
17114      objc-selector-args , objc-comma-args
17115
17116    objc-selector-args:
17117      objc-selector [opt] : assignment-expression
17118      objc-selector-args objc-selector [opt] : assignment-expression
17119
17120    objc-comma-args:
17121      assignment-expression
17122      objc-comma-args , assignment-expression
17123
17124    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
17125    selector arguments and TREE_VALUE containing a list of comma
17126    arguments.  */
17127
17128 static tree
17129 cp_parser_objc_message_args (cp_parser* parser)
17130 {
17131   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
17132   bool maybe_unary_selector_p = true;
17133   cp_token *token = cp_lexer_peek_token (parser->lexer);
17134
17135   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17136     {
17137       tree selector = NULL_TREE, arg;
17138
17139       if (token->type != CPP_COLON)
17140         selector = cp_parser_objc_selector (parser);
17141
17142       /* Detect if we have a unary selector.  */
17143       if (maybe_unary_selector_p
17144           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17145         return build_tree_list (selector, NULL_TREE);
17146
17147       maybe_unary_selector_p = false;
17148       cp_parser_require (parser, CPP_COLON, "`:'");
17149       arg = cp_parser_assignment_expression (parser, false);
17150
17151       sel_args
17152         = chainon (sel_args,
17153                    build_tree_list (selector, arg));
17154
17155       token = cp_lexer_peek_token (parser->lexer);
17156     }
17157
17158   /* Handle non-selector arguments, if any. */
17159   while (token->type == CPP_COMMA)
17160     {
17161       tree arg;
17162
17163       cp_lexer_consume_token (parser->lexer);
17164       arg = cp_parser_assignment_expression (parser, false);
17165
17166       addl_args
17167         = chainon (addl_args,
17168                    build_tree_list (NULL_TREE, arg));
17169
17170       token = cp_lexer_peek_token (parser->lexer);
17171     }
17172
17173   return build_tree_list (sel_args, addl_args);
17174 }
17175
17176 /* Parse an Objective-C encode expression.
17177
17178    objc-encode-expression:
17179      @encode objc-typename
17180
17181    Returns an encoded representation of the type argument.  */
17182
17183 static tree
17184 cp_parser_objc_encode_expression (cp_parser* parser)
17185 {
17186   tree type;
17187
17188   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
17189   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17190   type = complete_type (cp_parser_type_id (parser));
17191   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17192
17193   if (!type)
17194     {
17195       error ("%<@encode%> must specify a type as an argument");
17196       return error_mark_node;
17197     }
17198
17199   return objc_build_encode_expr (type);
17200 }
17201
17202 /* Parse an Objective-C @defs expression.  */
17203
17204 static tree
17205 cp_parser_objc_defs_expression (cp_parser *parser)
17206 {
17207   tree name;
17208
17209   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
17210   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17211   name = cp_parser_identifier (parser);
17212   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17213
17214   return objc_get_class_ivars (name);
17215 }
17216
17217 /* Parse an Objective-C protocol expression.
17218
17219   objc-protocol-expression:
17220     @protocol ( identifier )
17221
17222   Returns a representation of the protocol expression.  */
17223
17224 static tree
17225 cp_parser_objc_protocol_expression (cp_parser* parser)
17226 {
17227   tree proto;
17228
17229   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17230   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17231   proto = cp_parser_identifier (parser);
17232   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17233
17234   return objc_build_protocol_expr (proto);
17235 }
17236
17237 /* Parse an Objective-C selector expression.
17238
17239    objc-selector-expression:
17240      @selector ( objc-method-signature )
17241
17242    objc-method-signature:
17243      objc-selector
17244      objc-selector-seq
17245
17246    objc-selector-seq:
17247      objc-selector :
17248      objc-selector-seq objc-selector :
17249
17250   Returns a representation of the method selector.  */
17251
17252 static tree
17253 cp_parser_objc_selector_expression (cp_parser* parser)
17254 {
17255   tree sel_seq = NULL_TREE;
17256   bool maybe_unary_selector_p = true;
17257   cp_token *token;
17258
17259   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
17260   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17261   token = cp_lexer_peek_token (parser->lexer);
17262
17263   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
17264          || token->type == CPP_SCOPE)
17265     {
17266       tree selector = NULL_TREE;
17267
17268       if (token->type != CPP_COLON
17269           || token->type == CPP_SCOPE)
17270         selector = cp_parser_objc_selector (parser);
17271
17272       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
17273           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
17274         {
17275           /* Detect if we have a unary selector.  */
17276           if (maybe_unary_selector_p)
17277             {
17278               sel_seq = selector;
17279               goto finish_selector;
17280             }
17281           else
17282             {
17283               cp_parser_error (parser, "expected %<:%>");
17284             }
17285         }
17286       maybe_unary_selector_p = false;
17287       token = cp_lexer_consume_token (parser->lexer);
17288
17289       if (token->type == CPP_SCOPE)
17290         {
17291           sel_seq
17292             = chainon (sel_seq,
17293                        build_tree_list (selector, NULL_TREE));
17294           sel_seq
17295             = chainon (sel_seq,
17296                        build_tree_list (NULL_TREE, NULL_TREE));
17297         }
17298       else
17299         sel_seq
17300           = chainon (sel_seq,
17301                      build_tree_list (selector, NULL_TREE));
17302
17303       token = cp_lexer_peek_token (parser->lexer);
17304     }
17305
17306  finish_selector:
17307   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17308
17309   return objc_build_selector_expr (sel_seq);
17310 }
17311
17312 /* Parse a list of identifiers.
17313
17314    objc-identifier-list:
17315      identifier
17316      objc-identifier-list , identifier
17317
17318    Returns a TREE_LIST of identifier nodes.  */
17319
17320 static tree
17321 cp_parser_objc_identifier_list (cp_parser* parser)
17322 {
17323   tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
17324   cp_token *sep = cp_lexer_peek_token (parser->lexer);
17325
17326   while (sep->type == CPP_COMMA)
17327     {
17328       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17329       list = chainon (list,
17330                       build_tree_list (NULL_TREE,
17331                                        cp_parser_identifier (parser)));
17332       sep = cp_lexer_peek_token (parser->lexer);
17333     }
17334
17335   return list;
17336 }
17337
17338 /* Parse an Objective-C alias declaration.
17339
17340    objc-alias-declaration:
17341      @compatibility_alias identifier identifier ;
17342
17343    This function registers the alias mapping with the Objective-C front-end.
17344    It returns nothing.  */
17345
17346 static void
17347 cp_parser_objc_alias_declaration (cp_parser* parser)
17348 {
17349   tree alias, orig;
17350
17351   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
17352   alias = cp_parser_identifier (parser);
17353   orig = cp_parser_identifier (parser);
17354   objc_declare_alias (alias, orig);
17355   cp_parser_consume_semicolon_at_end_of_statement (parser);
17356 }
17357
17358 /* Parse an Objective-C class forward-declaration.
17359
17360    objc-class-declaration:
17361      @class objc-identifier-list ;
17362
17363    The function registers the forward declarations with the Objective-C
17364    front-end.  It returns nothing.  */
17365
17366 static void
17367 cp_parser_objc_class_declaration (cp_parser* parser)
17368 {
17369   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
17370   objc_declare_class (cp_parser_objc_identifier_list (parser));
17371   cp_parser_consume_semicolon_at_end_of_statement (parser);
17372 }
17373
17374 /* Parse a list of Objective-C protocol references.
17375
17376    objc-protocol-refs-opt:
17377      objc-protocol-refs [opt]
17378
17379    objc-protocol-refs:
17380      < objc-identifier-list >
17381
17382    Returns a TREE_LIST of identifiers, if any.  */
17383
17384 static tree
17385 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
17386 {
17387   tree protorefs = NULL_TREE;
17388
17389   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
17390     {
17391       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
17392       protorefs = cp_parser_objc_identifier_list (parser);
17393       cp_parser_require (parser, CPP_GREATER, "`>'");
17394     }
17395
17396   return protorefs;
17397 }
17398
17399 /* Parse a Objective-C visibility specification.  */
17400
17401 static void
17402 cp_parser_objc_visibility_spec (cp_parser* parser)
17403 {
17404   cp_token *vis = cp_lexer_peek_token (parser->lexer);
17405
17406   switch (vis->keyword)
17407     {
17408     case RID_AT_PRIVATE:
17409       objc_set_visibility (2);
17410       break;
17411     case RID_AT_PROTECTED:
17412       objc_set_visibility (0);
17413       break;
17414     case RID_AT_PUBLIC:
17415       objc_set_visibility (1);
17416       break;
17417     default:
17418       return;
17419     }
17420
17421   /* Eat '@private'/'@protected'/'@public'.  */
17422   cp_lexer_consume_token (parser->lexer);
17423 }
17424
17425 /* Parse an Objective-C method type.  */
17426
17427 static void
17428 cp_parser_objc_method_type (cp_parser* parser)
17429 {
17430   objc_set_method_type
17431    (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
17432     ? PLUS_EXPR
17433     : MINUS_EXPR);
17434 }
17435
17436 /* Parse an Objective-C protocol qualifier.  */
17437
17438 static tree
17439 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
17440 {
17441   tree quals = NULL_TREE, node;
17442   cp_token *token = cp_lexer_peek_token (parser->lexer);
17443
17444   node = token->u.value;
17445
17446   while (node && TREE_CODE (node) == IDENTIFIER_NODE
17447          && (node == ridpointers [(int) RID_IN]
17448              || node == ridpointers [(int) RID_OUT]
17449              || node == ridpointers [(int) RID_INOUT]
17450              || node == ridpointers [(int) RID_BYCOPY]
17451              || node == ridpointers [(int) RID_BYREF]
17452              || node == ridpointers [(int) RID_ONEWAY]))
17453     {
17454       quals = tree_cons (NULL_TREE, node, quals);
17455       cp_lexer_consume_token (parser->lexer);
17456       token = cp_lexer_peek_token (parser->lexer);
17457       node = token->u.value;
17458     }
17459
17460   return quals;
17461 }
17462
17463 /* Parse an Objective-C typename.  */
17464
17465 static tree
17466 cp_parser_objc_typename (cp_parser* parser)
17467 {
17468   tree typename = NULL_TREE;
17469
17470   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
17471     {
17472       tree proto_quals, cp_type = NULL_TREE;
17473
17474       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17475       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
17476
17477       /* An ObjC type name may consist of just protocol qualifiers, in which
17478          case the type shall default to 'id'.  */
17479       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
17480         cp_type = cp_parser_type_id (parser);
17481
17482       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17483       typename = build_tree_list (proto_quals, cp_type);
17484     }
17485
17486   return typename;
17487 }
17488
17489 /* Check to see if TYPE refers to an Objective-C selector name.  */
17490
17491 static bool
17492 cp_parser_objc_selector_p (enum cpp_ttype type)
17493 {
17494   return (type == CPP_NAME || type == CPP_KEYWORD
17495           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
17496           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
17497           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
17498           || type == CPP_XOR || type == CPP_XOR_EQ);
17499 }
17500
17501 /* Parse an Objective-C selector.  */
17502
17503 static tree
17504 cp_parser_objc_selector (cp_parser* parser)
17505 {
17506   cp_token *token = cp_lexer_consume_token (parser->lexer);
17507
17508   if (!cp_parser_objc_selector_p (token->type))
17509     {
17510       error ("invalid Objective-C++ selector name");
17511       return error_mark_node;
17512     }
17513
17514   /* C++ operator names are allowed to appear in ObjC selectors.  */
17515   switch (token->type)
17516     {
17517     case CPP_AND_AND: return get_identifier ("and");
17518     case CPP_AND_EQ: return get_identifier ("and_eq");
17519     case CPP_AND: return get_identifier ("bitand");
17520     case CPP_OR: return get_identifier ("bitor");
17521     case CPP_COMPL: return get_identifier ("compl");
17522     case CPP_NOT: return get_identifier ("not");
17523     case CPP_NOT_EQ: return get_identifier ("not_eq");
17524     case CPP_OR_OR: return get_identifier ("or");
17525     case CPP_OR_EQ: return get_identifier ("or_eq");
17526     case CPP_XOR: return get_identifier ("xor");
17527     case CPP_XOR_EQ: return get_identifier ("xor_eq");
17528     default: return token->u.value;
17529     }
17530 }
17531
17532 /* Parse an Objective-C params list.  */
17533
17534 static tree
17535 cp_parser_objc_method_keyword_params (cp_parser* parser)
17536 {
17537   tree params = NULL_TREE;
17538   bool maybe_unary_selector_p = true;
17539   cp_token *token = cp_lexer_peek_token (parser->lexer);
17540
17541   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17542     {
17543       tree selector = NULL_TREE, typename, identifier;
17544
17545       if (token->type != CPP_COLON)
17546         selector = cp_parser_objc_selector (parser);
17547
17548       /* Detect if we have a unary selector.  */
17549       if (maybe_unary_selector_p
17550           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17551         return selector;
17552
17553       maybe_unary_selector_p = false;
17554       cp_parser_require (parser, CPP_COLON, "`:'");
17555       typename = cp_parser_objc_typename (parser);
17556       identifier = cp_parser_identifier (parser);
17557
17558       params
17559         = chainon (params,
17560                    objc_build_keyword_decl (selector,
17561                                             typename,
17562                                             identifier));
17563
17564       token = cp_lexer_peek_token (parser->lexer);
17565     }
17566
17567   return params;
17568 }
17569
17570 /* Parse the non-keyword Objective-C params.  */
17571
17572 static tree
17573 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
17574 {
17575   tree params = make_node (TREE_LIST);
17576   cp_token *token = cp_lexer_peek_token (parser->lexer);
17577   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
17578
17579   while (token->type == CPP_COMMA)
17580     {
17581       cp_parameter_declarator *parmdecl;
17582       tree parm;
17583
17584       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17585       token = cp_lexer_peek_token (parser->lexer);
17586
17587       if (token->type == CPP_ELLIPSIS)
17588         {
17589           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
17590           *ellipsisp = true;
17591           break;
17592         }
17593
17594       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17595       parm = grokdeclarator (parmdecl->declarator,
17596                              &parmdecl->decl_specifiers,
17597                              PARM, /*initialized=*/0,
17598                              /*attrlist=*/NULL);
17599
17600       chainon (params, build_tree_list (NULL_TREE, parm));
17601       token = cp_lexer_peek_token (parser->lexer);
17602     }
17603
17604   return params;
17605 }
17606
17607 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
17608
17609 static void
17610 cp_parser_objc_interstitial_code (cp_parser* parser)
17611 {
17612   cp_token *token = cp_lexer_peek_token (parser->lexer);
17613
17614   /* If the next token is `extern' and the following token is a string
17615      literal, then we have a linkage specification.  */
17616   if (token->keyword == RID_EXTERN
17617       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
17618     cp_parser_linkage_specification (parser);
17619   /* Handle #pragma, if any.  */
17620   else if (token->type == CPP_PRAGMA)
17621     cp_parser_pragma (parser, pragma_external);
17622   /* Allow stray semicolons.  */
17623   else if (token->type == CPP_SEMICOLON)
17624     cp_lexer_consume_token (parser->lexer);
17625   /* Finally, try to parse a block-declaration, or a function-definition.  */
17626   else
17627     cp_parser_block_declaration (parser, /*statement_p=*/false);
17628 }
17629
17630 /* Parse a method signature.  */
17631
17632 static tree
17633 cp_parser_objc_method_signature (cp_parser* parser)
17634 {
17635   tree rettype, kwdparms, optparms;
17636   bool ellipsis = false;
17637
17638   cp_parser_objc_method_type (parser);
17639   rettype = cp_parser_objc_typename (parser);
17640   kwdparms = cp_parser_objc_method_keyword_params (parser);
17641   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
17642
17643   return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
17644 }
17645
17646 /* Pars an Objective-C method prototype list.  */
17647
17648 static void
17649 cp_parser_objc_method_prototype_list (cp_parser* parser)
17650 {
17651   cp_token *token = cp_lexer_peek_token (parser->lexer);
17652
17653   while (token->keyword != RID_AT_END)
17654     {
17655       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17656         {
17657           objc_add_method_declaration
17658            (cp_parser_objc_method_signature (parser));
17659           cp_parser_consume_semicolon_at_end_of_statement (parser);
17660         }
17661       else
17662         /* Allow for interspersed non-ObjC++ code.  */
17663         cp_parser_objc_interstitial_code (parser);
17664
17665       token = cp_lexer_peek_token (parser->lexer);
17666     }
17667
17668   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17669   objc_finish_interface ();
17670 }
17671
17672 /* Parse an Objective-C method definition list.  */
17673
17674 static void
17675 cp_parser_objc_method_definition_list (cp_parser* parser)
17676 {
17677   cp_token *token = cp_lexer_peek_token (parser->lexer);
17678
17679   while (token->keyword != RID_AT_END)
17680     {
17681       tree meth;
17682
17683       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17684         {
17685           push_deferring_access_checks (dk_deferred);
17686           objc_start_method_definition
17687            (cp_parser_objc_method_signature (parser));
17688
17689           /* For historical reasons, we accept an optional semicolon.  */
17690           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17691             cp_lexer_consume_token (parser->lexer);
17692
17693           perform_deferred_access_checks ();
17694           stop_deferring_access_checks ();
17695           meth = cp_parser_function_definition_after_declarator (parser,
17696                                                                  false);
17697           pop_deferring_access_checks ();
17698           objc_finish_method_definition (meth);
17699         }
17700       else
17701         /* Allow for interspersed non-ObjC++ code.  */
17702         cp_parser_objc_interstitial_code (parser);
17703
17704       token = cp_lexer_peek_token (parser->lexer);
17705     }
17706
17707   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17708   objc_finish_implementation ();
17709 }
17710
17711 /* Parse Objective-C ivars.  */
17712
17713 static void
17714 cp_parser_objc_class_ivars (cp_parser* parser)
17715 {
17716   cp_token *token = cp_lexer_peek_token (parser->lexer);
17717
17718   if (token->type != CPP_OPEN_BRACE)
17719     return;     /* No ivars specified.  */
17720
17721   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
17722   token = cp_lexer_peek_token (parser->lexer);
17723
17724   while (token->type != CPP_CLOSE_BRACE)
17725     {
17726       cp_decl_specifier_seq declspecs;
17727       int decl_class_or_enum_p;
17728       tree prefix_attributes;
17729
17730       cp_parser_objc_visibility_spec (parser);
17731
17732       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
17733         break;
17734
17735       cp_parser_decl_specifier_seq (parser,
17736                                     CP_PARSER_FLAGS_OPTIONAL,
17737                                     &declspecs,
17738                                     &decl_class_or_enum_p);
17739       prefix_attributes = declspecs.attributes;
17740       declspecs.attributes = NULL_TREE;
17741
17742       /* Keep going until we hit the `;' at the end of the
17743          declaration.  */
17744       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
17745         {
17746           tree width = NULL_TREE, attributes, first_attribute, decl;
17747           cp_declarator *declarator = NULL;
17748           int ctor_dtor_or_conv_p;
17749
17750           /* Check for a (possibly unnamed) bitfield declaration.  */
17751           token = cp_lexer_peek_token (parser->lexer);
17752           if (token->type == CPP_COLON)
17753             goto eat_colon;
17754
17755           if (token->type == CPP_NAME
17756               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
17757                   == CPP_COLON))
17758             {
17759               /* Get the name of the bitfield.  */
17760               declarator = make_id_declarator (NULL_TREE,
17761                                                cp_parser_identifier (parser),
17762                                                sfk_none);
17763
17764              eat_colon:
17765               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17766               /* Get the width of the bitfield.  */
17767               width
17768                 = cp_parser_constant_expression (parser,
17769                                                  /*allow_non_constant=*/false,
17770                                                  NULL);
17771             }
17772           else
17773             {
17774               /* Parse the declarator.  */
17775               declarator
17776                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
17777                                         &ctor_dtor_or_conv_p,
17778                                         /*parenthesized_p=*/NULL,
17779                                         /*member_p=*/false);
17780             }
17781
17782           /* Look for attributes that apply to the ivar.  */
17783           attributes = cp_parser_attributes_opt (parser);
17784           /* Remember which attributes are prefix attributes and
17785              which are not.  */
17786           first_attribute = attributes;
17787           /* Combine the attributes.  */
17788           attributes = chainon (prefix_attributes, attributes);
17789
17790           if (width)
17791             {
17792               /* Create the bitfield declaration.  */
17793               decl = grokbitfield (declarator, &declspecs, width);
17794               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
17795             }
17796           else
17797             decl = grokfield (declarator, &declspecs,
17798                               NULL_TREE, /*init_const_expr_p=*/false,
17799                               NULL_TREE, attributes);
17800
17801           /* Add the instance variable.  */
17802           objc_add_instance_variable (decl);
17803
17804           /* Reset PREFIX_ATTRIBUTES.  */
17805           while (attributes && TREE_CHAIN (attributes) != first_attribute)
17806             attributes = TREE_CHAIN (attributes);
17807           if (attributes)
17808             TREE_CHAIN (attributes) = NULL_TREE;
17809
17810           token = cp_lexer_peek_token (parser->lexer);
17811
17812           if (token->type == CPP_COMMA)
17813             {
17814               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17815               continue;
17816             }
17817           break;
17818         }
17819
17820       cp_parser_consume_semicolon_at_end_of_statement (parser);
17821       token = cp_lexer_peek_token (parser->lexer);
17822     }
17823
17824   cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
17825   /* For historical reasons, we accept an optional semicolon.  */
17826   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17827     cp_lexer_consume_token (parser->lexer);
17828 }
17829
17830 /* Parse an Objective-C protocol declaration.  */
17831
17832 static void
17833 cp_parser_objc_protocol_declaration (cp_parser* parser)
17834 {
17835   tree proto, protorefs;
17836   cp_token *tok;
17837
17838   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17839   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
17840     {
17841       error ("identifier expected after %<@protocol%>");
17842       goto finish;
17843     }
17844
17845   /* See if we have a forward declaration or a definition.  */
17846   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
17847
17848   /* Try a forward declaration first.  */
17849   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
17850     {
17851       objc_declare_protocols (cp_parser_objc_identifier_list (parser));
17852      finish:
17853       cp_parser_consume_semicolon_at_end_of_statement (parser);
17854     }
17855
17856   /* Ok, we got a full-fledged definition (or at least should).  */
17857   else
17858     {
17859       proto = cp_parser_identifier (parser);
17860       protorefs = cp_parser_objc_protocol_refs_opt (parser);
17861       objc_start_protocol (proto, protorefs);
17862       cp_parser_objc_method_prototype_list (parser);
17863     }
17864 }
17865
17866 /* Parse an Objective-C superclass or category.  */
17867
17868 static void
17869 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
17870                                                           tree *categ)
17871 {
17872   cp_token *next = cp_lexer_peek_token (parser->lexer);
17873
17874   *super = *categ = NULL_TREE;
17875   if (next->type == CPP_COLON)
17876     {
17877       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17878       *super = cp_parser_identifier (parser);
17879     }
17880   else if (next->type == CPP_OPEN_PAREN)
17881     {
17882       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17883       *categ = cp_parser_identifier (parser);
17884       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17885     }
17886 }
17887
17888 /* Parse an Objective-C class interface.  */
17889
17890 static void
17891 cp_parser_objc_class_interface (cp_parser* parser)
17892 {
17893   tree name, super, categ, protos;
17894
17895   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
17896   name = cp_parser_identifier (parser);
17897   cp_parser_objc_superclass_or_category (parser, &super, &categ);
17898   protos = cp_parser_objc_protocol_refs_opt (parser);
17899
17900   /* We have either a class or a category on our hands.  */
17901   if (categ)
17902     objc_start_category_interface (name, categ, protos);
17903   else
17904     {
17905       objc_start_class_interface (name, super, protos);
17906       /* Handle instance variable declarations, if any.  */
17907       cp_parser_objc_class_ivars (parser);
17908       objc_continue_interface ();
17909     }
17910
17911   cp_parser_objc_method_prototype_list (parser);
17912 }
17913
17914 /* Parse an Objective-C class implementation.  */
17915
17916 static void
17917 cp_parser_objc_class_implementation (cp_parser* parser)
17918 {
17919   tree name, super, categ;
17920
17921   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
17922   name = cp_parser_identifier (parser);
17923   cp_parser_objc_superclass_or_category (parser, &super, &categ);
17924
17925   /* We have either a class or a category on our hands.  */
17926   if (categ)
17927     objc_start_category_implementation (name, categ);
17928   else
17929     {
17930       objc_start_class_implementation (name, super);
17931       /* Handle instance variable declarations, if any.  */
17932       cp_parser_objc_class_ivars (parser);
17933       objc_continue_implementation ();
17934     }
17935
17936   cp_parser_objc_method_definition_list (parser);
17937 }
17938
17939 /* Consume the @end token and finish off the implementation.  */
17940
17941 static void
17942 cp_parser_objc_end_implementation (cp_parser* parser)
17943 {
17944   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17945   objc_finish_implementation ();
17946 }
17947
17948 /* Parse an Objective-C declaration.  */
17949
17950 static void
17951 cp_parser_objc_declaration (cp_parser* parser)
17952 {
17953   /* Try to figure out what kind of declaration is present.  */
17954   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17955
17956   switch (kwd->keyword)
17957     {
17958     case RID_AT_ALIAS:
17959       cp_parser_objc_alias_declaration (parser);
17960       break;
17961     case RID_AT_CLASS:
17962       cp_parser_objc_class_declaration (parser);
17963       break;
17964     case RID_AT_PROTOCOL:
17965       cp_parser_objc_protocol_declaration (parser);
17966       break;
17967     case RID_AT_INTERFACE:
17968       cp_parser_objc_class_interface (parser);
17969       break;
17970     case RID_AT_IMPLEMENTATION:
17971       cp_parser_objc_class_implementation (parser);
17972       break;
17973     case RID_AT_END:
17974       cp_parser_objc_end_implementation (parser);
17975       break;
17976     default:
17977       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
17978       cp_parser_skip_to_end_of_block_or_statement (parser);
17979     }
17980 }
17981
17982 /* Parse an Objective-C try-catch-finally statement.
17983
17984    objc-try-catch-finally-stmt:
17985      @try compound-statement objc-catch-clause-seq [opt]
17986        objc-finally-clause [opt]
17987
17988    objc-catch-clause-seq:
17989      objc-catch-clause objc-catch-clause-seq [opt]
17990
17991    objc-catch-clause:
17992      @catch ( exception-declaration ) compound-statement
17993
17994    objc-finally-clause
17995      @finally compound-statement
17996
17997    Returns NULL_TREE.  */
17998
17999 static tree
18000 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
18001   location_t location;
18002   tree stmt;
18003
18004   cp_parser_require_keyword (parser, RID_AT_TRY, "`@try'");
18005   location = cp_lexer_peek_token (parser->lexer)->location;
18006   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
18007      node, lest it get absorbed into the surrounding block.  */
18008   stmt = push_stmt_list ();
18009   cp_parser_compound_statement (parser, NULL, false);
18010   objc_begin_try_stmt (location, pop_stmt_list (stmt));
18011
18012   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
18013     {
18014       cp_parameter_declarator *parmdecl;
18015       tree parm;
18016
18017       cp_lexer_consume_token (parser->lexer);
18018       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
18019       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
18020       parm = grokdeclarator (parmdecl->declarator,
18021                              &parmdecl->decl_specifiers,
18022                              PARM, /*initialized=*/0,
18023                              /*attrlist=*/NULL);
18024       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
18025       objc_begin_catch_clause (parm);
18026       cp_parser_compound_statement (parser, NULL, false);
18027       objc_finish_catch_clause ();
18028     }
18029
18030   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
18031     {
18032       cp_lexer_consume_token (parser->lexer);
18033       location = cp_lexer_peek_token (parser->lexer)->location;
18034       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
18035          node, lest it get absorbed into the surrounding block.  */
18036       stmt = push_stmt_list ();
18037       cp_parser_compound_statement (parser, NULL, false);
18038       objc_build_finally_clause (location, pop_stmt_list (stmt));
18039     }
18040
18041   return objc_finish_try_stmt ();
18042 }
18043
18044 /* Parse an Objective-C synchronized statement.
18045
18046    objc-synchronized-stmt:
18047      @synchronized ( expression ) compound-statement
18048
18049    Returns NULL_TREE.  */
18050
18051 static tree
18052 cp_parser_objc_synchronized_statement (cp_parser *parser) {
18053   location_t location;
18054   tree lock, stmt;
18055
18056   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "`@synchronized'");
18057
18058   location = cp_lexer_peek_token (parser->lexer)->location;
18059   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
18060   lock = cp_parser_expression (parser, false);
18061   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
18062
18063   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
18064      node, lest it get absorbed into the surrounding block.  */
18065   stmt = push_stmt_list ();
18066   cp_parser_compound_statement (parser, NULL, false);
18067
18068   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
18069 }
18070
18071 /* Parse an Objective-C throw statement.
18072
18073    objc-throw-stmt:
18074      @throw assignment-expression [opt] ;
18075
18076    Returns a constructed '@throw' statement.  */
18077
18078 static tree
18079 cp_parser_objc_throw_statement (cp_parser *parser) {
18080   tree expr = NULL_TREE;
18081
18082   cp_parser_require_keyword (parser, RID_AT_THROW, "`@throw'");
18083
18084   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18085     expr = cp_parser_assignment_expression (parser, false);
18086
18087   cp_parser_consume_semicolon_at_end_of_statement (parser);
18088
18089   return objc_build_throw_stmt (expr);
18090 }
18091
18092 /* Parse an Objective-C statement.  */
18093
18094 static tree
18095 cp_parser_objc_statement (cp_parser * parser) {
18096   /* Try to figure out what kind of declaration is present.  */
18097   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
18098
18099   switch (kwd->keyword)
18100     {
18101     case RID_AT_TRY:
18102       return cp_parser_objc_try_catch_finally_statement (parser);
18103     case RID_AT_SYNCHRONIZED:
18104       return cp_parser_objc_synchronized_statement (parser);
18105     case RID_AT_THROW:
18106       return cp_parser_objc_throw_statement (parser);
18107     default:
18108       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
18109       cp_parser_skip_to_end_of_block_or_statement (parser);
18110     }
18111
18112   return error_mark_node;
18113 }
18114 \f
18115 /* OpenMP 2.5 parsing routines.  */
18116
18117 /* All OpenMP clauses.  OpenMP 2.5.  */
18118 typedef enum pragma_omp_clause {
18119   PRAGMA_OMP_CLAUSE_NONE = 0,
18120
18121   PRAGMA_OMP_CLAUSE_COPYIN,
18122   PRAGMA_OMP_CLAUSE_COPYPRIVATE,
18123   PRAGMA_OMP_CLAUSE_DEFAULT,
18124   PRAGMA_OMP_CLAUSE_FIRSTPRIVATE,
18125   PRAGMA_OMP_CLAUSE_IF,
18126   PRAGMA_OMP_CLAUSE_LASTPRIVATE,
18127   PRAGMA_OMP_CLAUSE_NOWAIT,
18128   PRAGMA_OMP_CLAUSE_NUM_THREADS,
18129   PRAGMA_OMP_CLAUSE_ORDERED,
18130   PRAGMA_OMP_CLAUSE_PRIVATE,
18131   PRAGMA_OMP_CLAUSE_REDUCTION,
18132   PRAGMA_OMP_CLAUSE_SCHEDULE,
18133   PRAGMA_OMP_CLAUSE_SHARED
18134 } pragma_omp_clause;
18135
18136 /* Returns name of the next clause.
18137    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
18138    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
18139    returned and the token is consumed.  */
18140
18141 static pragma_omp_clause
18142 cp_parser_omp_clause_name (cp_parser *parser)
18143 {
18144   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
18145
18146   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
18147     result = PRAGMA_OMP_CLAUSE_IF;
18148   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
18149     result = PRAGMA_OMP_CLAUSE_DEFAULT;
18150   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
18151     result = PRAGMA_OMP_CLAUSE_PRIVATE;
18152   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18153     {
18154       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18155       const char *p = IDENTIFIER_POINTER (id);
18156
18157       switch (p[0])
18158         {
18159         case 'c':
18160           if (!strcmp ("copyin", p))
18161             result = PRAGMA_OMP_CLAUSE_COPYIN;
18162           else if (!strcmp ("copyprivate", p))
18163             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
18164           break;
18165         case 'f':
18166           if (!strcmp ("firstprivate", p))
18167             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
18168           break;
18169         case 'l':
18170           if (!strcmp ("lastprivate", p))
18171             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
18172           break;
18173         case 'n':
18174           if (!strcmp ("nowait", p))
18175             result = PRAGMA_OMP_CLAUSE_NOWAIT;
18176           else if (!strcmp ("num_threads", p))
18177             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
18178           break;
18179         case 'o':
18180           if (!strcmp ("ordered", p))
18181             result = PRAGMA_OMP_CLAUSE_ORDERED;
18182           break;
18183         case 'r':
18184           if (!strcmp ("reduction", p))
18185             result = PRAGMA_OMP_CLAUSE_REDUCTION;
18186           break;
18187         case 's':
18188           if (!strcmp ("schedule", p))
18189             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
18190           else if (!strcmp ("shared", p))
18191             result = PRAGMA_OMP_CLAUSE_SHARED;
18192           break;
18193         }
18194     }
18195
18196   if (result != PRAGMA_OMP_CLAUSE_NONE)
18197     cp_lexer_consume_token (parser->lexer);
18198
18199   return result;
18200 }
18201
18202 /* Validate that a clause of the given type does not already exist.  */
18203
18204 static void
18205 check_no_duplicate_clause (tree clauses, enum tree_code code, const char *name)
18206 {
18207   tree c;
18208
18209   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
18210     if (OMP_CLAUSE_CODE (c) == code)
18211       {
18212         error ("too many %qs clauses", name);
18213         break;
18214       }
18215 }
18216
18217 /* OpenMP 2.5:
18218    variable-list:
18219      identifier
18220      variable-list , identifier
18221
18222    In addition, we match a closing parenthesis.  An opening parenthesis
18223    will have been consumed by the caller.
18224
18225    If KIND is nonzero, create the appropriate node and install the decl
18226    in OMP_CLAUSE_DECL and add the node to the head of the list.
18227
18228    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
18229    return the list created.  */
18230
18231 static tree
18232 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
18233                                 tree list)
18234 {
18235   while (1)
18236     {
18237       tree name, decl;
18238
18239       name = cp_parser_id_expression (parser, /*template_p=*/false,
18240                                       /*check_dependency_p=*/true,
18241                                       /*template_p=*/NULL,
18242                                       /*declarator_p=*/false,
18243                                       /*optional_p=*/false);
18244       if (name == error_mark_node)
18245         goto skip_comma;
18246
18247       decl = cp_parser_lookup_name_simple (parser, name);
18248       if (decl == error_mark_node)
18249         cp_parser_name_lookup_error (parser, name, decl, NULL);
18250       else if (kind != 0)
18251         {
18252           tree u = build_omp_clause (kind);
18253           OMP_CLAUSE_DECL (u) = decl;
18254           OMP_CLAUSE_CHAIN (u) = list;
18255           list = u;
18256         }
18257       else
18258         list = tree_cons (decl, NULL_TREE, list);
18259
18260     get_comma:
18261       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
18262         break;
18263       cp_lexer_consume_token (parser->lexer);
18264     }
18265
18266   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18267     {
18268       int ending;
18269
18270       /* Try to resync to an unnested comma.  Copied from
18271          cp_parser_parenthesized_expression_list.  */
18272     skip_comma:
18273       ending = cp_parser_skip_to_closing_parenthesis (parser,
18274                                                       /*recovering=*/true,
18275                                                       /*or_comma=*/true,
18276                                                       /*consume_paren=*/true);
18277       if (ending < 0)
18278         goto get_comma;
18279     }
18280
18281   return list;
18282 }
18283
18284 /* Similarly, but expect leading and trailing parenthesis.  This is a very
18285    common case for omp clauses.  */
18286
18287 static tree
18288 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
18289 {
18290   if (cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18291     return cp_parser_omp_var_list_no_open (parser, kind, list);
18292   return list;
18293 }
18294
18295 /* OpenMP 2.5:
18296    default ( shared | none ) */
18297
18298 static tree
18299 cp_parser_omp_clause_default (cp_parser *parser, tree list)
18300 {
18301   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
18302   tree c;
18303
18304   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18305     return list;
18306   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18307     {
18308       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18309       const char *p = IDENTIFIER_POINTER (id);
18310
18311       switch (p[0])
18312         {
18313         case 'n':
18314           if (strcmp ("none", p) != 0)
18315             goto invalid_kind;
18316           kind = OMP_CLAUSE_DEFAULT_NONE;
18317           break;
18318
18319         case 's':
18320           if (strcmp ("shared", p) != 0)
18321             goto invalid_kind;
18322           kind = OMP_CLAUSE_DEFAULT_SHARED;
18323           break;
18324
18325         default:
18326           goto invalid_kind;
18327         }
18328
18329       cp_lexer_consume_token (parser->lexer);
18330     }
18331   else
18332     {
18333     invalid_kind:
18334       cp_parser_error (parser, "expected %<none%> or %<shared%>");
18335     }
18336
18337   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18338     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18339                                            /*or_comma=*/false,
18340                                            /*consume_paren=*/true);
18341
18342   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
18343     return list;
18344
18345   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default");
18346   c = build_omp_clause (OMP_CLAUSE_DEFAULT);
18347   OMP_CLAUSE_CHAIN (c) = list;
18348   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
18349
18350   return c;
18351 }
18352
18353 /* OpenMP 2.5:
18354    if ( expression ) */
18355
18356 static tree
18357 cp_parser_omp_clause_if (cp_parser *parser, tree list)
18358 {
18359   tree t, c;
18360
18361   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18362     return list;
18363
18364   t = cp_parser_condition (parser);
18365
18366   if (t == error_mark_node
18367       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18368     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18369                                            /*or_comma=*/false,
18370                                            /*consume_paren=*/true);
18371
18372   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if");
18373
18374   c = build_omp_clause (OMP_CLAUSE_IF);
18375   OMP_CLAUSE_IF_EXPR (c) = t;
18376   OMP_CLAUSE_CHAIN (c) = list;
18377
18378   return c;
18379 }
18380
18381 /* OpenMP 2.5:
18382    nowait */
18383
18384 static tree
18385 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18386 {
18387   tree c;
18388
18389   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait");
18390
18391   c = build_omp_clause (OMP_CLAUSE_NOWAIT);
18392   OMP_CLAUSE_CHAIN (c) = list;
18393   return c;
18394 }
18395
18396 /* OpenMP 2.5:
18397    num_threads ( expression ) */
18398
18399 static tree
18400 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list)
18401 {
18402   tree t, c;
18403
18404   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18405     return list;
18406
18407   t = cp_parser_expression (parser, false);
18408
18409   if (t == error_mark_node
18410       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18411     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18412                                            /*or_comma=*/false,
18413                                            /*consume_paren=*/true);
18414
18415   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS, "num_threads");
18416
18417   c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
18418   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
18419   OMP_CLAUSE_CHAIN (c) = list;
18420
18421   return c;
18422 }
18423
18424 /* OpenMP 2.5:
18425    ordered */
18426
18427 static tree
18428 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18429 {
18430   tree c;
18431
18432   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED, "ordered");
18433
18434   c = build_omp_clause (OMP_CLAUSE_ORDERED);
18435   OMP_CLAUSE_CHAIN (c) = list;
18436   return c;
18437 }
18438
18439 /* OpenMP 2.5:
18440    reduction ( reduction-operator : variable-list )
18441
18442    reduction-operator:
18443      One of: + * - & ^ | && || */
18444
18445 static tree
18446 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
18447 {
18448   enum tree_code code;
18449   tree nlist, c;
18450
18451   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18452     return list;
18453
18454   switch (cp_lexer_peek_token (parser->lexer)->type)
18455     {
18456     case CPP_PLUS:
18457       code = PLUS_EXPR;
18458       break;
18459     case CPP_MULT:
18460       code = MULT_EXPR;
18461       break;
18462     case CPP_MINUS:
18463       code = MINUS_EXPR;
18464       break;
18465     case CPP_AND:
18466       code = BIT_AND_EXPR;
18467       break;
18468     case CPP_XOR:
18469       code = BIT_XOR_EXPR;
18470       break;
18471     case CPP_OR:
18472       code = BIT_IOR_EXPR;
18473       break;
18474     case CPP_AND_AND:
18475       code = TRUTH_ANDIF_EXPR;
18476       break;
18477     case CPP_OR_OR:
18478       code = TRUTH_ORIF_EXPR;
18479       break;
18480     default:
18481       cp_parser_error (parser, "`+', `*', `-', `&', `^', `|', `&&', or `||'");
18482     resync_fail:
18483       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18484                                              /*or_comma=*/false,
18485                                              /*consume_paren=*/true);
18486       return list;
18487     }
18488   cp_lexer_consume_token (parser->lexer);
18489
18490   if (!cp_parser_require (parser, CPP_COLON, "`:'"))
18491     goto resync_fail;
18492
18493   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
18494   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
18495     OMP_CLAUSE_REDUCTION_CODE (c) = code;
18496
18497   return nlist;
18498 }
18499
18500 /* OpenMP 2.5:
18501    schedule ( schedule-kind )
18502    schedule ( schedule-kind , expression )
18503
18504    schedule-kind:
18505      static | dynamic | guided | runtime  */
18506
18507 static tree
18508 cp_parser_omp_clause_schedule (cp_parser *parser, tree list)
18509 {
18510   tree c, t;
18511
18512   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
18513     return list;
18514
18515   c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
18516
18517   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18518     {
18519       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18520       const char *p = IDENTIFIER_POINTER (id);
18521
18522       switch (p[0])
18523         {
18524         case 'd':
18525           if (strcmp ("dynamic", p) != 0)
18526             goto invalid_kind;
18527           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
18528           break;
18529
18530         case 'g':
18531           if (strcmp ("guided", p) != 0)
18532             goto invalid_kind;
18533           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
18534           break;
18535
18536         case 'r':
18537           if (strcmp ("runtime", p) != 0)
18538             goto invalid_kind;
18539           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
18540           break;
18541
18542         default:
18543           goto invalid_kind;
18544         }
18545     }
18546   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
18547     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
18548   else
18549     goto invalid_kind;
18550   cp_lexer_consume_token (parser->lexer);
18551
18552   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
18553     {
18554       cp_lexer_consume_token (parser->lexer);
18555
18556       t = cp_parser_assignment_expression (parser, false);
18557
18558       if (t == error_mark_node)
18559         goto resync_fail;
18560       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
18561         error ("schedule %<runtime%> does not take "
18562                "a %<chunk_size%> parameter");
18563       else
18564         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
18565
18566       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18567         goto resync_fail;
18568     }
18569   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`,' or `)'"))
18570     goto resync_fail;
18571
18572   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule");
18573   OMP_CLAUSE_CHAIN (c) = list;
18574   return c;
18575
18576  invalid_kind:
18577   cp_parser_error (parser, "invalid schedule kind");
18578  resync_fail:
18579   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18580                                          /*or_comma=*/false,
18581                                          /*consume_paren=*/true);
18582   return list;
18583 }
18584
18585 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
18586    is a bitmask in MASK.  Return the list of clauses found; the result
18587    of clause default goes in *pdefault.  */
18588
18589 static tree
18590 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
18591                            const char *where, cp_token *pragma_tok)
18592 {
18593   tree clauses = NULL;
18594
18595   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
18596     {
18597       pragma_omp_clause c_kind = cp_parser_omp_clause_name (parser);
18598       const char *c_name;
18599       tree prev = clauses;
18600
18601       switch (c_kind)
18602         {
18603         case PRAGMA_OMP_CLAUSE_COPYIN:
18604           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
18605           c_name = "copyin";
18606           break;
18607         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
18608           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
18609                                             clauses);
18610           c_name = "copyprivate";
18611           break;
18612         case PRAGMA_OMP_CLAUSE_DEFAULT:
18613           clauses = cp_parser_omp_clause_default (parser, clauses);
18614           c_name = "default";
18615           break;
18616         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
18617           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
18618                                             clauses);
18619           c_name = "firstprivate";
18620           break;
18621         case PRAGMA_OMP_CLAUSE_IF:
18622           clauses = cp_parser_omp_clause_if (parser, clauses);
18623           c_name = "if";
18624           break;
18625         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
18626           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
18627                                             clauses);
18628           c_name = "lastprivate";
18629           break;
18630         case PRAGMA_OMP_CLAUSE_NOWAIT:
18631           clauses = cp_parser_omp_clause_nowait (parser, clauses);
18632           c_name = "nowait";
18633           break;
18634         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
18635           clauses = cp_parser_omp_clause_num_threads (parser, clauses);
18636           c_name = "num_threads";
18637           break;
18638         case PRAGMA_OMP_CLAUSE_ORDERED:
18639           clauses = cp_parser_omp_clause_ordered (parser, clauses);
18640           c_name = "ordered";
18641           break;
18642         case PRAGMA_OMP_CLAUSE_PRIVATE:
18643           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
18644                                             clauses);
18645           c_name = "private";
18646           break;
18647         case PRAGMA_OMP_CLAUSE_REDUCTION:
18648           clauses = cp_parser_omp_clause_reduction (parser, clauses);
18649           c_name = "reduction";
18650           break;
18651         case PRAGMA_OMP_CLAUSE_SCHEDULE:
18652           clauses = cp_parser_omp_clause_schedule (parser, clauses);
18653           c_name = "schedule";
18654           break;
18655         case PRAGMA_OMP_CLAUSE_SHARED:
18656           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
18657                                             clauses);
18658           c_name = "shared";
18659           break;
18660         default:
18661           cp_parser_error (parser, "expected %<#pragma omp%> clause");
18662           goto saw_error;
18663         }
18664
18665       if (((mask >> c_kind) & 1) == 0)
18666         {
18667           /* Remove the invalid clause(s) from the list to avoid
18668              confusing the rest of the compiler.  */
18669           clauses = prev;
18670           error ("%qs is not valid for %qs", c_name, where);
18671         }
18672     }
18673  saw_error:
18674   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
18675   return finish_omp_clauses (clauses);
18676 }
18677
18678 /* OpenMP 2.5:
18679    structured-block:
18680      statement
18681
18682    In practice, we're also interested in adding the statement to an
18683    outer node.  So it is convenient if we work around the fact that
18684    cp_parser_statement calls add_stmt.  */
18685
18686 static unsigned
18687 cp_parser_begin_omp_structured_block (cp_parser *parser)
18688 {
18689   unsigned save = parser->in_statement;
18690
18691   /* Only move the values to IN_OMP_BLOCK if they weren't false.
18692      This preserves the "not within loop or switch" style error messages
18693      for nonsense cases like
18694         void foo() {
18695         #pragma omp single
18696           break;
18697         }
18698   */
18699   if (parser->in_statement)
18700     parser->in_statement = IN_OMP_BLOCK;
18701
18702   return save;
18703 }
18704
18705 static void
18706 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
18707 {
18708   parser->in_statement = save;
18709 }
18710
18711 static tree
18712 cp_parser_omp_structured_block (cp_parser *parser)
18713 {
18714   tree stmt = begin_omp_structured_block ();
18715   unsigned int save = cp_parser_begin_omp_structured_block (parser);
18716
18717   cp_parser_statement (parser, NULL_TREE, false, NULL);
18718
18719   cp_parser_end_omp_structured_block (parser, save);
18720   return finish_omp_structured_block (stmt);
18721 }
18722
18723 /* OpenMP 2.5:
18724    # pragma omp atomic new-line
18725      expression-stmt
18726
18727    expression-stmt:
18728      x binop= expr | x++ | ++x | x-- | --x
18729    binop:
18730      +, *, -, /, &, ^, |, <<, >>
18731
18732   where x is an lvalue expression with scalar type.  */
18733
18734 static void
18735 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
18736 {
18737   tree lhs, rhs;
18738   enum tree_code code;
18739
18740   cp_parser_require_pragma_eol (parser, pragma_tok);
18741
18742   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
18743                                     /*cast_p=*/false);
18744   switch (TREE_CODE (lhs))
18745     {
18746     case ERROR_MARK:
18747       goto saw_error;
18748
18749     case PREINCREMENT_EXPR:
18750     case POSTINCREMENT_EXPR:
18751       lhs = TREE_OPERAND (lhs, 0);
18752       code = PLUS_EXPR;
18753       rhs = integer_one_node;
18754       break;
18755
18756     case PREDECREMENT_EXPR:
18757     case POSTDECREMENT_EXPR:
18758       lhs = TREE_OPERAND (lhs, 0);
18759       code = MINUS_EXPR;
18760       rhs = integer_one_node;
18761       break;
18762
18763     default:
18764       switch (cp_lexer_peek_token (parser->lexer)->type)
18765         {
18766         case CPP_MULT_EQ:
18767           code = MULT_EXPR;
18768           break;
18769         case CPP_DIV_EQ:
18770           code = TRUNC_DIV_EXPR;
18771           break;
18772         case CPP_PLUS_EQ:
18773           code = PLUS_EXPR;
18774           break;
18775         case CPP_MINUS_EQ:
18776           code = MINUS_EXPR;
18777           break;
18778         case CPP_LSHIFT_EQ:
18779           code = LSHIFT_EXPR;
18780           break;
18781         case CPP_RSHIFT_EQ:
18782           code = RSHIFT_EXPR;
18783           break;
18784         case CPP_AND_EQ:
18785           code = BIT_AND_EXPR;
18786           break;
18787         case CPP_OR_EQ:
18788           code = BIT_IOR_EXPR;
18789           break;
18790         case CPP_XOR_EQ:
18791           code = BIT_XOR_EXPR;
18792           break;
18793         default:
18794           cp_parser_error (parser,
18795                            "invalid operator for %<#pragma omp atomic%>");
18796           goto saw_error;
18797         }
18798       cp_lexer_consume_token (parser->lexer);
18799
18800       rhs = cp_parser_expression (parser, false);
18801       if (rhs == error_mark_node)
18802         goto saw_error;
18803       break;
18804     }
18805   finish_omp_atomic (code, lhs, rhs);
18806   cp_parser_consume_semicolon_at_end_of_statement (parser);
18807   return;
18808
18809  saw_error:
18810   cp_parser_skip_to_end_of_block_or_statement (parser);
18811 }
18812
18813
18814 /* OpenMP 2.5:
18815    # pragma omp barrier new-line  */
18816
18817 static void
18818 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
18819 {
18820   cp_parser_require_pragma_eol (parser, pragma_tok);
18821   finish_omp_barrier ();
18822 }
18823
18824 /* OpenMP 2.5:
18825    # pragma omp critical [(name)] new-line
18826      structured-block  */
18827
18828 static tree
18829 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
18830 {
18831   tree stmt, name = NULL;
18832
18833   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18834     {
18835       cp_lexer_consume_token (parser->lexer);
18836
18837       name = cp_parser_identifier (parser);
18838
18839       if (name == error_mark_node
18840           || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18841         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18842                                                /*or_comma=*/false,
18843                                                /*consume_paren=*/true);
18844       if (name == error_mark_node)
18845         name = NULL;
18846     }
18847   cp_parser_require_pragma_eol (parser, pragma_tok);
18848
18849   stmt = cp_parser_omp_structured_block (parser);
18850   return c_finish_omp_critical (stmt, name);
18851 }
18852
18853 /* OpenMP 2.5:
18854    # pragma omp flush flush-vars[opt] new-line
18855
18856    flush-vars:
18857      ( variable-list ) */
18858
18859 static void
18860 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
18861 {
18862   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18863     (void) cp_parser_omp_var_list (parser, 0, NULL);
18864   cp_parser_require_pragma_eol (parser, pragma_tok);
18865
18866   finish_omp_flush ();
18867 }
18868
18869 /* Parse the restricted form of the for statment allowed by OpenMP.  */
18870
18871 static tree
18872 cp_parser_omp_for_loop (cp_parser *parser)
18873 {
18874   tree init, cond, incr, body, decl, pre_body;
18875   location_t loc;
18876
18877   if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
18878     {
18879       cp_parser_error (parser, "for statement expected");
18880       return NULL;
18881     }
18882   loc = cp_lexer_consume_token (parser->lexer)->location;
18883   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18884     return NULL;
18885
18886   init = decl = NULL;
18887   pre_body = push_stmt_list ();
18888   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18889     {
18890       cp_decl_specifier_seq type_specifiers;
18891
18892       /* First, try to parse as an initialized declaration.  See
18893          cp_parser_condition, from whence the bulk of this is copied.  */
18894
18895       cp_parser_parse_tentatively (parser);
18896       cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
18897                                     &type_specifiers);
18898       if (!cp_parser_error_occurred (parser))
18899         {
18900           tree asm_specification, attributes;
18901           cp_declarator *declarator;
18902
18903           declarator = cp_parser_declarator (parser,
18904                                              CP_PARSER_DECLARATOR_NAMED,
18905                                              /*ctor_dtor_or_conv_p=*/NULL,
18906                                              /*parenthesized_p=*/NULL,
18907                                              /*member_p=*/false);
18908           attributes = cp_parser_attributes_opt (parser);
18909           asm_specification = cp_parser_asm_specification_opt (parser);
18910
18911           cp_parser_require (parser, CPP_EQ, "`='");
18912           if (cp_parser_parse_definitely (parser))
18913             {
18914               tree pushed_scope;
18915
18916               decl = start_decl (declarator, &type_specifiers,
18917                                  /*initialized_p=*/false, attributes,
18918                                  /*prefix_attributes=*/NULL_TREE,
18919                                  &pushed_scope);
18920
18921               init = cp_parser_assignment_expression (parser, false);
18922
18923               cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
18924                               asm_specification, LOOKUP_ONLYCONVERTING);
18925
18926               if (pushed_scope)
18927                 pop_scope (pushed_scope);
18928             }
18929         }
18930       else
18931         cp_parser_abort_tentative_parse (parser);
18932
18933       /* If parsing as an initialized declaration failed, try again as
18934          a simple expression.  */
18935       if (decl == NULL)
18936         init = cp_parser_expression (parser, false);
18937     }
18938   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18939   pre_body = pop_stmt_list (pre_body);
18940
18941   cond = NULL;
18942   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18943     cond = cp_parser_condition (parser);
18944   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18945
18946   incr = NULL;
18947   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
18948     incr = cp_parser_expression (parser, false);
18949
18950   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18951     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18952                                            /*or_comma=*/false,
18953                                            /*consume_paren=*/true);
18954
18955   /* Note that we saved the original contents of this flag when we entered
18956      the structured block, and so we don't need to re-save it here.  */
18957   parser->in_statement = IN_OMP_FOR;
18958
18959   /* Note that the grammar doesn't call for a structured block here,
18960      though the loop as a whole is a structured block.  */
18961   body = push_stmt_list ();
18962   cp_parser_statement (parser, NULL_TREE, false, NULL);
18963   body = pop_stmt_list (body);
18964
18965   return finish_omp_for (loc, decl, init, cond, incr, body, pre_body);
18966 }
18967
18968 /* OpenMP 2.5:
18969    #pragma omp for for-clause[optseq] new-line
18970      for-loop  */
18971
18972 #define OMP_FOR_CLAUSE_MASK                             \
18973         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18974         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18975         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
18976         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
18977         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
18978         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
18979         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18980
18981 static tree
18982 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
18983 {
18984   tree clauses, sb, ret;
18985   unsigned int save;
18986
18987   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
18988                                        "#pragma omp for", pragma_tok);
18989
18990   sb = begin_omp_structured_block ();
18991   save = cp_parser_begin_omp_structured_block (parser);
18992
18993   ret = cp_parser_omp_for_loop (parser);
18994   if (ret)
18995     OMP_FOR_CLAUSES (ret) = clauses;
18996
18997   cp_parser_end_omp_structured_block (parser, save);
18998   add_stmt (finish_omp_structured_block (sb));
18999
19000   return ret;
19001 }
19002
19003 /* OpenMP 2.5:
19004    # pragma omp master new-line
19005      structured-block  */
19006
19007 static tree
19008 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
19009 {
19010   cp_parser_require_pragma_eol (parser, pragma_tok);
19011   return c_finish_omp_master (cp_parser_omp_structured_block (parser));
19012 }
19013
19014 /* OpenMP 2.5:
19015    # pragma omp ordered new-line
19016      structured-block  */
19017
19018 static tree
19019 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
19020 {
19021   cp_parser_require_pragma_eol (parser, pragma_tok);
19022   return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
19023 }
19024
19025 /* OpenMP 2.5:
19026
19027    section-scope:
19028      { section-sequence }
19029
19030    section-sequence:
19031      section-directive[opt] structured-block
19032      section-sequence section-directive structured-block  */
19033
19034 static tree
19035 cp_parser_omp_sections_scope (cp_parser *parser)
19036 {
19037   tree stmt, substmt;
19038   bool error_suppress = false;
19039   cp_token *tok;
19040
19041   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
19042     return NULL_TREE;
19043
19044   stmt = push_stmt_list ();
19045
19046   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
19047     {
19048       unsigned save;
19049
19050       substmt = begin_omp_structured_block ();
19051       save = cp_parser_begin_omp_structured_block (parser);
19052
19053       while (1)
19054         {
19055           cp_parser_statement (parser, NULL_TREE, false, NULL);
19056
19057           tok = cp_lexer_peek_token (parser->lexer);
19058           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
19059             break;
19060           if (tok->type == CPP_CLOSE_BRACE)
19061             break;
19062           if (tok->type == CPP_EOF)
19063             break;
19064         }
19065
19066       cp_parser_end_omp_structured_block (parser, save);
19067       substmt = finish_omp_structured_block (substmt);
19068       substmt = build1 (OMP_SECTION, void_type_node, substmt);
19069       add_stmt (substmt);
19070     }
19071
19072   while (1)
19073     {
19074       tok = cp_lexer_peek_token (parser->lexer);
19075       if (tok->type == CPP_CLOSE_BRACE)
19076         break;
19077       if (tok->type == CPP_EOF)
19078         break;
19079
19080       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
19081         {
19082           cp_lexer_consume_token (parser->lexer);
19083           cp_parser_require_pragma_eol (parser, tok);
19084           error_suppress = false;
19085         }
19086       else if (!error_suppress)
19087         {
19088           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
19089           error_suppress = true;
19090         }
19091
19092       substmt = cp_parser_omp_structured_block (parser);
19093       substmt = build1 (OMP_SECTION, void_type_node, substmt);
19094       add_stmt (substmt);
19095     }
19096   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
19097
19098   substmt = pop_stmt_list (stmt);
19099
19100   stmt = make_node (OMP_SECTIONS);
19101   TREE_TYPE (stmt) = void_type_node;
19102   OMP_SECTIONS_BODY (stmt) = substmt;
19103
19104   add_stmt (stmt);
19105   return stmt;
19106 }
19107
19108 /* OpenMP 2.5:
19109    # pragma omp sections sections-clause[optseq] newline
19110      sections-scope  */
19111
19112 #define OMP_SECTIONS_CLAUSE_MASK                        \
19113         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19114         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19115         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
19116         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
19117         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19118
19119 static tree
19120 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
19121 {
19122   tree clauses, ret;
19123
19124   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
19125                                        "#pragma omp sections", pragma_tok);
19126
19127   ret = cp_parser_omp_sections_scope (parser);
19128   if (ret)
19129     OMP_SECTIONS_CLAUSES (ret) = clauses;
19130
19131   return ret;
19132 }
19133
19134 /* OpenMP 2.5:
19135    # pragma parallel parallel-clause new-line
19136    # pragma parallel for parallel-for-clause new-line
19137    # pragma parallel sections parallel-sections-clause new-line  */
19138
19139 #define OMP_PARALLEL_CLAUSE_MASK                        \
19140         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
19141         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19142         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19143         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
19144         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
19145         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
19146         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
19147         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
19148
19149 static tree
19150 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
19151 {
19152   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
19153   const char *p_name = "#pragma omp parallel";
19154   tree stmt, clauses, par_clause, ws_clause, block;
19155   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
19156   unsigned int save;
19157
19158   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
19159     {
19160       cp_lexer_consume_token (parser->lexer);
19161       p_kind = PRAGMA_OMP_PARALLEL_FOR;
19162       p_name = "#pragma omp parallel for";
19163       mask |= OMP_FOR_CLAUSE_MASK;
19164       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19165     }
19166   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19167     {
19168       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19169       const char *p = IDENTIFIER_POINTER (id);
19170       if (strcmp (p, "sections") == 0)
19171         {
19172           cp_lexer_consume_token (parser->lexer);
19173           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
19174           p_name = "#pragma omp parallel sections";
19175           mask |= OMP_SECTIONS_CLAUSE_MASK;
19176           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19177         }
19178     }
19179
19180   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
19181   block = begin_omp_parallel ();
19182   save = cp_parser_begin_omp_structured_block (parser);
19183
19184   switch (p_kind)
19185     {
19186     case PRAGMA_OMP_PARALLEL:
19187       cp_parser_already_scoped_statement (parser);
19188       par_clause = clauses;
19189       break;
19190
19191     case PRAGMA_OMP_PARALLEL_FOR:
19192       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19193       stmt = cp_parser_omp_for_loop (parser);
19194       if (stmt)
19195         OMP_FOR_CLAUSES (stmt) = ws_clause;
19196       break;
19197
19198     case PRAGMA_OMP_PARALLEL_SECTIONS:
19199       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19200       stmt = cp_parser_omp_sections_scope (parser);
19201       if (stmt)
19202         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
19203       break;
19204
19205     default:
19206       gcc_unreachable ();
19207     }
19208
19209   cp_parser_end_omp_structured_block (parser, save);
19210   stmt = finish_omp_parallel (par_clause, block);
19211   if (p_kind != PRAGMA_OMP_PARALLEL)
19212     OMP_PARALLEL_COMBINED (stmt) = 1;
19213   return stmt;
19214 }
19215
19216 /* OpenMP 2.5:
19217    # pragma omp single single-clause[optseq] new-line
19218      structured-block  */
19219
19220 #define OMP_SINGLE_CLAUSE_MASK                          \
19221         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19222         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19223         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
19224         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19225
19226 static tree
19227 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
19228 {
19229   tree stmt = make_node (OMP_SINGLE);
19230   TREE_TYPE (stmt) = void_type_node;
19231
19232   OMP_SINGLE_CLAUSES (stmt)
19233     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
19234                                  "#pragma omp single", pragma_tok);
19235   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
19236
19237   return add_stmt (stmt);
19238 }
19239
19240 /* OpenMP 2.5:
19241    # pragma omp threadprivate (variable-list) */
19242
19243 static void
19244 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
19245 {
19246   tree vars;
19247
19248   vars = cp_parser_omp_var_list (parser, 0, NULL);
19249   cp_parser_require_pragma_eol (parser, pragma_tok);
19250
19251   if (!targetm.have_tls)
19252     sorry ("threadprivate variables not supported in this target");
19253
19254   finish_omp_threadprivate (vars);
19255 }
19256
19257 /* Main entry point to OpenMP statement pragmas.  */
19258
19259 static void
19260 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
19261 {
19262   tree stmt;
19263
19264   switch (pragma_tok->pragma_kind)
19265     {
19266     case PRAGMA_OMP_ATOMIC:
19267       cp_parser_omp_atomic (parser, pragma_tok);
19268       return;
19269     case PRAGMA_OMP_CRITICAL:
19270       stmt = cp_parser_omp_critical (parser, pragma_tok);
19271       break;
19272     case PRAGMA_OMP_FOR:
19273       stmt = cp_parser_omp_for (parser, pragma_tok);
19274       break;
19275     case PRAGMA_OMP_MASTER:
19276       stmt = cp_parser_omp_master (parser, pragma_tok);
19277       break;
19278     case PRAGMA_OMP_ORDERED:
19279       stmt = cp_parser_omp_ordered (parser, pragma_tok);
19280       break;
19281     case PRAGMA_OMP_PARALLEL:
19282       stmt = cp_parser_omp_parallel (parser, pragma_tok);
19283       break;
19284     case PRAGMA_OMP_SECTIONS:
19285       stmt = cp_parser_omp_sections (parser, pragma_tok);
19286       break;
19287     case PRAGMA_OMP_SINGLE:
19288       stmt = cp_parser_omp_single (parser, pragma_tok);
19289       break;
19290     default:
19291       gcc_unreachable ();
19292     }
19293
19294   if (stmt)
19295     SET_EXPR_LOCATION (stmt, pragma_tok->location);
19296 }
19297 \f
19298 /* The parser.  */
19299
19300 static GTY (()) cp_parser *the_parser;
19301
19302 \f
19303 /* Special handling for the first token or line in the file.  The first
19304    thing in the file might be #pragma GCC pch_preprocess, which loads a
19305    PCH file, which is a GC collection point.  So we need to handle this
19306    first pragma without benefit of an existing lexer structure.
19307
19308    Always returns one token to the caller in *FIRST_TOKEN.  This is
19309    either the true first token of the file, or the first token after
19310    the initial pragma.  */
19311
19312 static void
19313 cp_parser_initial_pragma (cp_token *first_token)
19314 {
19315   tree name = NULL;
19316
19317   cp_lexer_get_preprocessor_token (NULL, first_token);
19318   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
19319     return;
19320
19321   cp_lexer_get_preprocessor_token (NULL, first_token);
19322   if (first_token->type == CPP_STRING)
19323     {
19324       name = first_token->u.value;
19325
19326       cp_lexer_get_preprocessor_token (NULL, first_token);
19327       if (first_token->type != CPP_PRAGMA_EOL)
19328         error ("junk at end of %<#pragma GCC pch_preprocess%>");
19329     }
19330   else
19331     error ("expected string literal");
19332
19333   /* Skip to the end of the pragma.  */
19334   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
19335     cp_lexer_get_preprocessor_token (NULL, first_token);
19336
19337   /* Now actually load the PCH file.  */
19338   if (name)
19339     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
19340
19341   /* Read one more token to return to our caller.  We have to do this
19342      after reading the PCH file in, since its pointers have to be
19343      live.  */
19344   cp_lexer_get_preprocessor_token (NULL, first_token);
19345 }
19346
19347 /* Normal parsing of a pragma token.  Here we can (and must) use the
19348    regular lexer.  */
19349
19350 static bool
19351 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
19352 {
19353   cp_token *pragma_tok;
19354   unsigned int id;
19355
19356   pragma_tok = cp_lexer_consume_token (parser->lexer);
19357   gcc_assert (pragma_tok->type == CPP_PRAGMA);
19358   parser->lexer->in_pragma = true;
19359
19360   id = pragma_tok->pragma_kind;
19361   switch (id)
19362     {
19363     case PRAGMA_GCC_PCH_PREPROCESS:
19364       error ("%<#pragma GCC pch_preprocess%> must be first");
19365       break;
19366
19367     case PRAGMA_OMP_BARRIER:
19368       switch (context)
19369         {
19370         case pragma_compound:
19371           cp_parser_omp_barrier (parser, pragma_tok);
19372           return false;
19373         case pragma_stmt:
19374           error ("%<#pragma omp barrier%> may only be "
19375                  "used in compound statements");
19376           break;
19377         default:
19378           goto bad_stmt;
19379         }
19380       break;
19381
19382     case PRAGMA_OMP_FLUSH:
19383       switch (context)
19384         {
19385         case pragma_compound:
19386           cp_parser_omp_flush (parser, pragma_tok);
19387           return false;
19388         case pragma_stmt:
19389           error ("%<#pragma omp flush%> may only be "
19390                  "used in compound statements");
19391           break;
19392         default:
19393           goto bad_stmt;
19394         }
19395       break;
19396
19397     case PRAGMA_OMP_THREADPRIVATE:
19398       cp_parser_omp_threadprivate (parser, pragma_tok);
19399       return false;
19400
19401     case PRAGMA_OMP_ATOMIC:
19402     case PRAGMA_OMP_CRITICAL:
19403     case PRAGMA_OMP_FOR:
19404     case PRAGMA_OMP_MASTER:
19405     case PRAGMA_OMP_ORDERED:
19406     case PRAGMA_OMP_PARALLEL:
19407     case PRAGMA_OMP_SECTIONS:
19408     case PRAGMA_OMP_SINGLE:
19409       if (context == pragma_external)
19410         goto bad_stmt;
19411       cp_parser_omp_construct (parser, pragma_tok);
19412       return true;
19413
19414     case PRAGMA_OMP_SECTION:
19415       error ("%<#pragma omp section%> may only be used in "
19416              "%<#pragma omp sections%> construct");
19417       break;
19418
19419     default:
19420       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
19421       c_invoke_pragma_handler (id);
19422       break;
19423
19424     bad_stmt:
19425       cp_parser_error (parser, "expected declaration specifiers");
19426       break;
19427     }
19428
19429   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
19430   return false;
19431 }
19432
19433 /* The interface the pragma parsers have to the lexer.  */
19434
19435 enum cpp_ttype
19436 pragma_lex (tree *value)
19437 {
19438   cp_token *tok;
19439   enum cpp_ttype ret;
19440
19441   tok = cp_lexer_peek_token (the_parser->lexer);
19442
19443   ret = tok->type;
19444   *value = tok->u.value;
19445
19446   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
19447     ret = CPP_EOF;
19448   else if (ret == CPP_STRING)
19449     *value = cp_parser_string_literal (the_parser, false, false);
19450   else
19451     {
19452       cp_lexer_consume_token (the_parser->lexer);
19453       if (ret == CPP_KEYWORD)
19454         ret = CPP_NAME;
19455     }
19456
19457   return ret;
19458 }
19459
19460 \f
19461 /* External interface.  */
19462
19463 /* Parse one entire translation unit.  */
19464
19465 void
19466 c_parse_file (void)
19467 {
19468   bool error_occurred;
19469   static bool already_called = false;
19470
19471   if (already_called)
19472     {
19473       sorry ("inter-module optimizations not implemented for C++");
19474       return;
19475     }
19476   already_called = true;
19477
19478   the_parser = cp_parser_new ();
19479   push_deferring_access_checks (flag_access_control
19480                                 ? dk_no_deferred : dk_no_check);
19481   error_occurred = cp_parser_translation_unit (the_parser);
19482   the_parser = NULL;
19483 }
19484
19485 /* This variable must be provided by every front end.  */
19486
19487 int yydebug;
19488
19489 #include "gt-cp-parser.h"