OSDN Git Service

* doc/invoke.texi (Warning Options): Document that -Wempty-body
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005  Free Software Foundation, Inc.
4    Written by Mark Mitchell <mark@codesourcery.com>.
5
6    This file is part of GCC.
7
8    GCC is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2, or (at your option)
11    any later version.
12
13    GCC is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with GCC; see the file COPYING.  If not, write to the Free
20    Software Foundation, 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           if (warn_cxx0x_compat
447               && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
448               && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
449             {
450               /* Warn about the C++0x keyword (but still treat it as
451                  an identifier).  */
452               warning (OPT_Wc__0x_compat, 
453                        "identifier %<%s%> will become a keyword in C++0x",
454                        IDENTIFIER_POINTER (token->u.value));
455
456               /* Clear out the C_RID_CODE so we don't warn about this
457                  particular identifier-turned-keyword again.  */
458               C_RID_CODE (token->u.value) = RID_MAX;
459             }
460
461           token->ambiguous_p = false;
462           token->keyword = RID_MAX;
463         }
464     }
465   /* Handle Objective-C++ keywords.  */
466   else if (token->type == CPP_AT_NAME)
467     {
468       token->type = CPP_KEYWORD;
469       switch (C_RID_CODE (token->u.value))
470         {
471         /* Map 'class' to '@class', 'private' to '@private', etc.  */
472         case RID_CLASS: token->keyword = RID_AT_CLASS; break;
473         case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
474         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
475         case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
476         case RID_THROW: token->keyword = RID_AT_THROW; break;
477         case RID_TRY: token->keyword = RID_AT_TRY; break;
478         case RID_CATCH: token->keyword = RID_AT_CATCH; break;
479         default: token->keyword = C_RID_CODE (token->u.value);
480         }
481     }
482   else if (token->type == CPP_PRAGMA)
483     {
484       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
485       token->pragma_kind = TREE_INT_CST_LOW (token->u.value);
486       token->u.value = NULL_TREE;
487     }
488 }
489
490 /* Update the globals input_location and in_system_header and the
491    input file stack from TOKEN.  */
492 static inline void
493 cp_lexer_set_source_position_from_token (cp_token *token)
494 {
495   if (token->type != CPP_EOF)
496     {
497       input_location = token->location;
498       in_system_header = token->in_system_header;
499       restore_input_file_stack (token->input_file_stack_index);
500     }
501 }
502
503 /* Return a pointer to the next token in the token stream, but do not
504    consume it.  */
505
506 static inline cp_token *
507 cp_lexer_peek_token (cp_lexer *lexer)
508 {
509   if (cp_lexer_debugging_p (lexer))
510     {
511       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
512       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
513       putc ('\n', cp_lexer_debug_stream);
514     }
515   return lexer->next_token;
516 }
517
518 /* Return true if the next token has the indicated TYPE.  */
519
520 static inline bool
521 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
522 {
523   return cp_lexer_peek_token (lexer)->type == type;
524 }
525
526 /* Return true if the next token does not have the indicated TYPE.  */
527
528 static inline bool
529 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
530 {
531   return !cp_lexer_next_token_is (lexer, type);
532 }
533
534 /* Return true if the next token is the indicated KEYWORD.  */
535
536 static inline bool
537 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
538 {
539   return cp_lexer_peek_token (lexer)->keyword == keyword;
540 }
541
542 /* Return true if the next token is a keyword for a decl-specifier.  */
543
544 static bool
545 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
546 {
547   cp_token *token;
548
549   token = cp_lexer_peek_token (lexer);
550   switch (token->keyword) 
551     {
552       /* Storage classes.  */
553     case RID_AUTO:
554     case RID_REGISTER:
555     case RID_STATIC:
556     case RID_EXTERN:
557     case RID_MUTABLE:
558     case RID_THREAD:
559       /* Elaborated type specifiers.  */
560     case RID_ENUM:
561     case RID_CLASS:
562     case RID_STRUCT:
563     case RID_UNION:
564     case RID_TYPENAME:
565       /* Simple type specifiers.  */
566     case RID_CHAR:
567     case RID_WCHAR:
568     case RID_BOOL:
569     case RID_SHORT:
570     case RID_INT:
571     case RID_LONG:
572     case RID_SIGNED:
573     case RID_UNSIGNED:
574     case RID_FLOAT:
575     case RID_DOUBLE:
576     case RID_VOID:
577       /* GNU extensions.  */ 
578     case RID_ATTRIBUTE:
579     case RID_TYPEOF:
580       return true;
581
582     default:
583       return false;
584     }
585 }
586
587 /* Return a pointer to the Nth token in the token stream.  If N is 1,
588    then this is precisely equivalent to cp_lexer_peek_token (except
589    that it is not inline).  One would like to disallow that case, but
590    there is one case (cp_parser_nth_token_starts_template_id) where
591    the caller passes a variable for N and it might be 1.  */
592
593 static cp_token *
594 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
595 {
596   cp_token *token;
597
598   /* N is 1-based, not zero-based.  */
599   gcc_assert (n > 0);
600
601   if (cp_lexer_debugging_p (lexer))
602     fprintf (cp_lexer_debug_stream,
603              "cp_lexer: peeking ahead %ld at token: ", (long)n);
604
605   --n;
606   token = lexer->next_token;
607   gcc_assert (!n || token != &eof_token);
608   while (n != 0)
609     {
610       ++token;
611       if (token == lexer->last_token)
612         {
613           token = (cp_token *)&eof_token;
614           break;
615         }
616
617       if (token->type != CPP_PURGED)
618         --n;
619     }
620
621   if (cp_lexer_debugging_p (lexer))
622     {
623       cp_lexer_print_token (cp_lexer_debug_stream, token);
624       putc ('\n', cp_lexer_debug_stream);
625     }
626
627   return token;
628 }
629
630 /* Return the next token, and advance the lexer's next_token pointer
631    to point to the next non-purged token.  */
632
633 static cp_token *
634 cp_lexer_consume_token (cp_lexer* lexer)
635 {
636   cp_token *token = lexer->next_token;
637
638   gcc_assert (token != &eof_token);
639   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
640
641   do
642     {
643       lexer->next_token++;
644       if (lexer->next_token == lexer->last_token)
645         {
646           lexer->next_token = (cp_token *)&eof_token;
647           break;
648         }
649
650     }
651   while (lexer->next_token->type == CPP_PURGED);
652
653   cp_lexer_set_source_position_from_token (token);
654
655   /* Provide debugging output.  */
656   if (cp_lexer_debugging_p (lexer))
657     {
658       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
659       cp_lexer_print_token (cp_lexer_debug_stream, token);
660       putc ('\n', cp_lexer_debug_stream);
661     }
662
663   return token;
664 }
665
666 /* Permanently remove the next token from the token stream, and
667    advance the next_token pointer to refer to the next non-purged
668    token.  */
669
670 static void
671 cp_lexer_purge_token (cp_lexer *lexer)
672 {
673   cp_token *tok = lexer->next_token;
674
675   gcc_assert (tok != &eof_token);
676   tok->type = CPP_PURGED;
677   tok->location = UNKNOWN_LOCATION;
678   tok->u.value = NULL_TREE;
679   tok->keyword = RID_MAX;
680
681   do
682     {
683       tok++;
684       if (tok == lexer->last_token)
685         {
686           tok = (cp_token *)&eof_token;
687           break;
688         }
689     }
690   while (tok->type == CPP_PURGED);
691   lexer->next_token = tok;
692 }
693
694 /* Permanently remove all tokens after TOK, up to, but not
695    including, the token that will be returned next by
696    cp_lexer_peek_token.  */
697
698 static void
699 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
700 {
701   cp_token *peek = lexer->next_token;
702
703   if (peek == &eof_token)
704     peek = lexer->last_token;
705
706   gcc_assert (tok < peek);
707
708   for ( tok += 1; tok != peek; tok += 1)
709     {
710       tok->type = CPP_PURGED;
711       tok->location = UNKNOWN_LOCATION;
712       tok->u.value = NULL_TREE;
713       tok->keyword = RID_MAX;
714     }
715 }
716
717 /* Begin saving tokens.  All tokens consumed after this point will be
718    preserved.  */
719
720 static void
721 cp_lexer_save_tokens (cp_lexer* lexer)
722 {
723   /* Provide debugging output.  */
724   if (cp_lexer_debugging_p (lexer))
725     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
726
727   VEC_safe_push (cp_token_position, heap,
728                  lexer->saved_tokens, lexer->next_token);
729 }
730
731 /* Commit to the portion of the token stream most recently saved.  */
732
733 static void
734 cp_lexer_commit_tokens (cp_lexer* lexer)
735 {
736   /* Provide debugging output.  */
737   if (cp_lexer_debugging_p (lexer))
738     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
739
740   VEC_pop (cp_token_position, lexer->saved_tokens);
741 }
742
743 /* Return all tokens saved since the last call to cp_lexer_save_tokens
744    to the token stream.  Stop saving tokens.  */
745
746 static void
747 cp_lexer_rollback_tokens (cp_lexer* lexer)
748 {
749   /* Provide debugging output.  */
750   if (cp_lexer_debugging_p (lexer))
751     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
752
753   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
754 }
755
756 /* Print a representation of the TOKEN on the STREAM.  */
757
758 #ifdef ENABLE_CHECKING
759
760 static void
761 cp_lexer_print_token (FILE * stream, cp_token *token)
762 {
763   /* We don't use cpp_type2name here because the parser defines
764      a few tokens of its own.  */
765   static const char *const token_names[] = {
766     /* cpplib-defined token types */
767 #define OP(e, s) #e,
768 #define TK(e, s) #e,
769     TTYPE_TABLE
770 #undef OP
771 #undef TK
772     /* C++ parser token types - see "Manifest constants", above.  */
773     "KEYWORD",
774     "TEMPLATE_ID",
775     "NESTED_NAME_SPECIFIER",
776     "PURGED"
777   };
778
779   /* If we have a name for the token, print it out.  Otherwise, we
780      simply give the numeric code.  */
781   gcc_assert (token->type < ARRAY_SIZE(token_names));
782   fputs (token_names[token->type], stream);
783
784   /* For some tokens, print the associated data.  */
785   switch (token->type)
786     {
787     case CPP_KEYWORD:
788       /* Some keywords have a value that is not an IDENTIFIER_NODE.
789          For example, `struct' is mapped to an INTEGER_CST.  */
790       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
791         break;
792       /* else fall through */
793     case CPP_NAME:
794       fputs (IDENTIFIER_POINTER (token->u.value), stream);
795       break;
796
797     case CPP_STRING:
798     case CPP_WSTRING:
799       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
800       break;
801
802     default:
803       break;
804     }
805 }
806
807 /* Start emitting debugging information.  */
808
809 static void
810 cp_lexer_start_debugging (cp_lexer* lexer)
811 {
812   lexer->debugging_p = true;
813 }
814
815 /* Stop emitting debugging information.  */
816
817 static void
818 cp_lexer_stop_debugging (cp_lexer* lexer)
819 {
820   lexer->debugging_p = false;
821 }
822
823 #endif /* ENABLE_CHECKING */
824
825 /* Create a new cp_token_cache, representing a range of tokens.  */
826
827 static cp_token_cache *
828 cp_token_cache_new (cp_token *first, cp_token *last)
829 {
830   cp_token_cache *cache = GGC_NEW (cp_token_cache);
831   cache->first = first;
832   cache->last = last;
833   return cache;
834 }
835
836 \f
837 /* Decl-specifiers.  */
838
839 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
840
841 static void
842 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
843 {
844   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
845 }
846
847 /* Declarators.  */
848
849 /* Nothing other than the parser should be creating declarators;
850    declarators are a semi-syntactic representation of C++ entities.
851    Other parts of the front end that need to create entities (like
852    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
853
854 static cp_declarator *make_call_declarator
855   (cp_declarator *, cp_parameter_declarator *, cp_cv_quals, tree);
856 static cp_declarator *make_array_declarator
857   (cp_declarator *, tree);
858 static cp_declarator *make_pointer_declarator
859   (cp_cv_quals, cp_declarator *);
860 static cp_declarator *make_reference_declarator
861   (cp_cv_quals, cp_declarator *);
862 static cp_parameter_declarator *make_parameter_declarator
863   (cp_decl_specifier_seq *, cp_declarator *, tree);
864 static cp_declarator *make_ptrmem_declarator
865   (cp_cv_quals, tree, cp_declarator *);
866
867 /* An erroneous declarator.  */
868 static cp_declarator *cp_error_declarator;
869
870 /* The obstack on which declarators and related data structures are
871    allocated.  */
872 static struct obstack declarator_obstack;
873
874 /* Alloc BYTES from the declarator memory pool.  */
875
876 static inline void *
877 alloc_declarator (size_t bytes)
878 {
879   return obstack_alloc (&declarator_obstack, bytes);
880 }
881
882 /* Allocate a declarator of the indicated KIND.  Clear fields that are
883    common to all declarators.  */
884
885 static cp_declarator *
886 make_declarator (cp_declarator_kind kind)
887 {
888   cp_declarator *declarator;
889
890   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
891   declarator->kind = kind;
892   declarator->attributes = NULL_TREE;
893   declarator->declarator = NULL;
894   declarator->parameter_pack_p = false;
895
896   return declarator;
897 }
898
899 /* Make a declarator for a generalized identifier.  If
900    QUALIFYING_SCOPE is non-NULL, the identifier is
901    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
902    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
903    is, if any.   */
904
905 static cp_declarator *
906 make_id_declarator (tree qualifying_scope, tree unqualified_name,
907                     special_function_kind sfk)
908 {
909   cp_declarator *declarator;
910
911   /* It is valid to write:
912
913        class C { void f(); };
914        typedef C D;
915        void D::f();
916
917      The standard is not clear about whether `typedef const C D' is
918      legal; as of 2002-09-15 the committee is considering that
919      question.  EDG 3.0 allows that syntax.  Therefore, we do as
920      well.  */
921   if (qualifying_scope && TYPE_P (qualifying_scope))
922     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
923
924   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
925               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
926               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
927
928   declarator = make_declarator (cdk_id);
929   declarator->u.id.qualifying_scope = qualifying_scope;
930   declarator->u.id.unqualified_name = unqualified_name;
931   declarator->u.id.sfk = sfk;
932   
933   return declarator;
934 }
935
936 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
937    of modifiers such as const or volatile to apply to the pointer
938    type, represented as identifiers.  */
939
940 cp_declarator *
941 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
942 {
943   cp_declarator *declarator;
944
945   declarator = make_declarator (cdk_pointer);
946   declarator->declarator = target;
947   declarator->u.pointer.qualifiers = cv_qualifiers;
948   declarator->u.pointer.class_type = NULL_TREE;
949   if (target)
950     {
951       declarator->parameter_pack_p = target->parameter_pack_p;
952       target->parameter_pack_p = false;
953     }
954   else
955     declarator->parameter_pack_p = false;
956
957   return declarator;
958 }
959
960 /* Like make_pointer_declarator -- but for references.  */
961
962 cp_declarator *
963 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
964 {
965   cp_declarator *declarator;
966
967   declarator = make_declarator (cdk_reference);
968   declarator->declarator = target;
969   declarator->u.pointer.qualifiers = cv_qualifiers;
970   declarator->u.pointer.class_type = NULL_TREE;
971   if (target)
972     {
973       declarator->parameter_pack_p = target->parameter_pack_p;
974       target->parameter_pack_p = false;
975     }
976   else
977     declarator->parameter_pack_p = false;
978
979   return declarator;
980 }
981
982 /* Like make_pointer_declarator -- but for a pointer to a non-static
983    member of CLASS_TYPE.  */
984
985 cp_declarator *
986 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
987                         cp_declarator *pointee)
988 {
989   cp_declarator *declarator;
990
991   declarator = make_declarator (cdk_ptrmem);
992   declarator->declarator = pointee;
993   declarator->u.pointer.qualifiers = cv_qualifiers;
994   declarator->u.pointer.class_type = class_type;
995
996   if (pointee)
997     {
998       declarator->parameter_pack_p = pointee->parameter_pack_p;
999       pointee->parameter_pack_p = false;
1000     }
1001   else
1002     declarator->parameter_pack_p = false;
1003
1004   return declarator;
1005 }
1006
1007 /* Make a declarator for the function given by TARGET, with the
1008    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1009    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1010    indicates what exceptions can be thrown.  */
1011
1012 cp_declarator *
1013 make_call_declarator (cp_declarator *target,
1014                       cp_parameter_declarator *parms,
1015                       cp_cv_quals cv_qualifiers,
1016                       tree exception_specification)
1017 {
1018   cp_declarator *declarator;
1019
1020   declarator = make_declarator (cdk_function);
1021   declarator->declarator = target;
1022   declarator->u.function.parameters = parms;
1023   declarator->u.function.qualifiers = cv_qualifiers;
1024   declarator->u.function.exception_specification = exception_specification;
1025   if (target)
1026     {
1027       declarator->parameter_pack_p = target->parameter_pack_p;
1028       target->parameter_pack_p = false;
1029     }
1030   else
1031     declarator->parameter_pack_p = false;
1032
1033   return declarator;
1034 }
1035
1036 /* Make a declarator for an array of BOUNDS elements, each of which is
1037    defined by ELEMENT.  */
1038
1039 cp_declarator *
1040 make_array_declarator (cp_declarator *element, tree bounds)
1041 {
1042   cp_declarator *declarator;
1043
1044   declarator = make_declarator (cdk_array);
1045   declarator->declarator = element;
1046   declarator->u.array.bounds = bounds;
1047   if (element)
1048     {
1049       declarator->parameter_pack_p = element->parameter_pack_p;
1050       element->parameter_pack_p = false;
1051     }
1052   else
1053     declarator->parameter_pack_p = false;
1054
1055   return declarator;
1056 }
1057
1058 /* Determine whether the declarator we've seen so far can be a
1059    parameter pack, when followed by an ellipsis.  */
1060 static bool 
1061 declarator_can_be_parameter_pack (cp_declarator *declarator)
1062 {
1063   /* Search for a declarator name, or any other declarator that goes
1064      after the point where the ellipsis could appear in a parameter
1065      pack. If we find any of these, then this declarator can not be
1066      made into a parameter pack.  */
1067   bool found = false;
1068   while (declarator && !found)
1069     {
1070       switch ((int)declarator->kind)
1071         {
1072         case cdk_id:
1073         case cdk_error:
1074         case cdk_array:
1075         case cdk_ptrmem:
1076           found = true;
1077           break;
1078           
1079         default:
1080           declarator = declarator->declarator;
1081           break;
1082         }
1083     }
1084
1085   return !found;
1086 }
1087
1088 cp_parameter_declarator *no_parameters;
1089
1090 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1091    DECLARATOR and DEFAULT_ARGUMENT.  */
1092
1093 cp_parameter_declarator *
1094 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1095                            cp_declarator *declarator,
1096                            tree default_argument)
1097 {
1098   cp_parameter_declarator *parameter;
1099
1100   parameter = ((cp_parameter_declarator *)
1101                alloc_declarator (sizeof (cp_parameter_declarator)));
1102   parameter->next = NULL;
1103   if (decl_specifiers)
1104     parameter->decl_specifiers = *decl_specifiers;
1105   else
1106     clear_decl_specs (&parameter->decl_specifiers);
1107   parameter->declarator = declarator;
1108   parameter->default_argument = default_argument;
1109   parameter->ellipsis_p = false;
1110
1111   return parameter;
1112 }
1113
1114 /* Returns true iff DECLARATOR  is a declaration for a function.  */
1115
1116 static bool
1117 function_declarator_p (const cp_declarator *declarator)
1118 {
1119   while (declarator)
1120     {
1121       if (declarator->kind == cdk_function
1122           && declarator->declarator->kind == cdk_id)
1123         return true;
1124       if (declarator->kind == cdk_id
1125           || declarator->kind == cdk_error)
1126         return false;
1127       declarator = declarator->declarator;
1128     }
1129   return false;
1130 }
1131  
1132 /* The parser.  */
1133
1134 /* Overview
1135    --------
1136
1137    A cp_parser parses the token stream as specified by the C++
1138    grammar.  Its job is purely parsing, not semantic analysis.  For
1139    example, the parser breaks the token stream into declarators,
1140    expressions, statements, and other similar syntactic constructs.
1141    It does not check that the types of the expressions on either side
1142    of an assignment-statement are compatible, or that a function is
1143    not declared with a parameter of type `void'.
1144
1145    The parser invokes routines elsewhere in the compiler to perform
1146    semantic analysis and to build up the abstract syntax tree for the
1147    code processed.
1148
1149    The parser (and the template instantiation code, which is, in a
1150    way, a close relative of parsing) are the only parts of the
1151    compiler that should be calling push_scope and pop_scope, or
1152    related functions.  The parser (and template instantiation code)
1153    keeps track of what scope is presently active; everything else
1154    should simply honor that.  (The code that generates static
1155    initializers may also need to set the scope, in order to check
1156    access control correctly when emitting the initializers.)
1157
1158    Methodology
1159    -----------
1160
1161    The parser is of the standard recursive-descent variety.  Upcoming
1162    tokens in the token stream are examined in order to determine which
1163    production to use when parsing a non-terminal.  Some C++ constructs
1164    require arbitrary look ahead to disambiguate.  For example, it is
1165    impossible, in the general case, to tell whether a statement is an
1166    expression or declaration without scanning the entire statement.
1167    Therefore, the parser is capable of "parsing tentatively."  When the
1168    parser is not sure what construct comes next, it enters this mode.
1169    Then, while we attempt to parse the construct, the parser queues up
1170    error messages, rather than issuing them immediately, and saves the
1171    tokens it consumes.  If the construct is parsed successfully, the
1172    parser "commits", i.e., it issues any queued error messages and
1173    the tokens that were being preserved are permanently discarded.
1174    If, however, the construct is not parsed successfully, the parser
1175    rolls back its state completely so that it can resume parsing using
1176    a different alternative.
1177
1178    Future Improvements
1179    -------------------
1180
1181    The performance of the parser could probably be improved substantially.
1182    We could often eliminate the need to parse tentatively by looking ahead
1183    a little bit.  In some places, this approach might not entirely eliminate
1184    the need to parse tentatively, but it might still speed up the average
1185    case.  */
1186
1187 /* Flags that are passed to some parsing functions.  These values can
1188    be bitwise-ored together.  */
1189
1190 typedef enum cp_parser_flags
1191 {
1192   /* No flags.  */
1193   CP_PARSER_FLAGS_NONE = 0x0,
1194   /* The construct is optional.  If it is not present, then no error
1195      should be issued.  */
1196   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1197   /* When parsing a type-specifier, do not allow user-defined types.  */
1198   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1199 } cp_parser_flags;
1200
1201 /* The different kinds of declarators we want to parse.  */
1202
1203 typedef enum cp_parser_declarator_kind
1204 {
1205   /* We want an abstract declarator.  */
1206   CP_PARSER_DECLARATOR_ABSTRACT,
1207   /* We want a named declarator.  */
1208   CP_PARSER_DECLARATOR_NAMED,
1209   /* We don't mind, but the name must be an unqualified-id.  */
1210   CP_PARSER_DECLARATOR_EITHER
1211 } cp_parser_declarator_kind;
1212
1213 /* The precedence values used to parse binary expressions.  The minimum value
1214    of PREC must be 1, because zero is reserved to quickly discriminate
1215    binary operators from other tokens.  */
1216
1217 enum cp_parser_prec
1218 {
1219   PREC_NOT_OPERATOR,
1220   PREC_LOGICAL_OR_EXPRESSION,
1221   PREC_LOGICAL_AND_EXPRESSION,
1222   PREC_INCLUSIVE_OR_EXPRESSION,
1223   PREC_EXCLUSIVE_OR_EXPRESSION,
1224   PREC_AND_EXPRESSION,
1225   PREC_EQUALITY_EXPRESSION,
1226   PREC_RELATIONAL_EXPRESSION,
1227   PREC_SHIFT_EXPRESSION,
1228   PREC_ADDITIVE_EXPRESSION,
1229   PREC_MULTIPLICATIVE_EXPRESSION,
1230   PREC_PM_EXPRESSION,
1231   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1232 };
1233
1234 /* A mapping from a token type to a corresponding tree node type, with a
1235    precedence value.  */
1236
1237 typedef struct cp_parser_binary_operations_map_node
1238 {
1239   /* The token type.  */
1240   enum cpp_ttype token_type;
1241   /* The corresponding tree code.  */
1242   enum tree_code tree_type;
1243   /* The precedence of this operator.  */
1244   enum cp_parser_prec prec;
1245 } cp_parser_binary_operations_map_node;
1246
1247 /* The status of a tentative parse.  */
1248
1249 typedef enum cp_parser_status_kind
1250 {
1251   /* No errors have occurred.  */
1252   CP_PARSER_STATUS_KIND_NO_ERROR,
1253   /* An error has occurred.  */
1254   CP_PARSER_STATUS_KIND_ERROR,
1255   /* We are committed to this tentative parse, whether or not an error
1256      has occurred.  */
1257   CP_PARSER_STATUS_KIND_COMMITTED
1258 } cp_parser_status_kind;
1259
1260 typedef struct cp_parser_expression_stack_entry
1261 {
1262   /* Left hand side of the binary operation we are currently
1263      parsing.  */
1264   tree lhs;
1265   /* Original tree code for left hand side, if it was a binary
1266      expression itself (used for -Wparentheses).  */
1267   enum tree_code lhs_type;
1268   /* Tree code for the binary operation we are parsing.  */
1269   enum tree_code tree_type;
1270   /* Precedence of the binary operation we are parsing.  */
1271   int prec;
1272 } cp_parser_expression_stack_entry;
1273
1274 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1275    entries because precedence levels on the stack are monotonically
1276    increasing.  */
1277 typedef struct cp_parser_expression_stack_entry
1278   cp_parser_expression_stack[NUM_PREC_VALUES];
1279
1280 /* Context that is saved and restored when parsing tentatively.  */
1281 typedef struct cp_parser_context GTY (())
1282 {
1283   /* If this is a tentative parsing context, the status of the
1284      tentative parse.  */
1285   enum cp_parser_status_kind status;
1286   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1287      that are looked up in this context must be looked up both in the
1288      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1289      the context of the containing expression.  */
1290   tree object_type;
1291
1292   /* The next parsing context in the stack.  */
1293   struct cp_parser_context *next;
1294 } cp_parser_context;
1295
1296 /* Prototypes.  */
1297
1298 /* Constructors and destructors.  */
1299
1300 static cp_parser_context *cp_parser_context_new
1301   (cp_parser_context *);
1302
1303 /* Class variables.  */
1304
1305 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1306
1307 /* The operator-precedence table used by cp_parser_binary_expression.
1308    Transformed into an associative array (binops_by_token) by
1309    cp_parser_new.  */
1310
1311 static const cp_parser_binary_operations_map_node binops[] = {
1312   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1313   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1314
1315   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1316   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1317   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1318
1319   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1320   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1321
1322   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1323   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1324
1325   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1326   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1327   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1328   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1329
1330   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1331   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1332
1333   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1334
1335   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1336
1337   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1338
1339   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1340
1341   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1342 };
1343
1344 /* The same as binops, but initialized by cp_parser_new so that
1345    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1346    for speed.  */
1347 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1348
1349 /* Constructors and destructors.  */
1350
1351 /* Construct a new context.  The context below this one on the stack
1352    is given by NEXT.  */
1353
1354 static cp_parser_context *
1355 cp_parser_context_new (cp_parser_context* next)
1356 {
1357   cp_parser_context *context;
1358
1359   /* Allocate the storage.  */
1360   if (cp_parser_context_free_list != NULL)
1361     {
1362       /* Pull the first entry from the free list.  */
1363       context = cp_parser_context_free_list;
1364       cp_parser_context_free_list = context->next;
1365       memset (context, 0, sizeof (*context));
1366     }
1367   else
1368     context = GGC_CNEW (cp_parser_context);
1369
1370   /* No errors have occurred yet in this context.  */
1371   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1372   /* If this is not the bottomost context, copy information that we
1373      need from the previous context.  */
1374   if (next)
1375     {
1376       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1377          expression, then we are parsing one in this context, too.  */
1378       context->object_type = next->object_type;
1379       /* Thread the stack.  */
1380       context->next = next;
1381     }
1382
1383   return context;
1384 }
1385
1386 /* The cp_parser structure represents the C++ parser.  */
1387
1388 typedef struct cp_parser GTY(())
1389 {
1390   /* The lexer from which we are obtaining tokens.  */
1391   cp_lexer *lexer;
1392
1393   /* The scope in which names should be looked up.  If NULL_TREE, then
1394      we look up names in the scope that is currently open in the
1395      source program.  If non-NULL, this is either a TYPE or
1396      NAMESPACE_DECL for the scope in which we should look.  It can
1397      also be ERROR_MARK, when we've parsed a bogus scope.
1398
1399      This value is not cleared automatically after a name is looked
1400      up, so we must be careful to clear it before starting a new look
1401      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1402      will look up `Z' in the scope of `X', rather than the current
1403      scope.)  Unfortunately, it is difficult to tell when name lookup
1404      is complete, because we sometimes peek at a token, look it up,
1405      and then decide not to consume it.   */
1406   tree scope;
1407
1408   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1409      last lookup took place.  OBJECT_SCOPE is used if an expression
1410      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1411      respectively.  QUALIFYING_SCOPE is used for an expression of the
1412      form "X::Y"; it refers to X.  */
1413   tree object_scope;
1414   tree qualifying_scope;
1415
1416   /* A stack of parsing contexts.  All but the bottom entry on the
1417      stack will be tentative contexts.
1418
1419      We parse tentatively in order to determine which construct is in
1420      use in some situations.  For example, in order to determine
1421      whether a statement is an expression-statement or a
1422      declaration-statement we parse it tentatively as a
1423      declaration-statement.  If that fails, we then reparse the same
1424      token stream as an expression-statement.  */
1425   cp_parser_context *context;
1426
1427   /* True if we are parsing GNU C++.  If this flag is not set, then
1428      GNU extensions are not recognized.  */
1429   bool allow_gnu_extensions_p;
1430
1431   /* TRUE if the `>' token should be interpreted as the greater-than
1432      operator.  FALSE if it is the end of a template-id or
1433      template-parameter-list. In C++0x mode, this flag also applies to
1434      `>>' tokens, which are viewed as two consecutive `>' tokens when
1435      this flag is FALSE.  */
1436   bool greater_than_is_operator_p;
1437
1438   /* TRUE if default arguments are allowed within a parameter list
1439      that starts at this point. FALSE if only a gnu extension makes
1440      them permissible.  */
1441   bool default_arg_ok_p;
1442
1443   /* TRUE if we are parsing an integral constant-expression.  See
1444      [expr.const] for a precise definition.  */
1445   bool integral_constant_expression_p;
1446
1447   /* TRUE if we are parsing an integral constant-expression -- but a
1448      non-constant expression should be permitted as well.  This flag
1449      is used when parsing an array bound so that GNU variable-length
1450      arrays are tolerated.  */
1451   bool allow_non_integral_constant_expression_p;
1452
1453   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1454      been seen that makes the expression non-constant.  */
1455   bool non_integral_constant_expression_p;
1456
1457   /* TRUE if local variable names and `this' are forbidden in the
1458      current context.  */
1459   bool local_variables_forbidden_p;
1460
1461   /* TRUE if the declaration we are parsing is part of a
1462      linkage-specification of the form `extern string-literal
1463      declaration'.  */
1464   bool in_unbraced_linkage_specification_p;
1465
1466   /* TRUE if we are presently parsing a declarator, after the
1467      direct-declarator.  */
1468   bool in_declarator_p;
1469
1470   /* TRUE if we are presently parsing a template-argument-list.  */
1471   bool in_template_argument_list_p;
1472
1473   /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1474      to IN_OMP_BLOCK if parsing OpenMP structured block and
1475      IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1476      this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1477      iteration-statement, OpenMP block or loop within that switch.  */
1478 #define IN_SWITCH_STMT          1
1479 #define IN_ITERATION_STMT       2
1480 #define IN_OMP_BLOCK            4
1481 #define IN_OMP_FOR              8
1482 #define IN_IF_STMT             16
1483   unsigned char in_statement;
1484
1485   /* TRUE if we are presently parsing the body of a switch statement.
1486      Note that this doesn't quite overlap with in_statement above.
1487      The difference relates to giving the right sets of error messages:
1488      "case not in switch" vs "break statement used with OpenMP...".  */
1489   bool in_switch_statement_p;
1490
1491   /* TRUE if we are parsing a type-id in an expression context.  In
1492      such a situation, both "type (expr)" and "type (type)" are valid
1493      alternatives.  */
1494   bool in_type_id_in_expr_p;
1495
1496   /* TRUE if we are currently in a header file where declarations are
1497      implicitly extern "C".  */
1498   bool implicit_extern_c;
1499
1500   /* TRUE if strings in expressions should be translated to the execution
1501      character set.  */
1502   bool translate_strings_p;
1503
1504   /* TRUE if we are presently parsing the body of a function, but not
1505      a local class.  */
1506   bool in_function_body;
1507
1508   /* If non-NULL, then we are parsing a construct where new type
1509      definitions are not permitted.  The string stored here will be
1510      issued as an error message if a type is defined.  */
1511   const char *type_definition_forbidden_message;
1512
1513   /* A list of lists. The outer list is a stack, used for member
1514      functions of local classes. At each level there are two sub-list,
1515      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1516      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1517      TREE_VALUE's. The functions are chained in reverse declaration
1518      order.
1519
1520      The TREE_PURPOSE sublist contains those functions with default
1521      arguments that need post processing, and the TREE_VALUE sublist
1522      contains those functions with definitions that need post
1523      processing.
1524
1525      These lists can only be processed once the outermost class being
1526      defined is complete.  */
1527   tree unparsed_functions_queues;
1528
1529   /* The number of classes whose definitions are currently in
1530      progress.  */
1531   unsigned num_classes_being_defined;
1532
1533   /* The number of template parameter lists that apply directly to the
1534      current declaration.  */
1535   unsigned num_template_parameter_lists;
1536 } cp_parser;
1537
1538 /* Prototypes.  */
1539
1540 /* Constructors and destructors.  */
1541
1542 static cp_parser *cp_parser_new
1543   (void);
1544
1545 /* Routines to parse various constructs.
1546
1547    Those that return `tree' will return the error_mark_node (rather
1548    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1549    Sometimes, they will return an ordinary node if error-recovery was
1550    attempted, even though a parse error occurred.  So, to check
1551    whether or not a parse error occurred, you should always use
1552    cp_parser_error_occurred.  If the construct is optional (indicated
1553    either by an `_opt' in the name of the function that does the
1554    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1555    the construct is not present.  */
1556
1557 /* Lexical conventions [gram.lex]  */
1558
1559 static tree cp_parser_identifier
1560   (cp_parser *);
1561 static tree cp_parser_string_literal
1562   (cp_parser *, bool, bool);
1563
1564 /* Basic concepts [gram.basic]  */
1565
1566 static bool cp_parser_translation_unit
1567   (cp_parser *);
1568
1569 /* Expressions [gram.expr]  */
1570
1571 static tree cp_parser_primary_expression
1572   (cp_parser *, bool, bool, bool, cp_id_kind *);
1573 static tree cp_parser_id_expression
1574   (cp_parser *, bool, bool, bool *, bool, bool);
1575 static tree cp_parser_unqualified_id
1576   (cp_parser *, bool, bool, bool, bool);
1577 static tree cp_parser_nested_name_specifier_opt
1578   (cp_parser *, bool, bool, bool, bool);
1579 static tree cp_parser_nested_name_specifier
1580   (cp_parser *, bool, bool, bool, bool);
1581 static tree cp_parser_class_or_namespace_name
1582   (cp_parser *, bool, bool, bool, bool, bool);
1583 static tree cp_parser_postfix_expression
1584   (cp_parser *, bool, bool);
1585 static tree cp_parser_postfix_open_square_expression
1586   (cp_parser *, tree, bool);
1587 static tree cp_parser_postfix_dot_deref_expression
1588   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1589 static tree cp_parser_parenthesized_expression_list
1590   (cp_parser *, bool, bool, bool, bool *);
1591 static void cp_parser_pseudo_destructor_name
1592   (cp_parser *, tree *, tree *);
1593 static tree cp_parser_unary_expression
1594   (cp_parser *, bool, bool);
1595 static enum tree_code cp_parser_unary_operator
1596   (cp_token *);
1597 static tree cp_parser_new_expression
1598   (cp_parser *);
1599 static tree cp_parser_new_placement
1600   (cp_parser *);
1601 static tree cp_parser_new_type_id
1602   (cp_parser *, tree *);
1603 static cp_declarator *cp_parser_new_declarator_opt
1604   (cp_parser *);
1605 static cp_declarator *cp_parser_direct_new_declarator
1606   (cp_parser *);
1607 static tree cp_parser_new_initializer
1608   (cp_parser *);
1609 static tree cp_parser_delete_expression
1610   (cp_parser *);
1611 static tree cp_parser_cast_expression
1612   (cp_parser *, bool, bool);
1613 static tree cp_parser_binary_expression
1614   (cp_parser *, bool);
1615 static tree cp_parser_question_colon_clause
1616   (cp_parser *, tree);
1617 static tree cp_parser_assignment_expression
1618   (cp_parser *, bool);
1619 static enum tree_code cp_parser_assignment_operator_opt
1620   (cp_parser *);
1621 static tree cp_parser_expression
1622   (cp_parser *, bool);
1623 static tree cp_parser_constant_expression
1624   (cp_parser *, bool, bool *);
1625 static tree cp_parser_builtin_offsetof
1626   (cp_parser *);
1627
1628 /* Statements [gram.stmt.stmt]  */
1629
1630 static void cp_parser_statement
1631   (cp_parser *, tree, bool, bool *);
1632 static void cp_parser_label_for_labeled_statement
1633   (cp_parser *);
1634 static tree cp_parser_expression_statement
1635   (cp_parser *, tree);
1636 static tree cp_parser_compound_statement
1637   (cp_parser *, tree, bool);
1638 static void cp_parser_statement_seq_opt
1639   (cp_parser *, tree);
1640 static tree cp_parser_selection_statement
1641   (cp_parser *, bool *);
1642 static tree cp_parser_condition
1643   (cp_parser *);
1644 static tree cp_parser_iteration_statement
1645   (cp_parser *);
1646 static void cp_parser_for_init_statement
1647   (cp_parser *);
1648 static tree cp_parser_jump_statement
1649   (cp_parser *);
1650 static void cp_parser_declaration_statement
1651   (cp_parser *);
1652
1653 static tree cp_parser_implicitly_scoped_statement
1654   (cp_parser *, bool *);
1655 static void cp_parser_already_scoped_statement
1656   (cp_parser *);
1657
1658 /* Declarations [gram.dcl.dcl] */
1659
1660 static void cp_parser_declaration_seq_opt
1661   (cp_parser *);
1662 static void cp_parser_declaration
1663   (cp_parser *);
1664 static void cp_parser_block_declaration
1665   (cp_parser *, bool);
1666 static void cp_parser_simple_declaration
1667   (cp_parser *, bool);
1668 static void cp_parser_decl_specifier_seq
1669   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1670 static tree cp_parser_storage_class_specifier_opt
1671   (cp_parser *);
1672 static tree cp_parser_function_specifier_opt
1673   (cp_parser *, cp_decl_specifier_seq *);
1674 static tree cp_parser_type_specifier
1675   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1676    int *, bool *);
1677 static tree cp_parser_simple_type_specifier
1678   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1679 static tree cp_parser_type_name
1680   (cp_parser *);
1681 static tree cp_parser_elaborated_type_specifier
1682   (cp_parser *, bool, bool);
1683 static tree cp_parser_enum_specifier
1684   (cp_parser *);
1685 static void cp_parser_enumerator_list
1686   (cp_parser *, tree);
1687 static void cp_parser_enumerator_definition
1688   (cp_parser *, tree);
1689 static tree cp_parser_namespace_name
1690   (cp_parser *);
1691 static void cp_parser_namespace_definition
1692   (cp_parser *);
1693 static void cp_parser_namespace_body
1694   (cp_parser *);
1695 static tree cp_parser_qualified_namespace_specifier
1696   (cp_parser *);
1697 static void cp_parser_namespace_alias_definition
1698   (cp_parser *);
1699 static bool cp_parser_using_declaration
1700   (cp_parser *, bool);
1701 static void cp_parser_using_directive
1702   (cp_parser *);
1703 static void cp_parser_asm_definition
1704   (cp_parser *);
1705 static void cp_parser_linkage_specification
1706   (cp_parser *);
1707 static void cp_parser_static_assert
1708   (cp_parser *, bool);
1709
1710 /* Declarators [gram.dcl.decl] */
1711
1712 static tree cp_parser_init_declarator
1713   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *);
1714 static cp_declarator *cp_parser_declarator
1715   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1716 static cp_declarator *cp_parser_direct_declarator
1717   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1718 static enum tree_code cp_parser_ptr_operator
1719   (cp_parser *, tree *, cp_cv_quals *);
1720 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1721   (cp_parser *);
1722 static tree cp_parser_declarator_id
1723   (cp_parser *, bool);
1724 static tree cp_parser_type_id
1725   (cp_parser *);
1726 static void cp_parser_type_specifier_seq
1727   (cp_parser *, bool, cp_decl_specifier_seq *);
1728 static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1729   (cp_parser *);
1730 static cp_parameter_declarator *cp_parser_parameter_declaration_list
1731   (cp_parser *, bool *);
1732 static cp_parameter_declarator *cp_parser_parameter_declaration
1733   (cp_parser *, bool, bool *);
1734 static void cp_parser_function_body
1735   (cp_parser *);
1736 static tree cp_parser_initializer
1737   (cp_parser *, bool *, bool *);
1738 static tree cp_parser_initializer_clause
1739   (cp_parser *, bool *);
1740 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1741   (cp_parser *, bool *);
1742
1743 static bool cp_parser_ctor_initializer_opt_and_function_body
1744   (cp_parser *);
1745
1746 /* Classes [gram.class] */
1747
1748 static tree cp_parser_class_name
1749   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1750 static tree cp_parser_class_specifier
1751   (cp_parser *);
1752 static tree cp_parser_class_head
1753   (cp_parser *, bool *, tree *, tree *);
1754 static enum tag_types cp_parser_class_key
1755   (cp_parser *);
1756 static void cp_parser_member_specification_opt
1757   (cp_parser *);
1758 static void cp_parser_member_declaration
1759   (cp_parser *);
1760 static tree cp_parser_pure_specifier
1761   (cp_parser *);
1762 static tree cp_parser_constant_initializer
1763   (cp_parser *);
1764
1765 /* Derived classes [gram.class.derived] */
1766
1767 static tree cp_parser_base_clause
1768   (cp_parser *);
1769 static tree cp_parser_base_specifier
1770   (cp_parser *);
1771
1772 /* Special member functions [gram.special] */
1773
1774 static tree cp_parser_conversion_function_id
1775   (cp_parser *);
1776 static tree cp_parser_conversion_type_id
1777   (cp_parser *);
1778 static cp_declarator *cp_parser_conversion_declarator_opt
1779   (cp_parser *);
1780 static bool cp_parser_ctor_initializer_opt
1781   (cp_parser *);
1782 static void cp_parser_mem_initializer_list
1783   (cp_parser *);
1784 static tree cp_parser_mem_initializer
1785   (cp_parser *);
1786 static tree cp_parser_mem_initializer_id
1787   (cp_parser *);
1788
1789 /* Overloading [gram.over] */
1790
1791 static tree cp_parser_operator_function_id
1792   (cp_parser *);
1793 static tree cp_parser_operator
1794   (cp_parser *);
1795
1796 /* Templates [gram.temp] */
1797
1798 static void cp_parser_template_declaration
1799   (cp_parser *, bool);
1800 static tree cp_parser_template_parameter_list
1801   (cp_parser *);
1802 static tree cp_parser_template_parameter
1803   (cp_parser *, bool *, bool *);
1804 static tree cp_parser_type_parameter
1805   (cp_parser *, bool *);
1806 static tree cp_parser_template_id
1807   (cp_parser *, bool, bool, bool);
1808 static tree cp_parser_template_name
1809   (cp_parser *, bool, bool, bool, bool *);
1810 static tree cp_parser_template_argument_list
1811   (cp_parser *);
1812 static tree cp_parser_template_argument
1813   (cp_parser *);
1814 static void cp_parser_explicit_instantiation
1815   (cp_parser *);
1816 static void cp_parser_explicit_specialization
1817   (cp_parser *);
1818
1819 /* Exception handling [gram.exception] */
1820
1821 static tree cp_parser_try_block
1822   (cp_parser *);
1823 static bool cp_parser_function_try_block
1824   (cp_parser *);
1825 static void cp_parser_handler_seq
1826   (cp_parser *);
1827 static void cp_parser_handler
1828   (cp_parser *);
1829 static tree cp_parser_exception_declaration
1830   (cp_parser *);
1831 static tree cp_parser_throw_expression
1832   (cp_parser *);
1833 static tree cp_parser_exception_specification_opt
1834   (cp_parser *);
1835 static tree cp_parser_type_id_list
1836   (cp_parser *);
1837
1838 /* GNU Extensions */
1839
1840 static tree cp_parser_asm_specification_opt
1841   (cp_parser *);
1842 static tree cp_parser_asm_operand_list
1843   (cp_parser *);
1844 static tree cp_parser_asm_clobber_list
1845   (cp_parser *);
1846 static tree cp_parser_attributes_opt
1847   (cp_parser *);
1848 static tree cp_parser_attribute_list
1849   (cp_parser *);
1850 static bool cp_parser_extension_opt
1851   (cp_parser *, int *);
1852 static void cp_parser_label_declaration
1853   (cp_parser *);
1854
1855 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1856 static bool cp_parser_pragma
1857   (cp_parser *, enum pragma_context);
1858
1859 /* Objective-C++ Productions */
1860
1861 static tree cp_parser_objc_message_receiver
1862   (cp_parser *);
1863 static tree cp_parser_objc_message_args
1864   (cp_parser *);
1865 static tree cp_parser_objc_message_expression
1866   (cp_parser *);
1867 static tree cp_parser_objc_encode_expression
1868   (cp_parser *);
1869 static tree cp_parser_objc_defs_expression
1870   (cp_parser *);
1871 static tree cp_parser_objc_protocol_expression
1872   (cp_parser *);
1873 static tree cp_parser_objc_selector_expression
1874   (cp_parser *);
1875 static tree cp_parser_objc_expression
1876   (cp_parser *);
1877 static bool cp_parser_objc_selector_p
1878   (enum cpp_ttype);
1879 static tree cp_parser_objc_selector
1880   (cp_parser *);
1881 static tree cp_parser_objc_protocol_refs_opt
1882   (cp_parser *);
1883 static void cp_parser_objc_declaration
1884   (cp_parser *);
1885 static tree cp_parser_objc_statement
1886   (cp_parser *);
1887
1888 /* Utility Routines */
1889
1890 static tree cp_parser_lookup_name
1891   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *);
1892 static tree cp_parser_lookup_name_simple
1893   (cp_parser *, tree);
1894 static tree cp_parser_maybe_treat_template_as_class
1895   (tree, bool);
1896 static bool cp_parser_check_declarator_template_parameters
1897   (cp_parser *, cp_declarator *);
1898 static bool cp_parser_check_template_parameters
1899   (cp_parser *, unsigned);
1900 static tree cp_parser_simple_cast_expression
1901   (cp_parser *);
1902 static tree cp_parser_global_scope_opt
1903   (cp_parser *, bool);
1904 static bool cp_parser_constructor_declarator_p
1905   (cp_parser *, bool);
1906 static tree cp_parser_function_definition_from_specifiers_and_declarator
1907   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1908 static tree cp_parser_function_definition_after_declarator
1909   (cp_parser *, bool);
1910 static void cp_parser_template_declaration_after_export
1911   (cp_parser *, bool);
1912 static void cp_parser_perform_template_parameter_access_checks
1913   (VEC (deferred_access_check,gc)*);
1914 static tree cp_parser_single_declaration
1915   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool *);
1916 static tree cp_parser_functional_cast
1917   (cp_parser *, tree);
1918 static tree cp_parser_save_member_function_body
1919   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1920 static tree cp_parser_enclosed_template_argument_list
1921   (cp_parser *);
1922 static void cp_parser_save_default_args
1923   (cp_parser *, tree);
1924 static void cp_parser_late_parsing_for_member
1925   (cp_parser *, tree);
1926 static void cp_parser_late_parsing_default_args
1927   (cp_parser *, tree);
1928 static tree cp_parser_sizeof_operand
1929   (cp_parser *, enum rid);
1930 static tree cp_parser_trait_expr
1931   (cp_parser *, enum rid);
1932 static bool cp_parser_declares_only_class_p
1933   (cp_parser *);
1934 static void cp_parser_set_storage_class
1935   (cp_parser *, cp_decl_specifier_seq *, enum rid);
1936 static void cp_parser_set_decl_spec_type
1937   (cp_decl_specifier_seq *, tree, bool);
1938 static bool cp_parser_friend_p
1939   (const cp_decl_specifier_seq *);
1940 static cp_token *cp_parser_require
1941   (cp_parser *, enum cpp_ttype, const char *);
1942 static cp_token *cp_parser_require_keyword
1943   (cp_parser *, enum rid, const char *);
1944 static bool cp_parser_token_starts_function_definition_p
1945   (cp_token *);
1946 static bool cp_parser_next_token_starts_class_definition_p
1947   (cp_parser *);
1948 static bool cp_parser_next_token_ends_template_argument_p
1949   (cp_parser *);
1950 static bool cp_parser_nth_token_starts_template_argument_list_p
1951   (cp_parser *, size_t);
1952 static enum tag_types cp_parser_token_is_class_key
1953   (cp_token *);
1954 static void cp_parser_check_class_key
1955   (enum tag_types, tree type);
1956 static void cp_parser_check_access_in_redeclaration
1957   (tree type);
1958 static bool cp_parser_optional_template_keyword
1959   (cp_parser *);
1960 static void cp_parser_pre_parsed_nested_name_specifier
1961   (cp_parser *);
1962 static void cp_parser_cache_group
1963   (cp_parser *, enum cpp_ttype, unsigned);
1964 static void cp_parser_parse_tentatively
1965   (cp_parser *);
1966 static void cp_parser_commit_to_tentative_parse
1967   (cp_parser *);
1968 static void cp_parser_abort_tentative_parse
1969   (cp_parser *);
1970 static bool cp_parser_parse_definitely
1971   (cp_parser *);
1972 static inline bool cp_parser_parsing_tentatively
1973   (cp_parser *);
1974 static bool cp_parser_uncommitted_to_tentative_parse_p
1975   (cp_parser *);
1976 static void cp_parser_error
1977   (cp_parser *, const char *);
1978 static void cp_parser_name_lookup_error
1979   (cp_parser *, tree, tree, const char *);
1980 static bool cp_parser_simulate_error
1981   (cp_parser *);
1982 static bool cp_parser_check_type_definition
1983   (cp_parser *);
1984 static void cp_parser_check_for_definition_in_return_type
1985   (cp_declarator *, tree);
1986 static void cp_parser_check_for_invalid_template_id
1987   (cp_parser *, tree);
1988 static bool cp_parser_non_integral_constant_expression
1989   (cp_parser *, const char *);
1990 static void cp_parser_diagnose_invalid_type_name
1991   (cp_parser *, tree, tree);
1992 static bool cp_parser_parse_and_diagnose_invalid_type_name
1993   (cp_parser *);
1994 static int cp_parser_skip_to_closing_parenthesis
1995   (cp_parser *, bool, bool, bool);
1996 static void cp_parser_skip_to_end_of_statement
1997   (cp_parser *);
1998 static void cp_parser_consume_semicolon_at_end_of_statement
1999   (cp_parser *);
2000 static void cp_parser_skip_to_end_of_block_or_statement
2001   (cp_parser *);
2002 static void cp_parser_skip_to_closing_brace
2003   (cp_parser *);
2004 static void cp_parser_skip_to_end_of_template_parameter_list
2005   (cp_parser *);
2006 static void cp_parser_skip_to_pragma_eol
2007   (cp_parser*, cp_token *);
2008 static bool cp_parser_error_occurred
2009   (cp_parser *);
2010 static bool cp_parser_allow_gnu_extensions_p
2011   (cp_parser *);
2012 static bool cp_parser_is_string_literal
2013   (cp_token *);
2014 static bool cp_parser_is_keyword
2015   (cp_token *, enum rid);
2016 static tree cp_parser_make_typename_type
2017   (cp_parser *, tree, tree);
2018
2019 /* Returns nonzero if we are parsing tentatively.  */
2020
2021 static inline bool
2022 cp_parser_parsing_tentatively (cp_parser* parser)
2023 {
2024   return parser->context->next != NULL;
2025 }
2026
2027 /* Returns nonzero if TOKEN is a string literal.  */
2028
2029 static bool
2030 cp_parser_is_string_literal (cp_token* token)
2031 {
2032   return (token->type == CPP_STRING || token->type == CPP_WSTRING);
2033 }
2034
2035 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2036
2037 static bool
2038 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2039 {
2040   return token->keyword == keyword;
2041 }
2042
2043 /* If not parsing tentatively, issue a diagnostic of the form
2044       FILE:LINE: MESSAGE before TOKEN
2045    where TOKEN is the next token in the input stream.  MESSAGE
2046    (specified by the caller) is usually of the form "expected
2047    OTHER-TOKEN".  */
2048
2049 static void
2050 cp_parser_error (cp_parser* parser, const char* message)
2051 {
2052   if (!cp_parser_simulate_error (parser))
2053     {
2054       cp_token *token = cp_lexer_peek_token (parser->lexer);
2055       /* This diagnostic makes more sense if it is tagged to the line
2056          of the token we just peeked at.  */
2057       cp_lexer_set_source_position_from_token (token);
2058
2059       if (token->type == CPP_PRAGMA)
2060         {
2061           error ("%<#pragma%> is not allowed here");
2062           cp_parser_skip_to_pragma_eol (parser, token);
2063           return;
2064         }
2065
2066       c_parse_error (message,
2067                      /* Because c_parser_error does not understand
2068                         CPP_KEYWORD, keywords are treated like
2069                         identifiers.  */
2070                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2071                      token->u.value);
2072     }
2073 }
2074
2075 /* Issue an error about name-lookup failing.  NAME is the
2076    IDENTIFIER_NODE DECL is the result of
2077    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2078    the thing that we hoped to find.  */
2079
2080 static void
2081 cp_parser_name_lookup_error (cp_parser* parser,
2082                              tree name,
2083                              tree decl,
2084                              const char* desired)
2085 {
2086   /* If name lookup completely failed, tell the user that NAME was not
2087      declared.  */
2088   if (decl == error_mark_node)
2089     {
2090       if (parser->scope && parser->scope != global_namespace)
2091         error ("%<%E::%E%> has not been declared",
2092                parser->scope, name);
2093       else if (parser->scope == global_namespace)
2094         error ("%<::%E%> has not been declared", name);
2095       else if (parser->object_scope
2096                && !CLASS_TYPE_P (parser->object_scope))
2097         error ("request for member %qE in non-class type %qT",
2098                name, parser->object_scope);
2099       else if (parser->object_scope)
2100         error ("%<%T::%E%> has not been declared",
2101                parser->object_scope, name);
2102       else
2103         error ("%qE has not been declared", name);
2104     }
2105   else if (parser->scope && parser->scope != global_namespace)
2106     error ("%<%E::%E%> %s", parser->scope, name, desired);
2107   else if (parser->scope == global_namespace)
2108     error ("%<::%E%> %s", name, desired);
2109   else
2110     error ("%qE %s", name, desired);
2111 }
2112
2113 /* If we are parsing tentatively, remember that an error has occurred
2114    during this tentative parse.  Returns true if the error was
2115    simulated; false if a message should be issued by the caller.  */
2116
2117 static bool
2118 cp_parser_simulate_error (cp_parser* parser)
2119 {
2120   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2121     {
2122       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2123       return true;
2124     }
2125   return false;
2126 }
2127
2128 /* Check for repeated decl-specifiers.  */
2129
2130 static void
2131 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs)
2132 {
2133   cp_decl_spec ds;
2134
2135   for (ds = ds_first; ds != ds_last; ++ds)
2136     {
2137       unsigned count = decl_specs->specs[(int)ds];
2138       if (count < 2)
2139         continue;
2140       /* The "long" specifier is a special case because of "long long".  */
2141       if (ds == ds_long)
2142         {
2143           if (count > 2)
2144             error ("%<long long long%> is too long for GCC");
2145           else if (pedantic && !in_system_header && warn_long_long)
2146             pedwarn ("ISO C++ does not support %<long long%>");
2147         }
2148       else if (count > 1)
2149         {
2150           static const char *const decl_spec_names[] = {
2151             "signed",
2152             "unsigned",
2153             "short",
2154             "long",
2155             "const",
2156             "volatile",
2157             "restrict",
2158             "inline",
2159             "virtual",
2160             "explicit",
2161             "friend",
2162             "typedef",
2163             "__complex",
2164             "__thread"
2165           };
2166           error ("duplicate %qs", decl_spec_names[(int)ds]);
2167         }
2168     }
2169 }
2170
2171 /* This function is called when a type is defined.  If type
2172    definitions are forbidden at this point, an error message is
2173    issued.  */
2174
2175 static bool
2176 cp_parser_check_type_definition (cp_parser* parser)
2177 {
2178   /* If types are forbidden here, issue a message.  */
2179   if (parser->type_definition_forbidden_message)
2180     {
2181       /* Use `%s' to print the string in case there are any escape
2182          characters in the message.  */
2183       error ("%s", parser->type_definition_forbidden_message);
2184       return false;
2185     }
2186   return true;
2187 }
2188
2189 /* This function is called when the DECLARATOR is processed.  The TYPE
2190    was a type defined in the decl-specifiers.  If it is invalid to
2191    define a type in the decl-specifiers for DECLARATOR, an error is
2192    issued.  */
2193
2194 static void
2195 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2196                                                tree type)
2197 {
2198   /* [dcl.fct] forbids type definitions in return types.
2199      Unfortunately, it's not easy to know whether or not we are
2200      processing a return type until after the fact.  */
2201   while (declarator
2202          && (declarator->kind == cdk_pointer
2203              || declarator->kind == cdk_reference
2204              || declarator->kind == cdk_ptrmem))
2205     declarator = declarator->declarator;
2206   if (declarator
2207       && declarator->kind == cdk_function)
2208     {
2209       error ("new types may not be defined in a return type");
2210       inform ("(perhaps a semicolon is missing after the definition of %qT)",
2211               type);
2212     }
2213 }
2214
2215 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2216    "<" in any valid C++ program.  If the next token is indeed "<",
2217    issue a message warning the user about what appears to be an
2218    invalid attempt to form a template-id.  */
2219
2220 static void
2221 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2222                                          tree type)
2223 {
2224   cp_token_position start = 0;
2225
2226   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2227     {
2228       if (TYPE_P (type))
2229         error ("%qT is not a template", type);
2230       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2231         error ("%qE is not a template", type);
2232       else
2233         error ("invalid template-id");
2234       /* Remember the location of the invalid "<".  */
2235       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2236         start = cp_lexer_token_position (parser->lexer, true);
2237       /* Consume the "<".  */
2238       cp_lexer_consume_token (parser->lexer);
2239       /* Parse the template arguments.  */
2240       cp_parser_enclosed_template_argument_list (parser);
2241       /* Permanently remove the invalid template arguments so that
2242          this error message is not issued again.  */
2243       if (start)
2244         cp_lexer_purge_tokens_after (parser->lexer, start);
2245     }
2246 }
2247
2248 /* If parsing an integral constant-expression, issue an error message
2249    about the fact that THING appeared and return true.  Otherwise,
2250    return false.  In either case, set
2251    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2252
2253 static bool
2254 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2255                                             const char *thing)
2256 {
2257   parser->non_integral_constant_expression_p = true;
2258   if (parser->integral_constant_expression_p)
2259     {
2260       if (!parser->allow_non_integral_constant_expression_p)
2261         {
2262           error ("%s cannot appear in a constant-expression", thing);
2263           return true;
2264         }
2265     }
2266   return false;
2267 }
2268
2269 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2270    qualifying scope (or NULL, if none) for ID.  This function commits
2271    to the current active tentative parse, if any.  (Otherwise, the
2272    problematic construct might be encountered again later, resulting
2273    in duplicate error messages.)  */
2274
2275 static void
2276 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
2277 {
2278   tree decl, old_scope;
2279   /* Try to lookup the identifier.  */
2280   old_scope = parser->scope;
2281   parser->scope = scope;
2282   decl = cp_parser_lookup_name_simple (parser, id);
2283   parser->scope = old_scope;
2284   /* If the lookup found a template-name, it means that the user forgot
2285   to specify an argument list. Emit a useful error message.  */
2286   if (TREE_CODE (decl) == TEMPLATE_DECL)
2287     error ("invalid use of template-name %qE without an argument list", decl);
2288   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2289     error ("invalid use of destructor %qD as a type", id);
2290   else if (TREE_CODE (decl) == TYPE_DECL)
2291     /* Something like 'unsigned A a;'  */
2292     error ("invalid combination of multiple type-specifiers");
2293   else if (!parser->scope)
2294     {
2295       /* Issue an error message.  */
2296       error ("%qE does not name a type", id);
2297       /* If we're in a template class, it's possible that the user was
2298          referring to a type from a base class.  For example:
2299
2300            template <typename T> struct A { typedef T X; };
2301            template <typename T> struct B : public A<T> { X x; };
2302
2303          The user should have said "typename A<T>::X".  */
2304       if (processing_template_decl && current_class_type
2305           && TYPE_BINFO (current_class_type))
2306         {
2307           tree b;
2308
2309           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2310                b;
2311                b = TREE_CHAIN (b))
2312             {
2313               tree base_type = BINFO_TYPE (b);
2314               if (CLASS_TYPE_P (base_type)
2315                   && dependent_type_p (base_type))
2316                 {
2317                   tree field;
2318                   /* Go from a particular instantiation of the
2319                      template (which will have an empty TYPE_FIELDs),
2320                      to the main version.  */
2321                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2322                   for (field = TYPE_FIELDS (base_type);
2323                        field;
2324                        field = TREE_CHAIN (field))
2325                     if (TREE_CODE (field) == TYPE_DECL
2326                         && DECL_NAME (field) == id)
2327                       {
2328                         inform ("(perhaps %<typename %T::%E%> was intended)",
2329                                 BINFO_TYPE (b), id);
2330                         break;
2331                       }
2332                   if (field)
2333                     break;
2334                 }
2335             }
2336         }
2337     }
2338   /* Here we diagnose qualified-ids where the scope is actually correct,
2339      but the identifier does not resolve to a valid type name.  */
2340   else if (parser->scope != error_mark_node)
2341     {
2342       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2343         error ("%qE in namespace %qE does not name a type",
2344                id, parser->scope);
2345       else if (TYPE_P (parser->scope))
2346         error ("%qE in class %qT does not name a type", id, parser->scope);
2347       else
2348         gcc_unreachable ();
2349     }
2350   cp_parser_commit_to_tentative_parse (parser);
2351 }
2352
2353 /* Check for a common situation where a type-name should be present,
2354    but is not, and issue a sensible error message.  Returns true if an
2355    invalid type-name was detected.
2356
2357    The situation handled by this function are variable declarations of the
2358    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2359    Usually, `ID' should name a type, but if we got here it means that it
2360    does not. We try to emit the best possible error message depending on
2361    how exactly the id-expression looks like.  */
2362
2363 static bool
2364 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2365 {
2366   tree id;
2367
2368   cp_parser_parse_tentatively (parser);
2369   id = cp_parser_id_expression (parser,
2370                                 /*template_keyword_p=*/false,
2371                                 /*check_dependency_p=*/true,
2372                                 /*template_p=*/NULL,
2373                                 /*declarator_p=*/true,
2374                                 /*optional_p=*/false);
2375   /* After the id-expression, there should be a plain identifier,
2376      otherwise this is not a simple variable declaration. Also, if
2377      the scope is dependent, we cannot do much.  */
2378   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2379       || (parser->scope && TYPE_P (parser->scope)
2380           && dependent_type_p (parser->scope))
2381       || TREE_CODE (id) == TYPE_DECL)
2382     {
2383       cp_parser_abort_tentative_parse (parser);
2384       return false;
2385     }
2386   if (!cp_parser_parse_definitely (parser))
2387     return false;
2388
2389   /* Emit a diagnostic for the invalid type.  */
2390   cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2391   /* Skip to the end of the declaration; there's no point in
2392      trying to process it.  */
2393   cp_parser_skip_to_end_of_block_or_statement (parser);
2394   return true;
2395 }
2396
2397 /* Consume tokens up to, and including, the next non-nested closing `)'.
2398    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2399    are doing error recovery. Returns -1 if OR_COMMA is true and we
2400    found an unnested comma.  */
2401
2402 static int
2403 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2404                                        bool recovering,
2405                                        bool or_comma,
2406                                        bool consume_paren)
2407 {
2408   unsigned paren_depth = 0;
2409   unsigned brace_depth = 0;
2410
2411   if (recovering && !or_comma
2412       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2413     return 0;
2414
2415   while (true)
2416     {
2417       cp_token * token = cp_lexer_peek_token (parser->lexer);
2418
2419       switch (token->type)
2420         {
2421         case CPP_EOF:
2422         case CPP_PRAGMA_EOL:
2423           /* If we've run out of tokens, then there is no closing `)'.  */
2424           return 0;
2425
2426         case CPP_SEMICOLON:
2427           /* This matches the processing in skip_to_end_of_statement.  */
2428           if (!brace_depth)
2429             return 0;
2430           break;
2431
2432         case CPP_OPEN_BRACE:
2433           ++brace_depth;
2434           break;
2435         case CPP_CLOSE_BRACE:
2436           if (!brace_depth--)
2437             return 0;
2438           break;
2439
2440         case CPP_COMMA:
2441           if (recovering && or_comma && !brace_depth && !paren_depth)
2442             return -1;
2443           break;
2444
2445         case CPP_OPEN_PAREN:
2446           if (!brace_depth)
2447             ++paren_depth;
2448           break;
2449
2450         case CPP_CLOSE_PAREN:
2451           if (!brace_depth && !paren_depth--)
2452             {
2453               if (consume_paren)
2454                 cp_lexer_consume_token (parser->lexer);
2455               return 1;
2456             }
2457           break;
2458
2459         default:
2460           break;
2461         }
2462
2463       /* Consume the token.  */
2464       cp_lexer_consume_token (parser->lexer);
2465     }
2466 }
2467
2468 /* Consume tokens until we reach the end of the current statement.
2469    Normally, that will be just before consuming a `;'.  However, if a
2470    non-nested `}' comes first, then we stop before consuming that.  */
2471
2472 static void
2473 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2474 {
2475   unsigned nesting_depth = 0;
2476
2477   while (true)
2478     {
2479       cp_token *token = cp_lexer_peek_token (parser->lexer);
2480
2481       switch (token->type)
2482         {
2483         case CPP_EOF:
2484         case CPP_PRAGMA_EOL:
2485           /* If we've run out of tokens, stop.  */
2486           return;
2487
2488         case CPP_SEMICOLON:
2489           /* If the next token is a `;', we have reached the end of the
2490              statement.  */
2491           if (!nesting_depth)
2492             return;
2493           break;
2494
2495         case CPP_CLOSE_BRACE:
2496           /* If this is a non-nested '}', stop before consuming it.
2497              That way, when confronted with something like:
2498
2499                { 3 + }
2500
2501              we stop before consuming the closing '}', even though we
2502              have not yet reached a `;'.  */
2503           if (nesting_depth == 0)
2504             return;
2505
2506           /* If it is the closing '}' for a block that we have
2507              scanned, stop -- but only after consuming the token.
2508              That way given:
2509
2510                 void f g () { ... }
2511                 typedef int I;
2512
2513              we will stop after the body of the erroneously declared
2514              function, but before consuming the following `typedef'
2515              declaration.  */
2516           if (--nesting_depth == 0)
2517             {
2518               cp_lexer_consume_token (parser->lexer);
2519               return;
2520             }
2521
2522         case CPP_OPEN_BRACE:
2523           ++nesting_depth;
2524           break;
2525
2526         default:
2527           break;
2528         }
2529
2530       /* Consume the token.  */
2531       cp_lexer_consume_token (parser->lexer);
2532     }
2533 }
2534
2535 /* This function is called at the end of a statement or declaration.
2536    If the next token is a semicolon, it is consumed; otherwise, error
2537    recovery is attempted.  */
2538
2539 static void
2540 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2541 {
2542   /* Look for the trailing `;'.  */
2543   if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2544     {
2545       /* If there is additional (erroneous) input, skip to the end of
2546          the statement.  */
2547       cp_parser_skip_to_end_of_statement (parser);
2548       /* If the next token is now a `;', consume it.  */
2549       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2550         cp_lexer_consume_token (parser->lexer);
2551     }
2552 }
2553
2554 /* Skip tokens until we have consumed an entire block, or until we
2555    have consumed a non-nested `;'.  */
2556
2557 static void
2558 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2559 {
2560   int nesting_depth = 0;
2561
2562   while (nesting_depth >= 0)
2563     {
2564       cp_token *token = cp_lexer_peek_token (parser->lexer);
2565
2566       switch (token->type)
2567         {
2568         case CPP_EOF:
2569         case CPP_PRAGMA_EOL:
2570           /* If we've run out of tokens, stop.  */
2571           return;
2572
2573         case CPP_SEMICOLON:
2574           /* Stop if this is an unnested ';'. */
2575           if (!nesting_depth)
2576             nesting_depth = -1;
2577           break;
2578
2579         case CPP_CLOSE_BRACE:
2580           /* Stop if this is an unnested '}', or closes the outermost
2581              nesting level.  */
2582           nesting_depth--;
2583           if (!nesting_depth)
2584             nesting_depth = -1;
2585           break;
2586
2587         case CPP_OPEN_BRACE:
2588           /* Nest. */
2589           nesting_depth++;
2590           break;
2591
2592         default:
2593           break;
2594         }
2595
2596       /* Consume the token.  */
2597       cp_lexer_consume_token (parser->lexer);
2598     }
2599 }
2600
2601 /* Skip tokens until a non-nested closing curly brace is the next
2602    token.  */
2603
2604 static void
2605 cp_parser_skip_to_closing_brace (cp_parser *parser)
2606 {
2607   unsigned nesting_depth = 0;
2608
2609   while (true)
2610     {
2611       cp_token *token = cp_lexer_peek_token (parser->lexer);
2612
2613       switch (token->type)
2614         {
2615         case CPP_EOF:
2616         case CPP_PRAGMA_EOL:
2617           /* If we've run out of tokens, stop.  */
2618           return;
2619
2620         case CPP_CLOSE_BRACE:
2621           /* If the next token is a non-nested `}', then we have reached
2622              the end of the current block.  */
2623           if (nesting_depth-- == 0)
2624             return;
2625           break;
2626
2627         case CPP_OPEN_BRACE:
2628           /* If it the next token is a `{', then we are entering a new
2629              block.  Consume the entire block.  */
2630           ++nesting_depth;
2631           break;
2632
2633         default:
2634           break;
2635         }
2636
2637       /* Consume the token.  */
2638       cp_lexer_consume_token (parser->lexer);
2639     }
2640 }
2641
2642 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2643    parameter is the PRAGMA token, allowing us to purge the entire pragma
2644    sequence.  */
2645
2646 static void
2647 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2648 {
2649   cp_token *token;
2650
2651   parser->lexer->in_pragma = false;
2652
2653   do
2654     token = cp_lexer_consume_token (parser->lexer);
2655   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2656
2657   /* Ensure that the pragma is not parsed again.  */
2658   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2659 }
2660
2661 /* Require pragma end of line, resyncing with it as necessary.  The
2662    arguments are as for cp_parser_skip_to_pragma_eol.  */
2663
2664 static void
2665 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2666 {
2667   parser->lexer->in_pragma = false;
2668   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2669     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2670 }
2671
2672 /* This is a simple wrapper around make_typename_type. When the id is
2673    an unresolved identifier node, we can provide a superior diagnostic
2674    using cp_parser_diagnose_invalid_type_name.  */
2675
2676 static tree
2677 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2678 {
2679   tree result;
2680   if (TREE_CODE (id) == IDENTIFIER_NODE)
2681     {
2682       result = make_typename_type (scope, id, typename_type,
2683                                    /*complain=*/tf_none);
2684       if (result == error_mark_node)
2685         cp_parser_diagnose_invalid_type_name (parser, scope, id);
2686       return result;
2687     }
2688   return make_typename_type (scope, id, typename_type, tf_error);
2689 }
2690
2691
2692 /* Create a new C++ parser.  */
2693
2694 static cp_parser *
2695 cp_parser_new (void)
2696 {
2697   cp_parser *parser;
2698   cp_lexer *lexer;
2699   unsigned i;
2700
2701   /* cp_lexer_new_main is called before calling ggc_alloc because
2702      cp_lexer_new_main might load a PCH file.  */
2703   lexer = cp_lexer_new_main ();
2704
2705   /* Initialize the binops_by_token so that we can get the tree
2706      directly from the token.  */
2707   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2708     binops_by_token[binops[i].token_type] = binops[i];
2709
2710   parser = GGC_CNEW (cp_parser);
2711   parser->lexer = lexer;
2712   parser->context = cp_parser_context_new (NULL);
2713
2714   /* For now, we always accept GNU extensions.  */
2715   parser->allow_gnu_extensions_p = 1;
2716
2717   /* The `>' token is a greater-than operator, not the end of a
2718      template-id.  */
2719   parser->greater_than_is_operator_p = true;
2720
2721   parser->default_arg_ok_p = true;
2722
2723   /* We are not parsing a constant-expression.  */
2724   parser->integral_constant_expression_p = false;
2725   parser->allow_non_integral_constant_expression_p = false;
2726   parser->non_integral_constant_expression_p = false;
2727
2728   /* Local variable names are not forbidden.  */
2729   parser->local_variables_forbidden_p = false;
2730
2731   /* We are not processing an `extern "C"' declaration.  */
2732   parser->in_unbraced_linkage_specification_p = false;
2733
2734   /* We are not processing a declarator.  */
2735   parser->in_declarator_p = false;
2736
2737   /* We are not processing a template-argument-list.  */
2738   parser->in_template_argument_list_p = false;
2739
2740   /* We are not in an iteration statement.  */
2741   parser->in_statement = 0;
2742
2743   /* We are not in a switch statement.  */
2744   parser->in_switch_statement_p = false;
2745
2746   /* We are not parsing a type-id inside an expression.  */
2747   parser->in_type_id_in_expr_p = false;
2748
2749   /* Declarations aren't implicitly extern "C".  */
2750   parser->implicit_extern_c = false;
2751
2752   /* String literals should be translated to the execution character set.  */
2753   parser->translate_strings_p = true;
2754
2755   /* We are not parsing a function body.  */
2756   parser->in_function_body = false;
2757
2758   /* The unparsed function queue is empty.  */
2759   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2760
2761   /* There are no classes being defined.  */
2762   parser->num_classes_being_defined = 0;
2763
2764   /* No template parameters apply.  */
2765   parser->num_template_parameter_lists = 0;
2766
2767   return parser;
2768 }
2769
2770 /* Create a cp_lexer structure which will emit the tokens in CACHE
2771    and push it onto the parser's lexer stack.  This is used for delayed
2772    parsing of in-class method bodies and default arguments, and should
2773    not be confused with tentative parsing.  */
2774 static void
2775 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2776 {
2777   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2778   lexer->next = parser->lexer;
2779   parser->lexer = lexer;
2780
2781   /* Move the current source position to that of the first token in the
2782      new lexer.  */
2783   cp_lexer_set_source_position_from_token (lexer->next_token);
2784 }
2785
2786 /* Pop the top lexer off the parser stack.  This is never used for the
2787    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2788 static void
2789 cp_parser_pop_lexer (cp_parser *parser)
2790 {
2791   cp_lexer *lexer = parser->lexer;
2792   parser->lexer = lexer->next;
2793   cp_lexer_destroy (lexer);
2794
2795   /* Put the current source position back where it was before this
2796      lexer was pushed.  */
2797   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2798 }
2799
2800 /* Lexical conventions [gram.lex]  */
2801
2802 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2803    identifier.  */
2804
2805 static tree
2806 cp_parser_identifier (cp_parser* parser)
2807 {
2808   cp_token *token;
2809
2810   /* Look for the identifier.  */
2811   token = cp_parser_require (parser, CPP_NAME, "identifier");
2812   /* Return the value.  */
2813   return token ? token->u.value : error_mark_node;
2814 }
2815
2816 /* Parse a sequence of adjacent string constants.  Returns a
2817    TREE_STRING representing the combined, nul-terminated string
2818    constant.  If TRANSLATE is true, translate the string to the
2819    execution character set.  If WIDE_OK is true, a wide string is
2820    invalid here.
2821
2822    C++98 [lex.string] says that if a narrow string literal token is
2823    adjacent to a wide string literal token, the behavior is undefined.
2824    However, C99 6.4.5p4 says that this results in a wide string literal.
2825    We follow C99 here, for consistency with the C front end.
2826
2827    This code is largely lifted from lex_string() in c-lex.c.
2828
2829    FUTURE: ObjC++ will need to handle @-strings here.  */
2830 static tree
2831 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2832 {
2833   tree value;
2834   bool wide = false;
2835   size_t count;
2836   struct obstack str_ob;
2837   cpp_string str, istr, *strs;
2838   cp_token *tok;
2839
2840   tok = cp_lexer_peek_token (parser->lexer);
2841   if (!cp_parser_is_string_literal (tok))
2842     {
2843       cp_parser_error (parser, "expected string-literal");
2844       return error_mark_node;
2845     }
2846
2847   /* Try to avoid the overhead of creating and destroying an obstack
2848      for the common case of just one string.  */
2849   if (!cp_parser_is_string_literal
2850       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2851     {
2852       cp_lexer_consume_token (parser->lexer);
2853
2854       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2855       str.len = TREE_STRING_LENGTH (tok->u.value);
2856       count = 1;
2857       if (tok->type == CPP_WSTRING)
2858         wide = true;
2859
2860       strs = &str;
2861     }
2862   else
2863     {
2864       gcc_obstack_init (&str_ob);
2865       count = 0;
2866
2867       do
2868         {
2869           cp_lexer_consume_token (parser->lexer);
2870           count++;
2871           str.text = (unsigned char *)TREE_STRING_POINTER (tok->u.value);
2872           str.len = TREE_STRING_LENGTH (tok->u.value);
2873           if (tok->type == CPP_WSTRING)
2874             wide = true;
2875
2876           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2877
2878           tok = cp_lexer_peek_token (parser->lexer);
2879         }
2880       while (cp_parser_is_string_literal (tok));
2881
2882       strs = (cpp_string *) obstack_finish (&str_ob);
2883     }
2884
2885   if (wide && !wide_ok)
2886     {
2887       cp_parser_error (parser, "a wide string is invalid in this context");
2888       wide = false;
2889     }
2890
2891   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2892       (parse_in, strs, count, &istr, wide))
2893     {
2894       value = build_string (istr.len, (char *)istr.text);
2895       free ((void *)istr.text);
2896
2897       TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
2898       value = fix_string_type (value);
2899     }
2900   else
2901     /* cpp_interpret_string has issued an error.  */
2902     value = error_mark_node;
2903
2904   if (count > 1)
2905     obstack_free (&str_ob, 0);
2906
2907   return value;
2908 }
2909
2910
2911 /* Basic concepts [gram.basic]  */
2912
2913 /* Parse a translation-unit.
2914
2915    translation-unit:
2916      declaration-seq [opt]
2917
2918    Returns TRUE if all went well.  */
2919
2920 static bool
2921 cp_parser_translation_unit (cp_parser* parser)
2922 {
2923   /* The address of the first non-permanent object on the declarator
2924      obstack.  */
2925   static void *declarator_obstack_base;
2926
2927   bool success;
2928
2929   /* Create the declarator obstack, if necessary.  */
2930   if (!cp_error_declarator)
2931     {
2932       gcc_obstack_init (&declarator_obstack);
2933       /* Create the error declarator.  */
2934       cp_error_declarator = make_declarator (cdk_error);
2935       /* Create the empty parameter list.  */
2936       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
2937       /* Remember where the base of the declarator obstack lies.  */
2938       declarator_obstack_base = obstack_next_free (&declarator_obstack);
2939     }
2940
2941   cp_parser_declaration_seq_opt (parser);
2942
2943   /* If there are no tokens left then all went well.  */
2944   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2945     {
2946       /* Get rid of the token array; we don't need it any more.  */
2947       cp_lexer_destroy (parser->lexer);
2948       parser->lexer = NULL;
2949
2950       /* This file might have been a context that's implicitly extern
2951          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
2952       if (parser->implicit_extern_c)
2953         {
2954           pop_lang_context ();
2955           parser->implicit_extern_c = false;
2956         }
2957
2958       /* Finish up.  */
2959       finish_translation_unit ();
2960
2961       success = true;
2962     }
2963   else
2964     {
2965       cp_parser_error (parser, "expected declaration");
2966       success = false;
2967     }
2968
2969   /* Make sure the declarator obstack was fully cleaned up.  */
2970   gcc_assert (obstack_next_free (&declarator_obstack)
2971               == declarator_obstack_base);
2972
2973   /* All went well.  */
2974   return success;
2975 }
2976
2977 /* Expressions [gram.expr] */
2978
2979 /* Parse a primary-expression.
2980
2981    primary-expression:
2982      literal
2983      this
2984      ( expression )
2985      id-expression
2986
2987    GNU Extensions:
2988
2989    primary-expression:
2990      ( compound-statement )
2991      __builtin_va_arg ( assignment-expression , type-id )
2992      __builtin_offsetof ( type-id , offsetof-expression )
2993
2994    C++ Extensions:
2995      __has_nothrow_assign ( type-id )   
2996      __has_nothrow_constructor ( type-id )
2997      __has_nothrow_copy ( type-id )
2998      __has_trivial_assign ( type-id )   
2999      __has_trivial_constructor ( type-id )
3000      __has_trivial_copy ( type-id )
3001      __has_trivial_destructor ( type-id )
3002      __has_virtual_destructor ( type-id )     
3003      __is_abstract ( type-id )
3004      __is_base_of ( type-id , type-id )
3005      __is_class ( type-id )
3006      __is_convertible_to ( type-id , type-id )     
3007      __is_empty ( type-id )
3008      __is_enum ( type-id )
3009      __is_pod ( type-id )
3010      __is_polymorphic ( type-id )
3011      __is_union ( type-id )
3012
3013    Objective-C++ Extension:
3014
3015    primary-expression:
3016      objc-expression
3017
3018    literal:
3019      __null
3020
3021    ADDRESS_P is true iff this expression was immediately preceded by
3022    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3023    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3024    true iff this expression is a template argument.
3025
3026    Returns a representation of the expression.  Upon return, *IDK
3027    indicates what kind of id-expression (if any) was present.  */
3028
3029 static tree
3030 cp_parser_primary_expression (cp_parser *parser,
3031                               bool address_p,
3032                               bool cast_p,
3033                               bool template_arg_p,
3034                               cp_id_kind *idk)
3035 {
3036   cp_token *token;
3037
3038   /* Assume the primary expression is not an id-expression.  */
3039   *idk = CP_ID_KIND_NONE;
3040
3041   /* Peek at the next token.  */
3042   token = cp_lexer_peek_token (parser->lexer);
3043   switch (token->type)
3044     {
3045       /* literal:
3046            integer-literal
3047            character-literal
3048            floating-literal
3049            string-literal
3050            boolean-literal  */
3051     case CPP_CHAR:
3052     case CPP_WCHAR:
3053     case CPP_NUMBER:
3054       token = cp_lexer_consume_token (parser->lexer);
3055       /* Floating-point literals are only allowed in an integral
3056          constant expression if they are cast to an integral or
3057          enumeration type.  */
3058       if (TREE_CODE (token->u.value) == REAL_CST
3059           && parser->integral_constant_expression_p
3060           && pedantic)
3061         {
3062           /* CAST_P will be set even in invalid code like "int(2.7 +
3063              ...)".   Therefore, we have to check that the next token
3064              is sure to end the cast.  */
3065           if (cast_p)
3066             {
3067               cp_token *next_token;
3068
3069               next_token = cp_lexer_peek_token (parser->lexer);
3070               if (/* The comma at the end of an
3071                      enumerator-definition.  */
3072                   next_token->type != CPP_COMMA
3073                   /* The curly brace at the end of an enum-specifier.  */
3074                   && next_token->type != CPP_CLOSE_BRACE
3075                   /* The end of a statement.  */
3076                   && next_token->type != CPP_SEMICOLON
3077                   /* The end of the cast-expression.  */
3078                   && next_token->type != CPP_CLOSE_PAREN
3079                   /* The end of an array bound.  */
3080                   && next_token->type != CPP_CLOSE_SQUARE
3081                   /* The closing ">" in a template-argument-list.  */
3082                   && (next_token->type != CPP_GREATER
3083                       || parser->greater_than_is_operator_p)
3084                   /* C++0x only: A ">>" treated like two ">" tokens,
3085                      in a template-argument-list.  */
3086                   && (next_token->type != CPP_RSHIFT
3087                       || !flag_cpp0x
3088                       || parser->greater_than_is_operator_p))
3089                 cast_p = false;
3090             }
3091
3092           /* If we are within a cast, then the constraint that the
3093              cast is to an integral or enumeration type will be
3094              checked at that point.  If we are not within a cast, then
3095              this code is invalid.  */
3096           if (!cast_p)
3097             cp_parser_non_integral_constant_expression
3098               (parser, "floating-point literal");
3099         }
3100       return token->u.value;
3101
3102     case CPP_STRING:
3103     case CPP_WSTRING:
3104       /* ??? Should wide strings be allowed when parser->translate_strings_p
3105          is false (i.e. in attributes)?  If not, we can kill the third
3106          argument to cp_parser_string_literal.  */
3107       return cp_parser_string_literal (parser,
3108                                        parser->translate_strings_p,
3109                                        true);
3110
3111     case CPP_OPEN_PAREN:
3112       {
3113         tree expr;
3114         bool saved_greater_than_is_operator_p;
3115
3116         /* Consume the `('.  */
3117         cp_lexer_consume_token (parser->lexer);
3118         /* Within a parenthesized expression, a `>' token is always
3119            the greater-than operator.  */
3120         saved_greater_than_is_operator_p
3121           = parser->greater_than_is_operator_p;
3122         parser->greater_than_is_operator_p = true;
3123         /* If we see `( { ' then we are looking at the beginning of
3124            a GNU statement-expression.  */
3125         if (cp_parser_allow_gnu_extensions_p (parser)
3126             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3127           {
3128             /* Statement-expressions are not allowed by the standard.  */
3129             if (pedantic)
3130               pedwarn ("ISO C++ forbids braced-groups within expressions");
3131
3132             /* And they're not allowed outside of a function-body; you
3133                cannot, for example, write:
3134
3135                  int i = ({ int j = 3; j + 1; });
3136
3137                at class or namespace scope.  */
3138             if (!parser->in_function_body)
3139               {
3140                 error ("statement-expressions are allowed only inside functions");
3141                 cp_parser_skip_to_end_of_block_or_statement (parser);
3142                 expr = error_mark_node;
3143               }
3144             else
3145               {
3146                 /* Start the statement-expression.  */
3147                 expr = begin_stmt_expr ();
3148                 /* Parse the compound-statement.  */
3149                 cp_parser_compound_statement (parser, expr, false);
3150                 /* Finish up.  */
3151                 expr = finish_stmt_expr (expr, false);
3152               }
3153           }
3154         else
3155           {
3156             /* Parse the parenthesized expression.  */
3157             expr = cp_parser_expression (parser, cast_p);
3158             /* Let the front end know that this expression was
3159                enclosed in parentheses. This matters in case, for
3160                example, the expression is of the form `A::B', since
3161                `&A::B' might be a pointer-to-member, but `&(A::B)' is
3162                not.  */
3163             finish_parenthesized_expr (expr);
3164           }
3165         /* The `>' token might be the end of a template-id or
3166            template-parameter-list now.  */
3167         parser->greater_than_is_operator_p
3168           = saved_greater_than_is_operator_p;
3169         /* Consume the `)'.  */
3170         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
3171           cp_parser_skip_to_end_of_statement (parser);
3172
3173         return expr;
3174       }
3175
3176     case CPP_KEYWORD:
3177       switch (token->keyword)
3178         {
3179           /* These two are the boolean literals.  */
3180         case RID_TRUE:
3181           cp_lexer_consume_token (parser->lexer);
3182           return boolean_true_node;
3183         case RID_FALSE:
3184           cp_lexer_consume_token (parser->lexer);
3185           return boolean_false_node;
3186
3187           /* The `__null' literal.  */
3188         case RID_NULL:
3189           cp_lexer_consume_token (parser->lexer);
3190           return null_node;
3191
3192           /* Recognize the `this' keyword.  */
3193         case RID_THIS:
3194           cp_lexer_consume_token (parser->lexer);
3195           if (parser->local_variables_forbidden_p)
3196             {
3197               error ("%<this%> may not be used in this context");
3198               return error_mark_node;
3199             }
3200           /* Pointers cannot appear in constant-expressions.  */
3201           if (cp_parser_non_integral_constant_expression (parser,
3202                                                           "`this'"))
3203             return error_mark_node;
3204           return finish_this_expr ();
3205
3206           /* The `operator' keyword can be the beginning of an
3207              id-expression.  */
3208         case RID_OPERATOR:
3209           goto id_expression;
3210
3211         case RID_FUNCTION_NAME:
3212         case RID_PRETTY_FUNCTION_NAME:
3213         case RID_C99_FUNCTION_NAME:
3214           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3215              __func__ are the names of variables -- but they are
3216              treated specially.  Therefore, they are handled here,
3217              rather than relying on the generic id-expression logic
3218              below.  Grammatically, these names are id-expressions.
3219
3220              Consume the token.  */
3221           token = cp_lexer_consume_token (parser->lexer);
3222           /* Look up the name.  */
3223           return finish_fname (token->u.value);
3224
3225         case RID_VA_ARG:
3226           {
3227             tree expression;
3228             tree type;
3229
3230             /* The `__builtin_va_arg' construct is used to handle
3231                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3232             cp_lexer_consume_token (parser->lexer);
3233             /* Look for the opening `('.  */
3234             cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3235             /* Now, parse the assignment-expression.  */
3236             expression = cp_parser_assignment_expression (parser,
3237                                                           /*cast_p=*/false);
3238             /* Look for the `,'.  */
3239             cp_parser_require (parser, CPP_COMMA, "`,'");
3240             /* Parse the type-id.  */
3241             type = cp_parser_type_id (parser);
3242             /* Look for the closing `)'.  */
3243             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3244             /* Using `va_arg' in a constant-expression is not
3245                allowed.  */
3246             if (cp_parser_non_integral_constant_expression (parser,
3247                                                             "`va_arg'"))
3248               return error_mark_node;
3249             return build_x_va_arg (expression, type);
3250           }
3251
3252         case RID_OFFSETOF:
3253           return cp_parser_builtin_offsetof (parser);
3254
3255         case RID_HAS_NOTHROW_ASSIGN:
3256         case RID_HAS_NOTHROW_CONSTRUCTOR:
3257         case RID_HAS_NOTHROW_COPY:        
3258         case RID_HAS_TRIVIAL_ASSIGN:
3259         case RID_HAS_TRIVIAL_CONSTRUCTOR:
3260         case RID_HAS_TRIVIAL_COPY:        
3261         case RID_HAS_TRIVIAL_DESTRUCTOR:
3262         case RID_HAS_VIRTUAL_DESTRUCTOR:
3263         case RID_IS_ABSTRACT:
3264         case RID_IS_BASE_OF:
3265         case RID_IS_CLASS:
3266         case RID_IS_CONVERTIBLE_TO:
3267         case RID_IS_EMPTY:
3268         case RID_IS_ENUM:
3269         case RID_IS_POD:
3270         case RID_IS_POLYMORPHIC:
3271         case RID_IS_UNION:
3272           return cp_parser_trait_expr (parser, token->keyword);
3273
3274         /* Objective-C++ expressions.  */
3275         case RID_AT_ENCODE:
3276         case RID_AT_PROTOCOL:
3277         case RID_AT_SELECTOR:
3278           return cp_parser_objc_expression (parser);
3279
3280         default:
3281           cp_parser_error (parser, "expected primary-expression");
3282           return error_mark_node;
3283         }
3284
3285       /* An id-expression can start with either an identifier, a
3286          `::' as the beginning of a qualified-id, or the "operator"
3287          keyword.  */
3288     case CPP_NAME:
3289     case CPP_SCOPE:
3290     case CPP_TEMPLATE_ID:
3291     case CPP_NESTED_NAME_SPECIFIER:
3292       {
3293         tree id_expression;
3294         tree decl;
3295         const char *error_msg;
3296         bool template_p;
3297         bool done;
3298
3299       id_expression:
3300         /* Parse the id-expression.  */
3301         id_expression
3302           = cp_parser_id_expression (parser,
3303                                      /*template_keyword_p=*/false,
3304                                      /*check_dependency_p=*/true,
3305                                      &template_p,
3306                                      /*declarator_p=*/false,
3307                                      /*optional_p=*/false);
3308         if (id_expression == error_mark_node)
3309           return error_mark_node;
3310         token = cp_lexer_peek_token (parser->lexer);
3311         done = (token->type != CPP_OPEN_SQUARE
3312                 && token->type != CPP_OPEN_PAREN
3313                 && token->type != CPP_DOT
3314                 && token->type != CPP_DEREF
3315                 && token->type != CPP_PLUS_PLUS
3316                 && token->type != CPP_MINUS_MINUS);
3317         /* If we have a template-id, then no further lookup is
3318            required.  If the template-id was for a template-class, we
3319            will sometimes have a TYPE_DECL at this point.  */
3320         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3321                  || TREE_CODE (id_expression) == TYPE_DECL)
3322           decl = id_expression;
3323         /* Look up the name.  */
3324         else
3325           {
3326             tree ambiguous_decls;
3327
3328             decl = cp_parser_lookup_name (parser, id_expression,
3329                                           none_type,
3330                                           template_p,
3331                                           /*is_namespace=*/false,
3332                                           /*check_dependency=*/true,
3333                                           &ambiguous_decls);
3334             /* If the lookup was ambiguous, an error will already have
3335                been issued.  */
3336             if (ambiguous_decls)
3337               return error_mark_node;
3338
3339             /* In Objective-C++, an instance variable (ivar) may be preferred
3340                to whatever cp_parser_lookup_name() found.  */
3341             decl = objc_lookup_ivar (decl, id_expression);
3342
3343             /* If name lookup gives us a SCOPE_REF, then the
3344                qualifying scope was dependent.  */
3345             if (TREE_CODE (decl) == SCOPE_REF)
3346               return decl;
3347             /* Check to see if DECL is a local variable in a context
3348                where that is forbidden.  */
3349             if (parser->local_variables_forbidden_p
3350                 && local_variable_p (decl))
3351               {
3352                 /* It might be that we only found DECL because we are
3353                    trying to be generous with pre-ISO scoping rules.
3354                    For example, consider:
3355
3356                      int i;
3357                      void g() {
3358                        for (int i = 0; i < 10; ++i) {}
3359                        extern void f(int j = i);
3360                      }
3361
3362                    Here, name look up will originally find the out
3363                    of scope `i'.  We need to issue a warning message,
3364                    but then use the global `i'.  */
3365                 decl = check_for_out_of_scope_variable (decl);
3366                 if (local_variable_p (decl))
3367                   {
3368                     error ("local variable %qD may not appear in this context",
3369                            decl);
3370                     return error_mark_node;
3371                   }
3372               }
3373           }
3374
3375         decl = (finish_id_expression
3376                 (id_expression, decl, parser->scope,
3377                  idk,
3378                  parser->integral_constant_expression_p,
3379                  parser->allow_non_integral_constant_expression_p,
3380                  &parser->non_integral_constant_expression_p,
3381                  template_p, done, address_p,
3382                  template_arg_p,
3383                  &error_msg));
3384         if (error_msg)
3385           cp_parser_error (parser, error_msg);
3386         return decl;
3387       }
3388
3389       /* Anything else is an error.  */
3390     default:
3391       /* ...unless we have an Objective-C++ message or string literal,
3392          that is.  */
3393       if (c_dialect_objc ()
3394           && (token->type == CPP_OPEN_SQUARE
3395               || token->type == CPP_OBJC_STRING))
3396         return cp_parser_objc_expression (parser);
3397
3398       cp_parser_error (parser, "expected primary-expression");
3399       return error_mark_node;
3400     }
3401 }
3402
3403 /* Parse an id-expression.
3404
3405    id-expression:
3406      unqualified-id
3407      qualified-id
3408
3409    qualified-id:
3410      :: [opt] nested-name-specifier template [opt] unqualified-id
3411      :: identifier
3412      :: operator-function-id
3413      :: template-id
3414
3415    Return a representation of the unqualified portion of the
3416    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3417    a `::' or nested-name-specifier.
3418
3419    Often, if the id-expression was a qualified-id, the caller will
3420    want to make a SCOPE_REF to represent the qualified-id.  This
3421    function does not do this in order to avoid wastefully creating
3422    SCOPE_REFs when they are not required.
3423
3424    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3425    `template' keyword.
3426
3427    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3428    uninstantiated templates.
3429
3430    If *TEMPLATE_P is non-NULL, it is set to true iff the
3431    `template' keyword is used to explicitly indicate that the entity
3432    named is a template.
3433
3434    If DECLARATOR_P is true, the id-expression is appearing as part of
3435    a declarator, rather than as part of an expression.  */
3436
3437 static tree
3438 cp_parser_id_expression (cp_parser *parser,
3439                          bool template_keyword_p,
3440                          bool check_dependency_p,
3441                          bool *template_p,
3442                          bool declarator_p,
3443                          bool optional_p)
3444 {
3445   bool global_scope_p;
3446   bool nested_name_specifier_p;
3447
3448   /* Assume the `template' keyword was not used.  */
3449   if (template_p)
3450     *template_p = template_keyword_p;
3451
3452   /* Look for the optional `::' operator.  */
3453   global_scope_p
3454     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3455        != NULL_TREE);
3456   /* Look for the optional nested-name-specifier.  */
3457   nested_name_specifier_p
3458     = (cp_parser_nested_name_specifier_opt (parser,
3459                                             /*typename_keyword_p=*/false,
3460                                             check_dependency_p,
3461                                             /*type_p=*/false,
3462                                             declarator_p)
3463        != NULL_TREE);
3464   /* If there is a nested-name-specifier, then we are looking at
3465      the first qualified-id production.  */
3466   if (nested_name_specifier_p)
3467     {
3468       tree saved_scope;
3469       tree saved_object_scope;
3470       tree saved_qualifying_scope;
3471       tree unqualified_id;
3472       bool is_template;
3473
3474       /* See if the next token is the `template' keyword.  */
3475       if (!template_p)
3476         template_p = &is_template;
3477       *template_p = cp_parser_optional_template_keyword (parser);
3478       /* Name lookup we do during the processing of the
3479          unqualified-id might obliterate SCOPE.  */
3480       saved_scope = parser->scope;
3481       saved_object_scope = parser->object_scope;
3482       saved_qualifying_scope = parser->qualifying_scope;
3483       /* Process the final unqualified-id.  */
3484       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3485                                                  check_dependency_p,
3486                                                  declarator_p,
3487                                                  /*optional_p=*/false);
3488       /* Restore the SAVED_SCOPE for our caller.  */
3489       parser->scope = saved_scope;
3490       parser->object_scope = saved_object_scope;
3491       parser->qualifying_scope = saved_qualifying_scope;
3492
3493       return unqualified_id;
3494     }
3495   /* Otherwise, if we are in global scope, then we are looking at one
3496      of the other qualified-id productions.  */
3497   else if (global_scope_p)
3498     {
3499       cp_token *token;
3500       tree id;
3501
3502       /* Peek at the next token.  */
3503       token = cp_lexer_peek_token (parser->lexer);
3504
3505       /* If it's an identifier, and the next token is not a "<", then
3506          we can avoid the template-id case.  This is an optimization
3507          for this common case.  */
3508       if (token->type == CPP_NAME
3509           && !cp_parser_nth_token_starts_template_argument_list_p
3510                (parser, 2))
3511         return cp_parser_identifier (parser);
3512
3513       cp_parser_parse_tentatively (parser);
3514       /* Try a template-id.  */
3515       id = cp_parser_template_id (parser,
3516                                   /*template_keyword_p=*/false,
3517                                   /*check_dependency_p=*/true,
3518                                   declarator_p);
3519       /* If that worked, we're done.  */
3520       if (cp_parser_parse_definitely (parser))
3521         return id;
3522
3523       /* Peek at the next token.  (Changes in the token buffer may
3524          have invalidated the pointer obtained above.)  */
3525       token = cp_lexer_peek_token (parser->lexer);
3526
3527       switch (token->type)
3528         {
3529         case CPP_NAME:
3530           return cp_parser_identifier (parser);
3531
3532         case CPP_KEYWORD:
3533           if (token->keyword == RID_OPERATOR)
3534             return cp_parser_operator_function_id (parser);
3535           /* Fall through.  */
3536
3537         default:
3538           cp_parser_error (parser, "expected id-expression");
3539           return error_mark_node;
3540         }
3541     }
3542   else
3543     return cp_parser_unqualified_id (parser, template_keyword_p,
3544                                      /*check_dependency_p=*/true,
3545                                      declarator_p,
3546                                      optional_p);
3547 }
3548
3549 /* Parse an unqualified-id.
3550
3551    unqualified-id:
3552      identifier
3553      operator-function-id
3554      conversion-function-id
3555      ~ class-name
3556      template-id
3557
3558    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3559    keyword, in a construct like `A::template ...'.
3560
3561    Returns a representation of unqualified-id.  For the `identifier'
3562    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3563    production a BIT_NOT_EXPR is returned; the operand of the
3564    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3565    other productions, see the documentation accompanying the
3566    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3567    names are looked up in uninstantiated templates.  If DECLARATOR_P
3568    is true, the unqualified-id is appearing as part of a declarator,
3569    rather than as part of an expression.  */
3570
3571 static tree
3572 cp_parser_unqualified_id (cp_parser* parser,
3573                           bool template_keyword_p,
3574                           bool check_dependency_p,
3575                           bool declarator_p,
3576                           bool optional_p)
3577 {
3578   cp_token *token;
3579
3580   /* Peek at the next token.  */
3581   token = cp_lexer_peek_token (parser->lexer);
3582
3583   switch (token->type)
3584     {
3585     case CPP_NAME:
3586       {
3587         tree id;
3588
3589         /* We don't know yet whether or not this will be a
3590            template-id.  */
3591         cp_parser_parse_tentatively (parser);
3592         /* Try a template-id.  */
3593         id = cp_parser_template_id (parser, template_keyword_p,
3594                                     check_dependency_p,
3595                                     declarator_p);
3596         /* If it worked, we're done.  */
3597         if (cp_parser_parse_definitely (parser))
3598           return id;
3599         /* Otherwise, it's an ordinary identifier.  */
3600         return cp_parser_identifier (parser);
3601       }
3602
3603     case CPP_TEMPLATE_ID:
3604       return cp_parser_template_id (parser, template_keyword_p,
3605                                     check_dependency_p,
3606                                     declarator_p);
3607
3608     case CPP_COMPL:
3609       {
3610         tree type_decl;
3611         tree qualifying_scope;
3612         tree object_scope;
3613         tree scope;
3614         bool done;
3615
3616         /* Consume the `~' token.  */
3617         cp_lexer_consume_token (parser->lexer);
3618         /* Parse the class-name.  The standard, as written, seems to
3619            say that:
3620
3621              template <typename T> struct S { ~S (); };
3622              template <typename T> S<T>::~S() {}
3623
3624            is invalid, since `~' must be followed by a class-name, but
3625            `S<T>' is dependent, and so not known to be a class.
3626            That's not right; we need to look in uninstantiated
3627            templates.  A further complication arises from:
3628
3629              template <typename T> void f(T t) {
3630                t.T::~T();
3631              }
3632
3633            Here, it is not possible to look up `T' in the scope of `T'
3634            itself.  We must look in both the current scope, and the
3635            scope of the containing complete expression.
3636
3637            Yet another issue is:
3638
3639              struct S {
3640                int S;
3641                ~S();
3642              };
3643
3644              S::~S() {}
3645
3646            The standard does not seem to say that the `S' in `~S'
3647            should refer to the type `S' and not the data member
3648            `S::S'.  */
3649
3650         /* DR 244 says that we look up the name after the "~" in the
3651            same scope as we looked up the qualifying name.  That idea
3652            isn't fully worked out; it's more complicated than that.  */
3653         scope = parser->scope;
3654         object_scope = parser->object_scope;
3655         qualifying_scope = parser->qualifying_scope;
3656
3657         /* Check for invalid scopes.  */
3658         if (scope == error_mark_node)
3659           {
3660             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3661               cp_lexer_consume_token (parser->lexer);
3662             return error_mark_node;
3663           }
3664         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3665           {
3666             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3667               error ("scope %qT before %<~%> is not a class-name", scope);
3668             cp_parser_simulate_error (parser);
3669             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3670               cp_lexer_consume_token (parser->lexer);
3671             return error_mark_node;
3672           }
3673         gcc_assert (!scope || TYPE_P (scope));
3674
3675         /* If the name is of the form "X::~X" it's OK.  */
3676         token = cp_lexer_peek_token (parser->lexer);
3677         if (scope
3678             && token->type == CPP_NAME
3679             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3680                 == CPP_OPEN_PAREN)
3681             && constructor_name_p (token->u.value, scope))
3682           {
3683             cp_lexer_consume_token (parser->lexer);
3684             return build_nt (BIT_NOT_EXPR, scope);
3685           }
3686
3687         /* If there was an explicit qualification (S::~T), first look
3688            in the scope given by the qualification (i.e., S).  */
3689         done = false;
3690         type_decl = NULL_TREE;
3691         if (scope)
3692           {
3693             cp_parser_parse_tentatively (parser);
3694             type_decl = cp_parser_class_name (parser,
3695                                               /*typename_keyword_p=*/false,
3696                                               /*template_keyword_p=*/false,
3697                                               none_type,
3698                                               /*check_dependency=*/false,
3699                                               /*class_head_p=*/false,
3700                                               declarator_p);
3701             if (cp_parser_parse_definitely (parser))
3702               done = true;
3703           }
3704         /* In "N::S::~S", look in "N" as well.  */
3705         if (!done && scope && qualifying_scope)
3706           {
3707             cp_parser_parse_tentatively (parser);
3708             parser->scope = qualifying_scope;
3709             parser->object_scope = NULL_TREE;
3710             parser->qualifying_scope = NULL_TREE;
3711             type_decl
3712               = cp_parser_class_name (parser,
3713                                       /*typename_keyword_p=*/false,
3714                                       /*template_keyword_p=*/false,
3715                                       none_type,
3716                                       /*check_dependency=*/false,
3717                                       /*class_head_p=*/false,
3718                                       declarator_p);
3719             if (cp_parser_parse_definitely (parser))
3720               done = true;
3721           }
3722         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3723         else if (!done && object_scope)
3724           {
3725             cp_parser_parse_tentatively (parser);
3726             parser->scope = object_scope;
3727             parser->object_scope = NULL_TREE;
3728             parser->qualifying_scope = NULL_TREE;
3729             type_decl
3730               = cp_parser_class_name (parser,
3731                                       /*typename_keyword_p=*/false,
3732                                       /*template_keyword_p=*/false,
3733                                       none_type,
3734                                       /*check_dependency=*/false,
3735                                       /*class_head_p=*/false,
3736                                       declarator_p);
3737             if (cp_parser_parse_definitely (parser))
3738               done = true;
3739           }
3740         /* Look in the surrounding context.  */
3741         if (!done)
3742           {
3743             parser->scope = NULL_TREE;
3744             parser->object_scope = NULL_TREE;
3745             parser->qualifying_scope = NULL_TREE;
3746             type_decl
3747               = cp_parser_class_name (parser,
3748                                       /*typename_keyword_p=*/false,
3749                                       /*template_keyword_p=*/false,
3750                                       none_type,
3751                                       /*check_dependency=*/false,
3752                                       /*class_head_p=*/false,
3753                                       declarator_p);
3754           }
3755         /* If an error occurred, assume that the name of the
3756            destructor is the same as the name of the qualifying
3757            class.  That allows us to keep parsing after running
3758            into ill-formed destructor names.  */
3759         if (type_decl == error_mark_node && scope)
3760           return build_nt (BIT_NOT_EXPR, scope);
3761         else if (type_decl == error_mark_node)
3762           return error_mark_node;
3763
3764         /* Check that destructor name and scope match.  */
3765         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3766           {
3767             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3768               error ("declaration of %<~%T%> as member of %qT",
3769                      type_decl, scope);
3770             cp_parser_simulate_error (parser);
3771             return error_mark_node;
3772           }
3773
3774         /* [class.dtor]
3775
3776            A typedef-name that names a class shall not be used as the
3777            identifier in the declarator for a destructor declaration.  */
3778         if (declarator_p
3779             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3780             && !DECL_SELF_REFERENCE_P (type_decl)
3781             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3782           error ("typedef-name %qD used as destructor declarator",
3783                  type_decl);
3784
3785         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3786       }
3787
3788     case CPP_KEYWORD:
3789       if (token->keyword == RID_OPERATOR)
3790         {
3791           tree id;
3792
3793           /* This could be a template-id, so we try that first.  */
3794           cp_parser_parse_tentatively (parser);
3795           /* Try a template-id.  */
3796           id = cp_parser_template_id (parser, template_keyword_p,
3797                                       /*check_dependency_p=*/true,
3798                                       declarator_p);
3799           /* If that worked, we're done.  */
3800           if (cp_parser_parse_definitely (parser))
3801             return id;
3802           /* We still don't know whether we're looking at an
3803              operator-function-id or a conversion-function-id.  */
3804           cp_parser_parse_tentatively (parser);
3805           /* Try an operator-function-id.  */
3806           id = cp_parser_operator_function_id (parser);
3807           /* If that didn't work, try a conversion-function-id.  */
3808           if (!cp_parser_parse_definitely (parser))
3809             id = cp_parser_conversion_function_id (parser);
3810
3811           return id;
3812         }
3813       /* Fall through.  */
3814
3815     default:
3816       if (optional_p)
3817         return NULL_TREE;
3818       cp_parser_error (parser, "expected unqualified-id");
3819       return error_mark_node;
3820     }
3821 }
3822
3823 /* Parse an (optional) nested-name-specifier.
3824
3825    nested-name-specifier:
3826      class-or-namespace-name :: nested-name-specifier [opt]
3827      class-or-namespace-name :: template nested-name-specifier [opt]
3828
3829    PARSER->SCOPE should be set appropriately before this function is
3830    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3831    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3832    in name lookups.
3833
3834    Sets PARSER->SCOPE to the class (TYPE) or namespace
3835    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3836    it unchanged if there is no nested-name-specifier.  Returns the new
3837    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3838
3839    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3840    part of a declaration and/or decl-specifier.  */
3841
3842 static tree
3843 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3844                                      bool typename_keyword_p,
3845                                      bool check_dependency_p,
3846                                      bool type_p,
3847                                      bool is_declaration)
3848 {
3849   bool success = false;
3850   cp_token_position start = 0;
3851   cp_token *token;
3852
3853   /* Remember where the nested-name-specifier starts.  */
3854   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3855     {
3856       start = cp_lexer_token_position (parser->lexer, false);
3857       push_deferring_access_checks (dk_deferred);
3858     }
3859
3860   while (true)
3861     {
3862       tree new_scope;
3863       tree old_scope;
3864       tree saved_qualifying_scope;
3865       bool template_keyword_p;
3866
3867       /* Spot cases that cannot be the beginning of a
3868          nested-name-specifier.  */
3869       token = cp_lexer_peek_token (parser->lexer);
3870
3871       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3872          the already parsed nested-name-specifier.  */
3873       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3874         {
3875           /* Grab the nested-name-specifier and continue the loop.  */
3876           cp_parser_pre_parsed_nested_name_specifier (parser);
3877           /* If we originally encountered this nested-name-specifier
3878              with IS_DECLARATION set to false, we will not have
3879              resolved TYPENAME_TYPEs, so we must do so here.  */
3880           if (is_declaration
3881               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3882             {
3883               new_scope = resolve_typename_type (parser->scope,
3884                                                  /*only_current_p=*/false);
3885               if (new_scope != error_mark_node)
3886                 parser->scope = new_scope;
3887             }
3888           success = true;
3889           continue;
3890         }
3891
3892       /* Spot cases that cannot be the beginning of a
3893          nested-name-specifier.  On the second and subsequent times
3894          through the loop, we look for the `template' keyword.  */
3895       if (success && token->keyword == RID_TEMPLATE)
3896         ;
3897       /* A template-id can start a nested-name-specifier.  */
3898       else if (token->type == CPP_TEMPLATE_ID)
3899         ;
3900       else
3901         {
3902           /* If the next token is not an identifier, then it is
3903              definitely not a class-or-namespace-name.  */
3904           if (token->type != CPP_NAME)
3905             break;
3906           /* If the following token is neither a `<' (to begin a
3907              template-id), nor a `::', then we are not looking at a
3908              nested-name-specifier.  */
3909           token = cp_lexer_peek_nth_token (parser->lexer, 2);
3910           if (token->type != CPP_SCOPE
3911               && !cp_parser_nth_token_starts_template_argument_list_p
3912                   (parser, 2))
3913             break;
3914         }
3915
3916       /* The nested-name-specifier is optional, so we parse
3917          tentatively.  */
3918       cp_parser_parse_tentatively (parser);
3919
3920       /* Look for the optional `template' keyword, if this isn't the
3921          first time through the loop.  */
3922       if (success)
3923         template_keyword_p = cp_parser_optional_template_keyword (parser);
3924       else
3925         template_keyword_p = false;
3926
3927       /* Save the old scope since the name lookup we are about to do
3928          might destroy it.  */
3929       old_scope = parser->scope;
3930       saved_qualifying_scope = parser->qualifying_scope;
3931       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
3932          look up names in "X<T>::I" in order to determine that "Y" is
3933          a template.  So, if we have a typename at this point, we make
3934          an effort to look through it.  */
3935       if (is_declaration
3936           && !typename_keyword_p
3937           && parser->scope
3938           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3939         parser->scope = resolve_typename_type (parser->scope,
3940                                                /*only_current_p=*/false);
3941       /* Parse the qualifying entity.  */
3942       new_scope
3943         = cp_parser_class_or_namespace_name (parser,
3944                                              typename_keyword_p,
3945                                              template_keyword_p,
3946                                              check_dependency_p,
3947                                              type_p,
3948                                              is_declaration);
3949       /* Look for the `::' token.  */
3950       cp_parser_require (parser, CPP_SCOPE, "`::'");
3951
3952       /* If we found what we wanted, we keep going; otherwise, we're
3953          done.  */
3954       if (!cp_parser_parse_definitely (parser))
3955         {
3956           bool error_p = false;
3957
3958           /* Restore the OLD_SCOPE since it was valid before the
3959              failed attempt at finding the last
3960              class-or-namespace-name.  */
3961           parser->scope = old_scope;
3962           parser->qualifying_scope = saved_qualifying_scope;
3963           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3964             break;
3965           /* If the next token is an identifier, and the one after
3966              that is a `::', then any valid interpretation would have
3967              found a class-or-namespace-name.  */
3968           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3969                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3970                      == CPP_SCOPE)
3971                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3972                      != CPP_COMPL))
3973             {
3974               token = cp_lexer_consume_token (parser->lexer);
3975               if (!error_p)
3976                 {
3977                   if (!token->ambiguous_p)
3978                     {
3979                       tree decl;
3980                       tree ambiguous_decls;
3981
3982                       decl = cp_parser_lookup_name (parser, token->u.value,
3983                                                     none_type,
3984                                                     /*is_template=*/false,
3985                                                     /*is_namespace=*/false,
3986                                                     /*check_dependency=*/true,
3987                                                     &ambiguous_decls);
3988                       if (TREE_CODE (decl) == TEMPLATE_DECL)
3989                         error ("%qD used without template parameters", decl);
3990                       else if (ambiguous_decls)
3991                         {
3992                           error ("reference to %qD is ambiguous",
3993                                  token->u.value);
3994                           print_candidates (ambiguous_decls);
3995                           decl = error_mark_node;
3996                         }
3997                       else
3998                         cp_parser_name_lookup_error
3999                           (parser, token->u.value, decl,
4000                            "is not a class or namespace");
4001                     }
4002                   parser->scope = error_mark_node;
4003                   error_p = true;
4004                   /* Treat this as a successful nested-name-specifier
4005                      due to:
4006
4007                      [basic.lookup.qual]
4008
4009                      If the name found is not a class-name (clause
4010                      _class_) or namespace-name (_namespace.def_), the
4011                      program is ill-formed.  */
4012                   success = true;
4013                 }
4014               cp_lexer_consume_token (parser->lexer);
4015             }
4016           break;
4017         }
4018       /* We've found one valid nested-name-specifier.  */
4019       success = true;
4020       /* Name lookup always gives us a DECL.  */
4021       if (TREE_CODE (new_scope) == TYPE_DECL)
4022         new_scope = TREE_TYPE (new_scope);
4023       /* Uses of "template" must be followed by actual templates.  */
4024       if (template_keyword_p
4025           && !(CLASS_TYPE_P (new_scope)
4026                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
4027                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
4028                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
4029           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
4030                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
4031                    == TEMPLATE_ID_EXPR)))
4032         pedwarn (TYPE_P (new_scope)
4033                  ? "%qT is not a template"
4034                  : "%qD is not a template",
4035                  new_scope);
4036       /* If it is a class scope, try to complete it; we are about to
4037          be looking up names inside the class.  */
4038       if (TYPE_P (new_scope)
4039           /* Since checking types for dependency can be expensive,
4040              avoid doing it if the type is already complete.  */
4041           && !COMPLETE_TYPE_P (new_scope)
4042           /* Do not try to complete dependent types.  */
4043           && !dependent_type_p (new_scope))
4044         new_scope = complete_type (new_scope);
4045       /* Make sure we look in the right scope the next time through
4046          the loop.  */
4047       parser->scope = new_scope;
4048     }
4049
4050   /* If parsing tentatively, replace the sequence of tokens that makes
4051      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
4052      token.  That way, should we re-parse the token stream, we will
4053      not have to repeat the effort required to do the parse, nor will
4054      we issue duplicate error messages.  */
4055   if (success && start)
4056     {
4057       cp_token *token;
4058
4059       token = cp_lexer_token_at (parser->lexer, start);
4060       /* Reset the contents of the START token.  */
4061       token->type = CPP_NESTED_NAME_SPECIFIER;
4062       /* Retrieve any deferred checks.  Do not pop this access checks yet
4063          so the memory will not be reclaimed during token replacing below.  */
4064       token->u.tree_check_value = GGC_CNEW (struct tree_check);
4065       token->u.tree_check_value->value = parser->scope;
4066       token->u.tree_check_value->checks = get_deferred_access_checks ();
4067       token->u.tree_check_value->qualifying_scope =
4068         parser->qualifying_scope;
4069       token->keyword = RID_MAX;
4070
4071       /* Purge all subsequent tokens.  */
4072       cp_lexer_purge_tokens_after (parser->lexer, start);
4073     }
4074
4075   if (start)
4076     pop_to_parent_deferring_access_checks ();
4077
4078   return success ? parser->scope : NULL_TREE;
4079 }
4080
4081 /* Parse a nested-name-specifier.  See
4082    cp_parser_nested_name_specifier_opt for details.  This function
4083    behaves identically, except that it will an issue an error if no
4084    nested-name-specifier is present.  */
4085
4086 static tree
4087 cp_parser_nested_name_specifier (cp_parser *parser,
4088                                  bool typename_keyword_p,
4089                                  bool check_dependency_p,
4090                                  bool type_p,
4091                                  bool is_declaration)
4092 {
4093   tree scope;
4094
4095   /* Look for the nested-name-specifier.  */
4096   scope = cp_parser_nested_name_specifier_opt (parser,
4097                                                typename_keyword_p,
4098                                                check_dependency_p,
4099                                                type_p,
4100                                                is_declaration);
4101   /* If it was not present, issue an error message.  */
4102   if (!scope)
4103     {
4104       cp_parser_error (parser, "expected nested-name-specifier");
4105       parser->scope = NULL_TREE;
4106     }
4107
4108   return scope;
4109 }
4110
4111 /* Parse a class-or-namespace-name.
4112
4113    class-or-namespace-name:
4114      class-name
4115      namespace-name
4116
4117    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
4118    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
4119    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
4120    TYPE_P is TRUE iff the next name should be taken as a class-name,
4121    even the same name is declared to be another entity in the same
4122    scope.
4123
4124    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
4125    specified by the class-or-namespace-name.  If neither is found the
4126    ERROR_MARK_NODE is returned.  */
4127
4128 static tree
4129 cp_parser_class_or_namespace_name (cp_parser *parser,
4130                                    bool typename_keyword_p,
4131                                    bool template_keyword_p,
4132                                    bool check_dependency_p,
4133                                    bool type_p,
4134                                    bool is_declaration)
4135 {
4136   tree saved_scope;
4137   tree saved_qualifying_scope;
4138   tree saved_object_scope;
4139   tree scope;
4140   bool only_class_p;
4141
4142   /* Before we try to parse the class-name, we must save away the
4143      current PARSER->SCOPE since cp_parser_class_name will destroy
4144      it.  */
4145   saved_scope = parser->scope;
4146   saved_qualifying_scope = parser->qualifying_scope;
4147   saved_object_scope = parser->object_scope;
4148   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4149      there is no need to look for a namespace-name.  */
4150   only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
4151   if (!only_class_p)
4152     cp_parser_parse_tentatively (parser);
4153   scope = cp_parser_class_name (parser,
4154                                 typename_keyword_p,
4155                                 template_keyword_p,
4156                                 type_p ? class_type : none_type,
4157                                 check_dependency_p,
4158                                 /*class_head_p=*/false,
4159                                 is_declaration);
4160   /* If that didn't work, try for a namespace-name.  */
4161   if (!only_class_p && !cp_parser_parse_definitely (parser))
4162     {
4163       /* Restore the saved scope.  */
4164       parser->scope = saved_scope;
4165       parser->qualifying_scope = saved_qualifying_scope;
4166       parser->object_scope = saved_object_scope;
4167       /* If we are not looking at an identifier followed by the scope
4168          resolution operator, then this is not part of a
4169          nested-name-specifier.  (Note that this function is only used
4170          to parse the components of a nested-name-specifier.)  */
4171       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4172           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4173         return error_mark_node;
4174       scope = cp_parser_namespace_name (parser);
4175     }
4176
4177   return scope;
4178 }
4179
4180 /* Parse a postfix-expression.
4181
4182    postfix-expression:
4183      primary-expression
4184      postfix-expression [ expression ]
4185      postfix-expression ( expression-list [opt] )
4186      simple-type-specifier ( expression-list [opt] )
4187      typename :: [opt] nested-name-specifier identifier
4188        ( expression-list [opt] )
4189      typename :: [opt] nested-name-specifier template [opt] template-id
4190        ( expression-list [opt] )
4191      postfix-expression . template [opt] id-expression
4192      postfix-expression -> template [opt] id-expression
4193      postfix-expression . pseudo-destructor-name
4194      postfix-expression -> pseudo-destructor-name
4195      postfix-expression ++
4196      postfix-expression --
4197      dynamic_cast < type-id > ( expression )
4198      static_cast < type-id > ( expression )
4199      reinterpret_cast < type-id > ( expression )
4200      const_cast < type-id > ( expression )
4201      typeid ( expression )
4202      typeid ( type-id )
4203
4204    GNU Extension:
4205
4206    postfix-expression:
4207      ( type-id ) { initializer-list , [opt] }
4208
4209    This extension is a GNU version of the C99 compound-literal
4210    construct.  (The C99 grammar uses `type-name' instead of `type-id',
4211    but they are essentially the same concept.)
4212
4213    If ADDRESS_P is true, the postfix expression is the operand of the
4214    `&' operator.  CAST_P is true if this expression is the target of a
4215    cast.
4216
4217    Returns a representation of the expression.  */
4218
4219 static tree
4220 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
4221 {
4222   cp_token *token;
4223   enum rid keyword;
4224   cp_id_kind idk = CP_ID_KIND_NONE;
4225   tree postfix_expression = NULL_TREE;
4226
4227   /* Peek at the next token.  */
4228   token = cp_lexer_peek_token (parser->lexer);
4229   /* Some of the productions are determined by keywords.  */
4230   keyword = token->keyword;
4231   switch (keyword)
4232     {
4233     case RID_DYNCAST:
4234     case RID_STATCAST:
4235     case RID_REINTCAST:
4236     case RID_CONSTCAST:
4237       {
4238         tree type;
4239         tree expression;
4240         const char *saved_message;
4241
4242         /* All of these can be handled in the same way from the point
4243            of view of parsing.  Begin by consuming the token
4244            identifying the cast.  */
4245         cp_lexer_consume_token (parser->lexer);
4246
4247         /* New types cannot be defined in the cast.  */
4248         saved_message = parser->type_definition_forbidden_message;
4249         parser->type_definition_forbidden_message
4250           = "types may not be defined in casts";
4251
4252         /* Look for the opening `<'.  */
4253         cp_parser_require (parser, CPP_LESS, "`<'");
4254         /* Parse the type to which we are casting.  */
4255         type = cp_parser_type_id (parser);
4256         /* Look for the closing `>'.  */
4257         cp_parser_require (parser, CPP_GREATER, "`>'");
4258         /* Restore the old message.  */
4259         parser->type_definition_forbidden_message = saved_message;
4260
4261         /* And the expression which is being cast.  */
4262         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4263         expression = cp_parser_expression (parser, /*cast_p=*/true);
4264         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4265
4266         /* Only type conversions to integral or enumeration types
4267            can be used in constant-expressions.  */
4268         if (!cast_valid_in_integral_constant_expression_p (type)
4269             && (cp_parser_non_integral_constant_expression
4270                 (parser,
4271                  "a cast to a type other than an integral or "
4272                  "enumeration type")))
4273           return error_mark_node;
4274
4275         switch (keyword)
4276           {
4277           case RID_DYNCAST:
4278             postfix_expression
4279               = build_dynamic_cast (type, expression);
4280             break;
4281           case RID_STATCAST:
4282             postfix_expression
4283               = build_static_cast (type, expression);
4284             break;
4285           case RID_REINTCAST:
4286             postfix_expression
4287               = build_reinterpret_cast (type, expression);
4288             break;
4289           case RID_CONSTCAST:
4290             postfix_expression
4291               = build_const_cast (type, expression);
4292             break;
4293           default:
4294             gcc_unreachable ();
4295           }
4296       }
4297       break;
4298
4299     case RID_TYPEID:
4300       {
4301         tree type;
4302         const char *saved_message;
4303         bool saved_in_type_id_in_expr_p;
4304
4305         /* Consume the `typeid' token.  */
4306         cp_lexer_consume_token (parser->lexer);
4307         /* Look for the `(' token.  */
4308         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4309         /* Types cannot be defined in a `typeid' expression.  */
4310         saved_message = parser->type_definition_forbidden_message;
4311         parser->type_definition_forbidden_message
4312           = "types may not be defined in a `typeid\' expression";
4313         /* We can't be sure yet whether we're looking at a type-id or an
4314            expression.  */
4315         cp_parser_parse_tentatively (parser);
4316         /* Try a type-id first.  */
4317         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4318         parser->in_type_id_in_expr_p = true;
4319         type = cp_parser_type_id (parser);
4320         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4321         /* Look for the `)' token.  Otherwise, we can't be sure that
4322            we're not looking at an expression: consider `typeid (int
4323            (3))', for example.  */
4324         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4325         /* If all went well, simply lookup the type-id.  */
4326         if (cp_parser_parse_definitely (parser))
4327           postfix_expression = get_typeid (type);
4328         /* Otherwise, fall back to the expression variant.  */
4329         else
4330           {
4331             tree expression;
4332
4333             /* Look for an expression.  */
4334             expression = cp_parser_expression (parser, /*cast_p=*/false);
4335             /* Compute its typeid.  */
4336             postfix_expression = build_typeid (expression);
4337             /* Look for the `)' token.  */
4338             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4339           }
4340         /* Restore the saved message.  */
4341         parser->type_definition_forbidden_message = saved_message;
4342         /* `typeid' may not appear in an integral constant expression.  */
4343         if (cp_parser_non_integral_constant_expression(parser,
4344                                                        "`typeid' operator"))
4345           return error_mark_node;
4346       }
4347       break;
4348
4349     case RID_TYPENAME:
4350       {
4351         tree type;
4352         /* The syntax permitted here is the same permitted for an
4353            elaborated-type-specifier.  */
4354         type = cp_parser_elaborated_type_specifier (parser,
4355                                                     /*is_friend=*/false,
4356                                                     /*is_declaration=*/false);
4357         postfix_expression = cp_parser_functional_cast (parser, type);
4358       }
4359       break;
4360
4361     default:
4362       {
4363         tree type;
4364
4365         /* If the next thing is a simple-type-specifier, we may be
4366            looking at a functional cast.  We could also be looking at
4367            an id-expression.  So, we try the functional cast, and if
4368            that doesn't work we fall back to the primary-expression.  */
4369         cp_parser_parse_tentatively (parser);
4370         /* Look for the simple-type-specifier.  */
4371         type = cp_parser_simple_type_specifier (parser,
4372                                                 /*decl_specs=*/NULL,
4373                                                 CP_PARSER_FLAGS_NONE);
4374         /* Parse the cast itself.  */
4375         if (!cp_parser_error_occurred (parser))
4376           postfix_expression
4377             = cp_parser_functional_cast (parser, type);
4378         /* If that worked, we're done.  */
4379         if (cp_parser_parse_definitely (parser))
4380           break;
4381
4382         /* If the functional-cast didn't work out, try a
4383            compound-literal.  */
4384         if (cp_parser_allow_gnu_extensions_p (parser)
4385             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4386           {
4387             VEC(constructor_elt,gc) *initializer_list = NULL;
4388             bool saved_in_type_id_in_expr_p;
4389
4390             cp_parser_parse_tentatively (parser);
4391             /* Consume the `('.  */
4392             cp_lexer_consume_token (parser->lexer);
4393             /* Parse the type.  */
4394             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4395             parser->in_type_id_in_expr_p = true;
4396             type = cp_parser_type_id (parser);
4397             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4398             /* Look for the `)'.  */
4399             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4400             /* Look for the `{'.  */
4401             cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
4402             /* If things aren't going well, there's no need to
4403                keep going.  */
4404             if (!cp_parser_error_occurred (parser))
4405               {
4406                 bool non_constant_p;
4407                 /* Parse the initializer-list.  */
4408                 initializer_list
4409                   = cp_parser_initializer_list (parser, &non_constant_p);
4410                 /* Allow a trailing `,'.  */
4411                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4412                   cp_lexer_consume_token (parser->lexer);
4413                 /* Look for the final `}'.  */
4414                 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
4415               }
4416             /* If that worked, we're definitely looking at a
4417                compound-literal expression.  */
4418             if (cp_parser_parse_definitely (parser))
4419               {
4420                 /* Warn the user that a compound literal is not
4421                    allowed in standard C++.  */
4422                 if (pedantic)
4423                   pedwarn ("ISO C++ forbids compound-literals");
4424                 /* For simplicity, we disallow compound literals in
4425                    constant-expressions.  We could
4426                    allow compound literals of integer type, whose
4427                    initializer was a constant, in constant
4428                    expressions.  Permitting that usage, as a further
4429                    extension, would not change the meaning of any
4430                    currently accepted programs.  (Of course, as
4431                    compound literals are not part of ISO C++, the
4432                    standard has nothing to say.)  */
4433                 if (cp_parser_non_integral_constant_expression 
4434                     (parser, "non-constant compound literals"))
4435                   {
4436                     postfix_expression = error_mark_node;
4437                     break;
4438                   }
4439                 /* Form the representation of the compound-literal.  */
4440                 postfix_expression
4441                   = finish_compound_literal (type, initializer_list);
4442                 break;
4443               }
4444           }
4445
4446         /* It must be a primary-expression.  */
4447         postfix_expression
4448           = cp_parser_primary_expression (parser, address_p, cast_p,
4449                                           /*template_arg_p=*/false,
4450                                           &idk);
4451       }
4452       break;
4453     }
4454
4455   /* Keep looping until the postfix-expression is complete.  */
4456   while (true)
4457     {
4458       if (idk == CP_ID_KIND_UNQUALIFIED
4459           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4460           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4461         /* It is not a Koenig lookup function call.  */
4462         postfix_expression
4463           = unqualified_name_lookup_error (postfix_expression);
4464
4465       /* Peek at the next token.  */
4466       token = cp_lexer_peek_token (parser->lexer);
4467
4468       switch (token->type)
4469         {
4470         case CPP_OPEN_SQUARE:
4471           postfix_expression
4472             = cp_parser_postfix_open_square_expression (parser,
4473                                                         postfix_expression,
4474                                                         false);
4475           idk = CP_ID_KIND_NONE;
4476           break;
4477
4478         case CPP_OPEN_PAREN:
4479           /* postfix-expression ( expression-list [opt] ) */
4480           {
4481             bool koenig_p;
4482             bool is_builtin_constant_p;
4483             bool saved_integral_constant_expression_p = false;
4484             bool saved_non_integral_constant_expression_p = false;
4485             tree args;
4486
4487             is_builtin_constant_p
4488               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4489             if (is_builtin_constant_p)
4490               {
4491                 /* The whole point of __builtin_constant_p is to allow
4492                    non-constant expressions to appear as arguments.  */
4493                 saved_integral_constant_expression_p
4494                   = parser->integral_constant_expression_p;
4495                 saved_non_integral_constant_expression_p
4496                   = parser->non_integral_constant_expression_p;
4497                 parser->integral_constant_expression_p = false;
4498               }
4499             args = (cp_parser_parenthesized_expression_list
4500                     (parser, /*is_attribute_list=*/false,
4501                      /*cast_p=*/false, /*allow_expansion_p=*/true,
4502                      /*non_constant_p=*/NULL));
4503             if (is_builtin_constant_p)
4504               {
4505                 parser->integral_constant_expression_p
4506                   = saved_integral_constant_expression_p;
4507                 parser->non_integral_constant_expression_p
4508                   = saved_non_integral_constant_expression_p;
4509               }
4510
4511             if (args == error_mark_node)
4512               {
4513                 postfix_expression = error_mark_node;
4514                 break;
4515               }
4516
4517             /* Function calls are not permitted in
4518                constant-expressions.  */
4519             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4520                 && cp_parser_non_integral_constant_expression (parser,
4521                                                                "a function call"))
4522               {
4523                 postfix_expression = error_mark_node;
4524                 break;
4525               }
4526
4527             koenig_p = false;
4528             if (idk == CP_ID_KIND_UNQUALIFIED)
4529               {
4530                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4531                   {
4532                     if (args)
4533                       {
4534                         koenig_p = true;
4535                         postfix_expression
4536                           = perform_koenig_lookup (postfix_expression, args);
4537                       }
4538                     else
4539                       postfix_expression
4540                         = unqualified_fn_lookup_error (postfix_expression);
4541                   }
4542                 /* We do not perform argument-dependent lookup if
4543                    normal lookup finds a non-function, in accordance
4544                    with the expected resolution of DR 218.  */
4545                 else if (args && is_overloaded_fn (postfix_expression))
4546                   {
4547                     tree fn = get_first_fn (postfix_expression);
4548
4549                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4550                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4551
4552                     /* Only do argument dependent lookup if regular
4553                        lookup does not find a set of member functions.
4554                        [basic.lookup.koenig]/2a  */
4555                     if (!DECL_FUNCTION_MEMBER_P (fn))
4556                       {
4557                         koenig_p = true;
4558                         postfix_expression
4559                           = perform_koenig_lookup (postfix_expression, args);
4560                       }
4561                   }
4562               }
4563
4564             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4565               {
4566                 tree instance = TREE_OPERAND (postfix_expression, 0);
4567                 tree fn = TREE_OPERAND (postfix_expression, 1);
4568
4569                 if (processing_template_decl
4570                     && (type_dependent_expression_p (instance)
4571                         || (!BASELINK_P (fn)
4572                             && TREE_CODE (fn) != FIELD_DECL)
4573                         || type_dependent_expression_p (fn)
4574                         || any_type_dependent_arguments_p (args)))
4575                   {
4576                     postfix_expression
4577                       = build_nt_call_list (postfix_expression, args);
4578                     break;
4579                   }
4580
4581                 if (BASELINK_P (fn))
4582                   postfix_expression
4583                     = (build_new_method_call
4584                        (instance, fn, args, NULL_TREE,
4585                         (idk == CP_ID_KIND_QUALIFIED
4586                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4587                         /*fn_p=*/NULL));
4588                 else
4589                   postfix_expression
4590                     = finish_call_expr (postfix_expression, args,
4591                                         /*disallow_virtual=*/false,
4592                                         /*koenig_p=*/false);
4593               }
4594             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4595                      || TREE_CODE (postfix_expression) == MEMBER_REF
4596                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4597               postfix_expression = (build_offset_ref_call_from_tree
4598                                     (postfix_expression, args));
4599             else if (idk == CP_ID_KIND_QUALIFIED)
4600               /* A call to a static class member, or a namespace-scope
4601                  function.  */
4602               postfix_expression
4603                 = finish_call_expr (postfix_expression, args,
4604                                     /*disallow_virtual=*/true,
4605                                     koenig_p);
4606             else
4607               /* All other function calls.  */
4608               postfix_expression
4609                 = finish_call_expr (postfix_expression, args,
4610                                     /*disallow_virtual=*/false,
4611                                     koenig_p);
4612
4613             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4614             idk = CP_ID_KIND_NONE;
4615           }
4616           break;
4617
4618         case CPP_DOT:
4619         case CPP_DEREF:
4620           /* postfix-expression . template [opt] id-expression
4621              postfix-expression . pseudo-destructor-name
4622              postfix-expression -> template [opt] id-expression
4623              postfix-expression -> pseudo-destructor-name */
4624
4625           /* Consume the `.' or `->' operator.  */
4626           cp_lexer_consume_token (parser->lexer);
4627
4628           postfix_expression
4629             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4630                                                       postfix_expression,
4631                                                       false, &idk);
4632           break;
4633
4634         case CPP_PLUS_PLUS:
4635           /* postfix-expression ++  */
4636           /* Consume the `++' token.  */
4637           cp_lexer_consume_token (parser->lexer);
4638           /* Generate a representation for the complete expression.  */
4639           postfix_expression
4640             = finish_increment_expr (postfix_expression,
4641                                      POSTINCREMENT_EXPR);
4642           /* Increments may not appear in constant-expressions.  */
4643           if (cp_parser_non_integral_constant_expression (parser,
4644                                                           "an increment"))
4645             postfix_expression = error_mark_node;
4646           idk = CP_ID_KIND_NONE;
4647           break;
4648
4649         case CPP_MINUS_MINUS:
4650           /* postfix-expression -- */
4651           /* Consume the `--' token.  */
4652           cp_lexer_consume_token (parser->lexer);
4653           /* Generate a representation for the complete expression.  */
4654           postfix_expression
4655             = finish_increment_expr (postfix_expression,
4656                                      POSTDECREMENT_EXPR);
4657           /* Decrements may not appear in constant-expressions.  */
4658           if (cp_parser_non_integral_constant_expression (parser,
4659                                                           "a decrement"))
4660             postfix_expression = error_mark_node;
4661           idk = CP_ID_KIND_NONE;
4662           break;
4663
4664         default:
4665           return postfix_expression;
4666         }
4667     }
4668
4669   /* We should never get here.  */
4670   gcc_unreachable ();
4671   return error_mark_node;
4672 }
4673
4674 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4675    by cp_parser_builtin_offsetof.  We're looking for
4676
4677      postfix-expression [ expression ]
4678
4679    FOR_OFFSETOF is set if we're being called in that context, which
4680    changes how we deal with integer constant expressions.  */
4681
4682 static tree
4683 cp_parser_postfix_open_square_expression (cp_parser *parser,
4684                                           tree postfix_expression,
4685                                           bool for_offsetof)
4686 {
4687   tree index;
4688
4689   /* Consume the `[' token.  */
4690   cp_lexer_consume_token (parser->lexer);
4691
4692   /* Parse the index expression.  */
4693   /* ??? For offsetof, there is a question of what to allow here.  If
4694      offsetof is not being used in an integral constant expression context,
4695      then we *could* get the right answer by computing the value at runtime.
4696      If we are in an integral constant expression context, then we might
4697      could accept any constant expression; hard to say without analysis.
4698      Rather than open the barn door too wide right away, allow only integer
4699      constant expressions here.  */
4700   if (for_offsetof)
4701     index = cp_parser_constant_expression (parser, false, NULL);
4702   else
4703     index = cp_parser_expression (parser, /*cast_p=*/false);
4704
4705   /* Look for the closing `]'.  */
4706   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4707
4708   /* Build the ARRAY_REF.  */
4709   postfix_expression = grok_array_decl (postfix_expression, index);
4710
4711   /* When not doing offsetof, array references are not permitted in
4712      constant-expressions.  */
4713   if (!for_offsetof
4714       && (cp_parser_non_integral_constant_expression
4715           (parser, "an array reference")))
4716     postfix_expression = error_mark_node;
4717
4718   return postfix_expression;
4719 }
4720
4721 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4722    by cp_parser_builtin_offsetof.  We're looking for
4723
4724      postfix-expression . template [opt] id-expression
4725      postfix-expression . pseudo-destructor-name
4726      postfix-expression -> template [opt] id-expression
4727      postfix-expression -> pseudo-destructor-name
4728
4729    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4730    limits what of the above we'll actually accept, but nevermind.
4731    TOKEN_TYPE is the "." or "->" token, which will already have been
4732    removed from the stream.  */
4733
4734 static tree
4735 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4736                                         enum cpp_ttype token_type,
4737                                         tree postfix_expression,
4738                                         bool for_offsetof, cp_id_kind *idk)
4739 {
4740   tree name;
4741   bool dependent_p;
4742   bool pseudo_destructor_p;
4743   tree scope = NULL_TREE;
4744
4745   /* If this is a `->' operator, dereference the pointer.  */
4746   if (token_type == CPP_DEREF)
4747     postfix_expression = build_x_arrow (postfix_expression);
4748   /* Check to see whether or not the expression is type-dependent.  */
4749   dependent_p = type_dependent_expression_p (postfix_expression);
4750   /* The identifier following the `->' or `.' is not qualified.  */
4751   parser->scope = NULL_TREE;
4752   parser->qualifying_scope = NULL_TREE;
4753   parser->object_scope = NULL_TREE;
4754   *idk = CP_ID_KIND_NONE;
4755   /* Enter the scope corresponding to the type of the object
4756      given by the POSTFIX_EXPRESSION.  */
4757   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4758     {
4759       scope = TREE_TYPE (postfix_expression);
4760       /* According to the standard, no expression should ever have
4761          reference type.  Unfortunately, we do not currently match
4762          the standard in this respect in that our internal representation
4763          of an expression may have reference type even when the standard
4764          says it does not.  Therefore, we have to manually obtain the
4765          underlying type here.  */
4766       scope = non_reference (scope);
4767       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4768       if (scope == unknown_type_node)
4769         {
4770           error ("%qE does not have class type", postfix_expression);
4771           scope = NULL_TREE;
4772         }
4773       else
4774         scope = complete_type_or_else (scope, NULL_TREE);
4775       /* Let the name lookup machinery know that we are processing a
4776          class member access expression.  */
4777       parser->context->object_type = scope;
4778       /* If something went wrong, we want to be able to discern that case,
4779          as opposed to the case where there was no SCOPE due to the type
4780          of expression being dependent.  */
4781       if (!scope)
4782         scope = error_mark_node;
4783       /* If the SCOPE was erroneous, make the various semantic analysis
4784          functions exit quickly -- and without issuing additional error
4785          messages.  */
4786       if (scope == error_mark_node)
4787         postfix_expression = error_mark_node;
4788     }
4789
4790   /* Assume this expression is not a pseudo-destructor access.  */
4791   pseudo_destructor_p = false;
4792
4793   /* If the SCOPE is a scalar type, then, if this is a valid program,
4794      we must be looking at a pseudo-destructor-name.  */
4795   if (scope && SCALAR_TYPE_P (scope))
4796     {
4797       tree s;
4798       tree type;
4799
4800       cp_parser_parse_tentatively (parser);
4801       /* Parse the pseudo-destructor-name.  */
4802       s = NULL_TREE;
4803       cp_parser_pseudo_destructor_name (parser, &s, &type);
4804       if (cp_parser_parse_definitely (parser))
4805         {
4806           pseudo_destructor_p = true;
4807           postfix_expression
4808             = finish_pseudo_destructor_expr (postfix_expression,
4809                                              s, TREE_TYPE (type));
4810         }
4811     }
4812
4813   if (!pseudo_destructor_p)
4814     {
4815       /* If the SCOPE is not a scalar type, we are looking at an
4816          ordinary class member access expression, rather than a
4817          pseudo-destructor-name.  */
4818       bool template_p;
4819       /* Parse the id-expression.  */
4820       name = (cp_parser_id_expression
4821               (parser,
4822                cp_parser_optional_template_keyword (parser),
4823                /*check_dependency_p=*/true,
4824                &template_p,
4825                /*declarator_p=*/false,
4826                /*optional_p=*/false));
4827       /* In general, build a SCOPE_REF if the member name is qualified.
4828          However, if the name was not dependent and has already been
4829          resolved; there is no need to build the SCOPE_REF.  For example;
4830
4831              struct X { void f(); };
4832              template <typename T> void f(T* t) { t->X::f(); }
4833
4834          Even though "t" is dependent, "X::f" is not and has been resolved
4835          to a BASELINK; there is no need to include scope information.  */
4836
4837       /* But we do need to remember that there was an explicit scope for
4838          virtual function calls.  */
4839       if (parser->scope)
4840         *idk = CP_ID_KIND_QUALIFIED;
4841
4842       /* If the name is a template-id that names a type, we will get a
4843          TYPE_DECL here.  That is invalid code.  */
4844       if (TREE_CODE (name) == TYPE_DECL)
4845         {
4846           error ("invalid use of %qD", name);
4847           postfix_expression = error_mark_node;
4848         }
4849       else
4850         {
4851           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4852             {
4853               name = build_qualified_name (/*type=*/NULL_TREE,
4854                                            parser->scope,
4855                                            name,
4856                                            template_p);
4857               parser->scope = NULL_TREE;
4858               parser->qualifying_scope = NULL_TREE;
4859               parser->object_scope = NULL_TREE;
4860             }
4861           if (scope && name && BASELINK_P (name))
4862             adjust_result_of_qualified_name_lookup
4863               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
4864           postfix_expression
4865             = finish_class_member_access_expr (postfix_expression, name,
4866                                                template_p);
4867         }
4868     }
4869
4870   /* We no longer need to look up names in the scope of the object on
4871      the left-hand side of the `.' or `->' operator.  */
4872   parser->context->object_type = NULL_TREE;
4873
4874   /* Outside of offsetof, these operators may not appear in
4875      constant-expressions.  */
4876   if (!for_offsetof
4877       && (cp_parser_non_integral_constant_expression
4878           (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4879     postfix_expression = error_mark_node;
4880
4881   return postfix_expression;
4882 }
4883
4884 /* Parse a parenthesized expression-list.
4885
4886    expression-list:
4887      assignment-expression
4888      expression-list, assignment-expression
4889
4890    attribute-list:
4891      expression-list
4892      identifier
4893      identifier, expression-list
4894
4895    CAST_P is true if this expression is the target of a cast.
4896
4897    ALLOW_EXPANSION_P is true if this expression allows expansion of an
4898    argument pack.
4899
4900    Returns a TREE_LIST.  The TREE_VALUE of each node is a
4901    representation of an assignment-expression.  Note that a TREE_LIST
4902    is returned even if there is only a single expression in the list.
4903    error_mark_node is returned if the ( and or ) are
4904    missing. NULL_TREE is returned on no expressions. The parentheses
4905    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4906    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4907    indicates whether or not all of the expressions in the list were
4908    constant.  */
4909
4910 static tree
4911 cp_parser_parenthesized_expression_list (cp_parser* parser,
4912                                          bool is_attribute_list,
4913                                          bool cast_p,
4914                                          bool allow_expansion_p,
4915                                          bool *non_constant_p)
4916 {
4917   tree expression_list = NULL_TREE;
4918   bool fold_expr_p = is_attribute_list;
4919   tree identifier = NULL_TREE;
4920
4921   /* Assume all the expressions will be constant.  */
4922   if (non_constant_p)
4923     *non_constant_p = false;
4924
4925   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4926     return error_mark_node;
4927
4928   /* Consume expressions until there are no more.  */
4929   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4930     while (true)
4931       {
4932         tree expr;
4933
4934         /* At the beginning of attribute lists, check to see if the
4935            next token is an identifier.  */
4936         if (is_attribute_list
4937             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4938           {
4939             cp_token *token;
4940
4941             /* Consume the identifier.  */
4942             token = cp_lexer_consume_token (parser->lexer);
4943             /* Save the identifier.  */
4944             identifier = token->u.value;
4945           }
4946         else
4947           {
4948             /* Parse the next assignment-expression.  */
4949             if (non_constant_p)
4950               {
4951                 bool expr_non_constant_p;
4952                 expr = (cp_parser_constant_expression
4953                         (parser, /*allow_non_constant_p=*/true,
4954                          &expr_non_constant_p));
4955                 if (expr_non_constant_p)
4956                   *non_constant_p = true;
4957               }
4958             else
4959               expr = cp_parser_assignment_expression (parser, cast_p);
4960
4961             if (fold_expr_p)
4962               expr = fold_non_dependent_expr (expr);
4963
4964             /* If we have an ellipsis, then this is an expression
4965                expansion.  */
4966             if (allow_expansion_p
4967                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
4968               {
4969                 /* Consume the `...'.  */
4970                 cp_lexer_consume_token (parser->lexer);
4971
4972                 /* Build the argument pack.  */
4973                 expr = make_pack_expansion (expr);
4974               }
4975
4976              /* Add it to the list.  We add error_mark_node
4977                 expressions to the list, so that we can still tell if
4978                 the correct form for a parenthesized expression-list
4979                 is found. That gives better errors.  */
4980             expression_list = tree_cons (NULL_TREE, expr, expression_list);
4981
4982             if (expr == error_mark_node)
4983               goto skip_comma;
4984           }
4985
4986         /* After the first item, attribute lists look the same as
4987            expression lists.  */
4988         is_attribute_list = false;
4989
4990       get_comma:;
4991         /* If the next token isn't a `,', then we are done.  */
4992         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4993           break;
4994
4995         /* Otherwise, consume the `,' and keep going.  */
4996         cp_lexer_consume_token (parser->lexer);
4997       }
4998
4999   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
5000     {
5001       int ending;
5002
5003     skip_comma:;
5004       /* We try and resync to an unnested comma, as that will give the
5005          user better diagnostics.  */
5006       ending = cp_parser_skip_to_closing_parenthesis (parser,
5007                                                       /*recovering=*/true,
5008                                                       /*or_comma=*/true,
5009                                                       /*consume_paren=*/true);
5010       if (ending < 0)
5011         goto get_comma;
5012       if (!ending)
5013         return error_mark_node;
5014     }
5015
5016   /* We built up the list in reverse order so we must reverse it now.  */
5017   expression_list = nreverse (expression_list);
5018   if (identifier)
5019     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
5020
5021   return expression_list;
5022 }
5023
5024 /* Parse a pseudo-destructor-name.
5025
5026    pseudo-destructor-name:
5027      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
5028      :: [opt] nested-name-specifier template template-id :: ~ type-name
5029      :: [opt] nested-name-specifier [opt] ~ type-name
5030
5031    If either of the first two productions is used, sets *SCOPE to the
5032    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
5033    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
5034    or ERROR_MARK_NODE if the parse fails.  */
5035
5036 static void
5037 cp_parser_pseudo_destructor_name (cp_parser* parser,
5038                                   tree* scope,
5039                                   tree* type)
5040 {
5041   bool nested_name_specifier_p;
5042
5043   /* Assume that things will not work out.  */
5044   *type = error_mark_node;
5045
5046   /* Look for the optional `::' operator.  */
5047   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
5048   /* Look for the optional nested-name-specifier.  */
5049   nested_name_specifier_p
5050     = (cp_parser_nested_name_specifier_opt (parser,
5051                                             /*typename_keyword_p=*/false,
5052                                             /*check_dependency_p=*/true,
5053                                             /*type_p=*/false,
5054                                             /*is_declaration=*/true)
5055        != NULL_TREE);
5056   /* Now, if we saw a nested-name-specifier, we might be doing the
5057      second production.  */
5058   if (nested_name_specifier_p
5059       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
5060     {
5061       /* Consume the `template' keyword.  */
5062       cp_lexer_consume_token (parser->lexer);
5063       /* Parse the template-id.  */
5064       cp_parser_template_id (parser,
5065                              /*template_keyword_p=*/true,
5066                              /*check_dependency_p=*/false,
5067                              /*is_declaration=*/true);
5068       /* Look for the `::' token.  */
5069       cp_parser_require (parser, CPP_SCOPE, "`::'");
5070     }
5071   /* If the next token is not a `~', then there might be some
5072      additional qualification.  */
5073   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
5074     {
5075       /* Look for the type-name.  */
5076       *scope = TREE_TYPE (cp_parser_type_name (parser));
5077
5078       if (*scope == error_mark_node)
5079         return;
5080
5081       /* If we don't have ::~, then something has gone wrong.  Since
5082          the only caller of this function is looking for something
5083          after `.' or `->' after a scalar type, most likely the
5084          program is trying to get a member of a non-aggregate
5085          type.  */
5086       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
5087           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
5088         {
5089           cp_parser_error (parser, "request for member of non-aggregate type");
5090           return;
5091         }
5092
5093       /* Look for the `::' token.  */
5094       cp_parser_require (parser, CPP_SCOPE, "`::'");
5095     }
5096   else
5097     *scope = NULL_TREE;
5098
5099   /* Look for the `~'.  */
5100   cp_parser_require (parser, CPP_COMPL, "`~'");
5101   /* Look for the type-name again.  We are not responsible for
5102      checking that it matches the first type-name.  */
5103   *type = cp_parser_type_name (parser);
5104 }
5105
5106 /* Parse a unary-expression.
5107
5108    unary-expression:
5109      postfix-expression
5110      ++ cast-expression
5111      -- cast-expression
5112      unary-operator cast-expression
5113      sizeof unary-expression
5114      sizeof ( type-id )
5115      new-expression
5116      delete-expression
5117
5118    GNU Extensions:
5119
5120    unary-expression:
5121      __extension__ cast-expression
5122      __alignof__ unary-expression
5123      __alignof__ ( type-id )
5124      __real__ cast-expression
5125      __imag__ cast-expression
5126      && identifier
5127
5128    ADDRESS_P is true iff the unary-expression is appearing as the
5129    operand of the `&' operator.   CAST_P is true if this expression is
5130    the target of a cast.
5131
5132    Returns a representation of the expression.  */
5133
5134 static tree
5135 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
5136 {
5137   cp_token *token;
5138   enum tree_code unary_operator;
5139
5140   /* Peek at the next token.  */
5141   token = cp_lexer_peek_token (parser->lexer);
5142   /* Some keywords give away the kind of expression.  */
5143   if (token->type == CPP_KEYWORD)
5144     {
5145       enum rid keyword = token->keyword;
5146
5147       switch (keyword)
5148         {
5149         case RID_ALIGNOF:
5150         case RID_SIZEOF:
5151           {
5152             tree operand;
5153             enum tree_code op;
5154
5155             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5156             /* Consume the token.  */
5157             cp_lexer_consume_token (parser->lexer);
5158             /* Parse the operand.  */
5159             operand = cp_parser_sizeof_operand (parser, keyword);
5160
5161             if (TYPE_P (operand))
5162               return cxx_sizeof_or_alignof_type (operand, op, true);
5163             else
5164               return cxx_sizeof_or_alignof_expr (operand, op);
5165           }
5166
5167         case RID_NEW:
5168           return cp_parser_new_expression (parser);
5169
5170         case RID_DELETE:
5171           return cp_parser_delete_expression (parser);
5172
5173         case RID_EXTENSION:
5174           {
5175             /* The saved value of the PEDANTIC flag.  */
5176             int saved_pedantic;
5177             tree expr;
5178
5179             /* Save away the PEDANTIC flag.  */
5180             cp_parser_extension_opt (parser, &saved_pedantic);
5181             /* Parse the cast-expression.  */
5182             expr = cp_parser_simple_cast_expression (parser);
5183             /* Restore the PEDANTIC flag.  */
5184             pedantic = saved_pedantic;
5185
5186             return expr;
5187           }
5188
5189         case RID_REALPART:
5190         case RID_IMAGPART:
5191           {
5192             tree expression;
5193
5194             /* Consume the `__real__' or `__imag__' token.  */
5195             cp_lexer_consume_token (parser->lexer);
5196             /* Parse the cast-expression.  */
5197             expression = cp_parser_simple_cast_expression (parser);
5198             /* Create the complete representation.  */
5199             return build_x_unary_op ((keyword == RID_REALPART
5200                                       ? REALPART_EXPR : IMAGPART_EXPR),
5201                                      expression);
5202           }
5203           break;
5204
5205         default:
5206           break;
5207         }
5208     }
5209
5210   /* Look for the `:: new' and `:: delete', which also signal the
5211      beginning of a new-expression, or delete-expression,
5212      respectively.  If the next token is `::', then it might be one of
5213      these.  */
5214   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5215     {
5216       enum rid keyword;
5217
5218       /* See if the token after the `::' is one of the keywords in
5219          which we're interested.  */
5220       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5221       /* If it's `new', we have a new-expression.  */
5222       if (keyword == RID_NEW)
5223         return cp_parser_new_expression (parser);
5224       /* Similarly, for `delete'.  */
5225       else if (keyword == RID_DELETE)
5226         return cp_parser_delete_expression (parser);
5227     }
5228
5229   /* Look for a unary operator.  */
5230   unary_operator = cp_parser_unary_operator (token);
5231   /* The `++' and `--' operators can be handled similarly, even though
5232      they are not technically unary-operators in the grammar.  */
5233   if (unary_operator == ERROR_MARK)
5234     {
5235       if (token->type == CPP_PLUS_PLUS)
5236         unary_operator = PREINCREMENT_EXPR;
5237       else if (token->type == CPP_MINUS_MINUS)
5238         unary_operator = PREDECREMENT_EXPR;
5239       /* Handle the GNU address-of-label extension.  */
5240       else if (cp_parser_allow_gnu_extensions_p (parser)
5241                && token->type == CPP_AND_AND)
5242         {
5243           tree identifier;
5244
5245           /* Consume the '&&' token.  */
5246           cp_lexer_consume_token (parser->lexer);
5247           /* Look for the identifier.  */
5248           identifier = cp_parser_identifier (parser);
5249           /* Create an expression representing the address.  */
5250           return finish_label_address_expr (identifier);
5251         }
5252     }
5253   if (unary_operator != ERROR_MARK)
5254     {
5255       tree cast_expression;
5256       tree expression = error_mark_node;
5257       const char *non_constant_p = NULL;
5258
5259       /* Consume the operator token.  */
5260       token = cp_lexer_consume_token (parser->lexer);
5261       /* Parse the cast-expression.  */
5262       cast_expression
5263         = cp_parser_cast_expression (parser,
5264                                      unary_operator == ADDR_EXPR,
5265                                      /*cast_p=*/false);
5266       /* Now, build an appropriate representation.  */
5267       switch (unary_operator)
5268         {
5269         case INDIRECT_REF:
5270           non_constant_p = "`*'";
5271           expression = build_x_indirect_ref (cast_expression, "unary *");
5272           break;
5273
5274         case ADDR_EXPR:
5275           non_constant_p = "`&'";
5276           /* Fall through.  */
5277         case BIT_NOT_EXPR:
5278           expression = build_x_unary_op (unary_operator, cast_expression);
5279           break;
5280
5281         case PREINCREMENT_EXPR:
5282         case PREDECREMENT_EXPR:
5283           non_constant_p = (unary_operator == PREINCREMENT_EXPR
5284                             ? "`++'" : "`--'");
5285           /* Fall through.  */
5286         case UNARY_PLUS_EXPR:
5287         case NEGATE_EXPR:
5288         case TRUTH_NOT_EXPR:
5289           expression = finish_unary_op_expr (unary_operator, cast_expression);
5290           break;
5291
5292         default:
5293           gcc_unreachable ();
5294         }
5295
5296       if (non_constant_p
5297           && cp_parser_non_integral_constant_expression (parser,
5298                                                          non_constant_p))
5299         expression = error_mark_node;
5300
5301       return expression;
5302     }
5303
5304   return cp_parser_postfix_expression (parser, address_p, cast_p);
5305 }
5306
5307 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5308    unary-operator, the corresponding tree code is returned.  */
5309
5310 static enum tree_code
5311 cp_parser_unary_operator (cp_token* token)
5312 {
5313   switch (token->type)
5314     {
5315     case CPP_MULT:
5316       return INDIRECT_REF;
5317
5318     case CPP_AND:
5319       return ADDR_EXPR;
5320
5321     case CPP_PLUS:
5322       return UNARY_PLUS_EXPR;
5323
5324     case CPP_MINUS:
5325       return NEGATE_EXPR;
5326
5327     case CPP_NOT:
5328       return TRUTH_NOT_EXPR;
5329
5330     case CPP_COMPL:
5331       return BIT_NOT_EXPR;
5332
5333     default:
5334       return ERROR_MARK;
5335     }
5336 }
5337
5338 /* Parse a new-expression.
5339
5340    new-expression:
5341      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5342      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5343
5344    Returns a representation of the expression.  */
5345
5346 static tree
5347 cp_parser_new_expression (cp_parser* parser)
5348 {
5349   bool global_scope_p;
5350   tree placement;
5351   tree type;
5352   tree initializer;
5353   tree nelts;
5354
5355   /* Look for the optional `::' operator.  */
5356   global_scope_p
5357     = (cp_parser_global_scope_opt (parser,
5358                                    /*current_scope_valid_p=*/false)
5359        != NULL_TREE);
5360   /* Look for the `new' operator.  */
5361   cp_parser_require_keyword (parser, RID_NEW, "`new'");
5362   /* There's no easy way to tell a new-placement from the
5363      `( type-id )' construct.  */
5364   cp_parser_parse_tentatively (parser);
5365   /* Look for a new-placement.  */
5366   placement = cp_parser_new_placement (parser);
5367   /* If that didn't work out, there's no new-placement.  */
5368   if (!cp_parser_parse_definitely (parser))
5369     placement = NULL_TREE;
5370
5371   /* If the next token is a `(', then we have a parenthesized
5372      type-id.  */
5373   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5374     {
5375       /* Consume the `('.  */
5376       cp_lexer_consume_token (parser->lexer);
5377       /* Parse the type-id.  */
5378       type = cp_parser_type_id (parser);
5379       /* Look for the closing `)'.  */
5380       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5381       /* There should not be a direct-new-declarator in this production,
5382          but GCC used to allowed this, so we check and emit a sensible error
5383          message for this case.  */
5384       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5385         {
5386           error ("array bound forbidden after parenthesized type-id");
5387           inform ("try removing the parentheses around the type-id");
5388           cp_parser_direct_new_declarator (parser);
5389         }
5390       nelts = NULL_TREE;
5391     }
5392   /* Otherwise, there must be a new-type-id.  */
5393   else
5394     type = cp_parser_new_type_id (parser, &nelts);
5395
5396   /* If the next token is a `(', then we have a new-initializer.  */
5397   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5398     initializer = cp_parser_new_initializer (parser);
5399   else
5400     initializer = NULL_TREE;
5401
5402   /* A new-expression may not appear in an integral constant
5403      expression.  */
5404   if (cp_parser_non_integral_constant_expression (parser, "`new'"))
5405     return error_mark_node;
5406
5407   /* Create a representation of the new-expression.  */
5408   return build_new (placement, type, nelts, initializer, global_scope_p);
5409 }
5410
5411 /* Parse a new-placement.
5412
5413    new-placement:
5414      ( expression-list )
5415
5416    Returns the same representation as for an expression-list.  */
5417
5418 static tree
5419 cp_parser_new_placement (cp_parser* parser)
5420 {
5421   tree expression_list;
5422
5423   /* Parse the expression-list.  */
5424   expression_list = (cp_parser_parenthesized_expression_list
5425                      (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5426                       /*non_constant_p=*/NULL));
5427
5428   return expression_list;
5429 }
5430
5431 /* Parse a new-type-id.
5432
5433    new-type-id:
5434      type-specifier-seq new-declarator [opt]
5435
5436    Returns the TYPE allocated.  If the new-type-id indicates an array
5437    type, *NELTS is set to the number of elements in the last array
5438    bound; the TYPE will not include the last array bound.  */
5439
5440 static tree
5441 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5442 {
5443   cp_decl_specifier_seq type_specifier_seq;
5444   cp_declarator *new_declarator;
5445   cp_declarator *declarator;
5446   cp_declarator *outer_declarator;
5447   const char *saved_message;
5448   tree type;
5449
5450   /* The type-specifier sequence must not contain type definitions.
5451      (It cannot contain declarations of new types either, but if they
5452      are not definitions we will catch that because they are not
5453      complete.)  */
5454   saved_message = parser->type_definition_forbidden_message;
5455   parser->type_definition_forbidden_message
5456     = "types may not be defined in a new-type-id";
5457   /* Parse the type-specifier-seq.  */
5458   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5459                                 &type_specifier_seq);
5460   /* Restore the old message.  */
5461   parser->type_definition_forbidden_message = saved_message;
5462   /* Parse the new-declarator.  */
5463   new_declarator = cp_parser_new_declarator_opt (parser);
5464
5465   /* Determine the number of elements in the last array dimension, if
5466      any.  */
5467   *nelts = NULL_TREE;
5468   /* Skip down to the last array dimension.  */
5469   declarator = new_declarator;
5470   outer_declarator = NULL;
5471   while (declarator && (declarator->kind == cdk_pointer
5472                         || declarator->kind == cdk_ptrmem))
5473     {
5474       outer_declarator = declarator;
5475       declarator = declarator->declarator;
5476     }
5477   while (declarator
5478          && declarator->kind == cdk_array
5479          && declarator->declarator
5480          && declarator->declarator->kind == cdk_array)
5481     {
5482       outer_declarator = declarator;
5483       declarator = declarator->declarator;
5484     }
5485
5486   if (declarator && declarator->kind == cdk_array)
5487     {
5488       *nelts = declarator->u.array.bounds;
5489       if (*nelts == error_mark_node)
5490         *nelts = integer_one_node;
5491
5492       if (outer_declarator)
5493         outer_declarator->declarator = declarator->declarator;
5494       else
5495         new_declarator = NULL;
5496     }
5497
5498   type = groktypename (&type_specifier_seq, new_declarator);
5499   if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
5500     {
5501       *nelts = array_type_nelts_top (type);
5502       type = TREE_TYPE (type);
5503     }
5504   return type;
5505 }
5506
5507 /* Parse an (optional) new-declarator.
5508
5509    new-declarator:
5510      ptr-operator new-declarator [opt]
5511      direct-new-declarator
5512
5513    Returns the declarator.  */
5514
5515 static cp_declarator *
5516 cp_parser_new_declarator_opt (cp_parser* parser)
5517 {
5518   enum tree_code code;
5519   tree type;
5520   cp_cv_quals cv_quals;
5521
5522   /* We don't know if there's a ptr-operator next, or not.  */
5523   cp_parser_parse_tentatively (parser);
5524   /* Look for a ptr-operator.  */
5525   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5526   /* If that worked, look for more new-declarators.  */
5527   if (cp_parser_parse_definitely (parser))
5528     {
5529       cp_declarator *declarator;
5530
5531       /* Parse another optional declarator.  */
5532       declarator = cp_parser_new_declarator_opt (parser);
5533
5534       /* Create the representation of the declarator.  */
5535       if (type)
5536         declarator = make_ptrmem_declarator (cv_quals, type, declarator);
5537       else if (code == INDIRECT_REF)
5538         declarator = make_pointer_declarator (cv_quals, declarator);
5539       else
5540         declarator = make_reference_declarator (cv_quals, declarator);
5541
5542       return declarator;
5543     }
5544
5545   /* If the next token is a `[', there is a direct-new-declarator.  */
5546   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5547     return cp_parser_direct_new_declarator (parser);
5548
5549   return NULL;
5550 }
5551
5552 /* Parse a direct-new-declarator.
5553
5554    direct-new-declarator:
5555      [ expression ]
5556      direct-new-declarator [constant-expression]
5557
5558    */
5559
5560 static cp_declarator *
5561 cp_parser_direct_new_declarator (cp_parser* parser)
5562 {
5563   cp_declarator *declarator = NULL;
5564
5565   while (true)
5566     {
5567       tree expression;
5568
5569       /* Look for the opening `['.  */
5570       cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
5571       /* The first expression is not required to be constant.  */
5572       if (!declarator)
5573         {
5574           expression = cp_parser_expression (parser, /*cast_p=*/false);
5575           /* The standard requires that the expression have integral
5576              type.  DR 74 adds enumeration types.  We believe that the
5577              real intent is that these expressions be handled like the
5578              expression in a `switch' condition, which also allows
5579              classes with a single conversion to integral or
5580              enumeration type.  */
5581           if (!processing_template_decl)
5582             {
5583               expression
5584                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5585                                               expression,
5586                                               /*complain=*/true);
5587               if (!expression)
5588                 {
5589                   error ("expression in new-declarator must have integral "
5590                          "or enumeration type");
5591                   expression = error_mark_node;
5592                 }
5593             }
5594         }
5595       /* But all the other expressions must be.  */
5596       else
5597         expression
5598           = cp_parser_constant_expression (parser,
5599                                            /*allow_non_constant=*/false,
5600                                            NULL);
5601       /* Look for the closing `]'.  */
5602       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5603
5604       /* Add this bound to the declarator.  */
5605       declarator = make_array_declarator (declarator, expression);
5606
5607       /* If the next token is not a `[', then there are no more
5608          bounds.  */
5609       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5610         break;
5611     }
5612
5613   return declarator;
5614 }
5615
5616 /* Parse a new-initializer.
5617
5618    new-initializer:
5619      ( expression-list [opt] )
5620
5621    Returns a representation of the expression-list.  If there is no
5622    expression-list, VOID_ZERO_NODE is returned.  */
5623
5624 static tree
5625 cp_parser_new_initializer (cp_parser* parser)
5626 {
5627   tree expression_list;
5628
5629   expression_list = (cp_parser_parenthesized_expression_list
5630                      (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5631                       /*non_constant_p=*/NULL));
5632   if (!expression_list)
5633     expression_list = void_zero_node;
5634
5635   return expression_list;
5636 }
5637
5638 /* Parse a delete-expression.
5639
5640    delete-expression:
5641      :: [opt] delete cast-expression
5642      :: [opt] delete [ ] cast-expression
5643
5644    Returns a representation of the expression.  */
5645
5646 static tree
5647 cp_parser_delete_expression (cp_parser* parser)
5648 {
5649   bool global_scope_p;
5650   bool array_p;
5651   tree expression;
5652
5653   /* Look for the optional `::' operator.  */
5654   global_scope_p
5655     = (cp_parser_global_scope_opt (parser,
5656                                    /*current_scope_valid_p=*/false)
5657        != NULL_TREE);
5658   /* Look for the `delete' keyword.  */
5659   cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
5660   /* See if the array syntax is in use.  */
5661   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5662     {
5663       /* Consume the `[' token.  */
5664       cp_lexer_consume_token (parser->lexer);
5665       /* Look for the `]' token.  */
5666       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5667       /* Remember that this is the `[]' construct.  */
5668       array_p = true;
5669     }
5670   else
5671     array_p = false;
5672
5673   /* Parse the cast-expression.  */
5674   expression = cp_parser_simple_cast_expression (parser);
5675
5676   /* A delete-expression may not appear in an integral constant
5677      expression.  */
5678   if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
5679     return error_mark_node;
5680
5681   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5682 }
5683
5684 /* Parse a cast-expression.
5685
5686    cast-expression:
5687      unary-expression
5688      ( type-id ) cast-expression
5689
5690    ADDRESS_P is true iff the unary-expression is appearing as the
5691    operand of the `&' operator.   CAST_P is true if this expression is
5692    the target of a cast.
5693
5694    Returns a representation of the expression.  */
5695
5696 static tree
5697 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5698 {
5699   /* If it's a `(', then we might be looking at a cast.  */
5700   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5701     {
5702       tree type = NULL_TREE;
5703       tree expr = NULL_TREE;
5704       bool compound_literal_p;
5705       const char *saved_message;
5706
5707       /* There's no way to know yet whether or not this is a cast.
5708          For example, `(int (3))' is a unary-expression, while `(int)
5709          3' is a cast.  So, we resort to parsing tentatively.  */
5710       cp_parser_parse_tentatively (parser);
5711       /* Types may not be defined in a cast.  */
5712       saved_message = parser->type_definition_forbidden_message;
5713       parser->type_definition_forbidden_message
5714         = "types may not be defined in casts";
5715       /* Consume the `('.  */
5716       cp_lexer_consume_token (parser->lexer);
5717       /* A very tricky bit is that `(struct S) { 3 }' is a
5718          compound-literal (which we permit in C++ as an extension).
5719          But, that construct is not a cast-expression -- it is a
5720          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5721          is legal; if the compound-literal were a cast-expression,
5722          you'd need an extra set of parentheses.)  But, if we parse
5723          the type-id, and it happens to be a class-specifier, then we
5724          will commit to the parse at that point, because we cannot
5725          undo the action that is done when creating a new class.  So,
5726          then we cannot back up and do a postfix-expression.
5727
5728          Therefore, we scan ahead to the closing `)', and check to see
5729          if the token after the `)' is a `{'.  If so, we are not
5730          looking at a cast-expression.
5731
5732          Save tokens so that we can put them back.  */
5733       cp_lexer_save_tokens (parser->lexer);
5734       /* Skip tokens until the next token is a closing parenthesis.
5735          If we find the closing `)', and the next token is a `{', then
5736          we are looking at a compound-literal.  */
5737       compound_literal_p
5738         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5739                                                   /*consume_paren=*/true)
5740            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5741       /* Roll back the tokens we skipped.  */
5742       cp_lexer_rollback_tokens (parser->lexer);
5743       /* If we were looking at a compound-literal, simulate an error
5744          so that the call to cp_parser_parse_definitely below will
5745          fail.  */
5746       if (compound_literal_p)
5747         cp_parser_simulate_error (parser);
5748       else
5749         {
5750           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5751           parser->in_type_id_in_expr_p = true;
5752           /* Look for the type-id.  */
5753           type = cp_parser_type_id (parser);
5754           /* Look for the closing `)'.  */
5755           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5756           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5757         }
5758
5759       /* Restore the saved message.  */
5760       parser->type_definition_forbidden_message = saved_message;
5761
5762       /* If ok so far, parse the dependent expression. We cannot be
5763          sure it is a cast. Consider `(T ())'.  It is a parenthesized
5764          ctor of T, but looks like a cast to function returning T
5765          without a dependent expression.  */
5766       if (!cp_parser_error_occurred (parser))
5767         expr = cp_parser_cast_expression (parser,
5768                                           /*address_p=*/false,
5769                                           /*cast_p=*/true);
5770
5771       if (cp_parser_parse_definitely (parser))
5772         {
5773           /* Warn about old-style casts, if so requested.  */
5774           if (warn_old_style_cast
5775               && !in_system_header
5776               && !VOID_TYPE_P (type)
5777               && current_lang_name != lang_name_c)
5778             warning (OPT_Wold_style_cast, "use of old-style cast");
5779
5780           /* Only type conversions to integral or enumeration types
5781              can be used in constant-expressions.  */
5782           if (!cast_valid_in_integral_constant_expression_p (type)
5783               && (cp_parser_non_integral_constant_expression
5784                   (parser,
5785                    "a cast to a type other than an integral or "
5786                    "enumeration type")))
5787             return error_mark_node;
5788
5789           /* Perform the cast.  */
5790           expr = build_c_cast (type, expr);
5791           return expr;
5792         }
5793     }
5794
5795   /* If we get here, then it's not a cast, so it must be a
5796      unary-expression.  */
5797   return cp_parser_unary_expression (parser, address_p, cast_p);
5798 }
5799
5800 /* Parse a binary expression of the general form:
5801
5802    pm-expression:
5803      cast-expression
5804      pm-expression .* cast-expression
5805      pm-expression ->* cast-expression
5806
5807    multiplicative-expression:
5808      pm-expression
5809      multiplicative-expression * pm-expression
5810      multiplicative-expression / pm-expression
5811      multiplicative-expression % pm-expression
5812
5813    additive-expression:
5814      multiplicative-expression
5815      additive-expression + multiplicative-expression
5816      additive-expression - multiplicative-expression
5817
5818    shift-expression:
5819      additive-expression
5820      shift-expression << additive-expression
5821      shift-expression >> additive-expression
5822
5823    relational-expression:
5824      shift-expression
5825      relational-expression < shift-expression
5826      relational-expression > shift-expression
5827      relational-expression <= shift-expression
5828      relational-expression >= shift-expression
5829
5830   GNU Extension:
5831
5832    relational-expression:
5833      relational-expression <? shift-expression
5834      relational-expression >? shift-expression
5835
5836    equality-expression:
5837      relational-expression
5838      equality-expression == relational-expression
5839      equality-expression != relational-expression
5840
5841    and-expression:
5842      equality-expression
5843      and-expression & equality-expression
5844
5845    exclusive-or-expression:
5846      and-expression
5847      exclusive-or-expression ^ and-expression
5848
5849    inclusive-or-expression:
5850      exclusive-or-expression
5851      inclusive-or-expression | exclusive-or-expression
5852
5853    logical-and-expression:
5854      inclusive-or-expression
5855      logical-and-expression && inclusive-or-expression
5856
5857    logical-or-expression:
5858      logical-and-expression
5859      logical-or-expression || logical-and-expression
5860
5861    All these are implemented with a single function like:
5862
5863    binary-expression:
5864      simple-cast-expression
5865      binary-expression <token> binary-expression
5866
5867    CAST_P is true if this expression is the target of a cast.
5868
5869    The binops_by_token map is used to get the tree codes for each <token> type.
5870    binary-expressions are associated according to a precedence table.  */
5871
5872 #define TOKEN_PRECEDENCE(token)                         \
5873 (((token->type == CPP_GREATER                           \
5874    || (flag_cpp0x && token->type == CPP_RSHIFT))        \
5875   && !parser->greater_than_is_operator_p)               \
5876  ? PREC_NOT_OPERATOR                                    \
5877  : binops_by_token[token->type].prec)
5878
5879 static tree
5880 cp_parser_binary_expression (cp_parser* parser, bool cast_p)
5881 {
5882   cp_parser_expression_stack stack;
5883   cp_parser_expression_stack_entry *sp = &stack[0];
5884   tree lhs, rhs;
5885   cp_token *token;
5886   enum tree_code tree_type, lhs_type, rhs_type;
5887   enum cp_parser_prec prec = PREC_NOT_OPERATOR, new_prec, lookahead_prec;
5888   bool overloaded_p;
5889
5890   /* Parse the first expression.  */
5891   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
5892   lhs_type = ERROR_MARK;
5893
5894   for (;;)
5895     {
5896       /* Get an operator token.  */
5897       token = cp_lexer_peek_token (parser->lexer);
5898
5899       if (warn_cxx0x_compat
5900           && token->type == CPP_RSHIFT
5901           && !parser->greater_than_is_operator_p)
5902         {
5903           warning (OPT_Wc__0x_compat, 
5904                    "%H%<>>%> operator will be treated as two right angle brackets in C++0x", 
5905                    &token->location);
5906           warning (OPT_Wc__0x_compat, 
5907                    "suggest parentheses around %<>>%> expression");
5908         }
5909
5910       new_prec = TOKEN_PRECEDENCE (token);
5911
5912       /* Popping an entry off the stack means we completed a subexpression:
5913          - either we found a token which is not an operator (`>' where it is not
5914            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
5915            will happen repeatedly;
5916          - or, we found an operator which has lower priority.  This is the case
5917            where the recursive descent *ascends*, as in `3 * 4 + 5' after
5918            parsing `3 * 4'.  */
5919       if (new_prec <= prec)
5920         {
5921           if (sp == stack)
5922             break;
5923           else
5924             goto pop;
5925         }
5926
5927      get_rhs:
5928       tree_type = binops_by_token[token->type].tree_type;
5929
5930       /* We used the operator token.  */
5931       cp_lexer_consume_token (parser->lexer);
5932
5933       /* Extract another operand.  It may be the RHS of this expression
5934          or the LHS of a new, higher priority expression.  */
5935       rhs = cp_parser_simple_cast_expression (parser);
5936       rhs_type = ERROR_MARK;
5937
5938       /* Get another operator token.  Look up its precedence to avoid
5939          building a useless (immediately popped) stack entry for common
5940          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
5941       token = cp_lexer_peek_token (parser->lexer);
5942       lookahead_prec = TOKEN_PRECEDENCE (token);
5943       if (lookahead_prec > new_prec)
5944         {
5945           /* ... and prepare to parse the RHS of the new, higher priority
5946              expression.  Since precedence levels on the stack are
5947              monotonically increasing, we do not have to care about
5948              stack overflows.  */
5949           sp->prec = prec;
5950           sp->tree_type = tree_type;
5951           sp->lhs = lhs;
5952           sp->lhs_type = lhs_type;
5953           sp++;
5954           lhs = rhs;
5955           lhs_type = rhs_type;
5956           prec = new_prec;
5957           new_prec = lookahead_prec;
5958           goto get_rhs;
5959
5960          pop:
5961           /* If the stack is not empty, we have parsed into LHS the right side
5962              (`4' in the example above) of an expression we had suspended.
5963              We can use the information on the stack to recover the LHS (`3')
5964              from the stack together with the tree code (`MULT_EXPR'), and
5965              the precedence of the higher level subexpression
5966              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
5967              which will be used to actually build the additive expression.  */
5968           --sp;
5969           prec = sp->prec;
5970           tree_type = sp->tree_type;
5971           rhs = lhs;
5972           rhs_type = lhs_type;
5973           lhs = sp->lhs;
5974           lhs_type = sp->lhs_type;
5975         }
5976
5977       overloaded_p = false;
5978       lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
5979                                &overloaded_p);
5980       lhs_type = tree_type;
5981
5982       /* If the binary operator required the use of an overloaded operator,
5983          then this expression cannot be an integral constant-expression.
5984          An overloaded operator can be used even if both operands are
5985          otherwise permissible in an integral constant-expression if at
5986          least one of the operands is of enumeration type.  */
5987
5988       if (overloaded_p
5989           && (cp_parser_non_integral_constant_expression
5990               (parser, "calls to overloaded operators")))
5991         return error_mark_node;
5992     }
5993
5994   return lhs;
5995 }
5996
5997
5998 /* Parse the `? expression : assignment-expression' part of a
5999    conditional-expression.  The LOGICAL_OR_EXPR is the
6000    logical-or-expression that started the conditional-expression.
6001    Returns a representation of the entire conditional-expression.
6002
6003    This routine is used by cp_parser_assignment_expression.
6004
6005      ? expression : assignment-expression
6006
6007    GNU Extensions:
6008
6009      ? : assignment-expression */
6010
6011 static tree
6012 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
6013 {
6014   tree expr;
6015   tree assignment_expr;
6016
6017   /* Consume the `?' token.  */
6018   cp_lexer_consume_token (parser->lexer);
6019   if (cp_parser_allow_gnu_extensions_p (parser)
6020       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
6021     /* Implicit true clause.  */
6022     expr = NULL_TREE;
6023   else
6024     /* Parse the expression.  */
6025     expr = cp_parser_expression (parser, /*cast_p=*/false);
6026
6027   /* The next token should be a `:'.  */
6028   cp_parser_require (parser, CPP_COLON, "`:'");
6029   /* Parse the assignment-expression.  */
6030   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6031
6032   /* Build the conditional-expression.  */
6033   return build_x_conditional_expr (logical_or_expr,
6034                                    expr,
6035                                    assignment_expr);
6036 }
6037
6038 /* Parse an assignment-expression.
6039
6040    assignment-expression:
6041      conditional-expression
6042      logical-or-expression assignment-operator assignment_expression
6043      throw-expression
6044
6045    CAST_P is true if this expression is the target of a cast.
6046
6047    Returns a representation for the expression.  */
6048
6049 static tree
6050 cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
6051 {
6052   tree expr;
6053
6054   /* If the next token is the `throw' keyword, then we're looking at
6055      a throw-expression.  */
6056   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
6057     expr = cp_parser_throw_expression (parser);
6058   /* Otherwise, it must be that we are looking at a
6059      logical-or-expression.  */
6060   else
6061     {
6062       /* Parse the binary expressions (logical-or-expression).  */
6063       expr = cp_parser_binary_expression (parser, cast_p);
6064       /* If the next token is a `?' then we're actually looking at a
6065          conditional-expression.  */
6066       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
6067         return cp_parser_question_colon_clause (parser, expr);
6068       else
6069         {
6070           enum tree_code assignment_operator;
6071
6072           /* If it's an assignment-operator, we're using the second
6073              production.  */
6074           assignment_operator
6075             = cp_parser_assignment_operator_opt (parser);
6076           if (assignment_operator != ERROR_MARK)
6077             {
6078               tree rhs;
6079
6080               /* Parse the right-hand side of the assignment.  */
6081               rhs = cp_parser_assignment_expression (parser, cast_p);
6082               /* An assignment may not appear in a
6083                  constant-expression.  */
6084               if (cp_parser_non_integral_constant_expression (parser,
6085                                                               "an assignment"))
6086                 return error_mark_node;
6087               /* Build the assignment expression.  */
6088               expr = build_x_modify_expr (expr,
6089                                           assignment_operator,
6090                                           rhs);
6091             }
6092         }
6093     }
6094
6095   return expr;
6096 }
6097
6098 /* Parse an (optional) assignment-operator.
6099
6100    assignment-operator: one of
6101      = *= /= %= += -= >>= <<= &= ^= |=
6102
6103    GNU Extension:
6104
6105    assignment-operator: one of
6106      <?= >?=
6107
6108    If the next token is an assignment operator, the corresponding tree
6109    code is returned, and the token is consumed.  For example, for
6110    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
6111    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
6112    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
6113    operator, ERROR_MARK is returned.  */
6114
6115 static enum tree_code
6116 cp_parser_assignment_operator_opt (cp_parser* parser)
6117 {
6118   enum tree_code op;
6119   cp_token *token;
6120
6121   /* Peek at the next toen.  */
6122   token = cp_lexer_peek_token (parser->lexer);
6123
6124   switch (token->type)
6125     {
6126     case CPP_EQ:
6127       op = NOP_EXPR;
6128       break;
6129
6130     case CPP_MULT_EQ:
6131       op = MULT_EXPR;
6132       break;
6133
6134     case CPP_DIV_EQ:
6135       op = TRUNC_DIV_EXPR;
6136       break;
6137
6138     case CPP_MOD_EQ:
6139       op = TRUNC_MOD_EXPR;
6140       break;
6141
6142     case CPP_PLUS_EQ:
6143       op = PLUS_EXPR;
6144       break;
6145
6146     case CPP_MINUS_EQ:
6147       op = MINUS_EXPR;
6148       break;
6149
6150     case CPP_RSHIFT_EQ:
6151       op = RSHIFT_EXPR;
6152       break;
6153
6154     case CPP_LSHIFT_EQ:
6155       op = LSHIFT_EXPR;
6156       break;
6157
6158     case CPP_AND_EQ:
6159       op = BIT_AND_EXPR;
6160       break;
6161
6162     case CPP_XOR_EQ:
6163       op = BIT_XOR_EXPR;
6164       break;
6165
6166     case CPP_OR_EQ:
6167       op = BIT_IOR_EXPR;
6168       break;
6169
6170     default:
6171       /* Nothing else is an assignment operator.  */
6172       op = ERROR_MARK;
6173     }
6174
6175   /* If it was an assignment operator, consume it.  */
6176   if (op != ERROR_MARK)
6177     cp_lexer_consume_token (parser->lexer);
6178
6179   return op;
6180 }
6181
6182 /* Parse an expression.
6183
6184    expression:
6185      assignment-expression
6186      expression , assignment-expression
6187
6188    CAST_P is true if this expression is the target of a cast.
6189
6190    Returns a representation of the expression.  */
6191
6192 static tree
6193 cp_parser_expression (cp_parser* parser, bool cast_p)
6194 {
6195   tree expression = NULL_TREE;
6196
6197   while (true)
6198     {
6199       tree assignment_expression;
6200
6201       /* Parse the next assignment-expression.  */
6202       assignment_expression
6203         = cp_parser_assignment_expression (parser, cast_p);
6204       /* If this is the first assignment-expression, we can just
6205          save it away.  */
6206       if (!expression)
6207         expression = assignment_expression;
6208       else
6209         expression = build_x_compound_expr (expression,
6210                                             assignment_expression);
6211       /* If the next token is not a comma, then we are done with the
6212          expression.  */
6213       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6214         break;
6215       /* Consume the `,'.  */
6216       cp_lexer_consume_token (parser->lexer);
6217       /* A comma operator cannot appear in a constant-expression.  */
6218       if (cp_parser_non_integral_constant_expression (parser,
6219                                                       "a comma operator"))
6220         expression = error_mark_node;
6221     }
6222
6223   return expression;
6224 }
6225
6226 /* Parse a constant-expression.
6227
6228    constant-expression:
6229      conditional-expression
6230
6231   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6232   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6233   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6234   is false, NON_CONSTANT_P should be NULL.  */
6235
6236 static tree
6237 cp_parser_constant_expression (cp_parser* parser,
6238                                bool allow_non_constant_p,
6239                                bool *non_constant_p)
6240 {
6241   bool saved_integral_constant_expression_p;
6242   bool saved_allow_non_integral_constant_expression_p;
6243   bool saved_non_integral_constant_expression_p;
6244   tree expression;
6245
6246   /* It might seem that we could simply parse the
6247      conditional-expression, and then check to see if it were
6248      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
6249      one that the compiler can figure out is constant, possibly after
6250      doing some simplifications or optimizations.  The standard has a
6251      precise definition of constant-expression, and we must honor
6252      that, even though it is somewhat more restrictive.
6253
6254      For example:
6255
6256        int i[(2, 3)];
6257
6258      is not a legal declaration, because `(2, 3)' is not a
6259      constant-expression.  The `,' operator is forbidden in a
6260      constant-expression.  However, GCC's constant-folding machinery
6261      will fold this operation to an INTEGER_CST for `3'.  */
6262
6263   /* Save the old settings.  */
6264   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
6265   saved_allow_non_integral_constant_expression_p
6266     = parser->allow_non_integral_constant_expression_p;
6267   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
6268   /* We are now parsing a constant-expression.  */
6269   parser->integral_constant_expression_p = true;
6270   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
6271   parser->non_integral_constant_expression_p = false;
6272   /* Although the grammar says "conditional-expression", we parse an
6273      "assignment-expression", which also permits "throw-expression"
6274      and the use of assignment operators.  In the case that
6275      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6276      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
6277      actually essential that we look for an assignment-expression.
6278      For example, cp_parser_initializer_clauses uses this function to
6279      determine whether a particular assignment-expression is in fact
6280      constant.  */
6281   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6282   /* Restore the old settings.  */
6283   parser->integral_constant_expression_p
6284     = saved_integral_constant_expression_p;
6285   parser->allow_non_integral_constant_expression_p
6286     = saved_allow_non_integral_constant_expression_p;
6287   if (allow_non_constant_p)
6288     *non_constant_p = parser->non_integral_constant_expression_p;
6289   else if (parser->non_integral_constant_expression_p)
6290     expression = error_mark_node;
6291   parser->non_integral_constant_expression_p
6292     = saved_non_integral_constant_expression_p;
6293
6294   return expression;
6295 }
6296
6297 /* Parse __builtin_offsetof.
6298
6299    offsetof-expression:
6300      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6301
6302    offsetof-member-designator:
6303      id-expression
6304      | offsetof-member-designator "." id-expression
6305      | offsetof-member-designator "[" expression "]"  */
6306
6307 static tree
6308 cp_parser_builtin_offsetof (cp_parser *parser)
6309 {
6310   int save_ice_p, save_non_ice_p;
6311   tree type, expr;
6312   cp_id_kind dummy;
6313
6314   /* We're about to accept non-integral-constant things, but will
6315      definitely yield an integral constant expression.  Save and
6316      restore these values around our local parsing.  */
6317   save_ice_p = parser->integral_constant_expression_p;
6318   save_non_ice_p = parser->non_integral_constant_expression_p;
6319
6320   /* Consume the "__builtin_offsetof" token.  */
6321   cp_lexer_consume_token (parser->lexer);
6322   /* Consume the opening `('.  */
6323   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6324   /* Parse the type-id.  */
6325   type = cp_parser_type_id (parser);
6326   /* Look for the `,'.  */
6327   cp_parser_require (parser, CPP_COMMA, "`,'");
6328
6329   /* Build the (type *)null that begins the traditional offsetof macro.  */
6330   expr = build_static_cast (build_pointer_type (type), null_pointer_node);
6331
6332   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6333   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6334                                                  true, &dummy);
6335   while (true)
6336     {
6337       cp_token *token = cp_lexer_peek_token (parser->lexer);
6338       switch (token->type)
6339         {
6340         case CPP_OPEN_SQUARE:
6341           /* offsetof-member-designator "[" expression "]" */
6342           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6343           break;
6344
6345         case CPP_DOT:
6346           /* offsetof-member-designator "." identifier */
6347           cp_lexer_consume_token (parser->lexer);
6348           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
6349                                                          true, &dummy);
6350           break;
6351
6352         case CPP_CLOSE_PAREN:
6353           /* Consume the ")" token.  */
6354           cp_lexer_consume_token (parser->lexer);
6355           goto success;
6356
6357         default:
6358           /* Error.  We know the following require will fail, but
6359              that gives the proper error message.  */
6360           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6361           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6362           expr = error_mark_node;
6363           goto failure;
6364         }
6365     }
6366
6367  success:
6368   /* If we're processing a template, we can't finish the semantics yet.
6369      Otherwise we can fold the entire expression now.  */
6370   if (processing_template_decl)
6371     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6372   else
6373     expr = finish_offsetof (expr);
6374
6375  failure:
6376   parser->integral_constant_expression_p = save_ice_p;
6377   parser->non_integral_constant_expression_p = save_non_ice_p;
6378
6379   return expr;
6380 }
6381
6382 /* Parse a trait expression.  */
6383
6384 static tree
6385 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
6386 {
6387   cp_trait_kind kind;
6388   tree type1, type2 = NULL_TREE;
6389   bool binary = false;
6390   cp_decl_specifier_seq decl_specs;
6391
6392   switch (keyword)
6393     {
6394     case RID_HAS_NOTHROW_ASSIGN:
6395       kind = CPTK_HAS_NOTHROW_ASSIGN;
6396       break;
6397     case RID_HAS_NOTHROW_CONSTRUCTOR:
6398       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
6399       break;
6400     case RID_HAS_NOTHROW_COPY:
6401       kind = CPTK_HAS_NOTHROW_COPY;
6402       break;
6403     case RID_HAS_TRIVIAL_ASSIGN:
6404       kind = CPTK_HAS_TRIVIAL_ASSIGN;
6405       break;
6406     case RID_HAS_TRIVIAL_CONSTRUCTOR:
6407       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
6408       break;
6409     case RID_HAS_TRIVIAL_COPY:
6410       kind = CPTK_HAS_TRIVIAL_COPY;
6411       break;
6412     case RID_HAS_TRIVIAL_DESTRUCTOR:
6413       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
6414       break;
6415     case RID_HAS_VIRTUAL_DESTRUCTOR:
6416       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
6417       break;
6418     case RID_IS_ABSTRACT:
6419       kind = CPTK_IS_ABSTRACT;
6420       break;
6421     case RID_IS_BASE_OF:
6422       kind = CPTK_IS_BASE_OF;
6423       binary = true;
6424       break;
6425     case RID_IS_CLASS:
6426       kind = CPTK_IS_CLASS;
6427       break;
6428     case RID_IS_CONVERTIBLE_TO:
6429       kind = CPTK_IS_CONVERTIBLE_TO;
6430       binary = true;
6431       break;
6432     case RID_IS_EMPTY:
6433       kind = CPTK_IS_EMPTY;
6434       break;
6435     case RID_IS_ENUM:
6436       kind = CPTK_IS_ENUM;
6437       break;
6438     case RID_IS_POD:
6439       kind = CPTK_IS_POD;
6440       break;
6441     case RID_IS_POLYMORPHIC:
6442       kind = CPTK_IS_POLYMORPHIC;
6443       break;
6444     case RID_IS_UNION:
6445       kind = CPTK_IS_UNION;
6446       break;
6447     default:
6448       gcc_unreachable ();
6449     }
6450
6451   /* Consume the token.  */
6452   cp_lexer_consume_token (parser->lexer);
6453
6454   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6455
6456   type1 = cp_parser_type_id (parser);
6457
6458   /* Build a trivial decl-specifier-seq.  */
6459   clear_decl_specs (&decl_specs);
6460   decl_specs.type = type1;
6461
6462   /* Call grokdeclarator to figure out what type this is.  */
6463   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6464                           /*initialized=*/0, /*attrlist=*/NULL);
6465
6466   if (binary)
6467     {
6468       cp_parser_require (parser, CPP_COMMA, "`,'");
6469  
6470       type2 = cp_parser_type_id (parser);
6471
6472       /* Build a trivial decl-specifier-seq.  */
6473       clear_decl_specs (&decl_specs);
6474       decl_specs.type = type2;
6475
6476       /* Call grokdeclarator to figure out what type this is.  */
6477       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6478                               /*initialized=*/0, /*attrlist=*/NULL);
6479     }
6480
6481   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6482
6483   /* Complete the trait expr, which may mean either processing the
6484      static assert now or saving it for template instantiation.  */
6485   return finish_trait_expr (kind, type1, type2);
6486 }
6487
6488 /* Statements [gram.stmt.stmt]  */
6489
6490 /* Parse a statement.
6491
6492    statement:
6493      labeled-statement
6494      expression-statement
6495      compound-statement
6496      selection-statement
6497      iteration-statement
6498      jump-statement
6499      declaration-statement
6500      try-block
6501
6502   IN_COMPOUND is true when the statement is nested inside a
6503   cp_parser_compound_statement; this matters for certain pragmas.
6504
6505   If IF_P is not NULL, *IF_P is set to indicate whether the statement
6506   is a (possibly labeled) if statement which is not enclosed in braces
6507   and has an else clause.  This is used to implement -Wparentheses.  */
6508
6509 static void
6510 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6511                      bool in_compound, bool *if_p)
6512 {
6513   tree statement;
6514   cp_token *token;
6515   location_t statement_location;
6516
6517  restart:
6518   if (if_p != NULL)
6519     *if_p = false;
6520   /* There is no statement yet.  */
6521   statement = NULL_TREE;
6522   /* Peek at the next token.  */
6523   token = cp_lexer_peek_token (parser->lexer);
6524   /* Remember the location of the first token in the statement.  */
6525   statement_location = token->location;
6526   /* If this is a keyword, then that will often determine what kind of
6527      statement we have.  */
6528   if (token->type == CPP_KEYWORD)
6529     {
6530       enum rid keyword = token->keyword;
6531
6532       switch (keyword)
6533         {
6534         case RID_CASE:
6535         case RID_DEFAULT:
6536           /* Looks like a labeled-statement with a case label.
6537              Parse the label, and then use tail recursion to parse
6538              the statement.  */
6539           cp_parser_label_for_labeled_statement (parser);
6540           goto restart;
6541
6542         case RID_IF:
6543         case RID_SWITCH:
6544           statement = cp_parser_selection_statement (parser, if_p);
6545           break;
6546
6547         case RID_WHILE:
6548         case RID_DO:
6549         case RID_FOR:
6550           statement = cp_parser_iteration_statement (parser);
6551           break;
6552
6553         case RID_BREAK:
6554         case RID_CONTINUE:
6555         case RID_RETURN:
6556         case RID_GOTO:
6557           statement = cp_parser_jump_statement (parser);
6558           break;
6559
6560           /* Objective-C++ exception-handling constructs.  */
6561         case RID_AT_TRY:
6562         case RID_AT_CATCH:
6563         case RID_AT_FINALLY:
6564         case RID_AT_SYNCHRONIZED:
6565         case RID_AT_THROW:
6566           statement = cp_parser_objc_statement (parser);
6567           break;
6568
6569         case RID_TRY:
6570           statement = cp_parser_try_block (parser);
6571           break;
6572
6573         case RID_NAMESPACE:
6574           /* This must be a namespace alias definition.  */
6575           cp_parser_declaration_statement (parser);
6576           return;
6577           
6578         default:
6579           /* It might be a keyword like `int' that can start a
6580              declaration-statement.  */
6581           break;
6582         }
6583     }
6584   else if (token->type == CPP_NAME)
6585     {
6586       /* If the next token is a `:', then we are looking at a
6587          labeled-statement.  */
6588       token = cp_lexer_peek_nth_token (parser->lexer, 2);
6589       if (token->type == CPP_COLON)
6590         {
6591           /* Looks like a labeled-statement with an ordinary label.
6592              Parse the label, and then use tail recursion to parse
6593              the statement.  */
6594           cp_parser_label_for_labeled_statement (parser);
6595           goto restart;
6596         }
6597     }
6598   /* Anything that starts with a `{' must be a compound-statement.  */
6599   else if (token->type == CPP_OPEN_BRACE)
6600     statement = cp_parser_compound_statement (parser, NULL, false);
6601   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6602      a statement all its own.  */
6603   else if (token->type == CPP_PRAGMA)
6604     {
6605       /* Only certain OpenMP pragmas are attached to statements, and thus
6606          are considered statements themselves.  All others are not.  In
6607          the context of a compound, accept the pragma as a "statement" and
6608          return so that we can check for a close brace.  Otherwise we
6609          require a real statement and must go back and read one.  */
6610       if (in_compound)
6611         cp_parser_pragma (parser, pragma_compound);
6612       else if (!cp_parser_pragma (parser, pragma_stmt))
6613         goto restart;
6614       return;
6615     }
6616   else if (token->type == CPP_EOF)
6617     {
6618       cp_parser_error (parser, "expected statement");
6619       return;
6620     }
6621
6622   /* Everything else must be a declaration-statement or an
6623      expression-statement.  Try for the declaration-statement
6624      first, unless we are looking at a `;', in which case we know that
6625      we have an expression-statement.  */
6626   if (!statement)
6627     {
6628       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6629         {
6630           cp_parser_parse_tentatively (parser);
6631           /* Try to parse the declaration-statement.  */
6632           cp_parser_declaration_statement (parser);
6633           /* If that worked, we're done.  */
6634           if (cp_parser_parse_definitely (parser))
6635             return;
6636         }
6637       /* Look for an expression-statement instead.  */
6638       statement = cp_parser_expression_statement (parser, in_statement_expr);
6639     }
6640
6641   /* Set the line number for the statement.  */
6642   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
6643     SET_EXPR_LOCATION (statement, statement_location);
6644 }
6645
6646 /* Parse the label for a labeled-statement, i.e.
6647
6648    identifier :
6649    case constant-expression :
6650    default :
6651
6652    GNU Extension:
6653    case constant-expression ... constant-expression : statement
6654
6655    When a label is parsed without errors, the label is added to the
6656    parse tree by the finish_* functions, so this function doesn't
6657    have to return the label.  */
6658
6659 static void
6660 cp_parser_label_for_labeled_statement (cp_parser* parser)
6661 {
6662   cp_token *token;
6663
6664   /* The next token should be an identifier.  */
6665   token = cp_lexer_peek_token (parser->lexer);
6666   if (token->type != CPP_NAME
6667       && token->type != CPP_KEYWORD)
6668     {
6669       cp_parser_error (parser, "expected labeled-statement");
6670       return;
6671     }
6672
6673   switch (token->keyword)
6674     {
6675     case RID_CASE:
6676       {
6677         tree expr, expr_hi;
6678         cp_token *ellipsis;
6679
6680         /* Consume the `case' token.  */
6681         cp_lexer_consume_token (parser->lexer);
6682         /* Parse the constant-expression.  */
6683         expr = cp_parser_constant_expression (parser,
6684                                               /*allow_non_constant_p=*/false,
6685                                               NULL);
6686
6687         ellipsis = cp_lexer_peek_token (parser->lexer);
6688         if (ellipsis->type == CPP_ELLIPSIS)
6689           {
6690             /* Consume the `...' token.  */
6691             cp_lexer_consume_token (parser->lexer);
6692             expr_hi =
6693               cp_parser_constant_expression (parser,
6694                                              /*allow_non_constant_p=*/false,
6695                                              NULL);
6696             /* We don't need to emit warnings here, as the common code
6697                will do this for us.  */
6698           }
6699         else
6700           expr_hi = NULL_TREE;
6701
6702         if (parser->in_switch_statement_p)
6703           finish_case_label (expr, expr_hi);
6704         else
6705           error ("case label %qE not within a switch statement", expr);
6706       }
6707       break;
6708
6709     case RID_DEFAULT:
6710       /* Consume the `default' token.  */
6711       cp_lexer_consume_token (parser->lexer);
6712
6713       if (parser->in_switch_statement_p)
6714         finish_case_label (NULL_TREE, NULL_TREE);
6715       else
6716         error ("case label not within a switch statement");
6717       break;
6718
6719     default:
6720       /* Anything else must be an ordinary label.  */
6721       finish_label_stmt (cp_parser_identifier (parser));
6722       break;
6723     }
6724
6725   /* Require the `:' token.  */
6726   cp_parser_require (parser, CPP_COLON, "`:'");
6727 }
6728
6729 /* Parse an expression-statement.
6730
6731    expression-statement:
6732      expression [opt] ;
6733
6734    Returns the new EXPR_STMT -- or NULL_TREE if the expression
6735    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6736    indicates whether this expression-statement is part of an
6737    expression statement.  */
6738
6739 static tree
6740 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6741 {
6742   tree statement = NULL_TREE;
6743
6744   /* If the next token is a ';', then there is no expression
6745      statement.  */
6746   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6747     statement = cp_parser_expression (parser, /*cast_p=*/false);
6748
6749   /* Consume the final `;'.  */
6750   cp_parser_consume_semicolon_at_end_of_statement (parser);
6751
6752   if (in_statement_expr
6753       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6754     /* This is the final expression statement of a statement
6755        expression.  */
6756     statement = finish_stmt_expr_expr (statement, in_statement_expr);
6757   else if (statement)
6758     statement = finish_expr_stmt (statement);
6759   else
6760     finish_stmt ();
6761
6762   return statement;
6763 }
6764
6765 /* Parse a compound-statement.
6766
6767    compound-statement:
6768      { statement-seq [opt] }
6769
6770    Returns a tree representing the statement.  */
6771
6772 static tree
6773 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6774                               bool in_try)
6775 {
6776   tree compound_stmt;
6777
6778   /* Consume the `{'.  */
6779   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6780     return error_mark_node;
6781   /* Begin the compound-statement.  */
6782   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6783   /* Parse an (optional) statement-seq.  */
6784   cp_parser_statement_seq_opt (parser, in_statement_expr);
6785   /* Finish the compound-statement.  */
6786   finish_compound_stmt (compound_stmt);
6787   /* Consume the `}'.  */
6788   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6789
6790   return compound_stmt;
6791 }
6792
6793 /* Parse an (optional) statement-seq.
6794
6795    statement-seq:
6796      statement
6797      statement-seq [opt] statement  */
6798
6799 static void
6800 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6801 {
6802   /* Scan statements until there aren't any more.  */
6803   while (true)
6804     {
6805       cp_token *token = cp_lexer_peek_token (parser->lexer);
6806
6807       /* If we're looking at a `}', then we've run out of statements.  */
6808       if (token->type == CPP_CLOSE_BRACE
6809           || token->type == CPP_EOF
6810           || token->type == CPP_PRAGMA_EOL)
6811         break;
6812       
6813       /* If we are in a compound statement and find 'else' then
6814          something went wrong.  */
6815       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
6816         {
6817           if (parser->in_statement & IN_IF_STMT) 
6818             break;
6819           else
6820             {
6821               token = cp_lexer_consume_token (parser->lexer);
6822               error ("%<else%> without a previous %<if%>");
6823             }
6824         }
6825
6826       /* Parse the statement.  */
6827       cp_parser_statement (parser, in_statement_expr, true, NULL);
6828     }
6829 }
6830
6831 /* Parse a selection-statement.
6832
6833    selection-statement:
6834      if ( condition ) statement
6835      if ( condition ) statement else statement
6836      switch ( condition ) statement
6837
6838    Returns the new IF_STMT or SWITCH_STMT.
6839
6840    If IF_P is not NULL, *IF_P is set to indicate whether the statement
6841    is a (possibly labeled) if statement which is not enclosed in
6842    braces and has an else clause.  This is used to implement
6843    -Wparentheses.  */
6844
6845 static tree
6846 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
6847 {
6848   cp_token *token;
6849   enum rid keyword;
6850
6851   if (if_p != NULL)
6852     *if_p = false;
6853
6854   /* Peek at the next token.  */
6855   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6856
6857   /* See what kind of keyword it is.  */
6858   keyword = token->keyword;
6859   switch (keyword)
6860     {
6861     case RID_IF:
6862     case RID_SWITCH:
6863       {
6864         tree statement;
6865         tree condition;
6866
6867         /* Look for the `('.  */
6868         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6869           {
6870             cp_parser_skip_to_end_of_statement (parser);
6871             return error_mark_node;
6872           }
6873
6874         /* Begin the selection-statement.  */
6875         if (keyword == RID_IF)
6876           statement = begin_if_stmt ();
6877         else
6878           statement = begin_switch_stmt ();
6879
6880         /* Parse the condition.  */
6881         condition = cp_parser_condition (parser);
6882         /* Look for the `)'.  */
6883         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6884           cp_parser_skip_to_closing_parenthesis (parser, true, false,
6885                                                  /*consume_paren=*/true);
6886
6887         if (keyword == RID_IF)
6888           {
6889             bool nested_if;
6890             unsigned char in_statement;
6891
6892             /* Add the condition.  */
6893             finish_if_stmt_cond (condition, statement);
6894
6895             /* Parse the then-clause.  */
6896             in_statement = parser->in_statement;
6897             parser->in_statement |= IN_IF_STMT;
6898             cp_parser_implicitly_scoped_statement (parser, &nested_if);
6899             parser->in_statement = in_statement;
6900
6901             finish_then_clause (statement);
6902
6903             /* If the next token is `else', parse the else-clause.  */
6904             if (cp_lexer_next_token_is_keyword (parser->lexer,
6905                                                 RID_ELSE))
6906               {
6907                 /* Consume the `else' keyword.  */
6908                 cp_lexer_consume_token (parser->lexer);
6909                 begin_else_clause (statement);
6910                 /* Parse the else-clause.  */
6911                 cp_parser_implicitly_scoped_statement (parser, NULL);
6912                 finish_else_clause (statement);
6913
6914                 /* If we are currently parsing a then-clause, then
6915                    IF_P will not be NULL.  We set it to true to
6916                    indicate that this if statement has an else clause.
6917                    This may trigger the Wparentheses warning below
6918                    when we get back up to the parent if statement.  */
6919                 if (if_p != NULL)
6920                   *if_p = true;
6921               }
6922             else
6923               {
6924                 /* This if statement does not have an else clause.  If
6925                    NESTED_IF is true, then the then-clause is an if
6926                    statement which does have an else clause.  We warn
6927                    about the potential ambiguity.  */
6928                 if (nested_if)
6929                   warning (OPT_Wparentheses,
6930                            ("%Hsuggest explicit braces "
6931                             "to avoid ambiguous %<else%>"),
6932                            EXPR_LOCUS (statement));
6933               }
6934
6935             /* Now we're all done with the if-statement.  */
6936             finish_if_stmt (statement);
6937           }
6938         else
6939           {
6940             bool in_switch_statement_p;
6941             unsigned char in_statement;
6942
6943             /* Add the condition.  */
6944             finish_switch_cond (condition, statement);
6945
6946             /* Parse the body of the switch-statement.  */
6947             in_switch_statement_p = parser->in_switch_statement_p;
6948             in_statement = parser->in_statement;
6949             parser->in_switch_statement_p = true;
6950             parser->in_statement |= IN_SWITCH_STMT;
6951             cp_parser_implicitly_scoped_statement (parser, NULL);
6952             parser->in_switch_statement_p = in_switch_statement_p;
6953             parser->in_statement = in_statement;
6954
6955             /* Now we're all done with the switch-statement.  */
6956             finish_switch_stmt (statement);
6957           }
6958
6959         return statement;
6960       }
6961       break;
6962
6963     default:
6964       cp_parser_error (parser, "expected selection-statement");
6965       return error_mark_node;
6966     }
6967 }
6968
6969 /* Parse a condition.
6970
6971    condition:
6972      expression
6973      type-specifier-seq declarator = assignment-expression
6974
6975    GNU Extension:
6976
6977    condition:
6978      type-specifier-seq declarator asm-specification [opt]
6979        attributes [opt] = assignment-expression
6980
6981    Returns the expression that should be tested.  */
6982
6983 static tree
6984 cp_parser_condition (cp_parser* parser)
6985 {
6986   cp_decl_specifier_seq type_specifiers;
6987   const char *saved_message;
6988
6989   /* Try the declaration first.  */
6990   cp_parser_parse_tentatively (parser);
6991   /* New types are not allowed in the type-specifier-seq for a
6992      condition.  */
6993   saved_message = parser->type_definition_forbidden_message;
6994   parser->type_definition_forbidden_message
6995     = "types may not be defined in conditions";
6996   /* Parse the type-specifier-seq.  */
6997   cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
6998                                 &type_specifiers);
6999   /* Restore the saved message.  */
7000   parser->type_definition_forbidden_message = saved_message;
7001   /* If all is well, we might be looking at a declaration.  */
7002   if (!cp_parser_error_occurred (parser))
7003     {
7004       tree decl;
7005       tree asm_specification;
7006       tree attributes;
7007       cp_declarator *declarator;
7008       tree initializer = NULL_TREE;
7009
7010       /* Parse the declarator.  */
7011       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
7012                                          /*ctor_dtor_or_conv_p=*/NULL,
7013                                          /*parenthesized_p=*/NULL,
7014                                          /*member_p=*/false);
7015       /* Parse the attributes.  */
7016       attributes = cp_parser_attributes_opt (parser);
7017       /* Parse the asm-specification.  */
7018       asm_specification = cp_parser_asm_specification_opt (parser);
7019       /* If the next token is not an `=', then we might still be
7020          looking at an expression.  For example:
7021
7022            if (A(a).x)
7023
7024          looks like a decl-specifier-seq and a declarator -- but then
7025          there is no `=', so this is an expression.  */
7026       cp_parser_require (parser, CPP_EQ, "`='");
7027       /* If we did see an `=', then we are looking at a declaration
7028          for sure.  */
7029       if (cp_parser_parse_definitely (parser))
7030         {
7031           tree pushed_scope;
7032           bool non_constant_p;
7033
7034           /* Create the declaration.  */
7035           decl = start_decl (declarator, &type_specifiers,
7036                              /*initialized_p=*/true,
7037                              attributes, /*prefix_attributes=*/NULL_TREE,
7038                              &pushed_scope);
7039           /* Parse the assignment-expression.  */
7040           initializer
7041             = cp_parser_constant_expression (parser,
7042                                              /*allow_non_constant_p=*/true,
7043                                              &non_constant_p);
7044           if (!non_constant_p)
7045             initializer = fold_non_dependent_expr (initializer);
7046
7047           /* Process the initializer.  */
7048           cp_finish_decl (decl,
7049                           initializer, !non_constant_p,
7050                           asm_specification,
7051                           LOOKUP_ONLYCONVERTING);
7052
7053           if (pushed_scope)
7054             pop_scope (pushed_scope);
7055
7056           return convert_from_reference (decl);
7057         }
7058     }
7059   /* If we didn't even get past the declarator successfully, we are
7060      definitely not looking at a declaration.  */
7061   else
7062     cp_parser_abort_tentative_parse (parser);
7063
7064   /* Otherwise, we are looking at an expression.  */
7065   return cp_parser_expression (parser, /*cast_p=*/false);
7066 }
7067
7068 /* We check for a ) immediately followed by ; with no whitespacing
7069    between.  This is used to issue a warning for:
7070
7071      while (...);
7072
7073    and:
7074
7075      for (...);
7076
7077    as the semicolon is probably extraneous.
7078
7079    On parse errors, the next token might not be a ), so do nothing in
7080    that case. */
7081
7082 static void
7083 check_empty_body (cp_parser* parser, const char* type)
7084 {
7085   cp_token *token;
7086   cp_token *close_paren;
7087   expanded_location close_loc;
7088   expanded_location semi_loc;
7089   
7090   close_paren = cp_lexer_peek_token (parser->lexer);
7091   if (close_paren->type != CPP_CLOSE_PAREN)
7092     return;
7093
7094   close_loc = expand_location (close_paren->location);
7095   token = cp_lexer_peek_nth_token (parser->lexer, 2);
7096
7097   if (token->type != CPP_SEMICOLON
7098       || (token->flags & PREV_WHITE))
7099     return;
7100
7101   semi_loc =  expand_location (token->location);
7102   if (close_loc.line == semi_loc.line
7103 #ifdef USE_MAPPED_LOCATION
7104       && close_loc.column+1 == semi_loc.column
7105 #endif
7106       )
7107     warning (OPT_Wempty_body,
7108              "suggest a space before %<;%> or explicit braces around empty "
7109              "body in %<%s%> statement",
7110              type);
7111 }
7112
7113 /* Parse an iteration-statement.
7114
7115    iteration-statement:
7116      while ( condition ) statement
7117      do statement while ( expression ) ;
7118      for ( for-init-statement condition [opt] ; expression [opt] )
7119        statement
7120
7121    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
7122
7123 static tree
7124 cp_parser_iteration_statement (cp_parser* parser)
7125 {
7126   cp_token *token;
7127   enum rid keyword;
7128   tree statement;
7129   unsigned char in_statement;
7130
7131   /* Peek at the next token.  */
7132   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
7133   if (!token)
7134     return error_mark_node;
7135
7136   /* Remember whether or not we are already within an iteration
7137      statement.  */
7138   in_statement = parser->in_statement;
7139
7140   /* See what kind of keyword it is.  */
7141   keyword = token->keyword;
7142   switch (keyword)
7143     {
7144     case RID_WHILE:
7145       {
7146         tree condition;
7147
7148         /* Begin the while-statement.  */
7149         statement = begin_while_stmt ();
7150         /* Look for the `('.  */
7151         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
7152         /* Parse the condition.  */
7153         condition = cp_parser_condition (parser);
7154         finish_while_stmt_cond (condition, statement);
7155         check_empty_body (parser, "while");
7156         /* Look for the `)'.  */
7157         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
7158         /* Parse the dependent statement.  */
7159         parser->in_statement = IN_ITERATION_STMT;
7160         cp_parser_already_scoped_statement (parser);
7161         parser->in_statement = in_statement;
7162         /* We're done with the while-statement.  */
7163         finish_while_stmt (statement);
7164       }
7165       break;
7166
7167     case RID_DO:
7168       {
7169         tree expression;
7170
7171         /* Begin the do-statement.  */
7172         statement = begin_do_stmt ();
7173         /* Parse the body of the do-statement.  */
7174         parser->in_statement = IN_ITERATION_STMT;
7175         cp_parser_implicitly_scoped_statement (parser, NULL);
7176         parser->in_statement = in_statement;
7177         finish_do_body (statement);
7178         /* Look for the `while' keyword.  */
7179         cp_parser_require_keyword (parser, RID_WHILE, "`while'");
7180         /* Look for the `('.  */
7181         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
7182         /* Parse the expression.  */
7183         expression = cp_parser_expression (parser, /*cast_p=*/false);
7184         /* We're done with the do-statement.  */
7185         finish_do_stmt (expression, statement);
7186         /* Look for the `)'.  */
7187         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
7188         /* Look for the `;'.  */
7189         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7190       }
7191       break;
7192
7193     case RID_FOR:
7194       {
7195         tree condition = NULL_TREE;
7196         tree expression = NULL_TREE;
7197
7198         /* Begin the for-statement.  */
7199         statement = begin_for_stmt ();
7200         /* Look for the `('.  */
7201         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
7202         /* Parse the initialization.  */
7203         cp_parser_for_init_statement (parser);
7204         finish_for_init_stmt (statement);
7205
7206         /* If there's a condition, process it.  */
7207         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7208           condition = cp_parser_condition (parser);
7209         finish_for_cond (condition, statement);
7210         /* Look for the `;'.  */
7211         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7212
7213         /* If there's an expression, process it.  */
7214         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
7215           expression = cp_parser_expression (parser, /*cast_p=*/false);
7216         finish_for_expr (expression, statement);
7217         check_empty_body (parser, "for");
7218         /* Look for the `)'.  */
7219         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
7220
7221         /* Parse the body of the for-statement.  */
7222         parser->in_statement = IN_ITERATION_STMT;
7223         cp_parser_already_scoped_statement (parser);
7224         parser->in_statement = in_statement;
7225
7226         /* We're done with the for-statement.  */
7227         finish_for_stmt (statement);
7228       }
7229       break;
7230
7231     default:
7232       cp_parser_error (parser, "expected iteration-statement");
7233       statement = error_mark_node;
7234       break;
7235     }
7236
7237   return statement;
7238 }
7239
7240 /* Parse a for-init-statement.
7241
7242    for-init-statement:
7243      expression-statement
7244      simple-declaration  */
7245
7246 static void
7247 cp_parser_for_init_statement (cp_parser* parser)
7248 {
7249   /* If the next token is a `;', then we have an empty
7250      expression-statement.  Grammatically, this is also a
7251      simple-declaration, but an invalid one, because it does not
7252      declare anything.  Therefore, if we did not handle this case
7253      specially, we would issue an error message about an invalid
7254      declaration.  */
7255   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7256     {
7257       /* We're going to speculatively look for a declaration, falling back
7258          to an expression, if necessary.  */
7259       cp_parser_parse_tentatively (parser);
7260       /* Parse the declaration.  */
7261       cp_parser_simple_declaration (parser,
7262                                     /*function_definition_allowed_p=*/false);
7263       /* If the tentative parse failed, then we shall need to look for an
7264          expression-statement.  */
7265       if (cp_parser_parse_definitely (parser))
7266         return;
7267     }
7268
7269   cp_parser_expression_statement (parser, false);
7270 }
7271
7272 /* Parse a jump-statement.
7273
7274    jump-statement:
7275      break ;
7276      continue ;
7277      return expression [opt] ;
7278      goto identifier ;
7279
7280    GNU extension:
7281
7282    jump-statement:
7283      goto * expression ;
7284
7285    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
7286
7287 static tree
7288 cp_parser_jump_statement (cp_parser* parser)
7289 {
7290   tree statement = error_mark_node;
7291   cp_token *token;
7292   enum rid keyword;
7293   unsigned char in_statement;
7294
7295   /* Peek at the next token.  */
7296   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
7297   if (!token)
7298     return error_mark_node;
7299
7300   /* See what kind of keyword it is.  */
7301   keyword = token->keyword;
7302   switch (keyword)
7303     {
7304     case RID_BREAK:
7305       in_statement = parser->in_statement & ~IN_IF_STMT;      
7306       switch (in_statement)
7307         {
7308         case 0:
7309           error ("break statement not within loop or switch");
7310           break;
7311         default:
7312           gcc_assert ((in_statement & IN_SWITCH_STMT)
7313                       || in_statement == IN_ITERATION_STMT);
7314           statement = finish_break_stmt ();
7315           break;
7316         case IN_OMP_BLOCK:
7317           error ("invalid exit from OpenMP structured block");
7318           break;
7319         case IN_OMP_FOR:
7320           error ("break statement used with OpenMP for loop");
7321           break;
7322         }
7323       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7324       break;
7325
7326     case RID_CONTINUE:
7327       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
7328         {
7329         case 0:
7330           error ("continue statement not within a loop");
7331           break;
7332         case IN_ITERATION_STMT:
7333         case IN_OMP_FOR:
7334           statement = finish_continue_stmt ();
7335           break;
7336         case IN_OMP_BLOCK:
7337           error ("invalid exit from OpenMP structured block");
7338           break;
7339         default:
7340           gcc_unreachable ();
7341         }
7342       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7343       break;
7344
7345     case RID_RETURN:
7346       {
7347         tree expr;
7348
7349         /* If the next token is a `;', then there is no
7350            expression.  */
7351         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7352           expr = cp_parser_expression (parser, /*cast_p=*/false);
7353         else
7354           expr = NULL_TREE;
7355         /* Build the return-statement.  */
7356         statement = finish_return_stmt (expr);
7357         /* Look for the final `;'.  */
7358         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7359       }
7360       break;
7361
7362     case RID_GOTO:
7363       /* Create the goto-statement.  */
7364       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
7365         {
7366           /* Issue a warning about this use of a GNU extension.  */
7367           if (pedantic)
7368             pedwarn ("ISO C++ forbids computed gotos");
7369           /* Consume the '*' token.  */
7370           cp_lexer_consume_token (parser->lexer);
7371           /* Parse the dependent expression.  */
7372           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
7373         }
7374       else
7375         finish_goto_stmt (cp_parser_identifier (parser));
7376       /* Look for the final `;'.  */
7377       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7378       break;
7379
7380     default:
7381       cp_parser_error (parser, "expected jump-statement");
7382       break;
7383     }
7384
7385   return statement;
7386 }
7387
7388 /* Parse a declaration-statement.
7389
7390    declaration-statement:
7391      block-declaration  */
7392
7393 static void
7394 cp_parser_declaration_statement (cp_parser* parser)
7395 {
7396   void *p;
7397
7398   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7399   p = obstack_alloc (&declarator_obstack, 0);
7400
7401  /* Parse the block-declaration.  */
7402   cp_parser_block_declaration (parser, /*statement_p=*/true);
7403
7404   /* Free any declarators allocated.  */
7405   obstack_free (&declarator_obstack, p);
7406
7407   /* Finish off the statement.  */
7408   finish_stmt ();
7409 }
7410
7411 /* Some dependent statements (like `if (cond) statement'), are
7412    implicitly in their own scope.  In other words, if the statement is
7413    a single statement (as opposed to a compound-statement), it is
7414    none-the-less treated as if it were enclosed in braces.  Any
7415    declarations appearing in the dependent statement are out of scope
7416    after control passes that point.  This function parses a statement,
7417    but ensures that is in its own scope, even if it is not a
7418    compound-statement.
7419
7420    If IF_P is not NULL, *IF_P is set to indicate whether the statement
7421    is a (possibly labeled) if statement which is not enclosed in
7422    braces and has an else clause.  This is used to implement
7423    -Wparentheses.
7424
7425    Returns the new statement.  */
7426
7427 static tree
7428 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
7429 {
7430   tree statement;
7431
7432   if (if_p != NULL)
7433     *if_p = false;
7434
7435   /* Mark if () ; with a special NOP_EXPR.  */
7436   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7437     {
7438       cp_lexer_consume_token (parser->lexer);
7439       statement = add_stmt (build_empty_stmt ());
7440     }
7441   /* if a compound is opened, we simply parse the statement directly.  */
7442   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7443     statement = cp_parser_compound_statement (parser, NULL, false);
7444   /* If the token is not a `{', then we must take special action.  */
7445   else
7446     {
7447       /* Create a compound-statement.  */
7448       statement = begin_compound_stmt (0);
7449       /* Parse the dependent-statement.  */
7450       cp_parser_statement (parser, NULL_TREE, false, if_p);
7451       /* Finish the dummy compound-statement.  */
7452       finish_compound_stmt (statement);
7453     }
7454
7455   /* Return the statement.  */
7456   return statement;
7457 }
7458
7459 /* For some dependent statements (like `while (cond) statement'), we
7460    have already created a scope.  Therefore, even if the dependent
7461    statement is a compound-statement, we do not want to create another
7462    scope.  */
7463
7464 static void
7465 cp_parser_already_scoped_statement (cp_parser* parser)
7466 {
7467   /* If the token is a `{', then we must take special action.  */
7468   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7469     cp_parser_statement (parser, NULL_TREE, false, NULL);
7470   else
7471     {
7472       /* Avoid calling cp_parser_compound_statement, so that we
7473          don't create a new scope.  Do everything else by hand.  */
7474       cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
7475       cp_parser_statement_seq_opt (parser, NULL_TREE);
7476       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7477     }
7478 }
7479
7480 /* Declarations [gram.dcl.dcl] */
7481
7482 /* Parse an optional declaration-sequence.
7483
7484    declaration-seq:
7485      declaration
7486      declaration-seq declaration  */
7487
7488 static void
7489 cp_parser_declaration_seq_opt (cp_parser* parser)
7490 {
7491   while (true)
7492     {
7493       cp_token *token;
7494
7495       token = cp_lexer_peek_token (parser->lexer);
7496
7497       if (token->type == CPP_CLOSE_BRACE
7498           || token->type == CPP_EOF
7499           || token->type == CPP_PRAGMA_EOL)
7500         break;
7501
7502       if (token->type == CPP_SEMICOLON)
7503         {
7504           /* A declaration consisting of a single semicolon is
7505              invalid.  Allow it unless we're being pedantic.  */
7506           cp_lexer_consume_token (parser->lexer);
7507           if (pedantic && !in_system_header)
7508             pedwarn ("extra %<;%>");
7509           continue;
7510         }
7511
7512       /* If we're entering or exiting a region that's implicitly
7513          extern "C", modify the lang context appropriately.  */
7514       if (!parser->implicit_extern_c && token->implicit_extern_c)
7515         {
7516           push_lang_context (lang_name_c);
7517           parser->implicit_extern_c = true;
7518         }
7519       else if (parser->implicit_extern_c && !token->implicit_extern_c)
7520         {
7521           pop_lang_context ();
7522           parser->implicit_extern_c = false;
7523         }
7524
7525       if (token->type == CPP_PRAGMA)
7526         {
7527           /* A top-level declaration can consist solely of a #pragma.
7528              A nested declaration cannot, so this is done here and not
7529              in cp_parser_declaration.  (A #pragma at block scope is
7530              handled in cp_parser_statement.)  */
7531           cp_parser_pragma (parser, pragma_external);
7532           continue;
7533         }
7534
7535       /* Parse the declaration itself.  */
7536       cp_parser_declaration (parser);
7537     }
7538 }
7539
7540 /* Parse a declaration.
7541
7542    declaration:
7543      block-declaration
7544      function-definition
7545      template-declaration
7546      explicit-instantiation
7547      explicit-specialization
7548      linkage-specification
7549      namespace-definition
7550
7551    GNU extension:
7552
7553    declaration:
7554       __extension__ declaration */
7555
7556 static void
7557 cp_parser_declaration (cp_parser* parser)
7558 {
7559   cp_token token1;
7560   cp_token token2;
7561   int saved_pedantic;
7562   void *p;
7563
7564   /* Check for the `__extension__' keyword.  */
7565   if (cp_parser_extension_opt (parser, &saved_pedantic))
7566     {
7567       /* Parse the qualified declaration.  */
7568       cp_parser_declaration (parser);
7569       /* Restore the PEDANTIC flag.  */
7570       pedantic = saved_pedantic;
7571
7572       return;
7573     }
7574
7575   /* Try to figure out what kind of declaration is present.  */
7576   token1 = *cp_lexer_peek_token (parser->lexer);
7577
7578   if (token1.type != CPP_EOF)
7579     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7580   else
7581     {
7582       token2.type = CPP_EOF;
7583       token2.keyword = RID_MAX;
7584     }
7585
7586   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7587   p = obstack_alloc (&declarator_obstack, 0);
7588
7589   /* If the next token is `extern' and the following token is a string
7590      literal, then we have a linkage specification.  */
7591   if (token1.keyword == RID_EXTERN
7592       && cp_parser_is_string_literal (&token2))
7593     cp_parser_linkage_specification (parser);
7594   /* If the next token is `template', then we have either a template
7595      declaration, an explicit instantiation, or an explicit
7596      specialization.  */
7597   else if (token1.keyword == RID_TEMPLATE)
7598     {
7599       /* `template <>' indicates a template specialization.  */
7600       if (token2.type == CPP_LESS
7601           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
7602         cp_parser_explicit_specialization (parser);
7603       /* `template <' indicates a template declaration.  */
7604       else if (token2.type == CPP_LESS)
7605         cp_parser_template_declaration (parser, /*member_p=*/false);
7606       /* Anything else must be an explicit instantiation.  */
7607       else
7608         cp_parser_explicit_instantiation (parser);
7609     }
7610   /* If the next token is `export', then we have a template
7611      declaration.  */
7612   else if (token1.keyword == RID_EXPORT)
7613     cp_parser_template_declaration (parser, /*member_p=*/false);
7614   /* If the next token is `extern', 'static' or 'inline' and the one
7615      after that is `template', we have a GNU extended explicit
7616      instantiation directive.  */
7617   else if (cp_parser_allow_gnu_extensions_p (parser)
7618            && (token1.keyword == RID_EXTERN
7619                || token1.keyword == RID_STATIC
7620                || token1.keyword == RID_INLINE)
7621            && token2.keyword == RID_TEMPLATE)
7622     cp_parser_explicit_instantiation (parser);
7623   /* If the next token is `namespace', check for a named or unnamed
7624      namespace definition.  */
7625   else if (token1.keyword == RID_NAMESPACE
7626            && (/* A named namespace definition.  */
7627                (token2.type == CPP_NAME
7628                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
7629                     != CPP_EQ))
7630                /* An unnamed namespace definition.  */
7631                || token2.type == CPP_OPEN_BRACE
7632                || token2.keyword == RID_ATTRIBUTE))
7633     cp_parser_namespace_definition (parser);
7634   /* Objective-C++ declaration/definition.  */
7635   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
7636     cp_parser_objc_declaration (parser);
7637   /* We must have either a block declaration or a function
7638      definition.  */
7639   else
7640     /* Try to parse a block-declaration, or a function-definition.  */
7641     cp_parser_block_declaration (parser, /*statement_p=*/false);
7642
7643   /* Free any declarators allocated.  */
7644   obstack_free (&declarator_obstack, p);
7645 }
7646
7647 /* Parse a block-declaration.
7648
7649    block-declaration:
7650      simple-declaration
7651      asm-definition
7652      namespace-alias-definition
7653      using-declaration
7654      using-directive
7655
7656    GNU Extension:
7657
7658    block-declaration:
7659      __extension__ block-declaration
7660      label-declaration
7661
7662    C++0x Extension:
7663
7664    block-declaration:
7665      static_assert-declaration
7666
7667    If STATEMENT_P is TRUE, then this block-declaration is occurring as
7668    part of a declaration-statement.  */
7669
7670 static void
7671 cp_parser_block_declaration (cp_parser *parser,
7672                              bool      statement_p)
7673 {
7674   cp_token *token1;
7675   int saved_pedantic;
7676
7677   /* Check for the `__extension__' keyword.  */
7678   if (cp_parser_extension_opt (parser, &saved_pedantic))
7679     {
7680       /* Parse the qualified declaration.  */
7681       cp_parser_block_declaration (parser, statement_p);
7682       /* Restore the PEDANTIC flag.  */
7683       pedantic = saved_pedantic;
7684
7685       return;
7686     }
7687
7688   /* Peek at the next token to figure out which kind of declaration is
7689      present.  */
7690   token1 = cp_lexer_peek_token (parser->lexer);
7691
7692   /* If the next keyword is `asm', we have an asm-definition.  */
7693   if (token1->keyword == RID_ASM)
7694     {
7695       if (statement_p)
7696         cp_parser_commit_to_tentative_parse (parser);
7697       cp_parser_asm_definition (parser);
7698     }
7699   /* If the next keyword is `namespace', we have a
7700      namespace-alias-definition.  */
7701   else if (token1->keyword == RID_NAMESPACE)
7702     cp_parser_namespace_alias_definition (parser);
7703   /* If the next keyword is `using', we have either a
7704      using-declaration or a using-directive.  */
7705   else if (token1->keyword == RID_USING)
7706     {
7707       cp_token *token2;
7708
7709       if (statement_p)
7710         cp_parser_commit_to_tentative_parse (parser);
7711       /* If the token after `using' is `namespace', then we have a
7712          using-directive.  */
7713       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
7714       if (token2->keyword == RID_NAMESPACE)
7715         cp_parser_using_directive (parser);
7716       /* Otherwise, it's a using-declaration.  */
7717       else
7718         cp_parser_using_declaration (parser,
7719                                      /*access_declaration_p=*/false);
7720     }
7721   /* If the next keyword is `__label__' we have a label declaration.  */
7722   else if (token1->keyword == RID_LABEL)
7723     {
7724       if (statement_p)
7725         cp_parser_commit_to_tentative_parse (parser);
7726       cp_parser_label_declaration (parser);
7727     }
7728   /* If the next token is `static_assert' we have a static assertion.  */
7729   else if (token1->keyword == RID_STATIC_ASSERT)
7730     cp_parser_static_assert (parser, /*member_p=*/false);
7731   /* Anything else must be a simple-declaration.  */
7732   else
7733     cp_parser_simple_declaration (parser, !statement_p);
7734 }
7735
7736 /* Parse a simple-declaration.
7737
7738    simple-declaration:
7739      decl-specifier-seq [opt] init-declarator-list [opt] ;
7740
7741    init-declarator-list:
7742      init-declarator
7743      init-declarator-list , init-declarator
7744
7745    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
7746    function-definition as a simple-declaration.  */
7747
7748 static void
7749 cp_parser_simple_declaration (cp_parser* parser,
7750                               bool function_definition_allowed_p)
7751 {
7752   cp_decl_specifier_seq decl_specifiers;
7753   int declares_class_or_enum;
7754   bool saw_declarator;
7755
7756   /* Defer access checks until we know what is being declared; the
7757      checks for names appearing in the decl-specifier-seq should be
7758      done as if we were in the scope of the thing being declared.  */
7759   push_deferring_access_checks (dk_deferred);
7760
7761   /* Parse the decl-specifier-seq.  We have to keep track of whether
7762      or not the decl-specifier-seq declares a named class or
7763      enumeration type, since that is the only case in which the
7764      init-declarator-list is allowed to be empty.
7765
7766      [dcl.dcl]
7767
7768      In a simple-declaration, the optional init-declarator-list can be
7769      omitted only when declaring a class or enumeration, that is when
7770      the decl-specifier-seq contains either a class-specifier, an
7771      elaborated-type-specifier, or an enum-specifier.  */
7772   cp_parser_decl_specifier_seq (parser,
7773                                 CP_PARSER_FLAGS_OPTIONAL,
7774                                 &decl_specifiers,
7775                                 &declares_class_or_enum);
7776   /* We no longer need to defer access checks.  */
7777   stop_deferring_access_checks ();
7778
7779   /* In a block scope, a valid declaration must always have a
7780      decl-specifier-seq.  By not trying to parse declarators, we can
7781      resolve the declaration/expression ambiguity more quickly.  */
7782   if (!function_definition_allowed_p
7783       && !decl_specifiers.any_specifiers_p)
7784     {
7785       cp_parser_error (parser, "expected declaration");
7786       goto done;
7787     }
7788
7789   /* If the next two tokens are both identifiers, the code is
7790      erroneous. The usual cause of this situation is code like:
7791
7792        T t;
7793
7794      where "T" should name a type -- but does not.  */
7795   if (!decl_specifiers.type
7796       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
7797     {
7798       /* If parsing tentatively, we should commit; we really are
7799          looking at a declaration.  */
7800       cp_parser_commit_to_tentative_parse (parser);
7801       /* Give up.  */
7802       goto done;
7803     }
7804
7805   /* If we have seen at least one decl-specifier, and the next token
7806      is not a parenthesis, then we must be looking at a declaration.
7807      (After "int (" we might be looking at a functional cast.)  */
7808   if (decl_specifiers.any_specifiers_p
7809       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
7810     cp_parser_commit_to_tentative_parse (parser);
7811
7812   /* Keep going until we hit the `;' at the end of the simple
7813      declaration.  */
7814   saw_declarator = false;
7815   while (cp_lexer_next_token_is_not (parser->lexer,
7816                                      CPP_SEMICOLON))
7817     {
7818       cp_token *token;
7819       bool function_definition_p;
7820       tree decl;
7821
7822       if (saw_declarator)
7823         {
7824           /* If we are processing next declarator, coma is expected */
7825           token = cp_lexer_peek_token (parser->lexer);
7826           gcc_assert (token->type == CPP_COMMA);
7827           cp_lexer_consume_token (parser->lexer);
7828         }
7829       else
7830         saw_declarator = true;
7831
7832       /* Parse the init-declarator.  */
7833       decl = cp_parser_init_declarator (parser, &decl_specifiers,
7834                                         /*checks=*/NULL,
7835                                         function_definition_allowed_p,
7836                                         /*member_p=*/false,
7837                                         declares_class_or_enum,
7838                                         &function_definition_p);
7839       /* If an error occurred while parsing tentatively, exit quickly.
7840          (That usually happens when in the body of a function; each
7841          statement is treated as a declaration-statement until proven
7842          otherwise.)  */
7843       if (cp_parser_error_occurred (parser))
7844         goto done;
7845       /* Handle function definitions specially.  */
7846       if (function_definition_p)
7847         {
7848           /* If the next token is a `,', then we are probably
7849              processing something like:
7850
7851                void f() {}, *p;
7852
7853              which is erroneous.  */
7854           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7855             error ("mixing declarations and function-definitions is forbidden");
7856           /* Otherwise, we're done with the list of declarators.  */
7857           else
7858             {
7859               pop_deferring_access_checks ();
7860               return;
7861             }
7862         }
7863       /* The next token should be either a `,' or a `;'.  */
7864       token = cp_lexer_peek_token (parser->lexer);
7865       /* If it's a `,', there are more declarators to come.  */
7866       if (token->type == CPP_COMMA)
7867         /* will be consumed next time around */;
7868       /* If it's a `;', we are done.  */
7869       else if (token->type == CPP_SEMICOLON)
7870         break;
7871       /* Anything else is an error.  */
7872       else
7873         {
7874           /* If we have already issued an error message we don't need
7875              to issue another one.  */
7876           if (decl != error_mark_node
7877               || cp_parser_uncommitted_to_tentative_parse_p (parser))
7878             cp_parser_error (parser, "expected %<,%> or %<;%>");
7879           /* Skip tokens until we reach the end of the statement.  */
7880           cp_parser_skip_to_end_of_statement (parser);
7881           /* If the next token is now a `;', consume it.  */
7882           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7883             cp_lexer_consume_token (parser->lexer);
7884           goto done;
7885         }
7886       /* After the first time around, a function-definition is not
7887          allowed -- even if it was OK at first.  For example:
7888
7889            int i, f() {}
7890
7891          is not valid.  */
7892       function_definition_allowed_p = false;
7893     }
7894
7895   /* Issue an error message if no declarators are present, and the
7896      decl-specifier-seq does not itself declare a class or
7897      enumeration.  */
7898   if (!saw_declarator)
7899     {
7900       if (cp_parser_declares_only_class_p (parser))
7901         shadow_tag (&decl_specifiers);
7902       /* Perform any deferred access checks.  */
7903       perform_deferred_access_checks ();
7904     }
7905
7906   /* Consume the `;'.  */
7907   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7908
7909  done:
7910   pop_deferring_access_checks ();
7911 }
7912
7913 /* Parse a decl-specifier-seq.
7914
7915    decl-specifier-seq:
7916      decl-specifier-seq [opt] decl-specifier
7917
7918    decl-specifier:
7919      storage-class-specifier
7920      type-specifier
7921      function-specifier
7922      friend
7923      typedef
7924
7925    GNU Extension:
7926
7927    decl-specifier:
7928      attributes
7929
7930    Set *DECL_SPECS to a representation of the decl-specifier-seq.
7931
7932    The parser flags FLAGS is used to control type-specifier parsing.
7933
7934    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7935    flags:
7936
7937      1: one of the decl-specifiers is an elaborated-type-specifier
7938         (i.e., a type declaration)
7939      2: one of the decl-specifiers is an enum-specifier or a
7940         class-specifier (i.e., a type definition)
7941
7942    */
7943
7944 static void
7945 cp_parser_decl_specifier_seq (cp_parser* parser,
7946                               cp_parser_flags flags,
7947                               cp_decl_specifier_seq *decl_specs,
7948                               int* declares_class_or_enum)
7949 {
7950   bool constructor_possible_p = !parser->in_declarator_p;
7951
7952   /* Clear DECL_SPECS.  */
7953   clear_decl_specs (decl_specs);
7954
7955   /* Assume no class or enumeration type is declared.  */
7956   *declares_class_or_enum = 0;
7957
7958   /* Keep reading specifiers until there are no more to read.  */
7959   while (true)
7960     {
7961       bool constructor_p;
7962       bool found_decl_spec;
7963       cp_token *token;
7964
7965       /* Peek at the next token.  */
7966       token = cp_lexer_peek_token (parser->lexer);
7967       /* Handle attributes.  */
7968       if (token->keyword == RID_ATTRIBUTE)
7969         {
7970           /* Parse the attributes.  */
7971           decl_specs->attributes
7972             = chainon (decl_specs->attributes,
7973                        cp_parser_attributes_opt (parser));
7974           continue;
7975         }
7976       /* Assume we will find a decl-specifier keyword.  */
7977       found_decl_spec = true;
7978       /* If the next token is an appropriate keyword, we can simply
7979          add it to the list.  */
7980       switch (token->keyword)
7981         {
7982           /* decl-specifier:
7983                friend  */
7984         case RID_FRIEND:
7985           if (!at_class_scope_p ())
7986             {
7987               error ("%<friend%> used outside of class");
7988               cp_lexer_purge_token (parser->lexer);
7989             }
7990           else
7991             {
7992               ++decl_specs->specs[(int) ds_friend];
7993               /* Consume the token.  */
7994               cp_lexer_consume_token (parser->lexer);
7995             }
7996           break;
7997
7998           /* function-specifier:
7999                inline
8000                virtual
8001                explicit  */
8002         case RID_INLINE:
8003         case RID_VIRTUAL:
8004         case RID_EXPLICIT:
8005           cp_parser_function_specifier_opt (parser, decl_specs);
8006           break;
8007
8008           /* decl-specifier:
8009                typedef  */
8010         case RID_TYPEDEF:
8011           ++decl_specs->specs[(int) ds_typedef];
8012           /* Consume the token.  */
8013           cp_lexer_consume_token (parser->lexer);
8014           /* A constructor declarator cannot appear in a typedef.  */
8015           constructor_possible_p = false;
8016           /* The "typedef" keyword can only occur in a declaration; we
8017              may as well commit at this point.  */
8018           cp_parser_commit_to_tentative_parse (parser);
8019
8020           if (decl_specs->storage_class != sc_none)
8021             decl_specs->conflicting_specifiers_p = true;
8022           break;
8023
8024           /* storage-class-specifier:
8025                auto
8026                register
8027                static
8028                extern
8029                mutable
8030
8031              GNU Extension:
8032                thread  */
8033         case RID_AUTO:
8034         case RID_REGISTER:
8035         case RID_STATIC:
8036         case RID_EXTERN:
8037         case RID_MUTABLE:
8038           /* Consume the token.  */
8039           cp_lexer_consume_token (parser->lexer);
8040           cp_parser_set_storage_class (parser, decl_specs, token->keyword);
8041           break;
8042         case RID_THREAD:
8043           /* Consume the token.  */
8044           cp_lexer_consume_token (parser->lexer);
8045           ++decl_specs->specs[(int) ds_thread];
8046           break;
8047
8048         default:
8049           /* We did not yet find a decl-specifier yet.  */
8050           found_decl_spec = false;
8051           break;
8052         }
8053
8054       /* Constructors are a special case.  The `S' in `S()' is not a
8055          decl-specifier; it is the beginning of the declarator.  */
8056       constructor_p
8057         = (!found_decl_spec
8058            && constructor_possible_p
8059            && (cp_parser_constructor_declarator_p
8060                (parser, decl_specs->specs[(int) ds_friend] != 0)));
8061
8062       /* If we don't have a DECL_SPEC yet, then we must be looking at
8063          a type-specifier.  */
8064       if (!found_decl_spec && !constructor_p)
8065         {
8066           int decl_spec_declares_class_or_enum;
8067           bool is_cv_qualifier;
8068           tree type_spec;
8069
8070           type_spec
8071             = cp_parser_type_specifier (parser, flags,
8072                                         decl_specs,
8073                                         /*is_declaration=*/true,
8074                                         &decl_spec_declares_class_or_enum,
8075                                         &is_cv_qualifier);
8076
8077           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
8078
8079           /* If this type-specifier referenced a user-defined type
8080              (a typedef, class-name, etc.), then we can't allow any
8081              more such type-specifiers henceforth.
8082
8083              [dcl.spec]
8084
8085              The longest sequence of decl-specifiers that could
8086              possibly be a type name is taken as the
8087              decl-specifier-seq of a declaration.  The sequence shall
8088              be self-consistent as described below.
8089
8090              [dcl.type]
8091
8092              As a general rule, at most one type-specifier is allowed
8093              in the complete decl-specifier-seq of a declaration.  The
8094              only exceptions are the following:
8095
8096              -- const or volatile can be combined with any other
8097                 type-specifier.
8098
8099              -- signed or unsigned can be combined with char, long,
8100                 short, or int.
8101
8102              -- ..
8103
8104              Example:
8105
8106                typedef char* Pc;
8107                void g (const int Pc);
8108
8109              Here, Pc is *not* part of the decl-specifier seq; it's
8110              the declarator.  Therefore, once we see a type-specifier
8111              (other than a cv-qualifier), we forbid any additional
8112              user-defined types.  We *do* still allow things like `int
8113              int' to be considered a decl-specifier-seq, and issue the
8114              error message later.  */
8115           if (type_spec && !is_cv_qualifier)
8116             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
8117           /* A constructor declarator cannot follow a type-specifier.  */
8118           if (type_spec)
8119             {
8120               constructor_possible_p = false;
8121               found_decl_spec = true;
8122             }
8123         }
8124
8125       /* If we still do not have a DECL_SPEC, then there are no more
8126          decl-specifiers.  */
8127       if (!found_decl_spec)
8128         break;
8129
8130       decl_specs->any_specifiers_p = true;
8131       /* After we see one decl-specifier, further decl-specifiers are
8132          always optional.  */
8133       flags |= CP_PARSER_FLAGS_OPTIONAL;
8134     }
8135
8136   cp_parser_check_decl_spec (decl_specs);
8137
8138   /* Don't allow a friend specifier with a class definition.  */
8139   if (decl_specs->specs[(int) ds_friend] != 0
8140       && (*declares_class_or_enum & 2))
8141     error ("class definition may not be declared a friend");
8142 }
8143
8144 /* Parse an (optional) storage-class-specifier.
8145
8146    storage-class-specifier:
8147      auto
8148      register
8149      static
8150      extern
8151      mutable
8152
8153    GNU Extension:
8154
8155    storage-class-specifier:
8156      thread
8157
8158    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
8159
8160 static tree
8161 cp_parser_storage_class_specifier_opt (cp_parser* parser)
8162 {
8163   switch (cp_lexer_peek_token (parser->lexer)->keyword)
8164     {
8165     case RID_AUTO:
8166     case RID_REGISTER:
8167     case RID_STATIC:
8168     case RID_EXTERN:
8169     case RID_MUTABLE:
8170     case RID_THREAD:
8171       /* Consume the token.  */
8172       return cp_lexer_consume_token (parser->lexer)->u.value;
8173
8174     default:
8175       return NULL_TREE;
8176     }
8177 }
8178
8179 /* Parse an (optional) function-specifier.
8180
8181    function-specifier:
8182      inline
8183      virtual
8184      explicit
8185
8186    Returns an IDENTIFIER_NODE corresponding to the keyword used.
8187    Updates DECL_SPECS, if it is non-NULL.  */
8188
8189 static tree
8190 cp_parser_function_specifier_opt (cp_parser* parser,
8191                                   cp_decl_specifier_seq *decl_specs)
8192 {
8193   switch (cp_lexer_peek_token (parser->lexer)->keyword)
8194     {
8195     case RID_INLINE:
8196       if (decl_specs)
8197         ++decl_specs->specs[(int) ds_inline];
8198       break;
8199
8200     case RID_VIRTUAL:
8201       /* 14.5.2.3 [temp.mem]
8202
8203          A member function template shall not be virtual.  */
8204       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8205         error ("templates may not be %<virtual%>");
8206       else if (decl_specs)
8207         ++decl_specs->specs[(int) ds_virtual];
8208       break;
8209
8210     case RID_EXPLICIT:
8211       if (decl_specs)
8212         ++decl_specs->specs[(int) ds_explicit];
8213       break;
8214
8215     default:
8216       return NULL_TREE;
8217     }
8218
8219   /* Consume the token.  */
8220   return cp_lexer_consume_token (parser->lexer)->u.value;
8221 }
8222
8223 /* Parse a linkage-specification.
8224
8225    linkage-specification:
8226      extern string-literal { declaration-seq [opt] }
8227      extern string-literal declaration  */
8228
8229 static void
8230 cp_parser_linkage_specification (cp_parser* parser)
8231 {
8232   tree linkage;
8233
8234   /* Look for the `extern' keyword.  */
8235   cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
8236
8237   /* Look for the string-literal.  */
8238   linkage = cp_parser_string_literal (parser, false, false);
8239
8240   /* Transform the literal into an identifier.  If the literal is a
8241      wide-character string, or contains embedded NULs, then we can't
8242      handle it as the user wants.  */
8243   if (strlen (TREE_STRING_POINTER (linkage))
8244       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
8245     {
8246       cp_parser_error (parser, "invalid linkage-specification");
8247       /* Assume C++ linkage.  */
8248       linkage = lang_name_cplusplus;
8249     }
8250   else
8251     linkage = get_identifier (TREE_STRING_POINTER (linkage));
8252
8253   /* We're now using the new linkage.  */
8254   push_lang_context (linkage);
8255
8256   /* If the next token is a `{', then we're using the first
8257      production.  */
8258   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8259     {
8260       /* Consume the `{' token.  */
8261       cp_lexer_consume_token (parser->lexer);
8262       /* Parse the declarations.  */
8263       cp_parser_declaration_seq_opt (parser);
8264       /* Look for the closing `}'.  */
8265       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
8266     }
8267   /* Otherwise, there's just one declaration.  */
8268   else
8269     {
8270       bool saved_in_unbraced_linkage_specification_p;
8271
8272       saved_in_unbraced_linkage_specification_p
8273         = parser->in_unbraced_linkage_specification_p;
8274       parser->in_unbraced_linkage_specification_p = true;
8275       cp_parser_declaration (parser);
8276       parser->in_unbraced_linkage_specification_p
8277         = saved_in_unbraced_linkage_specification_p;
8278     }
8279
8280   /* We're done with the linkage-specification.  */
8281   pop_lang_context ();
8282 }
8283
8284 /* Parse a static_assert-declaration.
8285
8286    static_assert-declaration:
8287      static_assert ( constant-expression , string-literal ) ; 
8288
8289    If MEMBER_P, this static_assert is a class member.  */
8290
8291 static void 
8292 cp_parser_static_assert(cp_parser *parser, bool member_p)
8293 {
8294   tree condition;
8295   tree message;
8296   cp_token *token;
8297   location_t saved_loc;
8298
8299   /* Peek at the `static_assert' token so we can keep track of exactly
8300      where the static assertion started.  */
8301   token = cp_lexer_peek_token (parser->lexer);
8302   saved_loc = token->location;
8303
8304   /* Look for the `static_assert' keyword.  */
8305   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT, 
8306                                   "`static_assert'"))
8307     return;
8308
8309   /*  We know we are in a static assertion; commit to any tentative
8310       parse.  */
8311   if (cp_parser_parsing_tentatively (parser))
8312     cp_parser_commit_to_tentative_parse (parser);
8313
8314   /* Parse the `(' starting the static assertion condition.  */
8315   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
8316
8317   /* Parse the constant-expression.  */
8318   condition = 
8319     cp_parser_constant_expression (parser,
8320                                    /*allow_non_constant_p=*/false,
8321                                    /*non_constant_p=*/NULL);
8322
8323   /* Parse the separating `,'.  */
8324   cp_parser_require (parser, CPP_COMMA, "`,'");
8325
8326   /* Parse the string-literal message.  */
8327   message = cp_parser_string_literal (parser, 
8328                                       /*translate=*/false,
8329                                       /*wide_ok=*/true);
8330
8331   /* A `)' completes the static assertion.  */
8332   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
8333     cp_parser_skip_to_closing_parenthesis (parser, 
8334                                            /*recovering=*/true, 
8335                                            /*or_comma=*/false,
8336                                            /*consume_paren=*/true);
8337
8338   /* A semicolon terminates the declaration.  */
8339   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
8340
8341   /* Complete the static assertion, which may mean either processing 
8342      the static assert now or saving it for template instantiation.  */
8343   finish_static_assert (condition, message, saved_loc, member_p);
8344 }
8345
8346 /* Special member functions [gram.special] */
8347
8348 /* Parse a conversion-function-id.
8349
8350    conversion-function-id:
8351      operator conversion-type-id
8352
8353    Returns an IDENTIFIER_NODE representing the operator.  */
8354
8355 static tree
8356 cp_parser_conversion_function_id (cp_parser* parser)
8357 {
8358   tree type;
8359   tree saved_scope;
8360   tree saved_qualifying_scope;
8361   tree saved_object_scope;
8362   tree pushed_scope = NULL_TREE;
8363
8364   /* Look for the `operator' token.  */
8365   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
8366     return error_mark_node;
8367   /* When we parse the conversion-type-id, the current scope will be
8368      reset.  However, we need that information in able to look up the
8369      conversion function later, so we save it here.  */
8370   saved_scope = parser->scope;
8371   saved_qualifying_scope = parser->qualifying_scope;
8372   saved_object_scope = parser->object_scope;
8373   /* We must enter the scope of the class so that the names of
8374      entities declared within the class are available in the
8375      conversion-type-id.  For example, consider:
8376
8377        struct S {
8378          typedef int I;
8379          operator I();
8380        };
8381
8382        S::operator I() { ... }
8383
8384      In order to see that `I' is a type-name in the definition, we
8385      must be in the scope of `S'.  */
8386   if (saved_scope)
8387     pushed_scope = push_scope (saved_scope);
8388   /* Parse the conversion-type-id.  */
8389   type = cp_parser_conversion_type_id (parser);
8390   /* Leave the scope of the class, if any.  */
8391   if (pushed_scope)
8392     pop_scope (pushed_scope);
8393   /* Restore the saved scope.  */
8394   parser->scope = saved_scope;
8395   parser->qualifying_scope = saved_qualifying_scope;
8396   parser->object_scope = saved_object_scope;
8397   /* If the TYPE is invalid, indicate failure.  */
8398   if (type == error_mark_node)
8399     return error_mark_node;
8400   return mangle_conv_op_name_for_type (type);
8401 }
8402
8403 /* Parse a conversion-type-id:
8404
8405    conversion-type-id:
8406      type-specifier-seq conversion-declarator [opt]
8407
8408    Returns the TYPE specified.  */
8409
8410 static tree
8411 cp_parser_conversion_type_id (cp_parser* parser)
8412 {
8413   tree attributes;
8414   cp_decl_specifier_seq type_specifiers;
8415   cp_declarator *declarator;
8416   tree type_specified;
8417
8418   /* Parse the attributes.  */
8419   attributes = cp_parser_attributes_opt (parser);
8420   /* Parse the type-specifiers.  */
8421   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
8422                                 &type_specifiers);
8423   /* If that didn't work, stop.  */
8424   if (type_specifiers.type == error_mark_node)
8425     return error_mark_node;
8426   /* Parse the conversion-declarator.  */
8427   declarator = cp_parser_conversion_declarator_opt (parser);
8428
8429   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
8430                                     /*initialized=*/0, &attributes);
8431   if (attributes)
8432     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
8433   return type_specified;
8434 }
8435
8436 /* Parse an (optional) conversion-declarator.
8437
8438    conversion-declarator:
8439      ptr-operator conversion-declarator [opt]
8440
8441    */
8442
8443 static cp_declarator *
8444 cp_parser_conversion_declarator_opt (cp_parser* parser)
8445 {
8446   enum tree_code code;
8447   tree class_type;
8448   cp_cv_quals cv_quals;
8449
8450   /* We don't know if there's a ptr-operator next, or not.  */
8451   cp_parser_parse_tentatively (parser);
8452   /* Try the ptr-operator.  */
8453   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
8454   /* If it worked, look for more conversion-declarators.  */
8455   if (cp_parser_parse_definitely (parser))
8456     {
8457       cp_declarator *declarator;
8458
8459       /* Parse another optional declarator.  */
8460       declarator = cp_parser_conversion_declarator_opt (parser);
8461
8462       /* Create the representation of the declarator.  */
8463       if (class_type)
8464         declarator = make_ptrmem_declarator (cv_quals, class_type,
8465                                              declarator);
8466       else if (code == INDIRECT_REF)
8467         declarator = make_pointer_declarator (cv_quals, declarator);
8468       else
8469         declarator = make_reference_declarator (cv_quals, declarator);
8470
8471       return declarator;
8472    }
8473
8474   return NULL;
8475 }
8476
8477 /* Parse an (optional) ctor-initializer.
8478
8479    ctor-initializer:
8480      : mem-initializer-list
8481
8482    Returns TRUE iff the ctor-initializer was actually present.  */
8483
8484 static bool
8485 cp_parser_ctor_initializer_opt (cp_parser* parser)
8486 {
8487   /* If the next token is not a `:', then there is no
8488      ctor-initializer.  */
8489   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
8490     {
8491       /* Do default initialization of any bases and members.  */
8492       if (DECL_CONSTRUCTOR_P (current_function_decl))
8493         finish_mem_initializers (NULL_TREE);
8494
8495       return false;
8496     }
8497
8498   /* Consume the `:' token.  */
8499   cp_lexer_consume_token (parser->lexer);
8500   /* And the mem-initializer-list.  */
8501   cp_parser_mem_initializer_list (parser);
8502
8503   return true;
8504 }
8505
8506 /* Parse a mem-initializer-list.
8507
8508    mem-initializer-list:
8509      mem-initializer ... [opt]
8510      mem-initializer ... [opt] , mem-initializer-list  */
8511
8512 static void
8513 cp_parser_mem_initializer_list (cp_parser* parser)
8514 {
8515   tree mem_initializer_list = NULL_TREE;
8516
8517   /* Let the semantic analysis code know that we are starting the
8518      mem-initializer-list.  */
8519   if (!DECL_CONSTRUCTOR_P (current_function_decl))
8520     error ("only constructors take base initializers");
8521
8522   /* Loop through the list.  */
8523   while (true)
8524     {
8525       tree mem_initializer;
8526
8527       /* Parse the mem-initializer.  */
8528       mem_initializer = cp_parser_mem_initializer (parser);
8529       /* If the next token is a `...', we're expanding member initializers. */
8530       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
8531         {
8532           /* Consume the `...'. */
8533           cp_lexer_consume_token (parser->lexer);
8534
8535           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
8536              can be expanded but members cannot. */
8537           if (mem_initializer != error_mark_node
8538               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
8539             {
8540               error ("cannot expand initializer for member %<%D%>", 
8541                      TREE_PURPOSE (mem_initializer));
8542               mem_initializer = error_mark_node;
8543             }
8544
8545           /* Construct the pack expansion type. */
8546           if (mem_initializer != error_mark_node)
8547             mem_initializer = make_pack_expansion (mem_initializer);
8548         }
8549       /* Add it to the list, unless it was erroneous.  */
8550       if (mem_initializer != error_mark_node)
8551         {
8552           TREE_CHAIN (mem_initializer) = mem_initializer_list;
8553           mem_initializer_list = mem_initializer;
8554         }
8555       /* If the next token is not a `,', we're done.  */
8556       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8557         break;
8558       /* Consume the `,' token.  */
8559       cp_lexer_consume_token (parser->lexer);
8560     }
8561
8562   /* Perform semantic analysis.  */
8563   if (DECL_CONSTRUCTOR_P (current_function_decl))
8564     finish_mem_initializers (mem_initializer_list);
8565 }
8566
8567 /* Parse a mem-initializer.
8568
8569    mem-initializer:
8570      mem-initializer-id ( expression-list [opt] )
8571
8572    GNU extension:
8573
8574    mem-initializer:
8575      ( expression-list [opt] )
8576
8577    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
8578    class) or FIELD_DECL (for a non-static data member) to initialize;
8579    the TREE_VALUE is the expression-list.  An empty initialization
8580    list is represented by void_list_node.  */
8581
8582 static tree
8583 cp_parser_mem_initializer (cp_parser* parser)
8584 {
8585   tree mem_initializer_id;
8586   tree expression_list;
8587   tree member;
8588
8589   /* Find out what is being initialized.  */
8590   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
8591     {
8592       pedwarn ("anachronistic old-style base class initializer");
8593       mem_initializer_id = NULL_TREE;
8594     }
8595   else
8596     mem_initializer_id = cp_parser_mem_initializer_id (parser);
8597   member = expand_member_init (mem_initializer_id);
8598   if (member && !DECL_P (member))
8599     in_base_initializer = 1;
8600
8601   expression_list
8602     = cp_parser_parenthesized_expression_list (parser, false,
8603                                                /*cast_p=*/false,
8604                                                /*allow_expansion_p=*/true,
8605                                                /*non_constant_p=*/NULL);
8606   if (expression_list == error_mark_node)
8607     return error_mark_node;
8608   if (!expression_list)
8609     expression_list = void_type_node;
8610
8611   in_base_initializer = 0;
8612
8613   return member ? build_tree_list (member, expression_list) : error_mark_node;
8614 }
8615
8616 /* Parse a mem-initializer-id.
8617
8618    mem-initializer-id:
8619      :: [opt] nested-name-specifier [opt] class-name
8620      identifier
8621
8622    Returns a TYPE indicating the class to be initializer for the first
8623    production.  Returns an IDENTIFIER_NODE indicating the data member
8624    to be initialized for the second production.  */
8625
8626 static tree
8627 cp_parser_mem_initializer_id (cp_parser* parser)
8628 {
8629   bool global_scope_p;
8630   bool nested_name_specifier_p;
8631   bool template_p = false;
8632   tree id;
8633
8634   /* `typename' is not allowed in this context ([temp.res]).  */
8635   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
8636     {
8637       error ("keyword %<typename%> not allowed in this context (a qualified "
8638              "member initializer is implicitly a type)");
8639       cp_lexer_consume_token (parser->lexer);
8640     }
8641   /* Look for the optional `::' operator.  */
8642   global_scope_p
8643     = (cp_parser_global_scope_opt (parser,
8644                                    /*current_scope_valid_p=*/false)
8645        != NULL_TREE);
8646   /* Look for the optional nested-name-specifier.  The simplest way to
8647      implement:
8648
8649        [temp.res]
8650
8651        The keyword `typename' is not permitted in a base-specifier or
8652        mem-initializer; in these contexts a qualified name that
8653        depends on a template-parameter is implicitly assumed to be a
8654        type name.
8655
8656      is to assume that we have seen the `typename' keyword at this
8657      point.  */
8658   nested_name_specifier_p
8659     = (cp_parser_nested_name_specifier_opt (parser,
8660                                             /*typename_keyword_p=*/true,
8661                                             /*check_dependency_p=*/true,
8662                                             /*type_p=*/true,
8663                                             /*is_declaration=*/true)
8664        != NULL_TREE);
8665   if (nested_name_specifier_p)
8666     template_p = cp_parser_optional_template_keyword (parser);
8667   /* If there is a `::' operator or a nested-name-specifier, then we
8668      are definitely looking for a class-name.  */
8669   if (global_scope_p || nested_name_specifier_p)
8670     return cp_parser_class_name (parser,
8671                                  /*typename_keyword_p=*/true,
8672                                  /*template_keyword_p=*/template_p,
8673                                  none_type,
8674                                  /*check_dependency_p=*/true,
8675                                  /*class_head_p=*/false,
8676                                  /*is_declaration=*/true);
8677   /* Otherwise, we could also be looking for an ordinary identifier.  */
8678   cp_parser_parse_tentatively (parser);
8679   /* Try a class-name.  */
8680   id = cp_parser_class_name (parser,
8681                              /*typename_keyword_p=*/true,
8682                              /*template_keyword_p=*/false,
8683                              none_type,
8684                              /*check_dependency_p=*/true,
8685                              /*class_head_p=*/false,
8686                              /*is_declaration=*/true);
8687   /* If we found one, we're done.  */
8688   if (cp_parser_parse_definitely (parser))
8689     return id;
8690   /* Otherwise, look for an ordinary identifier.  */
8691   return cp_parser_identifier (parser);
8692 }
8693
8694 /* Overloading [gram.over] */
8695
8696 /* Parse an operator-function-id.
8697
8698    operator-function-id:
8699      operator operator
8700
8701    Returns an IDENTIFIER_NODE for the operator which is a
8702    human-readable spelling of the identifier, e.g., `operator +'.  */
8703
8704 static tree
8705 cp_parser_operator_function_id (cp_parser* parser)
8706 {
8707   /* Look for the `operator' keyword.  */
8708   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
8709     return error_mark_node;
8710   /* And then the name of the operator itself.  */
8711   return cp_parser_operator (parser);
8712 }
8713
8714 /* Parse an operator.
8715
8716    operator:
8717      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
8718      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
8719      || ++ -- , ->* -> () []
8720
8721    GNU Extensions:
8722
8723    operator:
8724      <? >? <?= >?=
8725
8726    Returns an IDENTIFIER_NODE for the operator which is a
8727    human-readable spelling of the identifier, e.g., `operator +'.  */
8728
8729 static tree
8730 cp_parser_operator (cp_parser* parser)
8731 {
8732   tree id = NULL_TREE;
8733   cp_token *token;
8734
8735   /* Peek at the next token.  */
8736   token = cp_lexer_peek_token (parser->lexer);
8737   /* Figure out which operator we have.  */
8738   switch (token->type)
8739     {
8740     case CPP_KEYWORD:
8741       {
8742         enum tree_code op;
8743
8744         /* The keyword should be either `new' or `delete'.  */
8745         if (token->keyword == RID_NEW)
8746           op = NEW_EXPR;
8747         else if (token->keyword == RID_DELETE)
8748           op = DELETE_EXPR;
8749         else
8750           break;
8751
8752         /* Consume the `new' or `delete' token.  */
8753         cp_lexer_consume_token (parser->lexer);
8754
8755         /* Peek at the next token.  */
8756         token = cp_lexer_peek_token (parser->lexer);
8757         /* If it's a `[' token then this is the array variant of the
8758            operator.  */
8759         if (token->type == CPP_OPEN_SQUARE)
8760           {
8761             /* Consume the `[' token.  */
8762             cp_lexer_consume_token (parser->lexer);
8763             /* Look for the `]' token.  */
8764             cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8765             id = ansi_opname (op == NEW_EXPR
8766                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
8767           }
8768         /* Otherwise, we have the non-array variant.  */
8769         else
8770           id = ansi_opname (op);
8771
8772         return id;
8773       }
8774
8775     case CPP_PLUS:
8776       id = ansi_opname (PLUS_EXPR);
8777       break;
8778
8779     case CPP_MINUS:
8780       id = ansi_opname (MINUS_EXPR);
8781       break;
8782
8783     case CPP_MULT:
8784       id = ansi_opname (MULT_EXPR);
8785       break;
8786
8787     case CPP_DIV:
8788       id = ansi_opname (TRUNC_DIV_EXPR);
8789       break;
8790
8791     case CPP_MOD:
8792       id = ansi_opname (TRUNC_MOD_EXPR);
8793       break;
8794
8795     case CPP_XOR:
8796       id = ansi_opname (BIT_XOR_EXPR);
8797       break;
8798
8799     case CPP_AND:
8800       id = ansi_opname (BIT_AND_EXPR);
8801       break;
8802
8803     case CPP_OR:
8804       id = ansi_opname (BIT_IOR_EXPR);
8805       break;
8806
8807     case CPP_COMPL:
8808       id = ansi_opname (BIT_NOT_EXPR);
8809       break;
8810
8811     case CPP_NOT:
8812       id = ansi_opname (TRUTH_NOT_EXPR);
8813       break;
8814
8815     case CPP_EQ:
8816       id = ansi_assopname (NOP_EXPR);
8817       break;
8818
8819     case CPP_LESS:
8820       id = ansi_opname (LT_EXPR);
8821       break;
8822
8823     case CPP_GREATER:
8824       id = ansi_opname (GT_EXPR);
8825       break;
8826
8827     case CPP_PLUS_EQ:
8828       id = ansi_assopname (PLUS_EXPR);
8829       break;
8830
8831     case CPP_MINUS_EQ:
8832       id = ansi_assopname (MINUS_EXPR);
8833       break;
8834
8835     case CPP_MULT_EQ:
8836       id = ansi_assopname (MULT_EXPR);
8837       break;
8838
8839     case CPP_DIV_EQ:
8840       id = ansi_assopname (TRUNC_DIV_EXPR);
8841       break;
8842
8843     case CPP_MOD_EQ:
8844       id = ansi_assopname (TRUNC_MOD_EXPR);
8845       break;
8846
8847     case CPP_XOR_EQ:
8848       id = ansi_assopname (BIT_XOR_EXPR);
8849       break;
8850
8851     case CPP_AND_EQ:
8852       id = ansi_assopname (BIT_AND_EXPR);
8853       break;
8854
8855     case CPP_OR_EQ:
8856       id = ansi_assopname (BIT_IOR_EXPR);
8857       break;
8858
8859     case CPP_LSHIFT:
8860       id = ansi_opname (LSHIFT_EXPR);
8861       break;
8862
8863     case CPP_RSHIFT:
8864       id = ansi_opname (RSHIFT_EXPR);
8865       break;
8866
8867     case CPP_LSHIFT_EQ:
8868       id = ansi_assopname (LSHIFT_EXPR);
8869       break;
8870
8871     case CPP_RSHIFT_EQ:
8872       id = ansi_assopname (RSHIFT_EXPR);
8873       break;
8874
8875     case CPP_EQ_EQ:
8876       id = ansi_opname (EQ_EXPR);
8877       break;
8878
8879     case CPP_NOT_EQ:
8880       id = ansi_opname (NE_EXPR);
8881       break;
8882
8883     case CPP_LESS_EQ:
8884       id = ansi_opname (LE_EXPR);
8885       break;
8886
8887     case CPP_GREATER_EQ:
8888       id = ansi_opname (GE_EXPR);
8889       break;
8890
8891     case CPP_AND_AND:
8892       id = ansi_opname (TRUTH_ANDIF_EXPR);
8893       break;
8894
8895     case CPP_OR_OR:
8896       id = ansi_opname (TRUTH_ORIF_EXPR);
8897       break;
8898
8899     case CPP_PLUS_PLUS:
8900       id = ansi_opname (POSTINCREMENT_EXPR);
8901       break;
8902
8903     case CPP_MINUS_MINUS:
8904       id = ansi_opname (PREDECREMENT_EXPR);
8905       break;
8906
8907     case CPP_COMMA:
8908       id = ansi_opname (COMPOUND_EXPR);
8909       break;
8910
8911     case CPP_DEREF_STAR:
8912       id = ansi_opname (MEMBER_REF);
8913       break;
8914
8915     case CPP_DEREF:
8916       id = ansi_opname (COMPONENT_REF);
8917       break;
8918
8919     case CPP_OPEN_PAREN:
8920       /* Consume the `('.  */
8921       cp_lexer_consume_token (parser->lexer);
8922       /* Look for the matching `)'.  */
8923       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8924       return ansi_opname (CALL_EXPR);
8925
8926     case CPP_OPEN_SQUARE:
8927       /* Consume the `['.  */
8928       cp_lexer_consume_token (parser->lexer);
8929       /* Look for the matching `]'.  */
8930       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8931       return ansi_opname (ARRAY_REF);
8932
8933     default:
8934       /* Anything else is an error.  */
8935       break;
8936     }
8937
8938   /* If we have selected an identifier, we need to consume the
8939      operator token.  */
8940   if (id)
8941     cp_lexer_consume_token (parser->lexer);
8942   /* Otherwise, no valid operator name was present.  */
8943   else
8944     {
8945       cp_parser_error (parser, "expected operator");
8946       id = error_mark_node;
8947     }
8948
8949   return id;
8950 }
8951
8952 /* Parse a template-declaration.
8953
8954    template-declaration:
8955      export [opt] template < template-parameter-list > declaration
8956
8957    If MEMBER_P is TRUE, this template-declaration occurs within a
8958    class-specifier.
8959
8960    The grammar rule given by the standard isn't correct.  What
8961    is really meant is:
8962
8963    template-declaration:
8964      export [opt] template-parameter-list-seq
8965        decl-specifier-seq [opt] init-declarator [opt] ;
8966      export [opt] template-parameter-list-seq
8967        function-definition
8968
8969    template-parameter-list-seq:
8970      template-parameter-list-seq [opt]
8971      template < template-parameter-list >  */
8972
8973 static void
8974 cp_parser_template_declaration (cp_parser* parser, bool member_p)
8975 {
8976   /* Check for `export'.  */
8977   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8978     {
8979       /* Consume the `export' token.  */
8980       cp_lexer_consume_token (parser->lexer);
8981       /* Warn that we do not support `export'.  */
8982       warning (0, "keyword %<export%> not implemented, and will be ignored");
8983     }
8984
8985   cp_parser_template_declaration_after_export (parser, member_p);
8986 }
8987
8988 /* Parse a template-parameter-list.
8989
8990    template-parameter-list:
8991      template-parameter
8992      template-parameter-list , template-parameter
8993
8994    Returns a TREE_LIST.  Each node represents a template parameter.
8995    The nodes are connected via their TREE_CHAINs.  */
8996
8997 static tree
8998 cp_parser_template_parameter_list (cp_parser* parser)
8999 {
9000   tree parameter_list = NULL_TREE;
9001
9002   begin_template_parm_list ();
9003   while (true)
9004     {
9005       tree parameter;
9006       cp_token *token;
9007       bool is_non_type;
9008       bool is_parameter_pack;
9009
9010       /* Parse the template-parameter.  */
9011       parameter = cp_parser_template_parameter (parser, 
9012                                                 &is_non_type,
9013                                                 &is_parameter_pack);
9014       /* Add it to the list.  */
9015       if (parameter != error_mark_node)
9016         parameter_list = process_template_parm (parameter_list,
9017                                                 parameter,
9018                                                 is_non_type,
9019                                                 is_parameter_pack);
9020       else
9021        {
9022          tree err_parm = build_tree_list (parameter, parameter);
9023          TREE_VALUE (err_parm) = error_mark_node;
9024          parameter_list = chainon (parameter_list, err_parm);
9025        }
9026
9027       /* Peek at the next token.  */
9028       token = cp_lexer_peek_token (parser->lexer);
9029       /* If it's not a `,', we're done.  */
9030       if (token->type != CPP_COMMA)
9031         break;
9032       /* Otherwise, consume the `,' token.  */
9033       cp_lexer_consume_token (parser->lexer);
9034     }
9035
9036   return end_template_parm_list (parameter_list);
9037 }
9038
9039 /* Parse a template-parameter.
9040
9041    template-parameter:
9042      type-parameter
9043      parameter-declaration
9044
9045    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
9046    the parameter.  The TREE_PURPOSE is the default value, if any.
9047    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
9048    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
9049    set to true iff this parameter is a parameter pack. */
9050
9051 static tree
9052 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
9053                               bool *is_parameter_pack)
9054 {
9055   cp_token *token;
9056   cp_parameter_declarator *parameter_declarator;
9057   tree parm;
9058
9059   /* Assume it is a type parameter or a template parameter.  */
9060   *is_non_type = false;
9061   /* Assume it not a parameter pack. */
9062   *is_parameter_pack = false;
9063   /* Peek at the next token.  */
9064   token = cp_lexer_peek_token (parser->lexer);
9065   /* If it is `class' or `template', we have a type-parameter.  */
9066   if (token->keyword == RID_TEMPLATE)
9067     return cp_parser_type_parameter (parser, is_parameter_pack);
9068   /* If it is `class' or `typename' we do not know yet whether it is a
9069      type parameter or a non-type parameter.  Consider:
9070
9071        template <typename T, typename T::X X> ...
9072
9073      or:
9074
9075        template <class C, class D*> ...
9076
9077      Here, the first parameter is a type parameter, and the second is
9078      a non-type parameter.  We can tell by looking at the token after
9079      the identifier -- if it is a `,', `=', or `>' then we have a type
9080      parameter.  */
9081   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
9082     {
9083       /* Peek at the token after `class' or `typename'.  */
9084       token = cp_lexer_peek_nth_token (parser->lexer, 2);
9085       /* If it's an ellipsis, we have a template type parameter
9086          pack. */
9087       if (token->type == CPP_ELLIPSIS)
9088         return cp_parser_type_parameter (parser, is_parameter_pack);
9089       /* If it's an identifier, skip it.  */
9090       if (token->type == CPP_NAME)
9091         token = cp_lexer_peek_nth_token (parser->lexer, 3);
9092       /* Now, see if the token looks like the end of a template
9093          parameter.  */
9094       if (token->type == CPP_COMMA
9095           || token->type == CPP_EQ
9096           || token->type == CPP_GREATER)
9097         return cp_parser_type_parameter (parser, is_parameter_pack);
9098     }
9099
9100   /* Otherwise, it is a non-type parameter.
9101
9102      [temp.param]
9103
9104      When parsing a default template-argument for a non-type
9105      template-parameter, the first non-nested `>' is taken as the end
9106      of the template parameter-list rather than a greater-than
9107      operator.  */
9108   *is_non_type = true;
9109   parameter_declarator
9110      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
9111                                         /*parenthesized_p=*/NULL);
9112
9113   /* If the parameter declaration is marked as a parameter pack, set
9114      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
9115      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
9116      grokdeclarator. */
9117   if (parameter_declarator
9118       && parameter_declarator->declarator
9119       && parameter_declarator->declarator->parameter_pack_p)
9120     {
9121       *is_parameter_pack = true;
9122       parameter_declarator->declarator->parameter_pack_p = false;
9123     }
9124
9125   /* If the next token is an ellipsis, and we don't already have it
9126      marked as a parameter pack, then we have a parameter pack (that
9127      has no declarator); */
9128   if (!*is_parameter_pack
9129       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
9130       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
9131     {
9132       /* Consume the `...'. */
9133       cp_lexer_consume_token (parser->lexer);
9134       maybe_warn_variadic_templates ();
9135       
9136       *is_parameter_pack = true;
9137     }
9138
9139   parm = grokdeclarator (parameter_declarator->declarator,
9140                          &parameter_declarator->decl_specifiers,
9141                          PARM, /*initialized=*/0,
9142                          /*attrlist=*/NULL);
9143   if (parm == error_mark_node)
9144     return error_mark_node;
9145
9146   return build_tree_list (parameter_declarator->default_argument, parm);
9147 }
9148
9149 /* Parse a type-parameter.
9150
9151    type-parameter:
9152      class identifier [opt]
9153      class identifier [opt] = type-id
9154      typename identifier [opt]
9155      typename identifier [opt] = type-id
9156      template < template-parameter-list > class identifier [opt]
9157      template < template-parameter-list > class identifier [opt]
9158        = id-expression
9159
9160    GNU Extension (variadic templates):
9161
9162    type-parameter:
9163      class ... identifier [opt]
9164      typename ... identifier [opt]
9165
9166    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
9167    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
9168    the declaration of the parameter.
9169
9170    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
9171
9172 static tree
9173 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
9174 {
9175   cp_token *token;
9176   tree parameter;
9177
9178   /* Look for a keyword to tell us what kind of parameter this is.  */
9179   token = cp_parser_require (parser, CPP_KEYWORD,
9180                              "`class', `typename', or `template'");
9181   if (!token)
9182     return error_mark_node;
9183
9184   switch (token->keyword)
9185     {
9186     case RID_CLASS:
9187     case RID_TYPENAME:
9188       {
9189         tree identifier;
9190         tree default_argument;
9191
9192         /* If the next token is an ellipsis, we have a template
9193            argument pack. */
9194         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9195           {
9196             /* Consume the `...' token. */
9197             cp_lexer_consume_token (parser->lexer);
9198             maybe_warn_variadic_templates ();
9199
9200             *is_parameter_pack = true;
9201           }
9202
9203         /* If the next token is an identifier, then it names the
9204            parameter.  */
9205         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9206           identifier = cp_parser_identifier (parser);
9207         else
9208           identifier = NULL_TREE;
9209
9210         /* Create the parameter.  */
9211         parameter = finish_template_type_parm (class_type_node, identifier);
9212
9213         /* If the next token is an `=', we have a default argument.  */
9214         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9215           {
9216             /* Consume the `=' token.  */
9217             cp_lexer_consume_token (parser->lexer);
9218             /* Parse the default-argument.  */
9219             push_deferring_access_checks (dk_no_deferred);
9220             default_argument = cp_parser_type_id (parser);
9221
9222             /* Template parameter packs cannot have default
9223                arguments. */
9224             if (*is_parameter_pack)
9225               {
9226                 if (identifier)
9227                   error ("template parameter pack %qD cannot have a default argument", 
9228                          identifier);
9229                 else
9230                   error ("template parameter packs cannot have default arguments");
9231                 default_argument = NULL_TREE;
9232               }
9233             pop_deferring_access_checks ();
9234           }
9235         else
9236           default_argument = NULL_TREE;
9237
9238         /* Create the combined representation of the parameter and the
9239            default argument.  */
9240         parameter = build_tree_list (default_argument, parameter);
9241       }
9242       break;
9243
9244     case RID_TEMPLATE:
9245       {
9246         tree parameter_list;
9247         tree identifier;
9248         tree default_argument;
9249
9250         /* Look for the `<'.  */
9251         cp_parser_require (parser, CPP_LESS, "`<'");
9252         /* Parse the template-parameter-list.  */
9253         parameter_list = cp_parser_template_parameter_list (parser);
9254         /* Look for the `>'.  */
9255         cp_parser_require (parser, CPP_GREATER, "`>'");
9256         /* Look for the `class' keyword.  */
9257         cp_parser_require_keyword (parser, RID_CLASS, "`class'");
9258         /* If the next token is an ellipsis, we have a template
9259            argument pack. */
9260         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9261           {
9262             /* Consume the `...' token. */
9263             cp_lexer_consume_token (parser->lexer);
9264             maybe_warn_variadic_templates ();
9265
9266             *is_parameter_pack = true;
9267           }
9268         /* If the next token is an `=', then there is a
9269            default-argument.  If the next token is a `>', we are at
9270            the end of the parameter-list.  If the next token is a `,',
9271            then we are at the end of this parameter.  */
9272         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
9273             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
9274             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9275           {
9276             identifier = cp_parser_identifier (parser);
9277             /* Treat invalid names as if the parameter were nameless.  */
9278             if (identifier == error_mark_node)
9279               identifier = NULL_TREE;
9280           }
9281         else
9282           identifier = NULL_TREE;
9283
9284         /* Create the template parameter.  */
9285         parameter = finish_template_template_parm (class_type_node,
9286                                                    identifier);
9287
9288         /* If the next token is an `=', then there is a
9289            default-argument.  */
9290         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9291           {
9292             bool is_template;
9293
9294             /* Consume the `='.  */
9295             cp_lexer_consume_token (parser->lexer);
9296             /* Parse the id-expression.  */
9297             push_deferring_access_checks (dk_no_deferred);
9298             default_argument
9299               = cp_parser_id_expression (parser,
9300                                          /*template_keyword_p=*/false,
9301                                          /*check_dependency_p=*/true,
9302                                          /*template_p=*/&is_template,
9303                                          /*declarator_p=*/false,
9304                                          /*optional_p=*/false);
9305             if (TREE_CODE (default_argument) == TYPE_DECL)
9306               /* If the id-expression was a template-id that refers to
9307                  a template-class, we already have the declaration here,
9308                  so no further lookup is needed.  */
9309                  ;
9310             else
9311               /* Look up the name.  */
9312               default_argument
9313                 = cp_parser_lookup_name (parser, default_argument,
9314                                          none_type,
9315                                          /*is_template=*/is_template,
9316                                          /*is_namespace=*/false,
9317                                          /*check_dependency=*/true,
9318                                          /*ambiguous_decls=*/NULL);
9319             /* See if the default argument is valid.  */
9320             default_argument
9321               = check_template_template_default_arg (default_argument);
9322
9323             /* Template parameter packs cannot have default
9324                arguments. */
9325             if (*is_parameter_pack)
9326               {
9327                 if (identifier)
9328                   error ("template parameter pack %qD cannot have a default argument", 
9329                          identifier);
9330                 else
9331                   error ("template parameter packs cannot have default arguments");
9332                 default_argument = NULL_TREE;
9333               }
9334             pop_deferring_access_checks ();
9335           }
9336         else
9337           default_argument = NULL_TREE;
9338
9339         /* Create the combined representation of the parameter and the
9340            default argument.  */
9341         parameter = build_tree_list (default_argument, parameter);
9342       }
9343       break;
9344
9345     default:
9346       gcc_unreachable ();
9347       break;
9348     }
9349
9350   return parameter;
9351 }
9352
9353 /* Parse a template-id.
9354
9355    template-id:
9356      template-name < template-argument-list [opt] >
9357
9358    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
9359    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
9360    returned.  Otherwise, if the template-name names a function, or set
9361    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
9362    names a class, returns a TYPE_DECL for the specialization.
9363
9364    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
9365    uninstantiated templates.  */
9366
9367 static tree
9368 cp_parser_template_id (cp_parser *parser,
9369                        bool template_keyword_p,
9370                        bool check_dependency_p,
9371                        bool is_declaration)
9372 {
9373   int i;
9374   tree template;
9375   tree arguments;
9376   tree template_id;
9377   cp_token_position start_of_id = 0;
9378   deferred_access_check *chk;
9379   VEC (deferred_access_check,gc) *access_check;
9380   cp_token *next_token, *next_token_2;
9381   bool is_identifier;
9382
9383   /* If the next token corresponds to a template-id, there is no need
9384      to reparse it.  */
9385   next_token = cp_lexer_peek_token (parser->lexer);
9386   if (next_token->type == CPP_TEMPLATE_ID)
9387     {
9388       struct tree_check *check_value;
9389
9390       /* Get the stored value.  */
9391       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
9392       /* Perform any access checks that were deferred.  */
9393       access_check = check_value->checks;
9394       if (access_check)
9395         {
9396           for (i = 0 ;
9397                VEC_iterate (deferred_access_check, access_check, i, chk) ;
9398                ++i)
9399             {
9400               perform_or_defer_access_check (chk->binfo,
9401                                              chk->decl,
9402                                              chk->diag_decl);
9403             }
9404         }
9405       /* Return the stored value.  */
9406       return check_value->value;
9407     }
9408
9409   /* Avoid performing name lookup if there is no possibility of
9410      finding a template-id.  */
9411   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
9412       || (next_token->type == CPP_NAME
9413           && !cp_parser_nth_token_starts_template_argument_list_p
9414                (parser, 2)))
9415     {
9416       cp_parser_error (parser, "expected template-id");
9417       return error_mark_node;
9418     }
9419
9420   /* Remember where the template-id starts.  */
9421   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
9422     start_of_id = cp_lexer_token_position (parser->lexer, false);
9423
9424   push_deferring_access_checks (dk_deferred);
9425
9426   /* Parse the template-name.  */
9427   is_identifier = false;
9428   template = cp_parser_template_name (parser, template_keyword_p,
9429                                       check_dependency_p,
9430                                       is_declaration,
9431                                       &is_identifier);
9432   if (template == error_mark_node || is_identifier)
9433     {
9434       pop_deferring_access_checks ();
9435       return template;
9436     }
9437
9438   /* If we find the sequence `[:' after a template-name, it's probably
9439      a digraph-typo for `< ::'. Substitute the tokens and check if we can
9440      parse correctly the argument list.  */
9441   next_token = cp_lexer_peek_token (parser->lexer);
9442   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
9443   if (next_token->type == CPP_OPEN_SQUARE
9444       && next_token->flags & DIGRAPH
9445       && next_token_2->type == CPP_COLON
9446       && !(next_token_2->flags & PREV_WHITE))
9447     {
9448       cp_parser_parse_tentatively (parser);
9449       /* Change `:' into `::'.  */
9450       next_token_2->type = CPP_SCOPE;
9451       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
9452          CPP_LESS.  */
9453       cp_lexer_consume_token (parser->lexer);
9454       /* Parse the arguments.  */
9455       arguments = cp_parser_enclosed_template_argument_list (parser);
9456       if (!cp_parser_parse_definitely (parser))
9457         {
9458           /* If we couldn't parse an argument list, then we revert our changes
9459              and return simply an error. Maybe this is not a template-id
9460              after all.  */
9461           next_token_2->type = CPP_COLON;
9462           cp_parser_error (parser, "expected %<<%>");
9463           pop_deferring_access_checks ();
9464           return error_mark_node;
9465         }
9466       /* Otherwise, emit an error about the invalid digraph, but continue
9467          parsing because we got our argument list.  */
9468       pedwarn ("%<<::%> cannot begin a template-argument list");
9469       inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
9470               "between %<<%> and %<::%>");
9471       if (!flag_permissive)
9472         {
9473           static bool hint;
9474           if (!hint)
9475             {
9476               inform ("(if you use -fpermissive G++ will accept your code)");
9477               hint = true;
9478             }
9479         }
9480     }
9481   else
9482     {
9483       /* Look for the `<' that starts the template-argument-list.  */
9484       if (!cp_parser_require (parser, CPP_LESS, "`<'"))
9485         {
9486           pop_deferring_access_checks ();
9487           return error_mark_node;
9488         }
9489       /* Parse the arguments.  */
9490       arguments = cp_parser_enclosed_template_argument_list (parser);
9491     }
9492
9493   /* Build a representation of the specialization.  */
9494   if (TREE_CODE (template) == IDENTIFIER_NODE)
9495     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
9496   else if (DECL_CLASS_TEMPLATE_P (template)
9497            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
9498     {
9499       bool entering_scope;
9500       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
9501          template (rather than some instantiation thereof) only if
9502          is not nested within some other construct.  For example, in
9503          "template <typename T> void f(T) { A<T>::", A<T> is just an
9504          instantiation of A.  */
9505       entering_scope = (template_parm_scope_p ()
9506                         && cp_lexer_next_token_is (parser->lexer,
9507                                                    CPP_SCOPE));
9508       template_id
9509         = finish_template_type (template, arguments, entering_scope);
9510     }
9511   else
9512     {
9513       /* If it's not a class-template or a template-template, it should be
9514          a function-template.  */
9515       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
9516                    || TREE_CODE (template) == OVERLOAD
9517                    || BASELINK_P (template)));
9518
9519       template_id = lookup_template_function (template, arguments);
9520     }
9521
9522   /* If parsing tentatively, replace the sequence of tokens that makes
9523      up the template-id with a CPP_TEMPLATE_ID token.  That way,
9524      should we re-parse the token stream, we will not have to repeat
9525      the effort required to do the parse, nor will we issue duplicate
9526      error messages about problems during instantiation of the
9527      template.  */
9528   if (start_of_id)
9529     {
9530       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
9531
9532       /* Reset the contents of the START_OF_ID token.  */
9533       token->type = CPP_TEMPLATE_ID;
9534       /* Retrieve any deferred checks.  Do not pop this access checks yet
9535          so the memory will not be reclaimed during token replacing below.  */
9536       token->u.tree_check_value = GGC_CNEW (struct tree_check);
9537       token->u.tree_check_value->value = template_id;
9538       token->u.tree_check_value->checks = get_deferred_access_checks ();
9539       token->keyword = RID_MAX;
9540
9541       /* Purge all subsequent tokens.  */
9542       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
9543
9544       /* ??? Can we actually assume that, if template_id ==
9545          error_mark_node, we will have issued a diagnostic to the
9546          user, as opposed to simply marking the tentative parse as
9547          failed?  */
9548       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
9549         error ("parse error in template argument list");
9550     }
9551
9552   pop_deferring_access_checks ();
9553   return template_id;
9554 }
9555
9556 /* Parse a template-name.
9557
9558    template-name:
9559      identifier
9560
9561    The standard should actually say:
9562
9563    template-name:
9564      identifier
9565      operator-function-id
9566
9567    A defect report has been filed about this issue.
9568
9569    A conversion-function-id cannot be a template name because they cannot
9570    be part of a template-id. In fact, looking at this code:
9571
9572    a.operator K<int>()
9573
9574    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
9575    It is impossible to call a templated conversion-function-id with an
9576    explicit argument list, since the only allowed template parameter is
9577    the type to which it is converting.
9578
9579    If TEMPLATE_KEYWORD_P is true, then we have just seen the
9580    `template' keyword, in a construction like:
9581
9582      T::template f<3>()
9583
9584    In that case `f' is taken to be a template-name, even though there
9585    is no way of knowing for sure.
9586
9587    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
9588    name refers to a set of overloaded functions, at least one of which
9589    is a template, or an IDENTIFIER_NODE with the name of the template,
9590    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
9591    names are looked up inside uninstantiated templates.  */
9592
9593 static tree
9594 cp_parser_template_name (cp_parser* parser,
9595                          bool template_keyword_p,
9596                          bool check_dependency_p,
9597                          bool is_declaration,
9598                          bool *is_identifier)
9599 {
9600   tree identifier;
9601   tree decl;
9602   tree fns;
9603
9604   /* If the next token is `operator', then we have either an
9605      operator-function-id or a conversion-function-id.  */
9606   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
9607     {
9608       /* We don't know whether we're looking at an
9609          operator-function-id or a conversion-function-id.  */
9610       cp_parser_parse_tentatively (parser);
9611       /* Try an operator-function-id.  */
9612       identifier = cp_parser_operator_function_id (parser);
9613       /* If that didn't work, try a conversion-function-id.  */
9614       if (!cp_parser_parse_definitely (parser))
9615         {
9616           cp_parser_error (parser, "expected template-name");
9617           return error_mark_node;
9618         }
9619     }
9620   /* Look for the identifier.  */
9621   else
9622     identifier = cp_parser_identifier (parser);
9623
9624   /* If we didn't find an identifier, we don't have a template-id.  */
9625   if (identifier == error_mark_node)
9626     return error_mark_node;
9627
9628   /* If the name immediately followed the `template' keyword, then it
9629      is a template-name.  However, if the next token is not `<', then
9630      we do not treat it as a template-name, since it is not being used
9631      as part of a template-id.  This enables us to handle constructs
9632      like:
9633
9634        template <typename T> struct S { S(); };
9635        template <typename T> S<T>::S();
9636
9637      correctly.  We would treat `S' as a template -- if it were `S<T>'
9638      -- but we do not if there is no `<'.  */
9639
9640   if (processing_template_decl
9641       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
9642     {
9643       /* In a declaration, in a dependent context, we pretend that the
9644          "template" keyword was present in order to improve error
9645          recovery.  For example, given:
9646
9647            template <typename T> void f(T::X<int>);
9648
9649          we want to treat "X<int>" as a template-id.  */
9650       if (is_declaration
9651           && !template_keyword_p
9652           && parser->scope && TYPE_P (parser->scope)
9653           && check_dependency_p
9654           && dependent_type_p (parser->scope)
9655           /* Do not do this for dtors (or ctors), since they never
9656              need the template keyword before their name.  */
9657           && !constructor_name_p (identifier, parser->scope))
9658         {
9659           cp_token_position start = 0;
9660
9661           /* Explain what went wrong.  */
9662           error ("non-template %qD used as template", identifier);
9663           inform ("use %<%T::template %D%> to indicate that it is a template",
9664                   parser->scope, identifier);
9665           /* If parsing tentatively, find the location of the "<" token.  */
9666           if (cp_parser_simulate_error (parser))
9667             start = cp_lexer_token_position (parser->lexer, true);
9668           /* Parse the template arguments so that we can issue error
9669              messages about them.  */
9670           cp_lexer_consume_token (parser->lexer);
9671           cp_parser_enclosed_template_argument_list (parser);
9672           /* Skip tokens until we find a good place from which to
9673              continue parsing.  */
9674           cp_parser_skip_to_closing_parenthesis (parser,
9675                                                  /*recovering=*/true,
9676                                                  /*or_comma=*/true,
9677                                                  /*consume_paren=*/false);
9678           /* If parsing tentatively, permanently remove the
9679              template argument list.  That will prevent duplicate
9680              error messages from being issued about the missing
9681              "template" keyword.  */
9682           if (start)
9683             cp_lexer_purge_tokens_after (parser->lexer, start);
9684           if (is_identifier)
9685             *is_identifier = true;
9686           return identifier;
9687         }
9688
9689       /* If the "template" keyword is present, then there is generally
9690          no point in doing name-lookup, so we just return IDENTIFIER.
9691          But, if the qualifying scope is non-dependent then we can
9692          (and must) do name-lookup normally.  */
9693       if (template_keyword_p
9694           && (!parser->scope
9695               || (TYPE_P (parser->scope)
9696                   && dependent_type_p (parser->scope))))
9697         return identifier;
9698     }
9699
9700   /* Look up the name.  */
9701   decl = cp_parser_lookup_name (parser, identifier,
9702                                 none_type,
9703                                 /*is_template=*/false,
9704                                 /*is_namespace=*/false,
9705                                 check_dependency_p,
9706                                 /*ambiguous_decls=*/NULL);
9707   decl = maybe_get_template_decl_from_type_decl (decl);
9708
9709   /* If DECL is a template, then the name was a template-name.  */
9710   if (TREE_CODE (decl) == TEMPLATE_DECL)
9711     ;
9712   else
9713     {
9714       tree fn = NULL_TREE;
9715
9716       /* The standard does not explicitly indicate whether a name that
9717          names a set of overloaded declarations, some of which are
9718          templates, is a template-name.  However, such a name should
9719          be a template-name; otherwise, there is no way to form a
9720          template-id for the overloaded templates.  */
9721       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
9722       if (TREE_CODE (fns) == OVERLOAD)
9723         for (fn = fns; fn; fn = OVL_NEXT (fn))
9724           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
9725             break;
9726
9727       if (!fn)
9728         {
9729           /* The name does not name a template.  */
9730           cp_parser_error (parser, "expected template-name");
9731           return error_mark_node;
9732         }
9733     }
9734
9735   /* If DECL is dependent, and refers to a function, then just return
9736      its name; we will look it up again during template instantiation.  */
9737   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
9738     {
9739       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
9740       if (TYPE_P (scope) && dependent_type_p (scope))
9741         return identifier;
9742     }
9743
9744   return decl;
9745 }
9746
9747 /* Parse a template-argument-list.
9748
9749    template-argument-list:
9750      template-argument ... [opt]
9751      template-argument-list , template-argument ... [opt]
9752
9753    Returns a TREE_VEC containing the arguments.  */
9754
9755 static tree
9756 cp_parser_template_argument_list (cp_parser* parser)
9757 {
9758   tree fixed_args[10];
9759   unsigned n_args = 0;
9760   unsigned alloced = 10;
9761   tree *arg_ary = fixed_args;
9762   tree vec;
9763   bool saved_in_template_argument_list_p;
9764   bool saved_ice_p;
9765   bool saved_non_ice_p;
9766
9767   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
9768   parser->in_template_argument_list_p = true;
9769   /* Even if the template-id appears in an integral
9770      constant-expression, the contents of the argument list do
9771      not.  */
9772   saved_ice_p = parser->integral_constant_expression_p;
9773   parser->integral_constant_expression_p = false;
9774   saved_non_ice_p = parser->non_integral_constant_expression_p;
9775   parser->non_integral_constant_expression_p = false;
9776   /* Parse the arguments.  */
9777   do
9778     {
9779       tree argument;
9780
9781       if (n_args)
9782         /* Consume the comma.  */
9783         cp_lexer_consume_token (parser->lexer);
9784
9785       /* Parse the template-argument.  */
9786       argument = cp_parser_template_argument (parser);
9787
9788       /* If the next token is an ellipsis, we're expanding a template
9789          argument pack. */
9790       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9791         {
9792           /* Consume the `...' token. */
9793           cp_lexer_consume_token (parser->lexer);
9794
9795           /* Make the argument into a TYPE_PACK_EXPANSION or
9796              EXPR_PACK_EXPANSION. */
9797           argument = make_pack_expansion (argument);
9798         }
9799
9800       if (n_args == alloced)
9801         {
9802           alloced *= 2;
9803
9804           if (arg_ary == fixed_args)
9805             {
9806               arg_ary = XNEWVEC (tree, alloced);
9807               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
9808             }
9809           else
9810             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
9811         }
9812       arg_ary[n_args++] = argument;
9813     }
9814   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
9815
9816   vec = make_tree_vec (n_args);
9817
9818   while (n_args--)
9819     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
9820
9821   if (arg_ary != fixed_args)
9822     free (arg_ary);
9823   parser->non_integral_constant_expression_p = saved_non_ice_p;
9824   parser->integral_constant_expression_p = saved_ice_p;
9825   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
9826   return vec;
9827 }
9828
9829 /* Parse a template-argument.
9830
9831    template-argument:
9832      assignment-expression
9833      type-id
9834      id-expression
9835
9836    The representation is that of an assignment-expression, type-id, or
9837    id-expression -- except that the qualified id-expression is
9838    evaluated, so that the value returned is either a DECL or an
9839    OVERLOAD.
9840
9841    Although the standard says "assignment-expression", it forbids
9842    throw-expressions or assignments in the template argument.
9843    Therefore, we use "conditional-expression" instead.  */
9844
9845 static tree
9846 cp_parser_template_argument (cp_parser* parser)
9847 {
9848   tree argument;
9849   bool template_p;
9850   bool address_p;
9851   bool maybe_type_id = false;
9852   cp_token *token;
9853   cp_id_kind idk;
9854
9855   /* There's really no way to know what we're looking at, so we just
9856      try each alternative in order.
9857
9858        [temp.arg]
9859
9860        In a template-argument, an ambiguity between a type-id and an
9861        expression is resolved to a type-id, regardless of the form of
9862        the corresponding template-parameter.
9863
9864      Therefore, we try a type-id first.  */
9865   cp_parser_parse_tentatively (parser);
9866   argument = cp_parser_type_id (parser);
9867   /* If there was no error parsing the type-id but the next token is a '>>',
9868      we probably found a typo for '> >'. But there are type-id which are
9869      also valid expressions. For instance:
9870
9871      struct X { int operator >> (int); };
9872      template <int V> struct Foo {};
9873      Foo<X () >> 5> r;
9874
9875      Here 'X()' is a valid type-id of a function type, but the user just
9876      wanted to write the expression "X() >> 5". Thus, we remember that we
9877      found a valid type-id, but we still try to parse the argument as an
9878      expression to see what happens.  */
9879   if (!cp_parser_error_occurred (parser)
9880       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
9881     {
9882       maybe_type_id = true;
9883       cp_parser_abort_tentative_parse (parser);
9884     }
9885   else
9886     {
9887       /* If the next token isn't a `,' or a `>', then this argument wasn't
9888       really finished. This means that the argument is not a valid
9889       type-id.  */
9890       if (!cp_parser_next_token_ends_template_argument_p (parser))
9891         cp_parser_error (parser, "expected template-argument");
9892       /* If that worked, we're done.  */
9893       if (cp_parser_parse_definitely (parser))
9894         return argument;
9895     }
9896   /* We're still not sure what the argument will be.  */
9897   cp_parser_parse_tentatively (parser);
9898   /* Try a template.  */
9899   argument = cp_parser_id_expression (parser,
9900                                       /*template_keyword_p=*/false,
9901                                       /*check_dependency_p=*/true,
9902                                       &template_p,
9903                                       /*declarator_p=*/false,
9904                                       /*optional_p=*/false);
9905   /* If the next token isn't a `,' or a `>', then this argument wasn't
9906      really finished.  */
9907   if (!cp_parser_next_token_ends_template_argument_p (parser))
9908     cp_parser_error (parser, "expected template-argument");
9909   if (!cp_parser_error_occurred (parser))
9910     {
9911       /* Figure out what is being referred to.  If the id-expression
9912          was for a class template specialization, then we will have a
9913          TYPE_DECL at this point.  There is no need to do name lookup
9914          at this point in that case.  */
9915       if (TREE_CODE (argument) != TYPE_DECL)
9916         argument = cp_parser_lookup_name (parser, argument,
9917                                           none_type,
9918                                           /*is_template=*/template_p,
9919                                           /*is_namespace=*/false,
9920                                           /*check_dependency=*/true,
9921                                           /*ambiguous_decls=*/NULL);
9922       if (TREE_CODE (argument) != TEMPLATE_DECL
9923           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
9924         cp_parser_error (parser, "expected template-name");
9925     }
9926   if (cp_parser_parse_definitely (parser))
9927     return argument;
9928   /* It must be a non-type argument.  There permitted cases are given
9929      in [temp.arg.nontype]:
9930
9931      -- an integral constant-expression of integral or enumeration
9932         type; or
9933
9934      -- the name of a non-type template-parameter; or
9935
9936      -- the name of an object or function with external linkage...
9937
9938      -- the address of an object or function with external linkage...
9939
9940      -- a pointer to member...  */
9941   /* Look for a non-type template parameter.  */
9942   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9943     {
9944       cp_parser_parse_tentatively (parser);
9945       argument = cp_parser_primary_expression (parser,
9946                                                /*adress_p=*/false,
9947                                                /*cast_p=*/false,
9948                                                /*template_arg_p=*/true,
9949                                                &idk);
9950       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
9951           || !cp_parser_next_token_ends_template_argument_p (parser))
9952         cp_parser_simulate_error (parser);
9953       if (cp_parser_parse_definitely (parser))
9954         return argument;
9955     }
9956
9957   /* If the next token is "&", the argument must be the address of an
9958      object or function with external linkage.  */
9959   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
9960   if (address_p)
9961     cp_lexer_consume_token (parser->lexer);
9962   /* See if we might have an id-expression.  */
9963   token = cp_lexer_peek_token (parser->lexer);
9964   if (token->type == CPP_NAME
9965       || token->keyword == RID_OPERATOR
9966       || token->type == CPP_SCOPE
9967       || token->type == CPP_TEMPLATE_ID
9968       || token->type == CPP_NESTED_NAME_SPECIFIER)
9969     {
9970       cp_parser_parse_tentatively (parser);
9971       argument = cp_parser_primary_expression (parser,
9972                                                address_p,
9973                                                /*cast_p=*/false,
9974                                                /*template_arg_p=*/true,
9975                                                &idk);
9976       if (cp_parser_error_occurred (parser)
9977           || !cp_parser_next_token_ends_template_argument_p (parser))
9978         cp_parser_abort_tentative_parse (parser);
9979       else
9980         {
9981           if (TREE_CODE (argument) == INDIRECT_REF)
9982             {
9983               gcc_assert (REFERENCE_REF_P (argument));
9984               argument = TREE_OPERAND (argument, 0);
9985             }
9986
9987           if (TREE_CODE (argument) == VAR_DECL)
9988             {
9989               /* A variable without external linkage might still be a
9990                  valid constant-expression, so no error is issued here
9991                  if the external-linkage check fails.  */
9992               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (argument))
9993                 cp_parser_simulate_error (parser);
9994             }
9995           else if (is_overloaded_fn (argument))
9996             /* All overloaded functions are allowed; if the external
9997                linkage test does not pass, an error will be issued
9998                later.  */
9999             ;
10000           else if (address_p
10001                    && (TREE_CODE (argument) == OFFSET_REF
10002                        || TREE_CODE (argument) == SCOPE_REF))
10003             /* A pointer-to-member.  */
10004             ;
10005           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
10006             ;
10007           else
10008             cp_parser_simulate_error (parser);
10009
10010           if (cp_parser_parse_definitely (parser))
10011             {
10012               if (address_p)
10013                 argument = build_x_unary_op (ADDR_EXPR, argument);
10014               return argument;
10015             }
10016         }
10017     }
10018   /* If the argument started with "&", there are no other valid
10019      alternatives at this point.  */
10020   if (address_p)
10021     {
10022       cp_parser_error (parser, "invalid non-type template argument");
10023       return error_mark_node;
10024     }
10025
10026   /* If the argument wasn't successfully parsed as a type-id followed
10027      by '>>', the argument can only be a constant expression now.
10028      Otherwise, we try parsing the constant-expression tentatively,
10029      because the argument could really be a type-id.  */
10030   if (maybe_type_id)
10031     cp_parser_parse_tentatively (parser);
10032   argument = cp_parser_constant_expression (parser,
10033                                             /*allow_non_constant_p=*/false,
10034                                             /*non_constant_p=*/NULL);
10035   argument = fold_non_dependent_expr (argument);
10036   if (!maybe_type_id)
10037     return argument;
10038   if (!cp_parser_next_token_ends_template_argument_p (parser))
10039     cp_parser_error (parser, "expected template-argument");
10040   if (cp_parser_parse_definitely (parser))
10041     return argument;
10042   /* We did our best to parse the argument as a non type-id, but that
10043      was the only alternative that matched (albeit with a '>' after
10044      it). We can assume it's just a typo from the user, and a
10045      diagnostic will then be issued.  */
10046   return cp_parser_type_id (parser);
10047 }
10048
10049 /* Parse an explicit-instantiation.
10050
10051    explicit-instantiation:
10052      template declaration
10053
10054    Although the standard says `declaration', what it really means is:
10055
10056    explicit-instantiation:
10057      template decl-specifier-seq [opt] declarator [opt] ;
10058
10059    Things like `template int S<int>::i = 5, int S<double>::j;' are not
10060    supposed to be allowed.  A defect report has been filed about this
10061    issue.
10062
10063    GNU Extension:
10064
10065    explicit-instantiation:
10066      storage-class-specifier template
10067        decl-specifier-seq [opt] declarator [opt] ;
10068      function-specifier template
10069        decl-specifier-seq [opt] declarator [opt] ;  */
10070
10071 static void
10072 cp_parser_explicit_instantiation (cp_parser* parser)
10073 {
10074   int declares_class_or_enum;
10075   cp_decl_specifier_seq decl_specifiers;
10076   tree extension_specifier = NULL_TREE;
10077
10078   /* Look for an (optional) storage-class-specifier or
10079      function-specifier.  */
10080   if (cp_parser_allow_gnu_extensions_p (parser))
10081     {
10082       extension_specifier
10083         = cp_parser_storage_class_specifier_opt (parser);
10084       if (!extension_specifier)
10085         extension_specifier
10086           = cp_parser_function_specifier_opt (parser,
10087                                               /*decl_specs=*/NULL);
10088     }
10089
10090   /* Look for the `template' keyword.  */
10091   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
10092   /* Let the front end know that we are processing an explicit
10093      instantiation.  */
10094   begin_explicit_instantiation ();
10095   /* [temp.explicit] says that we are supposed to ignore access
10096      control while processing explicit instantiation directives.  */
10097   push_deferring_access_checks (dk_no_check);
10098   /* Parse a decl-specifier-seq.  */
10099   cp_parser_decl_specifier_seq (parser,
10100                                 CP_PARSER_FLAGS_OPTIONAL,
10101                                 &decl_specifiers,
10102                                 &declares_class_or_enum);
10103   /* If there was exactly one decl-specifier, and it declared a class,
10104      and there's no declarator, then we have an explicit type
10105      instantiation.  */
10106   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
10107     {
10108       tree type;
10109
10110       type = check_tag_decl (&decl_specifiers);
10111       /* Turn access control back on for names used during
10112          template instantiation.  */
10113       pop_deferring_access_checks ();
10114       if (type)
10115         do_type_instantiation (type, extension_specifier,
10116                                /*complain=*/tf_error);
10117     }
10118   else
10119     {
10120       cp_declarator *declarator;
10121       tree decl;
10122
10123       /* Parse the declarator.  */
10124       declarator
10125         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10126                                 /*ctor_dtor_or_conv_p=*/NULL,
10127                                 /*parenthesized_p=*/NULL,
10128                                 /*member_p=*/false);
10129       if (declares_class_or_enum & 2)
10130         cp_parser_check_for_definition_in_return_type (declarator,
10131                                                        decl_specifiers.type);
10132       if (declarator != cp_error_declarator)
10133         {
10134           decl = grokdeclarator (declarator, &decl_specifiers,
10135                                  NORMAL, 0, &decl_specifiers.attributes);
10136           /* Turn access control back on for names used during
10137              template instantiation.  */
10138           pop_deferring_access_checks ();
10139           /* Do the explicit instantiation.  */
10140           do_decl_instantiation (decl, extension_specifier);
10141         }
10142       else
10143         {
10144           pop_deferring_access_checks ();
10145           /* Skip the body of the explicit instantiation.  */
10146           cp_parser_skip_to_end_of_statement (parser);
10147         }
10148     }
10149   /* We're done with the instantiation.  */
10150   end_explicit_instantiation ();
10151
10152   cp_parser_consume_semicolon_at_end_of_statement (parser);
10153 }
10154
10155 /* Parse an explicit-specialization.
10156
10157    explicit-specialization:
10158      template < > declaration
10159
10160    Although the standard says `declaration', what it really means is:
10161
10162    explicit-specialization:
10163      template <> decl-specifier [opt] init-declarator [opt] ;
10164      template <> function-definition
10165      template <> explicit-specialization
10166      template <> template-declaration  */
10167
10168 static void
10169 cp_parser_explicit_specialization (cp_parser* parser)
10170 {
10171   bool need_lang_pop;
10172   /* Look for the `template' keyword.  */
10173   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
10174   /* Look for the `<'.  */
10175   cp_parser_require (parser, CPP_LESS, "`<'");
10176   /* Look for the `>'.  */
10177   cp_parser_require (parser, CPP_GREATER, "`>'");
10178   /* We have processed another parameter list.  */
10179   ++parser->num_template_parameter_lists;
10180   /* [temp]
10181
10182      A template ... explicit specialization ... shall not have C
10183      linkage.  */
10184   if (current_lang_name == lang_name_c)
10185     {
10186       error ("template specialization with C linkage");
10187       /* Give it C++ linkage to avoid confusing other parts of the
10188          front end.  */
10189       push_lang_context (lang_name_cplusplus);
10190       need_lang_pop = true;
10191     }
10192   else
10193     need_lang_pop = false;
10194   /* Let the front end know that we are beginning a specialization.  */
10195   if (!begin_specialization ())
10196     {
10197       end_specialization ();
10198       cp_parser_skip_to_end_of_block_or_statement (parser);
10199       return;
10200     }
10201
10202   /* If the next keyword is `template', we need to figure out whether
10203      or not we're looking a template-declaration.  */
10204   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
10205     {
10206       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
10207           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
10208         cp_parser_template_declaration_after_export (parser,
10209                                                      /*member_p=*/false);
10210       else
10211         cp_parser_explicit_specialization (parser);
10212     }
10213   else
10214     /* Parse the dependent declaration.  */
10215     cp_parser_single_declaration (parser,
10216                                   /*checks=*/NULL,
10217                                   /*member_p=*/false,
10218                                   /*friend_p=*/NULL);
10219   /* We're done with the specialization.  */
10220   end_specialization ();
10221   /* For the erroneous case of a template with C linkage, we pushed an
10222      implicit C++ linkage scope; exit that scope now.  */
10223   if (need_lang_pop)
10224     pop_lang_context ();
10225   /* We're done with this parameter list.  */
10226   --parser->num_template_parameter_lists;
10227 }
10228
10229 /* Parse a type-specifier.
10230
10231    type-specifier:
10232      simple-type-specifier
10233      class-specifier
10234      enum-specifier
10235      elaborated-type-specifier
10236      cv-qualifier
10237
10238    GNU Extension:
10239
10240    type-specifier:
10241      __complex__
10242
10243    Returns a representation of the type-specifier.  For a
10244    class-specifier, enum-specifier, or elaborated-type-specifier, a
10245    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
10246
10247    The parser flags FLAGS is used to control type-specifier parsing.
10248
10249    If IS_DECLARATION is TRUE, then this type-specifier is appearing
10250    in a decl-specifier-seq.
10251
10252    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
10253    class-specifier, enum-specifier, or elaborated-type-specifier, then
10254    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
10255    if a type is declared; 2 if it is defined.  Otherwise, it is set to
10256    zero.
10257
10258    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
10259    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
10260    is set to FALSE.  */
10261
10262 static tree
10263 cp_parser_type_specifier (cp_parser* parser,
10264                           cp_parser_flags flags,
10265                           cp_decl_specifier_seq *decl_specs,
10266                           bool is_declaration,
10267                           int* declares_class_or_enum,
10268                           bool* is_cv_qualifier)
10269 {
10270   tree type_spec = NULL_TREE;
10271   cp_token *token;
10272   enum rid keyword;
10273   cp_decl_spec ds = ds_last;
10274
10275   /* Assume this type-specifier does not declare a new type.  */
10276   if (declares_class_or_enum)
10277     *declares_class_or_enum = 0;
10278   /* And that it does not specify a cv-qualifier.  */
10279   if (is_cv_qualifier)
10280     *is_cv_qualifier = false;
10281   /* Peek at the next token.  */
10282   token = cp_lexer_peek_token (parser->lexer);
10283
10284   /* If we're looking at a keyword, we can use that to guide the
10285      production we choose.  */
10286   keyword = token->keyword;
10287   switch (keyword)
10288     {
10289     case RID_ENUM:
10290       /* Look for the enum-specifier.  */
10291       type_spec = cp_parser_enum_specifier (parser);
10292       /* If that worked, we're done.  */
10293       if (type_spec)
10294         {
10295           if (declares_class_or_enum)
10296             *declares_class_or_enum = 2;
10297           if (decl_specs)
10298             cp_parser_set_decl_spec_type (decl_specs,
10299                                           type_spec,
10300                                           /*user_defined_p=*/true);
10301           return type_spec;
10302         }
10303       else
10304         goto elaborated_type_specifier;
10305
10306       /* Any of these indicate either a class-specifier, or an
10307          elaborated-type-specifier.  */
10308     case RID_CLASS:
10309     case RID_STRUCT:
10310     case RID_UNION:
10311       /* Parse tentatively so that we can back up if we don't find a
10312          class-specifier.  */
10313       cp_parser_parse_tentatively (parser);
10314       /* Look for the class-specifier.  */
10315       type_spec = cp_parser_class_specifier (parser);
10316       /* If that worked, we're done.  */
10317       if (cp_parser_parse_definitely (parser))
10318         {
10319           if (declares_class_or_enum)
10320             *declares_class_or_enum = 2;
10321           if (decl_specs)
10322             cp_parser_set_decl_spec_type (decl_specs,
10323                                           type_spec,
10324                                           /*user_defined_p=*/true);
10325           return type_spec;
10326         }
10327
10328       /* Fall through.  */
10329     elaborated_type_specifier:
10330       /* We're declaring (not defining) a class or enum.  */
10331       if (declares_class_or_enum)
10332         *declares_class_or_enum = 1;
10333
10334       /* Fall through.  */
10335     case RID_TYPENAME:
10336       /* Look for an elaborated-type-specifier.  */
10337       type_spec
10338         = (cp_parser_elaborated_type_specifier
10339            (parser,
10340             decl_specs && decl_specs->specs[(int) ds_friend],
10341             is_declaration));
10342       if (decl_specs)
10343         cp_parser_set_decl_spec_type (decl_specs,
10344                                       type_spec,
10345                                       /*user_defined_p=*/true);
10346       return type_spec;
10347
10348     case RID_CONST:
10349       ds = ds_const;
10350       if (is_cv_qualifier)
10351         *is_cv_qualifier = true;
10352       break;
10353
10354     case RID_VOLATILE:
10355       ds = ds_volatile;
10356       if (is_cv_qualifier)
10357         *is_cv_qualifier = true;
10358       break;
10359
10360     case RID_RESTRICT:
10361       ds = ds_restrict;
10362       if (is_cv_qualifier)
10363         *is_cv_qualifier = true;
10364       break;
10365
10366     case RID_COMPLEX:
10367       /* The `__complex__' keyword is a GNU extension.  */
10368       ds = ds_complex;
10369       break;
10370
10371     default:
10372       break;
10373     }
10374
10375   /* Handle simple keywords.  */
10376   if (ds != ds_last)
10377     {
10378       if (decl_specs)
10379         {
10380           ++decl_specs->specs[(int)ds];
10381           decl_specs->any_specifiers_p = true;
10382         }
10383       return cp_lexer_consume_token (parser->lexer)->u.value;
10384     }
10385
10386   /* If we do not already have a type-specifier, assume we are looking
10387      at a simple-type-specifier.  */
10388   type_spec = cp_parser_simple_type_specifier (parser,
10389                                                decl_specs,
10390                                                flags);
10391
10392   /* If we didn't find a type-specifier, and a type-specifier was not
10393      optional in this context, issue an error message.  */
10394   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
10395     {
10396       cp_parser_error (parser, "expected type specifier");
10397       return error_mark_node;
10398     }
10399
10400   return type_spec;
10401 }
10402
10403 /* Parse a simple-type-specifier.
10404
10405    simple-type-specifier:
10406      :: [opt] nested-name-specifier [opt] type-name
10407      :: [opt] nested-name-specifier template template-id
10408      char
10409      wchar_t
10410      bool
10411      short
10412      int
10413      long
10414      signed
10415      unsigned
10416      float
10417      double
10418      void
10419
10420    GNU Extension:
10421
10422    simple-type-specifier:
10423      __typeof__ unary-expression
10424      __typeof__ ( type-id )
10425
10426    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
10427    appropriately updated.  */
10428
10429 static tree
10430 cp_parser_simple_type_specifier (cp_parser* parser,
10431                                  cp_decl_specifier_seq *decl_specs,
10432                                  cp_parser_flags flags)
10433 {
10434   tree type = NULL_TREE;
10435   cp_token *token;
10436
10437   /* Peek at the next token.  */
10438   token = cp_lexer_peek_token (parser->lexer);
10439
10440   /* If we're looking at a keyword, things are easy.  */
10441   switch (token->keyword)
10442     {
10443     case RID_CHAR:
10444       if (decl_specs)
10445         decl_specs->explicit_char_p = true;
10446       type = char_type_node;
10447       break;
10448     case RID_WCHAR:
10449       type = wchar_type_node;
10450       break;
10451     case RID_BOOL:
10452       type = boolean_type_node;
10453       break;
10454     case RID_SHORT:
10455       if (decl_specs)
10456         ++decl_specs->specs[(int) ds_short];
10457       type = short_integer_type_node;
10458       break;
10459     case RID_INT:
10460       if (decl_specs)
10461         decl_specs->explicit_int_p = true;
10462       type = integer_type_node;
10463       break;
10464     case RID_LONG:
10465       if (decl_specs)
10466         ++decl_specs->specs[(int) ds_long];
10467       type = long_integer_type_node;
10468       break;
10469     case RID_SIGNED:
10470       if (decl_specs)
10471         ++decl_specs->specs[(int) ds_signed];
10472       type = integer_type_node;
10473       break;
10474     case RID_UNSIGNED:
10475       if (decl_specs)
10476         ++decl_specs->specs[(int) ds_unsigned];
10477       type = unsigned_type_node;
10478       break;
10479     case RID_FLOAT:
10480       type = float_type_node;
10481       break;
10482     case RID_DOUBLE:
10483       type = double_type_node;
10484       break;
10485     case RID_VOID:
10486       type = void_type_node;
10487       break;
10488
10489     case RID_TYPEOF:
10490       /* Consume the `typeof' token.  */
10491       cp_lexer_consume_token (parser->lexer);
10492       /* Parse the operand to `typeof'.  */
10493       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
10494       /* If it is not already a TYPE, take its type.  */
10495       if (!TYPE_P (type))
10496         type = finish_typeof (type);
10497
10498       if (decl_specs)
10499         cp_parser_set_decl_spec_type (decl_specs, type,
10500                                       /*user_defined_p=*/true);
10501
10502       return type;
10503
10504     default:
10505       break;
10506     }
10507
10508   /* If the type-specifier was for a built-in type, we're done.  */
10509   if (type)
10510     {
10511       tree id;
10512
10513       /* Record the type.  */
10514       if (decl_specs
10515           && (token->keyword != RID_SIGNED
10516               && token->keyword != RID_UNSIGNED
10517               && token->keyword != RID_SHORT
10518               && token->keyword != RID_LONG))
10519         cp_parser_set_decl_spec_type (decl_specs,
10520                                       type,
10521                                       /*user_defined=*/false);
10522       if (decl_specs)
10523         decl_specs->any_specifiers_p = true;
10524
10525       /* Consume the token.  */
10526       id = cp_lexer_consume_token (parser->lexer)->u.value;
10527
10528       /* There is no valid C++ program where a non-template type is
10529          followed by a "<".  That usually indicates that the user thought
10530          that the type was a template.  */
10531       cp_parser_check_for_invalid_template_id (parser, type);
10532
10533       return TYPE_NAME (type);
10534     }
10535
10536   /* The type-specifier must be a user-defined type.  */
10537   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
10538     {
10539       bool qualified_p;
10540       bool global_p;
10541
10542       /* Don't gobble tokens or issue error messages if this is an
10543          optional type-specifier.  */
10544       if (flags & CP_PARSER_FLAGS_OPTIONAL)
10545         cp_parser_parse_tentatively (parser);
10546
10547       /* Look for the optional `::' operator.  */
10548       global_p
10549         = (cp_parser_global_scope_opt (parser,
10550                                        /*current_scope_valid_p=*/false)
10551            != NULL_TREE);
10552       /* Look for the nested-name specifier.  */
10553       qualified_p
10554         = (cp_parser_nested_name_specifier_opt (parser,
10555                                                 /*typename_keyword_p=*/false,
10556                                                 /*check_dependency_p=*/true,
10557                                                 /*type_p=*/false,
10558                                                 /*is_declaration=*/false)
10559            != NULL_TREE);
10560       /* If we have seen a nested-name-specifier, and the next token
10561          is `template', then we are using the template-id production.  */
10562       if (parser->scope
10563           && cp_parser_optional_template_keyword (parser))
10564         {
10565           /* Look for the template-id.  */
10566           type = cp_parser_template_id (parser,
10567                                         /*template_keyword_p=*/true,
10568                                         /*check_dependency_p=*/true,
10569                                         /*is_declaration=*/false);
10570           /* If the template-id did not name a type, we are out of
10571              luck.  */
10572           if (TREE_CODE (type) != TYPE_DECL)
10573             {
10574               cp_parser_error (parser, "expected template-id for type");
10575               type = NULL_TREE;
10576             }
10577         }
10578       /* Otherwise, look for a type-name.  */
10579       else
10580         type = cp_parser_type_name (parser);
10581       /* Keep track of all name-lookups performed in class scopes.  */
10582       if (type
10583           && !global_p
10584           && !qualified_p
10585           && TREE_CODE (type) == TYPE_DECL
10586           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
10587         maybe_note_name_used_in_class (DECL_NAME (type), type);
10588       /* If it didn't work out, we don't have a TYPE.  */
10589       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
10590           && !cp_parser_parse_definitely (parser))
10591         type = NULL_TREE;
10592       if (type && decl_specs)
10593         cp_parser_set_decl_spec_type (decl_specs, type,
10594                                       /*user_defined=*/true);
10595     }
10596
10597   /* If we didn't get a type-name, issue an error message.  */
10598   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
10599     {
10600       cp_parser_error (parser, "expected type-name");
10601       return error_mark_node;
10602     }
10603
10604   /* There is no valid C++ program where a non-template type is
10605      followed by a "<".  That usually indicates that the user thought
10606      that the type was a template.  */
10607   if (type && type != error_mark_node)
10608     {
10609       /* As a last-ditch effort, see if TYPE is an Objective-C type.
10610          If it is, then the '<'...'>' enclose protocol names rather than
10611          template arguments, and so everything is fine.  */
10612       if (c_dialect_objc ()
10613           && (objc_is_id (type) || objc_is_class_name (type)))
10614         {
10615           tree protos = cp_parser_objc_protocol_refs_opt (parser);
10616           tree qual_type = objc_get_protocol_qualified_type (type, protos);
10617
10618           /* Clobber the "unqualified" type previously entered into
10619              DECL_SPECS with the new, improved protocol-qualified version.  */
10620           if (decl_specs)
10621             decl_specs->type = qual_type;
10622
10623           return qual_type;
10624         }
10625
10626       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
10627     }
10628
10629   return type;
10630 }
10631
10632 /* Parse a type-name.
10633
10634    type-name:
10635      class-name
10636      enum-name
10637      typedef-name
10638
10639    enum-name:
10640      identifier
10641
10642    typedef-name:
10643      identifier
10644
10645    Returns a TYPE_DECL for the type.  */
10646
10647 static tree
10648 cp_parser_type_name (cp_parser* parser)
10649 {
10650   tree type_decl;
10651   tree identifier;
10652
10653   /* We can't know yet whether it is a class-name or not.  */
10654   cp_parser_parse_tentatively (parser);
10655   /* Try a class-name.  */
10656   type_decl = cp_parser_class_name (parser,
10657                                     /*typename_keyword_p=*/false,
10658                                     /*template_keyword_p=*/false,
10659                                     none_type,
10660                                     /*check_dependency_p=*/true,
10661                                     /*class_head_p=*/false,
10662                                     /*is_declaration=*/false);
10663   /* If it's not a class-name, keep looking.  */
10664   if (!cp_parser_parse_definitely (parser))
10665     {
10666       /* It must be a typedef-name or an enum-name.  */
10667       identifier = cp_parser_identifier (parser);
10668       if (identifier == error_mark_node)
10669         return error_mark_node;
10670
10671       /* Look up the type-name.  */
10672       type_decl = cp_parser_lookup_name_simple (parser, identifier);
10673
10674       if (TREE_CODE (type_decl) != TYPE_DECL
10675           && (objc_is_id (identifier) || objc_is_class_name (identifier)))
10676         {
10677           /* See if this is an Objective-C type.  */
10678           tree protos = cp_parser_objc_protocol_refs_opt (parser);
10679           tree type = objc_get_protocol_qualified_type (identifier, protos);
10680           if (type)
10681             type_decl = TYPE_NAME (type);
10682         }
10683
10684       /* Issue an error if we did not find a type-name.  */
10685       if (TREE_CODE (type_decl) != TYPE_DECL)
10686         {
10687           if (!cp_parser_simulate_error (parser))
10688             cp_parser_name_lookup_error (parser, identifier, type_decl,
10689                                          "is not a type");
10690           type_decl = error_mark_node;
10691         }
10692       /* Remember that the name was used in the definition of the
10693          current class so that we can check later to see if the
10694          meaning would have been different after the class was
10695          entirely defined.  */
10696       else if (type_decl != error_mark_node
10697                && !parser->scope)
10698         maybe_note_name_used_in_class (identifier, type_decl);
10699     }
10700
10701   return type_decl;
10702 }
10703
10704
10705 /* Parse an elaborated-type-specifier.  Note that the grammar given
10706    here incorporates the resolution to DR68.
10707
10708    elaborated-type-specifier:
10709      class-key :: [opt] nested-name-specifier [opt] identifier
10710      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
10711      enum :: [opt] nested-name-specifier [opt] identifier
10712      typename :: [opt] nested-name-specifier identifier
10713      typename :: [opt] nested-name-specifier template [opt]
10714        template-id
10715
10716    GNU extension:
10717
10718    elaborated-type-specifier:
10719      class-key attributes :: [opt] nested-name-specifier [opt] identifier
10720      class-key attributes :: [opt] nested-name-specifier [opt]
10721                template [opt] template-id
10722      enum attributes :: [opt] nested-name-specifier [opt] identifier
10723
10724    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
10725    declared `friend'.  If IS_DECLARATION is TRUE, then this
10726    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
10727    something is being declared.
10728
10729    Returns the TYPE specified.  */
10730
10731 static tree
10732 cp_parser_elaborated_type_specifier (cp_parser* parser,
10733                                      bool is_friend,
10734                                      bool is_declaration)
10735 {
10736   enum tag_types tag_type;
10737   tree identifier;
10738   tree type = NULL_TREE;
10739   tree attributes = NULL_TREE;
10740
10741   /* See if we're looking at the `enum' keyword.  */
10742   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
10743     {
10744       /* Consume the `enum' token.  */
10745       cp_lexer_consume_token (parser->lexer);
10746       /* Remember that it's an enumeration type.  */
10747       tag_type = enum_type;
10748       /* Parse the attributes.  */
10749       attributes = cp_parser_attributes_opt (parser);
10750     }
10751   /* Or, it might be `typename'.  */
10752   else if (cp_lexer_next_token_is_keyword (parser->lexer,
10753                                            RID_TYPENAME))
10754     {
10755       /* Consume the `typename' token.  */
10756       cp_lexer_consume_token (parser->lexer);
10757       /* Remember that it's a `typename' type.  */
10758       tag_type = typename_type;
10759       /* The `typename' keyword is only allowed in templates.  */
10760       if (!processing_template_decl)
10761         pedwarn ("using %<typename%> outside of template");
10762     }
10763   /* Otherwise it must be a class-key.  */
10764   else
10765     {
10766       tag_type = cp_parser_class_key (parser);
10767       if (tag_type == none_type)
10768         return error_mark_node;
10769       /* Parse the attributes.  */
10770       attributes = cp_parser_attributes_opt (parser);
10771     }
10772
10773   /* Look for the `::' operator.  */
10774   cp_parser_global_scope_opt (parser,
10775                               /*current_scope_valid_p=*/false);
10776   /* Look for the nested-name-specifier.  */
10777   if (tag_type == typename_type)
10778     {
10779       if (!cp_parser_nested_name_specifier (parser,
10780                                            /*typename_keyword_p=*/true,
10781                                            /*check_dependency_p=*/true,
10782                                            /*type_p=*/true,
10783                                             is_declaration))
10784         return error_mark_node;
10785     }
10786   else
10787     /* Even though `typename' is not present, the proposed resolution
10788        to Core Issue 180 says that in `class A<T>::B', `B' should be
10789        considered a type-name, even if `A<T>' is dependent.  */
10790     cp_parser_nested_name_specifier_opt (parser,
10791                                          /*typename_keyword_p=*/true,
10792                                          /*check_dependency_p=*/true,
10793                                          /*type_p=*/true,
10794                                          is_declaration);
10795  /* For everything but enumeration types, consider a template-id.
10796     For an enumeration type, consider only a plain identifier.  */
10797   if (tag_type != enum_type)
10798     {
10799       bool template_p = false;
10800       tree decl;
10801
10802       /* Allow the `template' keyword.  */
10803       template_p = cp_parser_optional_template_keyword (parser);
10804       /* If we didn't see `template', we don't know if there's a
10805          template-id or not.  */
10806       if (!template_p)
10807         cp_parser_parse_tentatively (parser);
10808       /* Parse the template-id.  */
10809       decl = cp_parser_template_id (parser, template_p,
10810                                     /*check_dependency_p=*/true,
10811                                     is_declaration);
10812       /* If we didn't find a template-id, look for an ordinary
10813          identifier.  */
10814       if (!template_p && !cp_parser_parse_definitely (parser))
10815         ;
10816       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
10817          in effect, then we must assume that, upon instantiation, the
10818          template will correspond to a class.  */
10819       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
10820                && tag_type == typename_type)
10821         type = make_typename_type (parser->scope, decl,
10822                                    typename_type,
10823                                    /*complain=*/tf_error);
10824       else
10825         type = TREE_TYPE (decl);
10826     }
10827
10828   if (!type)
10829     {
10830       identifier = cp_parser_identifier (parser);
10831
10832       if (identifier == error_mark_node)
10833         {
10834           parser->scope = NULL_TREE;
10835           return error_mark_node;
10836         }
10837
10838       /* For a `typename', we needn't call xref_tag.  */
10839       if (tag_type == typename_type
10840           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
10841         return cp_parser_make_typename_type (parser, parser->scope,
10842                                              identifier);
10843       /* Look up a qualified name in the usual way.  */
10844       if (parser->scope)
10845         {
10846           tree decl;
10847
10848           decl = cp_parser_lookup_name (parser, identifier,
10849                                         tag_type,
10850                                         /*is_template=*/false,
10851                                         /*is_namespace=*/false,
10852                                         /*check_dependency=*/true,
10853                                         /*ambiguous_decls=*/NULL);
10854
10855           /* If we are parsing friend declaration, DECL may be a
10856              TEMPLATE_DECL tree node here.  However, we need to check
10857              whether this TEMPLATE_DECL results in valid code.  Consider
10858              the following example:
10859
10860                namespace N {
10861                  template <class T> class C {};
10862                }
10863                class X {
10864                  template <class T> friend class N::C; // #1, valid code
10865                };
10866                template <class T> class Y {
10867                  friend class N::C;                    // #2, invalid code
10868                };
10869
10870              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
10871              name lookup of `N::C'.  We see that friend declaration must
10872              be template for the code to be valid.  Note that
10873              processing_template_decl does not work here since it is
10874              always 1 for the above two cases.  */
10875
10876           decl = (cp_parser_maybe_treat_template_as_class
10877                   (decl, /*tag_name_p=*/is_friend
10878                          && parser->num_template_parameter_lists));
10879
10880           if (TREE_CODE (decl) != TYPE_DECL)
10881             {
10882               cp_parser_diagnose_invalid_type_name (parser,
10883                                                     parser->scope,
10884                                                     identifier);
10885               return error_mark_node;
10886             }
10887
10888           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
10889             {
10890               bool allow_template = (parser->num_template_parameter_lists
10891                                       || DECL_SELF_REFERENCE_P (decl));
10892               type = check_elaborated_type_specifier (tag_type, decl, 
10893                                                       allow_template);
10894
10895               if (type == error_mark_node)
10896                 return error_mark_node;
10897             }
10898
10899           type = TREE_TYPE (decl);
10900         }
10901       else
10902         {
10903           /* An elaborated-type-specifier sometimes introduces a new type and
10904              sometimes names an existing type.  Normally, the rule is that it
10905              introduces a new type only if there is not an existing type of
10906              the same name already in scope.  For example, given:
10907
10908                struct S {};
10909                void f() { struct S s; }
10910
10911              the `struct S' in the body of `f' is the same `struct S' as in
10912              the global scope; the existing definition is used.  However, if
10913              there were no global declaration, this would introduce a new
10914              local class named `S'.
10915
10916              An exception to this rule applies to the following code:
10917
10918                namespace N { struct S; }
10919
10920              Here, the elaborated-type-specifier names a new type
10921              unconditionally; even if there is already an `S' in the
10922              containing scope this declaration names a new type.
10923              This exception only applies if the elaborated-type-specifier
10924              forms the complete declaration:
10925
10926                [class.name]
10927
10928                A declaration consisting solely of `class-key identifier ;' is
10929                either a redeclaration of the name in the current scope or a
10930                forward declaration of the identifier as a class name.  It
10931                introduces the name into the current scope.
10932
10933              We are in this situation precisely when the next token is a `;'.
10934
10935              An exception to the exception is that a `friend' declaration does
10936              *not* name a new type; i.e., given:
10937
10938                struct S { friend struct T; };
10939
10940              `T' is not a new type in the scope of `S'.
10941
10942              Also, `new struct S' or `sizeof (struct S)' never results in the
10943              definition of a new type; a new type can only be declared in a
10944              declaration context.  */
10945
10946           tag_scope ts;
10947           bool template_p;
10948
10949           if (is_friend)
10950             /* Friends have special name lookup rules.  */
10951             ts = ts_within_enclosing_non_class;
10952           else if (is_declaration
10953                    && cp_lexer_next_token_is (parser->lexer,
10954                                               CPP_SEMICOLON))
10955             /* This is a `class-key identifier ;' */
10956             ts = ts_current;
10957           else
10958             ts = ts_global;
10959
10960           template_p =
10961             (parser->num_template_parameter_lists
10962              && (cp_parser_next_token_starts_class_definition_p (parser)
10963                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
10964           /* An unqualified name was used to reference this type, so
10965              there were no qualifying templates.  */
10966           if (!cp_parser_check_template_parameters (parser,
10967                                                     /*num_templates=*/0))
10968             return error_mark_node;
10969           type = xref_tag (tag_type, identifier, ts, template_p);
10970         }
10971     }
10972
10973   if (type == error_mark_node)
10974     return error_mark_node;
10975
10976   /* Allow attributes on forward declarations of classes.  */
10977   if (attributes)
10978     {
10979       if (TREE_CODE (type) == TYPENAME_TYPE)
10980         warning (OPT_Wattributes,
10981                  "attributes ignored on uninstantiated type");
10982       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
10983                && ! processing_explicit_instantiation)
10984         warning (OPT_Wattributes,
10985                  "attributes ignored on template instantiation");
10986       else if (is_declaration && cp_parser_declares_only_class_p (parser))
10987         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
10988       else
10989         warning (OPT_Wattributes,
10990                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
10991     }
10992
10993   if (tag_type != enum_type)
10994     cp_parser_check_class_key (tag_type, type);
10995
10996   /* A "<" cannot follow an elaborated type specifier.  If that
10997      happens, the user was probably trying to form a template-id.  */
10998   cp_parser_check_for_invalid_template_id (parser, type);
10999
11000   return type;
11001 }
11002
11003 /* Parse an enum-specifier.
11004
11005    enum-specifier:
11006      enum identifier [opt] { enumerator-list [opt] }
11007
11008    GNU Extensions:
11009      enum attributes[opt] identifier [opt] { enumerator-list [opt] }
11010        attributes[opt]
11011
11012    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
11013    if the token stream isn't an enum-specifier after all.  */
11014
11015 static tree
11016 cp_parser_enum_specifier (cp_parser* parser)
11017 {
11018   tree identifier;
11019   tree type;
11020   tree attributes;
11021
11022   /* Parse tentatively so that we can back up if we don't find a
11023      enum-specifier.  */
11024   cp_parser_parse_tentatively (parser);
11025
11026   /* Caller guarantees that the current token is 'enum', an identifier
11027      possibly follows, and the token after that is an opening brace.
11028      If we don't have an identifier, fabricate an anonymous name for
11029      the enumeration being defined.  */
11030   cp_lexer_consume_token (parser->lexer);
11031
11032   attributes = cp_parser_attributes_opt (parser);
11033
11034   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
11035     identifier = cp_parser_identifier (parser);
11036   else
11037     identifier = make_anon_name ();
11038
11039   /* Look for the `{' but don't consume it yet.  */
11040   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
11041     cp_parser_simulate_error (parser);
11042
11043   if (!cp_parser_parse_definitely (parser))
11044     return NULL_TREE;
11045
11046   /* Issue an error message if type-definitions are forbidden here.  */
11047   if (!cp_parser_check_type_definition (parser))
11048     type = error_mark_node;
11049   else
11050     /* Create the new type.  We do this before consuming the opening
11051        brace so the enum will be recorded as being on the line of its
11052        tag (or the 'enum' keyword, if there is no tag).  */
11053     type = start_enum (identifier);
11054   
11055   /* Consume the opening brace.  */
11056   cp_lexer_consume_token (parser->lexer);
11057
11058   if (type == error_mark_node)
11059     {
11060       cp_parser_skip_to_end_of_block_or_statement (parser);
11061       return error_mark_node;
11062     }
11063
11064   /* If the next token is not '}', then there are some enumerators.  */
11065   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
11066     cp_parser_enumerator_list (parser, type);
11067
11068   /* Consume the final '}'.  */
11069   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
11070
11071   /* Look for trailing attributes to apply to this enumeration, and
11072      apply them if appropriate.  */
11073   if (cp_parser_allow_gnu_extensions_p (parser))
11074     {
11075       tree trailing_attr = cp_parser_attributes_opt (parser);
11076       cplus_decl_attributes (&type,
11077                              trailing_attr,
11078                              (int) ATTR_FLAG_TYPE_IN_PLACE);
11079     }
11080
11081   /* Finish up the enumeration.  */
11082   finish_enum (type);
11083
11084   return type;
11085 }
11086
11087 /* Parse an enumerator-list.  The enumerators all have the indicated
11088    TYPE.
11089
11090    enumerator-list:
11091      enumerator-definition
11092      enumerator-list , enumerator-definition  */
11093
11094 static void
11095 cp_parser_enumerator_list (cp_parser* parser, tree type)
11096 {
11097   while (true)
11098     {
11099       /* Parse an enumerator-definition.  */
11100       cp_parser_enumerator_definition (parser, type);
11101
11102       /* If the next token is not a ',', we've reached the end of
11103          the list.  */
11104       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11105         break;
11106       /* Otherwise, consume the `,' and keep going.  */
11107       cp_lexer_consume_token (parser->lexer);
11108       /* If the next token is a `}', there is a trailing comma.  */
11109       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
11110         {
11111           if (pedantic && !in_system_header)
11112             pedwarn ("comma at end of enumerator list");
11113           break;
11114         }
11115     }
11116 }
11117
11118 /* Parse an enumerator-definition.  The enumerator has the indicated
11119    TYPE.
11120
11121    enumerator-definition:
11122      enumerator
11123      enumerator = constant-expression
11124
11125    enumerator:
11126      identifier  */
11127
11128 static void
11129 cp_parser_enumerator_definition (cp_parser* parser, tree type)
11130 {
11131   tree identifier;
11132   tree value;
11133
11134   /* Look for the identifier.  */
11135   identifier = cp_parser_identifier (parser);
11136   if (identifier == error_mark_node)
11137     return;
11138
11139   /* If the next token is an '=', then there is an explicit value.  */
11140   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11141     {
11142       /* Consume the `=' token.  */
11143       cp_lexer_consume_token (parser->lexer);
11144       /* Parse the value.  */
11145       value = cp_parser_constant_expression (parser,
11146                                              /*allow_non_constant_p=*/false,
11147                                              NULL);
11148     }
11149   else
11150     value = NULL_TREE;
11151
11152   /* Create the enumerator.  */
11153   build_enumerator (identifier, value, type);
11154 }
11155
11156 /* Parse a namespace-name.
11157
11158    namespace-name:
11159      original-namespace-name
11160      namespace-alias
11161
11162    Returns the NAMESPACE_DECL for the namespace.  */
11163
11164 static tree
11165 cp_parser_namespace_name (cp_parser* parser)
11166 {
11167   tree identifier;
11168   tree namespace_decl;
11169
11170   /* Get the name of the namespace.  */
11171   identifier = cp_parser_identifier (parser);
11172   if (identifier == error_mark_node)
11173     return error_mark_node;
11174
11175   /* Look up the identifier in the currently active scope.  Look only
11176      for namespaces, due to:
11177
11178        [basic.lookup.udir]
11179
11180        When looking up a namespace-name in a using-directive or alias
11181        definition, only namespace names are considered.
11182
11183      And:
11184
11185        [basic.lookup.qual]
11186
11187        During the lookup of a name preceding the :: scope resolution
11188        operator, object, function, and enumerator names are ignored.
11189
11190      (Note that cp_parser_class_or_namespace_name only calls this
11191      function if the token after the name is the scope resolution
11192      operator.)  */
11193   namespace_decl = cp_parser_lookup_name (parser, identifier,
11194                                           none_type,
11195                                           /*is_template=*/false,
11196                                           /*is_namespace=*/true,
11197                                           /*check_dependency=*/true,
11198                                           /*ambiguous_decls=*/NULL);
11199   /* If it's not a namespace, issue an error.  */
11200   if (namespace_decl == error_mark_node
11201       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
11202     {
11203       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
11204         error ("%qD is not a namespace-name", identifier);
11205       cp_parser_error (parser, "expected namespace-name");
11206       namespace_decl = error_mark_node;
11207     }
11208
11209   return namespace_decl;
11210 }
11211
11212 /* Parse a namespace-definition.
11213
11214    namespace-definition:
11215      named-namespace-definition
11216      unnamed-namespace-definition
11217
11218    named-namespace-definition:
11219      original-namespace-definition
11220      extension-namespace-definition
11221
11222    original-namespace-definition:
11223      namespace identifier { namespace-body }
11224
11225    extension-namespace-definition:
11226      namespace original-namespace-name { namespace-body }
11227
11228    unnamed-namespace-definition:
11229      namespace { namespace-body } */
11230
11231 static void
11232 cp_parser_namespace_definition (cp_parser* parser)
11233 {
11234   tree identifier, attribs;
11235
11236   /* Look for the `namespace' keyword.  */
11237   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
11238
11239   /* Get the name of the namespace.  We do not attempt to distinguish
11240      between an original-namespace-definition and an
11241      extension-namespace-definition at this point.  The semantic
11242      analysis routines are responsible for that.  */
11243   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
11244     identifier = cp_parser_identifier (parser);
11245   else
11246     identifier = NULL_TREE;
11247
11248   /* Parse any specified attributes.  */
11249   attribs = cp_parser_attributes_opt (parser);
11250
11251   /* Look for the `{' to start the namespace.  */
11252   cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
11253   /* Start the namespace.  */
11254   push_namespace_with_attribs (identifier, attribs);
11255   /* Parse the body of the namespace.  */
11256   cp_parser_namespace_body (parser);
11257   /* Finish the namespace.  */
11258   pop_namespace ();
11259   /* Look for the final `}'.  */
11260   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
11261 }
11262
11263 /* Parse a namespace-body.
11264
11265    namespace-body:
11266      declaration-seq [opt]  */
11267
11268 static void
11269 cp_parser_namespace_body (cp_parser* parser)
11270 {
11271   cp_parser_declaration_seq_opt (parser);
11272 }
11273
11274 /* Parse a namespace-alias-definition.
11275
11276    namespace-alias-definition:
11277      namespace identifier = qualified-namespace-specifier ;  */
11278
11279 static void
11280 cp_parser_namespace_alias_definition (cp_parser* parser)
11281 {
11282   tree identifier;
11283   tree namespace_specifier;
11284
11285   /* Look for the `namespace' keyword.  */
11286   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
11287   /* Look for the identifier.  */
11288   identifier = cp_parser_identifier (parser);
11289   if (identifier == error_mark_node)
11290     return;
11291   /* Look for the `=' token.  */
11292   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
11293       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) 
11294     {
11295       error ("%<namespace%> definition is not allowed here");
11296       /* Skip the definition.  */
11297       cp_lexer_consume_token (parser->lexer);
11298       cp_parser_skip_to_closing_brace (parser);
11299       cp_lexer_consume_token (parser->lexer);
11300       return;
11301     }
11302   cp_parser_require (parser, CPP_EQ, "`='");
11303   /* Look for the qualified-namespace-specifier.  */
11304   namespace_specifier
11305     = cp_parser_qualified_namespace_specifier (parser);
11306   /* Look for the `;' token.  */
11307   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
11308
11309   /* Register the alias in the symbol table.  */
11310   do_namespace_alias (identifier, namespace_specifier);
11311 }
11312
11313 /* Parse a qualified-namespace-specifier.
11314
11315    qualified-namespace-specifier:
11316      :: [opt] nested-name-specifier [opt] namespace-name
11317
11318    Returns a NAMESPACE_DECL corresponding to the specified
11319    namespace.  */
11320
11321 static tree
11322 cp_parser_qualified_namespace_specifier (cp_parser* parser)
11323 {
11324   /* Look for the optional `::'.  */
11325   cp_parser_global_scope_opt (parser,
11326                               /*current_scope_valid_p=*/false);
11327
11328   /* Look for the optional nested-name-specifier.  */
11329   cp_parser_nested_name_specifier_opt (parser,
11330                                        /*typename_keyword_p=*/false,
11331                                        /*check_dependency_p=*/true,
11332                                        /*type_p=*/false,
11333                                        /*is_declaration=*/true);
11334
11335   return cp_parser_namespace_name (parser);
11336 }
11337
11338 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
11339    access declaration.
11340
11341    using-declaration:
11342      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
11343      using :: unqualified-id ;  
11344
11345    access-declaration:
11346      qualified-id ;  
11347
11348    */
11349
11350 static bool
11351 cp_parser_using_declaration (cp_parser* parser, 
11352                              bool access_declaration_p)
11353 {
11354   cp_token *token;
11355   bool typename_p = false;
11356   bool global_scope_p;
11357   tree decl;
11358   tree identifier;
11359   tree qscope;
11360
11361   if (access_declaration_p)
11362     cp_parser_parse_tentatively (parser);
11363   else
11364     {
11365       /* Look for the `using' keyword.  */
11366       cp_parser_require_keyword (parser, RID_USING, "`using'");
11367       
11368       /* Peek at the next token.  */
11369       token = cp_lexer_peek_token (parser->lexer);
11370       /* See if it's `typename'.  */
11371       if (token->keyword == RID_TYPENAME)
11372         {
11373           /* Remember that we've seen it.  */
11374           typename_p = true;
11375           /* Consume the `typename' token.  */
11376           cp_lexer_consume_token (parser->lexer);
11377         }
11378     }
11379
11380   /* Look for the optional global scope qualification.  */
11381   global_scope_p
11382     = (cp_parser_global_scope_opt (parser,
11383                                    /*current_scope_valid_p=*/false)
11384        != NULL_TREE);
11385
11386   /* If we saw `typename', or didn't see `::', then there must be a
11387      nested-name-specifier present.  */
11388   if (typename_p || !global_scope_p)
11389     qscope = cp_parser_nested_name_specifier (parser, typename_p,
11390                                               /*check_dependency_p=*/true,
11391                                               /*type_p=*/false,
11392                                               /*is_declaration=*/true);
11393   /* Otherwise, we could be in either of the two productions.  In that
11394      case, treat the nested-name-specifier as optional.  */
11395   else
11396     qscope = cp_parser_nested_name_specifier_opt (parser,
11397                                                   /*typename_keyword_p=*/false,
11398                                                   /*check_dependency_p=*/true,
11399                                                   /*type_p=*/false,
11400                                                   /*is_declaration=*/true);
11401   if (!qscope)
11402     qscope = global_namespace;
11403
11404   if (access_declaration_p && cp_parser_error_occurred (parser))
11405     /* Something has already gone wrong; there's no need to parse
11406        further.  Since an error has occurred, the return value of
11407        cp_parser_parse_definitely will be false, as required.  */
11408     return cp_parser_parse_definitely (parser);
11409
11410   /* Parse the unqualified-id.  */
11411   identifier = cp_parser_unqualified_id (parser,
11412                                          /*template_keyword_p=*/false,
11413                                          /*check_dependency_p=*/true,
11414                                          /*declarator_p=*/true,
11415                                          /*optional_p=*/false);
11416
11417   if (access_declaration_p)
11418     {
11419       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
11420         cp_parser_simulate_error (parser);
11421       if (!cp_parser_parse_definitely (parser))
11422         return false;
11423     }
11424
11425   /* The function we call to handle a using-declaration is different
11426      depending on what scope we are in.  */
11427   if (qscope == error_mark_node || identifier == error_mark_node)
11428     ;
11429   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
11430            && TREE_CODE (identifier) != BIT_NOT_EXPR)
11431     /* [namespace.udecl]
11432
11433        A using declaration shall not name a template-id.  */
11434     error ("a template-id may not appear in a using-declaration");
11435   else
11436     {
11437       if (at_class_scope_p ())
11438         {
11439           /* Create the USING_DECL.  */
11440           decl = do_class_using_decl (parser->scope, identifier);
11441           /* Add it to the list of members in this class.  */
11442           finish_member_declaration (decl);
11443         }
11444       else
11445         {
11446           decl = cp_parser_lookup_name_simple (parser, identifier);
11447           if (decl == error_mark_node)
11448             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
11449           else if (!at_namespace_scope_p ())
11450             do_local_using_decl (decl, qscope, identifier);
11451           else
11452             do_toplevel_using_decl (decl, qscope, identifier);
11453         }
11454     }
11455
11456   /* Look for the final `;'.  */
11457   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
11458   
11459   return true;
11460 }
11461
11462 /* Parse a using-directive.
11463
11464    using-directive:
11465      using namespace :: [opt] nested-name-specifier [opt]
11466        namespace-name ;  */
11467
11468 static void
11469 cp_parser_using_directive (cp_parser* parser)
11470 {
11471   tree namespace_decl;
11472   tree attribs;
11473
11474   /* Look for the `using' keyword.  */
11475   cp_parser_require_keyword (parser, RID_USING, "`using'");
11476   /* And the `namespace' keyword.  */
11477   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
11478   /* Look for the optional `::' operator.  */
11479   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
11480   /* And the optional nested-name-specifier.  */
11481   cp_parser_nested_name_specifier_opt (parser,
11482                                        /*typename_keyword_p=*/false,
11483                                        /*check_dependency_p=*/true,
11484                                        /*type_p=*/false,
11485                                        /*is_declaration=*/true);
11486   /* Get the namespace being used.  */
11487   namespace_decl = cp_parser_namespace_name (parser);
11488   /* And any specified attributes.  */
11489   attribs = cp_parser_attributes_opt (parser);
11490   /* Update the symbol table.  */
11491   parse_using_directive (namespace_decl, attribs);
11492   /* Look for the final `;'.  */
11493   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
11494 }
11495
11496 /* Parse an asm-definition.
11497
11498    asm-definition:
11499      asm ( string-literal ) ;
11500
11501    GNU Extension:
11502
11503    asm-definition:
11504      asm volatile [opt] ( string-literal ) ;
11505      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
11506      asm volatile [opt] ( string-literal : asm-operand-list [opt]
11507                           : asm-operand-list [opt] ) ;
11508      asm volatile [opt] ( string-literal : asm-operand-list [opt]
11509                           : asm-operand-list [opt]
11510                           : asm-operand-list [opt] ) ;  */
11511
11512 static void
11513 cp_parser_asm_definition (cp_parser* parser)
11514 {
11515   tree string;
11516   tree outputs = NULL_TREE;
11517   tree inputs = NULL_TREE;
11518   tree clobbers = NULL_TREE;
11519   tree asm_stmt;
11520   bool volatile_p = false;
11521   bool extended_p = false;
11522
11523   /* Look for the `asm' keyword.  */
11524   cp_parser_require_keyword (parser, RID_ASM, "`asm'");
11525   /* See if the next token is `volatile'.  */
11526   if (cp_parser_allow_gnu_extensions_p (parser)
11527       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
11528     {
11529       /* Remember that we saw the `volatile' keyword.  */
11530       volatile_p = true;
11531       /* Consume the token.  */
11532       cp_lexer_consume_token (parser->lexer);
11533     }
11534   /* Look for the opening `('.  */
11535   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
11536     return;
11537   /* Look for the string.  */
11538   string = cp_parser_string_literal (parser, false, false);
11539   if (string == error_mark_node)
11540     {
11541       cp_parser_skip_to_closing_parenthesis (parser, true, false,
11542                                              /*consume_paren=*/true);
11543       return;
11544     }
11545
11546   /* If we're allowing GNU extensions, check for the extended assembly
11547      syntax.  Unfortunately, the `:' tokens need not be separated by
11548      a space in C, and so, for compatibility, we tolerate that here
11549      too.  Doing that means that we have to treat the `::' operator as
11550      two `:' tokens.  */
11551   if (cp_parser_allow_gnu_extensions_p (parser)
11552       && parser->in_function_body
11553       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
11554           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
11555     {
11556       bool inputs_p = false;
11557       bool clobbers_p = false;
11558
11559       /* The extended syntax was used.  */
11560       extended_p = true;
11561
11562       /* Look for outputs.  */
11563       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11564         {
11565           /* Consume the `:'.  */
11566           cp_lexer_consume_token (parser->lexer);
11567           /* Parse the output-operands.  */
11568           if (cp_lexer_next_token_is_not (parser->lexer,
11569                                           CPP_COLON)
11570               && cp_lexer_next_token_is_not (parser->lexer,
11571                                              CPP_SCOPE)
11572               && cp_lexer_next_token_is_not (parser->lexer,
11573                                              CPP_CLOSE_PAREN))
11574             outputs = cp_parser_asm_operand_list (parser);
11575         }
11576       /* If the next token is `::', there are no outputs, and the
11577          next token is the beginning of the inputs.  */
11578       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
11579         /* The inputs are coming next.  */
11580         inputs_p = true;
11581
11582       /* Look for inputs.  */
11583       if (inputs_p
11584           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11585         {
11586           /* Consume the `:' or `::'.  */
11587           cp_lexer_consume_token (parser->lexer);
11588           /* Parse the output-operands.  */
11589           if (cp_lexer_next_token_is_not (parser->lexer,
11590                                           CPP_COLON)
11591               && cp_lexer_next_token_is_not (parser->lexer,
11592                                              CPP_CLOSE_PAREN))
11593             inputs = cp_parser_asm_operand_list (parser);
11594         }
11595       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
11596         /* The clobbers are coming next.  */
11597         clobbers_p = true;
11598
11599       /* Look for clobbers.  */
11600       if (clobbers_p
11601           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11602         {
11603           /* Consume the `:' or `::'.  */
11604           cp_lexer_consume_token (parser->lexer);
11605           /* Parse the clobbers.  */
11606           if (cp_lexer_next_token_is_not (parser->lexer,
11607                                           CPP_CLOSE_PAREN))
11608             clobbers = cp_parser_asm_clobber_list (parser);
11609         }
11610     }
11611   /* Look for the closing `)'.  */
11612   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11613     cp_parser_skip_to_closing_parenthesis (parser, true, false,
11614                                            /*consume_paren=*/true);
11615   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
11616
11617   /* Create the ASM_EXPR.  */
11618   if (parser->in_function_body)
11619     {
11620       asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
11621                                   inputs, clobbers);
11622       /* If the extended syntax was not used, mark the ASM_EXPR.  */
11623       if (!extended_p)
11624         {
11625           tree temp = asm_stmt;
11626           if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
11627             temp = TREE_OPERAND (temp, 0);
11628
11629           ASM_INPUT_P (temp) = 1;
11630         }
11631     }
11632   else
11633     cgraph_add_asm_node (string);
11634 }
11635
11636 /* Declarators [gram.dcl.decl] */
11637
11638 /* Parse an init-declarator.
11639
11640    init-declarator:
11641      declarator initializer [opt]
11642
11643    GNU Extension:
11644
11645    init-declarator:
11646      declarator asm-specification [opt] attributes [opt] initializer [opt]
11647
11648    function-definition:
11649      decl-specifier-seq [opt] declarator ctor-initializer [opt]
11650        function-body
11651      decl-specifier-seq [opt] declarator function-try-block
11652
11653    GNU Extension:
11654
11655    function-definition:
11656      __extension__ function-definition
11657
11658    The DECL_SPECIFIERS apply to this declarator.  Returns a
11659    representation of the entity declared.  If MEMBER_P is TRUE, then
11660    this declarator appears in a class scope.  The new DECL created by
11661    this declarator is returned.
11662
11663    The CHECKS are access checks that should be performed once we know
11664    what entity is being declared (and, therefore, what classes have
11665    befriended it).
11666
11667    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
11668    for a function-definition here as well.  If the declarator is a
11669    declarator for a function-definition, *FUNCTION_DEFINITION_P will
11670    be TRUE upon return.  By that point, the function-definition will
11671    have been completely parsed.
11672
11673    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
11674    is FALSE.  */
11675
11676 static tree
11677 cp_parser_init_declarator (cp_parser* parser,
11678                            cp_decl_specifier_seq *decl_specifiers,
11679                            VEC (deferred_access_check,gc)* checks,
11680                            bool function_definition_allowed_p,
11681                            bool member_p,
11682                            int declares_class_or_enum,
11683                            bool* function_definition_p)
11684 {
11685   cp_token *token;
11686   cp_declarator *declarator;
11687   tree prefix_attributes;
11688   tree attributes;
11689   tree asm_specification;
11690   tree initializer;
11691   tree decl = NULL_TREE;
11692   tree scope;
11693   bool is_initialized;
11694   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
11695      initialized with "= ..", CPP_OPEN_PAREN if initialized with
11696      "(...)".  */
11697   enum cpp_ttype initialization_kind;
11698   bool is_parenthesized_init = false;
11699   bool is_non_constant_init;
11700   int ctor_dtor_or_conv_p;
11701   bool friend_p;
11702   tree pushed_scope = NULL;
11703
11704   /* Gather the attributes that were provided with the
11705      decl-specifiers.  */
11706   prefix_attributes = decl_specifiers->attributes;
11707
11708   /* Assume that this is not the declarator for a function
11709      definition.  */
11710   if (function_definition_p)
11711     *function_definition_p = false;
11712
11713   /* Defer access checks while parsing the declarator; we cannot know
11714      what names are accessible until we know what is being
11715      declared.  */
11716   resume_deferring_access_checks ();
11717
11718   /* Parse the declarator.  */
11719   declarator
11720     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
11721                             &ctor_dtor_or_conv_p,
11722                             /*parenthesized_p=*/NULL,
11723                             /*member_p=*/false);
11724   /* Gather up the deferred checks.  */
11725   stop_deferring_access_checks ();
11726
11727   /* If the DECLARATOR was erroneous, there's no need to go
11728      further.  */
11729   if (declarator == cp_error_declarator)
11730     return error_mark_node;
11731
11732   /* Check that the number of template-parameter-lists is OK.  */
11733   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
11734     return error_mark_node;
11735
11736   if (declares_class_or_enum & 2)
11737     cp_parser_check_for_definition_in_return_type (declarator,
11738                                                    decl_specifiers->type);
11739
11740   /* Figure out what scope the entity declared by the DECLARATOR is
11741      located in.  `grokdeclarator' sometimes changes the scope, so
11742      we compute it now.  */
11743   scope = get_scope_of_declarator (declarator);
11744
11745   /* If we're allowing GNU extensions, look for an asm-specification
11746      and attributes.  */
11747   if (cp_parser_allow_gnu_extensions_p (parser))
11748     {
11749       /* Look for an asm-specification.  */
11750       asm_specification = cp_parser_asm_specification_opt (parser);
11751       /* And attributes.  */
11752       attributes = cp_parser_attributes_opt (parser);
11753     }
11754   else
11755     {
11756       asm_specification = NULL_TREE;
11757       attributes = NULL_TREE;
11758     }
11759
11760   /* Peek at the next token.  */
11761   token = cp_lexer_peek_token (parser->lexer);
11762   /* Check to see if the token indicates the start of a
11763      function-definition.  */
11764   if (cp_parser_token_starts_function_definition_p (token))
11765     {
11766       if (!function_definition_allowed_p)
11767         {
11768           /* If a function-definition should not appear here, issue an
11769              error message.  */
11770           cp_parser_error (parser,
11771                            "a function-definition is not allowed here");
11772           return error_mark_node;
11773         }
11774       else
11775         {
11776           /* Neither attributes nor an asm-specification are allowed
11777              on a function-definition.  */
11778           if (asm_specification)
11779             error ("an asm-specification is not allowed on a function-definition");
11780           if (attributes)
11781             error ("attributes are not allowed on a function-definition");
11782           /* This is a function-definition.  */
11783           *function_definition_p = true;
11784
11785           /* Parse the function definition.  */
11786           if (member_p)
11787             decl = cp_parser_save_member_function_body (parser,
11788                                                         decl_specifiers,
11789                                                         declarator,
11790                                                         prefix_attributes);
11791           else
11792             decl
11793               = (cp_parser_function_definition_from_specifiers_and_declarator
11794                  (parser, decl_specifiers, prefix_attributes, declarator));
11795
11796           return decl;
11797         }
11798     }
11799
11800   /* [dcl.dcl]
11801
11802      Only in function declarations for constructors, destructors, and
11803      type conversions can the decl-specifier-seq be omitted.
11804
11805      We explicitly postpone this check past the point where we handle
11806      function-definitions because we tolerate function-definitions
11807      that are missing their return types in some modes.  */
11808   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
11809     {
11810       cp_parser_error (parser,
11811                        "expected constructor, destructor, or type conversion");
11812       return error_mark_node;
11813     }
11814
11815   /* An `=' or an `(' indicates an initializer.  */
11816   if (token->type == CPP_EQ
11817       || token->type == CPP_OPEN_PAREN)
11818     {
11819       is_initialized = true;
11820       initialization_kind = token->type;
11821     }
11822   else
11823     {
11824       /* If the init-declarator isn't initialized and isn't followed by a
11825          `,' or `;', it's not a valid init-declarator.  */
11826       if (token->type != CPP_COMMA
11827           && token->type != CPP_SEMICOLON)
11828         {
11829           cp_parser_error (parser, "expected initializer");
11830           return error_mark_node;
11831         }
11832       is_initialized = false;
11833       initialization_kind = CPP_EOF;
11834     }
11835
11836   /* Because start_decl has side-effects, we should only call it if we
11837      know we're going ahead.  By this point, we know that we cannot
11838      possibly be looking at any other construct.  */
11839   cp_parser_commit_to_tentative_parse (parser);
11840
11841   /* If the decl specifiers were bad, issue an error now that we're
11842      sure this was intended to be a declarator.  Then continue
11843      declaring the variable(s), as int, to try to cut down on further
11844      errors.  */
11845   if (decl_specifiers->any_specifiers_p
11846       && decl_specifiers->type == error_mark_node)
11847     {
11848       cp_parser_error (parser, "invalid type in declaration");
11849       decl_specifiers->type = integer_type_node;
11850     }
11851
11852   /* Check to see whether or not this declaration is a friend.  */
11853   friend_p = cp_parser_friend_p (decl_specifiers);
11854
11855   /* Enter the newly declared entry in the symbol table.  If we're
11856      processing a declaration in a class-specifier, we wait until
11857      after processing the initializer.  */
11858   if (!member_p)
11859     {
11860       if (parser->in_unbraced_linkage_specification_p)
11861         decl_specifiers->storage_class = sc_extern;
11862       decl = start_decl (declarator, decl_specifiers,
11863                          is_initialized, attributes, prefix_attributes,
11864                          &pushed_scope);
11865     }
11866   else if (scope)
11867     /* Enter the SCOPE.  That way unqualified names appearing in the
11868        initializer will be looked up in SCOPE.  */
11869     pushed_scope = push_scope (scope);
11870
11871   /* Perform deferred access control checks, now that we know in which
11872      SCOPE the declared entity resides.  */
11873   if (!member_p && decl)
11874     {
11875       tree saved_current_function_decl = NULL_TREE;
11876
11877       /* If the entity being declared is a function, pretend that we
11878          are in its scope.  If it is a `friend', it may have access to
11879          things that would not otherwise be accessible.  */
11880       if (TREE_CODE (decl) == FUNCTION_DECL)
11881         {
11882           saved_current_function_decl = current_function_decl;
11883           current_function_decl = decl;
11884         }
11885
11886       /* Perform access checks for template parameters.  */
11887       cp_parser_perform_template_parameter_access_checks (checks);
11888
11889       /* Perform the access control checks for the declarator and the
11890          the decl-specifiers.  */
11891       perform_deferred_access_checks ();
11892
11893       /* Restore the saved value.  */
11894       if (TREE_CODE (decl) == FUNCTION_DECL)
11895         current_function_decl = saved_current_function_decl;
11896     }
11897
11898   /* Parse the initializer.  */
11899   initializer = NULL_TREE;
11900   is_parenthesized_init = false;
11901   is_non_constant_init = true;
11902   if (is_initialized)
11903     {
11904       if (function_declarator_p (declarator))
11905         {
11906            if (initialization_kind == CPP_EQ)
11907              initializer = cp_parser_pure_specifier (parser);
11908            else
11909              {
11910                /* If the declaration was erroneous, we don't really
11911                   know what the user intended, so just silently
11912                   consume the initializer.  */
11913                if (decl != error_mark_node)
11914                  error ("initializer provided for function");
11915                cp_parser_skip_to_closing_parenthesis (parser,
11916                                                       /*recovering=*/true,
11917                                                       /*or_comma=*/false,
11918                                                       /*consume_paren=*/true);
11919              }
11920         }
11921       else
11922         initializer = cp_parser_initializer (parser,
11923                                              &is_parenthesized_init,
11924                                              &is_non_constant_init);
11925     }
11926
11927   /* The old parser allows attributes to appear after a parenthesized
11928      initializer.  Mark Mitchell proposed removing this functionality
11929      on the GCC mailing lists on 2002-08-13.  This parser accepts the
11930      attributes -- but ignores them.  */
11931   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
11932     if (cp_parser_attributes_opt (parser))
11933       warning (OPT_Wattributes,
11934                "attributes after parenthesized initializer ignored");
11935
11936   /* For an in-class declaration, use `grokfield' to create the
11937      declaration.  */
11938   if (member_p)
11939     {
11940       if (pushed_scope)
11941         {
11942           pop_scope (pushed_scope);
11943           pushed_scope = false;
11944         }
11945       decl = grokfield (declarator, decl_specifiers,
11946                         initializer, !is_non_constant_init,
11947                         /*asmspec=*/NULL_TREE,
11948                         prefix_attributes);
11949       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
11950         cp_parser_save_default_args (parser, decl);
11951     }
11952
11953   /* Finish processing the declaration.  But, skip friend
11954      declarations.  */
11955   if (!friend_p && decl && decl != error_mark_node)
11956     {
11957       cp_finish_decl (decl,
11958                       initializer, !is_non_constant_init,
11959                       asm_specification,
11960                       /* If the initializer is in parentheses, then this is
11961                          a direct-initialization, which means that an
11962                          `explicit' constructor is OK.  Otherwise, an
11963                          `explicit' constructor cannot be used.  */
11964                       ((is_parenthesized_init || !is_initialized)
11965                      ? 0 : LOOKUP_ONLYCONVERTING));
11966     }
11967   else if (flag_cpp0x && friend_p && decl && TREE_CODE (decl) == FUNCTION_DECL)
11968     /* Core issue #226 (C++0x only): A default template-argument
11969        shall not be specified in a friend class template
11970        declaration. */
11971     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
11972                              /*is_partial=*/0, /*is_friend_decl=*/1);
11973
11974   if (!friend_p && pushed_scope)
11975     pop_scope (pushed_scope);
11976
11977   return decl;
11978 }
11979
11980 /* Parse a declarator.
11981
11982    declarator:
11983      direct-declarator
11984      ptr-operator declarator
11985
11986    abstract-declarator:
11987      ptr-operator abstract-declarator [opt]
11988      direct-abstract-declarator
11989
11990    GNU Extensions:
11991
11992    declarator:
11993      attributes [opt] direct-declarator
11994      attributes [opt] ptr-operator declarator
11995
11996    abstract-declarator:
11997      attributes [opt] ptr-operator abstract-declarator [opt]
11998      attributes [opt] direct-abstract-declarator
11999
12000    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
12001    detect constructor, destructor or conversion operators. It is set
12002    to -1 if the declarator is a name, and +1 if it is a
12003    function. Otherwise it is set to zero. Usually you just want to
12004    test for >0, but internally the negative value is used.
12005
12006    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
12007    a decl-specifier-seq unless it declares a constructor, destructor,
12008    or conversion.  It might seem that we could check this condition in
12009    semantic analysis, rather than parsing, but that makes it difficult
12010    to handle something like `f()'.  We want to notice that there are
12011    no decl-specifiers, and therefore realize that this is an
12012    expression, not a declaration.)
12013
12014    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
12015    the declarator is a direct-declarator of the form "(...)".
12016
12017    MEMBER_P is true iff this declarator is a member-declarator.  */
12018
12019 static cp_declarator *
12020 cp_parser_declarator (cp_parser* parser,
12021                       cp_parser_declarator_kind dcl_kind,
12022                       int* ctor_dtor_or_conv_p,
12023                       bool* parenthesized_p,
12024                       bool member_p)
12025 {
12026   cp_token *token;
12027   cp_declarator *declarator;
12028   enum tree_code code;
12029   cp_cv_quals cv_quals;
12030   tree class_type;
12031   tree attributes = NULL_TREE;
12032
12033   /* Assume this is not a constructor, destructor, or type-conversion
12034      operator.  */
12035   if (ctor_dtor_or_conv_p)
12036     *ctor_dtor_or_conv_p = 0;
12037
12038   if (cp_parser_allow_gnu_extensions_p (parser))
12039     attributes = cp_parser_attributes_opt (parser);
12040
12041   /* Peek at the next token.  */
12042   token = cp_lexer_peek_token (parser->lexer);
12043
12044   /* Check for the ptr-operator production.  */
12045   cp_parser_parse_tentatively (parser);
12046   /* Parse the ptr-operator.  */
12047   code = cp_parser_ptr_operator (parser,
12048                                  &class_type,
12049                                  &cv_quals);
12050   /* If that worked, then we have a ptr-operator.  */
12051   if (cp_parser_parse_definitely (parser))
12052     {
12053       /* If a ptr-operator was found, then this declarator was not
12054          parenthesized.  */
12055       if (parenthesized_p)
12056         *parenthesized_p = true;
12057       /* The dependent declarator is optional if we are parsing an
12058          abstract-declarator.  */
12059       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
12060         cp_parser_parse_tentatively (parser);
12061
12062       /* Parse the dependent declarator.  */
12063       declarator = cp_parser_declarator (parser, dcl_kind,
12064                                          /*ctor_dtor_or_conv_p=*/NULL,
12065                                          /*parenthesized_p=*/NULL,
12066                                          /*member_p=*/false);
12067
12068       /* If we are parsing an abstract-declarator, we must handle the
12069          case where the dependent declarator is absent.  */
12070       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
12071           && !cp_parser_parse_definitely (parser))
12072         declarator = NULL;
12073
12074       /* Build the representation of the ptr-operator.  */
12075       if (class_type)
12076         declarator = make_ptrmem_declarator (cv_quals,
12077                                              class_type,
12078                                              declarator);
12079       else if (code == INDIRECT_REF)
12080         declarator = make_pointer_declarator (cv_quals, declarator);
12081       else
12082         declarator = make_reference_declarator (cv_quals, declarator);
12083     }
12084   /* Everything else is a direct-declarator.  */
12085   else
12086     {
12087       if (parenthesized_p)
12088         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
12089                                                    CPP_OPEN_PAREN);
12090       declarator = cp_parser_direct_declarator (parser, dcl_kind,
12091                                                 ctor_dtor_or_conv_p,
12092                                                 member_p);
12093     }
12094
12095   if (attributes && declarator && declarator != cp_error_declarator)
12096     declarator->attributes = attributes;
12097
12098   return declarator;
12099 }
12100
12101 /* Parse a direct-declarator or direct-abstract-declarator.
12102
12103    direct-declarator:
12104      declarator-id
12105      direct-declarator ( parameter-declaration-clause )
12106        cv-qualifier-seq [opt]
12107        exception-specification [opt]
12108      direct-declarator [ constant-expression [opt] ]
12109      ( declarator )
12110
12111    direct-abstract-declarator:
12112      direct-abstract-declarator [opt]
12113        ( parameter-declaration-clause )
12114        cv-qualifier-seq [opt]
12115        exception-specification [opt]
12116      direct-abstract-declarator [opt] [ constant-expression [opt] ]
12117      ( abstract-declarator )
12118
12119    Returns a representation of the declarator.  DCL_KIND is
12120    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
12121    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
12122    we are parsing a direct-declarator.  It is
12123    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
12124    of ambiguity we prefer an abstract declarator, as per
12125    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
12126    cp_parser_declarator.  */
12127
12128 static cp_declarator *
12129 cp_parser_direct_declarator (cp_parser* parser,
12130                              cp_parser_declarator_kind dcl_kind,
12131                              int* ctor_dtor_or_conv_p,
12132                              bool member_p)
12133 {
12134   cp_token *token;
12135   cp_declarator *declarator = NULL;
12136   tree scope = NULL_TREE;
12137   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
12138   bool saved_in_declarator_p = parser->in_declarator_p;
12139   bool first = true;
12140   tree pushed_scope = NULL_TREE;
12141
12142   while (true)
12143     {
12144       /* Peek at the next token.  */
12145       token = cp_lexer_peek_token (parser->lexer);
12146       if (token->type == CPP_OPEN_PAREN)
12147         {
12148           /* This is either a parameter-declaration-clause, or a
12149              parenthesized declarator. When we know we are parsing a
12150              named declarator, it must be a parenthesized declarator
12151              if FIRST is true. For instance, `(int)' is a
12152              parameter-declaration-clause, with an omitted
12153              direct-abstract-declarator. But `((*))', is a
12154              parenthesized abstract declarator. Finally, when T is a
12155              template parameter `(T)' is a
12156              parameter-declaration-clause, and not a parenthesized
12157              named declarator.
12158
12159              We first try and parse a parameter-declaration-clause,
12160              and then try a nested declarator (if FIRST is true).
12161
12162              It is not an error for it not to be a
12163              parameter-declaration-clause, even when FIRST is
12164              false. Consider,
12165
12166                int i (int);
12167                int i (3);
12168
12169              The first is the declaration of a function while the
12170              second is a the definition of a variable, including its
12171              initializer.
12172
12173              Having seen only the parenthesis, we cannot know which of
12174              these two alternatives should be selected.  Even more
12175              complex are examples like:
12176
12177                int i (int (a));
12178                int i (int (3));
12179
12180              The former is a function-declaration; the latter is a
12181              variable initialization.
12182
12183              Thus again, we try a parameter-declaration-clause, and if
12184              that fails, we back out and return.  */
12185
12186           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
12187             {
12188               cp_parameter_declarator *params;
12189               unsigned saved_num_template_parameter_lists;
12190
12191               /* In a member-declarator, the only valid interpretation
12192                  of a parenthesis is the start of a
12193                  parameter-declaration-clause.  (It is invalid to
12194                  initialize a static data member with a parenthesized
12195                  initializer; only the "=" form of initialization is
12196                  permitted.)  */
12197               if (!member_p)
12198                 cp_parser_parse_tentatively (parser);
12199
12200               /* Consume the `('.  */
12201               cp_lexer_consume_token (parser->lexer);
12202               if (first)
12203                 {
12204                   /* If this is going to be an abstract declarator, we're
12205                      in a declarator and we can't have default args.  */
12206                   parser->default_arg_ok_p = false;
12207                   parser->in_declarator_p = true;
12208                 }
12209
12210               /* Inside the function parameter list, surrounding
12211                  template-parameter-lists do not apply.  */
12212               saved_num_template_parameter_lists
12213                 = parser->num_template_parameter_lists;
12214               parser->num_template_parameter_lists = 0;
12215
12216               /* Parse the parameter-declaration-clause.  */
12217               params = cp_parser_parameter_declaration_clause (parser);
12218
12219               parser->num_template_parameter_lists
12220                 = saved_num_template_parameter_lists;
12221
12222               /* If all went well, parse the cv-qualifier-seq and the
12223                  exception-specification.  */
12224               if (member_p || cp_parser_parse_definitely (parser))
12225                 {
12226                   cp_cv_quals cv_quals;
12227                   tree exception_specification;
12228
12229                   if (ctor_dtor_or_conv_p)
12230                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
12231                   first = false;
12232                   /* Consume the `)'.  */
12233                   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
12234
12235                   /* Parse the cv-qualifier-seq.  */
12236                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
12237                   /* And the exception-specification.  */
12238                   exception_specification
12239                     = cp_parser_exception_specification_opt (parser);
12240
12241                   /* Create the function-declarator.  */
12242                   declarator = make_call_declarator (declarator,
12243                                                      params,
12244                                                      cv_quals,
12245                                                      exception_specification);
12246                   /* Any subsequent parameter lists are to do with
12247                      return type, so are not those of the declared
12248                      function.  */
12249                   parser->default_arg_ok_p = false;
12250
12251                   /* Repeat the main loop.  */
12252                   continue;
12253                 }
12254             }
12255
12256           /* If this is the first, we can try a parenthesized
12257              declarator.  */
12258           if (first)
12259             {
12260               bool saved_in_type_id_in_expr_p;
12261
12262               parser->default_arg_ok_p = saved_default_arg_ok_p;
12263               parser->in_declarator_p = saved_in_declarator_p;
12264
12265               /* Consume the `('.  */
12266               cp_lexer_consume_token (parser->lexer);
12267               /* Parse the nested declarator.  */
12268               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
12269               parser->in_type_id_in_expr_p = true;
12270               declarator
12271                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
12272                                         /*parenthesized_p=*/NULL,
12273                                         member_p);
12274               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
12275               first = false;
12276               /* Expect a `)'.  */
12277               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
12278                 declarator = cp_error_declarator;
12279               if (declarator == cp_error_declarator)
12280                 break;
12281
12282               goto handle_declarator;
12283             }
12284           /* Otherwise, we must be done.  */
12285           else
12286             break;
12287         }
12288       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
12289                && token->type == CPP_OPEN_SQUARE)
12290         {
12291           /* Parse an array-declarator.  */
12292           tree bounds;
12293
12294           if (ctor_dtor_or_conv_p)
12295             *ctor_dtor_or_conv_p = 0;
12296
12297           first = false;
12298           parser->default_arg_ok_p = false;
12299           parser->in_declarator_p = true;
12300           /* Consume the `['.  */
12301           cp_lexer_consume_token (parser->lexer);
12302           /* Peek at the next token.  */
12303           token = cp_lexer_peek_token (parser->lexer);
12304           /* If the next token is `]', then there is no
12305              constant-expression.  */
12306           if (token->type != CPP_CLOSE_SQUARE)
12307             {
12308               bool non_constant_p;
12309
12310               bounds
12311                 = cp_parser_constant_expression (parser,
12312                                                  /*allow_non_constant=*/true,
12313                                                  &non_constant_p);
12314               if (!non_constant_p)
12315                 bounds = fold_non_dependent_expr (bounds);
12316               /* Normally, the array bound must be an integral constant
12317                  expression.  However, as an extension, we allow VLAs
12318                  in function scopes.  */
12319               else if (!parser->in_function_body)
12320                 {
12321                   error ("array bound is not an integer constant");
12322                   bounds = error_mark_node;
12323                 }
12324             }
12325           else
12326             bounds = NULL_TREE;
12327           /* Look for the closing `]'.  */
12328           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
12329             {
12330               declarator = cp_error_declarator;
12331               break;
12332             }
12333
12334           declarator = make_array_declarator (declarator, bounds);
12335         }
12336       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
12337         {
12338           tree qualifying_scope;
12339           tree unqualified_name;
12340           special_function_kind sfk;
12341           bool abstract_ok;
12342           bool pack_expansion_p = false;
12343
12344           /* Parse a declarator-id */
12345           abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
12346           if (abstract_ok)
12347             {
12348               cp_parser_parse_tentatively (parser);
12349
12350               /* If we see an ellipsis, we should be looking at a
12351                  parameter pack. */
12352               if (token->type == CPP_ELLIPSIS)
12353                 {
12354                   /* Consume the `...' */
12355                   cp_lexer_consume_token (parser->lexer);
12356
12357                   pack_expansion_p = true;
12358                 }
12359             }
12360
12361           unqualified_name
12362             = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
12363           qualifying_scope = parser->scope;
12364           if (abstract_ok)
12365             {
12366               bool okay = false;
12367
12368               if (!unqualified_name && pack_expansion_p)
12369                 {
12370                   /* Check whether an error occurred. */
12371                   okay = !cp_parser_error_occurred (parser);
12372
12373                   /* We already consumed the ellipsis to mark a
12374                      parameter pack, but we have no way to report it,
12375                      so abort the tentative parse. We will be exiting
12376                      immediately anyway. */
12377                   cp_parser_abort_tentative_parse (parser);
12378                 }
12379               else
12380                 okay = cp_parser_parse_definitely (parser);
12381
12382               if (!okay)
12383                 unqualified_name = error_mark_node;
12384               else if (unqualified_name
12385                        && (qualifying_scope
12386                            || (TREE_CODE (unqualified_name)
12387                                != IDENTIFIER_NODE)))
12388                 {
12389                   cp_parser_error (parser, "expected unqualified-id");
12390                   unqualified_name = error_mark_node;
12391                 }
12392             }
12393
12394           if (!unqualified_name)
12395             return NULL;
12396           if (unqualified_name == error_mark_node)
12397             {
12398               declarator = cp_error_declarator;
12399               pack_expansion_p = false;
12400               declarator->parameter_pack_p = false;
12401               break;
12402             }
12403
12404           if (qualifying_scope && at_namespace_scope_p ()
12405               && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
12406             {
12407               /* In the declaration of a member of a template class
12408                  outside of the class itself, the SCOPE will sometimes
12409                  be a TYPENAME_TYPE.  For example, given:
12410
12411                  template <typename T>
12412                  int S<T>::R::i = 3;
12413
12414                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
12415                  this context, we must resolve S<T>::R to an ordinary
12416                  type, rather than a typename type.
12417
12418                  The reason we normally avoid resolving TYPENAME_TYPEs
12419                  is that a specialization of `S' might render
12420                  `S<T>::R' not a type.  However, if `S' is
12421                  specialized, then this `i' will not be used, so there
12422                  is no harm in resolving the types here.  */
12423               tree type;
12424
12425               /* Resolve the TYPENAME_TYPE.  */
12426               type = resolve_typename_type (qualifying_scope,
12427                                             /*only_current_p=*/false);
12428               /* If that failed, the declarator is invalid.  */
12429               if (type == error_mark_node)
12430                 error ("%<%T::%E%> is not a type",
12431                        TYPE_CONTEXT (qualifying_scope),
12432                        TYPE_IDENTIFIER (qualifying_scope));
12433               qualifying_scope = type;
12434             }
12435
12436           sfk = sfk_none;
12437
12438           if (unqualified_name)
12439             {
12440               tree class_type;
12441
12442               if (qualifying_scope
12443                   && CLASS_TYPE_P (qualifying_scope))
12444                 class_type = qualifying_scope;
12445               else
12446                 class_type = current_class_type;
12447
12448               if (TREE_CODE (unqualified_name) == TYPE_DECL)
12449                 {
12450                   tree name_type = TREE_TYPE (unqualified_name);
12451                   if (class_type && same_type_p (name_type, class_type))
12452                     {
12453                       if (qualifying_scope
12454                           && CLASSTYPE_USE_TEMPLATE (name_type))
12455                         {
12456                           error ("invalid use of constructor as a template");
12457                           inform ("use %<%T::%D%> instead of %<%T::%D%> to "
12458                                   "name the constructor in a qualified name",
12459                                   class_type,
12460                                   DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
12461                                   class_type, name_type);
12462                           declarator = cp_error_declarator;
12463                           break;
12464                         }
12465                       else
12466                         unqualified_name = constructor_name (class_type);
12467                     }
12468                   else
12469                     {
12470                       /* We do not attempt to print the declarator
12471                          here because we do not have enough
12472                          information about its original syntactic
12473                          form.  */
12474                       cp_parser_error (parser, "invalid declarator");
12475                       declarator = cp_error_declarator;
12476                       break;
12477                     }
12478                 }
12479
12480               if (class_type)
12481                 {
12482                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
12483                     sfk = sfk_destructor;
12484                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
12485                     sfk = sfk_conversion;
12486                   else if (/* There's no way to declare a constructor
12487                               for an anonymous type, even if the type
12488                               got a name for linkage purposes.  */
12489                            !TYPE_WAS_ANONYMOUS (class_type)
12490                            && constructor_name_p (unqualified_name,
12491                                                   class_type))
12492                     {
12493                       unqualified_name = constructor_name (class_type);
12494                       sfk = sfk_constructor;
12495                     }
12496
12497                   if (ctor_dtor_or_conv_p && sfk != sfk_none)
12498                     *ctor_dtor_or_conv_p = -1;
12499                 }
12500             }
12501           declarator = make_id_declarator (qualifying_scope,
12502                                            unqualified_name,
12503                                            sfk);
12504           declarator->id_loc = token->location;
12505           declarator->parameter_pack_p = pack_expansion_p;
12506
12507           if (pack_expansion_p)
12508             maybe_warn_variadic_templates ();
12509
12510         handle_declarator:;
12511           scope = get_scope_of_declarator (declarator);
12512           if (scope)
12513             /* Any names that appear after the declarator-id for a
12514                member are looked up in the containing scope.  */
12515             pushed_scope = push_scope (scope);
12516           parser->in_declarator_p = true;
12517           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
12518               || (declarator && declarator->kind == cdk_id))
12519             /* Default args are only allowed on function
12520                declarations.  */
12521             parser->default_arg_ok_p = saved_default_arg_ok_p;
12522           else
12523             parser->default_arg_ok_p = false;
12524
12525           first = false;
12526         }
12527       /* We're done.  */
12528       else
12529         break;
12530     }
12531
12532   /* For an abstract declarator, we might wind up with nothing at this
12533      point.  That's an error; the declarator is not optional.  */
12534   if (!declarator)
12535     cp_parser_error (parser, "expected declarator");
12536
12537   /* If we entered a scope, we must exit it now.  */
12538   if (pushed_scope)
12539     pop_scope (pushed_scope);
12540
12541   parser->default_arg_ok_p = saved_default_arg_ok_p;
12542   parser->in_declarator_p = saved_in_declarator_p;
12543
12544   return declarator;
12545 }
12546
12547 /* Parse a ptr-operator.
12548
12549    ptr-operator:
12550      * cv-qualifier-seq [opt]
12551      &
12552      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
12553
12554    GNU Extension:
12555
12556    ptr-operator:
12557      & cv-qualifier-seq [opt]
12558
12559    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
12560    Returns ADDR_EXPR if a reference was used.  In the case of a
12561    pointer-to-member, *TYPE is filled in with the TYPE containing the
12562    member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
12563    TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
12564    ERROR_MARK if an error occurred.  */
12565
12566 static enum tree_code
12567 cp_parser_ptr_operator (cp_parser* parser,
12568                         tree* type,
12569                         cp_cv_quals *cv_quals)
12570 {
12571   enum tree_code code = ERROR_MARK;
12572   cp_token *token;
12573
12574   /* Assume that it's not a pointer-to-member.  */
12575   *type = NULL_TREE;
12576   /* And that there are no cv-qualifiers.  */
12577   *cv_quals = TYPE_UNQUALIFIED;
12578
12579   /* Peek at the next token.  */
12580   token = cp_lexer_peek_token (parser->lexer);
12581   /* If it's a `*' or `&' we have a pointer or reference.  */
12582   if (token->type == CPP_MULT || token->type == CPP_AND)
12583     {
12584       /* Remember which ptr-operator we were processing.  */
12585       code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
12586
12587       /* Consume the `*' or `&'.  */
12588       cp_lexer_consume_token (parser->lexer);
12589
12590       /* A `*' can be followed by a cv-qualifier-seq, and so can a
12591          `&', if we are allowing GNU extensions.  (The only qualifier
12592          that can legally appear after `&' is `restrict', but that is
12593          enforced during semantic analysis.  */
12594       if (code == INDIRECT_REF
12595           || cp_parser_allow_gnu_extensions_p (parser))
12596         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
12597     }
12598   else
12599     {
12600       /* Try the pointer-to-member case.  */
12601       cp_parser_parse_tentatively (parser);
12602       /* Look for the optional `::' operator.  */
12603       cp_parser_global_scope_opt (parser,
12604                                   /*current_scope_valid_p=*/false);
12605       /* Look for the nested-name specifier.  */
12606       cp_parser_nested_name_specifier (parser,
12607                                        /*typename_keyword_p=*/false,
12608                                        /*check_dependency_p=*/true,
12609                                        /*type_p=*/false,
12610                                        /*is_declaration=*/false);
12611       /* If we found it, and the next token is a `*', then we are
12612          indeed looking at a pointer-to-member operator.  */
12613       if (!cp_parser_error_occurred (parser)
12614           && cp_parser_require (parser, CPP_MULT, "`*'"))
12615         {
12616           /* Indicate that the `*' operator was used.  */
12617           code = INDIRECT_REF;
12618
12619           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
12620             error ("%qD is a namespace", parser->scope);
12621           else
12622             {
12623               /* The type of which the member is a member is given by the
12624                  current SCOPE.  */
12625               *type = parser->scope;
12626               /* The next name will not be qualified.  */
12627               parser->scope = NULL_TREE;
12628               parser->qualifying_scope = NULL_TREE;
12629               parser->object_scope = NULL_TREE;
12630               /* Look for the optional cv-qualifier-seq.  */
12631               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
12632             }
12633         }
12634       /* If that didn't work we don't have a ptr-operator.  */
12635       if (!cp_parser_parse_definitely (parser))
12636         cp_parser_error (parser, "expected ptr-operator");
12637     }
12638
12639   return code;
12640 }
12641
12642 /* Parse an (optional) cv-qualifier-seq.
12643
12644    cv-qualifier-seq:
12645      cv-qualifier cv-qualifier-seq [opt]
12646
12647    cv-qualifier:
12648      const
12649      volatile
12650
12651    GNU Extension:
12652
12653    cv-qualifier:
12654      __restrict__
12655
12656    Returns a bitmask representing the cv-qualifiers.  */
12657
12658 static cp_cv_quals
12659 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
12660 {
12661   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
12662
12663   while (true)
12664     {
12665       cp_token *token;
12666       cp_cv_quals cv_qualifier;
12667
12668       /* Peek at the next token.  */
12669       token = cp_lexer_peek_token (parser->lexer);
12670       /* See if it's a cv-qualifier.  */
12671       switch (token->keyword)
12672         {
12673         case RID_CONST:
12674           cv_qualifier = TYPE_QUAL_CONST;
12675           break;
12676
12677         case RID_VOLATILE:
12678           cv_qualifier = TYPE_QUAL_VOLATILE;
12679           break;
12680
12681         case RID_RESTRICT:
12682           cv_qualifier = TYPE_QUAL_RESTRICT;
12683           break;
12684
12685         default:
12686           cv_qualifier = TYPE_UNQUALIFIED;
12687           break;
12688         }
12689
12690       if (!cv_qualifier)
12691         break;
12692
12693       if (cv_quals & cv_qualifier)
12694         {
12695           error ("duplicate cv-qualifier");
12696           cp_lexer_purge_token (parser->lexer);
12697         }
12698       else
12699         {
12700           cp_lexer_consume_token (parser->lexer);
12701           cv_quals |= cv_qualifier;
12702         }
12703     }
12704
12705   return cv_quals;
12706 }
12707
12708 /* Parse a declarator-id.
12709
12710    declarator-id:
12711      id-expression
12712      :: [opt] nested-name-specifier [opt] type-name
12713
12714    In the `id-expression' case, the value returned is as for
12715    cp_parser_id_expression if the id-expression was an unqualified-id.
12716    If the id-expression was a qualified-id, then a SCOPE_REF is
12717    returned.  The first operand is the scope (either a NAMESPACE_DECL
12718    or TREE_TYPE), but the second is still just a representation of an
12719    unqualified-id.  */
12720
12721 static tree
12722 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
12723 {
12724   tree id;
12725   /* The expression must be an id-expression.  Assume that qualified
12726      names are the names of types so that:
12727
12728        template <class T>
12729        int S<T>::R::i = 3;
12730
12731      will work; we must treat `S<T>::R' as the name of a type.
12732      Similarly, assume that qualified names are templates, where
12733      required, so that:
12734
12735        template <class T>
12736        int S<T>::R<T>::i = 3;
12737
12738      will work, too.  */
12739   id = cp_parser_id_expression (parser,
12740                                 /*template_keyword_p=*/false,
12741                                 /*check_dependency_p=*/false,
12742                                 /*template_p=*/NULL,
12743                                 /*declarator_p=*/true,
12744                                 optional_p);
12745   if (id && BASELINK_P (id))
12746     id = BASELINK_FUNCTIONS (id);
12747   return id;
12748 }
12749
12750 /* Parse a type-id.
12751
12752    type-id:
12753      type-specifier-seq abstract-declarator [opt]
12754
12755    Returns the TYPE specified.  */
12756
12757 static tree
12758 cp_parser_type_id (cp_parser* parser)
12759 {
12760   cp_decl_specifier_seq type_specifier_seq;
12761   cp_declarator *abstract_declarator;
12762
12763   /* Parse the type-specifier-seq.  */
12764   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
12765                                 &type_specifier_seq);
12766   if (type_specifier_seq.type == error_mark_node)
12767     return error_mark_node;
12768
12769   /* There might or might not be an abstract declarator.  */
12770   cp_parser_parse_tentatively (parser);
12771   /* Look for the declarator.  */
12772   abstract_declarator
12773     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
12774                             /*parenthesized_p=*/NULL,
12775                             /*member_p=*/false);
12776   /* Check to see if there really was a declarator.  */
12777   if (!cp_parser_parse_definitely (parser))
12778     abstract_declarator = NULL;
12779
12780   return groktypename (&type_specifier_seq, abstract_declarator);
12781 }
12782
12783 /* Parse a type-specifier-seq.
12784
12785    type-specifier-seq:
12786      type-specifier type-specifier-seq [opt]
12787
12788    GNU extension:
12789
12790    type-specifier-seq:
12791      attributes type-specifier-seq [opt]
12792
12793    If IS_CONDITION is true, we are at the start of a "condition",
12794    e.g., we've just seen "if (".
12795
12796    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
12797
12798 static void
12799 cp_parser_type_specifier_seq (cp_parser* parser,
12800                               bool is_condition,
12801                               cp_decl_specifier_seq *type_specifier_seq)
12802 {
12803   bool seen_type_specifier = false;
12804   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
12805
12806   /* Clear the TYPE_SPECIFIER_SEQ.  */
12807   clear_decl_specs (type_specifier_seq);
12808
12809   /* Parse the type-specifiers and attributes.  */
12810   while (true)
12811     {
12812       tree type_specifier;
12813       bool is_cv_qualifier;
12814
12815       /* Check for attributes first.  */
12816       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
12817         {
12818           type_specifier_seq->attributes =
12819             chainon (type_specifier_seq->attributes,
12820                      cp_parser_attributes_opt (parser));
12821           continue;
12822         }
12823
12824       /* Look for the type-specifier.  */
12825       type_specifier = cp_parser_type_specifier (parser,
12826                                                  flags,
12827                                                  type_specifier_seq,
12828                                                  /*is_declaration=*/false,
12829                                                  NULL,
12830                                                  &is_cv_qualifier);
12831       if (!type_specifier)
12832         {
12833           /* If the first type-specifier could not be found, this is not a
12834              type-specifier-seq at all.  */
12835           if (!seen_type_specifier)
12836             {
12837               cp_parser_error (parser, "expected type-specifier");
12838               type_specifier_seq->type = error_mark_node;
12839               return;
12840             }
12841           /* If subsequent type-specifiers could not be found, the
12842              type-specifier-seq is complete.  */
12843           break;
12844         }
12845
12846       seen_type_specifier = true;
12847       /* The standard says that a condition can be:
12848
12849             type-specifier-seq declarator = assignment-expression
12850
12851          However, given:
12852
12853            struct S {};
12854            if (int S = ...)
12855
12856          we should treat the "S" as a declarator, not as a
12857          type-specifier.  The standard doesn't say that explicitly for
12858          type-specifier-seq, but it does say that for
12859          decl-specifier-seq in an ordinary declaration.  Perhaps it
12860          would be clearer just to allow a decl-specifier-seq here, and
12861          then add a semantic restriction that if any decl-specifiers
12862          that are not type-specifiers appear, the program is invalid.  */
12863       if (is_condition && !is_cv_qualifier)
12864         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
12865     }
12866
12867   cp_parser_check_decl_spec (type_specifier_seq);
12868 }
12869
12870 /* Parse a parameter-declaration-clause.
12871
12872    parameter-declaration-clause:
12873      parameter-declaration-list [opt] ... [opt]
12874      parameter-declaration-list , ...
12875
12876    Returns a representation for the parameter declarations.  A return
12877    value of NULL indicates a parameter-declaration-clause consisting
12878    only of an ellipsis.  */
12879
12880 static cp_parameter_declarator *
12881 cp_parser_parameter_declaration_clause (cp_parser* parser)
12882 {
12883   cp_parameter_declarator *parameters;
12884   cp_token *token;
12885   bool ellipsis_p;
12886   bool is_error;
12887
12888   /* Peek at the next token.  */
12889   token = cp_lexer_peek_token (parser->lexer);
12890   /* Check for trivial parameter-declaration-clauses.  */
12891   if (token->type == CPP_ELLIPSIS)
12892     {
12893       /* Consume the `...' token.  */
12894       cp_lexer_consume_token (parser->lexer);
12895       return NULL;
12896     }
12897   else if (token->type == CPP_CLOSE_PAREN)
12898     /* There are no parameters.  */
12899     {
12900 #ifndef NO_IMPLICIT_EXTERN_C
12901       if (in_system_header && current_class_type == NULL
12902           && current_lang_name == lang_name_c)
12903         return NULL;
12904       else
12905 #endif
12906         return no_parameters;
12907     }
12908   /* Check for `(void)', too, which is a special case.  */
12909   else if (token->keyword == RID_VOID
12910            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
12911                == CPP_CLOSE_PAREN))
12912     {
12913       /* Consume the `void' token.  */
12914       cp_lexer_consume_token (parser->lexer);
12915       /* There are no parameters.  */
12916       return no_parameters;
12917     }
12918
12919   /* Parse the parameter-declaration-list.  */
12920   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
12921   /* If a parse error occurred while parsing the
12922      parameter-declaration-list, then the entire
12923      parameter-declaration-clause is erroneous.  */
12924   if (is_error)
12925     return NULL;
12926
12927   /* Peek at the next token.  */
12928   token = cp_lexer_peek_token (parser->lexer);
12929   /* If it's a `,', the clause should terminate with an ellipsis.  */
12930   if (token->type == CPP_COMMA)
12931     {
12932       /* Consume the `,'.  */
12933       cp_lexer_consume_token (parser->lexer);
12934       /* Expect an ellipsis.  */
12935       ellipsis_p
12936         = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
12937     }
12938   /* It might also be `...' if the optional trailing `,' was
12939      omitted.  */
12940   else if (token->type == CPP_ELLIPSIS)
12941     {
12942       /* Consume the `...' token.  */
12943       cp_lexer_consume_token (parser->lexer);
12944       /* And remember that we saw it.  */
12945       ellipsis_p = true;
12946     }
12947   else
12948     ellipsis_p = false;
12949
12950   /* Finish the parameter list.  */
12951   if (parameters && ellipsis_p)
12952     parameters->ellipsis_p = true;
12953
12954   return parameters;
12955 }
12956
12957 /* Parse a parameter-declaration-list.
12958
12959    parameter-declaration-list:
12960      parameter-declaration
12961      parameter-declaration-list , parameter-declaration
12962
12963    Returns a representation of the parameter-declaration-list, as for
12964    cp_parser_parameter_declaration_clause.  However, the
12965    `void_list_node' is never appended to the list.  Upon return,
12966    *IS_ERROR will be true iff an error occurred.  */
12967
12968 static cp_parameter_declarator *
12969 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
12970 {
12971   cp_parameter_declarator *parameters = NULL;
12972   cp_parameter_declarator **tail = &parameters;
12973   bool saved_in_unbraced_linkage_specification_p;
12974
12975   /* Assume all will go well.  */
12976   *is_error = false;
12977   /* The special considerations that apply to a function within an
12978      unbraced linkage specifications do not apply to the parameters
12979      to the function.  */
12980   saved_in_unbraced_linkage_specification_p 
12981     = parser->in_unbraced_linkage_specification_p;
12982   parser->in_unbraced_linkage_specification_p = false;
12983
12984   /* Look for more parameters.  */
12985   while (true)
12986     {
12987       cp_parameter_declarator *parameter;
12988       bool parenthesized_p;
12989       /* Parse the parameter.  */
12990       parameter
12991         = cp_parser_parameter_declaration (parser,
12992                                            /*template_parm_p=*/false,
12993                                            &parenthesized_p);
12994
12995       /* If a parse error occurred parsing the parameter declaration,
12996          then the entire parameter-declaration-list is erroneous.  */
12997       if (!parameter)
12998         {
12999           *is_error = true;
13000           parameters = NULL;
13001           break;
13002         }
13003       /* Add the new parameter to the list.  */
13004       *tail = parameter;
13005       tail = &parameter->next;
13006
13007       /* Peek at the next token.  */
13008       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
13009           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
13010           /* These are for Objective-C++ */
13011           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
13012           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13013         /* The parameter-declaration-list is complete.  */
13014         break;
13015       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
13016         {
13017           cp_token *token;
13018
13019           /* Peek at the next token.  */
13020           token = cp_lexer_peek_nth_token (parser->lexer, 2);
13021           /* If it's an ellipsis, then the list is complete.  */
13022           if (token->type == CPP_ELLIPSIS)
13023             break;
13024           /* Otherwise, there must be more parameters.  Consume the
13025              `,'.  */
13026           cp_lexer_consume_token (parser->lexer);
13027           /* When parsing something like:
13028
13029                 int i(float f, double d)
13030
13031              we can tell after seeing the declaration for "f" that we
13032              are not looking at an initialization of a variable "i",
13033              but rather at the declaration of a function "i".
13034
13035              Due to the fact that the parsing of template arguments
13036              (as specified to a template-id) requires backtracking we
13037              cannot use this technique when inside a template argument
13038              list.  */
13039           if (!parser->in_template_argument_list_p
13040               && !parser->in_type_id_in_expr_p
13041               && cp_parser_uncommitted_to_tentative_parse_p (parser)
13042               /* However, a parameter-declaration of the form
13043                  "foat(f)" (which is a valid declaration of a
13044                  parameter "f") can also be interpreted as an
13045                  expression (the conversion of "f" to "float").  */
13046               && !parenthesized_p)
13047             cp_parser_commit_to_tentative_parse (parser);
13048         }
13049       else
13050         {
13051           cp_parser_error (parser, "expected %<,%> or %<...%>");
13052           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
13053             cp_parser_skip_to_closing_parenthesis (parser,
13054                                                    /*recovering=*/true,
13055                                                    /*or_comma=*/false,
13056                                                    /*consume_paren=*/false);
13057           break;
13058         }
13059     }
13060
13061   parser->in_unbraced_linkage_specification_p
13062     = saved_in_unbraced_linkage_specification_p;
13063
13064   return parameters;
13065 }
13066
13067 /* Parse a parameter declaration.
13068
13069    parameter-declaration:
13070      decl-specifier-seq ... [opt] declarator
13071      decl-specifier-seq declarator = assignment-expression
13072      decl-specifier-seq ... [opt] abstract-declarator [opt]
13073      decl-specifier-seq abstract-declarator [opt] = assignment-expression
13074
13075    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
13076    declares a template parameter.  (In that case, a non-nested `>'
13077    token encountered during the parsing of the assignment-expression
13078    is not interpreted as a greater-than operator.)
13079
13080    Returns a representation of the parameter, or NULL if an error
13081    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
13082    true iff the declarator is of the form "(p)".  */
13083
13084 static cp_parameter_declarator *
13085 cp_parser_parameter_declaration (cp_parser *parser,
13086                                  bool template_parm_p,
13087                                  bool *parenthesized_p)
13088 {
13089   int declares_class_or_enum;
13090   bool greater_than_is_operator_p;
13091   cp_decl_specifier_seq decl_specifiers;
13092   cp_declarator *declarator;
13093   tree default_argument;
13094   cp_token *token;
13095   const char *saved_message;
13096
13097   /* In a template parameter, `>' is not an operator.
13098
13099      [temp.param]
13100
13101      When parsing a default template-argument for a non-type
13102      template-parameter, the first non-nested `>' is taken as the end
13103      of the template parameter-list rather than a greater-than
13104      operator.  */
13105   greater_than_is_operator_p = !template_parm_p;
13106
13107   /* Type definitions may not appear in parameter types.  */
13108   saved_message = parser->type_definition_forbidden_message;
13109   parser->type_definition_forbidden_message
13110     = "types may not be defined in parameter types";
13111
13112   /* Parse the declaration-specifiers.  */
13113   cp_parser_decl_specifier_seq (parser,
13114                                 CP_PARSER_FLAGS_NONE,
13115                                 &decl_specifiers,
13116                                 &declares_class_or_enum);
13117   /* If an error occurred, there's no reason to attempt to parse the
13118      rest of the declaration.  */
13119   if (cp_parser_error_occurred (parser))
13120     {
13121       parser->type_definition_forbidden_message = saved_message;
13122       return NULL;
13123     }
13124
13125   /* Peek at the next token.  */
13126   token = cp_lexer_peek_token (parser->lexer);
13127
13128   /* If the next token is a `)', `,', `=', `>', or `...', then there
13129      is no declarator. However, when variadic templates are enabled,
13130      there may be a declarator following `...'.  */
13131   if (token->type == CPP_CLOSE_PAREN
13132       || token->type == CPP_COMMA
13133       || token->type == CPP_EQ
13134       || token->type == CPP_GREATER)
13135     {
13136       declarator = NULL;
13137       if (parenthesized_p)
13138         *parenthesized_p = false;
13139     }
13140   /* Otherwise, there should be a declarator.  */
13141   else
13142     {
13143       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
13144       parser->default_arg_ok_p = false;
13145
13146       /* After seeing a decl-specifier-seq, if the next token is not a
13147          "(", there is no possibility that the code is a valid
13148          expression.  Therefore, if parsing tentatively, we commit at
13149          this point.  */
13150       if (!parser->in_template_argument_list_p
13151           /* In an expression context, having seen:
13152
13153                (int((char ...
13154
13155              we cannot be sure whether we are looking at a
13156              function-type (taking a "char" as a parameter) or a cast
13157              of some object of type "char" to "int".  */
13158           && !parser->in_type_id_in_expr_p
13159           && cp_parser_uncommitted_to_tentative_parse_p (parser)
13160           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
13161         cp_parser_commit_to_tentative_parse (parser);
13162       /* Parse the declarator.  */
13163       declarator = cp_parser_declarator (parser,
13164                                          CP_PARSER_DECLARATOR_EITHER,
13165                                          /*ctor_dtor_or_conv_p=*/NULL,
13166                                          parenthesized_p,
13167                                          /*member_p=*/false);
13168       parser->default_arg_ok_p = saved_default_arg_ok_p;
13169       /* After the declarator, allow more attributes.  */
13170       decl_specifiers.attributes
13171         = chainon (decl_specifiers.attributes,
13172                    cp_parser_attributes_opt (parser));
13173     }
13174
13175   /* If the next token is an ellipsis, and we have not seen a
13176      declarator name, and the type of the declarator contains parameter
13177      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
13178      a parameter pack expansion expression. Otherwise, leave the
13179      ellipsis for a C-style variadic function. */
13180   token = cp_lexer_peek_token (parser->lexer);
13181   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
13182     {
13183       tree type = decl_specifiers.type;
13184
13185       if (type && DECL_P (type))
13186         type = TREE_TYPE (type);
13187
13188       if (type
13189           && TREE_CODE (type) != TYPE_PACK_EXPANSION
13190           && declarator_can_be_parameter_pack (declarator)
13191           && (!declarator || !declarator->parameter_pack_p)
13192           && uses_parameter_packs (type))
13193         {
13194           /* Consume the `...'. */
13195           cp_lexer_consume_token (parser->lexer);
13196           maybe_warn_variadic_templates ();
13197           
13198           /* Build a pack expansion type */
13199           if (declarator)
13200             declarator->parameter_pack_p = true;
13201           else
13202             decl_specifiers.type = make_pack_expansion (type);
13203         }
13204     }
13205
13206   /* The restriction on defining new types applies only to the type
13207      of the parameter, not to the default argument.  */
13208   parser->type_definition_forbidden_message = saved_message;
13209
13210   /* If the next token is `=', then process a default argument.  */
13211   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13212     {
13213       bool saved_greater_than_is_operator_p;
13214       /* Consume the `='.  */
13215       cp_lexer_consume_token (parser->lexer);
13216
13217       /* If we are defining a class, then the tokens that make up the
13218          default argument must be saved and processed later.  */
13219       if (!template_parm_p && at_class_scope_p ()
13220           && TYPE_BEING_DEFINED (current_class_type))
13221         {
13222           unsigned depth = 0;
13223           cp_token *first_token;
13224           cp_token *token;
13225
13226           /* Add tokens until we have processed the entire default
13227              argument.  We add the range [first_token, token).  */
13228           first_token = cp_lexer_peek_token (parser->lexer);
13229           while (true)
13230             {
13231               bool done = false;
13232
13233               /* Peek at the next token.  */
13234               token = cp_lexer_peek_token (parser->lexer);
13235               /* What we do depends on what token we have.  */
13236               switch (token->type)
13237                 {
13238                   /* In valid code, a default argument must be
13239                      immediately followed by a `,' `)', or `...'.  */
13240                 case CPP_COMMA:
13241                 case CPP_CLOSE_PAREN:
13242                 case CPP_ELLIPSIS:
13243                   /* If we run into a non-nested `;', `}', or `]',
13244                      then the code is invalid -- but the default
13245                      argument is certainly over.  */
13246                 case CPP_SEMICOLON:
13247                 case CPP_CLOSE_BRACE:
13248                 case CPP_CLOSE_SQUARE:
13249                   if (depth == 0)
13250                     done = true;
13251                   /* Update DEPTH, if necessary.  */
13252                   else if (token->type == CPP_CLOSE_PAREN
13253                            || token->type == CPP_CLOSE_BRACE
13254                            || token->type == CPP_CLOSE_SQUARE)
13255                     --depth;
13256                   break;
13257
13258                 case CPP_OPEN_PAREN:
13259                 case CPP_OPEN_SQUARE:
13260                 case CPP_OPEN_BRACE:
13261                   ++depth;
13262                   break;
13263
13264                 case CPP_RSHIFT:
13265                   if (!flag_cpp0x)
13266                     break;
13267                   /* Fall through for C++0x, which treats the `>>'
13268                      operator like two `>' tokens in certain
13269                      cases.  */
13270
13271                 case CPP_GREATER:
13272                   /* If we see a non-nested `>', and `>' is not an
13273                      operator, then it marks the end of the default
13274                      argument.  */
13275                   if (!depth && !greater_than_is_operator_p)
13276                     done = true;
13277                   break;
13278
13279                   /* If we run out of tokens, issue an error message.  */
13280                 case CPP_EOF:
13281                 case CPP_PRAGMA_EOL:
13282                   error ("file ends in default argument");
13283                   done = true;
13284                   break;
13285
13286                 case CPP_NAME:
13287                 case CPP_SCOPE:
13288                   /* In these cases, we should look for template-ids.
13289                      For example, if the default argument is
13290                      `X<int, double>()', we need to do name lookup to
13291                      figure out whether or not `X' is a template; if
13292                      so, the `,' does not end the default argument.
13293
13294                      That is not yet done.  */
13295                   break;
13296
13297                 default:
13298                   break;
13299                 }
13300
13301               /* If we've reached the end, stop.  */
13302               if (done)
13303                 break;
13304
13305               /* Add the token to the token block.  */
13306               token = cp_lexer_consume_token (parser->lexer);
13307             }
13308
13309           /* Create a DEFAULT_ARG to represented the unparsed default
13310              argument.  */
13311           default_argument = make_node (DEFAULT_ARG);
13312           DEFARG_TOKENS (default_argument)
13313             = cp_token_cache_new (first_token, token);
13314           DEFARG_INSTANTIATIONS (default_argument) = NULL;
13315         }
13316       /* Outside of a class definition, we can just parse the
13317          assignment-expression.  */
13318       else
13319         {
13320           bool saved_local_variables_forbidden_p;
13321
13322           /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
13323              set correctly.  */
13324           saved_greater_than_is_operator_p
13325             = parser->greater_than_is_operator_p;
13326           parser->greater_than_is_operator_p = greater_than_is_operator_p;
13327           /* Local variable names (and the `this' keyword) may not
13328              appear in a default argument.  */
13329           saved_local_variables_forbidden_p
13330             = parser->local_variables_forbidden_p;
13331           parser->local_variables_forbidden_p = true;
13332           /* The default argument expression may cause implicitly
13333              defined member functions to be synthesized, which will
13334              result in garbage collection.  We must treat this
13335              situation as if we were within the body of function so as
13336              to avoid collecting live data on the stack.  */
13337           ++function_depth;
13338           /* Parse the assignment-expression.  */
13339           if (template_parm_p)
13340             push_deferring_access_checks (dk_no_deferred);
13341           default_argument
13342             = cp_parser_assignment_expression (parser, /*cast_p=*/false);
13343           if (template_parm_p)
13344             pop_deferring_access_checks ();
13345           /* Restore saved state.  */
13346           --function_depth;
13347           parser->greater_than_is_operator_p
13348             = saved_greater_than_is_operator_p;
13349           parser->local_variables_forbidden_p
13350             = saved_local_variables_forbidden_p;
13351         }
13352       if (!parser->default_arg_ok_p)
13353         {
13354           if (!flag_pedantic_errors)
13355             warning (0, "deprecated use of default argument for parameter of non-function");
13356           else
13357             {
13358               error ("default arguments are only permitted for function parameters");
13359               default_argument = NULL_TREE;
13360             }
13361         }
13362     }
13363   else
13364     default_argument = NULL_TREE;
13365
13366   return make_parameter_declarator (&decl_specifiers,
13367                                     declarator,
13368                                     default_argument);
13369 }
13370
13371 /* Parse a function-body.
13372
13373    function-body:
13374      compound_statement  */
13375
13376 static void
13377 cp_parser_function_body (cp_parser *parser)
13378 {
13379   cp_parser_compound_statement (parser, NULL, false);
13380 }
13381
13382 /* Parse a ctor-initializer-opt followed by a function-body.  Return
13383    true if a ctor-initializer was present.  */
13384
13385 static bool
13386 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
13387 {
13388   tree body;
13389   bool ctor_initializer_p;
13390
13391   /* Begin the function body.  */
13392   body = begin_function_body ();
13393   /* Parse the optional ctor-initializer.  */
13394   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
13395   /* Parse the function-body.  */
13396   cp_parser_function_body (parser);
13397   /* Finish the function body.  */
13398   finish_function_body (body);
13399
13400   return ctor_initializer_p;
13401 }
13402
13403 /* Parse an initializer.
13404
13405    initializer:
13406      = initializer-clause
13407      ( expression-list )
13408
13409    Returns an expression representing the initializer.  If no
13410    initializer is present, NULL_TREE is returned.
13411
13412    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
13413    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
13414    set to FALSE if there is no initializer present.  If there is an
13415    initializer, and it is not a constant-expression, *NON_CONSTANT_P
13416    is set to true; otherwise it is set to false.  */
13417
13418 static tree
13419 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
13420                        bool* non_constant_p)
13421 {
13422   cp_token *token;
13423   tree init;
13424
13425   /* Peek at the next token.  */
13426   token = cp_lexer_peek_token (parser->lexer);
13427
13428   /* Let our caller know whether or not this initializer was
13429      parenthesized.  */
13430   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
13431   /* Assume that the initializer is constant.  */
13432   *non_constant_p = false;
13433
13434   if (token->type == CPP_EQ)
13435     {
13436       /* Consume the `='.  */
13437       cp_lexer_consume_token (parser->lexer);
13438       /* Parse the initializer-clause.  */
13439       init = cp_parser_initializer_clause (parser, non_constant_p);
13440     }
13441   else if (token->type == CPP_OPEN_PAREN)
13442     init = cp_parser_parenthesized_expression_list (parser, false,
13443                                                     /*cast_p=*/false,
13444                                                     /*allow_expansion_p=*/true,
13445                                                     non_constant_p);
13446   else
13447     {
13448       /* Anything else is an error.  */
13449       cp_parser_error (parser, "expected initializer");
13450       init = error_mark_node;
13451     }
13452
13453   return init;
13454 }
13455
13456 /* Parse an initializer-clause.
13457
13458    initializer-clause:
13459      assignment-expression
13460      { initializer-list , [opt] }
13461      { }
13462
13463    Returns an expression representing the initializer.
13464
13465    If the `assignment-expression' production is used the value
13466    returned is simply a representation for the expression.
13467
13468    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
13469    the elements of the initializer-list (or NULL, if the last
13470    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
13471    NULL_TREE.  There is no way to detect whether or not the optional
13472    trailing `,' was provided.  NON_CONSTANT_P is as for
13473    cp_parser_initializer.  */
13474
13475 static tree
13476 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
13477 {
13478   tree initializer;
13479
13480   /* Assume the expression is constant.  */
13481   *non_constant_p = false;
13482
13483   /* If it is not a `{', then we are looking at an
13484      assignment-expression.  */
13485   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
13486     {
13487       initializer
13488         = cp_parser_constant_expression (parser,
13489                                         /*allow_non_constant_p=*/true,
13490                                         non_constant_p);
13491       if (!*non_constant_p)
13492         initializer = fold_non_dependent_expr (initializer);
13493     }
13494   else
13495     {
13496       /* Consume the `{' token.  */
13497       cp_lexer_consume_token (parser->lexer);
13498       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
13499       initializer = make_node (CONSTRUCTOR);
13500       /* If it's not a `}', then there is a non-trivial initializer.  */
13501       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
13502         {
13503           /* Parse the initializer list.  */
13504           CONSTRUCTOR_ELTS (initializer)
13505             = cp_parser_initializer_list (parser, non_constant_p);
13506           /* A trailing `,' token is allowed.  */
13507           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
13508             cp_lexer_consume_token (parser->lexer);
13509         }
13510       /* Now, there should be a trailing `}'.  */
13511       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13512     }
13513
13514   return initializer;
13515 }
13516
13517 /* Parse an initializer-list.
13518
13519    initializer-list:
13520      initializer-clause ... [opt]
13521      initializer-list , initializer-clause ... [opt]
13522
13523    GNU Extension:
13524
13525    initializer-list:
13526      identifier : initializer-clause
13527      initializer-list, identifier : initializer-clause
13528
13529    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
13530    for the initializer.  If the INDEX of the elt is non-NULL, it is the
13531    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
13532    as for cp_parser_initializer.  */
13533
13534 static VEC(constructor_elt,gc) *
13535 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
13536 {
13537   VEC(constructor_elt,gc) *v = NULL;
13538
13539   /* Assume all of the expressions are constant.  */
13540   *non_constant_p = false;
13541
13542   /* Parse the rest of the list.  */
13543   while (true)
13544     {
13545       cp_token *token;
13546       tree identifier;
13547       tree initializer;
13548       bool clause_non_constant_p;
13549
13550       /* If the next token is an identifier and the following one is a
13551          colon, we are looking at the GNU designated-initializer
13552          syntax.  */
13553       if (cp_parser_allow_gnu_extensions_p (parser)
13554           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
13555           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
13556         {
13557           /* Warn the user that they are using an extension.  */
13558           if (pedantic)
13559             pedwarn ("ISO C++ does not allow designated initializers");
13560           /* Consume the identifier.  */
13561           identifier = cp_lexer_consume_token (parser->lexer)->u.value;
13562           /* Consume the `:'.  */
13563           cp_lexer_consume_token (parser->lexer);
13564         }
13565       else
13566         identifier = NULL_TREE;
13567
13568       /* Parse the initializer.  */
13569       initializer = cp_parser_initializer_clause (parser,
13570                                                   &clause_non_constant_p);
13571       /* If any clause is non-constant, so is the entire initializer.  */
13572       if (clause_non_constant_p)
13573         *non_constant_p = true;
13574
13575       /* If we have an ellipsis, this is an initializer pack
13576          expansion.  */
13577       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
13578         {
13579           /* Consume the `...'.  */
13580           cp_lexer_consume_token (parser->lexer);
13581
13582           /* Turn the initializer into an initializer expansion.  */
13583           initializer = make_pack_expansion (initializer);
13584         }
13585
13586       /* Add it to the vector.  */
13587       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
13588
13589       /* If the next token is not a comma, we have reached the end of
13590          the list.  */
13591       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13592         break;
13593
13594       /* Peek at the next token.  */
13595       token = cp_lexer_peek_nth_token (parser->lexer, 2);
13596       /* If the next token is a `}', then we're still done.  An
13597          initializer-clause can have a trailing `,' after the
13598          initializer-list and before the closing `}'.  */
13599       if (token->type == CPP_CLOSE_BRACE)
13600         break;
13601
13602       /* Consume the `,' token.  */
13603       cp_lexer_consume_token (parser->lexer);
13604     }
13605
13606   return v;
13607 }
13608
13609 /* Classes [gram.class] */
13610
13611 /* Parse a class-name.
13612
13613    class-name:
13614      identifier
13615      template-id
13616
13617    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
13618    to indicate that names looked up in dependent types should be
13619    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
13620    keyword has been used to indicate that the name that appears next
13621    is a template.  TAG_TYPE indicates the explicit tag given before
13622    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
13623    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
13624    is the class being defined in a class-head.
13625
13626    Returns the TYPE_DECL representing the class.  */
13627
13628 static tree
13629 cp_parser_class_name (cp_parser *parser,
13630                       bool typename_keyword_p,
13631                       bool template_keyword_p,
13632                       enum tag_types tag_type,
13633                       bool check_dependency_p,
13634                       bool class_head_p,
13635                       bool is_declaration)
13636 {
13637   tree decl;
13638   tree scope;
13639   bool typename_p;
13640   cp_token *token;
13641
13642   /* All class-names start with an identifier.  */
13643   token = cp_lexer_peek_token (parser->lexer);
13644   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
13645     {
13646       cp_parser_error (parser, "expected class-name");
13647       return error_mark_node;
13648     }
13649
13650   /* PARSER->SCOPE can be cleared when parsing the template-arguments
13651      to a template-id, so we save it here.  */
13652   scope = parser->scope;
13653   if (scope == error_mark_node)
13654     return error_mark_node;
13655
13656   /* Any name names a type if we're following the `typename' keyword
13657      in a qualified name where the enclosing scope is type-dependent.  */
13658   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
13659                 && dependent_type_p (scope));
13660   /* Handle the common case (an identifier, but not a template-id)
13661      efficiently.  */
13662   if (token->type == CPP_NAME
13663       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
13664     {
13665       cp_token *identifier_token;
13666       tree identifier;
13667       bool ambiguous_p;
13668
13669       /* Look for the identifier.  */
13670       identifier_token = cp_lexer_peek_token (parser->lexer);
13671       ambiguous_p = identifier_token->ambiguous_p;
13672       identifier = cp_parser_identifier (parser);
13673       /* If the next token isn't an identifier, we are certainly not
13674          looking at a class-name.  */
13675       if (identifier == error_mark_node)
13676         decl = error_mark_node;
13677       /* If we know this is a type-name, there's no need to look it
13678          up.  */
13679       else if (typename_p)
13680         decl = identifier;
13681       else
13682         {
13683           tree ambiguous_decls;
13684           /* If we already know that this lookup is ambiguous, then
13685              we've already issued an error message; there's no reason
13686              to check again.  */
13687           if (ambiguous_p)
13688             {
13689               cp_parser_simulate_error (parser);
13690               return error_mark_node;
13691             }
13692           /* If the next token is a `::', then the name must be a type
13693              name.
13694
13695              [basic.lookup.qual]
13696
13697              During the lookup for a name preceding the :: scope
13698              resolution operator, object, function, and enumerator
13699              names are ignored.  */
13700           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13701             tag_type = typename_type;
13702           /* Look up the name.  */
13703           decl = cp_parser_lookup_name (parser, identifier,
13704                                         tag_type,
13705                                         /*is_template=*/false,
13706                                         /*is_namespace=*/false,
13707                                         check_dependency_p,
13708                                         &ambiguous_decls);
13709           if (ambiguous_decls)
13710             {
13711               error ("reference to %qD is ambiguous", identifier);
13712               print_candidates (ambiguous_decls);
13713               if (cp_parser_parsing_tentatively (parser))
13714                 {
13715                   identifier_token->ambiguous_p = true;
13716                   cp_parser_simulate_error (parser);
13717                 }
13718               return error_mark_node;
13719             }
13720         }
13721     }
13722   else
13723     {
13724       /* Try a template-id.  */
13725       decl = cp_parser_template_id (parser, template_keyword_p,
13726                                     check_dependency_p,
13727                                     is_declaration);
13728       if (decl == error_mark_node)
13729         return error_mark_node;
13730     }
13731
13732   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
13733
13734   /* If this is a typename, create a TYPENAME_TYPE.  */
13735   if (typename_p && decl != error_mark_node)
13736     {
13737       decl = make_typename_type (scope, decl, typename_type,
13738                                  /*complain=*/tf_error);
13739       if (decl != error_mark_node)
13740         decl = TYPE_NAME (decl);
13741     }
13742
13743   /* Check to see that it is really the name of a class.  */
13744   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
13745       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
13746       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13747     /* Situations like this:
13748
13749          template <typename T> struct A {
13750            typename T::template X<int>::I i;
13751          };
13752
13753        are problematic.  Is `T::template X<int>' a class-name?  The
13754        standard does not seem to be definitive, but there is no other
13755        valid interpretation of the following `::'.  Therefore, those
13756        names are considered class-names.  */
13757     {
13758       decl = make_typename_type (scope, decl, tag_type, tf_error);
13759       if (decl != error_mark_node)
13760         decl = TYPE_NAME (decl);
13761     }
13762   else if (TREE_CODE (decl) != TYPE_DECL
13763            || TREE_TYPE (decl) == error_mark_node
13764            || !IS_AGGR_TYPE (TREE_TYPE (decl)))
13765     decl = error_mark_node;
13766
13767   if (decl == error_mark_node)
13768     cp_parser_error (parser, "expected class-name");
13769
13770   return decl;
13771 }
13772
13773 /* Parse a class-specifier.
13774
13775    class-specifier:
13776      class-head { member-specification [opt] }
13777
13778    Returns the TREE_TYPE representing the class.  */
13779
13780 static tree
13781 cp_parser_class_specifier (cp_parser* parser)
13782 {
13783   cp_token *token;
13784   tree type;
13785   tree attributes = NULL_TREE;
13786   int has_trailing_semicolon;
13787   bool nested_name_specifier_p;
13788   unsigned saved_num_template_parameter_lists;
13789   bool saved_in_function_body;
13790   tree old_scope = NULL_TREE;
13791   tree scope = NULL_TREE;
13792   tree bases;
13793
13794   push_deferring_access_checks (dk_no_deferred);
13795
13796   /* Parse the class-head.  */
13797   type = cp_parser_class_head (parser,
13798                                &nested_name_specifier_p,
13799                                &attributes,
13800                                &bases);
13801   /* If the class-head was a semantic disaster, skip the entire body
13802      of the class.  */
13803   if (!type)
13804     {
13805       cp_parser_skip_to_end_of_block_or_statement (parser);
13806       pop_deferring_access_checks ();
13807       return error_mark_node;
13808     }
13809
13810   /* Look for the `{'.  */
13811   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
13812     {
13813       pop_deferring_access_checks ();
13814       return error_mark_node;
13815     }
13816
13817   /* Process the base classes. If they're invalid, skip the 
13818      entire class body.  */
13819   if (!xref_basetypes (type, bases))
13820     {
13821       cp_parser_skip_to_closing_brace (parser);
13822
13823       /* Consuming the closing brace yields better error messages
13824          later on.  */
13825       cp_lexer_consume_token (parser->lexer);
13826       pop_deferring_access_checks ();
13827       return error_mark_node;
13828     }
13829
13830   /* Issue an error message if type-definitions are forbidden here.  */
13831   cp_parser_check_type_definition (parser);
13832   /* Remember that we are defining one more class.  */
13833   ++parser->num_classes_being_defined;
13834   /* Inside the class, surrounding template-parameter-lists do not
13835      apply.  */
13836   saved_num_template_parameter_lists
13837     = parser->num_template_parameter_lists;
13838   parser->num_template_parameter_lists = 0;
13839   /* We are not in a function body.  */
13840   saved_in_function_body = parser->in_function_body;
13841   parser->in_function_body = false;
13842
13843   /* Start the class.  */
13844   if (nested_name_specifier_p)
13845     {
13846       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
13847       old_scope = push_inner_scope (scope);
13848     }
13849   type = begin_class_definition (type, attributes);
13850
13851   if (type == error_mark_node)
13852     /* If the type is erroneous, skip the entire body of the class.  */
13853     cp_parser_skip_to_closing_brace (parser);
13854   else
13855     /* Parse the member-specification.  */
13856     cp_parser_member_specification_opt (parser);
13857
13858   /* Look for the trailing `}'.  */
13859   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13860   /* We get better error messages by noticing a common problem: a
13861      missing trailing `;'.  */
13862   token = cp_lexer_peek_token (parser->lexer);
13863   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
13864   /* Look for trailing attributes to apply to this class.  */
13865   if (cp_parser_allow_gnu_extensions_p (parser))
13866     attributes = cp_parser_attributes_opt (parser);
13867   if (type != error_mark_node)
13868     type = finish_struct (type, attributes);
13869   if (nested_name_specifier_p)
13870     pop_inner_scope (old_scope, scope);
13871   /* If this class is not itself within the scope of another class,
13872      then we need to parse the bodies of all of the queued function
13873      definitions.  Note that the queued functions defined in a class
13874      are not always processed immediately following the
13875      class-specifier for that class.  Consider:
13876
13877        struct A {
13878          struct B { void f() { sizeof (A); } };
13879        };
13880
13881      If `f' were processed before the processing of `A' were
13882      completed, there would be no way to compute the size of `A'.
13883      Note that the nesting we are interested in here is lexical --
13884      not the semantic nesting given by TYPE_CONTEXT.  In particular,
13885      for:
13886
13887        struct A { struct B; };
13888        struct A::B { void f() { } };
13889
13890      there is no need to delay the parsing of `A::B::f'.  */
13891   if (--parser->num_classes_being_defined == 0)
13892     {
13893       tree queue_entry;
13894       tree fn;
13895       tree class_type = NULL_TREE;
13896       tree pushed_scope = NULL_TREE;
13897
13898       /* In a first pass, parse default arguments to the functions.
13899          Then, in a second pass, parse the bodies of the functions.
13900          This two-phased approach handles cases like:
13901
13902             struct S {
13903               void f() { g(); }
13904               void g(int i = 3);
13905             };
13906
13907          */
13908       for (TREE_PURPOSE (parser->unparsed_functions_queues)
13909              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
13910            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
13911            TREE_PURPOSE (parser->unparsed_functions_queues)
13912              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
13913         {
13914           fn = TREE_VALUE (queue_entry);
13915           /* If there are default arguments that have not yet been processed,
13916              take care of them now.  */
13917           if (class_type != TREE_PURPOSE (queue_entry))
13918             {
13919               if (pushed_scope)
13920                 pop_scope (pushed_scope);
13921               class_type = TREE_PURPOSE (queue_entry);
13922               pushed_scope = push_scope (class_type);
13923             }
13924           /* Make sure that any template parameters are in scope.  */
13925           maybe_begin_member_template_processing (fn);
13926           /* Parse the default argument expressions.  */
13927           cp_parser_late_parsing_default_args (parser, fn);
13928           /* Remove any template parameters from the symbol table.  */
13929           maybe_end_member_template_processing ();
13930         }
13931       if (pushed_scope)
13932         pop_scope (pushed_scope);
13933       /* Now parse the body of the functions.  */
13934       for (TREE_VALUE (parser->unparsed_functions_queues)
13935              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
13936            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
13937            TREE_VALUE (parser->unparsed_functions_queues)
13938              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
13939         {
13940           /* Figure out which function we need to process.  */
13941           fn = TREE_VALUE (queue_entry);
13942           /* Parse the function.  */
13943           cp_parser_late_parsing_for_member (parser, fn);
13944         }
13945     }
13946
13947   /* Put back any saved access checks.  */
13948   pop_deferring_access_checks ();
13949
13950   /* Restore saved state.  */
13951   parser->in_function_body = saved_in_function_body;
13952   parser->num_template_parameter_lists
13953     = saved_num_template_parameter_lists;
13954
13955   return type;
13956 }
13957
13958 /* Parse a class-head.
13959
13960    class-head:
13961      class-key identifier [opt] base-clause [opt]
13962      class-key nested-name-specifier identifier base-clause [opt]
13963      class-key nested-name-specifier [opt] template-id
13964        base-clause [opt]
13965
13966    GNU Extensions:
13967      class-key attributes identifier [opt] base-clause [opt]
13968      class-key attributes nested-name-specifier identifier base-clause [opt]
13969      class-key attributes nested-name-specifier [opt] template-id
13970        base-clause [opt]
13971
13972    Upon return BASES is initialized to the list of base classes (or
13973    NULL, if there are none) in the same form returned by
13974    cp_parser_base_clause.
13975
13976    Returns the TYPE of the indicated class.  Sets
13977    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
13978    involving a nested-name-specifier was used, and FALSE otherwise.
13979
13980    Returns error_mark_node if this is not a class-head.
13981
13982    Returns NULL_TREE if the class-head is syntactically valid, but
13983    semantically invalid in a way that means we should skip the entire
13984    body of the class.  */
13985
13986 static tree
13987 cp_parser_class_head (cp_parser* parser,
13988                       bool* nested_name_specifier_p,
13989                       tree *attributes_p,
13990                       tree *bases)
13991 {
13992   tree nested_name_specifier;
13993   enum tag_types class_key;
13994   tree id = NULL_TREE;
13995   tree type = NULL_TREE;
13996   tree attributes;
13997   bool template_id_p = false;
13998   bool qualified_p = false;
13999   bool invalid_nested_name_p = false;
14000   bool invalid_explicit_specialization_p = false;
14001   tree pushed_scope = NULL_TREE;
14002   unsigned num_templates;
14003
14004   /* Assume no nested-name-specifier will be present.  */
14005   *nested_name_specifier_p = false;
14006   /* Assume no template parameter lists will be used in defining the
14007      type.  */
14008   num_templates = 0;
14009
14010   *bases = NULL_TREE;
14011
14012   /* Look for the class-key.  */
14013   class_key = cp_parser_class_key (parser);
14014   if (class_key == none_type)
14015     return error_mark_node;
14016
14017   /* Parse the attributes.  */
14018   attributes = cp_parser_attributes_opt (parser);
14019
14020   /* If the next token is `::', that is invalid -- but sometimes
14021      people do try to write:
14022
14023        struct ::S {};
14024
14025      Handle this gracefully by accepting the extra qualifier, and then
14026      issuing an error about it later if this really is a
14027      class-head.  If it turns out just to be an elaborated type
14028      specifier, remain silent.  */
14029   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
14030     qualified_p = true;
14031
14032   push_deferring_access_checks (dk_no_check);
14033
14034   /* Determine the name of the class.  Begin by looking for an
14035      optional nested-name-specifier.  */
14036   nested_name_specifier
14037     = cp_parser_nested_name_specifier_opt (parser,
14038                                            /*typename_keyword_p=*/false,
14039                                            /*check_dependency_p=*/false,
14040                                            /*type_p=*/false,
14041                                            /*is_declaration=*/false);
14042   /* If there was a nested-name-specifier, then there *must* be an
14043      identifier.  */
14044   if (nested_name_specifier)
14045     {
14046       /* Although the grammar says `identifier', it really means
14047          `class-name' or `template-name'.  You are only allowed to
14048          define a class that has already been declared with this
14049          syntax.
14050
14051          The proposed resolution for Core Issue 180 says that wherever
14052          you see `class T::X' you should treat `X' as a type-name.
14053
14054          It is OK to define an inaccessible class; for example:
14055
14056            class A { class B; };
14057            class A::B {};
14058
14059          We do not know if we will see a class-name, or a
14060          template-name.  We look for a class-name first, in case the
14061          class-name is a template-id; if we looked for the
14062          template-name first we would stop after the template-name.  */
14063       cp_parser_parse_tentatively (parser);
14064       type = cp_parser_class_name (parser,
14065                                    /*typename_keyword_p=*/false,
14066                                    /*template_keyword_p=*/false,
14067                                    class_type,
14068                                    /*check_dependency_p=*/false,
14069                                    /*class_head_p=*/true,
14070                                    /*is_declaration=*/false);
14071       /* If that didn't work, ignore the nested-name-specifier.  */
14072       if (!cp_parser_parse_definitely (parser))
14073         {
14074           invalid_nested_name_p = true;
14075           id = cp_parser_identifier (parser);
14076           if (id == error_mark_node)
14077             id = NULL_TREE;
14078         }
14079       /* If we could not find a corresponding TYPE, treat this
14080          declaration like an unqualified declaration.  */
14081       if (type == error_mark_node)
14082         nested_name_specifier = NULL_TREE;
14083       /* Otherwise, count the number of templates used in TYPE and its
14084          containing scopes.  */
14085       else
14086         {
14087           tree scope;
14088
14089           for (scope = TREE_TYPE (type);
14090                scope && TREE_CODE (scope) != NAMESPACE_DECL;
14091                scope = (TYPE_P (scope)
14092                         ? TYPE_CONTEXT (scope)
14093                         : DECL_CONTEXT (scope)))
14094             if (TYPE_P (scope)
14095                 && CLASS_TYPE_P (scope)
14096                 && CLASSTYPE_TEMPLATE_INFO (scope)
14097                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
14098                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
14099               ++num_templates;
14100         }
14101     }
14102   /* Otherwise, the identifier is optional.  */
14103   else
14104     {
14105       /* We don't know whether what comes next is a template-id,
14106          an identifier, or nothing at all.  */
14107       cp_parser_parse_tentatively (parser);
14108       /* Check for a template-id.  */
14109       id = cp_parser_template_id (parser,
14110                                   /*template_keyword_p=*/false,
14111                                   /*check_dependency_p=*/true,
14112                                   /*is_declaration=*/true);
14113       /* If that didn't work, it could still be an identifier.  */
14114       if (!cp_parser_parse_definitely (parser))
14115         {
14116           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
14117             id = cp_parser_identifier (parser);
14118           else
14119             id = NULL_TREE;
14120         }
14121       else
14122         {
14123           template_id_p = true;
14124           ++num_templates;
14125         }
14126     }
14127
14128   pop_deferring_access_checks ();
14129
14130   if (id)
14131     cp_parser_check_for_invalid_template_id (parser, id);
14132
14133   /* If it's not a `:' or a `{' then we can't really be looking at a
14134      class-head, since a class-head only appears as part of a
14135      class-specifier.  We have to detect this situation before calling
14136      xref_tag, since that has irreversible side-effects.  */
14137   if (!cp_parser_next_token_starts_class_definition_p (parser))
14138     {
14139       cp_parser_error (parser, "expected %<{%> or %<:%>");
14140       return error_mark_node;
14141     }
14142
14143   /* At this point, we're going ahead with the class-specifier, even
14144      if some other problem occurs.  */
14145   cp_parser_commit_to_tentative_parse (parser);
14146   /* Issue the error about the overly-qualified name now.  */
14147   if (qualified_p)
14148     cp_parser_error (parser,
14149                      "global qualification of class name is invalid");
14150   else if (invalid_nested_name_p)
14151     cp_parser_error (parser,
14152                      "qualified name does not name a class");
14153   else if (nested_name_specifier)
14154     {
14155       tree scope;
14156
14157       /* Reject typedef-names in class heads.  */
14158       if (!DECL_IMPLICIT_TYPEDEF_P (type))
14159         {
14160           error ("invalid class name in declaration of %qD", type);
14161           type = NULL_TREE;
14162           goto done;
14163         }
14164
14165       /* Figure out in what scope the declaration is being placed.  */
14166       scope = current_scope ();
14167       /* If that scope does not contain the scope in which the
14168          class was originally declared, the program is invalid.  */
14169       if (scope && !is_ancestor (scope, nested_name_specifier))
14170         {
14171           error ("declaration of %qD in %qD which does not enclose %qD",
14172                  type, scope, nested_name_specifier);
14173           type = NULL_TREE;
14174           goto done;
14175         }
14176       /* [dcl.meaning]
14177
14178          A declarator-id shall not be qualified exception of the
14179          definition of a ... nested class outside of its class
14180          ... [or] a the definition or explicit instantiation of a
14181          class member of a namespace outside of its namespace.  */
14182       if (scope == nested_name_specifier)
14183         {
14184           pedwarn ("extra qualification ignored");
14185           nested_name_specifier = NULL_TREE;
14186           num_templates = 0;
14187         }
14188     }
14189   /* An explicit-specialization must be preceded by "template <>".  If
14190      it is not, try to recover gracefully.  */
14191   if (at_namespace_scope_p ()
14192       && parser->num_template_parameter_lists == 0
14193       && template_id_p)
14194     {
14195       error ("an explicit specialization must be preceded by %<template <>%>");
14196       invalid_explicit_specialization_p = true;
14197       /* Take the same action that would have been taken by
14198          cp_parser_explicit_specialization.  */
14199       ++parser->num_template_parameter_lists;
14200       begin_specialization ();
14201     }
14202   /* There must be no "return" statements between this point and the
14203      end of this function; set "type "to the correct return value and
14204      use "goto done;" to return.  */
14205   /* Make sure that the right number of template parameters were
14206      present.  */
14207   if (!cp_parser_check_template_parameters (parser, num_templates))
14208     {
14209       /* If something went wrong, there is no point in even trying to
14210          process the class-definition.  */
14211       type = NULL_TREE;
14212       goto done;
14213     }
14214
14215   /* Look up the type.  */
14216   if (template_id_p)
14217     {
14218       type = TREE_TYPE (id);
14219       type = maybe_process_partial_specialization (type);
14220       if (nested_name_specifier)
14221         pushed_scope = push_scope (nested_name_specifier);
14222     }
14223   else if (nested_name_specifier)
14224     {
14225       tree class_type;
14226
14227       /* Given:
14228
14229             template <typename T> struct S { struct T };
14230             template <typename T> struct S<T>::T { };
14231
14232          we will get a TYPENAME_TYPE when processing the definition of
14233          `S::T'.  We need to resolve it to the actual type before we
14234          try to define it.  */
14235       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
14236         {
14237           class_type = resolve_typename_type (TREE_TYPE (type),
14238                                               /*only_current_p=*/false);
14239           if (class_type != error_mark_node)
14240             type = TYPE_NAME (class_type);
14241           else
14242             {
14243               cp_parser_error (parser, "could not resolve typename type");
14244               type = error_mark_node;
14245             }
14246         }
14247
14248       maybe_process_partial_specialization (TREE_TYPE (type));
14249       class_type = current_class_type;
14250       /* Enter the scope indicated by the nested-name-specifier.  */
14251       pushed_scope = push_scope (nested_name_specifier);
14252       /* Get the canonical version of this type.  */
14253       type = TYPE_MAIN_DECL (TREE_TYPE (type));
14254       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
14255           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
14256         {
14257           type = push_template_decl (type);
14258           if (type == error_mark_node)
14259             {
14260               type = NULL_TREE;
14261               goto done;
14262             }
14263         }
14264
14265       type = TREE_TYPE (type);
14266       *nested_name_specifier_p = true;
14267     }
14268   else      /* The name is not a nested name.  */
14269     {
14270       /* If the class was unnamed, create a dummy name.  */
14271       if (!id)
14272         id = make_anon_name ();
14273       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
14274                        parser->num_template_parameter_lists);
14275     }
14276
14277   /* Indicate whether this class was declared as a `class' or as a
14278      `struct'.  */
14279   if (TREE_CODE (type) == RECORD_TYPE)
14280     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
14281   cp_parser_check_class_key (class_key, type);
14282
14283   /* If this type was already complete, and we see another definition,
14284      that's an error.  */
14285   if (type != error_mark_node && COMPLETE_TYPE_P (type))
14286     {
14287       error ("redefinition of %q#T", type);
14288       error ("previous definition of %q+#T", type);
14289       type = NULL_TREE;
14290       goto done;
14291     }
14292   else if (type == error_mark_node)
14293     type = NULL_TREE;
14294
14295   /* We will have entered the scope containing the class; the names of
14296      base classes should be looked up in that context.  For example:
14297
14298        struct A { struct B {}; struct C; };
14299        struct A::C : B {};
14300
14301      is valid.  */
14302
14303   /* Get the list of base-classes, if there is one.  */
14304   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14305     *bases = cp_parser_base_clause (parser);
14306
14307  done:
14308   /* Leave the scope given by the nested-name-specifier.  We will
14309      enter the class scope itself while processing the members.  */
14310   if (pushed_scope)
14311     pop_scope (pushed_scope);
14312
14313   if (invalid_explicit_specialization_p)
14314     {
14315       end_specialization ();
14316       --parser->num_template_parameter_lists;
14317     }
14318   *attributes_p = attributes;
14319   return type;
14320 }
14321
14322 /* Parse a class-key.
14323
14324    class-key:
14325      class
14326      struct
14327      union
14328
14329    Returns the kind of class-key specified, or none_type to indicate
14330    error.  */
14331
14332 static enum tag_types
14333 cp_parser_class_key (cp_parser* parser)
14334 {
14335   cp_token *token;
14336   enum tag_types tag_type;
14337
14338   /* Look for the class-key.  */
14339   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
14340   if (!token)
14341     return none_type;
14342
14343   /* Check to see if the TOKEN is a class-key.  */
14344   tag_type = cp_parser_token_is_class_key (token);
14345   if (!tag_type)
14346     cp_parser_error (parser, "expected class-key");
14347   return tag_type;
14348 }
14349
14350 /* Parse an (optional) member-specification.
14351
14352    member-specification:
14353      member-declaration member-specification [opt]
14354      access-specifier : member-specification [opt]  */
14355
14356 static void
14357 cp_parser_member_specification_opt (cp_parser* parser)
14358 {
14359   while (true)
14360     {
14361       cp_token *token;
14362       enum rid keyword;
14363
14364       /* Peek at the next token.  */
14365       token = cp_lexer_peek_token (parser->lexer);
14366       /* If it's a `}', or EOF then we've seen all the members.  */
14367       if (token->type == CPP_CLOSE_BRACE
14368           || token->type == CPP_EOF
14369           || token->type == CPP_PRAGMA_EOL)
14370         break;
14371
14372       /* See if this token is a keyword.  */
14373       keyword = token->keyword;
14374       switch (keyword)
14375         {
14376         case RID_PUBLIC:
14377         case RID_PROTECTED:
14378         case RID_PRIVATE:
14379           /* Consume the access-specifier.  */
14380           cp_lexer_consume_token (parser->lexer);
14381           /* Remember which access-specifier is active.  */
14382           current_access_specifier = token->u.value;
14383           /* Look for the `:'.  */
14384           cp_parser_require (parser, CPP_COLON, "`:'");
14385           break;
14386
14387         default:
14388           /* Accept #pragmas at class scope.  */
14389           if (token->type == CPP_PRAGMA)
14390             {
14391               cp_parser_pragma (parser, pragma_external);
14392               break;
14393             }
14394
14395           /* Otherwise, the next construction must be a
14396              member-declaration.  */
14397           cp_parser_member_declaration (parser);
14398         }
14399     }
14400 }
14401
14402 /* Parse a member-declaration.
14403
14404    member-declaration:
14405      decl-specifier-seq [opt] member-declarator-list [opt] ;
14406      function-definition ; [opt]
14407      :: [opt] nested-name-specifier template [opt] unqualified-id ;
14408      using-declaration
14409      template-declaration
14410
14411    member-declarator-list:
14412      member-declarator
14413      member-declarator-list , member-declarator
14414
14415    member-declarator:
14416      declarator pure-specifier [opt]
14417      declarator constant-initializer [opt]
14418      identifier [opt] : constant-expression
14419
14420    GNU Extensions:
14421
14422    member-declaration:
14423      __extension__ member-declaration
14424
14425    member-declarator:
14426      declarator attributes [opt] pure-specifier [opt]
14427      declarator attributes [opt] constant-initializer [opt]
14428      identifier [opt] attributes [opt] : constant-expression  
14429
14430    C++0x Extensions:
14431
14432    member-declaration:
14433      static_assert-declaration  */
14434
14435 static void
14436 cp_parser_member_declaration (cp_parser* parser)
14437 {
14438   cp_decl_specifier_seq decl_specifiers;
14439   tree prefix_attributes;
14440   tree decl;
14441   int declares_class_or_enum;
14442   bool friend_p;
14443   cp_token *token;
14444   int saved_pedantic;
14445
14446   /* Check for the `__extension__' keyword.  */
14447   if (cp_parser_extension_opt (parser, &saved_pedantic))
14448     {
14449       /* Recurse.  */
14450       cp_parser_member_declaration (parser);
14451       /* Restore the old value of the PEDANTIC flag.  */
14452       pedantic = saved_pedantic;
14453
14454       return;
14455     }
14456
14457   /* Check for a template-declaration.  */
14458   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
14459     {
14460       /* An explicit specialization here is an error condition, and we
14461          expect the specialization handler to detect and report this.  */
14462       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
14463           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
14464         cp_parser_explicit_specialization (parser);
14465       else
14466         cp_parser_template_declaration (parser, /*member_p=*/true);
14467
14468       return;
14469     }
14470
14471   /* Check for a using-declaration.  */
14472   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
14473     {
14474       /* Parse the using-declaration.  */
14475       cp_parser_using_declaration (parser,
14476                                    /*access_declaration_p=*/false);
14477       return;
14478     }
14479
14480   /* Check for @defs.  */
14481   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
14482     {
14483       tree ivar, member;
14484       tree ivar_chains = cp_parser_objc_defs_expression (parser);
14485       ivar = ivar_chains;
14486       while (ivar)
14487         {
14488           member = ivar;
14489           ivar = TREE_CHAIN (member);
14490           TREE_CHAIN (member) = NULL_TREE;
14491           finish_member_declaration (member);
14492         }
14493       return;
14494     }
14495
14496   /* If the next token is `static_assert' we have a static assertion.  */
14497   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
14498     {
14499       cp_parser_static_assert (parser, /*member_p=*/true);
14500       return;
14501     }
14502
14503   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
14504     return;
14505
14506   /* Parse the decl-specifier-seq.  */
14507   cp_parser_decl_specifier_seq (parser,
14508                                 CP_PARSER_FLAGS_OPTIONAL,
14509                                 &decl_specifiers,
14510                                 &declares_class_or_enum);
14511   prefix_attributes = decl_specifiers.attributes;
14512   decl_specifiers.attributes = NULL_TREE;
14513   /* Check for an invalid type-name.  */
14514   if (!decl_specifiers.type
14515       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
14516     return;
14517   /* If there is no declarator, then the decl-specifier-seq should
14518      specify a type.  */
14519   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14520     {
14521       /* If there was no decl-specifier-seq, and the next token is a
14522          `;', then we have something like:
14523
14524            struct S { ; };
14525
14526          [class.mem]
14527
14528          Each member-declaration shall declare at least one member
14529          name of the class.  */
14530       if (!decl_specifiers.any_specifiers_p)
14531         {
14532           cp_token *token = cp_lexer_peek_token (parser->lexer);
14533           if (pedantic && !token->in_system_header)
14534             pedwarn ("%Hextra %<;%>", &token->location);
14535         }
14536       else
14537         {
14538           tree type;
14539
14540           /* See if this declaration is a friend.  */
14541           friend_p = cp_parser_friend_p (&decl_specifiers);
14542           /* If there were decl-specifiers, check to see if there was
14543              a class-declaration.  */
14544           type = check_tag_decl (&decl_specifiers);
14545           /* Nested classes have already been added to the class, but
14546              a `friend' needs to be explicitly registered.  */
14547           if (friend_p)
14548             {
14549               /* If the `friend' keyword was present, the friend must
14550                  be introduced with a class-key.  */
14551                if (!declares_class_or_enum)
14552                  error ("a class-key must be used when declaring a friend");
14553                /* In this case:
14554
14555                     template <typename T> struct A {
14556                       friend struct A<T>::B;
14557                     };
14558
14559                   A<T>::B will be represented by a TYPENAME_TYPE, and
14560                   therefore not recognized by check_tag_decl.  */
14561                if (!type
14562                    && decl_specifiers.type
14563                    && TYPE_P (decl_specifiers.type))
14564                  type = decl_specifiers.type;
14565                if (!type || !TYPE_P (type))
14566                  error ("friend declaration does not name a class or "
14567                         "function");
14568                else
14569                  make_friend_class (current_class_type, type,
14570                                     /*complain=*/true);
14571             }
14572           /* If there is no TYPE, an error message will already have
14573              been issued.  */
14574           else if (!type || type == error_mark_node)
14575             ;
14576           /* An anonymous aggregate has to be handled specially; such
14577              a declaration really declares a data member (with a
14578              particular type), as opposed to a nested class.  */
14579           else if (ANON_AGGR_TYPE_P (type))
14580             {
14581               /* Remove constructors and such from TYPE, now that we
14582                  know it is an anonymous aggregate.  */
14583               fixup_anonymous_aggr (type);
14584               /* And make the corresponding data member.  */
14585               decl = build_decl (FIELD_DECL, NULL_TREE, type);
14586               /* Add it to the class.  */
14587               finish_member_declaration (decl);
14588             }
14589           else
14590             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
14591         }
14592     }
14593   else
14594     {
14595       /* See if these declarations will be friends.  */
14596       friend_p = cp_parser_friend_p (&decl_specifiers);
14597
14598       /* Keep going until we hit the `;' at the end of the
14599          declaration.  */
14600       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
14601         {
14602           tree attributes = NULL_TREE;
14603           tree first_attribute;
14604
14605           /* Peek at the next token.  */
14606           token = cp_lexer_peek_token (parser->lexer);
14607
14608           /* Check for a bitfield declaration.  */
14609           if (token->type == CPP_COLON
14610               || (token->type == CPP_NAME
14611                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
14612                   == CPP_COLON))
14613             {
14614               tree identifier;
14615               tree width;
14616
14617               /* Get the name of the bitfield.  Note that we cannot just
14618                  check TOKEN here because it may have been invalidated by
14619                  the call to cp_lexer_peek_nth_token above.  */
14620               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
14621                 identifier = cp_parser_identifier (parser);
14622               else
14623                 identifier = NULL_TREE;
14624
14625               /* Consume the `:' token.  */
14626               cp_lexer_consume_token (parser->lexer);
14627               /* Get the width of the bitfield.  */
14628               width
14629                 = cp_parser_constant_expression (parser,
14630                                                  /*allow_non_constant=*/false,
14631                                                  NULL);
14632
14633               /* Look for attributes that apply to the bitfield.  */
14634               attributes = cp_parser_attributes_opt (parser);
14635               /* Remember which attributes are prefix attributes and
14636                  which are not.  */
14637               first_attribute = attributes;
14638               /* Combine the attributes.  */
14639               attributes = chainon (prefix_attributes, attributes);
14640
14641               /* Create the bitfield declaration.  */
14642               decl = grokbitfield (identifier
14643                                    ? make_id_declarator (NULL_TREE,
14644                                                          identifier,
14645                                                          sfk_none)
14646                                    : NULL,
14647                                    &decl_specifiers,
14648                                    width);
14649               /* Apply the attributes.  */
14650               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
14651             }
14652           else
14653             {
14654               cp_declarator *declarator;
14655               tree initializer;
14656               tree asm_specification;
14657               int ctor_dtor_or_conv_p;
14658
14659               /* Parse the declarator.  */
14660               declarator
14661                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
14662                                         &ctor_dtor_or_conv_p,
14663                                         /*parenthesized_p=*/NULL,
14664                                         /*member_p=*/true);
14665
14666               /* If something went wrong parsing the declarator, make sure
14667                  that we at least consume some tokens.  */
14668               if (declarator == cp_error_declarator)
14669                 {
14670                   /* Skip to the end of the statement.  */
14671                   cp_parser_skip_to_end_of_statement (parser);
14672                   /* If the next token is not a semicolon, that is
14673                      probably because we just skipped over the body of
14674                      a function.  So, we consume a semicolon if
14675                      present, but do not issue an error message if it
14676                      is not present.  */
14677                   if (cp_lexer_next_token_is (parser->lexer,
14678                                               CPP_SEMICOLON))
14679                     cp_lexer_consume_token (parser->lexer);
14680                   return;
14681                 }
14682
14683               if (declares_class_or_enum & 2)
14684                 cp_parser_check_for_definition_in_return_type
14685                   (declarator, decl_specifiers.type);
14686
14687               /* Look for an asm-specification.  */
14688               asm_specification = cp_parser_asm_specification_opt (parser);
14689               /* Look for attributes that apply to the declaration.  */
14690               attributes = cp_parser_attributes_opt (parser);
14691               /* Remember which attributes are prefix attributes and
14692                  which are not.  */
14693               first_attribute = attributes;
14694               /* Combine the attributes.  */
14695               attributes = chainon (prefix_attributes, attributes);
14696
14697               /* If it's an `=', then we have a constant-initializer or a
14698                  pure-specifier.  It is not correct to parse the
14699                  initializer before registering the member declaration
14700                  since the member declaration should be in scope while
14701                  its initializer is processed.  However, the rest of the
14702                  front end does not yet provide an interface that allows
14703                  us to handle this correctly.  */
14704               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
14705                 {
14706                   /* In [class.mem]:
14707
14708                      A pure-specifier shall be used only in the declaration of
14709                      a virtual function.
14710
14711                      A member-declarator can contain a constant-initializer
14712                      only if it declares a static member of integral or
14713                      enumeration type.
14714
14715                      Therefore, if the DECLARATOR is for a function, we look
14716                      for a pure-specifier; otherwise, we look for a
14717                      constant-initializer.  When we call `grokfield', it will
14718                      perform more stringent semantics checks.  */
14719                   if (function_declarator_p (declarator))
14720                     initializer = cp_parser_pure_specifier (parser);
14721                   else
14722                     /* Parse the initializer.  */
14723                     initializer = cp_parser_constant_initializer (parser);
14724                 }
14725               /* Otherwise, there is no initializer.  */
14726               else
14727                 initializer = NULL_TREE;
14728
14729               /* See if we are probably looking at a function
14730                  definition.  We are certainly not looking at a
14731                  member-declarator.  Calling `grokfield' has
14732                  side-effects, so we must not do it unless we are sure
14733                  that we are looking at a member-declarator.  */
14734               if (cp_parser_token_starts_function_definition_p
14735                   (cp_lexer_peek_token (parser->lexer)))
14736                 {
14737                   /* The grammar does not allow a pure-specifier to be
14738                      used when a member function is defined.  (It is
14739                      possible that this fact is an oversight in the
14740                      standard, since a pure function may be defined
14741                      outside of the class-specifier.  */
14742                   if (initializer)
14743                     error ("pure-specifier on function-definition");
14744                   decl = cp_parser_save_member_function_body (parser,
14745                                                               &decl_specifiers,
14746                                                               declarator,
14747                                                               attributes);
14748                   /* If the member was not a friend, declare it here.  */
14749                   if (!friend_p)
14750                     finish_member_declaration (decl);
14751                   /* Peek at the next token.  */
14752                   token = cp_lexer_peek_token (parser->lexer);
14753                   /* If the next token is a semicolon, consume it.  */
14754                   if (token->type == CPP_SEMICOLON)
14755                     {
14756                       if (pedantic && !in_system_header)
14757                         pedwarn ("extra %<;%>");
14758                       cp_lexer_consume_token (parser->lexer);
14759                     }
14760                   return;
14761                 }
14762               else
14763                 /* Create the declaration.  */
14764                 decl = grokfield (declarator, &decl_specifiers,
14765                                   initializer, /*init_const_expr_p=*/true,
14766                                   asm_specification,
14767                                   attributes);
14768             }
14769
14770           /* Reset PREFIX_ATTRIBUTES.  */
14771           while (attributes && TREE_CHAIN (attributes) != first_attribute)
14772             attributes = TREE_CHAIN (attributes);
14773           if (attributes)
14774             TREE_CHAIN (attributes) = NULL_TREE;
14775
14776           /* If there is any qualification still in effect, clear it
14777              now; we will be starting fresh with the next declarator.  */
14778           parser->scope = NULL_TREE;
14779           parser->qualifying_scope = NULL_TREE;
14780           parser->object_scope = NULL_TREE;
14781           /* If it's a `,', then there are more declarators.  */
14782           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14783             cp_lexer_consume_token (parser->lexer);
14784           /* If the next token isn't a `;', then we have a parse error.  */
14785           else if (cp_lexer_next_token_is_not (parser->lexer,
14786                                                CPP_SEMICOLON))
14787             {
14788               cp_parser_error (parser, "expected %<;%>");
14789               /* Skip tokens until we find a `;'.  */
14790               cp_parser_skip_to_end_of_statement (parser);
14791
14792               break;
14793             }
14794
14795           if (decl)
14796             {
14797               /* Add DECL to the list of members.  */
14798               if (!friend_p)
14799                 finish_member_declaration (decl);
14800
14801               if (TREE_CODE (decl) == FUNCTION_DECL)
14802                 cp_parser_save_default_args (parser, decl);
14803             }
14804         }
14805     }
14806
14807   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14808 }
14809
14810 /* Parse a pure-specifier.
14811
14812    pure-specifier:
14813      = 0
14814
14815    Returns INTEGER_ZERO_NODE if a pure specifier is found.
14816    Otherwise, ERROR_MARK_NODE is returned.  */
14817
14818 static tree
14819 cp_parser_pure_specifier (cp_parser* parser)
14820 {
14821   cp_token *token;
14822
14823   /* Look for the `=' token.  */
14824   if (!cp_parser_require (parser, CPP_EQ, "`='"))
14825     return error_mark_node;
14826   /* Look for the `0' token.  */
14827   token = cp_lexer_consume_token (parser->lexer);
14828   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
14829   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
14830     {
14831       cp_parser_error (parser,
14832                        "invalid pure specifier (only `= 0' is allowed)");
14833       cp_parser_skip_to_end_of_statement (parser);
14834       return error_mark_node;
14835     }
14836   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
14837     {
14838       error ("templates may not be %<virtual%>");
14839       return error_mark_node;
14840     }
14841
14842   return integer_zero_node;
14843 }
14844
14845 /* Parse a constant-initializer.
14846
14847    constant-initializer:
14848      = constant-expression
14849
14850    Returns a representation of the constant-expression.  */
14851
14852 static tree
14853 cp_parser_constant_initializer (cp_parser* parser)
14854 {
14855   /* Look for the `=' token.  */
14856   if (!cp_parser_require (parser, CPP_EQ, "`='"))
14857     return error_mark_node;
14858
14859   /* It is invalid to write:
14860
14861        struct S { static const int i = { 7 }; };
14862
14863      */
14864   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14865     {
14866       cp_parser_error (parser,
14867                        "a brace-enclosed initializer is not allowed here");
14868       /* Consume the opening brace.  */
14869       cp_lexer_consume_token (parser->lexer);
14870       /* Skip the initializer.  */
14871       cp_parser_skip_to_closing_brace (parser);
14872       /* Look for the trailing `}'.  */
14873       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
14874
14875       return error_mark_node;
14876     }
14877
14878   return cp_parser_constant_expression (parser,
14879                                         /*allow_non_constant=*/false,
14880                                         NULL);
14881 }
14882
14883 /* Derived classes [gram.class.derived] */
14884
14885 /* Parse a base-clause.
14886
14887    base-clause:
14888      : base-specifier-list
14889
14890    base-specifier-list:
14891      base-specifier ... [opt]
14892      base-specifier-list , base-specifier ... [opt]
14893
14894    Returns a TREE_LIST representing the base-classes, in the order in
14895    which they were declared.  The representation of each node is as
14896    described by cp_parser_base_specifier.
14897
14898    In the case that no bases are specified, this function will return
14899    NULL_TREE, not ERROR_MARK_NODE.  */
14900
14901 static tree
14902 cp_parser_base_clause (cp_parser* parser)
14903 {
14904   tree bases = NULL_TREE;
14905
14906   /* Look for the `:' that begins the list.  */
14907   cp_parser_require (parser, CPP_COLON, "`:'");
14908
14909   /* Scan the base-specifier-list.  */
14910   while (true)
14911     {
14912       cp_token *token;
14913       tree base;
14914       bool pack_expansion_p = false;
14915
14916       /* Look for the base-specifier.  */
14917       base = cp_parser_base_specifier (parser);
14918       /* Look for the (optional) ellipsis. */
14919       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14920         {
14921           /* Consume the `...'. */
14922           cp_lexer_consume_token (parser->lexer);
14923
14924           pack_expansion_p = true;
14925         }
14926
14927       /* Add BASE to the front of the list.  */
14928       if (base != error_mark_node)
14929         {
14930           if (pack_expansion_p)
14931             /* Make this a pack expansion type. */
14932             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
14933           else
14934             check_for_bare_parameter_packs (TREE_VALUE (base));
14935
14936           TREE_CHAIN (base) = bases;
14937           bases = base;
14938         }
14939       /* Peek at the next token.  */
14940       token = cp_lexer_peek_token (parser->lexer);
14941       /* If it's not a comma, then the list is complete.  */
14942       if (token->type != CPP_COMMA)
14943         break;
14944       /* Consume the `,'.  */
14945       cp_lexer_consume_token (parser->lexer);
14946     }
14947
14948   /* PARSER->SCOPE may still be non-NULL at this point, if the last
14949      base class had a qualified name.  However, the next name that
14950      appears is certainly not qualified.  */
14951   parser->scope = NULL_TREE;
14952   parser->qualifying_scope = NULL_TREE;
14953   parser->object_scope = NULL_TREE;
14954
14955   return nreverse (bases);
14956 }
14957
14958 /* Parse a base-specifier.
14959
14960    base-specifier:
14961      :: [opt] nested-name-specifier [opt] class-name
14962      virtual access-specifier [opt] :: [opt] nested-name-specifier
14963        [opt] class-name
14964      access-specifier virtual [opt] :: [opt] nested-name-specifier
14965        [opt] class-name
14966
14967    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
14968    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
14969    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
14970    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
14971
14972 static tree
14973 cp_parser_base_specifier (cp_parser* parser)
14974 {
14975   cp_token *token;
14976   bool done = false;
14977   bool virtual_p = false;
14978   bool duplicate_virtual_error_issued_p = false;
14979   bool duplicate_access_error_issued_p = false;
14980   bool class_scope_p, template_p;
14981   tree access = access_default_node;
14982   tree type;
14983
14984   /* Process the optional `virtual' and `access-specifier'.  */
14985   while (!done)
14986     {
14987       /* Peek at the next token.  */
14988       token = cp_lexer_peek_token (parser->lexer);
14989       /* Process `virtual'.  */
14990       switch (token->keyword)
14991         {
14992         case RID_VIRTUAL:
14993           /* If `virtual' appears more than once, issue an error.  */
14994           if (virtual_p && !duplicate_virtual_error_issued_p)
14995             {
14996               cp_parser_error (parser,
14997                                "%<virtual%> specified more than once in base-specified");
14998               duplicate_virtual_error_issued_p = true;
14999             }
15000
15001           virtual_p = true;
15002
15003           /* Consume the `virtual' token.  */
15004           cp_lexer_consume_token (parser->lexer);
15005
15006           break;
15007
15008         case RID_PUBLIC:
15009         case RID_PROTECTED:
15010         case RID_PRIVATE:
15011           /* If more than one access specifier appears, issue an
15012              error.  */
15013           if (access != access_default_node
15014               && !duplicate_access_error_issued_p)
15015             {
15016               cp_parser_error (parser,
15017                                "more than one access specifier in base-specified");
15018               duplicate_access_error_issued_p = true;
15019             }
15020
15021           access = ridpointers[(int) token->keyword];
15022
15023           /* Consume the access-specifier.  */
15024           cp_lexer_consume_token (parser->lexer);
15025
15026           break;
15027
15028         default:
15029           done = true;
15030           break;
15031         }
15032     }
15033   /* It is not uncommon to see programs mechanically, erroneously, use
15034      the 'typename' keyword to denote (dependent) qualified types
15035      as base classes.  */
15036   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
15037     {
15038       if (!processing_template_decl)
15039         error ("keyword %<typename%> not allowed outside of templates");
15040       else
15041         error ("keyword %<typename%> not allowed in this context "
15042                "(the base class is implicitly a type)");
15043       cp_lexer_consume_token (parser->lexer);
15044     }
15045
15046   /* Look for the optional `::' operator.  */
15047   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
15048   /* Look for the nested-name-specifier.  The simplest way to
15049      implement:
15050
15051        [temp.res]
15052
15053        The keyword `typename' is not permitted in a base-specifier or
15054        mem-initializer; in these contexts a qualified name that
15055        depends on a template-parameter is implicitly assumed to be a
15056        type name.
15057
15058      is to pretend that we have seen the `typename' keyword at this
15059      point.  */
15060   cp_parser_nested_name_specifier_opt (parser,
15061                                        /*typename_keyword_p=*/true,
15062                                        /*check_dependency_p=*/true,
15063                                        typename_type,
15064                                        /*is_declaration=*/true);
15065   /* If the base class is given by a qualified name, assume that names
15066      we see are type names or templates, as appropriate.  */
15067   class_scope_p = (parser->scope && TYPE_P (parser->scope));
15068   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
15069
15070   /* Finally, look for the class-name.  */
15071   type = cp_parser_class_name (parser,
15072                                class_scope_p,
15073                                template_p,
15074                                typename_type,
15075                                /*check_dependency_p=*/true,
15076                                /*class_head_p=*/false,
15077                                /*is_declaration=*/true);
15078
15079   if (type == error_mark_node)
15080     return error_mark_node;
15081
15082   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
15083 }
15084
15085 /* Exception handling [gram.exception] */
15086
15087 /* Parse an (optional) exception-specification.
15088
15089    exception-specification:
15090      throw ( type-id-list [opt] )
15091
15092    Returns a TREE_LIST representing the exception-specification.  The
15093    TREE_VALUE of each node is a type.  */
15094
15095 static tree
15096 cp_parser_exception_specification_opt (cp_parser* parser)
15097 {
15098   cp_token *token;
15099   tree type_id_list;
15100
15101   /* Peek at the next token.  */
15102   token = cp_lexer_peek_token (parser->lexer);
15103   /* If it's not `throw', then there's no exception-specification.  */
15104   if (!cp_parser_is_keyword (token, RID_THROW))
15105     return NULL_TREE;
15106
15107   /* Consume the `throw'.  */
15108   cp_lexer_consume_token (parser->lexer);
15109
15110   /* Look for the `('.  */
15111   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
15112
15113   /* Peek at the next token.  */
15114   token = cp_lexer_peek_token (parser->lexer);
15115   /* If it's not a `)', then there is a type-id-list.  */
15116   if (token->type != CPP_CLOSE_PAREN)
15117     {
15118       const char *saved_message;
15119
15120       /* Types may not be defined in an exception-specification.  */
15121       saved_message = parser->type_definition_forbidden_message;
15122       parser->type_definition_forbidden_message
15123         = "types may not be defined in an exception-specification";
15124       /* Parse the type-id-list.  */
15125       type_id_list = cp_parser_type_id_list (parser);
15126       /* Restore the saved message.  */
15127       parser->type_definition_forbidden_message = saved_message;
15128     }
15129   else
15130     type_id_list = empty_except_spec;
15131
15132   /* Look for the `)'.  */
15133   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
15134
15135   return type_id_list;
15136 }
15137
15138 /* Parse an (optional) type-id-list.
15139
15140    type-id-list:
15141      type-id ... [opt]
15142      type-id-list , type-id ... [opt]
15143
15144    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
15145    in the order that the types were presented.  */
15146
15147 static tree
15148 cp_parser_type_id_list (cp_parser* parser)
15149 {
15150   tree types = NULL_TREE;
15151
15152   while (true)
15153     {
15154       cp_token *token;
15155       tree type;
15156
15157       /* Get the next type-id.  */
15158       type = cp_parser_type_id (parser);
15159       /* Parse the optional ellipsis. */
15160       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
15161         {
15162           /* Consume the `...'. */
15163           cp_lexer_consume_token (parser->lexer);
15164
15165           /* Turn the type into a pack expansion expression. */
15166           type = make_pack_expansion (type);
15167         }
15168       /* Add it to the list.  */
15169       types = add_exception_specifier (types, type, /*complain=*/1);
15170       /* Peek at the next token.  */
15171       token = cp_lexer_peek_token (parser->lexer);
15172       /* If it is not a `,', we are done.  */
15173       if (token->type != CPP_COMMA)
15174         break;
15175       /* Consume the `,'.  */
15176       cp_lexer_consume_token (parser->lexer);
15177     }
15178
15179   return nreverse (types);
15180 }
15181
15182 /* Parse a try-block.
15183
15184    try-block:
15185      try compound-statement handler-seq  */
15186
15187 static tree
15188 cp_parser_try_block (cp_parser* parser)
15189 {
15190   tree try_block;
15191
15192   cp_parser_require_keyword (parser, RID_TRY, "`try'");
15193   try_block = begin_try_block ();
15194   cp_parser_compound_statement (parser, NULL, true);
15195   finish_try_block (try_block);
15196   cp_parser_handler_seq (parser);
15197   finish_handler_sequence (try_block);
15198
15199   return try_block;
15200 }
15201
15202 /* Parse a function-try-block.
15203
15204    function-try-block:
15205      try ctor-initializer [opt] function-body handler-seq  */
15206
15207 static bool
15208 cp_parser_function_try_block (cp_parser* parser)
15209 {
15210   tree compound_stmt;
15211   tree try_block;
15212   bool ctor_initializer_p;
15213
15214   /* Look for the `try' keyword.  */
15215   if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
15216     return false;
15217   /* Let the rest of the front end know where we are.  */
15218   try_block = begin_function_try_block (&compound_stmt);
15219   /* Parse the function-body.  */
15220   ctor_initializer_p
15221     = cp_parser_ctor_initializer_opt_and_function_body (parser);
15222   /* We're done with the `try' part.  */
15223   finish_function_try_block (try_block);
15224   /* Parse the handlers.  */
15225   cp_parser_handler_seq (parser);
15226   /* We're done with the handlers.  */
15227   finish_function_handler_sequence (try_block, compound_stmt);
15228
15229   return ctor_initializer_p;
15230 }
15231
15232 /* Parse a handler-seq.
15233
15234    handler-seq:
15235      handler handler-seq [opt]  */
15236
15237 static void
15238 cp_parser_handler_seq (cp_parser* parser)
15239 {
15240   while (true)
15241     {
15242       cp_token *token;
15243
15244       /* Parse the handler.  */
15245       cp_parser_handler (parser);
15246       /* Peek at the next token.  */
15247       token = cp_lexer_peek_token (parser->lexer);
15248       /* If it's not `catch' then there are no more handlers.  */
15249       if (!cp_parser_is_keyword (token, RID_CATCH))
15250         break;
15251     }
15252 }
15253
15254 /* Parse a handler.
15255
15256    handler:
15257      catch ( exception-declaration ) compound-statement  */
15258
15259 static void
15260 cp_parser_handler (cp_parser* parser)
15261 {
15262   tree handler;
15263   tree declaration;
15264
15265   cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
15266   handler = begin_handler ();
15267   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
15268   declaration = cp_parser_exception_declaration (parser);
15269   finish_handler_parms (declaration, handler);
15270   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
15271   cp_parser_compound_statement (parser, NULL, false);
15272   finish_handler (handler);
15273 }
15274
15275 /* Parse an exception-declaration.
15276
15277    exception-declaration:
15278      type-specifier-seq declarator
15279      type-specifier-seq abstract-declarator
15280      type-specifier-seq
15281      ...
15282
15283    Returns a VAR_DECL for the declaration, or NULL_TREE if the
15284    ellipsis variant is used.  */
15285
15286 static tree
15287 cp_parser_exception_declaration (cp_parser* parser)
15288 {
15289   cp_decl_specifier_seq type_specifiers;
15290   cp_declarator *declarator;
15291   const char *saved_message;
15292
15293   /* If it's an ellipsis, it's easy to handle.  */
15294   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
15295     {
15296       /* Consume the `...' token.  */
15297       cp_lexer_consume_token (parser->lexer);
15298       return NULL_TREE;
15299     }
15300
15301   /* Types may not be defined in exception-declarations.  */
15302   saved_message = parser->type_definition_forbidden_message;
15303   parser->type_definition_forbidden_message
15304     = "types may not be defined in exception-declarations";
15305
15306   /* Parse the type-specifier-seq.  */
15307   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
15308                                 &type_specifiers);
15309   /* If it's a `)', then there is no declarator.  */
15310   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
15311     declarator = NULL;
15312   else
15313     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
15314                                        /*ctor_dtor_or_conv_p=*/NULL,
15315                                        /*parenthesized_p=*/NULL,
15316                                        /*member_p=*/false);
15317
15318   /* Restore the saved message.  */
15319   parser->type_definition_forbidden_message = saved_message;
15320
15321   if (!type_specifiers.any_specifiers_p)
15322     return error_mark_node;
15323
15324   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
15325 }
15326
15327 /* Parse a throw-expression.
15328
15329    throw-expression:
15330      throw assignment-expression [opt]
15331
15332    Returns a THROW_EXPR representing the throw-expression.  */
15333
15334 static tree
15335 cp_parser_throw_expression (cp_parser* parser)
15336 {
15337   tree expression;
15338   cp_token* token;
15339
15340   cp_parser_require_keyword (parser, RID_THROW, "`throw'");
15341   token = cp_lexer_peek_token (parser->lexer);
15342   /* Figure out whether or not there is an assignment-expression
15343      following the "throw" keyword.  */
15344   if (token->type == CPP_COMMA
15345       || token->type == CPP_SEMICOLON
15346       || token->type == CPP_CLOSE_PAREN
15347       || token->type == CPP_CLOSE_SQUARE
15348       || token->type == CPP_CLOSE_BRACE
15349       || token->type == CPP_COLON)
15350     expression = NULL_TREE;
15351   else
15352     expression = cp_parser_assignment_expression (parser,
15353                                                   /*cast_p=*/false);
15354
15355   return build_throw (expression);
15356 }
15357
15358 /* GNU Extensions */
15359
15360 /* Parse an (optional) asm-specification.
15361
15362    asm-specification:
15363      asm ( string-literal )
15364
15365    If the asm-specification is present, returns a STRING_CST
15366    corresponding to the string-literal.  Otherwise, returns
15367    NULL_TREE.  */
15368
15369 static tree
15370 cp_parser_asm_specification_opt (cp_parser* parser)
15371 {
15372   cp_token *token;
15373   tree asm_specification;
15374
15375   /* Peek at the next token.  */
15376   token = cp_lexer_peek_token (parser->lexer);
15377   /* If the next token isn't the `asm' keyword, then there's no
15378      asm-specification.  */
15379   if (!cp_parser_is_keyword (token, RID_ASM))
15380     return NULL_TREE;
15381
15382   /* Consume the `asm' token.  */
15383   cp_lexer_consume_token (parser->lexer);
15384   /* Look for the `('.  */
15385   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
15386
15387   /* Look for the string-literal.  */
15388   asm_specification = cp_parser_string_literal (parser, false, false);
15389
15390   /* Look for the `)'.  */
15391   cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
15392
15393   return asm_specification;
15394 }
15395
15396 /* Parse an asm-operand-list.
15397
15398    asm-operand-list:
15399      asm-operand
15400      asm-operand-list , asm-operand
15401
15402    asm-operand:
15403      string-literal ( expression )
15404      [ string-literal ] string-literal ( expression )
15405
15406    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
15407    each node is the expression.  The TREE_PURPOSE is itself a
15408    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
15409    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
15410    is a STRING_CST for the string literal before the parenthesis.  */
15411
15412 static tree
15413 cp_parser_asm_operand_list (cp_parser* parser)
15414 {
15415   tree asm_operands = NULL_TREE;
15416
15417   while (true)
15418     {
15419       tree string_literal;
15420       tree expression;
15421       tree name;
15422
15423       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
15424         {
15425           /* Consume the `[' token.  */
15426           cp_lexer_consume_token (parser->lexer);
15427           /* Read the operand name.  */
15428           name = cp_parser_identifier (parser);
15429           if (name != error_mark_node)
15430             name = build_string (IDENTIFIER_LENGTH (name),
15431                                  IDENTIFIER_POINTER (name));
15432           /* Look for the closing `]'.  */
15433           cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
15434         }
15435       else
15436         name = NULL_TREE;
15437       /* Look for the string-literal.  */
15438       string_literal = cp_parser_string_literal (parser, false, false);
15439
15440       /* Look for the `('.  */
15441       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
15442       /* Parse the expression.  */
15443       expression = cp_parser_expression (parser, /*cast_p=*/false);
15444       /* Look for the `)'.  */
15445       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
15446
15447       /* Add this operand to the list.  */
15448       asm_operands = tree_cons (build_tree_list (name, string_literal),
15449                                 expression,
15450                                 asm_operands);
15451       /* If the next token is not a `,', there are no more
15452          operands.  */
15453       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
15454         break;
15455       /* Consume the `,'.  */
15456       cp_lexer_consume_token (parser->lexer);
15457     }
15458
15459   return nreverse (asm_operands);
15460 }
15461
15462 /* Parse an asm-clobber-list.
15463
15464    asm-clobber-list:
15465      string-literal
15466      asm-clobber-list , string-literal
15467
15468    Returns a TREE_LIST, indicating the clobbers in the order that they
15469    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
15470
15471 static tree
15472 cp_parser_asm_clobber_list (cp_parser* parser)
15473 {
15474   tree clobbers = NULL_TREE;
15475
15476   while (true)
15477     {
15478       tree string_literal;
15479
15480       /* Look for the string literal.  */
15481       string_literal = cp_parser_string_literal (parser, false, false);
15482       /* Add it to the list.  */
15483       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
15484       /* If the next token is not a `,', then the list is
15485          complete.  */
15486       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
15487         break;
15488       /* Consume the `,' token.  */
15489       cp_lexer_consume_token (parser->lexer);
15490     }
15491
15492   return clobbers;
15493 }
15494
15495 /* Parse an (optional) series of attributes.
15496
15497    attributes:
15498      attributes attribute
15499
15500    attribute:
15501      __attribute__ (( attribute-list [opt] ))
15502
15503    The return value is as for cp_parser_attribute_list.  */
15504
15505 static tree
15506 cp_parser_attributes_opt (cp_parser* parser)
15507 {
15508   tree attributes = NULL_TREE;
15509
15510   while (true)
15511     {
15512       cp_token *token;
15513       tree attribute_list;
15514
15515       /* Peek at the next token.  */
15516       token = cp_lexer_peek_token (parser->lexer);
15517       /* If it's not `__attribute__', then we're done.  */
15518       if (token->keyword != RID_ATTRIBUTE)
15519         break;
15520
15521       /* Consume the `__attribute__' keyword.  */
15522       cp_lexer_consume_token (parser->lexer);
15523       /* Look for the two `(' tokens.  */
15524       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
15525       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
15526
15527       /* Peek at the next token.  */
15528       token = cp_lexer_peek_token (parser->lexer);
15529       if (token->type != CPP_CLOSE_PAREN)
15530         /* Parse the attribute-list.  */
15531         attribute_list = cp_parser_attribute_list (parser);
15532       else
15533         /* If the next token is a `)', then there is no attribute
15534            list.  */
15535         attribute_list = NULL;
15536
15537       /* Look for the two `)' tokens.  */
15538       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
15539       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
15540
15541       /* Add these new attributes to the list.  */
15542       attributes = chainon (attributes, attribute_list);
15543     }
15544
15545   return attributes;
15546 }
15547
15548 /* Parse an attribute-list.
15549
15550    attribute-list:
15551      attribute
15552      attribute-list , attribute
15553
15554    attribute:
15555      identifier
15556      identifier ( identifier )
15557      identifier ( identifier , expression-list )
15558      identifier ( expression-list )
15559
15560    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
15561    to an attribute.  The TREE_PURPOSE of each node is the identifier
15562    indicating which attribute is in use.  The TREE_VALUE represents
15563    the arguments, if any.  */
15564
15565 static tree
15566 cp_parser_attribute_list (cp_parser* parser)
15567 {
15568   tree attribute_list = NULL_TREE;
15569   bool save_translate_strings_p = parser->translate_strings_p;
15570
15571   parser->translate_strings_p = false;
15572   while (true)
15573     {
15574       cp_token *token;
15575       tree identifier;
15576       tree attribute;
15577
15578       /* Look for the identifier.  We also allow keywords here; for
15579          example `__attribute__ ((const))' is legal.  */
15580       token = cp_lexer_peek_token (parser->lexer);
15581       if (token->type == CPP_NAME
15582           || token->type == CPP_KEYWORD)
15583         {
15584           tree arguments = NULL_TREE;
15585
15586           /* Consume the token.  */
15587           token = cp_lexer_consume_token (parser->lexer);
15588
15589           /* Save away the identifier that indicates which attribute
15590              this is.  */
15591           identifier = token->u.value;
15592           attribute = build_tree_list (identifier, NULL_TREE);
15593
15594           /* Peek at the next token.  */
15595           token = cp_lexer_peek_token (parser->lexer);
15596           /* If it's an `(', then parse the attribute arguments.  */
15597           if (token->type == CPP_OPEN_PAREN)
15598             {
15599               arguments = cp_parser_parenthesized_expression_list
15600                           (parser, true, /*cast_p=*/false,
15601                            /*allow_expansion_p=*/false,
15602                            /*non_constant_p=*/NULL);
15603               /* Save the arguments away.  */
15604               TREE_VALUE (attribute) = arguments;
15605             }
15606
15607           if (arguments != error_mark_node)
15608             {
15609               /* Add this attribute to the list.  */
15610               TREE_CHAIN (attribute) = attribute_list;
15611               attribute_list = attribute;
15612             }
15613
15614           token = cp_lexer_peek_token (parser->lexer);
15615         }
15616       /* Now, look for more attributes.  If the next token isn't a
15617          `,', we're done.  */
15618       if (token->type != CPP_COMMA)
15619         break;
15620
15621       /* Consume the comma and keep going.  */
15622       cp_lexer_consume_token (parser->lexer);
15623     }
15624   parser->translate_strings_p = save_translate_strings_p;
15625
15626   /* We built up the list in reverse order.  */
15627   return nreverse (attribute_list);
15628 }
15629
15630 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
15631    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
15632    current value of the PEDANTIC flag, regardless of whether or not
15633    the `__extension__' keyword is present.  The caller is responsible
15634    for restoring the value of the PEDANTIC flag.  */
15635
15636 static bool
15637 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
15638 {
15639   /* Save the old value of the PEDANTIC flag.  */
15640   *saved_pedantic = pedantic;
15641
15642   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
15643     {
15644       /* Consume the `__extension__' token.  */
15645       cp_lexer_consume_token (parser->lexer);
15646       /* We're not being pedantic while the `__extension__' keyword is
15647          in effect.  */
15648       pedantic = 0;
15649
15650       return true;
15651     }
15652
15653   return false;
15654 }
15655
15656 /* Parse a label declaration.
15657
15658    label-declaration:
15659      __label__ label-declarator-seq ;
15660
15661    label-declarator-seq:
15662      identifier , label-declarator-seq
15663      identifier  */
15664
15665 static void
15666 cp_parser_label_declaration (cp_parser* parser)
15667 {
15668   /* Look for the `__label__' keyword.  */
15669   cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
15670
15671   while (true)
15672     {
15673       tree identifier;
15674
15675       /* Look for an identifier.  */
15676       identifier = cp_parser_identifier (parser);
15677       /* If we failed, stop.  */
15678       if (identifier == error_mark_node)
15679         break;
15680       /* Declare it as a label.  */
15681       finish_label_decl (identifier);
15682       /* If the next token is a `;', stop.  */
15683       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15684         break;
15685       /* Look for the `,' separating the label declarations.  */
15686       cp_parser_require (parser, CPP_COMMA, "`,'");
15687     }
15688
15689   /* Look for the final `;'.  */
15690   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
15691 }
15692
15693 /* Support Functions */
15694
15695 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
15696    NAME should have one of the representations used for an
15697    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
15698    is returned.  If PARSER->SCOPE is a dependent type, then a
15699    SCOPE_REF is returned.
15700
15701    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
15702    returned; the name was already resolved when the TEMPLATE_ID_EXPR
15703    was formed.  Abstractly, such entities should not be passed to this
15704    function, because they do not need to be looked up, but it is
15705    simpler to check for this special case here, rather than at the
15706    call-sites.
15707
15708    In cases not explicitly covered above, this function returns a
15709    DECL, OVERLOAD, or baselink representing the result of the lookup.
15710    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
15711    is returned.
15712
15713    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
15714    (e.g., "struct") that was used.  In that case bindings that do not
15715    refer to types are ignored.
15716
15717    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
15718    ignored.
15719
15720    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
15721    are ignored.
15722
15723    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
15724    types.
15725
15726    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
15727    TREE_LIST of candidates if name-lookup results in an ambiguity, and
15728    NULL_TREE otherwise.  */
15729
15730 static tree
15731 cp_parser_lookup_name (cp_parser *parser, tree name,
15732                        enum tag_types tag_type,
15733                        bool is_template,
15734                        bool is_namespace,
15735                        bool check_dependency,
15736                        tree *ambiguous_decls)
15737 {
15738   int flags = 0;
15739   tree decl;
15740   tree object_type = parser->context->object_type;
15741
15742   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
15743     flags |= LOOKUP_COMPLAIN;
15744
15745   /* Assume that the lookup will be unambiguous.  */
15746   if (ambiguous_decls)
15747     *ambiguous_decls = NULL_TREE;
15748
15749   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
15750      no longer valid.  Note that if we are parsing tentatively, and
15751      the parse fails, OBJECT_TYPE will be automatically restored.  */
15752   parser->context->object_type = NULL_TREE;
15753
15754   if (name == error_mark_node)
15755     return error_mark_node;
15756
15757   /* A template-id has already been resolved; there is no lookup to
15758      do.  */
15759   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
15760     return name;
15761   if (BASELINK_P (name))
15762     {
15763       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
15764                   == TEMPLATE_ID_EXPR);
15765       return name;
15766     }
15767
15768   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
15769      it should already have been checked to make sure that the name
15770      used matches the type being destroyed.  */
15771   if (TREE_CODE (name) == BIT_NOT_EXPR)
15772     {
15773       tree type;
15774
15775       /* Figure out to which type this destructor applies.  */
15776       if (parser->scope)
15777         type = parser->scope;
15778       else if (object_type)
15779         type = object_type;
15780       else
15781         type = current_class_type;
15782       /* If that's not a class type, there is no destructor.  */
15783       if (!type || !CLASS_TYPE_P (type))
15784         return error_mark_node;
15785       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
15786         lazily_declare_fn (sfk_destructor, type);
15787       if (!CLASSTYPE_DESTRUCTORS (type))
15788           return error_mark_node;
15789       /* If it was a class type, return the destructor.  */
15790       return CLASSTYPE_DESTRUCTORS (type);
15791     }
15792
15793   /* By this point, the NAME should be an ordinary identifier.  If
15794      the id-expression was a qualified name, the qualifying scope is
15795      stored in PARSER->SCOPE at this point.  */
15796   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
15797
15798   /* Perform the lookup.  */
15799   if (parser->scope)
15800     {
15801       bool dependent_p;
15802
15803       if (parser->scope == error_mark_node)
15804         return error_mark_node;
15805
15806       /* If the SCOPE is dependent, the lookup must be deferred until
15807          the template is instantiated -- unless we are explicitly
15808          looking up names in uninstantiated templates.  Even then, we
15809          cannot look up the name if the scope is not a class type; it
15810          might, for example, be a template type parameter.  */
15811       dependent_p = (TYPE_P (parser->scope)
15812                      && !(parser->in_declarator_p
15813                           && currently_open_class (parser->scope))
15814                      && dependent_type_p (parser->scope));
15815       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
15816            && dependent_p)
15817         {
15818           if (tag_type)
15819             {
15820               tree type;
15821
15822               /* The resolution to Core Issue 180 says that `struct
15823                  A::B' should be considered a type-name, even if `A'
15824                  is dependent.  */
15825               type = make_typename_type (parser->scope, name, tag_type,
15826                                          /*complain=*/tf_error);
15827               decl = TYPE_NAME (type);
15828             }
15829           else if (is_template
15830                    && (cp_parser_next_token_ends_template_argument_p (parser)
15831                        || cp_lexer_next_token_is (parser->lexer,
15832                                                   CPP_CLOSE_PAREN)))
15833             decl = make_unbound_class_template (parser->scope,
15834                                                 name, NULL_TREE,
15835                                                 /*complain=*/tf_error);
15836           else
15837             decl = build_qualified_name (/*type=*/NULL_TREE,
15838                                          parser->scope, name,
15839                                          is_template);
15840         }
15841       else
15842         {
15843           tree pushed_scope = NULL_TREE;
15844
15845           /* If PARSER->SCOPE is a dependent type, then it must be a
15846              class type, and we must not be checking dependencies;
15847              otherwise, we would have processed this lookup above.  So
15848              that PARSER->SCOPE is not considered a dependent base by
15849              lookup_member, we must enter the scope here.  */
15850           if (dependent_p)
15851             pushed_scope = push_scope (parser->scope);
15852           /* If the PARSER->SCOPE is a template specialization, it
15853              may be instantiated during name lookup.  In that case,
15854              errors may be issued.  Even if we rollback the current
15855              tentative parse, those errors are valid.  */
15856           decl = lookup_qualified_name (parser->scope, name,
15857                                         tag_type != none_type,
15858                                         /*complain=*/true);
15859           if (pushed_scope)
15860             pop_scope (pushed_scope);
15861         }
15862       parser->qualifying_scope = parser->scope;
15863       parser->object_scope = NULL_TREE;
15864     }
15865   else if (object_type)
15866     {
15867       tree object_decl = NULL_TREE;
15868       /* Look up the name in the scope of the OBJECT_TYPE, unless the
15869          OBJECT_TYPE is not a class.  */
15870       if (CLASS_TYPE_P (object_type))
15871         /* If the OBJECT_TYPE is a template specialization, it may
15872            be instantiated during name lookup.  In that case, errors
15873            may be issued.  Even if we rollback the current tentative
15874            parse, those errors are valid.  */
15875         object_decl = lookup_member (object_type,
15876                                      name,
15877                                      /*protect=*/0,
15878                                      tag_type != none_type);
15879       /* Look it up in the enclosing context, too.  */
15880       decl = lookup_name_real (name, tag_type != none_type,
15881                                /*nonclass=*/0,
15882                                /*block_p=*/true, is_namespace, flags);
15883       parser->object_scope = object_type;
15884       parser->qualifying_scope = NULL_TREE;
15885       if (object_decl)
15886         decl = object_decl;
15887     }
15888   else
15889     {
15890       decl = lookup_name_real (name, tag_type != none_type,
15891                                /*nonclass=*/0,
15892                                /*block_p=*/true, is_namespace, flags);
15893       parser->qualifying_scope = NULL_TREE;
15894       parser->object_scope = NULL_TREE;
15895     }
15896
15897   /* If the lookup failed, let our caller know.  */
15898   if (!decl || decl == error_mark_node)
15899     return error_mark_node;
15900
15901   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
15902   if (TREE_CODE (decl) == TREE_LIST)
15903     {
15904       if (ambiguous_decls)
15905         *ambiguous_decls = decl;
15906       /* The error message we have to print is too complicated for
15907          cp_parser_error, so we incorporate its actions directly.  */
15908       if (!cp_parser_simulate_error (parser))
15909         {
15910           error ("reference to %qD is ambiguous", name);
15911           print_candidates (decl);
15912         }
15913       return error_mark_node;
15914     }
15915
15916   gcc_assert (DECL_P (decl)
15917               || TREE_CODE (decl) == OVERLOAD
15918               || TREE_CODE (decl) == SCOPE_REF
15919               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
15920               || BASELINK_P (decl));
15921
15922   /* If we have resolved the name of a member declaration, check to
15923      see if the declaration is accessible.  When the name resolves to
15924      set of overloaded functions, accessibility is checked when
15925      overload resolution is done.
15926
15927      During an explicit instantiation, access is not checked at all,
15928      as per [temp.explicit].  */
15929   if (DECL_P (decl))
15930     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
15931
15932   return decl;
15933 }
15934
15935 /* Like cp_parser_lookup_name, but for use in the typical case where
15936    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
15937    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
15938
15939 static tree
15940 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
15941 {
15942   return cp_parser_lookup_name (parser, name,
15943                                 none_type,
15944                                 /*is_template=*/false,
15945                                 /*is_namespace=*/false,
15946                                 /*check_dependency=*/true,
15947                                 /*ambiguous_decls=*/NULL);
15948 }
15949
15950 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
15951    the current context, return the TYPE_DECL.  If TAG_NAME_P is
15952    true, the DECL indicates the class being defined in a class-head,
15953    or declared in an elaborated-type-specifier.
15954
15955    Otherwise, return DECL.  */
15956
15957 static tree
15958 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
15959 {
15960   /* If the TEMPLATE_DECL is being declared as part of a class-head,
15961      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
15962
15963        struct A {
15964          template <typename T> struct B;
15965        };
15966
15967        template <typename T> struct A::B {};
15968
15969      Similarly, in an elaborated-type-specifier:
15970
15971        namespace N { struct X{}; }
15972
15973        struct A {
15974          template <typename T> friend struct N::X;
15975        };
15976
15977      However, if the DECL refers to a class type, and we are in
15978      the scope of the class, then the name lookup automatically
15979      finds the TYPE_DECL created by build_self_reference rather
15980      than a TEMPLATE_DECL.  For example, in:
15981
15982        template <class T> struct S {
15983          S s;
15984        };
15985
15986      there is no need to handle such case.  */
15987
15988   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
15989     return DECL_TEMPLATE_RESULT (decl);
15990
15991   return decl;
15992 }
15993
15994 /* If too many, or too few, template-parameter lists apply to the
15995    declarator, issue an error message.  Returns TRUE if all went well,
15996    and FALSE otherwise.  */
15997
15998 static bool
15999 cp_parser_check_declarator_template_parameters (cp_parser* parser,
16000                                                 cp_declarator *declarator)
16001 {
16002   unsigned num_templates;
16003
16004   /* We haven't seen any classes that involve template parameters yet.  */
16005   num_templates = 0;
16006
16007   switch (declarator->kind)
16008     {
16009     case cdk_id:
16010       if (declarator->u.id.qualifying_scope)
16011         {
16012           tree scope;
16013           tree member;
16014
16015           scope = declarator->u.id.qualifying_scope;
16016           member = declarator->u.id.unqualified_name;
16017
16018           while (scope && CLASS_TYPE_P (scope))
16019             {
16020               /* You're supposed to have one `template <...>'
16021                  for every template class, but you don't need one
16022                  for a full specialization.  For example:
16023
16024                  template <class T> struct S{};
16025                  template <> struct S<int> { void f(); };
16026                  void S<int>::f () {}
16027
16028                  is correct; there shouldn't be a `template <>' for
16029                  the definition of `S<int>::f'.  */
16030               if (!CLASSTYPE_TEMPLATE_INFO (scope))
16031                 /* If SCOPE does not have template information of any
16032                    kind, then it is not a template, nor is it nested
16033                    within a template.  */
16034                 break;
16035               if (explicit_class_specialization_p (scope))
16036                 break;
16037               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
16038                 ++num_templates;
16039
16040               scope = TYPE_CONTEXT (scope);
16041             }
16042         }
16043       else if (TREE_CODE (declarator->u.id.unqualified_name)
16044                == TEMPLATE_ID_EXPR)
16045         /* If the DECLARATOR has the form `X<y>' then it uses one
16046            additional level of template parameters.  */
16047         ++num_templates;
16048
16049       return cp_parser_check_template_parameters (parser,
16050                                                   num_templates);
16051
16052     case cdk_function:
16053     case cdk_array:
16054     case cdk_pointer:
16055     case cdk_reference:
16056     case cdk_ptrmem:
16057       return (cp_parser_check_declarator_template_parameters
16058               (parser, declarator->declarator));
16059
16060     case cdk_error:
16061       return true;
16062
16063     default:
16064       gcc_unreachable ();
16065     }
16066   return false;
16067 }
16068
16069 /* NUM_TEMPLATES were used in the current declaration.  If that is
16070    invalid, return FALSE and issue an error messages.  Otherwise,
16071    return TRUE.  */
16072
16073 static bool
16074 cp_parser_check_template_parameters (cp_parser* parser,
16075                                      unsigned num_templates)
16076 {
16077   /* If there are more template classes than parameter lists, we have
16078      something like:
16079
16080        template <class T> void S<T>::R<T>::f ();  */
16081   if (parser->num_template_parameter_lists < num_templates)
16082     {
16083       error ("too few template-parameter-lists");
16084       return false;
16085     }
16086   /* If there are the same number of template classes and parameter
16087      lists, that's OK.  */
16088   if (parser->num_template_parameter_lists == num_templates)
16089     return true;
16090   /* If there are more, but only one more, then we are referring to a
16091      member template.  That's OK too.  */
16092   if (parser->num_template_parameter_lists == num_templates + 1)
16093       return true;
16094   /* Otherwise, there are too many template parameter lists.  We have
16095      something like:
16096
16097      template <class T> template <class U> void S::f();  */
16098   error ("too many template-parameter-lists");
16099   return false;
16100 }
16101
16102 /* Parse an optional `::' token indicating that the following name is
16103    from the global namespace.  If so, PARSER->SCOPE is set to the
16104    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
16105    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
16106    Returns the new value of PARSER->SCOPE, if the `::' token is
16107    present, and NULL_TREE otherwise.  */
16108
16109 static tree
16110 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
16111 {
16112   cp_token *token;
16113
16114   /* Peek at the next token.  */
16115   token = cp_lexer_peek_token (parser->lexer);
16116   /* If we're looking at a `::' token then we're starting from the
16117      global namespace, not our current location.  */
16118   if (token->type == CPP_SCOPE)
16119     {
16120       /* Consume the `::' token.  */
16121       cp_lexer_consume_token (parser->lexer);
16122       /* Set the SCOPE so that we know where to start the lookup.  */
16123       parser->scope = global_namespace;
16124       parser->qualifying_scope = global_namespace;
16125       parser->object_scope = NULL_TREE;
16126
16127       return parser->scope;
16128     }
16129   else if (!current_scope_valid_p)
16130     {
16131       parser->scope = NULL_TREE;
16132       parser->qualifying_scope = NULL_TREE;
16133       parser->object_scope = NULL_TREE;
16134     }
16135
16136   return NULL_TREE;
16137 }
16138
16139 /* Returns TRUE if the upcoming token sequence is the start of a
16140    constructor declarator.  If FRIEND_P is true, the declarator is
16141    preceded by the `friend' specifier.  */
16142
16143 static bool
16144 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
16145 {
16146   bool constructor_p;
16147   tree type_decl = NULL_TREE;
16148   bool nested_name_p;
16149   cp_token *next_token;
16150
16151   /* The common case is that this is not a constructor declarator, so
16152      try to avoid doing lots of work if at all possible.  It's not
16153      valid declare a constructor at function scope.  */
16154   if (parser->in_function_body)
16155     return false;
16156   /* And only certain tokens can begin a constructor declarator.  */
16157   next_token = cp_lexer_peek_token (parser->lexer);
16158   if (next_token->type != CPP_NAME
16159       && next_token->type != CPP_SCOPE
16160       && next_token->type != CPP_NESTED_NAME_SPECIFIER
16161       && next_token->type != CPP_TEMPLATE_ID)
16162     return false;
16163
16164   /* Parse tentatively; we are going to roll back all of the tokens
16165      consumed here.  */
16166   cp_parser_parse_tentatively (parser);
16167   /* Assume that we are looking at a constructor declarator.  */
16168   constructor_p = true;
16169
16170   /* Look for the optional `::' operator.  */
16171   cp_parser_global_scope_opt (parser,
16172                               /*current_scope_valid_p=*/false);
16173   /* Look for the nested-name-specifier.  */
16174   nested_name_p
16175     = (cp_parser_nested_name_specifier_opt (parser,
16176                                             /*typename_keyword_p=*/false,
16177                                             /*check_dependency_p=*/false,
16178                                             /*type_p=*/false,
16179                                             /*is_declaration=*/false)
16180        != NULL_TREE);
16181   /* Outside of a class-specifier, there must be a
16182      nested-name-specifier.  */
16183   if (!nested_name_p &&
16184       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
16185        || friend_p))
16186     constructor_p = false;
16187   /* If we still think that this might be a constructor-declarator,
16188      look for a class-name.  */
16189   if (constructor_p)
16190     {
16191       /* If we have:
16192
16193            template <typename T> struct S { S(); };
16194            template <typename T> S<T>::S ();
16195
16196          we must recognize that the nested `S' names a class.
16197          Similarly, for:
16198
16199            template <typename T> S<T>::S<T> ();
16200
16201          we must recognize that the nested `S' names a template.  */
16202       type_decl = cp_parser_class_name (parser,
16203                                         /*typename_keyword_p=*/false,
16204                                         /*template_keyword_p=*/false,
16205                                         none_type,
16206                                         /*check_dependency_p=*/false,
16207                                         /*class_head_p=*/false,
16208                                         /*is_declaration=*/false);
16209       /* If there was no class-name, then this is not a constructor.  */
16210       constructor_p = !cp_parser_error_occurred (parser);
16211     }
16212
16213   /* If we're still considering a constructor, we have to see a `(',
16214      to begin the parameter-declaration-clause, followed by either a
16215      `)', an `...', or a decl-specifier.  We need to check for a
16216      type-specifier to avoid being fooled into thinking that:
16217
16218        S::S (f) (int);
16219
16220      is a constructor.  (It is actually a function named `f' that
16221      takes one parameter (of type `int') and returns a value of type
16222      `S::S'.  */
16223   if (constructor_p
16224       && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
16225     {
16226       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
16227           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
16228           /* A parameter declaration begins with a decl-specifier,
16229              which is either the "attribute" keyword, a storage class
16230              specifier, or (usually) a type-specifier.  */
16231           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
16232         {
16233           tree type;
16234           tree pushed_scope = NULL_TREE;
16235           unsigned saved_num_template_parameter_lists;
16236
16237           /* Names appearing in the type-specifier should be looked up
16238              in the scope of the class.  */
16239           if (current_class_type)
16240             type = NULL_TREE;
16241           else
16242             {
16243               type = TREE_TYPE (type_decl);
16244               if (TREE_CODE (type) == TYPENAME_TYPE)
16245                 {
16246                   type = resolve_typename_type (type,
16247                                                 /*only_current_p=*/false);
16248                   if (type == error_mark_node)
16249                     {
16250                       cp_parser_abort_tentative_parse (parser);
16251                       return false;
16252                     }
16253                 }
16254               pushed_scope = push_scope (type);
16255             }
16256
16257           /* Inside the constructor parameter list, surrounding
16258              template-parameter-lists do not apply.  */
16259           saved_num_template_parameter_lists
16260             = parser->num_template_parameter_lists;
16261           parser->num_template_parameter_lists = 0;
16262
16263           /* Look for the type-specifier.  */
16264           cp_parser_type_specifier (parser,
16265                                     CP_PARSER_FLAGS_NONE,
16266                                     /*decl_specs=*/NULL,
16267                                     /*is_declarator=*/true,
16268                                     /*declares_class_or_enum=*/NULL,
16269                                     /*is_cv_qualifier=*/NULL);
16270
16271           parser->num_template_parameter_lists
16272             = saved_num_template_parameter_lists;
16273
16274           /* Leave the scope of the class.  */
16275           if (pushed_scope)
16276             pop_scope (pushed_scope);
16277
16278           constructor_p = !cp_parser_error_occurred (parser);
16279         }
16280     }
16281   else
16282     constructor_p = false;
16283   /* We did not really want to consume any tokens.  */
16284   cp_parser_abort_tentative_parse (parser);
16285
16286   return constructor_p;
16287 }
16288
16289 /* Parse the definition of the function given by the DECL_SPECIFIERS,
16290    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
16291    they must be performed once we are in the scope of the function.
16292
16293    Returns the function defined.  */
16294
16295 static tree
16296 cp_parser_function_definition_from_specifiers_and_declarator
16297   (cp_parser* parser,
16298    cp_decl_specifier_seq *decl_specifiers,
16299    tree attributes,
16300    const cp_declarator *declarator)
16301 {
16302   tree fn;
16303   bool success_p;
16304
16305   /* Begin the function-definition.  */
16306   success_p = start_function (decl_specifiers, declarator, attributes);
16307
16308   /* The things we're about to see are not directly qualified by any
16309      template headers we've seen thus far.  */
16310   reset_specialization ();
16311
16312   /* If there were names looked up in the decl-specifier-seq that we
16313      did not check, check them now.  We must wait until we are in the
16314      scope of the function to perform the checks, since the function
16315      might be a friend.  */
16316   perform_deferred_access_checks ();
16317
16318   if (!success_p)
16319     {
16320       /* Skip the entire function.  */
16321       cp_parser_skip_to_end_of_block_or_statement (parser);
16322       fn = error_mark_node;
16323     }
16324   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
16325     {
16326       /* Seen already, skip it.  An error message has already been output.  */
16327       cp_parser_skip_to_end_of_block_or_statement (parser);
16328       fn = current_function_decl;
16329       current_function_decl = NULL_TREE;
16330       /* If this is a function from a class, pop the nested class.  */
16331       if (current_class_name)
16332         pop_nested_class ();
16333     }
16334   else
16335     fn = cp_parser_function_definition_after_declarator (parser,
16336                                                          /*inline_p=*/false);
16337
16338   return fn;
16339 }
16340
16341 /* Parse the part of a function-definition that follows the
16342    declarator.  INLINE_P is TRUE iff this function is an inline
16343    function defined with a class-specifier.
16344
16345    Returns the function defined.  */
16346
16347 static tree
16348 cp_parser_function_definition_after_declarator (cp_parser* parser,
16349                                                 bool inline_p)
16350 {
16351   tree fn;
16352   bool ctor_initializer_p = false;
16353   bool saved_in_unbraced_linkage_specification_p;
16354   bool saved_in_function_body;
16355   unsigned saved_num_template_parameter_lists;
16356
16357   saved_in_function_body = parser->in_function_body;
16358   parser->in_function_body = true;
16359   /* If the next token is `return', then the code may be trying to
16360      make use of the "named return value" extension that G++ used to
16361      support.  */
16362   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
16363     {
16364       /* Consume the `return' keyword.  */
16365       cp_lexer_consume_token (parser->lexer);
16366       /* Look for the identifier that indicates what value is to be
16367          returned.  */
16368       cp_parser_identifier (parser);
16369       /* Issue an error message.  */
16370       error ("named return values are no longer supported");
16371       /* Skip tokens until we reach the start of the function body.  */
16372       while (true)
16373         {
16374           cp_token *token = cp_lexer_peek_token (parser->lexer);
16375           if (token->type == CPP_OPEN_BRACE
16376               || token->type == CPP_EOF
16377               || token->type == CPP_PRAGMA_EOL)
16378             break;
16379           cp_lexer_consume_token (parser->lexer);
16380         }
16381     }
16382   /* The `extern' in `extern "C" void f () { ... }' does not apply to
16383      anything declared inside `f'.  */
16384   saved_in_unbraced_linkage_specification_p
16385     = parser->in_unbraced_linkage_specification_p;
16386   parser->in_unbraced_linkage_specification_p = false;
16387   /* Inside the function, surrounding template-parameter-lists do not
16388      apply.  */
16389   saved_num_template_parameter_lists
16390     = parser->num_template_parameter_lists;
16391   parser->num_template_parameter_lists = 0;
16392   /* If the next token is `try', then we are looking at a
16393      function-try-block.  */
16394   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
16395     ctor_initializer_p = cp_parser_function_try_block (parser);
16396   /* A function-try-block includes the function-body, so we only do
16397      this next part if we're not processing a function-try-block.  */
16398   else
16399     ctor_initializer_p
16400       = cp_parser_ctor_initializer_opt_and_function_body (parser);
16401
16402   /* Finish the function.  */
16403   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
16404                         (inline_p ? 2 : 0));
16405   /* Generate code for it, if necessary.  */
16406   expand_or_defer_fn (fn);
16407   /* Restore the saved values.  */
16408   parser->in_unbraced_linkage_specification_p
16409     = saved_in_unbraced_linkage_specification_p;
16410   parser->num_template_parameter_lists
16411     = saved_num_template_parameter_lists;
16412   parser->in_function_body = saved_in_function_body;
16413
16414   return fn;
16415 }
16416
16417 /* Parse a template-declaration, assuming that the `export' (and
16418    `extern') keywords, if present, has already been scanned.  MEMBER_P
16419    is as for cp_parser_template_declaration.  */
16420
16421 static void
16422 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
16423 {
16424   tree decl = NULL_TREE;
16425   VEC (deferred_access_check,gc) *checks;
16426   tree parameter_list;
16427   bool friend_p = false;
16428   bool need_lang_pop;
16429
16430   /* Look for the `template' keyword.  */
16431   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
16432     return;
16433
16434   /* And the `<'.  */
16435   if (!cp_parser_require (parser, CPP_LESS, "`<'"))
16436     return;
16437   if (at_class_scope_p () && current_function_decl)
16438     {
16439       /* 14.5.2.2 [temp.mem]
16440
16441          A local class shall not have member templates.  */
16442       error ("invalid declaration of member template in local class");
16443       cp_parser_skip_to_end_of_block_or_statement (parser);
16444       return;
16445     }
16446   /* [temp]
16447
16448      A template ... shall not have C linkage.  */
16449   if (current_lang_name == lang_name_c)
16450     {
16451       error ("template with C linkage");
16452       /* Give it C++ linkage to avoid confusing other parts of the
16453          front end.  */
16454       push_lang_context (lang_name_cplusplus);
16455       need_lang_pop = true;
16456     }
16457   else
16458     need_lang_pop = false;
16459
16460   /* We cannot perform access checks on the template parameter
16461      declarations until we know what is being declared, just as we
16462      cannot check the decl-specifier list.  */
16463   push_deferring_access_checks (dk_deferred);
16464
16465   /* If the next token is `>', then we have an invalid
16466      specialization.  Rather than complain about an invalid template
16467      parameter, issue an error message here.  */
16468   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
16469     {
16470       cp_parser_error (parser, "invalid explicit specialization");
16471       begin_specialization ();
16472       parameter_list = NULL_TREE;
16473     }
16474   else
16475     /* Parse the template parameters.  */
16476     parameter_list = cp_parser_template_parameter_list (parser);
16477
16478   /* Get the deferred access checks from the parameter list.  These
16479      will be checked once we know what is being declared, as for a
16480      member template the checks must be performed in the scope of the
16481      class containing the member.  */
16482   checks = get_deferred_access_checks ();
16483
16484   /* Look for the `>'.  */
16485   cp_parser_skip_to_end_of_template_parameter_list (parser);
16486   /* We just processed one more parameter list.  */
16487   ++parser->num_template_parameter_lists;
16488   /* If the next token is `template', there are more template
16489      parameters.  */
16490   if (cp_lexer_next_token_is_keyword (parser->lexer,
16491                                       RID_TEMPLATE))
16492     cp_parser_template_declaration_after_export (parser, member_p);
16493   else
16494     {
16495       /* There are no access checks when parsing a template, as we do not
16496          know if a specialization will be a friend.  */
16497       push_deferring_access_checks (dk_no_check);
16498       decl = cp_parser_single_declaration (parser,
16499                                            checks,
16500                                            member_p,
16501                                            &friend_p);
16502       pop_deferring_access_checks ();
16503
16504       /* If this is a member template declaration, let the front
16505          end know.  */
16506       if (member_p && !friend_p && decl)
16507         {
16508           if (TREE_CODE (decl) == TYPE_DECL)
16509             cp_parser_check_access_in_redeclaration (decl);
16510
16511           decl = finish_member_template_decl (decl);
16512         }
16513       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
16514         make_friend_class (current_class_type, TREE_TYPE (decl),
16515                            /*complain=*/true);
16516     }
16517   /* We are done with the current parameter list.  */
16518   --parser->num_template_parameter_lists;
16519
16520   pop_deferring_access_checks ();
16521
16522   /* Finish up.  */
16523   finish_template_decl (parameter_list);
16524
16525   /* Register member declarations.  */
16526   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
16527     finish_member_declaration (decl);
16528   /* For the erroneous case of a template with C linkage, we pushed an
16529      implicit C++ linkage scope; exit that scope now.  */
16530   if (need_lang_pop)
16531     pop_lang_context ();
16532   /* If DECL is a function template, we must return to parse it later.
16533      (Even though there is no definition, there might be default
16534      arguments that need handling.)  */
16535   if (member_p && decl
16536       && (TREE_CODE (decl) == FUNCTION_DECL
16537           || DECL_FUNCTION_TEMPLATE_P (decl)))
16538     TREE_VALUE (parser->unparsed_functions_queues)
16539       = tree_cons (NULL_TREE, decl,
16540                    TREE_VALUE (parser->unparsed_functions_queues));
16541 }
16542
16543 /* Perform the deferred access checks from a template-parameter-list.
16544    CHECKS is a TREE_LIST of access checks, as returned by
16545    get_deferred_access_checks.  */
16546
16547 static void
16548 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
16549 {
16550   ++processing_template_parmlist;
16551   perform_access_checks (checks);
16552   --processing_template_parmlist;
16553 }
16554
16555 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
16556    `function-definition' sequence.  MEMBER_P is true, this declaration
16557    appears in a class scope.
16558
16559    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
16560    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
16561
16562 static tree
16563 cp_parser_single_declaration (cp_parser* parser,
16564                               VEC (deferred_access_check,gc)* checks,
16565                               bool member_p,
16566                               bool* friend_p)
16567 {
16568   int declares_class_or_enum;
16569   tree decl = NULL_TREE;
16570   cp_decl_specifier_seq decl_specifiers;
16571   bool function_definition_p = false;
16572
16573   /* This function is only used when processing a template
16574      declaration.  */
16575   gcc_assert (innermost_scope_kind () == sk_template_parms
16576               || innermost_scope_kind () == sk_template_spec);
16577
16578   /* Defer access checks until we know what is being declared.  */
16579   push_deferring_access_checks (dk_deferred);
16580
16581   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
16582      alternative.  */
16583   cp_parser_decl_specifier_seq (parser,
16584                                 CP_PARSER_FLAGS_OPTIONAL,
16585                                 &decl_specifiers,
16586                                 &declares_class_or_enum);
16587   if (friend_p)
16588     *friend_p = cp_parser_friend_p (&decl_specifiers);
16589
16590   /* There are no template typedefs.  */
16591   if (decl_specifiers.specs[(int) ds_typedef])
16592     {
16593       error ("template declaration of %qs", "typedef");
16594       decl = error_mark_node;
16595     }
16596
16597   /* Gather up the access checks that occurred the
16598      decl-specifier-seq.  */
16599   stop_deferring_access_checks ();
16600
16601   /* Check for the declaration of a template class.  */
16602   if (declares_class_or_enum)
16603     {
16604       if (cp_parser_declares_only_class_p (parser))
16605         {
16606           decl = shadow_tag (&decl_specifiers);
16607
16608           /* In this case:
16609
16610                struct C {
16611                  friend template <typename T> struct A<T>::B;
16612                };
16613
16614              A<T>::B will be represented by a TYPENAME_TYPE, and
16615              therefore not recognized by shadow_tag.  */
16616           if (friend_p && *friend_p
16617               && !decl
16618               && decl_specifiers.type
16619               && TYPE_P (decl_specifiers.type))
16620             decl = decl_specifiers.type;
16621
16622           if (decl && decl != error_mark_node)
16623             decl = TYPE_NAME (decl);
16624           else
16625             decl = error_mark_node;
16626
16627           /* Perform access checks for template parameters.  */
16628           cp_parser_perform_template_parameter_access_checks (checks);
16629         }
16630     }
16631   /* If it's not a template class, try for a template function.  If
16632      the next token is a `;', then this declaration does not declare
16633      anything.  But, if there were errors in the decl-specifiers, then
16634      the error might well have come from an attempted class-specifier.
16635      In that case, there's no need to warn about a missing declarator.  */
16636   if (!decl
16637       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
16638           || decl_specifiers.type != error_mark_node))
16639     decl = cp_parser_init_declarator (parser,
16640                                       &decl_specifiers,
16641                                       checks,
16642                                       /*function_definition_allowed_p=*/true,
16643                                       member_p,
16644                                       declares_class_or_enum,
16645                                       &function_definition_p);
16646
16647   pop_deferring_access_checks ();
16648
16649   /* Clear any current qualification; whatever comes next is the start
16650      of something new.  */
16651   parser->scope = NULL_TREE;
16652   parser->qualifying_scope = NULL_TREE;
16653   parser->object_scope = NULL_TREE;
16654   /* Look for a trailing `;' after the declaration.  */
16655   if (!function_definition_p
16656       && (decl == error_mark_node
16657           || !cp_parser_require (parser, CPP_SEMICOLON, "`;'")))
16658     cp_parser_skip_to_end_of_block_or_statement (parser);
16659
16660   return decl;
16661 }
16662
16663 /* Parse a cast-expression that is not the operand of a unary "&".  */
16664
16665 static tree
16666 cp_parser_simple_cast_expression (cp_parser *parser)
16667 {
16668   return cp_parser_cast_expression (parser, /*address_p=*/false,
16669                                     /*cast_p=*/false);
16670 }
16671
16672 /* Parse a functional cast to TYPE.  Returns an expression
16673    representing the cast.  */
16674
16675 static tree
16676 cp_parser_functional_cast (cp_parser* parser, tree type)
16677 {
16678   tree expression_list;
16679   tree cast;
16680
16681   expression_list
16682     = cp_parser_parenthesized_expression_list (parser, false,
16683                                                /*cast_p=*/true,
16684                                                /*allow_expansion_p=*/true,
16685                                                /*non_constant_p=*/NULL);
16686
16687   cast = build_functional_cast (type, expression_list);
16688   /* [expr.const]/1: In an integral constant expression "only type
16689      conversions to integral or enumeration type can be used".  */
16690   if (TREE_CODE (type) == TYPE_DECL)
16691     type = TREE_TYPE (type);
16692   if (cast != error_mark_node
16693       && !cast_valid_in_integral_constant_expression_p (type)
16694       && (cp_parser_non_integral_constant_expression
16695           (parser, "a call to a constructor")))
16696     return error_mark_node;
16697   return cast;
16698 }
16699
16700 /* Save the tokens that make up the body of a member function defined
16701    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
16702    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
16703    specifiers applied to the declaration.  Returns the FUNCTION_DECL
16704    for the member function.  */
16705
16706 static tree
16707 cp_parser_save_member_function_body (cp_parser* parser,
16708                                      cp_decl_specifier_seq *decl_specifiers,
16709                                      cp_declarator *declarator,
16710                                      tree attributes)
16711 {
16712   cp_token *first;
16713   cp_token *last;
16714   tree fn;
16715
16716   /* Create the function-declaration.  */
16717   fn = start_method (decl_specifiers, declarator, attributes);
16718   /* If something went badly wrong, bail out now.  */
16719   if (fn == error_mark_node)
16720     {
16721       /* If there's a function-body, skip it.  */
16722       if (cp_parser_token_starts_function_definition_p
16723           (cp_lexer_peek_token (parser->lexer)))
16724         cp_parser_skip_to_end_of_block_or_statement (parser);
16725       return error_mark_node;
16726     }
16727
16728   /* Remember it, if there default args to post process.  */
16729   cp_parser_save_default_args (parser, fn);
16730
16731   /* Save away the tokens that make up the body of the
16732      function.  */
16733   first = parser->lexer->next_token;
16734   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
16735   /* Handle function try blocks.  */
16736   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
16737     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
16738   last = parser->lexer->next_token;
16739
16740   /* Save away the inline definition; we will process it when the
16741      class is complete.  */
16742   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
16743   DECL_PENDING_INLINE_P (fn) = 1;
16744
16745   /* We need to know that this was defined in the class, so that
16746      friend templates are handled correctly.  */
16747   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
16748
16749   /* We're done with the inline definition.  */
16750   finish_method (fn);
16751
16752   /* Add FN to the queue of functions to be parsed later.  */
16753   TREE_VALUE (parser->unparsed_functions_queues)
16754     = tree_cons (NULL_TREE, fn,
16755                  TREE_VALUE (parser->unparsed_functions_queues));
16756
16757   return fn;
16758 }
16759
16760 /* Parse a template-argument-list, as well as the trailing ">" (but
16761    not the opening ">").  See cp_parser_template_argument_list for the
16762    return value.  */
16763
16764 static tree
16765 cp_parser_enclosed_template_argument_list (cp_parser* parser)
16766 {
16767   tree arguments;
16768   tree saved_scope;
16769   tree saved_qualifying_scope;
16770   tree saved_object_scope;
16771   bool saved_greater_than_is_operator_p;
16772   bool saved_skip_evaluation;
16773
16774   /* [temp.names]
16775
16776      When parsing a template-id, the first non-nested `>' is taken as
16777      the end of the template-argument-list rather than a greater-than
16778      operator.  */
16779   saved_greater_than_is_operator_p
16780     = parser->greater_than_is_operator_p;
16781   parser->greater_than_is_operator_p = false;
16782   /* Parsing the argument list may modify SCOPE, so we save it
16783      here.  */
16784   saved_scope = parser->scope;
16785   saved_qualifying_scope = parser->qualifying_scope;
16786   saved_object_scope = parser->object_scope;
16787   /* We need to evaluate the template arguments, even though this
16788      template-id may be nested within a "sizeof".  */
16789   saved_skip_evaluation = skip_evaluation;
16790   skip_evaluation = false;
16791   /* Parse the template-argument-list itself.  */
16792   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
16793       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
16794     arguments = NULL_TREE;
16795   else
16796     arguments = cp_parser_template_argument_list (parser);
16797   /* Look for the `>' that ends the template-argument-list. If we find
16798      a '>>' instead, it's probably just a typo.  */
16799   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
16800     {
16801       if (flag_cpp0x)
16802         {
16803           /* In C++0x, a `>>' in a template argument list or cast
16804              expression is considered to be two separate `>'
16805              tokens. So, change the current token to a `>', but don't
16806              consume it: it will be consumed later when the outer
16807              template argument list (or cast expression) is parsed.
16808              Note that this replacement of `>' for `>>' is necessary
16809              even if we are parsing tentatively: in the tentative
16810              case, after calling
16811              cp_parser_enclosed_template_argument_list we will always
16812              throw away all of the template arguments and the first
16813              closing `>', either because the template argument list
16814              was erroneous or because we are replacing those tokens
16815              with a CPP_TEMPLATE_ID token.  The second `>' (which will
16816              not have been thrown away) is needed either to close an
16817              outer template argument list or to complete a new-style
16818              cast.  */
16819           cp_token *token = cp_lexer_peek_token (parser->lexer);
16820           token->type = CPP_GREATER;
16821         }
16822       else if (!saved_greater_than_is_operator_p)
16823         {
16824           /* If we're in a nested template argument list, the '>>' has
16825             to be a typo for '> >'. We emit the error message, but we
16826             continue parsing and we push a '>' as next token, so that
16827             the argument list will be parsed correctly.  Note that the
16828             global source location is still on the token before the
16829             '>>', so we need to say explicitly where we want it.  */
16830           cp_token *token = cp_lexer_peek_token (parser->lexer);
16831           error ("%H%<>>%> should be %<> >%> "
16832                  "within a nested template argument list",
16833                  &token->location);
16834
16835           token->type = CPP_GREATER;
16836         }
16837       else
16838         {
16839           /* If this is not a nested template argument list, the '>>'
16840             is a typo for '>'. Emit an error message and continue.
16841             Same deal about the token location, but here we can get it
16842             right by consuming the '>>' before issuing the diagnostic.  */
16843           cp_lexer_consume_token (parser->lexer);
16844           error ("spurious %<>>%>, use %<>%> to terminate "
16845                  "a template argument list");
16846         }
16847     }
16848   else
16849     cp_parser_skip_to_end_of_template_parameter_list (parser);
16850   /* The `>' token might be a greater-than operator again now.  */
16851   parser->greater_than_is_operator_p
16852     = saved_greater_than_is_operator_p;
16853   /* Restore the SAVED_SCOPE.  */
16854   parser->scope = saved_scope;
16855   parser->qualifying_scope = saved_qualifying_scope;
16856   parser->object_scope = saved_object_scope;
16857   skip_evaluation = saved_skip_evaluation;
16858
16859   return arguments;
16860 }
16861
16862 /* MEMBER_FUNCTION is a member function, or a friend.  If default
16863    arguments, or the body of the function have not yet been parsed,
16864    parse them now.  */
16865
16866 static void
16867 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
16868 {
16869   /* If this member is a template, get the underlying
16870      FUNCTION_DECL.  */
16871   if (DECL_FUNCTION_TEMPLATE_P (member_function))
16872     member_function = DECL_TEMPLATE_RESULT (member_function);
16873
16874   /* There should not be any class definitions in progress at this
16875      point; the bodies of members are only parsed outside of all class
16876      definitions.  */
16877   gcc_assert (parser->num_classes_being_defined == 0);
16878   /* While we're parsing the member functions we might encounter more
16879      classes.  We want to handle them right away, but we don't want
16880      them getting mixed up with functions that are currently in the
16881      queue.  */
16882   parser->unparsed_functions_queues
16883     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16884
16885   /* Make sure that any template parameters are in scope.  */
16886   maybe_begin_member_template_processing (member_function);
16887
16888   /* If the body of the function has not yet been parsed, parse it
16889      now.  */
16890   if (DECL_PENDING_INLINE_P (member_function))
16891     {
16892       tree function_scope;
16893       cp_token_cache *tokens;
16894
16895       /* The function is no longer pending; we are processing it.  */
16896       tokens = DECL_PENDING_INLINE_INFO (member_function);
16897       DECL_PENDING_INLINE_INFO (member_function) = NULL;
16898       DECL_PENDING_INLINE_P (member_function) = 0;
16899
16900       /* If this is a local class, enter the scope of the containing
16901          function.  */
16902       function_scope = current_function_decl;
16903       if (function_scope)
16904         push_function_context_to (function_scope);
16905
16906
16907       /* Push the body of the function onto the lexer stack.  */
16908       cp_parser_push_lexer_for_tokens (parser, tokens);
16909
16910       /* Let the front end know that we going to be defining this
16911          function.  */
16912       start_preparsed_function (member_function, NULL_TREE,
16913                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
16914
16915       /* Don't do access checking if it is a templated function.  */
16916       if (processing_template_decl)
16917         push_deferring_access_checks (dk_no_check);
16918
16919       /* Now, parse the body of the function.  */
16920       cp_parser_function_definition_after_declarator (parser,
16921                                                       /*inline_p=*/true);
16922
16923       if (processing_template_decl)
16924         pop_deferring_access_checks ();
16925
16926       /* Leave the scope of the containing function.  */
16927       if (function_scope)
16928         pop_function_context_from (function_scope);
16929       cp_parser_pop_lexer (parser);
16930     }
16931
16932   /* Remove any template parameters from the symbol table.  */
16933   maybe_end_member_template_processing ();
16934
16935   /* Restore the queue.  */
16936   parser->unparsed_functions_queues
16937     = TREE_CHAIN (parser->unparsed_functions_queues);
16938 }
16939
16940 /* If DECL contains any default args, remember it on the unparsed
16941    functions queue.  */
16942
16943 static void
16944 cp_parser_save_default_args (cp_parser* parser, tree decl)
16945 {
16946   tree probe;
16947
16948   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
16949        probe;
16950        probe = TREE_CHAIN (probe))
16951     if (TREE_PURPOSE (probe))
16952       {
16953         TREE_PURPOSE (parser->unparsed_functions_queues)
16954           = tree_cons (current_class_type, decl,
16955                        TREE_PURPOSE (parser->unparsed_functions_queues));
16956         break;
16957       }
16958 }
16959
16960 /* FN is a FUNCTION_DECL which may contains a parameter with an
16961    unparsed DEFAULT_ARG.  Parse the default args now.  This function
16962    assumes that the current scope is the scope in which the default
16963    argument should be processed.  */
16964
16965 static void
16966 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
16967 {
16968   bool saved_local_variables_forbidden_p;
16969   tree parm;
16970
16971   /* While we're parsing the default args, we might (due to the
16972      statement expression extension) encounter more classes.  We want
16973      to handle them right away, but we don't want them getting mixed
16974      up with default args that are currently in the queue.  */
16975   parser->unparsed_functions_queues
16976     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16977
16978   /* Local variable names (and the `this' keyword) may not appear
16979      in a default argument.  */
16980   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
16981   parser->local_variables_forbidden_p = true;
16982
16983   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
16984        parm;
16985        parm = TREE_CHAIN (parm))
16986     {
16987       cp_token_cache *tokens;
16988       tree default_arg = TREE_PURPOSE (parm);
16989       tree parsed_arg;
16990       VEC(tree,gc) *insts;
16991       tree copy;
16992       unsigned ix;
16993
16994       if (!default_arg)
16995         continue;
16996
16997       if (TREE_CODE (default_arg) != DEFAULT_ARG)
16998         /* This can happen for a friend declaration for a function
16999            already declared with default arguments.  */
17000         continue;
17001
17002        /* Push the saved tokens for the default argument onto the parser's
17003           lexer stack.  */
17004       tokens = DEFARG_TOKENS (default_arg);
17005       cp_parser_push_lexer_for_tokens (parser, tokens);
17006
17007       /* Parse the assignment-expression.  */
17008       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false);
17009
17010       if (!processing_template_decl)
17011         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
17012
17013       TREE_PURPOSE (parm) = parsed_arg;
17014
17015       /* Update any instantiations we've already created.  */
17016       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
17017            VEC_iterate (tree, insts, ix, copy); ix++)
17018         TREE_PURPOSE (copy) = parsed_arg;
17019
17020       /* If the token stream has not been completely used up, then
17021          there was extra junk after the end of the default
17022          argument.  */
17023       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
17024         cp_parser_error (parser, "expected %<,%>");
17025
17026       /* Revert to the main lexer.  */
17027       cp_parser_pop_lexer (parser);
17028     }
17029
17030   /* Make sure no default arg is missing.  */
17031   check_default_args (fn);
17032
17033   /* Restore the state of local_variables_forbidden_p.  */
17034   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
17035
17036   /* Restore the queue.  */
17037   parser->unparsed_functions_queues
17038     = TREE_CHAIN (parser->unparsed_functions_queues);
17039 }
17040
17041 /* Parse the operand of `sizeof' (or a similar operator).  Returns
17042    either a TYPE or an expression, depending on the form of the
17043    input.  The KEYWORD indicates which kind of expression we have
17044    encountered.  */
17045
17046 static tree
17047 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
17048 {
17049   static const char *format;
17050   tree expr = NULL_TREE;
17051   const char *saved_message;
17052   bool saved_integral_constant_expression_p;
17053   bool saved_non_integral_constant_expression_p;
17054   bool pack_expansion_p = false;
17055
17056   /* Initialize FORMAT the first time we get here.  */
17057   if (!format)
17058     format = "types may not be defined in '%s' expressions";
17059
17060   /* Types cannot be defined in a `sizeof' expression.  Save away the
17061      old message.  */
17062   saved_message = parser->type_definition_forbidden_message;
17063   /* And create the new one.  */
17064   parser->type_definition_forbidden_message
17065     = XNEWVEC (const char, strlen (format)
17066                + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
17067                + 1 /* `\0' */);
17068   sprintf ((char *) parser->type_definition_forbidden_message,
17069            format, IDENTIFIER_POINTER (ridpointers[keyword]));
17070
17071   /* The restrictions on constant-expressions do not apply inside
17072      sizeof expressions.  */
17073   saved_integral_constant_expression_p
17074     = parser->integral_constant_expression_p;
17075   saved_non_integral_constant_expression_p
17076     = parser->non_integral_constant_expression_p;
17077   parser->integral_constant_expression_p = false;
17078
17079   /* If it's a `...', then we are computing the length of a parameter
17080      pack.  */
17081   if (keyword == RID_SIZEOF
17082       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17083     {
17084       /* Consume the `...'.  */
17085       cp_lexer_consume_token (parser->lexer);
17086       maybe_warn_variadic_templates ();
17087
17088       /* Note that this is an expansion.  */
17089       pack_expansion_p = true;
17090     }
17091
17092   /* Do not actually evaluate the expression.  */
17093   ++skip_evaluation;
17094   /* If it's a `(', then we might be looking at the type-id
17095      construction.  */
17096   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
17097     {
17098       tree type;
17099       bool saved_in_type_id_in_expr_p;
17100
17101       /* We can't be sure yet whether we're looking at a type-id or an
17102          expression.  */
17103       cp_parser_parse_tentatively (parser);
17104       /* Consume the `('.  */
17105       cp_lexer_consume_token (parser->lexer);
17106       /* Parse the type-id.  */
17107       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
17108       parser->in_type_id_in_expr_p = true;
17109       type = cp_parser_type_id (parser);
17110       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
17111       /* Now, look for the trailing `)'.  */
17112       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
17113       /* If all went well, then we're done.  */
17114       if (cp_parser_parse_definitely (parser))
17115         {
17116           cp_decl_specifier_seq decl_specs;
17117
17118           /* Build a trivial decl-specifier-seq.  */
17119           clear_decl_specs (&decl_specs);
17120           decl_specs.type = type;
17121
17122           /* Call grokdeclarator to figure out what type this is.  */
17123           expr = grokdeclarator (NULL,
17124                                  &decl_specs,
17125                                  TYPENAME,
17126                                  /*initialized=*/0,
17127                                  /*attrlist=*/NULL);
17128         }
17129     }
17130
17131   /* If the type-id production did not work out, then we must be
17132      looking at the unary-expression production.  */
17133   if (!expr)
17134     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
17135                                        /*cast_p=*/false);
17136
17137   if (pack_expansion_p)
17138     /* Build a pack expansion. */
17139     expr = make_pack_expansion (expr);
17140
17141   /* Go back to evaluating expressions.  */
17142   --skip_evaluation;
17143
17144   /* Free the message we created.  */
17145   free ((char *) parser->type_definition_forbidden_message);
17146   /* And restore the old one.  */
17147   parser->type_definition_forbidden_message = saved_message;
17148   parser->integral_constant_expression_p
17149     = saved_integral_constant_expression_p;
17150   parser->non_integral_constant_expression_p
17151     = saved_non_integral_constant_expression_p;
17152
17153   return expr;
17154 }
17155
17156 /* If the current declaration has no declarator, return true.  */
17157
17158 static bool
17159 cp_parser_declares_only_class_p (cp_parser *parser)
17160 {
17161   /* If the next token is a `;' or a `,' then there is no
17162      declarator.  */
17163   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
17164           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
17165 }
17166
17167 /* Update the DECL_SPECS to reflect the storage class indicated by
17168    KEYWORD.  */
17169
17170 static void
17171 cp_parser_set_storage_class (cp_parser *parser,
17172                              cp_decl_specifier_seq *decl_specs,
17173                              enum rid keyword)
17174 {
17175   cp_storage_class storage_class;
17176
17177   if (parser->in_unbraced_linkage_specification_p)
17178     {
17179       error ("invalid use of %qD in linkage specification",
17180              ridpointers[keyword]);
17181       return;
17182     }
17183   else if (decl_specs->storage_class != sc_none)
17184     {
17185       decl_specs->conflicting_specifiers_p = true;
17186       return;
17187     }
17188
17189   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
17190       && decl_specs->specs[(int) ds_thread])
17191     {
17192       error ("%<__thread%> before %qD", ridpointers[keyword]);
17193       decl_specs->specs[(int) ds_thread] = 0;
17194     }
17195
17196   switch (keyword)
17197     {
17198     case RID_AUTO:
17199       storage_class = sc_auto;
17200       break;
17201     case RID_REGISTER:
17202       storage_class = sc_register;
17203       break;
17204     case RID_STATIC:
17205       storage_class = sc_static;
17206       break;
17207     case RID_EXTERN:
17208       storage_class = sc_extern;
17209       break;
17210     case RID_MUTABLE:
17211       storage_class = sc_mutable;
17212       break;
17213     default:
17214       gcc_unreachable ();
17215     }
17216   decl_specs->storage_class = storage_class;
17217
17218   /* A storage class specifier cannot be applied alongside a typedef 
17219      specifier. If there is a typedef specifier present then set 
17220      conflicting_specifiers_p which will trigger an error later
17221      on in grokdeclarator. */
17222   if (decl_specs->specs[(int)ds_typedef])
17223     decl_specs->conflicting_specifiers_p = true;
17224 }
17225
17226 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
17227    is true, the type is a user-defined type; otherwise it is a
17228    built-in type specified by a keyword.  */
17229
17230 static void
17231 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
17232                               tree type_spec,
17233                               bool user_defined_p)
17234 {
17235   decl_specs->any_specifiers_p = true;
17236
17237   /* If the user tries to redeclare bool or wchar_t (with, for
17238      example, in "typedef int wchar_t;") we remember that this is what
17239      happened.  In system headers, we ignore these declarations so
17240      that G++ can work with system headers that are not C++-safe.  */
17241   if (decl_specs->specs[(int) ds_typedef]
17242       && !user_defined_p
17243       && (type_spec == boolean_type_node
17244           || type_spec == wchar_type_node)
17245       && (decl_specs->type
17246           || decl_specs->specs[(int) ds_long]
17247           || decl_specs->specs[(int) ds_short]
17248           || decl_specs->specs[(int) ds_unsigned]
17249           || decl_specs->specs[(int) ds_signed]))
17250     {
17251       decl_specs->redefined_builtin_type = type_spec;
17252       if (!decl_specs->type)
17253         {
17254           decl_specs->type = type_spec;
17255           decl_specs->user_defined_type_p = false;
17256         }
17257     }
17258   else if (decl_specs->type)
17259     decl_specs->multiple_types_p = true;
17260   else
17261     {
17262       decl_specs->type = type_spec;
17263       decl_specs->user_defined_type_p = user_defined_p;
17264       decl_specs->redefined_builtin_type = NULL_TREE;
17265     }
17266 }
17267
17268 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
17269    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
17270
17271 static bool
17272 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
17273 {
17274   return decl_specifiers->specs[(int) ds_friend] != 0;
17275 }
17276
17277 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
17278    issue an error message indicating that TOKEN_DESC was expected.
17279
17280    Returns the token consumed, if the token had the appropriate type.
17281    Otherwise, returns NULL.  */
17282
17283 static cp_token *
17284 cp_parser_require (cp_parser* parser,
17285                    enum cpp_ttype type,
17286                    const char* token_desc)
17287 {
17288   if (cp_lexer_next_token_is (parser->lexer, type))
17289     return cp_lexer_consume_token (parser->lexer);
17290   else
17291     {
17292       /* Output the MESSAGE -- unless we're parsing tentatively.  */
17293       if (!cp_parser_simulate_error (parser))
17294         {
17295           char *message = concat ("expected ", token_desc, NULL);
17296           cp_parser_error (parser, message);
17297           free (message);
17298         }
17299       return NULL;
17300     }
17301 }
17302
17303 /* An error message is produced if the next token is not '>'.
17304    All further tokens are skipped until the desired token is
17305    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
17306
17307 static void
17308 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
17309 {
17310   /* Current level of '< ... >'.  */
17311   unsigned level = 0;
17312   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
17313   unsigned nesting_depth = 0;
17314
17315   /* Are we ready, yet?  If not, issue error message.  */
17316   if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
17317     return;
17318
17319   /* Skip tokens until the desired token is found.  */
17320   while (true)
17321     {
17322       /* Peek at the next token.  */
17323       switch (cp_lexer_peek_token (parser->lexer)->type)
17324         {
17325         case CPP_LESS:
17326           if (!nesting_depth)
17327             ++level;
17328           break;
17329
17330         case CPP_RSHIFT:
17331           if (!flag_cpp0x)
17332             /* C++0x views the `>>' operator as two `>' tokens, but
17333                C++98 does not. */
17334             break;
17335           else if (!nesting_depth && level-- == 0)
17336             {
17337               /* We've hit a `>>' where the first `>' closes the
17338                  template argument list, and the second `>' is
17339                  spurious.  Just consume the `>>' and stop; we've
17340                  already produced at least one error.  */
17341               cp_lexer_consume_token (parser->lexer);
17342               return;
17343             }
17344           /* Fall through for C++0x, so we handle the second `>' in
17345              the `>>'.  */
17346
17347         case CPP_GREATER:
17348           if (!nesting_depth && level-- == 0)
17349             {
17350               /* We've reached the token we want, consume it and stop.  */
17351               cp_lexer_consume_token (parser->lexer);
17352               return;
17353             }
17354           break;
17355
17356         case CPP_OPEN_PAREN:
17357         case CPP_OPEN_SQUARE:
17358           ++nesting_depth;
17359           break;
17360
17361         case CPP_CLOSE_PAREN:
17362         case CPP_CLOSE_SQUARE:
17363           if (nesting_depth-- == 0)
17364             return;
17365           break;
17366
17367         case CPP_EOF:
17368         case CPP_PRAGMA_EOL:
17369         case CPP_SEMICOLON:
17370         case CPP_OPEN_BRACE:
17371         case CPP_CLOSE_BRACE:
17372           /* The '>' was probably forgotten, don't look further.  */
17373           return;
17374
17375         default:
17376           break;
17377         }
17378
17379       /* Consume this token.  */
17380       cp_lexer_consume_token (parser->lexer);
17381     }
17382 }
17383
17384 /* If the next token is the indicated keyword, consume it.  Otherwise,
17385    issue an error message indicating that TOKEN_DESC was expected.
17386
17387    Returns the token consumed, if the token had the appropriate type.
17388    Otherwise, returns NULL.  */
17389
17390 static cp_token *
17391 cp_parser_require_keyword (cp_parser* parser,
17392                            enum rid keyword,
17393                            const char* token_desc)
17394 {
17395   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
17396
17397   if (token && token->keyword != keyword)
17398     {
17399       dyn_string_t error_msg;
17400
17401       /* Format the error message.  */
17402       error_msg = dyn_string_new (0);
17403       dyn_string_append_cstr (error_msg, "expected ");
17404       dyn_string_append_cstr (error_msg, token_desc);
17405       cp_parser_error (parser, error_msg->s);
17406       dyn_string_delete (error_msg);
17407       return NULL;
17408     }
17409
17410   return token;
17411 }
17412
17413 /* Returns TRUE iff TOKEN is a token that can begin the body of a
17414    function-definition.  */
17415
17416 static bool
17417 cp_parser_token_starts_function_definition_p (cp_token* token)
17418 {
17419   return (/* An ordinary function-body begins with an `{'.  */
17420           token->type == CPP_OPEN_BRACE
17421           /* A ctor-initializer begins with a `:'.  */
17422           || token->type == CPP_COLON
17423           /* A function-try-block begins with `try'.  */
17424           || token->keyword == RID_TRY
17425           /* The named return value extension begins with `return'.  */
17426           || token->keyword == RID_RETURN);
17427 }
17428
17429 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
17430    definition.  */
17431
17432 static bool
17433 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
17434 {
17435   cp_token *token;
17436
17437   token = cp_lexer_peek_token (parser->lexer);
17438   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
17439 }
17440
17441 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
17442    C++0x) ending a template-argument.  */
17443
17444 static bool
17445 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
17446 {
17447   cp_token *token;
17448
17449   token = cp_lexer_peek_token (parser->lexer);
17450   return (token->type == CPP_COMMA 
17451           || token->type == CPP_GREATER
17452           || token->type == CPP_ELLIPSIS
17453           || (flag_cpp0x && token->type == CPP_RSHIFT));
17454 }
17455
17456 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
17457    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
17458
17459 static bool
17460 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
17461                                                      size_t n)
17462 {
17463   cp_token *token;
17464
17465   token = cp_lexer_peek_nth_token (parser->lexer, n);
17466   if (token->type == CPP_LESS)
17467     return true;
17468   /* Check for the sequence `<::' in the original code. It would be lexed as
17469      `[:', where `[' is a digraph, and there is no whitespace before
17470      `:'.  */
17471   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
17472     {
17473       cp_token *token2;
17474       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
17475       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
17476         return true;
17477     }
17478   return false;
17479 }
17480
17481 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
17482    or none_type otherwise.  */
17483
17484 static enum tag_types
17485 cp_parser_token_is_class_key (cp_token* token)
17486 {
17487   switch (token->keyword)
17488     {
17489     case RID_CLASS:
17490       return class_type;
17491     case RID_STRUCT:
17492       return record_type;
17493     case RID_UNION:
17494       return union_type;
17495
17496     default:
17497       return none_type;
17498     }
17499 }
17500
17501 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
17502
17503 static void
17504 cp_parser_check_class_key (enum tag_types class_key, tree type)
17505 {
17506   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
17507     pedwarn ("%qs tag used in naming %q#T",
17508             class_key == union_type ? "union"
17509              : class_key == record_type ? "struct" : "class",
17510              type);
17511 }
17512
17513 /* Issue an error message if DECL is redeclared with different
17514    access than its original declaration [class.access.spec/3].
17515    This applies to nested classes and nested class templates.
17516    [class.mem/1].  */
17517
17518 static void
17519 cp_parser_check_access_in_redeclaration (tree decl)
17520 {
17521   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
17522     return;
17523
17524   if ((TREE_PRIVATE (decl)
17525        != (current_access_specifier == access_private_node))
17526       || (TREE_PROTECTED (decl)
17527           != (current_access_specifier == access_protected_node)))
17528     error ("%qD redeclared with different access", decl);
17529 }
17530
17531 /* Look for the `template' keyword, as a syntactic disambiguator.
17532    Return TRUE iff it is present, in which case it will be
17533    consumed.  */
17534
17535 static bool
17536 cp_parser_optional_template_keyword (cp_parser *parser)
17537 {
17538   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
17539     {
17540       /* The `template' keyword can only be used within templates;
17541          outside templates the parser can always figure out what is a
17542          template and what is not.  */
17543       if (!processing_template_decl)
17544         {
17545           error ("%<template%> (as a disambiguator) is only allowed "
17546                  "within templates");
17547           /* If this part of the token stream is rescanned, the same
17548              error message would be generated.  So, we purge the token
17549              from the stream.  */
17550           cp_lexer_purge_token (parser->lexer);
17551           return false;
17552         }
17553       else
17554         {
17555           /* Consume the `template' keyword.  */
17556           cp_lexer_consume_token (parser->lexer);
17557           return true;
17558         }
17559     }
17560
17561   return false;
17562 }
17563
17564 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
17565    set PARSER->SCOPE, and perform other related actions.  */
17566
17567 static void
17568 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
17569 {
17570   int i;
17571   struct tree_check *check_value;
17572   deferred_access_check *chk;
17573   VEC (deferred_access_check,gc) *checks;
17574
17575   /* Get the stored value.  */
17576   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
17577   /* Perform any access checks that were deferred.  */
17578   checks = check_value->checks;
17579   if (checks)
17580     {
17581       for (i = 0 ;
17582            VEC_iterate (deferred_access_check, checks, i, chk) ;
17583            ++i)
17584         {
17585           perform_or_defer_access_check (chk->binfo,
17586                                          chk->decl,
17587                                          chk->diag_decl);
17588         }
17589     }
17590   /* Set the scope from the stored value.  */
17591   parser->scope = check_value->value;
17592   parser->qualifying_scope = check_value->qualifying_scope;
17593   parser->object_scope = NULL_TREE;
17594 }
17595
17596 /* Consume tokens up through a non-nested END token.  */
17597
17598 static void
17599 cp_parser_cache_group (cp_parser *parser,
17600                        enum cpp_ttype end,
17601                        unsigned depth)
17602 {
17603   while (true)
17604     {
17605       cp_token *token;
17606
17607       /* Abort a parenthesized expression if we encounter a brace.  */
17608       if ((end == CPP_CLOSE_PAREN || depth == 0)
17609           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17610         return;
17611       /* If we've reached the end of the file, stop.  */
17612       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF)
17613           || (end != CPP_PRAGMA_EOL
17614               && cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL)))
17615         return;
17616       /* Consume the next token.  */
17617       token = cp_lexer_consume_token (parser->lexer);
17618       /* See if it starts a new group.  */
17619       if (token->type == CPP_OPEN_BRACE)
17620         {
17621           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
17622           if (depth == 0)
17623             return;
17624         }
17625       else if (token->type == CPP_OPEN_PAREN)
17626         cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
17627       else if (token->type == CPP_PRAGMA)
17628         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
17629       else if (token->type == end)
17630         return;
17631     }
17632 }
17633
17634 /* Begin parsing tentatively.  We always save tokens while parsing
17635    tentatively so that if the tentative parsing fails we can restore the
17636    tokens.  */
17637
17638 static void
17639 cp_parser_parse_tentatively (cp_parser* parser)
17640 {
17641   /* Enter a new parsing context.  */
17642   parser->context = cp_parser_context_new (parser->context);
17643   /* Begin saving tokens.  */
17644   cp_lexer_save_tokens (parser->lexer);
17645   /* In order to avoid repetitive access control error messages,
17646      access checks are queued up until we are no longer parsing
17647      tentatively.  */
17648   push_deferring_access_checks (dk_deferred);
17649 }
17650
17651 /* Commit to the currently active tentative parse.  */
17652
17653 static void
17654 cp_parser_commit_to_tentative_parse (cp_parser* parser)
17655 {
17656   cp_parser_context *context;
17657   cp_lexer *lexer;
17658
17659   /* Mark all of the levels as committed.  */
17660   lexer = parser->lexer;
17661   for (context = parser->context; context->next; context = context->next)
17662     {
17663       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
17664         break;
17665       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
17666       while (!cp_lexer_saving_tokens (lexer))
17667         lexer = lexer->next;
17668       cp_lexer_commit_tokens (lexer);
17669     }
17670 }
17671
17672 /* Abort the currently active tentative parse.  All consumed tokens
17673    will be rolled back, and no diagnostics will be issued.  */
17674
17675 static void
17676 cp_parser_abort_tentative_parse (cp_parser* parser)
17677 {
17678   cp_parser_simulate_error (parser);
17679   /* Now, pretend that we want to see if the construct was
17680      successfully parsed.  */
17681   cp_parser_parse_definitely (parser);
17682 }
17683
17684 /* Stop parsing tentatively.  If a parse error has occurred, restore the
17685    token stream.  Otherwise, commit to the tokens we have consumed.
17686    Returns true if no error occurred; false otherwise.  */
17687
17688 static bool
17689 cp_parser_parse_definitely (cp_parser* parser)
17690 {
17691   bool error_occurred;
17692   cp_parser_context *context;
17693
17694   /* Remember whether or not an error occurred, since we are about to
17695      destroy that information.  */
17696   error_occurred = cp_parser_error_occurred (parser);
17697   /* Remove the topmost context from the stack.  */
17698   context = parser->context;
17699   parser->context = context->next;
17700   /* If no parse errors occurred, commit to the tentative parse.  */
17701   if (!error_occurred)
17702     {
17703       /* Commit to the tokens read tentatively, unless that was
17704          already done.  */
17705       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
17706         cp_lexer_commit_tokens (parser->lexer);
17707
17708       pop_to_parent_deferring_access_checks ();
17709     }
17710   /* Otherwise, if errors occurred, roll back our state so that things
17711      are just as they were before we began the tentative parse.  */
17712   else
17713     {
17714       cp_lexer_rollback_tokens (parser->lexer);
17715       pop_deferring_access_checks ();
17716     }
17717   /* Add the context to the front of the free list.  */
17718   context->next = cp_parser_context_free_list;
17719   cp_parser_context_free_list = context;
17720
17721   return !error_occurred;
17722 }
17723
17724 /* Returns true if we are parsing tentatively and are not committed to
17725    this tentative parse.  */
17726
17727 static bool
17728 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
17729 {
17730   return (cp_parser_parsing_tentatively (parser)
17731           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
17732 }
17733
17734 /* Returns nonzero iff an error has occurred during the most recent
17735    tentative parse.  */
17736
17737 static bool
17738 cp_parser_error_occurred (cp_parser* parser)
17739 {
17740   return (cp_parser_parsing_tentatively (parser)
17741           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
17742 }
17743
17744 /* Returns nonzero if GNU extensions are allowed.  */
17745
17746 static bool
17747 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
17748 {
17749   return parser->allow_gnu_extensions_p;
17750 }
17751 \f
17752 /* Objective-C++ Productions */
17753
17754
17755 /* Parse an Objective-C expression, which feeds into a primary-expression
17756    above.
17757
17758    objc-expression:
17759      objc-message-expression
17760      objc-string-literal
17761      objc-encode-expression
17762      objc-protocol-expression
17763      objc-selector-expression
17764
17765   Returns a tree representation of the expression.  */
17766
17767 static tree
17768 cp_parser_objc_expression (cp_parser* parser)
17769 {
17770   /* Try to figure out what kind of declaration is present.  */
17771   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17772
17773   switch (kwd->type)
17774     {
17775     case CPP_OPEN_SQUARE:
17776       return cp_parser_objc_message_expression (parser);
17777
17778     case CPP_OBJC_STRING:
17779       kwd = cp_lexer_consume_token (parser->lexer);
17780       return objc_build_string_object (kwd->u.value);
17781
17782     case CPP_KEYWORD:
17783       switch (kwd->keyword)
17784         {
17785         case RID_AT_ENCODE:
17786           return cp_parser_objc_encode_expression (parser);
17787
17788         case RID_AT_PROTOCOL:
17789           return cp_parser_objc_protocol_expression (parser);
17790
17791         case RID_AT_SELECTOR:
17792           return cp_parser_objc_selector_expression (parser);
17793
17794         default:
17795           break;
17796         }
17797     default:
17798       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
17799       cp_parser_skip_to_end_of_block_or_statement (parser);
17800     }
17801
17802   return error_mark_node;
17803 }
17804
17805 /* Parse an Objective-C message expression.
17806
17807    objc-message-expression:
17808      [ objc-message-receiver objc-message-args ]
17809
17810    Returns a representation of an Objective-C message.  */
17811
17812 static tree
17813 cp_parser_objc_message_expression (cp_parser* parser)
17814 {
17815   tree receiver, messageargs;
17816
17817   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
17818   receiver = cp_parser_objc_message_receiver (parser);
17819   messageargs = cp_parser_objc_message_args (parser);
17820   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
17821
17822   return objc_build_message_expr (build_tree_list (receiver, messageargs));
17823 }
17824
17825 /* Parse an objc-message-receiver.
17826
17827    objc-message-receiver:
17828      expression
17829      simple-type-specifier
17830
17831   Returns a representation of the type or expression.  */
17832
17833 static tree
17834 cp_parser_objc_message_receiver (cp_parser* parser)
17835 {
17836   tree rcv;
17837
17838   /* An Objective-C message receiver may be either (1) a type
17839      or (2) an expression.  */
17840   cp_parser_parse_tentatively (parser);
17841   rcv = cp_parser_expression (parser, false);
17842
17843   if (cp_parser_parse_definitely (parser))
17844     return rcv;
17845
17846   rcv = cp_parser_simple_type_specifier (parser,
17847                                          /*decl_specs=*/NULL,
17848                                          CP_PARSER_FLAGS_NONE);
17849
17850   return objc_get_class_reference (rcv);
17851 }
17852
17853 /* Parse the arguments and selectors comprising an Objective-C message.
17854
17855    objc-message-args:
17856      objc-selector
17857      objc-selector-args
17858      objc-selector-args , objc-comma-args
17859
17860    objc-selector-args:
17861      objc-selector [opt] : assignment-expression
17862      objc-selector-args objc-selector [opt] : assignment-expression
17863
17864    objc-comma-args:
17865      assignment-expression
17866      objc-comma-args , assignment-expression
17867
17868    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
17869    selector arguments and TREE_VALUE containing a list of comma
17870    arguments.  */
17871
17872 static tree
17873 cp_parser_objc_message_args (cp_parser* parser)
17874 {
17875   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
17876   bool maybe_unary_selector_p = true;
17877   cp_token *token = cp_lexer_peek_token (parser->lexer);
17878
17879   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17880     {
17881       tree selector = NULL_TREE, arg;
17882
17883       if (token->type != CPP_COLON)
17884         selector = cp_parser_objc_selector (parser);
17885
17886       /* Detect if we have a unary selector.  */
17887       if (maybe_unary_selector_p
17888           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17889         return build_tree_list (selector, NULL_TREE);
17890
17891       maybe_unary_selector_p = false;
17892       cp_parser_require (parser, CPP_COLON, "`:'");
17893       arg = cp_parser_assignment_expression (parser, false);
17894
17895       sel_args
17896         = chainon (sel_args,
17897                    build_tree_list (selector, arg));
17898
17899       token = cp_lexer_peek_token (parser->lexer);
17900     }
17901
17902   /* Handle non-selector arguments, if any. */
17903   while (token->type == CPP_COMMA)
17904     {
17905       tree arg;
17906
17907       cp_lexer_consume_token (parser->lexer);
17908       arg = cp_parser_assignment_expression (parser, false);
17909
17910       addl_args
17911         = chainon (addl_args,
17912                    build_tree_list (NULL_TREE, arg));
17913
17914       token = cp_lexer_peek_token (parser->lexer);
17915     }
17916
17917   return build_tree_list (sel_args, addl_args);
17918 }
17919
17920 /* Parse an Objective-C encode expression.
17921
17922    objc-encode-expression:
17923      @encode objc-typename
17924
17925    Returns an encoded representation of the type argument.  */
17926
17927 static tree
17928 cp_parser_objc_encode_expression (cp_parser* parser)
17929 {
17930   tree type;
17931
17932   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
17933   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17934   type = complete_type (cp_parser_type_id (parser));
17935   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17936
17937   if (!type)
17938     {
17939       error ("%<@encode%> must specify a type as an argument");
17940       return error_mark_node;
17941     }
17942
17943   return objc_build_encode_expr (type);
17944 }
17945
17946 /* Parse an Objective-C @defs expression.  */
17947
17948 static tree
17949 cp_parser_objc_defs_expression (cp_parser *parser)
17950 {
17951   tree name;
17952
17953   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
17954   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17955   name = cp_parser_identifier (parser);
17956   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17957
17958   return objc_get_class_ivars (name);
17959 }
17960
17961 /* Parse an Objective-C protocol expression.
17962
17963   objc-protocol-expression:
17964     @protocol ( identifier )
17965
17966   Returns a representation of the protocol expression.  */
17967
17968 static tree
17969 cp_parser_objc_protocol_expression (cp_parser* parser)
17970 {
17971   tree proto;
17972
17973   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17974   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17975   proto = cp_parser_identifier (parser);
17976   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17977
17978   return objc_build_protocol_expr (proto);
17979 }
17980
17981 /* Parse an Objective-C selector expression.
17982
17983    objc-selector-expression:
17984      @selector ( objc-method-signature )
17985
17986    objc-method-signature:
17987      objc-selector
17988      objc-selector-seq
17989
17990    objc-selector-seq:
17991      objc-selector :
17992      objc-selector-seq objc-selector :
17993
17994   Returns a representation of the method selector.  */
17995
17996 static tree
17997 cp_parser_objc_selector_expression (cp_parser* parser)
17998 {
17999   tree sel_seq = NULL_TREE;
18000   bool maybe_unary_selector_p = true;
18001   cp_token *token;
18002
18003   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
18004   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
18005   token = cp_lexer_peek_token (parser->lexer);
18006
18007   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
18008          || token->type == CPP_SCOPE)
18009     {
18010       tree selector = NULL_TREE;
18011
18012       if (token->type != CPP_COLON
18013           || token->type == CPP_SCOPE)
18014         selector = cp_parser_objc_selector (parser);
18015
18016       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
18017           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
18018         {
18019           /* Detect if we have a unary selector.  */
18020           if (maybe_unary_selector_p)
18021             {
18022               sel_seq = selector;
18023               goto finish_selector;
18024             }
18025           else
18026             {
18027               cp_parser_error (parser, "expected %<:%>");
18028             }
18029         }
18030       maybe_unary_selector_p = false;
18031       token = cp_lexer_consume_token (parser->lexer);
18032
18033       if (token->type == CPP_SCOPE)
18034         {
18035           sel_seq
18036             = chainon (sel_seq,
18037                        build_tree_list (selector, NULL_TREE));
18038           sel_seq
18039             = chainon (sel_seq,
18040                        build_tree_list (NULL_TREE, NULL_TREE));
18041         }
18042       else
18043         sel_seq
18044           = chainon (sel_seq,
18045                      build_tree_list (selector, NULL_TREE));
18046
18047       token = cp_lexer_peek_token (parser->lexer);
18048     }
18049
18050  finish_selector:
18051   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
18052
18053   return objc_build_selector_expr (sel_seq);
18054 }
18055
18056 /* Parse a list of identifiers.
18057
18058    objc-identifier-list:
18059      identifier
18060      objc-identifier-list , identifier
18061
18062    Returns a TREE_LIST of identifier nodes.  */
18063
18064 static tree
18065 cp_parser_objc_identifier_list (cp_parser* parser)
18066 {
18067   tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
18068   cp_token *sep = cp_lexer_peek_token (parser->lexer);
18069
18070   while (sep->type == CPP_COMMA)
18071     {
18072       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
18073       list = chainon (list,
18074                       build_tree_list (NULL_TREE,
18075                                        cp_parser_identifier (parser)));
18076       sep = cp_lexer_peek_token (parser->lexer);
18077     }
18078
18079   return list;
18080 }
18081
18082 /* Parse an Objective-C alias declaration.
18083
18084    objc-alias-declaration:
18085      @compatibility_alias identifier identifier ;
18086
18087    This function registers the alias mapping with the Objective-C front end.
18088    It returns nothing.  */
18089
18090 static void
18091 cp_parser_objc_alias_declaration (cp_parser* parser)
18092 {
18093   tree alias, orig;
18094
18095   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
18096   alias = cp_parser_identifier (parser);
18097   orig = cp_parser_identifier (parser);
18098   objc_declare_alias (alias, orig);
18099   cp_parser_consume_semicolon_at_end_of_statement (parser);
18100 }
18101
18102 /* Parse an Objective-C class forward-declaration.
18103
18104    objc-class-declaration:
18105      @class objc-identifier-list ;
18106
18107    The function registers the forward declarations with the Objective-C
18108    front end.  It returns nothing.  */
18109
18110 static void
18111 cp_parser_objc_class_declaration (cp_parser* parser)
18112 {
18113   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
18114   objc_declare_class (cp_parser_objc_identifier_list (parser));
18115   cp_parser_consume_semicolon_at_end_of_statement (parser);
18116 }
18117
18118 /* Parse a list of Objective-C protocol references.
18119
18120    objc-protocol-refs-opt:
18121      objc-protocol-refs [opt]
18122
18123    objc-protocol-refs:
18124      < objc-identifier-list >
18125
18126    Returns a TREE_LIST of identifiers, if any.  */
18127
18128 static tree
18129 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
18130 {
18131   tree protorefs = NULL_TREE;
18132
18133   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
18134     {
18135       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
18136       protorefs = cp_parser_objc_identifier_list (parser);
18137       cp_parser_require (parser, CPP_GREATER, "`>'");
18138     }
18139
18140   return protorefs;
18141 }
18142
18143 /* Parse a Objective-C visibility specification.  */
18144
18145 static void
18146 cp_parser_objc_visibility_spec (cp_parser* parser)
18147 {
18148   cp_token *vis = cp_lexer_peek_token (parser->lexer);
18149
18150   switch (vis->keyword)
18151     {
18152     case RID_AT_PRIVATE:
18153       objc_set_visibility (2);
18154       break;
18155     case RID_AT_PROTECTED:
18156       objc_set_visibility (0);
18157       break;
18158     case RID_AT_PUBLIC:
18159       objc_set_visibility (1);
18160       break;
18161     default:
18162       return;
18163     }
18164
18165   /* Eat '@private'/'@protected'/'@public'.  */
18166   cp_lexer_consume_token (parser->lexer);
18167 }
18168
18169 /* Parse an Objective-C method type.  */
18170
18171 static void
18172 cp_parser_objc_method_type (cp_parser* parser)
18173 {
18174   objc_set_method_type
18175    (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
18176     ? PLUS_EXPR
18177     : MINUS_EXPR);
18178 }
18179
18180 /* Parse an Objective-C protocol qualifier.  */
18181
18182 static tree
18183 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
18184 {
18185   tree quals = NULL_TREE, node;
18186   cp_token *token = cp_lexer_peek_token (parser->lexer);
18187
18188   node = token->u.value;
18189
18190   while (node && TREE_CODE (node) == IDENTIFIER_NODE
18191          && (node == ridpointers [(int) RID_IN]
18192              || node == ridpointers [(int) RID_OUT]
18193              || node == ridpointers [(int) RID_INOUT]
18194              || node == ridpointers [(int) RID_BYCOPY]
18195              || node == ridpointers [(int) RID_BYREF]
18196              || node == ridpointers [(int) RID_ONEWAY]))
18197     {
18198       quals = tree_cons (NULL_TREE, node, quals);
18199       cp_lexer_consume_token (parser->lexer);
18200       token = cp_lexer_peek_token (parser->lexer);
18201       node = token->u.value;
18202     }
18203
18204   return quals;
18205 }
18206
18207 /* Parse an Objective-C typename.  */
18208
18209 static tree
18210 cp_parser_objc_typename (cp_parser* parser)
18211 {
18212   tree typename = NULL_TREE;
18213
18214   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18215     {
18216       tree proto_quals, cp_type = NULL_TREE;
18217
18218       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
18219       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
18220
18221       /* An ObjC type name may consist of just protocol qualifiers, in which
18222          case the type shall default to 'id'.  */
18223       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
18224         cp_type = cp_parser_type_id (parser);
18225
18226       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
18227       typename = build_tree_list (proto_quals, cp_type);
18228     }
18229
18230   return typename;
18231 }
18232
18233 /* Check to see if TYPE refers to an Objective-C selector name.  */
18234
18235 static bool
18236 cp_parser_objc_selector_p (enum cpp_ttype type)
18237 {
18238   return (type == CPP_NAME || type == CPP_KEYWORD
18239           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
18240           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
18241           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
18242           || type == CPP_XOR || type == CPP_XOR_EQ);
18243 }
18244
18245 /* Parse an Objective-C selector.  */
18246
18247 static tree
18248 cp_parser_objc_selector (cp_parser* parser)
18249 {
18250   cp_token *token = cp_lexer_consume_token (parser->lexer);
18251
18252   if (!cp_parser_objc_selector_p (token->type))
18253     {
18254       error ("invalid Objective-C++ selector name");
18255       return error_mark_node;
18256     }
18257
18258   /* C++ operator names are allowed to appear in ObjC selectors.  */
18259   switch (token->type)
18260     {
18261     case CPP_AND_AND: return get_identifier ("and");
18262     case CPP_AND_EQ: return get_identifier ("and_eq");
18263     case CPP_AND: return get_identifier ("bitand");
18264     case CPP_OR: return get_identifier ("bitor");
18265     case CPP_COMPL: return get_identifier ("compl");
18266     case CPP_NOT: return get_identifier ("not");
18267     case CPP_NOT_EQ: return get_identifier ("not_eq");
18268     case CPP_OR_OR: return get_identifier ("or");
18269     case CPP_OR_EQ: return get_identifier ("or_eq");
18270     case CPP_XOR: return get_identifier ("xor");
18271     case CPP_XOR_EQ: return get_identifier ("xor_eq");
18272     default: return token->u.value;
18273     }
18274 }
18275
18276 /* Parse an Objective-C params list.  */
18277
18278 static tree
18279 cp_parser_objc_method_keyword_params (cp_parser* parser)
18280 {
18281   tree params = NULL_TREE;
18282   bool maybe_unary_selector_p = true;
18283   cp_token *token = cp_lexer_peek_token (parser->lexer);
18284
18285   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
18286     {
18287       tree selector = NULL_TREE, typename, identifier;
18288
18289       if (token->type != CPP_COLON)
18290         selector = cp_parser_objc_selector (parser);
18291
18292       /* Detect if we have a unary selector.  */
18293       if (maybe_unary_selector_p
18294           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
18295         return selector;
18296
18297       maybe_unary_selector_p = false;
18298       cp_parser_require (parser, CPP_COLON, "`:'");
18299       typename = cp_parser_objc_typename (parser);
18300       identifier = cp_parser_identifier (parser);
18301
18302       params
18303         = chainon (params,
18304                    objc_build_keyword_decl (selector,
18305                                             typename,
18306                                             identifier));
18307
18308       token = cp_lexer_peek_token (parser->lexer);
18309     }
18310
18311   return params;
18312 }
18313
18314 /* Parse the non-keyword Objective-C params.  */
18315
18316 static tree
18317 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
18318 {
18319   tree params = make_node (TREE_LIST);
18320   cp_token *token = cp_lexer_peek_token (parser->lexer);
18321   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
18322
18323   while (token->type == CPP_COMMA)
18324     {
18325       cp_parameter_declarator *parmdecl;
18326       tree parm;
18327
18328       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
18329       token = cp_lexer_peek_token (parser->lexer);
18330
18331       if (token->type == CPP_ELLIPSIS)
18332         {
18333           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
18334           *ellipsisp = true;
18335           break;
18336         }
18337
18338       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
18339       parm = grokdeclarator (parmdecl->declarator,
18340                              &parmdecl->decl_specifiers,
18341                              PARM, /*initialized=*/0,
18342                              /*attrlist=*/NULL);
18343
18344       chainon (params, build_tree_list (NULL_TREE, parm));
18345       token = cp_lexer_peek_token (parser->lexer);
18346     }
18347
18348   return params;
18349 }
18350
18351 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
18352
18353 static void
18354 cp_parser_objc_interstitial_code (cp_parser* parser)
18355 {
18356   cp_token *token = cp_lexer_peek_token (parser->lexer);
18357
18358   /* If the next token is `extern' and the following token is a string
18359      literal, then we have a linkage specification.  */
18360   if (token->keyword == RID_EXTERN
18361       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
18362     cp_parser_linkage_specification (parser);
18363   /* Handle #pragma, if any.  */
18364   else if (token->type == CPP_PRAGMA)
18365     cp_parser_pragma (parser, pragma_external);
18366   /* Allow stray semicolons.  */
18367   else if (token->type == CPP_SEMICOLON)
18368     cp_lexer_consume_token (parser->lexer);
18369   /* Finally, try to parse a block-declaration, or a function-definition.  */
18370   else
18371     cp_parser_block_declaration (parser, /*statement_p=*/false);
18372 }
18373
18374 /* Parse a method signature.  */
18375
18376 static tree
18377 cp_parser_objc_method_signature (cp_parser* parser)
18378 {
18379   tree rettype, kwdparms, optparms;
18380   bool ellipsis = false;
18381
18382   cp_parser_objc_method_type (parser);
18383   rettype = cp_parser_objc_typename (parser);
18384   kwdparms = cp_parser_objc_method_keyword_params (parser);
18385   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
18386
18387   return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
18388 }
18389
18390 /* Pars an Objective-C method prototype list.  */
18391
18392 static void
18393 cp_parser_objc_method_prototype_list (cp_parser* parser)
18394 {
18395   cp_token *token = cp_lexer_peek_token (parser->lexer);
18396
18397   while (token->keyword != RID_AT_END)
18398     {
18399       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
18400         {
18401           objc_add_method_declaration
18402            (cp_parser_objc_method_signature (parser));
18403           cp_parser_consume_semicolon_at_end_of_statement (parser);
18404         }
18405       else
18406         /* Allow for interspersed non-ObjC++ code.  */
18407         cp_parser_objc_interstitial_code (parser);
18408
18409       token = cp_lexer_peek_token (parser->lexer);
18410     }
18411
18412   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
18413   objc_finish_interface ();
18414 }
18415
18416 /* Parse an Objective-C method definition list.  */
18417
18418 static void
18419 cp_parser_objc_method_definition_list (cp_parser* parser)
18420 {
18421   cp_token *token = cp_lexer_peek_token (parser->lexer);
18422
18423   while (token->keyword != RID_AT_END)
18424     {
18425       tree meth;
18426
18427       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
18428         {
18429           push_deferring_access_checks (dk_deferred);
18430           objc_start_method_definition
18431            (cp_parser_objc_method_signature (parser));
18432
18433           /* For historical reasons, we accept an optional semicolon.  */
18434           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
18435             cp_lexer_consume_token (parser->lexer);
18436
18437           perform_deferred_access_checks ();
18438           stop_deferring_access_checks ();
18439           meth = cp_parser_function_definition_after_declarator (parser,
18440                                                                  false);
18441           pop_deferring_access_checks ();
18442           objc_finish_method_definition (meth);
18443         }
18444       else
18445         /* Allow for interspersed non-ObjC++ code.  */
18446         cp_parser_objc_interstitial_code (parser);
18447
18448       token = cp_lexer_peek_token (parser->lexer);
18449     }
18450
18451   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
18452   objc_finish_implementation ();
18453 }
18454
18455 /* Parse Objective-C ivars.  */
18456
18457 static void
18458 cp_parser_objc_class_ivars (cp_parser* parser)
18459 {
18460   cp_token *token = cp_lexer_peek_token (parser->lexer);
18461
18462   if (token->type != CPP_OPEN_BRACE)
18463     return;     /* No ivars specified.  */
18464
18465   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
18466   token = cp_lexer_peek_token (parser->lexer);
18467
18468   while (token->type != CPP_CLOSE_BRACE)
18469     {
18470       cp_decl_specifier_seq declspecs;
18471       int decl_class_or_enum_p;
18472       tree prefix_attributes;
18473
18474       cp_parser_objc_visibility_spec (parser);
18475
18476       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
18477         break;
18478
18479       cp_parser_decl_specifier_seq (parser,
18480                                     CP_PARSER_FLAGS_OPTIONAL,
18481                                     &declspecs,
18482                                     &decl_class_or_enum_p);
18483       prefix_attributes = declspecs.attributes;
18484       declspecs.attributes = NULL_TREE;
18485
18486       /* Keep going until we hit the `;' at the end of the
18487          declaration.  */
18488       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18489         {
18490           tree width = NULL_TREE, attributes, first_attribute, decl;
18491           cp_declarator *declarator = NULL;
18492           int ctor_dtor_or_conv_p;
18493
18494           /* Check for a (possibly unnamed) bitfield declaration.  */
18495           token = cp_lexer_peek_token (parser->lexer);
18496           if (token->type == CPP_COLON)
18497             goto eat_colon;
18498
18499           if (token->type == CPP_NAME
18500               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
18501                   == CPP_COLON))
18502             {
18503               /* Get the name of the bitfield.  */
18504               declarator = make_id_declarator (NULL_TREE,
18505                                                cp_parser_identifier (parser),
18506                                                sfk_none);
18507
18508              eat_colon:
18509               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
18510               /* Get the width of the bitfield.  */
18511               width
18512                 = cp_parser_constant_expression (parser,
18513                                                  /*allow_non_constant=*/false,
18514                                                  NULL);
18515             }
18516           else
18517             {
18518               /* Parse the declarator.  */
18519               declarator
18520                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
18521                                         &ctor_dtor_or_conv_p,
18522                                         /*parenthesized_p=*/NULL,
18523                                         /*member_p=*/false);
18524             }
18525
18526           /* Look for attributes that apply to the ivar.  */
18527           attributes = cp_parser_attributes_opt (parser);
18528           /* Remember which attributes are prefix attributes and
18529              which are not.  */
18530           first_attribute = attributes;
18531           /* Combine the attributes.  */
18532           attributes = chainon (prefix_attributes, attributes);
18533
18534           if (width)
18535             {
18536               /* Create the bitfield declaration.  */
18537               decl = grokbitfield (declarator, &declspecs, width);
18538               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
18539             }
18540           else
18541             decl = grokfield (declarator, &declspecs,
18542                               NULL_TREE, /*init_const_expr_p=*/false,
18543                               NULL_TREE, attributes);
18544
18545           /* Add the instance variable.  */
18546           objc_add_instance_variable (decl);
18547
18548           /* Reset PREFIX_ATTRIBUTES.  */
18549           while (attributes && TREE_CHAIN (attributes) != first_attribute)
18550             attributes = TREE_CHAIN (attributes);
18551           if (attributes)
18552             TREE_CHAIN (attributes) = NULL_TREE;
18553
18554           token = cp_lexer_peek_token (parser->lexer);
18555
18556           if (token->type == CPP_COMMA)
18557             {
18558               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
18559               continue;
18560             }
18561           break;
18562         }
18563
18564       cp_parser_consume_semicolon_at_end_of_statement (parser);
18565       token = cp_lexer_peek_token (parser->lexer);
18566     }
18567
18568   cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
18569   /* For historical reasons, we accept an optional semicolon.  */
18570   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
18571     cp_lexer_consume_token (parser->lexer);
18572 }
18573
18574 /* Parse an Objective-C protocol declaration.  */
18575
18576 static void
18577 cp_parser_objc_protocol_declaration (cp_parser* parser)
18578 {
18579   tree proto, protorefs;
18580   cp_token *tok;
18581
18582   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
18583   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
18584     {
18585       error ("identifier expected after %<@protocol%>");
18586       goto finish;
18587     }
18588
18589   /* See if we have a forward declaration or a definition.  */
18590   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
18591
18592   /* Try a forward declaration first.  */
18593   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
18594     {
18595       objc_declare_protocols (cp_parser_objc_identifier_list (parser));
18596      finish:
18597       cp_parser_consume_semicolon_at_end_of_statement (parser);
18598     }
18599
18600   /* Ok, we got a full-fledged definition (or at least should).  */
18601   else
18602     {
18603       proto = cp_parser_identifier (parser);
18604       protorefs = cp_parser_objc_protocol_refs_opt (parser);
18605       objc_start_protocol (proto, protorefs);
18606       cp_parser_objc_method_prototype_list (parser);
18607     }
18608 }
18609
18610 /* Parse an Objective-C superclass or category.  */
18611
18612 static void
18613 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
18614                                                           tree *categ)
18615 {
18616   cp_token *next = cp_lexer_peek_token (parser->lexer);
18617
18618   *super = *categ = NULL_TREE;
18619   if (next->type == CPP_COLON)
18620     {
18621       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
18622       *super = cp_parser_identifier (parser);
18623     }
18624   else if (next->type == CPP_OPEN_PAREN)
18625     {
18626       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
18627       *categ = cp_parser_identifier (parser);
18628       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
18629     }
18630 }
18631
18632 /* Parse an Objective-C class interface.  */
18633
18634 static void
18635 cp_parser_objc_class_interface (cp_parser* parser)
18636 {
18637   tree name, super, categ, protos;
18638
18639   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
18640   name = cp_parser_identifier (parser);
18641   cp_parser_objc_superclass_or_category (parser, &super, &categ);
18642   protos = cp_parser_objc_protocol_refs_opt (parser);
18643
18644   /* We have either a class or a category on our hands.  */
18645   if (categ)
18646     objc_start_category_interface (name, categ, protos);
18647   else
18648     {
18649       objc_start_class_interface (name, super, protos);
18650       /* Handle instance variable declarations, if any.  */
18651       cp_parser_objc_class_ivars (parser);
18652       objc_continue_interface ();
18653     }
18654
18655   cp_parser_objc_method_prototype_list (parser);
18656 }
18657
18658 /* Parse an Objective-C class implementation.  */
18659
18660 static void
18661 cp_parser_objc_class_implementation (cp_parser* parser)
18662 {
18663   tree name, super, categ;
18664
18665   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
18666   name = cp_parser_identifier (parser);
18667   cp_parser_objc_superclass_or_category (parser, &super, &categ);
18668
18669   /* We have either a class or a category on our hands.  */
18670   if (categ)
18671     objc_start_category_implementation (name, categ);
18672   else
18673     {
18674       objc_start_class_implementation (name, super);
18675       /* Handle instance variable declarations, if any.  */
18676       cp_parser_objc_class_ivars (parser);
18677       objc_continue_implementation ();
18678     }
18679
18680   cp_parser_objc_method_definition_list (parser);
18681 }
18682
18683 /* Consume the @end token and finish off the implementation.  */
18684
18685 static void
18686 cp_parser_objc_end_implementation (cp_parser* parser)
18687 {
18688   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
18689   objc_finish_implementation ();
18690 }
18691
18692 /* Parse an Objective-C declaration.  */
18693
18694 static void
18695 cp_parser_objc_declaration (cp_parser* parser)
18696 {
18697   /* Try to figure out what kind of declaration is present.  */
18698   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
18699
18700   switch (kwd->keyword)
18701     {
18702     case RID_AT_ALIAS:
18703       cp_parser_objc_alias_declaration (parser);
18704       break;
18705     case RID_AT_CLASS:
18706       cp_parser_objc_class_declaration (parser);
18707       break;
18708     case RID_AT_PROTOCOL:
18709       cp_parser_objc_protocol_declaration (parser);
18710       break;
18711     case RID_AT_INTERFACE:
18712       cp_parser_objc_class_interface (parser);
18713       break;
18714     case RID_AT_IMPLEMENTATION:
18715       cp_parser_objc_class_implementation (parser);
18716       break;
18717     case RID_AT_END:
18718       cp_parser_objc_end_implementation (parser);
18719       break;
18720     default:
18721       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
18722       cp_parser_skip_to_end_of_block_or_statement (parser);
18723     }
18724 }
18725
18726 /* Parse an Objective-C try-catch-finally statement.
18727
18728    objc-try-catch-finally-stmt:
18729      @try compound-statement objc-catch-clause-seq [opt]
18730        objc-finally-clause [opt]
18731
18732    objc-catch-clause-seq:
18733      objc-catch-clause objc-catch-clause-seq [opt]
18734
18735    objc-catch-clause:
18736      @catch ( exception-declaration ) compound-statement
18737
18738    objc-finally-clause
18739      @finally compound-statement
18740
18741    Returns NULL_TREE.  */
18742
18743 static tree
18744 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
18745   location_t location;
18746   tree stmt;
18747
18748   cp_parser_require_keyword (parser, RID_AT_TRY, "`@try'");
18749   location = cp_lexer_peek_token (parser->lexer)->location;
18750   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
18751      node, lest it get absorbed into the surrounding block.  */
18752   stmt = push_stmt_list ();
18753   cp_parser_compound_statement (parser, NULL, false);
18754   objc_begin_try_stmt (location, pop_stmt_list (stmt));
18755
18756   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
18757     {
18758       cp_parameter_declarator *parmdecl;
18759       tree parm;
18760
18761       cp_lexer_consume_token (parser->lexer);
18762       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
18763       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
18764       parm = grokdeclarator (parmdecl->declarator,
18765                              &parmdecl->decl_specifiers,
18766                              PARM, /*initialized=*/0,
18767                              /*attrlist=*/NULL);
18768       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
18769       objc_begin_catch_clause (parm);
18770       cp_parser_compound_statement (parser, NULL, false);
18771       objc_finish_catch_clause ();
18772     }
18773
18774   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
18775     {
18776       cp_lexer_consume_token (parser->lexer);
18777       location = cp_lexer_peek_token (parser->lexer)->location;
18778       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
18779          node, lest it get absorbed into the surrounding block.  */
18780       stmt = push_stmt_list ();
18781       cp_parser_compound_statement (parser, NULL, false);
18782       objc_build_finally_clause (location, pop_stmt_list (stmt));
18783     }
18784
18785   return objc_finish_try_stmt ();
18786 }
18787
18788 /* Parse an Objective-C synchronized statement.
18789
18790    objc-synchronized-stmt:
18791      @synchronized ( expression ) compound-statement
18792
18793    Returns NULL_TREE.  */
18794
18795 static tree
18796 cp_parser_objc_synchronized_statement (cp_parser *parser) {
18797   location_t location;
18798   tree lock, stmt;
18799
18800   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "`@synchronized'");
18801
18802   location = cp_lexer_peek_token (parser->lexer)->location;
18803   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
18804   lock = cp_parser_expression (parser, false);
18805   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
18806
18807   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
18808      node, lest it get absorbed into the surrounding block.  */
18809   stmt = push_stmt_list ();
18810   cp_parser_compound_statement (parser, NULL, false);
18811
18812   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
18813 }
18814
18815 /* Parse an Objective-C throw statement.
18816
18817    objc-throw-stmt:
18818      @throw assignment-expression [opt] ;
18819
18820    Returns a constructed '@throw' statement.  */
18821
18822 static tree
18823 cp_parser_objc_throw_statement (cp_parser *parser) {
18824   tree expr = NULL_TREE;
18825
18826   cp_parser_require_keyword (parser, RID_AT_THROW, "`@throw'");
18827
18828   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18829     expr = cp_parser_assignment_expression (parser, false);
18830
18831   cp_parser_consume_semicolon_at_end_of_statement (parser);
18832
18833   return objc_build_throw_stmt (expr);
18834 }
18835
18836 /* Parse an Objective-C statement.  */
18837
18838 static tree
18839 cp_parser_objc_statement (cp_parser * parser) {
18840   /* Try to figure out what kind of declaration is present.  */
18841   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
18842
18843   switch (kwd->keyword)
18844     {
18845     case RID_AT_TRY:
18846       return cp_parser_objc_try_catch_finally_statement (parser);
18847     case RID_AT_SYNCHRONIZED:
18848       return cp_parser_objc_synchronized_statement (parser);
18849     case RID_AT_THROW:
18850       return cp_parser_objc_throw_statement (parser);
18851     default:
18852       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
18853       cp_parser_skip_to_end_of_block_or_statement (parser);
18854     }
18855
18856   return error_mark_node;
18857 }
18858 \f
18859 /* OpenMP 2.5 parsing routines.  */
18860
18861 /* Returns name of the next clause.
18862    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
18863    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
18864    returned and the token is consumed.  */
18865
18866 static pragma_omp_clause
18867 cp_parser_omp_clause_name (cp_parser *parser)
18868 {
18869   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
18870
18871   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
18872     result = PRAGMA_OMP_CLAUSE_IF;
18873   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
18874     result = PRAGMA_OMP_CLAUSE_DEFAULT;
18875   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
18876     result = PRAGMA_OMP_CLAUSE_PRIVATE;
18877   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18878     {
18879       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18880       const char *p = IDENTIFIER_POINTER (id);
18881
18882       switch (p[0])
18883         {
18884         case 'c':
18885           if (!strcmp ("copyin", p))
18886             result = PRAGMA_OMP_CLAUSE_COPYIN;
18887           else if (!strcmp ("copyprivate", p))
18888             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
18889           break;
18890         case 'f':
18891           if (!strcmp ("firstprivate", p))
18892             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
18893           break;
18894         case 'l':
18895           if (!strcmp ("lastprivate", p))
18896             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
18897           break;
18898         case 'n':
18899           if (!strcmp ("nowait", p))
18900             result = PRAGMA_OMP_CLAUSE_NOWAIT;
18901           else if (!strcmp ("num_threads", p))
18902             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
18903           break;
18904         case 'o':
18905           if (!strcmp ("ordered", p))
18906             result = PRAGMA_OMP_CLAUSE_ORDERED;
18907           break;
18908         case 'r':
18909           if (!strcmp ("reduction", p))
18910             result = PRAGMA_OMP_CLAUSE_REDUCTION;
18911           break;
18912         case 's':
18913           if (!strcmp ("schedule", p))
18914             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
18915           else if (!strcmp ("shared", p))
18916             result = PRAGMA_OMP_CLAUSE_SHARED;
18917           break;
18918         }
18919     }
18920
18921   if (result != PRAGMA_OMP_CLAUSE_NONE)
18922     cp_lexer_consume_token (parser->lexer);
18923
18924   return result;
18925 }
18926
18927 /* Validate that a clause of the given type does not already exist.  */
18928
18929 static void
18930 check_no_duplicate_clause (tree clauses, enum tree_code code, const char *name)
18931 {
18932   tree c;
18933
18934   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
18935     if (OMP_CLAUSE_CODE (c) == code)
18936       {
18937         error ("too many %qs clauses", name);
18938         break;
18939       }
18940 }
18941
18942 /* OpenMP 2.5:
18943    variable-list:
18944      identifier
18945      variable-list , identifier
18946
18947    In addition, we match a closing parenthesis.  An opening parenthesis
18948    will have been consumed by the caller.
18949
18950    If KIND is nonzero, create the appropriate node and install the decl
18951    in OMP_CLAUSE_DECL and add the node to the head of the list.
18952
18953    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
18954    return the list created.  */
18955
18956 static tree
18957 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
18958                                 tree list)
18959 {
18960   while (1)
18961     {
18962       tree name, decl;
18963
18964       name = cp_parser_id_expression (parser, /*template_p=*/false,
18965                                       /*check_dependency_p=*/true,
18966                                       /*template_p=*/NULL,
18967                                       /*declarator_p=*/false,
18968                                       /*optional_p=*/false);
18969       if (name == error_mark_node)
18970         goto skip_comma;
18971
18972       decl = cp_parser_lookup_name_simple (parser, name);
18973       if (decl == error_mark_node)
18974         cp_parser_name_lookup_error (parser, name, decl, NULL);
18975       else if (kind != 0)
18976         {
18977           tree u = build_omp_clause (kind);
18978           OMP_CLAUSE_DECL (u) = decl;
18979           OMP_CLAUSE_CHAIN (u) = list;
18980           list = u;
18981         }
18982       else
18983         list = tree_cons (decl, NULL_TREE, list);
18984
18985     get_comma:
18986       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
18987         break;
18988       cp_lexer_consume_token (parser->lexer);
18989     }
18990
18991   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18992     {
18993       int ending;
18994
18995       /* Try to resync to an unnested comma.  Copied from
18996          cp_parser_parenthesized_expression_list.  */
18997     skip_comma:
18998       ending = cp_parser_skip_to_closing_parenthesis (parser,
18999                                                       /*recovering=*/true,
19000                                                       /*or_comma=*/true,
19001                                                       /*consume_paren=*/true);
19002       if (ending < 0)
19003         goto get_comma;
19004     }
19005
19006   return list;
19007 }
19008
19009 /* Similarly, but expect leading and trailing parenthesis.  This is a very
19010    common case for omp clauses.  */
19011
19012 static tree
19013 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
19014 {
19015   if (cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
19016     return cp_parser_omp_var_list_no_open (parser, kind, list);
19017   return list;
19018 }
19019
19020 /* OpenMP 2.5:
19021    default ( shared | none ) */
19022
19023 static tree
19024 cp_parser_omp_clause_default (cp_parser *parser, tree list)
19025 {
19026   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
19027   tree c;
19028
19029   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
19030     return list;
19031   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19032     {
19033       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19034       const char *p = IDENTIFIER_POINTER (id);
19035
19036       switch (p[0])
19037         {
19038         case 'n':
19039           if (strcmp ("none", p) != 0)
19040             goto invalid_kind;
19041           kind = OMP_CLAUSE_DEFAULT_NONE;
19042           break;
19043
19044         case 's':
19045           if (strcmp ("shared", p) != 0)
19046             goto invalid_kind;
19047           kind = OMP_CLAUSE_DEFAULT_SHARED;
19048           break;
19049
19050         default:
19051           goto invalid_kind;
19052         }
19053
19054       cp_lexer_consume_token (parser->lexer);
19055     }
19056   else
19057     {
19058     invalid_kind:
19059       cp_parser_error (parser, "expected %<none%> or %<shared%>");
19060     }
19061
19062   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
19063     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19064                                            /*or_comma=*/false,
19065                                            /*consume_paren=*/true);
19066
19067   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
19068     return list;
19069
19070   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default");
19071   c = build_omp_clause (OMP_CLAUSE_DEFAULT);
19072   OMP_CLAUSE_CHAIN (c) = list;
19073   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
19074
19075   return c;
19076 }
19077
19078 /* OpenMP 2.5:
19079    if ( expression ) */
19080
19081 static tree
19082 cp_parser_omp_clause_if (cp_parser *parser, tree list)
19083 {
19084   tree t, c;
19085
19086   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
19087     return list;
19088
19089   t = cp_parser_condition (parser);
19090
19091   if (t == error_mark_node
19092       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
19093     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19094                                            /*or_comma=*/false,
19095                                            /*consume_paren=*/true);
19096
19097   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if");
19098
19099   c = build_omp_clause (OMP_CLAUSE_IF);
19100   OMP_CLAUSE_IF_EXPR (c) = t;
19101   OMP_CLAUSE_CHAIN (c) = list;
19102
19103   return c;
19104 }
19105
19106 /* OpenMP 2.5:
19107    nowait */
19108
19109 static tree
19110 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
19111 {
19112   tree c;
19113
19114   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait");
19115
19116   c = build_omp_clause (OMP_CLAUSE_NOWAIT);
19117   OMP_CLAUSE_CHAIN (c) = list;
19118   return c;
19119 }
19120
19121 /* OpenMP 2.5:
19122    num_threads ( expression ) */
19123
19124 static tree
19125 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list)
19126 {
19127   tree t, c;
19128
19129   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
19130     return list;
19131
19132   t = cp_parser_expression (parser, false);
19133
19134   if (t == error_mark_node
19135       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
19136     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19137                                            /*or_comma=*/false,
19138                                            /*consume_paren=*/true);
19139
19140   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS, "num_threads");
19141
19142   c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
19143   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
19144   OMP_CLAUSE_CHAIN (c) = list;
19145
19146   return c;
19147 }
19148
19149 /* OpenMP 2.5:
19150    ordered */
19151
19152 static tree
19153 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
19154 {
19155   tree c;
19156
19157   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED, "ordered");
19158
19159   c = build_omp_clause (OMP_CLAUSE_ORDERED);
19160   OMP_CLAUSE_CHAIN (c) = list;
19161   return c;
19162 }
19163
19164 /* OpenMP 2.5:
19165    reduction ( reduction-operator : variable-list )
19166
19167    reduction-operator:
19168      One of: + * - & ^ | && || */
19169
19170 static tree
19171 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
19172 {
19173   enum tree_code code;
19174   tree nlist, c;
19175
19176   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
19177     return list;
19178
19179   switch (cp_lexer_peek_token (parser->lexer)->type)
19180     {
19181     case CPP_PLUS:
19182       code = PLUS_EXPR;
19183       break;
19184     case CPP_MULT:
19185       code = MULT_EXPR;
19186       break;
19187     case CPP_MINUS:
19188       code = MINUS_EXPR;
19189       break;
19190     case CPP_AND:
19191       code = BIT_AND_EXPR;
19192       break;
19193     case CPP_XOR:
19194       code = BIT_XOR_EXPR;
19195       break;
19196     case CPP_OR:
19197       code = BIT_IOR_EXPR;
19198       break;
19199     case CPP_AND_AND:
19200       code = TRUTH_ANDIF_EXPR;
19201       break;
19202     case CPP_OR_OR:
19203       code = TRUTH_ORIF_EXPR;
19204       break;
19205     default:
19206       cp_parser_error (parser, "`+', `*', `-', `&', `^', `|', `&&', or `||'");
19207     resync_fail:
19208       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19209                                              /*or_comma=*/false,
19210                                              /*consume_paren=*/true);
19211       return list;
19212     }
19213   cp_lexer_consume_token (parser->lexer);
19214
19215   if (!cp_parser_require (parser, CPP_COLON, "`:'"))
19216     goto resync_fail;
19217
19218   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
19219   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
19220     OMP_CLAUSE_REDUCTION_CODE (c) = code;
19221
19222   return nlist;
19223 }
19224
19225 /* OpenMP 2.5:
19226    schedule ( schedule-kind )
19227    schedule ( schedule-kind , expression )
19228
19229    schedule-kind:
19230      static | dynamic | guided | runtime  */
19231
19232 static tree
19233 cp_parser_omp_clause_schedule (cp_parser *parser, tree list)
19234 {
19235   tree c, t;
19236
19237   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
19238     return list;
19239
19240   c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
19241
19242   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19243     {
19244       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19245       const char *p = IDENTIFIER_POINTER (id);
19246
19247       switch (p[0])
19248         {
19249         case 'd':
19250           if (strcmp ("dynamic", p) != 0)
19251             goto invalid_kind;
19252           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
19253           break;
19254
19255         case 'g':
19256           if (strcmp ("guided", p) != 0)
19257             goto invalid_kind;
19258           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
19259           break;
19260
19261         case 'r':
19262           if (strcmp ("runtime", p) != 0)
19263             goto invalid_kind;
19264           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
19265           break;
19266
19267         default:
19268           goto invalid_kind;
19269         }
19270     }
19271   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
19272     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
19273   else
19274     goto invalid_kind;
19275   cp_lexer_consume_token (parser->lexer);
19276
19277   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
19278     {
19279       cp_lexer_consume_token (parser->lexer);
19280
19281       t = cp_parser_assignment_expression (parser, false);
19282
19283       if (t == error_mark_node)
19284         goto resync_fail;
19285       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
19286         error ("schedule %<runtime%> does not take "
19287                "a %<chunk_size%> parameter");
19288       else
19289         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
19290
19291       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
19292         goto resync_fail;
19293     }
19294   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`,' or `)'"))
19295     goto resync_fail;
19296
19297   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule");
19298   OMP_CLAUSE_CHAIN (c) = list;
19299   return c;
19300
19301  invalid_kind:
19302   cp_parser_error (parser, "invalid schedule kind");
19303  resync_fail:
19304   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19305                                          /*or_comma=*/false,
19306                                          /*consume_paren=*/true);
19307   return list;
19308 }
19309
19310 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
19311    is a bitmask in MASK.  Return the list of clauses found; the result
19312    of clause default goes in *pdefault.  */
19313
19314 static tree
19315 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
19316                            const char *where, cp_token *pragma_tok)
19317 {
19318   tree clauses = NULL;
19319
19320   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
19321     {
19322       pragma_omp_clause c_kind = cp_parser_omp_clause_name (parser);
19323       const char *c_name;
19324       tree prev = clauses;
19325
19326       switch (c_kind)
19327         {
19328         case PRAGMA_OMP_CLAUSE_COPYIN:
19329           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
19330           c_name = "copyin";
19331           break;
19332         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
19333           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
19334                                             clauses);
19335           c_name = "copyprivate";
19336           break;
19337         case PRAGMA_OMP_CLAUSE_DEFAULT:
19338           clauses = cp_parser_omp_clause_default (parser, clauses);
19339           c_name = "default";
19340           break;
19341         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
19342           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
19343                                             clauses);
19344           c_name = "firstprivate";
19345           break;
19346         case PRAGMA_OMP_CLAUSE_IF:
19347           clauses = cp_parser_omp_clause_if (parser, clauses);
19348           c_name = "if";
19349           break;
19350         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
19351           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
19352                                             clauses);
19353           c_name = "lastprivate";
19354           break;
19355         case PRAGMA_OMP_CLAUSE_NOWAIT:
19356           clauses = cp_parser_omp_clause_nowait (parser, clauses);
19357           c_name = "nowait";
19358           break;
19359         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
19360           clauses = cp_parser_omp_clause_num_threads (parser, clauses);
19361           c_name = "num_threads";
19362           break;
19363         case PRAGMA_OMP_CLAUSE_ORDERED:
19364           clauses = cp_parser_omp_clause_ordered (parser, clauses);
19365           c_name = "ordered";
19366           break;
19367         case PRAGMA_OMP_CLAUSE_PRIVATE:
19368           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
19369                                             clauses);
19370           c_name = "private";
19371           break;
19372         case PRAGMA_OMP_CLAUSE_REDUCTION:
19373           clauses = cp_parser_omp_clause_reduction (parser, clauses);
19374           c_name = "reduction";
19375           break;
19376         case PRAGMA_OMP_CLAUSE_SCHEDULE:
19377           clauses = cp_parser_omp_clause_schedule (parser, clauses);
19378           c_name = "schedule";
19379           break;
19380         case PRAGMA_OMP_CLAUSE_SHARED:
19381           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
19382                                             clauses);
19383           c_name = "shared";
19384           break;
19385         default:
19386           cp_parser_error (parser, "expected %<#pragma omp%> clause");
19387           goto saw_error;
19388         }
19389
19390       if (((mask >> c_kind) & 1) == 0)
19391         {
19392           /* Remove the invalid clause(s) from the list to avoid
19393              confusing the rest of the compiler.  */
19394           clauses = prev;
19395           error ("%qs is not valid for %qs", c_name, where);
19396         }
19397     }
19398  saw_error:
19399   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
19400   return finish_omp_clauses (clauses);
19401 }
19402
19403 /* OpenMP 2.5:
19404    structured-block:
19405      statement
19406
19407    In practice, we're also interested in adding the statement to an
19408    outer node.  So it is convenient if we work around the fact that
19409    cp_parser_statement calls add_stmt.  */
19410
19411 static unsigned
19412 cp_parser_begin_omp_structured_block (cp_parser *parser)
19413 {
19414   unsigned save = parser->in_statement;
19415
19416   /* Only move the values to IN_OMP_BLOCK if they weren't false.
19417      This preserves the "not within loop or switch" style error messages
19418      for nonsense cases like
19419         void foo() {
19420         #pragma omp single
19421           break;
19422         }
19423   */
19424   if (parser->in_statement)
19425     parser->in_statement = IN_OMP_BLOCK;
19426
19427   return save;
19428 }
19429
19430 static void
19431 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
19432 {
19433   parser->in_statement = save;
19434 }
19435
19436 static tree
19437 cp_parser_omp_structured_block (cp_parser *parser)
19438 {
19439   tree stmt = begin_omp_structured_block ();
19440   unsigned int save = cp_parser_begin_omp_structured_block (parser);
19441
19442   cp_parser_statement (parser, NULL_TREE, false, NULL);
19443
19444   cp_parser_end_omp_structured_block (parser, save);
19445   return finish_omp_structured_block (stmt);
19446 }
19447
19448 /* OpenMP 2.5:
19449    # pragma omp atomic new-line
19450      expression-stmt
19451
19452    expression-stmt:
19453      x binop= expr | x++ | ++x | x-- | --x
19454    binop:
19455      +, *, -, /, &, ^, |, <<, >>
19456
19457   where x is an lvalue expression with scalar type.  */
19458
19459 static void
19460 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
19461 {
19462   tree lhs, rhs;
19463   enum tree_code code;
19464
19465   cp_parser_require_pragma_eol (parser, pragma_tok);
19466
19467   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
19468                                     /*cast_p=*/false);
19469   switch (TREE_CODE (lhs))
19470     {
19471     case ERROR_MARK:
19472       goto saw_error;
19473
19474     case PREINCREMENT_EXPR:
19475     case POSTINCREMENT_EXPR:
19476       lhs = TREE_OPERAND (lhs, 0);
19477       code = PLUS_EXPR;
19478       rhs = integer_one_node;
19479       break;
19480
19481     case PREDECREMENT_EXPR:
19482     case POSTDECREMENT_EXPR:
19483       lhs = TREE_OPERAND (lhs, 0);
19484       code = MINUS_EXPR;
19485       rhs = integer_one_node;
19486       break;
19487
19488     default:
19489       switch (cp_lexer_peek_token (parser->lexer)->type)
19490         {
19491         case CPP_MULT_EQ:
19492           code = MULT_EXPR;
19493           break;
19494         case CPP_DIV_EQ:
19495           code = TRUNC_DIV_EXPR;
19496           break;
19497         case CPP_PLUS_EQ:
19498           code = PLUS_EXPR;
19499           break;
19500         case CPP_MINUS_EQ:
19501           code = MINUS_EXPR;
19502           break;
19503         case CPP_LSHIFT_EQ:
19504           code = LSHIFT_EXPR;
19505           break;
19506         case CPP_RSHIFT_EQ:
19507           code = RSHIFT_EXPR;
19508           break;
19509         case CPP_AND_EQ:
19510           code = BIT_AND_EXPR;
19511           break;
19512         case CPP_OR_EQ:
19513           code = BIT_IOR_EXPR;
19514           break;
19515         case CPP_XOR_EQ:
19516           code = BIT_XOR_EXPR;
19517           break;
19518         default:
19519           cp_parser_error (parser,
19520                            "invalid operator for %<#pragma omp atomic%>");
19521           goto saw_error;
19522         }
19523       cp_lexer_consume_token (parser->lexer);
19524
19525       rhs = cp_parser_expression (parser, false);
19526       if (rhs == error_mark_node)
19527         goto saw_error;
19528       break;
19529     }
19530   finish_omp_atomic (code, lhs, rhs);
19531   cp_parser_consume_semicolon_at_end_of_statement (parser);
19532   return;
19533
19534  saw_error:
19535   cp_parser_skip_to_end_of_block_or_statement (parser);
19536 }
19537
19538
19539 /* OpenMP 2.5:
19540    # pragma omp barrier new-line  */
19541
19542 static void
19543 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
19544 {
19545   cp_parser_require_pragma_eol (parser, pragma_tok);
19546   finish_omp_barrier ();
19547 }
19548
19549 /* OpenMP 2.5:
19550    # pragma omp critical [(name)] new-line
19551      structured-block  */
19552
19553 static tree
19554 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
19555 {
19556   tree stmt, name = NULL;
19557
19558   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
19559     {
19560       cp_lexer_consume_token (parser->lexer);
19561
19562       name = cp_parser_identifier (parser);
19563
19564       if (name == error_mark_node
19565           || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
19566         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19567                                                /*or_comma=*/false,
19568                                                /*consume_paren=*/true);
19569       if (name == error_mark_node)
19570         name = NULL;
19571     }
19572   cp_parser_require_pragma_eol (parser, pragma_tok);
19573
19574   stmt = cp_parser_omp_structured_block (parser);
19575   return c_finish_omp_critical (stmt, name);
19576 }
19577
19578 /* OpenMP 2.5:
19579    # pragma omp flush flush-vars[opt] new-line
19580
19581    flush-vars:
19582      ( variable-list ) */
19583
19584 static void
19585 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
19586 {
19587   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
19588     (void) cp_parser_omp_var_list (parser, 0, NULL);
19589   cp_parser_require_pragma_eol (parser, pragma_tok);
19590
19591   finish_omp_flush ();
19592 }
19593
19594 /* Parse the restricted form of the for statment allowed by OpenMP.  */
19595
19596 static tree
19597 cp_parser_omp_for_loop (cp_parser *parser)
19598 {
19599   tree init, cond, incr, body, decl, pre_body;
19600   location_t loc;
19601
19602   if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
19603     {
19604       cp_parser_error (parser, "for statement expected");
19605       return NULL;
19606     }
19607   loc = cp_lexer_consume_token (parser->lexer)->location;
19608   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
19609     return NULL;
19610
19611   init = decl = NULL;
19612   pre_body = push_stmt_list ();
19613   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
19614     {
19615       cp_decl_specifier_seq type_specifiers;
19616
19617       /* First, try to parse as an initialized declaration.  See
19618          cp_parser_condition, from whence the bulk of this is copied.  */
19619
19620       cp_parser_parse_tentatively (parser);
19621       cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
19622                                     &type_specifiers);
19623       if (!cp_parser_error_occurred (parser))
19624         {
19625           tree asm_specification, attributes;
19626           cp_declarator *declarator;
19627
19628           declarator = cp_parser_declarator (parser,
19629                                              CP_PARSER_DECLARATOR_NAMED,
19630                                              /*ctor_dtor_or_conv_p=*/NULL,
19631                                              /*parenthesized_p=*/NULL,
19632                                              /*member_p=*/false);
19633           attributes = cp_parser_attributes_opt (parser);
19634           asm_specification = cp_parser_asm_specification_opt (parser);
19635
19636           cp_parser_require (parser, CPP_EQ, "`='");
19637           if (cp_parser_parse_definitely (parser))
19638             {
19639               tree pushed_scope;
19640
19641               decl = start_decl (declarator, &type_specifiers,
19642                                  /*initialized_p=*/false, attributes,
19643                                  /*prefix_attributes=*/NULL_TREE,
19644                                  &pushed_scope);
19645
19646               init = cp_parser_assignment_expression (parser, false);
19647
19648               cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
19649                               asm_specification, LOOKUP_ONLYCONVERTING);
19650
19651               if (pushed_scope)
19652                 pop_scope (pushed_scope);
19653             }
19654         }
19655       else
19656         cp_parser_abort_tentative_parse (parser);
19657
19658       /* If parsing as an initialized declaration failed, try again as
19659          a simple expression.  */
19660       if (decl == NULL)
19661         init = cp_parser_expression (parser, false);
19662     }
19663   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
19664   pre_body = pop_stmt_list (pre_body);
19665
19666   cond = NULL;
19667   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
19668     cond = cp_parser_condition (parser);
19669   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
19670
19671   incr = NULL;
19672   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
19673     incr = cp_parser_expression (parser, false);
19674
19675   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
19676     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19677                                            /*or_comma=*/false,
19678                                            /*consume_paren=*/true);
19679
19680   /* Note that we saved the original contents of this flag when we entered
19681      the structured block, and so we don't need to re-save it here.  */
19682   parser->in_statement = IN_OMP_FOR;
19683
19684   /* Note that the grammar doesn't call for a structured block here,
19685      though the loop as a whole is a structured block.  */
19686   body = push_stmt_list ();
19687   cp_parser_statement (parser, NULL_TREE, false, NULL);
19688   body = pop_stmt_list (body);
19689
19690   return finish_omp_for (loc, decl, init, cond, incr, body, pre_body);
19691 }
19692
19693 /* OpenMP 2.5:
19694    #pragma omp for for-clause[optseq] new-line
19695      for-loop  */
19696
19697 #define OMP_FOR_CLAUSE_MASK                             \
19698         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19699         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19700         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
19701         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
19702         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
19703         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
19704         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19705
19706 static tree
19707 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
19708 {
19709   tree clauses, sb, ret;
19710   unsigned int save;
19711
19712   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
19713                                        "#pragma omp for", pragma_tok);
19714
19715   sb = begin_omp_structured_block ();
19716   save = cp_parser_begin_omp_structured_block (parser);
19717
19718   ret = cp_parser_omp_for_loop (parser);
19719   if (ret)
19720     OMP_FOR_CLAUSES (ret) = clauses;
19721
19722   cp_parser_end_omp_structured_block (parser, save);
19723   add_stmt (finish_omp_structured_block (sb));
19724
19725   return ret;
19726 }
19727
19728 /* OpenMP 2.5:
19729    # pragma omp master new-line
19730      structured-block  */
19731
19732 static tree
19733 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
19734 {
19735   cp_parser_require_pragma_eol (parser, pragma_tok);
19736   return c_finish_omp_master (cp_parser_omp_structured_block (parser));
19737 }
19738
19739 /* OpenMP 2.5:
19740    # pragma omp ordered new-line
19741      structured-block  */
19742
19743 static tree
19744 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
19745 {
19746   cp_parser_require_pragma_eol (parser, pragma_tok);
19747   return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
19748 }
19749
19750 /* OpenMP 2.5:
19751
19752    section-scope:
19753      { section-sequence }
19754
19755    section-sequence:
19756      section-directive[opt] structured-block
19757      section-sequence section-directive structured-block  */
19758
19759 static tree
19760 cp_parser_omp_sections_scope (cp_parser *parser)
19761 {
19762   tree stmt, substmt;
19763   bool error_suppress = false;
19764   cp_token *tok;
19765
19766   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
19767     return NULL_TREE;
19768
19769   stmt = push_stmt_list ();
19770
19771   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
19772     {
19773       unsigned save;
19774
19775       substmt = begin_omp_structured_block ();
19776       save = cp_parser_begin_omp_structured_block (parser);
19777
19778       while (1)
19779         {
19780           cp_parser_statement (parser, NULL_TREE, false, NULL);
19781
19782           tok = cp_lexer_peek_token (parser->lexer);
19783           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
19784             break;
19785           if (tok->type == CPP_CLOSE_BRACE)
19786             break;
19787           if (tok->type == CPP_EOF)
19788             break;
19789         }
19790
19791       cp_parser_end_omp_structured_block (parser, save);
19792       substmt = finish_omp_structured_block (substmt);
19793       substmt = build1 (OMP_SECTION, void_type_node, substmt);
19794       add_stmt (substmt);
19795     }
19796
19797   while (1)
19798     {
19799       tok = cp_lexer_peek_token (parser->lexer);
19800       if (tok->type == CPP_CLOSE_BRACE)
19801         break;
19802       if (tok->type == CPP_EOF)
19803         break;
19804
19805       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
19806         {
19807           cp_lexer_consume_token (parser->lexer);
19808           cp_parser_require_pragma_eol (parser, tok);
19809           error_suppress = false;
19810         }
19811       else if (!error_suppress)
19812         {
19813           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
19814           error_suppress = true;
19815         }
19816
19817       substmt = cp_parser_omp_structured_block (parser);
19818       substmt = build1 (OMP_SECTION, void_type_node, substmt);
19819       add_stmt (substmt);
19820     }
19821   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
19822
19823   substmt = pop_stmt_list (stmt);
19824
19825   stmt = make_node (OMP_SECTIONS);
19826   TREE_TYPE (stmt) = void_type_node;
19827   OMP_SECTIONS_BODY (stmt) = substmt;
19828
19829   add_stmt (stmt);
19830   return stmt;
19831 }
19832
19833 /* OpenMP 2.5:
19834    # pragma omp sections sections-clause[optseq] newline
19835      sections-scope  */
19836
19837 #define OMP_SECTIONS_CLAUSE_MASK                        \
19838         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19839         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19840         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
19841         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
19842         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19843
19844 static tree
19845 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
19846 {
19847   tree clauses, ret;
19848
19849   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
19850                                        "#pragma omp sections", pragma_tok);
19851
19852   ret = cp_parser_omp_sections_scope (parser);
19853   if (ret)
19854     OMP_SECTIONS_CLAUSES (ret) = clauses;
19855
19856   return ret;
19857 }
19858
19859 /* OpenMP 2.5:
19860    # pragma parallel parallel-clause new-line
19861    # pragma parallel for parallel-for-clause new-line
19862    # pragma parallel sections parallel-sections-clause new-line  */
19863
19864 #define OMP_PARALLEL_CLAUSE_MASK                        \
19865         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
19866         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19867         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19868         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
19869         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
19870         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
19871         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
19872         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
19873
19874 static tree
19875 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
19876 {
19877   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
19878   const char *p_name = "#pragma omp parallel";
19879   tree stmt, clauses, par_clause, ws_clause, block;
19880   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
19881   unsigned int save;
19882
19883   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
19884     {
19885       cp_lexer_consume_token (parser->lexer);
19886       p_kind = PRAGMA_OMP_PARALLEL_FOR;
19887       p_name = "#pragma omp parallel for";
19888       mask |= OMP_FOR_CLAUSE_MASK;
19889       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19890     }
19891   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19892     {
19893       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19894       const char *p = IDENTIFIER_POINTER (id);
19895       if (strcmp (p, "sections") == 0)
19896         {
19897           cp_lexer_consume_token (parser->lexer);
19898           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
19899           p_name = "#pragma omp parallel sections";
19900           mask |= OMP_SECTIONS_CLAUSE_MASK;
19901           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19902         }
19903     }
19904
19905   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
19906   block = begin_omp_parallel ();
19907   save = cp_parser_begin_omp_structured_block (parser);
19908
19909   switch (p_kind)
19910     {
19911     case PRAGMA_OMP_PARALLEL:
19912       cp_parser_already_scoped_statement (parser);
19913       par_clause = clauses;
19914       break;
19915
19916     case PRAGMA_OMP_PARALLEL_FOR:
19917       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19918       stmt = cp_parser_omp_for_loop (parser);
19919       if (stmt)
19920         OMP_FOR_CLAUSES (stmt) = ws_clause;
19921       break;
19922
19923     case PRAGMA_OMP_PARALLEL_SECTIONS:
19924       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19925       stmt = cp_parser_omp_sections_scope (parser);
19926       if (stmt)
19927         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
19928       break;
19929
19930     default:
19931       gcc_unreachable ();
19932     }
19933
19934   cp_parser_end_omp_structured_block (parser, save);
19935   stmt = finish_omp_parallel (par_clause, block);
19936   if (p_kind != PRAGMA_OMP_PARALLEL)
19937     OMP_PARALLEL_COMBINED (stmt) = 1;
19938   return stmt;
19939 }
19940
19941 /* OpenMP 2.5:
19942    # pragma omp single single-clause[optseq] new-line
19943      structured-block  */
19944
19945 #define OMP_SINGLE_CLAUSE_MASK                          \
19946         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
19947         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
19948         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
19949         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19950
19951 static tree
19952 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
19953 {
19954   tree stmt = make_node (OMP_SINGLE);
19955   TREE_TYPE (stmt) = void_type_node;
19956
19957   OMP_SINGLE_CLAUSES (stmt)
19958     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
19959                                  "#pragma omp single", pragma_tok);
19960   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
19961
19962   return add_stmt (stmt);
19963 }
19964
19965 /* OpenMP 2.5:
19966    # pragma omp threadprivate (variable-list) */
19967
19968 static void
19969 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
19970 {
19971   tree vars;
19972
19973   vars = cp_parser_omp_var_list (parser, 0, NULL);
19974   cp_parser_require_pragma_eol (parser, pragma_tok);
19975
19976   finish_omp_threadprivate (vars);
19977 }
19978
19979 /* Main entry point to OpenMP statement pragmas.  */
19980
19981 static void
19982 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
19983 {
19984   tree stmt;
19985
19986   switch (pragma_tok->pragma_kind)
19987     {
19988     case PRAGMA_OMP_ATOMIC:
19989       cp_parser_omp_atomic (parser, pragma_tok);
19990       return;
19991     case PRAGMA_OMP_CRITICAL:
19992       stmt = cp_parser_omp_critical (parser, pragma_tok);
19993       break;
19994     case PRAGMA_OMP_FOR:
19995       stmt = cp_parser_omp_for (parser, pragma_tok);
19996       break;
19997     case PRAGMA_OMP_MASTER:
19998       stmt = cp_parser_omp_master (parser, pragma_tok);
19999       break;
20000     case PRAGMA_OMP_ORDERED:
20001       stmt = cp_parser_omp_ordered (parser, pragma_tok);
20002       break;
20003     case PRAGMA_OMP_PARALLEL:
20004       stmt = cp_parser_omp_parallel (parser, pragma_tok);
20005       break;
20006     case PRAGMA_OMP_SECTIONS:
20007       stmt = cp_parser_omp_sections (parser, pragma_tok);
20008       break;
20009     case PRAGMA_OMP_SINGLE:
20010       stmt = cp_parser_omp_single (parser, pragma_tok);
20011       break;
20012     default:
20013       gcc_unreachable ();
20014     }
20015
20016   if (stmt)
20017     SET_EXPR_LOCATION (stmt, pragma_tok->location);
20018 }
20019 \f
20020 /* The parser.  */
20021
20022 static GTY (()) cp_parser *the_parser;
20023
20024 \f
20025 /* Special handling for the first token or line in the file.  The first
20026    thing in the file might be #pragma GCC pch_preprocess, which loads a
20027    PCH file, which is a GC collection point.  So we need to handle this
20028    first pragma without benefit of an existing lexer structure.
20029
20030    Always returns one token to the caller in *FIRST_TOKEN.  This is
20031    either the true first token of the file, or the first token after
20032    the initial pragma.  */
20033
20034 static void
20035 cp_parser_initial_pragma (cp_token *first_token)
20036 {
20037   tree name = NULL;
20038
20039   cp_lexer_get_preprocessor_token (NULL, first_token);
20040   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
20041     return;
20042
20043   cp_lexer_get_preprocessor_token (NULL, first_token);
20044   if (first_token->type == CPP_STRING)
20045     {
20046       name = first_token->u.value;
20047
20048       cp_lexer_get_preprocessor_token (NULL, first_token);
20049       if (first_token->type != CPP_PRAGMA_EOL)
20050         error ("junk at end of %<#pragma GCC pch_preprocess%>");
20051     }
20052   else
20053     error ("expected string literal");
20054
20055   /* Skip to the end of the pragma.  */
20056   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
20057     cp_lexer_get_preprocessor_token (NULL, first_token);
20058
20059   /* Now actually load the PCH file.  */
20060   if (name)
20061     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
20062
20063   /* Read one more token to return to our caller.  We have to do this
20064      after reading the PCH file in, since its pointers have to be
20065      live.  */
20066   cp_lexer_get_preprocessor_token (NULL, first_token);
20067 }
20068
20069 /* Normal parsing of a pragma token.  Here we can (and must) use the
20070    regular lexer.  */
20071
20072 static bool
20073 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
20074 {
20075   cp_token *pragma_tok;
20076   unsigned int id;
20077
20078   pragma_tok = cp_lexer_consume_token (parser->lexer);
20079   gcc_assert (pragma_tok->type == CPP_PRAGMA);
20080   parser->lexer->in_pragma = true;
20081
20082   id = pragma_tok->pragma_kind;
20083   switch (id)
20084     {
20085     case PRAGMA_GCC_PCH_PREPROCESS:
20086       error ("%<#pragma GCC pch_preprocess%> must be first");
20087       break;
20088
20089     case PRAGMA_OMP_BARRIER:
20090       switch (context)
20091         {
20092         case pragma_compound:
20093           cp_parser_omp_barrier (parser, pragma_tok);
20094           return false;
20095         case pragma_stmt:
20096           error ("%<#pragma omp barrier%> may only be "
20097                  "used in compound statements");
20098           break;
20099         default:
20100           goto bad_stmt;
20101         }
20102       break;
20103
20104     case PRAGMA_OMP_FLUSH:
20105       switch (context)
20106         {
20107         case pragma_compound:
20108           cp_parser_omp_flush (parser, pragma_tok);
20109           return false;
20110         case pragma_stmt:
20111           error ("%<#pragma omp flush%> may only be "
20112                  "used in compound statements");
20113           break;
20114         default:
20115           goto bad_stmt;
20116         }
20117       break;
20118
20119     case PRAGMA_OMP_THREADPRIVATE:
20120       cp_parser_omp_threadprivate (parser, pragma_tok);
20121       return false;
20122
20123     case PRAGMA_OMP_ATOMIC:
20124     case PRAGMA_OMP_CRITICAL:
20125     case PRAGMA_OMP_FOR:
20126     case PRAGMA_OMP_MASTER:
20127     case PRAGMA_OMP_ORDERED:
20128     case PRAGMA_OMP_PARALLEL:
20129     case PRAGMA_OMP_SECTIONS:
20130     case PRAGMA_OMP_SINGLE:
20131       if (context == pragma_external)
20132         goto bad_stmt;
20133       cp_parser_omp_construct (parser, pragma_tok);
20134       return true;
20135
20136     case PRAGMA_OMP_SECTION:
20137       error ("%<#pragma omp section%> may only be used in "
20138              "%<#pragma omp sections%> construct");
20139       break;
20140
20141     default:
20142       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
20143       c_invoke_pragma_handler (id);
20144       break;
20145
20146     bad_stmt:
20147       cp_parser_error (parser, "expected declaration specifiers");
20148       break;
20149     }
20150
20151   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
20152   return false;
20153 }
20154
20155 /* The interface the pragma parsers have to the lexer.  */
20156
20157 enum cpp_ttype
20158 pragma_lex (tree *value)
20159 {
20160   cp_token *tok;
20161   enum cpp_ttype ret;
20162
20163   tok = cp_lexer_peek_token (the_parser->lexer);
20164
20165   ret = tok->type;
20166   *value = tok->u.value;
20167
20168   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
20169     ret = CPP_EOF;
20170   else if (ret == CPP_STRING)
20171     *value = cp_parser_string_literal (the_parser, false, false);
20172   else
20173     {
20174       cp_lexer_consume_token (the_parser->lexer);
20175       if (ret == CPP_KEYWORD)
20176         ret = CPP_NAME;
20177     }
20178
20179   return ret;
20180 }
20181
20182 \f
20183 /* External interface.  */
20184
20185 /* Parse one entire translation unit.  */
20186
20187 void
20188 c_parse_file (void)
20189 {
20190   bool error_occurred;
20191   static bool already_called = false;
20192
20193   if (already_called)
20194     {
20195       sorry ("inter-module optimizations not implemented for C++");
20196       return;
20197     }
20198   already_called = true;
20199
20200   the_parser = cp_parser_new ();
20201   push_deferring_access_checks (flag_access_control
20202                                 ? dk_no_deferred : dk_no_check);
20203   error_occurred = cp_parser_translation_unit (the_parser);
20204   the_parser = NULL;
20205 }
20206
20207 #include "gt-cp-parser.h"