OSDN Git Service

Fix lookup of initialized captures in unevaluated context.
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005, 2007, 2008, 2009  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 3, 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 COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "dyn-string.h"
27 #include "varray.h"
28 #include "cpplib.h"
29 #include "tree.h"
30 #include "cp-tree.h"
31 #include "c-pragma.h"
32 #include "decl.h"
33 #include "flags.h"
34 #include "diagnostic.h"
35 #include "toplev.h"
36 #include "output.h"
37 #include "target.h"
38 #include "cgraph.h"
39 #include "c-common.h"
40 #include "plugin.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 GTY(()) tree_check {
52   /* The value associated with the token.  */
53   tree value;
54   /* The checks that have been associated with value.  */
55   VEC (deferred_access_check, gc)* checks;
56   /* The token's qualifying scope (used when it is a
57      CPP_NESTED_NAME_SPECIFIER).  */
58   tree qualifying_scope;
59 };
60
61 /* A C++ token.  */
62
63 typedef struct GTY (()) cp_token {
64   /* The kind of token.  */
65   ENUM_BITFIELD (cpp_ttype) type : 8;
66   /* If this token is a keyword, this value indicates which keyword.
67      Otherwise, this value is RID_MAX.  */
68   ENUM_BITFIELD (rid) keyword : 8;
69   /* Token flags.  */
70   unsigned char flags;
71   /* Identifier for the pragma.  */
72   ENUM_BITFIELD (pragma_kind) pragma_kind : 6;
73   /* True if this token is from a context where it is implicitly extern "C" */
74   BOOL_BITFIELD implicit_extern_c : 1;
75   /* True for a CPP_NAME token that is not a keyword (i.e., for which
76      KEYWORD is RID_MAX) iff this name was looked up and found to be
77      ambiguous.  An error has already been reported.  */
78   BOOL_BITFIELD ambiguous_p : 1;
79   /* The location at which this token was found.  */
80   location_t location;
81   /* The value associated with this token, if any.  */
82   union cp_token_value {
83     /* Used for CPP_NESTED_NAME_SPECIFIER and CPP_TEMPLATE_ID.  */
84     struct tree_check* GTY((tag ("1"))) tree_check_value;
85     /* Use for all other tokens.  */
86     tree GTY((tag ("0"))) value;
87   } GTY((desc ("(%1.type == CPP_TEMPLATE_ID) || (%1.type == CPP_NESTED_NAME_SPECIFIER)"))) u;
88 } cp_token;
89
90 /* We use a stack of token pointer for saving token sets.  */
91 typedef struct cp_token *cp_token_position;
92 DEF_VEC_P (cp_token_position);
93 DEF_VEC_ALLOC_P (cp_token_position,heap);
94
95 static cp_token eof_token =
96 {
97   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, false, 0, 0, { NULL }
98 };
99
100 /* The cp_lexer structure represents the C++ lexer.  It is responsible
101    for managing the token stream from the preprocessor and supplying
102    it to the parser.  Tokens are never added to the cp_lexer after
103    it is created.  */
104
105 typedef struct GTY (()) cp_lexer {
106   /* The memory allocated for the buffer.  NULL if this lexer does not
107      own the token buffer.  */
108   cp_token * GTY ((length ("%h.buffer_length"))) buffer;
109   /* If the lexer owns the buffer, this is the number of tokens in the
110      buffer.  */
111   size_t buffer_length;
112
113   /* A pointer just past the last available token.  The tokens
114      in this lexer are [buffer, last_token).  */
115   cp_token_position GTY ((skip)) last_token;
116
117   /* The next available token.  If NEXT_TOKEN is &eof_token, then there are
118      no more available tokens.  */
119   cp_token_position GTY ((skip)) next_token;
120
121   /* A stack indicating positions at which cp_lexer_save_tokens was
122      called.  The top entry is the most recent position at which we
123      began saving tokens.  If the stack is non-empty, we are saving
124      tokens.  */
125   VEC(cp_token_position,heap) *GTY ((skip)) saved_tokens;
126
127   /* The next lexer in a linked list of lexers.  */
128   struct cp_lexer *next;
129
130   /* True if we should output debugging information.  */
131   bool debugging_p;
132
133   /* True if we're in the context of parsing a pragma, and should not
134      increment past the end-of-line marker.  */
135   bool in_pragma;
136 } cp_lexer;
137
138 /* cp_token_cache is a range of tokens.  There is no need to represent
139    allocate heap memory for it, since tokens are never removed from the
140    lexer's array.  There is also no need for the GC to walk through
141    a cp_token_cache, since everything in here is referenced through
142    a lexer.  */
143
144 typedef struct GTY(()) cp_token_cache {
145   /* The beginning of the token range.  */
146   cp_token * GTY((skip)) first;
147
148   /* Points immediately after the last token in the range.  */
149   cp_token * GTY ((skip)) last;
150 } cp_token_cache;
151
152 /* Prototypes.  */
153
154 static cp_lexer *cp_lexer_new_main
155   (void);
156 static cp_lexer *cp_lexer_new_from_tokens
157   (cp_token_cache *tokens);
158 static void cp_lexer_destroy
159   (cp_lexer *);
160 static int cp_lexer_saving_tokens
161   (const cp_lexer *);
162 static cp_token_position cp_lexer_token_position
163   (cp_lexer *, bool);
164 static cp_token *cp_lexer_token_at
165   (cp_lexer *, cp_token_position);
166 static void cp_lexer_get_preprocessor_token
167   (cp_lexer *, cp_token *);
168 static inline cp_token *cp_lexer_peek_token
169   (cp_lexer *);
170 static cp_token *cp_lexer_peek_nth_token
171   (cp_lexer *, size_t);
172 static inline bool cp_lexer_next_token_is
173   (cp_lexer *, enum cpp_ttype);
174 static bool cp_lexer_next_token_is_not
175   (cp_lexer *, enum cpp_ttype);
176 static bool cp_lexer_next_token_is_keyword
177   (cp_lexer *, enum rid);
178 static cp_token *cp_lexer_consume_token
179   (cp_lexer *);
180 static void cp_lexer_purge_token
181   (cp_lexer *);
182 static void cp_lexer_purge_tokens_after
183   (cp_lexer *, cp_token_position);
184 static void cp_lexer_save_tokens
185   (cp_lexer *);
186 static void cp_lexer_commit_tokens
187   (cp_lexer *);
188 static void cp_lexer_rollback_tokens
189   (cp_lexer *);
190 #ifdef ENABLE_CHECKING
191 static void cp_lexer_print_token
192   (FILE *, cp_token *);
193 static inline bool cp_lexer_debugging_p
194   (cp_lexer *);
195 static void cp_lexer_start_debugging
196   (cp_lexer *) ATTRIBUTE_UNUSED;
197 static void cp_lexer_stop_debugging
198   (cp_lexer *) ATTRIBUTE_UNUSED;
199 #else
200 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
201    about passing NULL to functions that require non-NULL arguments
202    (fputs, fprintf).  It will never be used, so all we need is a value
203    of the right type that's guaranteed not to be NULL.  */
204 #define cp_lexer_debug_stream stdout
205 #define cp_lexer_print_token(str, tok) (void) 0
206 #define cp_lexer_debugging_p(lexer) 0
207 #endif /* ENABLE_CHECKING */
208
209 static cp_token_cache *cp_token_cache_new
210   (cp_token *, cp_token *);
211
212 static void cp_parser_initial_pragma
213   (cp_token *);
214
215 /* Manifest constants.  */
216 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
217 #define CP_SAVED_TOKEN_STACK 5
218
219 /* A token type for keywords, as opposed to ordinary identifiers.  */
220 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
221
222 /* A token type for template-ids.  If a template-id is processed while
223    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
224    the value of the CPP_TEMPLATE_ID is whatever was returned by
225    cp_parser_template_id.  */
226 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
227
228 /* A token type for nested-name-specifiers.  If a
229    nested-name-specifier is processed while parsing tentatively, it is
230    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
231    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
232    cp_parser_nested_name_specifier_opt.  */
233 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
234
235 /* A token type for tokens that are not tokens at all; these are used
236    to represent slots in the array where there used to be a token
237    that has now been deleted.  */
238 #define CPP_PURGED ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
239
240 /* The number of token types, including C++-specific ones.  */
241 #define N_CP_TTYPES ((int) (CPP_PURGED + 1))
242
243 /* Variables.  */
244
245 #ifdef ENABLE_CHECKING
246 /* The stream to which debugging output should be written.  */
247 static FILE *cp_lexer_debug_stream;
248 #endif /* ENABLE_CHECKING */
249
250 /* Nonzero if we are parsing an unevaluated operand: an operand to
251    sizeof, typeof, or alignof.  */
252 int cp_unevaluated_operand;
253
254 /* Create a new main C++ lexer, the lexer that gets tokens from the
255    preprocessor.  */
256
257 static cp_lexer *
258 cp_lexer_new_main (void)
259 {
260   cp_token first_token;
261   cp_lexer *lexer;
262   cp_token *pos;
263   size_t alloc;
264   size_t space;
265   cp_token *buffer;
266
267   /* It's possible that parsing the first pragma will load a PCH file,
268      which is a GC collection point.  So we have to do that before
269      allocating any memory.  */
270   cp_parser_initial_pragma (&first_token);
271
272   c_common_no_more_pch ();
273
274   /* Allocate the memory.  */
275   lexer = GGC_CNEW (cp_lexer);
276
277 #ifdef ENABLE_CHECKING
278   /* Initially we are not debugging.  */
279   lexer->debugging_p = false;
280 #endif /* ENABLE_CHECKING */
281   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
282                                    CP_SAVED_TOKEN_STACK);
283
284   /* Create the buffer.  */
285   alloc = CP_LEXER_BUFFER_SIZE;
286   buffer = GGC_NEWVEC (cp_token, alloc);
287
288   /* Put the first token in the buffer.  */
289   space = alloc;
290   pos = buffer;
291   *pos = first_token;
292
293   /* Get the remaining tokens from the preprocessor.  */
294   while (pos->type != CPP_EOF)
295     {
296       pos++;
297       if (!--space)
298         {
299           space = alloc;
300           alloc *= 2;
301           buffer = GGC_RESIZEVEC (cp_token, buffer, alloc);
302           pos = buffer + space;
303         }
304       cp_lexer_get_preprocessor_token (lexer, pos);
305     }
306   lexer->buffer = buffer;
307   lexer->buffer_length = alloc - space;
308   lexer->last_token = pos;
309   lexer->next_token = lexer->buffer_length ? buffer : &eof_token;
310
311   /* Subsequent preprocessor diagnostics should use compiler
312      diagnostic functions to get the compiler source location.  */
313   done_lexing = true;
314
315   gcc_assert (lexer->next_token->type != CPP_PURGED);
316   return lexer;
317 }
318
319 /* Create a new lexer whose token stream is primed with the tokens in
320    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
321
322 static cp_lexer *
323 cp_lexer_new_from_tokens (cp_token_cache *cache)
324 {
325   cp_token *first = cache->first;
326   cp_token *last = cache->last;
327   cp_lexer *lexer = GGC_CNEW (cp_lexer);
328
329   /* We do not own the buffer.  */
330   lexer->buffer = NULL;
331   lexer->buffer_length = 0;
332   lexer->next_token = first == last ? &eof_token : first;
333   lexer->last_token = last;
334
335   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
336                                    CP_SAVED_TOKEN_STACK);
337
338 #ifdef ENABLE_CHECKING
339   /* Initially we are not debugging.  */
340   lexer->debugging_p = false;
341 #endif
342
343   gcc_assert (lexer->next_token->type != CPP_PURGED);
344   return lexer;
345 }
346
347 /* Frees all resources associated with LEXER.  */
348
349 static void
350 cp_lexer_destroy (cp_lexer *lexer)
351 {
352   if (lexer->buffer)
353     ggc_free (lexer->buffer);
354   VEC_free (cp_token_position, heap, lexer->saved_tokens);
355   ggc_free (lexer);
356 }
357
358 /* Returns nonzero if debugging information should be output.  */
359
360 #ifdef ENABLE_CHECKING
361
362 static inline bool
363 cp_lexer_debugging_p (cp_lexer *lexer)
364 {
365   return lexer->debugging_p;
366 }
367
368 #endif /* ENABLE_CHECKING */
369
370 static inline cp_token_position
371 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
372 {
373   gcc_assert (!previous_p || lexer->next_token != &eof_token);
374
375   return lexer->next_token - previous_p;
376 }
377
378 static inline cp_token *
379 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
380 {
381   return pos;
382 }
383
384 /* nonzero if we are presently saving tokens.  */
385
386 static inline int
387 cp_lexer_saving_tokens (const cp_lexer* lexer)
388 {
389   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
390 }
391
392 /* Store the next token from the preprocessor in *TOKEN.  Return true
393    if we reach EOF.  If LEXER is NULL, assume we are handling an
394    initial #pragma pch_preprocess, and thus want the lexer to return
395    processed strings.  */
396
397 static void
398 cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
399 {
400   static int is_extern_c = 0;
401
402    /* Get a new token from the preprocessor.  */
403   token->type
404     = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
405                         lexer == NULL ? 0 : C_LEX_RAW_STRINGS);
406   token->keyword = RID_MAX;
407   token->pragma_kind = PRAGMA_NONE;
408
409   /* On some systems, some header files are surrounded by an
410      implicit extern "C" block.  Set a flag in the token if it
411      comes from such a header.  */
412   is_extern_c += pending_lang_change;
413   pending_lang_change = 0;
414   token->implicit_extern_c = is_extern_c > 0;
415
416   /* Check to see if this token is a keyword.  */
417   if (token->type == CPP_NAME)
418     {
419       if (C_IS_RESERVED_WORD (token->u.value))
420         {
421           /* Mark this token as a keyword.  */
422           token->type = CPP_KEYWORD;
423           /* Record which keyword.  */
424           token->keyword = C_RID_CODE (token->u.value);
425         }
426       else
427         {
428           if (warn_cxx0x_compat
429               && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
430               && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
431             {
432               /* Warn about the C++0x keyword (but still treat it as
433                  an identifier).  */
434               warning (OPT_Wc__0x_compat, 
435                        "identifier %qE will become a keyword in C++0x",
436                        token->u.value);
437
438               /* Clear out the C_RID_CODE so we don't warn about this
439                  particular identifier-turned-keyword again.  */
440               C_SET_RID_CODE (token->u.value, RID_MAX);
441             }
442
443           token->ambiguous_p = false;
444           token->keyword = RID_MAX;
445         }
446     }
447   /* Handle Objective-C++ keywords.  */
448   else if (token->type == CPP_AT_NAME)
449     {
450       token->type = CPP_KEYWORD;
451       switch (C_RID_CODE (token->u.value))
452         {
453         /* Map 'class' to '@class', 'private' to '@private', etc.  */
454         case RID_CLASS: token->keyword = RID_AT_CLASS; break;
455         case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
456         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
457         case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
458         case RID_THROW: token->keyword = RID_AT_THROW; break;
459         case RID_TRY: token->keyword = RID_AT_TRY; break;
460         case RID_CATCH: token->keyword = RID_AT_CATCH; break;
461         default: token->keyword = C_RID_CODE (token->u.value);
462         }
463     }
464   else if (token->type == CPP_PRAGMA)
465     {
466       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
467       token->pragma_kind = ((enum pragma_kind)
468                             TREE_INT_CST_LOW (token->u.value));
469       token->u.value = NULL_TREE;
470     }
471 }
472
473 /* Update the globals input_location and the input file stack from TOKEN.  */
474 static inline void
475 cp_lexer_set_source_position_from_token (cp_token *token)
476 {
477   if (token->type != CPP_EOF)
478     {
479       input_location = token->location;
480     }
481 }
482
483 /* Return a pointer to the next token in the token stream, but do not
484    consume it.  */
485
486 static inline cp_token *
487 cp_lexer_peek_token (cp_lexer *lexer)
488 {
489   if (cp_lexer_debugging_p (lexer))
490     {
491       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
492       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
493       putc ('\n', cp_lexer_debug_stream);
494     }
495   return lexer->next_token;
496 }
497
498 /* Return true if the next token has the indicated TYPE.  */
499
500 static inline bool
501 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
502 {
503   return cp_lexer_peek_token (lexer)->type == type;
504 }
505
506 /* Return true if the next token does not have the indicated TYPE.  */
507
508 static inline bool
509 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
510 {
511   return !cp_lexer_next_token_is (lexer, type);
512 }
513
514 /* Return true if the next token is the indicated KEYWORD.  */
515
516 static inline bool
517 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
518 {
519   return cp_lexer_peek_token (lexer)->keyword == keyword;
520 }
521
522 /* Return true if the next token is not the indicated KEYWORD.  */
523
524 static inline bool
525 cp_lexer_next_token_is_not_keyword (cp_lexer* lexer, enum rid keyword)
526 {
527   return cp_lexer_peek_token (lexer)->keyword != keyword;
528 }
529
530 /* Return true if the next token is a keyword for a decl-specifier.  */
531
532 static bool
533 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
534 {
535   cp_token *token;
536
537   token = cp_lexer_peek_token (lexer);
538   switch (token->keyword) 
539     {
540       /* auto specifier: storage-class-specifier in C++,
541          simple-type-specifier in C++0x.  */
542     case RID_AUTO:
543       /* Storage classes.  */
544     case RID_REGISTER:
545     case RID_STATIC:
546     case RID_EXTERN:
547     case RID_MUTABLE:
548     case RID_THREAD:
549       /* Elaborated type specifiers.  */
550     case RID_ENUM:
551     case RID_CLASS:
552     case RID_STRUCT:
553     case RID_UNION:
554     case RID_TYPENAME:
555       /* Simple type specifiers.  */
556     case RID_CHAR:
557     case RID_CHAR16:
558     case RID_CHAR32:
559     case RID_WCHAR:
560     case RID_BOOL:
561     case RID_SHORT:
562     case RID_INT:
563     case RID_LONG:
564     case RID_SIGNED:
565     case RID_UNSIGNED:
566     case RID_FLOAT:
567     case RID_DOUBLE:
568     case RID_VOID:
569       /* GNU extensions.  */ 
570     case RID_ATTRIBUTE:
571     case RID_TYPEOF:
572       /* C++0x extensions.  */
573     case RID_DECLTYPE:
574       return true;
575
576     default:
577       return false;
578     }
579 }
580
581 /* Return a pointer to the Nth token in the token stream.  If N is 1,
582    then this is precisely equivalent to cp_lexer_peek_token (except
583    that it is not inline).  One would like to disallow that case, but
584    there is one case (cp_parser_nth_token_starts_template_id) where
585    the caller passes a variable for N and it might be 1.  */
586
587 static cp_token *
588 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
589 {
590   cp_token *token;
591
592   /* N is 1-based, not zero-based.  */
593   gcc_assert (n > 0);
594
595   if (cp_lexer_debugging_p (lexer))
596     fprintf (cp_lexer_debug_stream,
597              "cp_lexer: peeking ahead %ld at token: ", (long)n);
598
599   --n;
600   token = lexer->next_token;
601   gcc_assert (!n || token != &eof_token);
602   while (n != 0)
603     {
604       ++token;
605       if (token == lexer->last_token)
606         {
607           token = &eof_token;
608           break;
609         }
610
611       if (token->type != CPP_PURGED)
612         --n;
613     }
614
615   if (cp_lexer_debugging_p (lexer))
616     {
617       cp_lexer_print_token (cp_lexer_debug_stream, token);
618       putc ('\n', cp_lexer_debug_stream);
619     }
620
621   return token;
622 }
623
624 /* Return the next token, and advance the lexer's next_token pointer
625    to point to the next non-purged token.  */
626
627 static cp_token *
628 cp_lexer_consume_token (cp_lexer* lexer)
629 {
630   cp_token *token = lexer->next_token;
631
632   gcc_assert (token != &eof_token);
633   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
634
635   do
636     {
637       lexer->next_token++;
638       if (lexer->next_token == lexer->last_token)
639         {
640           lexer->next_token = &eof_token;
641           break;
642         }
643
644     }
645   while (lexer->next_token->type == CPP_PURGED);
646
647   cp_lexer_set_source_position_from_token (token);
648
649   /* Provide debugging output.  */
650   if (cp_lexer_debugging_p (lexer))
651     {
652       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
653       cp_lexer_print_token (cp_lexer_debug_stream, token);
654       putc ('\n', cp_lexer_debug_stream);
655     }
656
657   return token;
658 }
659
660 /* Permanently remove the next token from the token stream, and
661    advance the next_token pointer to refer to the next non-purged
662    token.  */
663
664 static void
665 cp_lexer_purge_token (cp_lexer *lexer)
666 {
667   cp_token *tok = lexer->next_token;
668
669   gcc_assert (tok != &eof_token);
670   tok->type = CPP_PURGED;
671   tok->location = UNKNOWN_LOCATION;
672   tok->u.value = NULL_TREE;
673   tok->keyword = RID_MAX;
674
675   do
676     {
677       tok++;
678       if (tok == lexer->last_token)
679         {
680           tok = &eof_token;
681           break;
682         }
683     }
684   while (tok->type == CPP_PURGED);
685   lexer->next_token = tok;
686 }
687
688 /* Permanently remove all tokens after TOK, up to, but not
689    including, the token that will be returned next by
690    cp_lexer_peek_token.  */
691
692 static void
693 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
694 {
695   cp_token *peek = lexer->next_token;
696
697   if (peek == &eof_token)
698     peek = lexer->last_token;
699
700   gcc_assert (tok < peek);
701
702   for ( tok += 1; tok != peek; tok += 1)
703     {
704       tok->type = CPP_PURGED;
705       tok->location = UNKNOWN_LOCATION;
706       tok->u.value = NULL_TREE;
707       tok->keyword = RID_MAX;
708     }
709 }
710
711 /* Begin saving tokens.  All tokens consumed after this point will be
712    preserved.  */
713
714 static void
715 cp_lexer_save_tokens (cp_lexer* lexer)
716 {
717   /* Provide debugging output.  */
718   if (cp_lexer_debugging_p (lexer))
719     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
720
721   VEC_safe_push (cp_token_position, heap,
722                  lexer->saved_tokens, lexer->next_token);
723 }
724
725 /* Commit to the portion of the token stream most recently saved.  */
726
727 static void
728 cp_lexer_commit_tokens (cp_lexer* lexer)
729 {
730   /* Provide debugging output.  */
731   if (cp_lexer_debugging_p (lexer))
732     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
733
734   VEC_pop (cp_token_position, lexer->saved_tokens);
735 }
736
737 /* Return all tokens saved since the last call to cp_lexer_save_tokens
738    to the token stream.  Stop saving tokens.  */
739
740 static void
741 cp_lexer_rollback_tokens (cp_lexer* lexer)
742 {
743   /* Provide debugging output.  */
744   if (cp_lexer_debugging_p (lexer))
745     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
746
747   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
748 }
749
750 /* Print a representation of the TOKEN on the STREAM.  */
751
752 #ifdef ENABLE_CHECKING
753
754 static void
755 cp_lexer_print_token (FILE * stream, cp_token *token)
756 {
757   /* We don't use cpp_type2name here because the parser defines
758      a few tokens of its own.  */
759   static const char *const token_names[] = {
760     /* cpplib-defined token types */
761 #define OP(e, s) #e,
762 #define TK(e, s) #e,
763     TTYPE_TABLE
764 #undef OP
765 #undef TK
766     /* C++ parser token types - see "Manifest constants", above.  */
767     "KEYWORD",
768     "TEMPLATE_ID",
769     "NESTED_NAME_SPECIFIER",
770     "PURGED"
771   };
772
773   /* If we have a name for the token, print it out.  Otherwise, we
774      simply give the numeric code.  */
775   gcc_assert (token->type < ARRAY_SIZE(token_names));
776   fputs (token_names[token->type], stream);
777
778   /* For some tokens, print the associated data.  */
779   switch (token->type)
780     {
781     case CPP_KEYWORD:
782       /* Some keywords have a value that is not an IDENTIFIER_NODE.
783          For example, `struct' is mapped to an INTEGER_CST.  */
784       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
785         break;
786       /* else fall through */
787     case CPP_NAME:
788       fputs (IDENTIFIER_POINTER (token->u.value), stream);
789       break;
790
791     case CPP_STRING:
792     case CPP_STRING16:
793     case CPP_STRING32:
794     case CPP_WSTRING:
795       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
796       break;
797
798     default:
799       break;
800     }
801 }
802
803 /* Start emitting debugging information.  */
804
805 static void
806 cp_lexer_start_debugging (cp_lexer* lexer)
807 {
808   lexer->debugging_p = true;
809 }
810
811 /* Stop emitting debugging information.  */
812
813 static void
814 cp_lexer_stop_debugging (cp_lexer* lexer)
815 {
816   lexer->debugging_p = false;
817 }
818
819 #endif /* ENABLE_CHECKING */
820
821 /* Create a new cp_token_cache, representing a range of tokens.  */
822
823 static cp_token_cache *
824 cp_token_cache_new (cp_token *first, cp_token *last)
825 {
826   cp_token_cache *cache = GGC_NEW (cp_token_cache);
827   cache->first = first;
828   cache->last = last;
829   return cache;
830 }
831
832 \f
833 /* Decl-specifiers.  */
834
835 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
836
837 static void
838 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
839 {
840   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
841 }
842
843 /* Declarators.  */
844
845 /* Nothing other than the parser should be creating declarators;
846    declarators are a semi-syntactic representation of C++ entities.
847    Other parts of the front end that need to create entities (like
848    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
849
850 static cp_declarator *make_call_declarator
851   (cp_declarator *, tree, cp_cv_quals, tree, tree);
852 static cp_declarator *make_array_declarator
853   (cp_declarator *, tree);
854 static cp_declarator *make_pointer_declarator
855   (cp_cv_quals, cp_declarator *);
856 static cp_declarator *make_reference_declarator
857   (cp_cv_quals, cp_declarator *, bool);
858 static cp_parameter_declarator *make_parameter_declarator
859   (cp_decl_specifier_seq *, cp_declarator *, tree);
860 static cp_declarator *make_ptrmem_declarator
861   (cp_cv_quals, tree, cp_declarator *);
862
863 /* An erroneous declarator.  */
864 static cp_declarator *cp_error_declarator;
865
866 /* The obstack on which declarators and related data structures are
867    allocated.  */
868 static struct obstack declarator_obstack;
869
870 /* Alloc BYTES from the declarator memory pool.  */
871
872 static inline void *
873 alloc_declarator (size_t bytes)
874 {
875   return obstack_alloc (&declarator_obstack, bytes);
876 }
877
878 /* Allocate a declarator of the indicated KIND.  Clear fields that are
879    common to all declarators.  */
880
881 static cp_declarator *
882 make_declarator (cp_declarator_kind kind)
883 {
884   cp_declarator *declarator;
885
886   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
887   declarator->kind = kind;
888   declarator->attributes = NULL_TREE;
889   declarator->declarator = NULL;
890   declarator->parameter_pack_p = false;
891
892   return declarator;
893 }
894
895 /* Make a declarator for a generalized identifier.  If
896    QUALIFYING_SCOPE is non-NULL, the identifier is
897    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
898    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
899    is, if any.   */
900
901 static cp_declarator *
902 make_id_declarator (tree qualifying_scope, tree unqualified_name,
903                     special_function_kind sfk)
904 {
905   cp_declarator *declarator;
906
907   /* It is valid to write:
908
909        class C { void f(); };
910        typedef C D;
911        void D::f();
912
913      The standard is not clear about whether `typedef const C D' is
914      legal; as of 2002-09-15 the committee is considering that
915      question.  EDG 3.0 allows that syntax.  Therefore, we do as
916      well.  */
917   if (qualifying_scope && TYPE_P (qualifying_scope))
918     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
919
920   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
921               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
922               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
923
924   declarator = make_declarator (cdk_id);
925   declarator->u.id.qualifying_scope = qualifying_scope;
926   declarator->u.id.unqualified_name = unqualified_name;
927   declarator->u.id.sfk = sfk;
928   
929   return declarator;
930 }
931
932 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
933    of modifiers such as const or volatile to apply to the pointer
934    type, represented as identifiers.  */
935
936 cp_declarator *
937 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
938 {
939   cp_declarator *declarator;
940
941   declarator = make_declarator (cdk_pointer);
942   declarator->declarator = target;
943   declarator->u.pointer.qualifiers = cv_qualifiers;
944   declarator->u.pointer.class_type = NULL_TREE;
945   if (target)
946     {
947       declarator->parameter_pack_p = target->parameter_pack_p;
948       target->parameter_pack_p = false;
949     }
950   else
951     declarator->parameter_pack_p = false;
952
953   return declarator;
954 }
955
956 /* Like make_pointer_declarator -- but for references.  */
957
958 cp_declarator *
959 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target,
960                            bool rvalue_ref)
961 {
962   cp_declarator *declarator;
963
964   declarator = make_declarator (cdk_reference);
965   declarator->declarator = target;
966   declarator->u.reference.qualifiers = cv_qualifiers;
967   declarator->u.reference.rvalue_ref = rvalue_ref;
968   if (target)
969     {
970       declarator->parameter_pack_p = target->parameter_pack_p;
971       target->parameter_pack_p = false;
972     }
973   else
974     declarator->parameter_pack_p = false;
975
976   return declarator;
977 }
978
979 /* Like make_pointer_declarator -- but for a pointer to a non-static
980    member of CLASS_TYPE.  */
981
982 cp_declarator *
983 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
984                         cp_declarator *pointee)
985 {
986   cp_declarator *declarator;
987
988   declarator = make_declarator (cdk_ptrmem);
989   declarator->declarator = pointee;
990   declarator->u.pointer.qualifiers = cv_qualifiers;
991   declarator->u.pointer.class_type = class_type;
992
993   if (pointee)
994     {
995       declarator->parameter_pack_p = pointee->parameter_pack_p;
996       pointee->parameter_pack_p = false;
997     }
998   else
999     declarator->parameter_pack_p = false;
1000
1001   return declarator;
1002 }
1003
1004 /* Make a declarator for the function given by TARGET, with the
1005    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1006    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1007    indicates what exceptions can be thrown.  */
1008
1009 cp_declarator *
1010 make_call_declarator (cp_declarator *target,
1011                       tree parms,
1012                       cp_cv_quals cv_qualifiers,
1013                       tree exception_specification,
1014                       tree late_return_type)
1015 {
1016   cp_declarator *declarator;
1017
1018   declarator = make_declarator (cdk_function);
1019   declarator->declarator = target;
1020   declarator->u.function.parameters = parms;
1021   declarator->u.function.qualifiers = cv_qualifiers;
1022   declarator->u.function.exception_specification = exception_specification;
1023   declarator->u.function.late_return_type = late_return_type;
1024   if (target)
1025     {
1026       declarator->parameter_pack_p = target->parameter_pack_p;
1027       target->parameter_pack_p = false;
1028     }
1029   else
1030     declarator->parameter_pack_p = false;
1031
1032   return declarator;
1033 }
1034
1035 /* Make a declarator for an array of BOUNDS elements, each of which is
1036    defined by ELEMENT.  */
1037
1038 cp_declarator *
1039 make_array_declarator (cp_declarator *element, tree bounds)
1040 {
1041   cp_declarator *declarator;
1042
1043   declarator = make_declarator (cdk_array);
1044   declarator->declarator = element;
1045   declarator->u.array.bounds = bounds;
1046   if (element)
1047     {
1048       declarator->parameter_pack_p = element->parameter_pack_p;
1049       element->parameter_pack_p = false;
1050     }
1051   else
1052     declarator->parameter_pack_p = false;
1053
1054   return declarator;
1055 }
1056
1057 /* Determine whether the declarator we've seen so far can be a
1058    parameter pack, when followed by an ellipsis.  */
1059 static bool 
1060 declarator_can_be_parameter_pack (cp_declarator *declarator)
1061 {
1062   /* Search for a declarator name, or any other declarator that goes
1063      after the point where the ellipsis could appear in a parameter
1064      pack. If we find any of these, then this declarator can not be
1065      made into a parameter pack.  */
1066   bool found = false;
1067   while (declarator && !found)
1068     {
1069       switch ((int)declarator->kind)
1070         {
1071         case cdk_id:
1072         case cdk_array:
1073           found = true;
1074           break;
1075
1076         case cdk_error:
1077           return true;
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 enum
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 };
1200
1201 /* This type is used for parameters and variables which hold
1202    combinations of the above flags.  */
1203 typedef int cp_parser_flags;
1204
1205 /* The different kinds of declarators we want to parse.  */
1206
1207 typedef enum cp_parser_declarator_kind
1208 {
1209   /* We want an abstract declarator.  */
1210   CP_PARSER_DECLARATOR_ABSTRACT,
1211   /* We want a named declarator.  */
1212   CP_PARSER_DECLARATOR_NAMED,
1213   /* We don't mind, but the name must be an unqualified-id.  */
1214   CP_PARSER_DECLARATOR_EITHER
1215 } cp_parser_declarator_kind;
1216
1217 /* The precedence values used to parse binary expressions.  The minimum value
1218    of PREC must be 1, because zero is reserved to quickly discriminate
1219    binary operators from other tokens.  */
1220
1221 enum cp_parser_prec
1222 {
1223   PREC_NOT_OPERATOR,
1224   PREC_LOGICAL_OR_EXPRESSION,
1225   PREC_LOGICAL_AND_EXPRESSION,
1226   PREC_INCLUSIVE_OR_EXPRESSION,
1227   PREC_EXCLUSIVE_OR_EXPRESSION,
1228   PREC_AND_EXPRESSION,
1229   PREC_EQUALITY_EXPRESSION,
1230   PREC_RELATIONAL_EXPRESSION,
1231   PREC_SHIFT_EXPRESSION,
1232   PREC_ADDITIVE_EXPRESSION,
1233   PREC_MULTIPLICATIVE_EXPRESSION,
1234   PREC_PM_EXPRESSION,
1235   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1236 };
1237
1238 /* A mapping from a token type to a corresponding tree node type, with a
1239    precedence value.  */
1240
1241 typedef struct cp_parser_binary_operations_map_node
1242 {
1243   /* The token type.  */
1244   enum cpp_ttype token_type;
1245   /* The corresponding tree code.  */
1246   enum tree_code tree_type;
1247   /* The precedence of this operator.  */
1248   enum cp_parser_prec prec;
1249 } cp_parser_binary_operations_map_node;
1250
1251 /* The status of a tentative parse.  */
1252
1253 typedef enum cp_parser_status_kind
1254 {
1255   /* No errors have occurred.  */
1256   CP_PARSER_STATUS_KIND_NO_ERROR,
1257   /* An error has occurred.  */
1258   CP_PARSER_STATUS_KIND_ERROR,
1259   /* We are committed to this tentative parse, whether or not an error
1260      has occurred.  */
1261   CP_PARSER_STATUS_KIND_COMMITTED
1262 } cp_parser_status_kind;
1263
1264 typedef struct cp_parser_expression_stack_entry
1265 {
1266   /* Left hand side of the binary operation we are currently
1267      parsing.  */
1268   tree lhs;
1269   /* Original tree code for left hand side, if it was a binary
1270      expression itself (used for -Wparentheses).  */
1271   enum tree_code lhs_type;
1272   /* Tree code for the binary operation we are parsing.  */
1273   enum tree_code tree_type;
1274   /* Precedence of the binary operation we are parsing.  */
1275   enum cp_parser_prec prec;
1276 } cp_parser_expression_stack_entry;
1277
1278 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1279    entries because precedence levels on the stack are monotonically
1280    increasing.  */
1281 typedef struct cp_parser_expression_stack_entry
1282   cp_parser_expression_stack[NUM_PREC_VALUES];
1283
1284 /* Context that is saved and restored when parsing tentatively.  */
1285 typedef struct GTY (()) cp_parser_context {
1286   /* If this is a tentative parsing context, the status of the
1287      tentative parse.  */
1288   enum cp_parser_status_kind status;
1289   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1290      that are looked up in this context must be looked up both in the
1291      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1292      the context of the containing expression.  */
1293   tree object_type;
1294
1295   /* The next parsing context in the stack.  */
1296   struct cp_parser_context *next;
1297 } cp_parser_context;
1298
1299 /* Prototypes.  */
1300
1301 /* Constructors and destructors.  */
1302
1303 static cp_parser_context *cp_parser_context_new
1304   (cp_parser_context *);
1305
1306 /* Class variables.  */
1307
1308 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1309
1310 /* The operator-precedence table used by cp_parser_binary_expression.
1311    Transformed into an associative array (binops_by_token) by
1312    cp_parser_new.  */
1313
1314 static const cp_parser_binary_operations_map_node binops[] = {
1315   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1316   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1317
1318   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1319   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1320   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1321
1322   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1323   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1324
1325   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1326   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1327
1328   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1329   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1330   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1331   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1332
1333   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1334   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1335
1336   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1337
1338   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1339
1340   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1341
1342   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1343
1344   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1345 };
1346
1347 /* The same as binops, but initialized by cp_parser_new so that
1348    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1349    for speed.  */
1350 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1351
1352 /* Constructors and destructors.  */
1353
1354 /* Construct a new context.  The context below this one on the stack
1355    is given by NEXT.  */
1356
1357 static cp_parser_context *
1358 cp_parser_context_new (cp_parser_context* next)
1359 {
1360   cp_parser_context *context;
1361
1362   /* Allocate the storage.  */
1363   if (cp_parser_context_free_list != NULL)
1364     {
1365       /* Pull the first entry from the free list.  */
1366       context = cp_parser_context_free_list;
1367       cp_parser_context_free_list = context->next;
1368       memset (context, 0, sizeof (*context));
1369     }
1370   else
1371     context = GGC_CNEW (cp_parser_context);
1372
1373   /* No errors have occurred yet in this context.  */
1374   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1375   /* If this is not the bottommost context, copy information that we
1376      need from the previous context.  */
1377   if (next)
1378     {
1379       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1380          expression, then we are parsing one in this context, too.  */
1381       context->object_type = next->object_type;
1382       /* Thread the stack.  */
1383       context->next = next;
1384     }
1385
1386   return context;
1387 }
1388
1389 /* The cp_parser structure represents the C++ parser.  */
1390
1391 typedef struct GTY(()) cp_parser {
1392   /* The lexer from which we are obtaining tokens.  */
1393   cp_lexer *lexer;
1394
1395   /* The scope in which names should be looked up.  If NULL_TREE, then
1396      we look up names in the scope that is currently open in the
1397      source program.  If non-NULL, this is either a TYPE or
1398      NAMESPACE_DECL for the scope in which we should look.  It can
1399      also be ERROR_MARK, when we've parsed a bogus scope.
1400
1401      This value is not cleared automatically after a name is looked
1402      up, so we must be careful to clear it before starting a new look
1403      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1404      will look up `Z' in the scope of `X', rather than the current
1405      scope.)  Unfortunately, it is difficult to tell when name lookup
1406      is complete, because we sometimes peek at a token, look it up,
1407      and then decide not to consume it.   */
1408   tree scope;
1409
1410   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1411      last lookup took place.  OBJECT_SCOPE is used if an expression
1412      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1413      respectively.  QUALIFYING_SCOPE is used for an expression of the
1414      form "X::Y"; it refers to X.  */
1415   tree object_scope;
1416   tree qualifying_scope;
1417
1418   /* A stack of parsing contexts.  All but the bottom entry on the
1419      stack will be tentative contexts.
1420
1421      We parse tentatively in order to determine which construct is in
1422      use in some situations.  For example, in order to determine
1423      whether a statement is an expression-statement or a
1424      declaration-statement we parse it tentatively as a
1425      declaration-statement.  If that fails, we then reparse the same
1426      token stream as an expression-statement.  */
1427   cp_parser_context *context;
1428
1429   /* True if we are parsing GNU C++.  If this flag is not set, then
1430      GNU extensions are not recognized.  */
1431   bool allow_gnu_extensions_p;
1432
1433   /* TRUE if the `>' token should be interpreted as the greater-than
1434      operator.  FALSE if it is the end of a template-id or
1435      template-parameter-list. In C++0x mode, this flag also applies to
1436      `>>' tokens, which are viewed as two consecutive `>' tokens when
1437      this flag is FALSE.  */
1438   bool greater_than_is_operator_p;
1439
1440   /* TRUE if default arguments are allowed within a parameter list
1441      that starts at this point. FALSE if only a gnu extension makes
1442      them permissible.  */
1443   bool default_arg_ok_p;
1444
1445   /* TRUE if we are parsing an integral constant-expression.  See
1446      [expr.const] for a precise definition.  */
1447   bool integral_constant_expression_p;
1448
1449   /* TRUE if we are parsing an integral constant-expression -- but a
1450      non-constant expression should be permitted as well.  This flag
1451      is used when parsing an array bound so that GNU variable-length
1452      arrays are tolerated.  */
1453   bool allow_non_integral_constant_expression_p;
1454
1455   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1456      been seen that makes the expression non-constant.  */
1457   bool non_integral_constant_expression_p;
1458
1459   /* TRUE if local variable names and `this' are forbidden in the
1460      current context.  */
1461   bool local_variables_forbidden_p;
1462
1463   /* TRUE if the declaration we are parsing is part of a
1464      linkage-specification of the form `extern string-literal
1465      declaration'.  */
1466   bool in_unbraced_linkage_specification_p;
1467
1468   /* TRUE if we are presently parsing a declarator, after the
1469      direct-declarator.  */
1470   bool in_declarator_p;
1471
1472   /* TRUE if we are presently parsing a template-argument-list.  */
1473   bool in_template_argument_list_p;
1474
1475   /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1476      to IN_OMP_BLOCK if parsing OpenMP structured block and
1477      IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1478      this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1479      iteration-statement, OpenMP block or loop within that switch.  */
1480 #define IN_SWITCH_STMT          1
1481 #define IN_ITERATION_STMT       2
1482 #define IN_OMP_BLOCK            4
1483 #define IN_OMP_FOR              8
1484 #define IN_IF_STMT             16
1485   unsigned char in_statement;
1486
1487   /* TRUE if we are presently parsing the body of a switch statement.
1488      Note that this doesn't quite overlap with in_statement above.
1489      The difference relates to giving the right sets of error messages:
1490      "case not in switch" vs "break statement used with OpenMP...".  */
1491   bool in_switch_statement_p;
1492
1493   /* TRUE if we are parsing a type-id in an expression context.  In
1494      such a situation, both "type (expr)" and "type (type)" are valid
1495      alternatives.  */
1496   bool in_type_id_in_expr_p;
1497
1498   /* TRUE if we are currently in a header file where declarations are
1499      implicitly extern "C".  */
1500   bool implicit_extern_c;
1501
1502   /* TRUE if strings in expressions should be translated to the execution
1503      character set.  */
1504   bool translate_strings_p;
1505
1506   /* TRUE if we are presently parsing the body of a function, but not
1507      a local class.  */
1508   bool in_function_body;
1509
1510   /* If non-NULL, then we are parsing a construct where new type
1511      definitions are not permitted.  The string stored here will be
1512      issued as an error message if a type is defined.  */
1513   const char *type_definition_forbidden_message;
1514
1515   /* A list of lists. The outer list is a stack, used for member
1516      functions of local classes. At each level there are two sub-list,
1517      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1518      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1519      TREE_VALUE's. The functions are chained in reverse declaration
1520      order.
1521
1522      The TREE_PURPOSE sublist contains those functions with default
1523      arguments that need post processing, and the TREE_VALUE sublist
1524      contains those functions with definitions that need post
1525      processing.
1526
1527      These lists can only be processed once the outermost class being
1528      defined is complete.  */
1529   tree unparsed_functions_queues;
1530
1531   /* The number of classes whose definitions are currently in
1532      progress.  */
1533   unsigned num_classes_being_defined;
1534
1535   /* The number of template parameter lists that apply directly to the
1536      current declaration.  */
1537   unsigned num_template_parameter_lists;
1538 } cp_parser;
1539
1540 /* Prototypes.  */
1541
1542 /* Constructors and destructors.  */
1543
1544 static cp_parser *cp_parser_new
1545   (void);
1546
1547 /* Routines to parse various constructs.
1548
1549    Those that return `tree' will return the error_mark_node (rather
1550    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1551    Sometimes, they will return an ordinary node if error-recovery was
1552    attempted, even though a parse error occurred.  So, to check
1553    whether or not a parse error occurred, you should always use
1554    cp_parser_error_occurred.  If the construct is optional (indicated
1555    either by an `_opt' in the name of the function that does the
1556    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1557    the construct is not present.  */
1558
1559 /* Lexical conventions [gram.lex]  */
1560
1561 static tree cp_parser_identifier
1562   (cp_parser *);
1563 static tree cp_parser_string_literal
1564   (cp_parser *, bool, bool);
1565
1566 /* Basic concepts [gram.basic]  */
1567
1568 static bool cp_parser_translation_unit
1569   (cp_parser *);
1570
1571 /* Expressions [gram.expr]  */
1572
1573 static tree cp_parser_primary_expression
1574   (cp_parser *, bool, bool, bool, cp_id_kind *);
1575 static tree cp_parser_id_expression
1576   (cp_parser *, bool, bool, bool *, bool, bool);
1577 static tree cp_parser_unqualified_id
1578   (cp_parser *, bool, bool, bool, bool);
1579 static tree cp_parser_nested_name_specifier_opt
1580   (cp_parser *, bool, bool, bool, bool);
1581 static tree cp_parser_nested_name_specifier
1582   (cp_parser *, bool, bool, bool, bool);
1583 static tree cp_parser_qualifying_entity
1584   (cp_parser *, bool, bool, bool, bool, bool);
1585 static tree cp_parser_postfix_expression
1586   (cp_parser *, bool, bool, bool, cp_id_kind *);
1587 static tree cp_parser_postfix_open_square_expression
1588   (cp_parser *, tree, bool);
1589 static tree cp_parser_postfix_dot_deref_expression
1590   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *, location_t);
1591 static VEC(tree,gc) *cp_parser_parenthesized_expression_list
1592   (cp_parser *, bool, bool, bool, bool *);
1593 static void cp_parser_pseudo_destructor_name
1594   (cp_parser *, tree *, tree *);
1595 static tree cp_parser_unary_expression
1596   (cp_parser *, bool, bool, cp_id_kind *);
1597 static enum tree_code cp_parser_unary_operator
1598   (cp_token *);
1599 static tree cp_parser_new_expression
1600   (cp_parser *);
1601 static VEC(tree,gc) *cp_parser_new_placement
1602   (cp_parser *);
1603 static tree cp_parser_new_type_id
1604   (cp_parser *, tree *);
1605 static cp_declarator *cp_parser_new_declarator_opt
1606   (cp_parser *);
1607 static cp_declarator *cp_parser_direct_new_declarator
1608   (cp_parser *);
1609 static VEC(tree,gc) *cp_parser_new_initializer
1610   (cp_parser *);
1611 static tree cp_parser_delete_expression
1612   (cp_parser *);
1613 static tree cp_parser_cast_expression
1614   (cp_parser *, bool, bool, cp_id_kind *);
1615 static tree cp_parser_binary_expression
1616   (cp_parser *, bool, bool, enum cp_parser_prec, cp_id_kind *);
1617 static tree cp_parser_question_colon_clause
1618   (cp_parser *, tree);
1619 static tree cp_parser_assignment_expression
1620   (cp_parser *, bool, cp_id_kind *);
1621 static enum tree_code cp_parser_assignment_operator_opt
1622   (cp_parser *);
1623 static tree cp_parser_expression
1624   (cp_parser *, bool, cp_id_kind *);
1625 static tree cp_parser_constant_expression
1626   (cp_parser *, bool, bool *);
1627 static tree cp_parser_builtin_offsetof
1628   (cp_parser *);
1629 static tree cp_parser_lambda_expression
1630   (cp_parser *);
1631 static void cp_parser_lambda_introducer
1632   (cp_parser *, tree);
1633 static void cp_parser_lambda_declarator_opt
1634   (cp_parser *, tree);
1635 static void cp_parser_lambda_body
1636   (cp_parser *, tree);
1637
1638 /* Statements [gram.stmt.stmt]  */
1639
1640 static void cp_parser_statement
1641   (cp_parser *, tree, bool, bool *);
1642 static void cp_parser_label_for_labeled_statement
1643   (cp_parser *);
1644 static tree cp_parser_expression_statement
1645   (cp_parser *, tree);
1646 static tree cp_parser_compound_statement
1647   (cp_parser *, tree, bool);
1648 static void cp_parser_statement_seq_opt
1649   (cp_parser *, tree);
1650 static tree cp_parser_selection_statement
1651   (cp_parser *, bool *);
1652 static tree cp_parser_condition
1653   (cp_parser *);
1654 static tree cp_parser_iteration_statement
1655   (cp_parser *);
1656 static void cp_parser_for_init_statement
1657   (cp_parser *);
1658 static tree cp_parser_jump_statement
1659   (cp_parser *);
1660 static void cp_parser_declaration_statement
1661   (cp_parser *);
1662
1663 static tree cp_parser_implicitly_scoped_statement
1664   (cp_parser *, bool *);
1665 static void cp_parser_already_scoped_statement
1666   (cp_parser *);
1667
1668 /* Declarations [gram.dcl.dcl] */
1669
1670 static void cp_parser_declaration_seq_opt
1671   (cp_parser *);
1672 static void cp_parser_declaration
1673   (cp_parser *);
1674 static void cp_parser_block_declaration
1675   (cp_parser *, bool);
1676 static void cp_parser_simple_declaration
1677   (cp_parser *, bool);
1678 static void cp_parser_decl_specifier_seq
1679   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1680 static tree cp_parser_storage_class_specifier_opt
1681   (cp_parser *);
1682 static tree cp_parser_function_specifier_opt
1683   (cp_parser *, cp_decl_specifier_seq *);
1684 static tree cp_parser_type_specifier
1685   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1686    int *, bool *);
1687 static tree cp_parser_simple_type_specifier
1688   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1689 static tree cp_parser_type_name
1690   (cp_parser *);
1691 static tree cp_parser_nonclass_name 
1692   (cp_parser* parser);
1693 static tree cp_parser_elaborated_type_specifier
1694   (cp_parser *, bool, bool);
1695 static tree cp_parser_enum_specifier
1696   (cp_parser *);
1697 static void cp_parser_enumerator_list
1698   (cp_parser *, tree);
1699 static void cp_parser_enumerator_definition
1700   (cp_parser *, tree);
1701 static tree cp_parser_namespace_name
1702   (cp_parser *);
1703 static void cp_parser_namespace_definition
1704   (cp_parser *);
1705 static void cp_parser_namespace_body
1706   (cp_parser *);
1707 static tree cp_parser_qualified_namespace_specifier
1708   (cp_parser *);
1709 static void cp_parser_namespace_alias_definition
1710   (cp_parser *);
1711 static bool cp_parser_using_declaration
1712   (cp_parser *, bool);
1713 static void cp_parser_using_directive
1714   (cp_parser *);
1715 static void cp_parser_asm_definition
1716   (cp_parser *);
1717 static void cp_parser_linkage_specification
1718   (cp_parser *);
1719 static void cp_parser_static_assert
1720   (cp_parser *, bool);
1721 static tree cp_parser_decltype
1722   (cp_parser *);
1723
1724 /* Declarators [gram.dcl.decl] */
1725
1726 static tree cp_parser_init_declarator
1727   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *);
1728 static cp_declarator *cp_parser_declarator
1729   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1730 static cp_declarator *cp_parser_direct_declarator
1731   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1732 static enum tree_code cp_parser_ptr_operator
1733   (cp_parser *, tree *, cp_cv_quals *);
1734 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1735   (cp_parser *);
1736 static tree cp_parser_late_return_type_opt
1737   (cp_parser *);
1738 static tree cp_parser_declarator_id
1739   (cp_parser *, bool);
1740 static tree cp_parser_type_id
1741   (cp_parser *);
1742 static tree cp_parser_template_type_arg
1743   (cp_parser *);
1744 static tree cp_parser_type_id_1
1745   (cp_parser *, bool);
1746 static void cp_parser_type_specifier_seq
1747   (cp_parser *, bool, cp_decl_specifier_seq *);
1748 static tree cp_parser_parameter_declaration_clause
1749   (cp_parser *);
1750 static tree cp_parser_parameter_declaration_list
1751   (cp_parser *, bool *);
1752 static cp_parameter_declarator *cp_parser_parameter_declaration
1753   (cp_parser *, bool, bool *);
1754 static tree cp_parser_default_argument 
1755   (cp_parser *, bool);
1756 static void cp_parser_function_body
1757   (cp_parser *);
1758 static tree cp_parser_initializer
1759   (cp_parser *, bool *, bool *);
1760 static tree cp_parser_initializer_clause
1761   (cp_parser *, bool *);
1762 static tree cp_parser_braced_list
1763   (cp_parser*, bool*);
1764 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1765   (cp_parser *, bool *);
1766
1767 static bool cp_parser_ctor_initializer_opt_and_function_body
1768   (cp_parser *);
1769
1770 /* Classes [gram.class] */
1771
1772 static tree cp_parser_class_name
1773   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1774 static tree cp_parser_class_specifier
1775   (cp_parser *);
1776 static tree cp_parser_class_head
1777   (cp_parser *, bool *, tree *, tree *);
1778 static enum tag_types cp_parser_class_key
1779   (cp_parser *);
1780 static void cp_parser_member_specification_opt
1781   (cp_parser *);
1782 static void cp_parser_member_declaration
1783   (cp_parser *);
1784 static tree cp_parser_pure_specifier
1785   (cp_parser *);
1786 static tree cp_parser_constant_initializer
1787   (cp_parser *);
1788
1789 /* Derived classes [gram.class.derived] */
1790
1791 static tree cp_parser_base_clause
1792   (cp_parser *);
1793 static tree cp_parser_base_specifier
1794   (cp_parser *);
1795
1796 /* Special member functions [gram.special] */
1797
1798 static tree cp_parser_conversion_function_id
1799   (cp_parser *);
1800 static tree cp_parser_conversion_type_id
1801   (cp_parser *);
1802 static cp_declarator *cp_parser_conversion_declarator_opt
1803   (cp_parser *);
1804 static bool cp_parser_ctor_initializer_opt
1805   (cp_parser *);
1806 static void cp_parser_mem_initializer_list
1807   (cp_parser *);
1808 static tree cp_parser_mem_initializer
1809   (cp_parser *);
1810 static tree cp_parser_mem_initializer_id
1811   (cp_parser *);
1812
1813 /* Overloading [gram.over] */
1814
1815 static tree cp_parser_operator_function_id
1816   (cp_parser *);
1817 static tree cp_parser_operator
1818   (cp_parser *);
1819
1820 /* Templates [gram.temp] */
1821
1822 static void cp_parser_template_declaration
1823   (cp_parser *, bool);
1824 static tree cp_parser_template_parameter_list
1825   (cp_parser *);
1826 static tree cp_parser_template_parameter
1827   (cp_parser *, bool *, bool *);
1828 static tree cp_parser_type_parameter
1829   (cp_parser *, bool *);
1830 static tree cp_parser_template_id
1831   (cp_parser *, bool, bool, bool);
1832 static tree cp_parser_template_name
1833   (cp_parser *, bool, bool, bool, bool *);
1834 static tree cp_parser_template_argument_list
1835   (cp_parser *);
1836 static tree cp_parser_template_argument
1837   (cp_parser *);
1838 static void cp_parser_explicit_instantiation
1839   (cp_parser *);
1840 static void cp_parser_explicit_specialization
1841   (cp_parser *);
1842
1843 /* Exception handling [gram.exception] */
1844
1845 static tree cp_parser_try_block
1846   (cp_parser *);
1847 static bool cp_parser_function_try_block
1848   (cp_parser *);
1849 static void cp_parser_handler_seq
1850   (cp_parser *);
1851 static void cp_parser_handler
1852   (cp_parser *);
1853 static tree cp_parser_exception_declaration
1854   (cp_parser *);
1855 static tree cp_parser_throw_expression
1856   (cp_parser *);
1857 static tree cp_parser_exception_specification_opt
1858   (cp_parser *);
1859 static tree cp_parser_type_id_list
1860   (cp_parser *);
1861
1862 /* GNU Extensions */
1863
1864 static tree cp_parser_asm_specification_opt
1865   (cp_parser *);
1866 static tree cp_parser_asm_operand_list
1867   (cp_parser *);
1868 static tree cp_parser_asm_clobber_list
1869   (cp_parser *);
1870 static tree cp_parser_asm_label_list
1871   (cp_parser *);
1872 static tree cp_parser_attributes_opt
1873   (cp_parser *);
1874 static tree cp_parser_attribute_list
1875   (cp_parser *);
1876 static bool cp_parser_extension_opt
1877   (cp_parser *, int *);
1878 static void cp_parser_label_declaration
1879   (cp_parser *);
1880
1881 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1882 static bool cp_parser_pragma
1883   (cp_parser *, enum pragma_context);
1884
1885 /* Objective-C++ Productions */
1886
1887 static tree cp_parser_objc_message_receiver
1888   (cp_parser *);
1889 static tree cp_parser_objc_message_args
1890   (cp_parser *);
1891 static tree cp_parser_objc_message_expression
1892   (cp_parser *);
1893 static tree cp_parser_objc_encode_expression
1894   (cp_parser *);
1895 static tree cp_parser_objc_defs_expression
1896   (cp_parser *);
1897 static tree cp_parser_objc_protocol_expression
1898   (cp_parser *);
1899 static tree cp_parser_objc_selector_expression
1900   (cp_parser *);
1901 static tree cp_parser_objc_expression
1902   (cp_parser *);
1903 static bool cp_parser_objc_selector_p
1904   (enum cpp_ttype);
1905 static tree cp_parser_objc_selector
1906   (cp_parser *);
1907 static tree cp_parser_objc_protocol_refs_opt
1908   (cp_parser *);
1909 static void cp_parser_objc_declaration
1910   (cp_parser *);
1911 static tree cp_parser_objc_statement
1912   (cp_parser *);
1913
1914 /* Utility Routines */
1915
1916 static tree cp_parser_lookup_name
1917   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *, location_t);
1918 static tree cp_parser_lookup_name_simple
1919   (cp_parser *, tree, location_t);
1920 static tree cp_parser_maybe_treat_template_as_class
1921   (tree, bool);
1922 static bool cp_parser_check_declarator_template_parameters
1923   (cp_parser *, cp_declarator *, location_t);
1924 static bool cp_parser_check_template_parameters
1925   (cp_parser *, unsigned, location_t, cp_declarator *);
1926 static tree cp_parser_simple_cast_expression
1927   (cp_parser *);
1928 static tree cp_parser_global_scope_opt
1929   (cp_parser *, bool);
1930 static bool cp_parser_constructor_declarator_p
1931   (cp_parser *, bool);
1932 static tree cp_parser_function_definition_from_specifiers_and_declarator
1933   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1934 static tree cp_parser_function_definition_after_declarator
1935   (cp_parser *, bool);
1936 static void cp_parser_template_declaration_after_export
1937   (cp_parser *, bool);
1938 static void cp_parser_perform_template_parameter_access_checks
1939   (VEC (deferred_access_check,gc)*);
1940 static tree cp_parser_single_declaration
1941   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool, bool *);
1942 static tree cp_parser_functional_cast
1943   (cp_parser *, tree);
1944 static tree cp_parser_save_member_function_body
1945   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1946 static tree cp_parser_enclosed_template_argument_list
1947   (cp_parser *);
1948 static void cp_parser_save_default_args
1949   (cp_parser *, tree);
1950 static void cp_parser_late_parsing_for_member
1951   (cp_parser *, tree);
1952 static void cp_parser_late_parsing_default_args
1953   (cp_parser *, tree);
1954 static tree cp_parser_sizeof_operand
1955   (cp_parser *, enum rid);
1956 static tree cp_parser_trait_expr
1957   (cp_parser *, enum rid);
1958 static bool cp_parser_declares_only_class_p
1959   (cp_parser *);
1960 static void cp_parser_set_storage_class
1961   (cp_parser *, cp_decl_specifier_seq *, enum rid, location_t);
1962 static void cp_parser_set_decl_spec_type
1963   (cp_decl_specifier_seq *, tree, location_t, bool);
1964 static bool cp_parser_friend_p
1965   (const cp_decl_specifier_seq *);
1966 static cp_token *cp_parser_require
1967   (cp_parser *, enum cpp_ttype, const char *);
1968 static cp_token *cp_parser_require_keyword
1969   (cp_parser *, enum rid, const char *);
1970 static bool cp_parser_token_starts_function_definition_p
1971   (cp_token *);
1972 static bool cp_parser_next_token_starts_class_definition_p
1973   (cp_parser *);
1974 static bool cp_parser_next_token_ends_template_argument_p
1975   (cp_parser *);
1976 static bool cp_parser_nth_token_starts_template_argument_list_p
1977   (cp_parser *, size_t);
1978 static enum tag_types cp_parser_token_is_class_key
1979   (cp_token *);
1980 static void cp_parser_check_class_key
1981   (enum tag_types, tree type);
1982 static void cp_parser_check_access_in_redeclaration
1983   (tree type, location_t location);
1984 static bool cp_parser_optional_template_keyword
1985   (cp_parser *);
1986 static void cp_parser_pre_parsed_nested_name_specifier
1987   (cp_parser *);
1988 static bool cp_parser_cache_group
1989   (cp_parser *, enum cpp_ttype, unsigned);
1990 static void cp_parser_parse_tentatively
1991   (cp_parser *);
1992 static void cp_parser_commit_to_tentative_parse
1993   (cp_parser *);
1994 static void cp_parser_abort_tentative_parse
1995   (cp_parser *);
1996 static bool cp_parser_parse_definitely
1997   (cp_parser *);
1998 static inline bool cp_parser_parsing_tentatively
1999   (cp_parser *);
2000 static bool cp_parser_uncommitted_to_tentative_parse_p
2001   (cp_parser *);
2002 static void cp_parser_error
2003   (cp_parser *, const char *);
2004 static void cp_parser_name_lookup_error
2005   (cp_parser *, tree, tree, const char *, location_t);
2006 static bool cp_parser_simulate_error
2007   (cp_parser *);
2008 static bool cp_parser_check_type_definition
2009   (cp_parser *);
2010 static void cp_parser_check_for_definition_in_return_type
2011   (cp_declarator *, tree, location_t type_location);
2012 static void cp_parser_check_for_invalid_template_id
2013   (cp_parser *, tree, location_t location);
2014 static bool cp_parser_non_integral_constant_expression
2015   (cp_parser *, const char *);
2016 static void cp_parser_diagnose_invalid_type_name
2017   (cp_parser *, tree, tree, location_t);
2018 static bool cp_parser_parse_and_diagnose_invalid_type_name
2019   (cp_parser *);
2020 static int cp_parser_skip_to_closing_parenthesis
2021   (cp_parser *, bool, bool, bool);
2022 static void cp_parser_skip_to_end_of_statement
2023   (cp_parser *);
2024 static void cp_parser_consume_semicolon_at_end_of_statement
2025   (cp_parser *);
2026 static void cp_parser_skip_to_end_of_block_or_statement
2027   (cp_parser *);
2028 static bool cp_parser_skip_to_closing_brace
2029   (cp_parser *);
2030 static void cp_parser_skip_to_end_of_template_parameter_list
2031   (cp_parser *);
2032 static void cp_parser_skip_to_pragma_eol
2033   (cp_parser*, cp_token *);
2034 static bool cp_parser_error_occurred
2035   (cp_parser *);
2036 static bool cp_parser_allow_gnu_extensions_p
2037   (cp_parser *);
2038 static bool cp_parser_is_string_literal
2039   (cp_token *);
2040 static bool cp_parser_is_keyword
2041   (cp_token *, enum rid);
2042 static tree cp_parser_make_typename_type
2043   (cp_parser *, tree, tree, location_t location);
2044 static cp_declarator * cp_parser_make_indirect_declarator
2045   (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2046
2047 /* Returns nonzero if we are parsing tentatively.  */
2048
2049 static inline bool
2050 cp_parser_parsing_tentatively (cp_parser* parser)
2051 {
2052   return parser->context->next != NULL;
2053 }
2054
2055 /* Returns nonzero if TOKEN is a string literal.  */
2056
2057 static bool
2058 cp_parser_is_string_literal (cp_token* token)
2059 {
2060   return (token->type == CPP_STRING ||
2061           token->type == CPP_STRING16 ||
2062           token->type == CPP_STRING32 ||
2063           token->type == CPP_WSTRING);
2064 }
2065
2066 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2067
2068 static bool
2069 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2070 {
2071   return token->keyword == keyword;
2072 }
2073
2074 /* If not parsing tentatively, issue a diagnostic of the form
2075       FILE:LINE: MESSAGE before TOKEN
2076    where TOKEN is the next token in the input stream.  MESSAGE
2077    (specified by the caller) is usually of the form "expected
2078    OTHER-TOKEN".  */
2079
2080 static void
2081 cp_parser_error (cp_parser* parser, const char* message)
2082 {
2083   if (!cp_parser_simulate_error (parser))
2084     {
2085       cp_token *token = cp_lexer_peek_token (parser->lexer);
2086       /* This diagnostic makes more sense if it is tagged to the line
2087          of the token we just peeked at.  */
2088       cp_lexer_set_source_position_from_token (token);
2089
2090       if (token->type == CPP_PRAGMA)
2091         {
2092           error_at (token->location,
2093                     "%<#pragma%> is not allowed here");
2094           cp_parser_skip_to_pragma_eol (parser, token);
2095           return;
2096         }
2097
2098       c_parse_error (message,
2099                      /* Because c_parser_error does not understand
2100                         CPP_KEYWORD, keywords are treated like
2101                         identifiers.  */
2102                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2103                      token->u.value, token->flags);
2104     }
2105 }
2106
2107 /* Issue an error about name-lookup failing.  NAME is the
2108    IDENTIFIER_NODE DECL is the result of
2109    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2110    the thing that we hoped to find.  */
2111
2112 static void
2113 cp_parser_name_lookup_error (cp_parser* parser,
2114                              tree name,
2115                              tree decl,
2116                              const char* desired,
2117                              location_t location)
2118 {
2119   /* If name lookup completely failed, tell the user that NAME was not
2120      declared.  */
2121   if (decl == error_mark_node)
2122     {
2123       if (parser->scope && parser->scope != global_namespace)
2124         error_at (location, "%<%E::%E%> has not been declared",
2125                   parser->scope, name);
2126       else if (parser->scope == global_namespace)
2127         error_at (location, "%<::%E%> has not been declared", name);
2128       else if (parser->object_scope
2129                && !CLASS_TYPE_P (parser->object_scope))
2130         error_at (location, "request for member %qE in non-class type %qT",
2131                   name, parser->object_scope);
2132       else if (parser->object_scope)
2133         error_at (location, "%<%T::%E%> has not been declared",
2134                   parser->object_scope, name);
2135       else
2136         error_at (location, "%qE has not been declared", name);
2137     }
2138   else if (parser->scope && parser->scope != global_namespace)
2139     error_at (location, "%<%E::%E%> %s", parser->scope, name, desired);
2140   else if (parser->scope == global_namespace)
2141     error_at (location, "%<::%E%> %s", name, desired);
2142   else
2143     error_at (location, "%qE %s", name, desired);
2144 }
2145
2146 /* If we are parsing tentatively, remember that an error has occurred
2147    during this tentative parse.  Returns true if the error was
2148    simulated; false if a message should be issued by the caller.  */
2149
2150 static bool
2151 cp_parser_simulate_error (cp_parser* parser)
2152 {
2153   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2154     {
2155       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2156       return true;
2157     }
2158   return false;
2159 }
2160
2161 /* Check for repeated decl-specifiers.  */
2162
2163 static void
2164 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs,
2165                            location_t location)
2166 {
2167   int ds;
2168
2169   for (ds = ds_first; ds != ds_last; ++ds)
2170     {
2171       unsigned count = decl_specs->specs[ds];
2172       if (count < 2)
2173         continue;
2174       /* The "long" specifier is a special case because of "long long".  */
2175       if (ds == ds_long)
2176         {
2177           if (count > 2)
2178             error_at (location, "%<long long long%> is too long for GCC");
2179           else 
2180             pedwarn_cxx98 (location, OPT_Wlong_long, 
2181                            "ISO C++ 1998 does not support %<long long%>");
2182         }
2183       else if (count > 1)
2184         {
2185           static const char *const decl_spec_names[] = {
2186             "signed",
2187             "unsigned",
2188             "short",
2189             "long",
2190             "const",
2191             "volatile",
2192             "restrict",
2193             "inline",
2194             "virtual",
2195             "explicit",
2196             "friend",
2197             "typedef",
2198             "constexpr",
2199             "__complex",
2200             "__thread"
2201           };
2202           error_at (location, "duplicate %qs", decl_spec_names[ds]);
2203         }
2204     }
2205 }
2206
2207 /* This function is called when a type is defined.  If type
2208    definitions are forbidden at this point, an error message is
2209    issued.  */
2210
2211 static bool
2212 cp_parser_check_type_definition (cp_parser* parser)
2213 {
2214   /* If types are forbidden here, issue a message.  */
2215   if (parser->type_definition_forbidden_message)
2216     {
2217       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2218          in the message need to be interpreted.  */
2219       error (parser->type_definition_forbidden_message);
2220       return false;
2221     }
2222   return true;
2223 }
2224
2225 /* This function is called when the DECLARATOR is processed.  The TYPE
2226    was a type defined in the decl-specifiers.  If it is invalid to
2227    define a type in the decl-specifiers for DECLARATOR, an error is
2228    issued. TYPE_LOCATION is the location of TYPE and is used
2229    for error reporting.  */
2230
2231 static void
2232 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2233                                                tree type, location_t type_location)
2234 {
2235   /* [dcl.fct] forbids type definitions in return types.
2236      Unfortunately, it's not easy to know whether or not we are
2237      processing a return type until after the fact.  */
2238   while (declarator
2239          && (declarator->kind == cdk_pointer
2240              || declarator->kind == cdk_reference
2241              || declarator->kind == cdk_ptrmem))
2242     declarator = declarator->declarator;
2243   if (declarator
2244       && declarator->kind == cdk_function)
2245     {
2246       error_at (type_location,
2247                 "new types may not be defined in a return type");
2248       inform (type_location, 
2249               "(perhaps a semicolon is missing after the definition of %qT)",
2250               type);
2251     }
2252 }
2253
2254 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2255    "<" in any valid C++ program.  If the next token is indeed "<",
2256    issue a message warning the user about what appears to be an
2257    invalid attempt to form a template-id. LOCATION is the location
2258    of the type-specifier (TYPE) */
2259
2260 static void
2261 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2262                                          tree type, location_t location)
2263 {
2264   cp_token_position start = 0;
2265
2266   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2267     {
2268       if (TYPE_P (type))
2269         error_at (location, "%qT is not a template", type);
2270       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2271         error_at (location, "%qE is not a template", type);
2272       else
2273         error_at (location, "invalid template-id");
2274       /* Remember the location of the invalid "<".  */
2275       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2276         start = cp_lexer_token_position (parser->lexer, true);
2277       /* Consume the "<".  */
2278       cp_lexer_consume_token (parser->lexer);
2279       /* Parse the template arguments.  */
2280       cp_parser_enclosed_template_argument_list (parser);
2281       /* Permanently remove the invalid template arguments so that
2282          this error message is not issued again.  */
2283       if (start)
2284         cp_lexer_purge_tokens_after (parser->lexer, start);
2285     }
2286 }
2287
2288 /* If parsing an integral constant-expression, issue an error message
2289    about the fact that THING appeared and return true.  Otherwise,
2290    return false.  In either case, set
2291    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2292
2293 static bool
2294 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2295                                             const char *thing)
2296 {
2297   parser->non_integral_constant_expression_p = true;
2298   if (parser->integral_constant_expression_p)
2299     {
2300       if (!parser->allow_non_integral_constant_expression_p)
2301         {
2302           /* Don't use `%s' to print THING, because quotations (`%<', `%>')
2303              in the message need to be interpreted.  */
2304           char *message = concat (thing,
2305                                   " cannot appear in a constant-expression",
2306                                   NULL);
2307           error (message);
2308           free (message);
2309           return true;
2310         }
2311     }
2312   return false;
2313 }
2314
2315 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2316    qualifying scope (or NULL, if none) for ID.  This function commits
2317    to the current active tentative parse, if any.  (Otherwise, the
2318    problematic construct might be encountered again later, resulting
2319    in duplicate error messages.) LOCATION is the location of ID.  */
2320
2321 static void
2322 cp_parser_diagnose_invalid_type_name (cp_parser *parser,
2323                                       tree scope, tree id,
2324                                       location_t location)
2325 {
2326   tree decl, old_scope;
2327   /* Try to lookup the identifier.  */
2328   old_scope = parser->scope;
2329   parser->scope = scope;
2330   decl = cp_parser_lookup_name_simple (parser, id, location);
2331   parser->scope = old_scope;
2332   /* If the lookup found a template-name, it means that the user forgot
2333   to specify an argument list. Emit a useful error message.  */
2334   if (TREE_CODE (decl) == TEMPLATE_DECL)
2335     error_at (location,
2336               "invalid use of template-name %qE without an argument list",
2337               decl);
2338   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2339     error_at (location, "invalid use of destructor %qD as a type", id);
2340   else if (TREE_CODE (decl) == TYPE_DECL)
2341     /* Something like 'unsigned A a;'  */
2342     error_at (location, "invalid combination of multiple type-specifiers");
2343   else if (!parser->scope)
2344     {
2345       /* Issue an error message.  */
2346       error_at (location, "%qE does not name a type", id);
2347       /* If we're in a template class, it's possible that the user was
2348          referring to a type from a base class.  For example:
2349
2350            template <typename T> struct A { typedef T X; };
2351            template <typename T> struct B : public A<T> { X x; };
2352
2353          The user should have said "typename A<T>::X".  */
2354       if (processing_template_decl && current_class_type
2355           && TYPE_BINFO (current_class_type))
2356         {
2357           tree b;
2358
2359           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2360                b;
2361                b = TREE_CHAIN (b))
2362             {
2363               tree base_type = BINFO_TYPE (b);
2364               if (CLASS_TYPE_P (base_type)
2365                   && dependent_type_p (base_type))
2366                 {
2367                   tree field;
2368                   /* Go from a particular instantiation of the
2369                      template (which will have an empty TYPE_FIELDs),
2370                      to the main version.  */
2371                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2372                   for (field = TYPE_FIELDS (base_type);
2373                        field;
2374                        field = TREE_CHAIN (field))
2375                     if (TREE_CODE (field) == TYPE_DECL
2376                         && DECL_NAME (field) == id)
2377                       {
2378                         inform (location, 
2379                                 "(perhaps %<typename %T::%E%> was intended)",
2380                                 BINFO_TYPE (b), id);
2381                         break;
2382                       }
2383                   if (field)
2384                     break;
2385                 }
2386             }
2387         }
2388     }
2389   /* Here we diagnose qualified-ids where the scope is actually correct,
2390      but the identifier does not resolve to a valid type name.  */
2391   else if (parser->scope != error_mark_node)
2392     {
2393       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2394         error_at (location, "%qE in namespace %qE does not name a type",
2395                   id, parser->scope);
2396       else if (TYPE_P (parser->scope))
2397         error_at (location, "%qE in class %qT does not name a type",
2398                   id, parser->scope);
2399       else
2400         gcc_unreachable ();
2401     }
2402   cp_parser_commit_to_tentative_parse (parser);
2403 }
2404
2405 /* Check for a common situation where a type-name should be present,
2406    but is not, and issue a sensible error message.  Returns true if an
2407    invalid type-name was detected.
2408
2409    The situation handled by this function are variable declarations of the
2410    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2411    Usually, `ID' should name a type, but if we got here it means that it
2412    does not. We try to emit the best possible error message depending on
2413    how exactly the id-expression looks like.  */
2414
2415 static bool
2416 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2417 {
2418   tree id;
2419   cp_token *token = cp_lexer_peek_token (parser->lexer);
2420
2421   cp_parser_parse_tentatively (parser);
2422   id = cp_parser_id_expression (parser,
2423                                 /*template_keyword_p=*/false,
2424                                 /*check_dependency_p=*/true,
2425                                 /*template_p=*/NULL,
2426                                 /*declarator_p=*/true,
2427                                 /*optional_p=*/false);
2428   /* After the id-expression, there should be a plain identifier,
2429      otherwise this is not a simple variable declaration. Also, if
2430      the scope is dependent, we cannot do much.  */
2431   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2432       || (parser->scope && TYPE_P (parser->scope)
2433           && dependent_type_p (parser->scope))
2434       || TREE_CODE (id) == TYPE_DECL)
2435     {
2436       cp_parser_abort_tentative_parse (parser);
2437       return false;
2438     }
2439   if (!cp_parser_parse_definitely (parser))
2440     return false;
2441
2442   /* Emit a diagnostic for the invalid type.  */
2443   cp_parser_diagnose_invalid_type_name (parser, parser->scope,
2444                                         id, token->location);
2445   /* Skip to the end of the declaration; there's no point in
2446      trying to process it.  */
2447   cp_parser_skip_to_end_of_block_or_statement (parser);
2448   return true;
2449 }
2450
2451 /* Consume tokens up to, and including, the next non-nested closing `)'.
2452    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2453    are doing error recovery. Returns -1 if OR_COMMA is true and we
2454    found an unnested comma.  */
2455
2456 static int
2457 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2458                                        bool recovering,
2459                                        bool or_comma,
2460                                        bool consume_paren)
2461 {
2462   unsigned paren_depth = 0;
2463   unsigned brace_depth = 0;
2464   unsigned square_depth = 0;
2465
2466   if (recovering && !or_comma
2467       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2468     return 0;
2469
2470   while (true)
2471     {
2472       cp_token * token = cp_lexer_peek_token (parser->lexer);
2473
2474       switch (token->type)
2475         {
2476         case CPP_EOF:
2477         case CPP_PRAGMA_EOL:
2478           /* If we've run out of tokens, then there is no closing `)'.  */
2479           return 0;
2480
2481         /* This is good for lambda expression capture-lists.  */
2482         case CPP_OPEN_SQUARE:
2483           ++square_depth;
2484           break;
2485         case CPP_CLOSE_SQUARE:
2486           if (!square_depth--)
2487             return 0;
2488           break;
2489
2490         case CPP_SEMICOLON:
2491           /* This matches the processing in skip_to_end_of_statement.  */
2492           if (!brace_depth)
2493             return 0;
2494           break;
2495
2496         case CPP_OPEN_BRACE:
2497           ++brace_depth;
2498           break;
2499         case CPP_CLOSE_BRACE:
2500           if (!brace_depth--)
2501             return 0;
2502           break;
2503
2504         case CPP_COMMA:
2505           if (recovering && or_comma && !brace_depth && !paren_depth
2506               && !square_depth)
2507             return -1;
2508           break;
2509
2510         case CPP_OPEN_PAREN:
2511           if (!brace_depth)
2512             ++paren_depth;
2513           break;
2514
2515         case CPP_CLOSE_PAREN:
2516           if (!brace_depth && !paren_depth--)
2517             {
2518               if (consume_paren)
2519                 cp_lexer_consume_token (parser->lexer);
2520               return 1;
2521             }
2522           break;
2523
2524         default:
2525           break;
2526         }
2527
2528       /* Consume the token.  */
2529       cp_lexer_consume_token (parser->lexer);
2530     }
2531 }
2532
2533 /* Consume tokens until we reach the end of the current statement.
2534    Normally, that will be just before consuming a `;'.  However, if a
2535    non-nested `}' comes first, then we stop before consuming that.  */
2536
2537 static void
2538 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2539 {
2540   unsigned nesting_depth = 0;
2541
2542   while (true)
2543     {
2544       cp_token *token = cp_lexer_peek_token (parser->lexer);
2545
2546       switch (token->type)
2547         {
2548         case CPP_EOF:
2549         case CPP_PRAGMA_EOL:
2550           /* If we've run out of tokens, stop.  */
2551           return;
2552
2553         case CPP_SEMICOLON:
2554           /* If the next token is a `;', we have reached the end of the
2555              statement.  */
2556           if (!nesting_depth)
2557             return;
2558           break;
2559
2560         case CPP_CLOSE_BRACE:
2561           /* If this is a non-nested '}', stop before consuming it.
2562              That way, when confronted with something like:
2563
2564                { 3 + }
2565
2566              we stop before consuming the closing '}', even though we
2567              have not yet reached a `;'.  */
2568           if (nesting_depth == 0)
2569             return;
2570
2571           /* If it is the closing '}' for a block that we have
2572              scanned, stop -- but only after consuming the token.
2573              That way given:
2574
2575                 void f g () { ... }
2576                 typedef int I;
2577
2578              we will stop after the body of the erroneously declared
2579              function, but before consuming the following `typedef'
2580              declaration.  */
2581           if (--nesting_depth == 0)
2582             {
2583               cp_lexer_consume_token (parser->lexer);
2584               return;
2585             }
2586
2587         case CPP_OPEN_BRACE:
2588           ++nesting_depth;
2589           break;
2590
2591         default:
2592           break;
2593         }
2594
2595       /* Consume the token.  */
2596       cp_lexer_consume_token (parser->lexer);
2597     }
2598 }
2599
2600 /* This function is called at the end of a statement or declaration.
2601    If the next token is a semicolon, it is consumed; otherwise, error
2602    recovery is attempted.  */
2603
2604 static void
2605 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2606 {
2607   /* Look for the trailing `;'.  */
2608   if (!cp_parser_require (parser, CPP_SEMICOLON, "%<;%>"))
2609     {
2610       /* If there is additional (erroneous) input, skip to the end of
2611          the statement.  */
2612       cp_parser_skip_to_end_of_statement (parser);
2613       /* If the next token is now a `;', consume it.  */
2614       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2615         cp_lexer_consume_token (parser->lexer);
2616     }
2617 }
2618
2619 /* Skip tokens until we have consumed an entire block, or until we
2620    have consumed a non-nested `;'.  */
2621
2622 static void
2623 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2624 {
2625   int nesting_depth = 0;
2626
2627   while (nesting_depth >= 0)
2628     {
2629       cp_token *token = cp_lexer_peek_token (parser->lexer);
2630
2631       switch (token->type)
2632         {
2633         case CPP_EOF:
2634         case CPP_PRAGMA_EOL:
2635           /* If we've run out of tokens, stop.  */
2636           return;
2637
2638         case CPP_SEMICOLON:
2639           /* Stop if this is an unnested ';'. */
2640           if (!nesting_depth)
2641             nesting_depth = -1;
2642           break;
2643
2644         case CPP_CLOSE_BRACE:
2645           /* Stop if this is an unnested '}', or closes the outermost
2646              nesting level.  */
2647           nesting_depth--;
2648           if (nesting_depth < 0)
2649             return;
2650           if (!nesting_depth)
2651             nesting_depth = -1;
2652           break;
2653
2654         case CPP_OPEN_BRACE:
2655           /* Nest. */
2656           nesting_depth++;
2657           break;
2658
2659         default:
2660           break;
2661         }
2662
2663       /* Consume the token.  */
2664       cp_lexer_consume_token (parser->lexer);
2665     }
2666 }
2667
2668 /* Skip tokens until a non-nested closing curly brace is the next
2669    token, or there are no more tokens. Return true in the first case,
2670    false otherwise.  */
2671
2672 static bool
2673 cp_parser_skip_to_closing_brace (cp_parser *parser)
2674 {
2675   unsigned nesting_depth = 0;
2676
2677   while (true)
2678     {
2679       cp_token *token = cp_lexer_peek_token (parser->lexer);
2680
2681       switch (token->type)
2682         {
2683         case CPP_EOF:
2684         case CPP_PRAGMA_EOL:
2685           /* If we've run out of tokens, stop.  */
2686           return false;
2687
2688         case CPP_CLOSE_BRACE:
2689           /* If the next token is a non-nested `}', then we have reached
2690              the end of the current block.  */
2691           if (nesting_depth-- == 0)
2692             return true;
2693           break;
2694
2695         case CPP_OPEN_BRACE:
2696           /* If it the next token is a `{', then we are entering a new
2697              block.  Consume the entire block.  */
2698           ++nesting_depth;
2699           break;
2700
2701         default:
2702           break;
2703         }
2704
2705       /* Consume the token.  */
2706       cp_lexer_consume_token (parser->lexer);
2707     }
2708 }
2709
2710 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2711    parameter is the PRAGMA token, allowing us to purge the entire pragma
2712    sequence.  */
2713
2714 static void
2715 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2716 {
2717   cp_token *token;
2718
2719   parser->lexer->in_pragma = false;
2720
2721   do
2722     token = cp_lexer_consume_token (parser->lexer);
2723   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2724
2725   /* Ensure that the pragma is not parsed again.  */
2726   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2727 }
2728
2729 /* Require pragma end of line, resyncing with it as necessary.  The
2730    arguments are as for cp_parser_skip_to_pragma_eol.  */
2731
2732 static void
2733 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2734 {
2735   parser->lexer->in_pragma = false;
2736   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2737     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2738 }
2739
2740 /* This is a simple wrapper around make_typename_type. When the id is
2741    an unresolved identifier node, we can provide a superior diagnostic
2742    using cp_parser_diagnose_invalid_type_name.  */
2743
2744 static tree
2745 cp_parser_make_typename_type (cp_parser *parser, tree scope,
2746                               tree id, location_t id_location)
2747 {
2748   tree result;
2749   if (TREE_CODE (id) == IDENTIFIER_NODE)
2750     {
2751       result = make_typename_type (scope, id, typename_type,
2752                                    /*complain=*/tf_none);
2753       if (result == error_mark_node)
2754         cp_parser_diagnose_invalid_type_name (parser, scope, id, id_location);
2755       return result;
2756     }
2757   return make_typename_type (scope, id, typename_type, tf_error);
2758 }
2759
2760 /* This is a wrapper around the
2761    make_{pointer,ptrmem,reference}_declarator functions that decides
2762    which one to call based on the CODE and CLASS_TYPE arguments. The
2763    CODE argument should be one of the values returned by
2764    cp_parser_ptr_operator. */
2765 static cp_declarator *
2766 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
2767                                     cp_cv_quals cv_qualifiers,
2768                                     cp_declarator *target)
2769 {
2770   if (code == ERROR_MARK)
2771     return cp_error_declarator;
2772
2773   if (code == INDIRECT_REF)
2774     if (class_type == NULL_TREE)
2775       return make_pointer_declarator (cv_qualifiers, target);
2776     else
2777       return make_ptrmem_declarator (cv_qualifiers, class_type, target);
2778   else if (code == ADDR_EXPR && class_type == NULL_TREE)
2779     return make_reference_declarator (cv_qualifiers, target, false);
2780   else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
2781     return make_reference_declarator (cv_qualifiers, target, true);
2782   gcc_unreachable ();
2783 }
2784
2785 /* Create a new C++ parser.  */
2786
2787 static cp_parser *
2788 cp_parser_new (void)
2789 {
2790   cp_parser *parser;
2791   cp_lexer *lexer;
2792   unsigned i;
2793
2794   /* cp_lexer_new_main is called before calling ggc_alloc because
2795      cp_lexer_new_main might load a PCH file.  */
2796   lexer = cp_lexer_new_main ();
2797
2798   /* Initialize the binops_by_token so that we can get the tree
2799      directly from the token.  */
2800   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2801     binops_by_token[binops[i].token_type] = binops[i];
2802
2803   parser = GGC_CNEW (cp_parser);
2804   parser->lexer = lexer;
2805   parser->context = cp_parser_context_new (NULL);
2806
2807   /* For now, we always accept GNU extensions.  */
2808   parser->allow_gnu_extensions_p = 1;
2809
2810   /* The `>' token is a greater-than operator, not the end of a
2811      template-id.  */
2812   parser->greater_than_is_operator_p = true;
2813
2814   parser->default_arg_ok_p = true;
2815
2816   /* We are not parsing a constant-expression.  */
2817   parser->integral_constant_expression_p = false;
2818   parser->allow_non_integral_constant_expression_p = false;
2819   parser->non_integral_constant_expression_p = false;
2820
2821   /* Local variable names are not forbidden.  */
2822   parser->local_variables_forbidden_p = false;
2823
2824   /* We are not processing an `extern "C"' declaration.  */
2825   parser->in_unbraced_linkage_specification_p = false;
2826
2827   /* We are not processing a declarator.  */
2828   parser->in_declarator_p = false;
2829
2830   /* We are not processing a template-argument-list.  */
2831   parser->in_template_argument_list_p = false;
2832
2833   /* We are not in an iteration statement.  */
2834   parser->in_statement = 0;
2835
2836   /* We are not in a switch statement.  */
2837   parser->in_switch_statement_p = false;
2838
2839   /* We are not parsing a type-id inside an expression.  */
2840   parser->in_type_id_in_expr_p = false;
2841
2842   /* Declarations aren't implicitly extern "C".  */
2843   parser->implicit_extern_c = false;
2844
2845   /* String literals should be translated to the execution character set.  */
2846   parser->translate_strings_p = true;
2847
2848   /* We are not parsing a function body.  */
2849   parser->in_function_body = false;
2850
2851   /* The unparsed function queue is empty.  */
2852   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2853
2854   /* There are no classes being defined.  */
2855   parser->num_classes_being_defined = 0;
2856
2857   /* No template parameters apply.  */
2858   parser->num_template_parameter_lists = 0;
2859
2860   return parser;
2861 }
2862
2863 /* Create a cp_lexer structure which will emit the tokens in CACHE
2864    and push it onto the parser's lexer stack.  This is used for delayed
2865    parsing of in-class method bodies and default arguments, and should
2866    not be confused with tentative parsing.  */
2867 static void
2868 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2869 {
2870   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2871   lexer->next = parser->lexer;
2872   parser->lexer = lexer;
2873
2874   /* Move the current source position to that of the first token in the
2875      new lexer.  */
2876   cp_lexer_set_source_position_from_token (lexer->next_token);
2877 }
2878
2879 /* Pop the top lexer off the parser stack.  This is never used for the
2880    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2881 static void
2882 cp_parser_pop_lexer (cp_parser *parser)
2883 {
2884   cp_lexer *lexer = parser->lexer;
2885   parser->lexer = lexer->next;
2886   cp_lexer_destroy (lexer);
2887
2888   /* Put the current source position back where it was before this
2889      lexer was pushed.  */
2890   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2891 }
2892
2893 /* Lexical conventions [gram.lex]  */
2894
2895 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2896    identifier.  */
2897
2898 static tree
2899 cp_parser_identifier (cp_parser* parser)
2900 {
2901   cp_token *token;
2902
2903   /* Look for the identifier.  */
2904   token = cp_parser_require (parser, CPP_NAME, "identifier");
2905   /* Return the value.  */
2906   return token ? token->u.value : error_mark_node;
2907 }
2908
2909 /* Parse a sequence of adjacent string constants.  Returns a
2910    TREE_STRING representing the combined, nul-terminated string
2911    constant.  If TRANSLATE is true, translate the string to the
2912    execution character set.  If WIDE_OK is true, a wide string is
2913    invalid here.
2914
2915    C++98 [lex.string] says that if a narrow string literal token is
2916    adjacent to a wide string literal token, the behavior is undefined.
2917    However, C99 6.4.5p4 says that this results in a wide string literal.
2918    We follow C99 here, for consistency with the C front end.
2919
2920    This code is largely lifted from lex_string() in c-lex.c.
2921
2922    FUTURE: ObjC++ will need to handle @-strings here.  */
2923 static tree
2924 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2925 {
2926   tree value;
2927   size_t count;
2928   struct obstack str_ob;
2929   cpp_string str, istr, *strs;
2930   cp_token *tok;
2931   enum cpp_ttype type;
2932
2933   tok = cp_lexer_peek_token (parser->lexer);
2934   if (!cp_parser_is_string_literal (tok))
2935     {
2936       cp_parser_error (parser, "expected string-literal");
2937       return error_mark_node;
2938     }
2939
2940   type = tok->type;
2941
2942   /* Try to avoid the overhead of creating and destroying an obstack
2943      for the common case of just one string.  */
2944   if (!cp_parser_is_string_literal
2945       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2946     {
2947       cp_lexer_consume_token (parser->lexer);
2948
2949       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2950       str.len = TREE_STRING_LENGTH (tok->u.value);
2951       count = 1;
2952
2953       strs = &str;
2954     }
2955   else
2956     {
2957       gcc_obstack_init (&str_ob);
2958       count = 0;
2959
2960       do
2961         {
2962           cp_lexer_consume_token (parser->lexer);
2963           count++;
2964           str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2965           str.len = TREE_STRING_LENGTH (tok->u.value);
2966
2967           if (type != tok->type)
2968             {
2969               if (type == CPP_STRING)
2970                 type = tok->type;
2971               else if (tok->type != CPP_STRING)
2972                 error_at (tok->location,
2973                           "unsupported non-standard concatenation "
2974                           "of string literals");
2975             }
2976
2977           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2978
2979           tok = cp_lexer_peek_token (parser->lexer);
2980         }
2981       while (cp_parser_is_string_literal (tok));
2982
2983       strs = (cpp_string *) obstack_finish (&str_ob);
2984     }
2985
2986   if (type != CPP_STRING && !wide_ok)
2987     {
2988       cp_parser_error (parser, "a wide string is invalid in this context");
2989       type = CPP_STRING;
2990     }
2991
2992   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2993       (parse_in, strs, count, &istr, type))
2994     {
2995       value = build_string (istr.len, (const char *)istr.text);
2996       free (CONST_CAST (unsigned char *, istr.text));
2997
2998       switch (type)
2999         {
3000         default:
3001         case CPP_STRING:
3002           TREE_TYPE (value) = char_array_type_node;
3003           break;
3004         case CPP_STRING16:
3005           TREE_TYPE (value) = char16_array_type_node;
3006           break;
3007         case CPP_STRING32:
3008           TREE_TYPE (value) = char32_array_type_node;
3009           break;
3010         case CPP_WSTRING:
3011           TREE_TYPE (value) = wchar_array_type_node;
3012           break;
3013         }
3014
3015       value = fix_string_type (value);
3016     }
3017   else
3018     /* cpp_interpret_string has issued an error.  */
3019     value = error_mark_node;
3020
3021   if (count > 1)
3022     obstack_free (&str_ob, 0);
3023
3024   return value;
3025 }
3026
3027
3028 /* Basic concepts [gram.basic]  */
3029
3030 /* Parse a translation-unit.
3031
3032    translation-unit:
3033      declaration-seq [opt]
3034
3035    Returns TRUE if all went well.  */
3036
3037 static bool
3038 cp_parser_translation_unit (cp_parser* parser)
3039 {
3040   /* The address of the first non-permanent object on the declarator
3041      obstack.  */
3042   static void *declarator_obstack_base;
3043
3044   bool success;
3045
3046   /* Create the declarator obstack, if necessary.  */
3047   if (!cp_error_declarator)
3048     {
3049       gcc_obstack_init (&declarator_obstack);
3050       /* Create the error declarator.  */
3051       cp_error_declarator = make_declarator (cdk_error);
3052       /* Create the empty parameter list.  */
3053       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3054       /* Remember where the base of the declarator obstack lies.  */
3055       declarator_obstack_base = obstack_next_free (&declarator_obstack);
3056     }
3057
3058   cp_parser_declaration_seq_opt (parser);
3059
3060   /* If there are no tokens left then all went well.  */
3061   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3062     {
3063       /* Get rid of the token array; we don't need it any more.  */
3064       cp_lexer_destroy (parser->lexer);
3065       parser->lexer = NULL;
3066
3067       /* This file might have been a context that's implicitly extern
3068          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
3069       if (parser->implicit_extern_c)
3070         {
3071           pop_lang_context ();
3072           parser->implicit_extern_c = false;
3073         }
3074
3075       /* Finish up.  */
3076       finish_translation_unit ();
3077
3078       success = true;
3079     }
3080   else
3081     {
3082       cp_parser_error (parser, "expected declaration");
3083       success = false;
3084     }
3085
3086   /* Make sure the declarator obstack was fully cleaned up.  */
3087   gcc_assert (obstack_next_free (&declarator_obstack)
3088               == declarator_obstack_base);
3089
3090   /* All went well.  */
3091   return success;
3092 }
3093
3094 /* Expressions [gram.expr] */
3095
3096 /* Parse a primary-expression.
3097
3098    primary-expression:
3099      literal
3100      this
3101      ( expression )
3102      id-expression
3103
3104    GNU Extensions:
3105
3106    primary-expression:
3107      ( compound-statement )
3108      __builtin_va_arg ( assignment-expression , type-id )
3109      __builtin_offsetof ( type-id , offsetof-expression )
3110
3111    C++ Extensions:
3112      __has_nothrow_assign ( type-id )   
3113      __has_nothrow_constructor ( type-id )
3114      __has_nothrow_copy ( type-id )
3115      __has_trivial_assign ( type-id )   
3116      __has_trivial_constructor ( type-id )
3117      __has_trivial_copy ( type-id )
3118      __has_trivial_destructor ( type-id )
3119      __has_virtual_destructor ( type-id )     
3120      __is_abstract ( type-id )
3121      __is_base_of ( type-id , type-id )
3122      __is_class ( type-id )
3123      __is_convertible_to ( type-id , type-id )     
3124      __is_empty ( type-id )
3125      __is_enum ( type-id )
3126      __is_pod ( type-id )
3127      __is_polymorphic ( type-id )
3128      __is_union ( type-id )
3129
3130    Objective-C++ Extension:
3131
3132    primary-expression:
3133      objc-expression
3134
3135    literal:
3136      __null
3137
3138    ADDRESS_P is true iff this expression was immediately preceded by
3139    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3140    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3141    true iff this expression is a template argument.
3142
3143    Returns a representation of the expression.  Upon return, *IDK
3144    indicates what kind of id-expression (if any) was present.  */
3145
3146 static tree
3147 cp_parser_primary_expression (cp_parser *parser,
3148                               bool address_p,
3149                               bool cast_p,
3150                               bool template_arg_p,
3151                               cp_id_kind *idk)
3152 {
3153   cp_token *token = NULL;
3154
3155   /* Assume the primary expression is not an id-expression.  */
3156   *idk = CP_ID_KIND_NONE;
3157
3158   /* Peek at the next token.  */
3159   token = cp_lexer_peek_token (parser->lexer);
3160   switch (token->type)
3161     {
3162       /* literal:
3163            integer-literal
3164            character-literal
3165            floating-literal
3166            string-literal
3167            boolean-literal  */
3168     case CPP_CHAR:
3169     case CPP_CHAR16:
3170     case CPP_CHAR32:
3171     case CPP_WCHAR:
3172     case CPP_NUMBER:
3173       token = cp_lexer_consume_token (parser->lexer);
3174       if (TREE_CODE (token->u.value) == FIXED_CST)
3175         {
3176           error_at (token->location,
3177                     "fixed-point types not supported in C++");
3178           return error_mark_node;
3179         }
3180       /* Floating-point literals are only allowed in an integral
3181          constant expression if they are cast to an integral or
3182          enumeration type.  */
3183       if (TREE_CODE (token->u.value) == REAL_CST
3184           && parser->integral_constant_expression_p
3185           && pedantic)
3186         {
3187           /* CAST_P will be set even in invalid code like "int(2.7 +
3188              ...)".   Therefore, we have to check that the next token
3189              is sure to end the cast.  */
3190           if (cast_p)
3191             {
3192               cp_token *next_token;
3193
3194               next_token = cp_lexer_peek_token (parser->lexer);
3195               if (/* The comma at the end of an
3196                      enumerator-definition.  */
3197                   next_token->type != CPP_COMMA
3198                   /* The curly brace at the end of an enum-specifier.  */
3199                   && next_token->type != CPP_CLOSE_BRACE
3200                   /* The end of a statement.  */
3201                   && next_token->type != CPP_SEMICOLON
3202                   /* The end of the cast-expression.  */
3203                   && next_token->type != CPP_CLOSE_PAREN
3204                   /* The end of an array bound.  */
3205                   && next_token->type != CPP_CLOSE_SQUARE
3206                   /* The closing ">" in a template-argument-list.  */
3207                   && (next_token->type != CPP_GREATER
3208                       || parser->greater_than_is_operator_p)
3209                   /* C++0x only: A ">>" treated like two ">" tokens,
3210                      in a template-argument-list.  */
3211                   && (next_token->type != CPP_RSHIFT
3212                       || (cxx_dialect == cxx98)
3213                       || parser->greater_than_is_operator_p))
3214                 cast_p = false;
3215             }
3216
3217           /* If we are within a cast, then the constraint that the
3218              cast is to an integral or enumeration type will be
3219              checked at that point.  If we are not within a cast, then
3220              this code is invalid.  */
3221           if (!cast_p)
3222             cp_parser_non_integral_constant_expression
3223               (parser, "floating-point literal");
3224         }
3225       return token->u.value;
3226
3227     case CPP_STRING:
3228     case CPP_STRING16:
3229     case CPP_STRING32:
3230     case CPP_WSTRING:
3231       /* ??? Should wide strings be allowed when parser->translate_strings_p
3232          is false (i.e. in attributes)?  If not, we can kill the third
3233          argument to cp_parser_string_literal.  */
3234       return cp_parser_string_literal (parser,
3235                                        parser->translate_strings_p,
3236                                        true);
3237
3238     case CPP_OPEN_PAREN:
3239       {
3240         tree expr;
3241         bool saved_greater_than_is_operator_p;
3242
3243         /* Consume the `('.  */
3244         cp_lexer_consume_token (parser->lexer);
3245         /* Within a parenthesized expression, a `>' token is always
3246            the greater-than operator.  */
3247         saved_greater_than_is_operator_p
3248           = parser->greater_than_is_operator_p;
3249         parser->greater_than_is_operator_p = true;
3250         /* If we see `( { ' then we are looking at the beginning of
3251            a GNU statement-expression.  */
3252         if (cp_parser_allow_gnu_extensions_p (parser)
3253             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3254           {
3255             /* Statement-expressions are not allowed by the standard.  */
3256             pedwarn (token->location, OPT_pedantic, 
3257                      "ISO C++ forbids braced-groups within expressions");
3258
3259             /* And they're not allowed outside of a function-body; you
3260                cannot, for example, write:
3261
3262                  int i = ({ int j = 3; j + 1; });
3263
3264                at class or namespace scope.  */
3265             if (!parser->in_function_body
3266                 || parser->in_template_argument_list_p)
3267               {
3268                 error_at (token->location,
3269                           "statement-expressions are not allowed outside "
3270                           "functions nor in template-argument lists");
3271                 cp_parser_skip_to_end_of_block_or_statement (parser);
3272                 expr = error_mark_node;
3273               }
3274             else
3275               {
3276                 /* Start the statement-expression.  */
3277                 expr = begin_stmt_expr ();
3278                 /* Parse the compound-statement.  */
3279                 cp_parser_compound_statement (parser, expr, false);
3280                 /* Finish up.  */
3281                 expr = finish_stmt_expr (expr, false);
3282               }
3283           }
3284         else
3285           {
3286             /* Parse the parenthesized expression.  */
3287             expr = cp_parser_expression (parser, cast_p, idk);
3288             /* Let the front end know that this expression was
3289                enclosed in parentheses. This matters in case, for
3290                example, the expression is of the form `A::B', since
3291                `&A::B' might be a pointer-to-member, but `&(A::B)' is
3292                not.  */
3293             finish_parenthesized_expr (expr);
3294           }
3295         /* The `>' token might be the end of a template-id or
3296            template-parameter-list now.  */
3297         parser->greater_than_is_operator_p
3298           = saved_greater_than_is_operator_p;
3299         /* Consume the `)'.  */
3300         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
3301           cp_parser_skip_to_end_of_statement (parser);
3302
3303         return expr;
3304       }
3305
3306     case CPP_OPEN_SQUARE:
3307       if (c_dialect_objc ())
3308         /* We have an Objective-C++ message. */
3309         return cp_parser_objc_expression (parser);
3310       maybe_warn_cpp0x ("lambda expressions");
3311       return cp_parser_lambda_expression (parser);
3312
3313     case CPP_OBJC_STRING:
3314       if (c_dialect_objc ())
3315         /* We have an Objective-C++ string literal. */
3316         return cp_parser_objc_expression (parser);
3317       cp_parser_error (parser, "expected primary-expression");
3318       return error_mark_node;
3319
3320     case CPP_KEYWORD:
3321       switch (token->keyword)
3322         {
3323           /* These two are the boolean literals.  */
3324         case RID_TRUE:
3325           cp_lexer_consume_token (parser->lexer);
3326           return boolean_true_node;
3327         case RID_FALSE:
3328           cp_lexer_consume_token (parser->lexer);
3329           return boolean_false_node;
3330
3331           /* The `__null' literal.  */
3332         case RID_NULL:
3333           cp_lexer_consume_token (parser->lexer);
3334           return null_node;
3335
3336           /* Recognize the `this' keyword.  */
3337         case RID_THIS:
3338           cp_lexer_consume_token (parser->lexer);
3339           if (parser->local_variables_forbidden_p)
3340             {
3341               error_at (token->location,
3342                         "%<this%> may not be used in this context");
3343               return error_mark_node;
3344             }
3345           /* Pointers cannot appear in constant-expressions.  */
3346           if (cp_parser_non_integral_constant_expression (parser, "%<this%>"))
3347             return error_mark_node;
3348           return finish_this_expr ();
3349
3350           /* The `operator' keyword can be the beginning of an
3351              id-expression.  */
3352         case RID_OPERATOR:
3353           goto id_expression;
3354
3355         case RID_FUNCTION_NAME:
3356         case RID_PRETTY_FUNCTION_NAME:
3357         case RID_C99_FUNCTION_NAME:
3358           {
3359             const char *name;
3360
3361             /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3362                __func__ are the names of variables -- but they are
3363                treated specially.  Therefore, they are handled here,
3364                rather than relying on the generic id-expression logic
3365                below.  Grammatically, these names are id-expressions.
3366
3367                Consume the token.  */
3368             token = cp_lexer_consume_token (parser->lexer);
3369
3370             switch (token->keyword)
3371               {
3372               case RID_FUNCTION_NAME:
3373                 name = "%<__FUNCTION__%>";
3374                 break;
3375               case RID_PRETTY_FUNCTION_NAME:
3376                 name = "%<__PRETTY_FUNCTION__%>";
3377                 break;
3378               case RID_C99_FUNCTION_NAME:
3379                 name = "%<__func__%>";
3380                 break;
3381               default:
3382                 gcc_unreachable ();
3383               }
3384
3385             if (cp_parser_non_integral_constant_expression (parser, name))
3386               return error_mark_node;
3387
3388             /* Look up the name.  */
3389             return finish_fname (token->u.value);
3390           }
3391
3392         case RID_VA_ARG:
3393           {
3394             tree expression;
3395             tree type;
3396
3397             /* The `__builtin_va_arg' construct is used to handle
3398                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3399             cp_lexer_consume_token (parser->lexer);
3400             /* Look for the opening `('.  */
3401             cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
3402             /* Now, parse the assignment-expression.  */
3403             expression = cp_parser_assignment_expression (parser,
3404                                                           /*cast_p=*/false, NULL);
3405             /* Look for the `,'.  */
3406             cp_parser_require (parser, CPP_COMMA, "%<,%>");
3407             /* Parse the type-id.  */
3408             type = cp_parser_type_id (parser);
3409             /* Look for the closing `)'.  */
3410             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
3411             /* Using `va_arg' in a constant-expression is not
3412                allowed.  */
3413             if (cp_parser_non_integral_constant_expression (parser,
3414                                                             "%<va_arg%>"))
3415               return error_mark_node;
3416             return build_x_va_arg (expression, type);
3417           }
3418
3419         case RID_OFFSETOF:
3420           return cp_parser_builtin_offsetof (parser);
3421
3422         case RID_HAS_NOTHROW_ASSIGN:
3423         case RID_HAS_NOTHROW_CONSTRUCTOR:
3424         case RID_HAS_NOTHROW_COPY:        
3425         case RID_HAS_TRIVIAL_ASSIGN:
3426         case RID_HAS_TRIVIAL_CONSTRUCTOR:
3427         case RID_HAS_TRIVIAL_COPY:        
3428         case RID_HAS_TRIVIAL_DESTRUCTOR:
3429         case RID_HAS_VIRTUAL_DESTRUCTOR:
3430         case RID_IS_ABSTRACT:
3431         case RID_IS_BASE_OF:
3432         case RID_IS_CLASS:
3433         case RID_IS_CONVERTIBLE_TO:
3434         case RID_IS_EMPTY:
3435         case RID_IS_ENUM:
3436         case RID_IS_POD:
3437         case RID_IS_POLYMORPHIC:
3438         case RID_IS_STD_LAYOUT:
3439         case RID_IS_TRIVIAL:
3440         case RID_IS_UNION:
3441           return cp_parser_trait_expr (parser, token->keyword);
3442
3443         /* Objective-C++ expressions.  */
3444         case RID_AT_ENCODE:
3445         case RID_AT_PROTOCOL:
3446         case RID_AT_SELECTOR:
3447           return cp_parser_objc_expression (parser);
3448
3449         default:
3450           cp_parser_error (parser, "expected primary-expression");
3451           return error_mark_node;
3452         }
3453
3454       /* An id-expression can start with either an identifier, a
3455          `::' as the beginning of a qualified-id, or the "operator"
3456          keyword.  */
3457     case CPP_NAME:
3458     case CPP_SCOPE:
3459     case CPP_TEMPLATE_ID:
3460     case CPP_NESTED_NAME_SPECIFIER:
3461       {
3462         tree id_expression;
3463         tree decl;
3464         const char *error_msg;
3465         bool template_p;
3466         bool done;
3467         cp_token *id_expr_token;
3468
3469       id_expression:
3470         /* Parse the id-expression.  */
3471         id_expression
3472           = cp_parser_id_expression (parser,
3473                                      /*template_keyword_p=*/false,
3474                                      /*check_dependency_p=*/true,
3475                                      &template_p,
3476                                      /*declarator_p=*/false,
3477                                      /*optional_p=*/false);
3478         if (id_expression == error_mark_node)
3479           return error_mark_node;
3480         id_expr_token = token;
3481         token = cp_lexer_peek_token (parser->lexer);
3482         done = (token->type != CPP_OPEN_SQUARE
3483                 && token->type != CPP_OPEN_PAREN
3484                 && token->type != CPP_DOT
3485                 && token->type != CPP_DEREF
3486                 && token->type != CPP_PLUS_PLUS
3487                 && token->type != CPP_MINUS_MINUS);
3488         /* If we have a template-id, then no further lookup is
3489            required.  If the template-id was for a template-class, we
3490            will sometimes have a TYPE_DECL at this point.  */
3491         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3492                  || TREE_CODE (id_expression) == TYPE_DECL)
3493           decl = id_expression;
3494         /* Look up the name.  */
3495         else
3496           {
3497             tree ambiguous_decls;
3498
3499             decl = cp_parser_lookup_name (parser, id_expression,
3500                                           none_type,
3501                                           template_p,
3502                                           /*is_namespace=*/false,
3503                                           /*check_dependency=*/true,
3504                                           &ambiguous_decls,
3505                                           id_expr_token->location);
3506             /* If the lookup was ambiguous, an error will already have
3507                been issued.  */
3508             if (ambiguous_decls)
3509               return error_mark_node;
3510
3511             /* In Objective-C++, an instance variable (ivar) may be preferred
3512                to whatever cp_parser_lookup_name() found.  */
3513             decl = objc_lookup_ivar (decl, id_expression);
3514
3515             /* If name lookup gives us a SCOPE_REF, then the
3516                qualifying scope was dependent.  */
3517             if (TREE_CODE (decl) == SCOPE_REF)
3518               {
3519                 /* At this point, we do not know if DECL is a valid
3520                    integral constant expression.  We assume that it is
3521                    in fact such an expression, so that code like:
3522
3523                       template <int N> struct A {
3524                         int a[B<N>::i];
3525                       };
3526                      
3527                    is accepted.  At template-instantiation time, we
3528                    will check that B<N>::i is actually a constant.  */
3529                 return decl;
3530               }
3531             /* Check to see if DECL is a local variable in a context
3532                where that is forbidden.  */
3533             if (parser->local_variables_forbidden_p
3534                 && local_variable_p (decl))
3535               {
3536                 /* It might be that we only found DECL because we are
3537                    trying to be generous with pre-ISO scoping rules.
3538                    For example, consider:
3539
3540                      int i;
3541                      void g() {
3542                        for (int i = 0; i < 10; ++i) {}
3543                        extern void f(int j = i);
3544                      }
3545
3546                    Here, name look up will originally find the out
3547                    of scope `i'.  We need to issue a warning message,
3548                    but then use the global `i'.  */
3549                 decl = check_for_out_of_scope_variable (decl);
3550                 if (local_variable_p (decl))
3551                   {
3552                     error_at (id_expr_token->location,
3553                               "local variable %qD may not appear in this context",
3554                               decl);
3555                     return error_mark_node;
3556                   }
3557               }
3558           }
3559
3560         decl = (finish_id_expression
3561                 (id_expression, decl, parser->scope,
3562                  idk,
3563                  parser->integral_constant_expression_p,
3564                  parser->allow_non_integral_constant_expression_p,
3565                  &parser->non_integral_constant_expression_p,
3566                  template_p, done, address_p,
3567                  template_arg_p,
3568                  &error_msg,
3569                  id_expr_token->location));
3570         if (error_msg)
3571           cp_parser_error (parser, error_msg);
3572         return decl;
3573       }
3574
3575       /* Anything else is an error.  */
3576     default:
3577       cp_parser_error (parser, "expected primary-expression");
3578       return error_mark_node;
3579     }
3580 }
3581
3582 /* Parse an id-expression.
3583
3584    id-expression:
3585      unqualified-id
3586      qualified-id
3587
3588    qualified-id:
3589      :: [opt] nested-name-specifier template [opt] unqualified-id
3590      :: identifier
3591      :: operator-function-id
3592      :: template-id
3593
3594    Return a representation of the unqualified portion of the
3595    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3596    a `::' or nested-name-specifier.
3597
3598    Often, if the id-expression was a qualified-id, the caller will
3599    want to make a SCOPE_REF to represent the qualified-id.  This
3600    function does not do this in order to avoid wastefully creating
3601    SCOPE_REFs when they are not required.
3602
3603    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3604    `template' keyword.
3605
3606    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3607    uninstantiated templates.
3608
3609    If *TEMPLATE_P is non-NULL, it is set to true iff the
3610    `template' keyword is used to explicitly indicate that the entity
3611    named is a template.
3612
3613    If DECLARATOR_P is true, the id-expression is appearing as part of
3614    a declarator, rather than as part of an expression.  */
3615
3616 static tree
3617 cp_parser_id_expression (cp_parser *parser,
3618                          bool template_keyword_p,
3619                          bool check_dependency_p,
3620                          bool *template_p,
3621                          bool declarator_p,
3622                          bool optional_p)
3623 {
3624   bool global_scope_p;
3625   bool nested_name_specifier_p;
3626
3627   /* Assume the `template' keyword was not used.  */
3628   if (template_p)
3629     *template_p = template_keyword_p;
3630
3631   /* Look for the optional `::' operator.  */
3632   global_scope_p
3633     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3634        != NULL_TREE);
3635   /* Look for the optional nested-name-specifier.  */
3636   nested_name_specifier_p
3637     = (cp_parser_nested_name_specifier_opt (parser,
3638                                             /*typename_keyword_p=*/false,
3639                                             check_dependency_p,
3640                                             /*type_p=*/false,
3641                                             declarator_p)
3642        != NULL_TREE);
3643   /* If there is a nested-name-specifier, then we are looking at
3644      the first qualified-id production.  */
3645   if (nested_name_specifier_p)
3646     {
3647       tree saved_scope;
3648       tree saved_object_scope;
3649       tree saved_qualifying_scope;
3650       tree unqualified_id;
3651       bool is_template;
3652
3653       /* See if the next token is the `template' keyword.  */
3654       if (!template_p)
3655         template_p = &is_template;
3656       *template_p = cp_parser_optional_template_keyword (parser);
3657       /* Name lookup we do during the processing of the
3658          unqualified-id might obliterate SCOPE.  */
3659       saved_scope = parser->scope;
3660       saved_object_scope = parser->object_scope;
3661       saved_qualifying_scope = parser->qualifying_scope;
3662       /* Process the final unqualified-id.  */
3663       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3664                                                  check_dependency_p,
3665                                                  declarator_p,
3666                                                  /*optional_p=*/false);
3667       /* Restore the SAVED_SCOPE for our caller.  */
3668       parser->scope = saved_scope;
3669       parser->object_scope = saved_object_scope;
3670       parser->qualifying_scope = saved_qualifying_scope;
3671
3672       return unqualified_id;
3673     }
3674   /* Otherwise, if we are in global scope, then we are looking at one
3675      of the other qualified-id productions.  */
3676   else if (global_scope_p)
3677     {
3678       cp_token *token;
3679       tree id;
3680
3681       /* Peek at the next token.  */
3682       token = cp_lexer_peek_token (parser->lexer);
3683
3684       /* If it's an identifier, and the next token is not a "<", then
3685          we can avoid the template-id case.  This is an optimization
3686          for this common case.  */
3687       if (token->type == CPP_NAME
3688           && !cp_parser_nth_token_starts_template_argument_list_p
3689                (parser, 2))
3690         return cp_parser_identifier (parser);
3691
3692       cp_parser_parse_tentatively (parser);
3693       /* Try a template-id.  */
3694       id = cp_parser_template_id (parser,
3695                                   /*template_keyword_p=*/false,
3696                                   /*check_dependency_p=*/true,
3697                                   declarator_p);
3698       /* If that worked, we're done.  */
3699       if (cp_parser_parse_definitely (parser))
3700         return id;
3701
3702       /* Peek at the next token.  (Changes in the token buffer may
3703          have invalidated the pointer obtained above.)  */
3704       token = cp_lexer_peek_token (parser->lexer);
3705
3706       switch (token->type)
3707         {
3708         case CPP_NAME:
3709           return cp_parser_identifier (parser);
3710
3711         case CPP_KEYWORD:
3712           if (token->keyword == RID_OPERATOR)
3713             return cp_parser_operator_function_id (parser);
3714           /* Fall through.  */
3715
3716         default:
3717           cp_parser_error (parser, "expected id-expression");
3718           return error_mark_node;
3719         }
3720     }
3721   else
3722     return cp_parser_unqualified_id (parser, template_keyword_p,
3723                                      /*check_dependency_p=*/true,
3724                                      declarator_p,
3725                                      optional_p);
3726 }
3727
3728 /* Parse an unqualified-id.
3729
3730    unqualified-id:
3731      identifier
3732      operator-function-id
3733      conversion-function-id
3734      ~ class-name
3735      template-id
3736
3737    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3738    keyword, in a construct like `A::template ...'.
3739
3740    Returns a representation of unqualified-id.  For the `identifier'
3741    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3742    production a BIT_NOT_EXPR is returned; the operand of the
3743    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3744    other productions, see the documentation accompanying the
3745    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3746    names are looked up in uninstantiated templates.  If DECLARATOR_P
3747    is true, the unqualified-id is appearing as part of a declarator,
3748    rather than as part of an expression.  */
3749
3750 static tree
3751 cp_parser_unqualified_id (cp_parser* parser,
3752                           bool template_keyword_p,
3753                           bool check_dependency_p,
3754                           bool declarator_p,
3755                           bool optional_p)
3756 {
3757   cp_token *token;
3758
3759   /* Peek at the next token.  */
3760   token = cp_lexer_peek_token (parser->lexer);
3761
3762   switch (token->type)
3763     {
3764     case CPP_NAME:
3765       {
3766         tree id;
3767
3768         /* We don't know yet whether or not this will be a
3769            template-id.  */
3770         cp_parser_parse_tentatively (parser);
3771         /* Try a template-id.  */
3772         id = cp_parser_template_id (parser, template_keyword_p,
3773                                     check_dependency_p,
3774                                     declarator_p);
3775         /* If it worked, we're done.  */
3776         if (cp_parser_parse_definitely (parser))
3777           return id;
3778         /* Otherwise, it's an ordinary identifier.  */
3779         return cp_parser_identifier (parser);
3780       }
3781
3782     case CPP_TEMPLATE_ID:
3783       return cp_parser_template_id (parser, template_keyword_p,
3784                                     check_dependency_p,
3785                                     declarator_p);
3786
3787     case CPP_COMPL:
3788       {
3789         tree type_decl;
3790         tree qualifying_scope;
3791         tree object_scope;
3792         tree scope;
3793         bool done;
3794
3795         /* Consume the `~' token.  */
3796         cp_lexer_consume_token (parser->lexer);
3797         /* Parse the class-name.  The standard, as written, seems to
3798            say that:
3799
3800              template <typename T> struct S { ~S (); };
3801              template <typename T> S<T>::~S() {}
3802
3803            is invalid, since `~' must be followed by a class-name, but
3804            `S<T>' is dependent, and so not known to be a class.
3805            That's not right; we need to look in uninstantiated
3806            templates.  A further complication arises from:
3807
3808              template <typename T> void f(T t) {
3809                t.T::~T();
3810              }
3811
3812            Here, it is not possible to look up `T' in the scope of `T'
3813            itself.  We must look in both the current scope, and the
3814            scope of the containing complete expression.
3815
3816            Yet another issue is:
3817
3818              struct S {
3819                int S;
3820                ~S();
3821              };
3822
3823              S::~S() {}
3824
3825            The standard does not seem to say that the `S' in `~S'
3826            should refer to the type `S' and not the data member
3827            `S::S'.  */
3828
3829         /* DR 244 says that we look up the name after the "~" in the
3830            same scope as we looked up the qualifying name.  That idea
3831            isn't fully worked out; it's more complicated than that.  */
3832         scope = parser->scope;
3833         object_scope = parser->object_scope;
3834         qualifying_scope = parser->qualifying_scope;
3835
3836         /* Check for invalid scopes.  */
3837         if (scope == error_mark_node)
3838           {
3839             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3840               cp_lexer_consume_token (parser->lexer);
3841             return error_mark_node;
3842           }
3843         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3844           {
3845             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3846               error_at (token->location,
3847                         "scope %qT before %<~%> is not a class-name",
3848                         scope);
3849             cp_parser_simulate_error (parser);
3850             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3851               cp_lexer_consume_token (parser->lexer);
3852             return error_mark_node;
3853           }
3854         gcc_assert (!scope || TYPE_P (scope));
3855
3856         /* If the name is of the form "X::~X" it's OK.  */
3857         token = cp_lexer_peek_token (parser->lexer);
3858         if (scope
3859             && token->type == CPP_NAME
3860             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3861                 == CPP_OPEN_PAREN)
3862             && constructor_name_p (token->u.value, scope))
3863           {
3864             cp_lexer_consume_token (parser->lexer);
3865             return build_nt (BIT_NOT_EXPR, scope);
3866           }
3867
3868         /* If there was an explicit qualification (S::~T), first look
3869            in the scope given by the qualification (i.e., S).  */
3870         done = false;
3871         type_decl = NULL_TREE;
3872         if (scope)
3873           {
3874             cp_parser_parse_tentatively (parser);
3875             type_decl = cp_parser_class_name (parser,
3876                                               /*typename_keyword_p=*/false,
3877                                               /*template_keyword_p=*/false,
3878                                               none_type,
3879                                               /*check_dependency=*/false,
3880                                               /*class_head_p=*/false,
3881                                               declarator_p);
3882             if (cp_parser_parse_definitely (parser))
3883               done = true;
3884           }
3885         /* In "N::S::~S", look in "N" as well.  */
3886         if (!done && scope && qualifying_scope)
3887           {
3888             cp_parser_parse_tentatively (parser);
3889             parser->scope = qualifying_scope;
3890             parser->object_scope = NULL_TREE;
3891             parser->qualifying_scope = NULL_TREE;
3892             type_decl
3893               = cp_parser_class_name (parser,
3894                                       /*typename_keyword_p=*/false,
3895                                       /*template_keyword_p=*/false,
3896                                       none_type,
3897                                       /*check_dependency=*/false,
3898                                       /*class_head_p=*/false,
3899                                       declarator_p);
3900             if (cp_parser_parse_definitely (parser))
3901               done = true;
3902           }
3903         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3904         else if (!done && object_scope)
3905           {
3906             cp_parser_parse_tentatively (parser);
3907             parser->scope = object_scope;
3908             parser->object_scope = NULL_TREE;
3909             parser->qualifying_scope = NULL_TREE;
3910             type_decl
3911               = cp_parser_class_name (parser,
3912                                       /*typename_keyword_p=*/false,
3913                                       /*template_keyword_p=*/false,
3914                                       none_type,
3915                                       /*check_dependency=*/false,
3916                                       /*class_head_p=*/false,
3917                                       declarator_p);
3918             if (cp_parser_parse_definitely (parser))
3919               done = true;
3920           }
3921         /* Look in the surrounding context.  */
3922         if (!done)
3923           {
3924             parser->scope = NULL_TREE;
3925             parser->object_scope = NULL_TREE;
3926             parser->qualifying_scope = NULL_TREE;
3927             if (processing_template_decl)
3928               cp_parser_parse_tentatively (parser);
3929             type_decl
3930               = cp_parser_class_name (parser,
3931                                       /*typename_keyword_p=*/false,
3932                                       /*template_keyword_p=*/false,
3933                                       none_type,
3934                                       /*check_dependency=*/false,
3935                                       /*class_head_p=*/false,
3936                                       declarator_p);
3937             if (processing_template_decl
3938                 && ! cp_parser_parse_definitely (parser))
3939               {
3940                 /* We couldn't find a type with this name, so just accept
3941                    it and check for a match at instantiation time.  */
3942                 type_decl = cp_parser_identifier (parser);
3943                 if (type_decl != error_mark_node)
3944                   type_decl = build_nt (BIT_NOT_EXPR, type_decl);
3945                 return type_decl;
3946               }
3947           }
3948         /* If an error occurred, assume that the name of the
3949            destructor is the same as the name of the qualifying
3950            class.  That allows us to keep parsing after running
3951            into ill-formed destructor names.  */
3952         if (type_decl == error_mark_node && scope)
3953           return build_nt (BIT_NOT_EXPR, scope);
3954         else if (type_decl == error_mark_node)
3955           return error_mark_node;
3956
3957         /* Check that destructor name and scope match.  */
3958         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3959           {
3960             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3961               error_at (token->location,
3962                         "declaration of %<~%T%> as member of %qT",
3963                         type_decl, scope);
3964             cp_parser_simulate_error (parser);
3965             return error_mark_node;
3966           }
3967
3968         /* [class.dtor]
3969
3970            A typedef-name that names a class shall not be used as the
3971            identifier in the declarator for a destructor declaration.  */
3972         if (declarator_p
3973             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3974             && !DECL_SELF_REFERENCE_P (type_decl)
3975             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3976           error_at (token->location,
3977                     "typedef-name %qD used as destructor declarator",
3978                     type_decl);
3979
3980         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3981       }
3982
3983     case CPP_KEYWORD:
3984       if (token->keyword == RID_OPERATOR)
3985         {
3986           tree id;
3987
3988           /* This could be a template-id, so we try that first.  */
3989           cp_parser_parse_tentatively (parser);
3990           /* Try a template-id.  */
3991           id = cp_parser_template_id (parser, template_keyword_p,
3992                                       /*check_dependency_p=*/true,
3993                                       declarator_p);
3994           /* If that worked, we're done.  */
3995           if (cp_parser_parse_definitely (parser))
3996             return id;
3997           /* We still don't know whether we're looking at an
3998              operator-function-id or a conversion-function-id.  */
3999           cp_parser_parse_tentatively (parser);
4000           /* Try an operator-function-id.  */
4001           id = cp_parser_operator_function_id (parser);
4002           /* If that didn't work, try a conversion-function-id.  */
4003           if (!cp_parser_parse_definitely (parser))
4004             id = cp_parser_conversion_function_id (parser);
4005
4006           return id;
4007         }
4008       /* Fall through.  */
4009
4010     default:
4011       if (optional_p)
4012         return NULL_TREE;
4013       cp_parser_error (parser, "expected unqualified-id");
4014       return error_mark_node;
4015     }
4016 }
4017
4018 /* Parse an (optional) nested-name-specifier.
4019
4020    nested-name-specifier: [C++98]
4021      class-or-namespace-name :: nested-name-specifier [opt]
4022      class-or-namespace-name :: template nested-name-specifier [opt]
4023
4024    nested-name-specifier: [C++0x]
4025      type-name ::
4026      namespace-name ::
4027      nested-name-specifier identifier ::
4028      nested-name-specifier template [opt] simple-template-id ::
4029
4030    PARSER->SCOPE should be set appropriately before this function is
4031    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
4032    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
4033    in name lookups.
4034
4035    Sets PARSER->SCOPE to the class (TYPE) or namespace
4036    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
4037    it unchanged if there is no nested-name-specifier.  Returns the new
4038    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
4039
4040    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
4041    part of a declaration and/or decl-specifier.  */
4042
4043 static tree
4044 cp_parser_nested_name_specifier_opt (cp_parser *parser,
4045                                      bool typename_keyword_p,
4046                                      bool check_dependency_p,
4047                                      bool type_p,
4048                                      bool is_declaration)
4049 {
4050   bool success = false;
4051   cp_token_position start = 0;
4052   cp_token *token;
4053
4054   /* Remember where the nested-name-specifier starts.  */
4055   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4056     {
4057       start = cp_lexer_token_position (parser->lexer, false);
4058       push_deferring_access_checks (dk_deferred);
4059     }
4060
4061   while (true)
4062     {
4063       tree new_scope;
4064       tree old_scope;
4065       tree saved_qualifying_scope;
4066       bool template_keyword_p;
4067
4068       /* Spot cases that cannot be the beginning of a
4069          nested-name-specifier.  */
4070       token = cp_lexer_peek_token (parser->lexer);
4071
4072       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
4073          the already parsed nested-name-specifier.  */
4074       if (token->type == CPP_NESTED_NAME_SPECIFIER)
4075         {
4076           /* Grab the nested-name-specifier and continue the loop.  */
4077           cp_parser_pre_parsed_nested_name_specifier (parser);
4078           /* If we originally encountered this nested-name-specifier
4079              with IS_DECLARATION set to false, we will not have
4080              resolved TYPENAME_TYPEs, so we must do so here.  */
4081           if (is_declaration
4082               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4083             {
4084               new_scope = resolve_typename_type (parser->scope,
4085                                                  /*only_current_p=*/false);
4086               if (TREE_CODE (new_scope) != TYPENAME_TYPE)
4087                 parser->scope = new_scope;
4088             }
4089           success = true;
4090           continue;
4091         }
4092
4093       /* Spot cases that cannot be the beginning of a
4094          nested-name-specifier.  On the second and subsequent times
4095          through the loop, we look for the `template' keyword.  */
4096       if (success && token->keyword == RID_TEMPLATE)
4097         ;
4098       /* A template-id can start a nested-name-specifier.  */
4099       else if (token->type == CPP_TEMPLATE_ID)
4100         ;
4101       else
4102         {
4103           /* If the next token is not an identifier, then it is
4104              definitely not a type-name or namespace-name.  */
4105           if (token->type != CPP_NAME)
4106             break;
4107           /* If the following token is neither a `<' (to begin a
4108              template-id), nor a `::', then we are not looking at a
4109              nested-name-specifier.  */
4110           token = cp_lexer_peek_nth_token (parser->lexer, 2);
4111           if (token->type != CPP_SCOPE
4112               && !cp_parser_nth_token_starts_template_argument_list_p
4113                   (parser, 2))
4114             break;
4115         }
4116
4117       /* The nested-name-specifier is optional, so we parse
4118          tentatively.  */
4119       cp_parser_parse_tentatively (parser);
4120
4121       /* Look for the optional `template' keyword, if this isn't the
4122          first time through the loop.  */
4123       if (success)
4124         template_keyword_p = cp_parser_optional_template_keyword (parser);
4125       else
4126         template_keyword_p = false;
4127
4128       /* Save the old scope since the name lookup we are about to do
4129          might destroy it.  */
4130       old_scope = parser->scope;
4131       saved_qualifying_scope = parser->qualifying_scope;
4132       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4133          look up names in "X<T>::I" in order to determine that "Y" is
4134          a template.  So, if we have a typename at this point, we make
4135          an effort to look through it.  */
4136       if (is_declaration
4137           && !typename_keyword_p
4138           && parser->scope
4139           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4140         parser->scope = resolve_typename_type (parser->scope,
4141                                                /*only_current_p=*/false);
4142       /* Parse the qualifying entity.  */
4143       new_scope
4144         = cp_parser_qualifying_entity (parser,
4145                                        typename_keyword_p,
4146                                        template_keyword_p,
4147                                        check_dependency_p,
4148                                        type_p,
4149                                        is_declaration);
4150       /* Look for the `::' token.  */
4151       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
4152
4153       /* If we found what we wanted, we keep going; otherwise, we're
4154          done.  */
4155       if (!cp_parser_parse_definitely (parser))
4156         {
4157           bool error_p = false;
4158
4159           /* Restore the OLD_SCOPE since it was valid before the
4160              failed attempt at finding the last
4161              class-or-namespace-name.  */
4162           parser->scope = old_scope;
4163           parser->qualifying_scope = saved_qualifying_scope;
4164           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4165             break;
4166           /* If the next token is an identifier, and the one after
4167              that is a `::', then any valid interpretation would have
4168              found a class-or-namespace-name.  */
4169           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
4170                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4171                      == CPP_SCOPE)
4172                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
4173                      != CPP_COMPL))
4174             {
4175               token = cp_lexer_consume_token (parser->lexer);
4176               if (!error_p)
4177                 {
4178                   if (!token->ambiguous_p)
4179                     {
4180                       tree decl;
4181                       tree ambiguous_decls;
4182
4183                       decl = cp_parser_lookup_name (parser, token->u.value,
4184                                                     none_type,
4185                                                     /*is_template=*/false,
4186                                                     /*is_namespace=*/false,
4187                                                     /*check_dependency=*/true,
4188                                                     &ambiguous_decls,
4189                                                     token->location);
4190                       if (TREE_CODE (decl) == TEMPLATE_DECL)
4191                         error_at (token->location,
4192                                   "%qD used without template parameters",
4193                                   decl);
4194                       else if (ambiguous_decls)
4195                         {
4196                           error_at (token->location,
4197                                     "reference to %qD is ambiguous",
4198                                     token->u.value);
4199                           print_candidates (ambiguous_decls);
4200                           decl = error_mark_node;
4201                         }
4202                       else
4203                         {
4204                           const char* msg = "is not a class or namespace";
4205                           if (cxx_dialect != cxx98)
4206                             msg = "is not a class, namespace, or enumeration";
4207                           cp_parser_name_lookup_error
4208                             (parser, token->u.value, decl, msg,
4209                              token->location);
4210                         }
4211                     }
4212                   parser->scope = error_mark_node;
4213                   error_p = true;
4214                   /* Treat this as a successful nested-name-specifier
4215                      due to:
4216
4217                      [basic.lookup.qual]
4218
4219                      If the name found is not a class-name (clause
4220                      _class_) or namespace-name (_namespace.def_), the
4221                      program is ill-formed.  */
4222                   success = true;
4223                 }
4224               cp_lexer_consume_token (parser->lexer);
4225             }
4226           break;
4227         }
4228       /* We've found one valid nested-name-specifier.  */
4229       success = true;
4230       /* Name lookup always gives us a DECL.  */
4231       if (TREE_CODE (new_scope) == TYPE_DECL)
4232         new_scope = TREE_TYPE (new_scope);
4233       /* Uses of "template" must be followed by actual templates.  */
4234       if (template_keyword_p
4235           && !(CLASS_TYPE_P (new_scope)
4236                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
4237                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
4238                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
4239           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
4240                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
4241                    == TEMPLATE_ID_EXPR)))
4242         permerror (input_location, TYPE_P (new_scope)
4243                    ? "%qT is not a template"
4244                    : "%qD is not a template",
4245                    new_scope);
4246       /* If it is a class scope, try to complete it; we are about to
4247          be looking up names inside the class.  */
4248       if (TYPE_P (new_scope)
4249           /* Since checking types for dependency can be expensive,
4250              avoid doing it if the type is already complete.  */
4251           && !COMPLETE_TYPE_P (new_scope)
4252           /* Do not try to complete dependent types.  */
4253           && !dependent_type_p (new_scope))
4254         {
4255           new_scope = complete_type (new_scope);
4256           /* If it is a typedef to current class, use the current
4257              class instead, as the typedef won't have any names inside
4258              it yet.  */
4259           if (!COMPLETE_TYPE_P (new_scope)
4260               && currently_open_class (new_scope))
4261             new_scope = TYPE_MAIN_VARIANT (new_scope);
4262         }
4263       /* Make sure we look in the right scope the next time through
4264          the loop.  */
4265       parser->scope = new_scope;
4266     }
4267
4268   /* If parsing tentatively, replace the sequence of tokens that makes
4269      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
4270      token.  That way, should we re-parse the token stream, we will
4271      not have to repeat the effort required to do the parse, nor will
4272      we issue duplicate error messages.  */
4273   if (success && start)
4274     {
4275       cp_token *token;
4276
4277       token = cp_lexer_token_at (parser->lexer, start);
4278       /* Reset the contents of the START token.  */
4279       token->type = CPP_NESTED_NAME_SPECIFIER;
4280       /* Retrieve any deferred checks.  Do not pop this access checks yet
4281          so the memory will not be reclaimed during token replacing below.  */
4282       token->u.tree_check_value = GGC_CNEW (struct tree_check);
4283       token->u.tree_check_value->value = parser->scope;
4284       token->u.tree_check_value->checks = get_deferred_access_checks ();
4285       token->u.tree_check_value->qualifying_scope =
4286         parser->qualifying_scope;
4287       token->keyword = RID_MAX;
4288
4289       /* Purge all subsequent tokens.  */
4290       cp_lexer_purge_tokens_after (parser->lexer, start);
4291     }
4292
4293   if (start)
4294     pop_to_parent_deferring_access_checks ();
4295
4296   return success ? parser->scope : NULL_TREE;
4297 }
4298
4299 /* Parse a nested-name-specifier.  See
4300    cp_parser_nested_name_specifier_opt for details.  This function
4301    behaves identically, except that it will an issue an error if no
4302    nested-name-specifier is present.  */
4303
4304 static tree
4305 cp_parser_nested_name_specifier (cp_parser *parser,
4306                                  bool typename_keyword_p,
4307                                  bool check_dependency_p,
4308                                  bool type_p,
4309                                  bool is_declaration)
4310 {
4311   tree scope;
4312
4313   /* Look for the nested-name-specifier.  */
4314   scope = cp_parser_nested_name_specifier_opt (parser,
4315                                                typename_keyword_p,
4316                                                check_dependency_p,
4317                                                type_p,
4318                                                is_declaration);
4319   /* If it was not present, issue an error message.  */
4320   if (!scope)
4321     {
4322       cp_parser_error (parser, "expected nested-name-specifier");
4323       parser->scope = NULL_TREE;
4324     }
4325
4326   return scope;
4327 }
4328
4329 /* Parse the qualifying entity in a nested-name-specifier. For C++98,
4330    this is either a class-name or a namespace-name (which corresponds
4331    to the class-or-namespace-name production in the grammar). For
4332    C++0x, it can also be a type-name that refers to an enumeration
4333    type.
4334
4335    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
4336    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
4337    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
4338    TYPE_P is TRUE iff the next name should be taken as a class-name,
4339    even the same name is declared to be another entity in the same
4340    scope.
4341
4342    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
4343    specified by the class-or-namespace-name.  If neither is found the
4344    ERROR_MARK_NODE is returned.  */
4345
4346 static tree
4347 cp_parser_qualifying_entity (cp_parser *parser,
4348                              bool typename_keyword_p,
4349                              bool template_keyword_p,
4350                              bool check_dependency_p,
4351                              bool type_p,
4352                              bool is_declaration)
4353 {
4354   tree saved_scope;
4355   tree saved_qualifying_scope;
4356   tree saved_object_scope;
4357   tree scope;
4358   bool only_class_p;
4359   bool successful_parse_p;
4360
4361   /* Before we try to parse the class-name, we must save away the
4362      current PARSER->SCOPE since cp_parser_class_name will destroy
4363      it.  */
4364   saved_scope = parser->scope;
4365   saved_qualifying_scope = parser->qualifying_scope;
4366   saved_object_scope = parser->object_scope;
4367   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4368      there is no need to look for a namespace-name.  */
4369   only_class_p = template_keyword_p 
4370     || (saved_scope && TYPE_P (saved_scope) && cxx_dialect == cxx98);
4371   if (!only_class_p)
4372     cp_parser_parse_tentatively (parser);
4373   scope = cp_parser_class_name (parser,
4374                                 typename_keyword_p,
4375                                 template_keyword_p,
4376                                 type_p ? class_type : none_type,
4377                                 check_dependency_p,
4378                                 /*class_head_p=*/false,
4379                                 is_declaration);
4380   successful_parse_p = only_class_p || cp_parser_parse_definitely (parser);
4381   /* If that didn't work and we're in C++0x mode, try for a type-name.  */
4382   if (!only_class_p 
4383       && cxx_dialect != cxx98
4384       && !successful_parse_p)
4385     {
4386       /* Restore the saved scope.  */
4387       parser->scope = saved_scope;
4388       parser->qualifying_scope = saved_qualifying_scope;
4389       parser->object_scope = saved_object_scope;
4390
4391       /* Parse tentatively.  */
4392       cp_parser_parse_tentatively (parser);
4393      
4394       /* Parse a typedef-name or enum-name.  */
4395       scope = cp_parser_nonclass_name (parser);
4396       successful_parse_p = cp_parser_parse_definitely (parser);
4397     }
4398   /* If that didn't work, try for a namespace-name.  */
4399   if (!only_class_p && !successful_parse_p)
4400     {
4401       /* Restore the saved scope.  */
4402       parser->scope = saved_scope;
4403       parser->qualifying_scope = saved_qualifying_scope;
4404       parser->object_scope = saved_object_scope;
4405       /* If we are not looking at an identifier followed by the scope
4406          resolution operator, then this is not part of a
4407          nested-name-specifier.  (Note that this function is only used
4408          to parse the components of a nested-name-specifier.)  */
4409       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4410           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4411         return error_mark_node;
4412       scope = cp_parser_namespace_name (parser);
4413     }
4414
4415   return scope;
4416 }
4417
4418 /* Parse a postfix-expression.
4419
4420    postfix-expression:
4421      primary-expression
4422      postfix-expression [ expression ]
4423      postfix-expression ( expression-list [opt] )
4424      simple-type-specifier ( expression-list [opt] )
4425      typename :: [opt] nested-name-specifier identifier
4426        ( expression-list [opt] )
4427      typename :: [opt] nested-name-specifier template [opt] template-id
4428        ( expression-list [opt] )
4429      postfix-expression . template [opt] id-expression
4430      postfix-expression -> template [opt] id-expression
4431      postfix-expression . pseudo-destructor-name
4432      postfix-expression -> pseudo-destructor-name
4433      postfix-expression ++
4434      postfix-expression --
4435      dynamic_cast < type-id > ( expression )
4436      static_cast < type-id > ( expression )
4437      reinterpret_cast < type-id > ( expression )
4438      const_cast < type-id > ( expression )
4439      typeid ( expression )
4440      typeid ( type-id )
4441
4442    GNU Extension:
4443
4444    postfix-expression:
4445      ( type-id ) { initializer-list , [opt] }
4446
4447    This extension is a GNU version of the C99 compound-literal
4448    construct.  (The C99 grammar uses `type-name' instead of `type-id',
4449    but they are essentially the same concept.)
4450
4451    If ADDRESS_P is true, the postfix expression is the operand of the
4452    `&' operator.  CAST_P is true if this expression is the target of a
4453    cast.
4454
4455    If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
4456    class member access expressions [expr.ref].
4457
4458    Returns a representation of the expression.  */
4459
4460 static tree
4461 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
4462                               bool member_access_only_p,
4463                               cp_id_kind * pidk_return)
4464 {
4465   cp_token *token;
4466   enum rid keyword;
4467   cp_id_kind idk = CP_ID_KIND_NONE;
4468   tree postfix_expression = NULL_TREE;
4469   bool is_member_access = false;
4470
4471   /* Peek at the next token.  */
4472   token = cp_lexer_peek_token (parser->lexer);
4473   /* Some of the productions are determined by keywords.  */
4474   keyword = token->keyword;
4475   switch (keyword)
4476     {
4477     case RID_DYNCAST:
4478     case RID_STATCAST:
4479     case RID_REINTCAST:
4480     case RID_CONSTCAST:
4481       {
4482         tree type;
4483         tree expression;
4484         const char *saved_message;
4485
4486         /* All of these can be handled in the same way from the point
4487            of view of parsing.  Begin by consuming the token
4488            identifying the cast.  */
4489         cp_lexer_consume_token (parser->lexer);
4490
4491         /* New types cannot be defined in the cast.  */
4492         saved_message = parser->type_definition_forbidden_message;
4493         parser->type_definition_forbidden_message
4494           = "types may not be defined in casts";
4495
4496         /* Look for the opening `<'.  */
4497         cp_parser_require (parser, CPP_LESS, "%<<%>");
4498         /* Parse the type to which we are casting.  */
4499         type = cp_parser_type_id (parser);
4500         /* Look for the closing `>'.  */
4501         cp_parser_require (parser, CPP_GREATER, "%<>%>");
4502         /* Restore the old message.  */
4503         parser->type_definition_forbidden_message = saved_message;
4504
4505         /* And the expression which is being cast.  */
4506         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
4507         expression = cp_parser_expression (parser, /*cast_p=*/true, & idk);
4508         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4509
4510         /* Only type conversions to integral or enumeration types
4511            can be used in constant-expressions.  */
4512         if (!cast_valid_in_integral_constant_expression_p (type)
4513             && (cp_parser_non_integral_constant_expression
4514                 (parser,
4515                  "a cast to a type other than an integral or "
4516                  "enumeration type")))
4517           return error_mark_node;
4518
4519         switch (keyword)
4520           {
4521           case RID_DYNCAST:
4522             postfix_expression
4523               = build_dynamic_cast (type, expression, tf_warning_or_error);
4524             break;
4525           case RID_STATCAST:
4526             postfix_expression
4527               = build_static_cast (type, expression, tf_warning_or_error);
4528             break;
4529           case RID_REINTCAST:
4530             postfix_expression
4531               = build_reinterpret_cast (type, expression, 
4532                                         tf_warning_or_error);
4533             break;
4534           case RID_CONSTCAST:
4535             postfix_expression
4536               = build_const_cast (type, expression, tf_warning_or_error);
4537             break;
4538           default:
4539             gcc_unreachable ();
4540           }
4541       }
4542       break;
4543
4544     case RID_TYPEID:
4545       {
4546         tree type;
4547         const char *saved_message;
4548         bool saved_in_type_id_in_expr_p;
4549
4550         /* Consume the `typeid' token.  */
4551         cp_lexer_consume_token (parser->lexer);
4552         /* Look for the `(' token.  */
4553         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
4554         /* Types cannot be defined in a `typeid' expression.  */
4555         saved_message = parser->type_definition_forbidden_message;
4556         parser->type_definition_forbidden_message
4557           = "types may not be defined in a %<typeid%> expression";
4558         /* We can't be sure yet whether we're looking at a type-id or an
4559            expression.  */
4560         cp_parser_parse_tentatively (parser);
4561         /* Try a type-id first.  */
4562         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4563         parser->in_type_id_in_expr_p = true;
4564         type = cp_parser_type_id (parser);
4565         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4566         /* Look for the `)' token.  Otherwise, we can't be sure that
4567            we're not looking at an expression: consider `typeid (int
4568            (3))', for example.  */
4569         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4570         /* If all went well, simply lookup the type-id.  */
4571         if (cp_parser_parse_definitely (parser))
4572           postfix_expression = get_typeid (type);
4573         /* Otherwise, fall back to the expression variant.  */
4574         else
4575           {
4576             tree expression;
4577
4578             /* Look for an expression.  */
4579             expression = cp_parser_expression (parser, /*cast_p=*/false, & idk);
4580             /* Compute its typeid.  */
4581             postfix_expression = build_typeid (expression);
4582             /* Look for the `)' token.  */
4583             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4584           }
4585         /* Restore the saved message.  */
4586         parser->type_definition_forbidden_message = saved_message;
4587         /* `typeid' may not appear in an integral constant expression.  */
4588         if (cp_parser_non_integral_constant_expression(parser,
4589                                                        "%<typeid%> operator"))
4590           return error_mark_node;
4591       }
4592       break;
4593
4594     case RID_TYPENAME:
4595       {
4596         tree type;
4597         /* The syntax permitted here is the same permitted for an
4598            elaborated-type-specifier.  */
4599         type = cp_parser_elaborated_type_specifier (parser,
4600                                                     /*is_friend=*/false,
4601                                                     /*is_declaration=*/false);
4602         postfix_expression = cp_parser_functional_cast (parser, type);
4603       }
4604       break;
4605
4606     default:
4607       {
4608         tree type;
4609
4610         /* If the next thing is a simple-type-specifier, we may be
4611            looking at a functional cast.  We could also be looking at
4612            an id-expression.  So, we try the functional cast, and if
4613            that doesn't work we fall back to the primary-expression.  */
4614         cp_parser_parse_tentatively (parser);
4615         /* Look for the simple-type-specifier.  */
4616         type = cp_parser_simple_type_specifier (parser,
4617                                                 /*decl_specs=*/NULL,
4618                                                 CP_PARSER_FLAGS_NONE);
4619         /* Parse the cast itself.  */
4620         if (!cp_parser_error_occurred (parser))
4621           postfix_expression
4622             = cp_parser_functional_cast (parser, type);
4623         /* If that worked, we're done.  */
4624         if (cp_parser_parse_definitely (parser))
4625           break;
4626
4627         /* If the functional-cast didn't work out, try a
4628            compound-literal.  */
4629         if (cp_parser_allow_gnu_extensions_p (parser)
4630             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4631           {
4632             VEC(constructor_elt,gc) *initializer_list = NULL;
4633             bool saved_in_type_id_in_expr_p;
4634
4635             cp_parser_parse_tentatively (parser);
4636             /* Consume the `('.  */
4637             cp_lexer_consume_token (parser->lexer);
4638             /* Parse the type.  */
4639             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4640             parser->in_type_id_in_expr_p = true;
4641             type = cp_parser_type_id (parser);
4642             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4643             /* Look for the `)'.  */
4644             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4645             /* Look for the `{'.  */
4646             cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
4647             /* If things aren't going well, there's no need to
4648                keep going.  */
4649             if (!cp_parser_error_occurred (parser))
4650               {
4651                 bool non_constant_p;
4652                 /* Parse the initializer-list.  */
4653                 initializer_list
4654                   = cp_parser_initializer_list (parser, &non_constant_p);
4655                 /* Allow a trailing `,'.  */
4656                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4657                   cp_lexer_consume_token (parser->lexer);
4658                 /* Look for the final `}'.  */
4659                 cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
4660               }
4661             /* If that worked, we're definitely looking at a
4662                compound-literal expression.  */
4663             if (cp_parser_parse_definitely (parser))
4664               {
4665                 /* Warn the user that a compound literal is not
4666                    allowed in standard C++.  */
4667                 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids compound-literals");
4668                 /* For simplicity, we disallow compound literals in
4669                    constant-expressions.  We could
4670                    allow compound literals of integer type, whose
4671                    initializer was a constant, in constant
4672                    expressions.  Permitting that usage, as a further
4673                    extension, would not change the meaning of any
4674                    currently accepted programs.  (Of course, as
4675                    compound literals are not part of ISO C++, the
4676                    standard has nothing to say.)  */
4677                 if (cp_parser_non_integral_constant_expression 
4678                     (parser, "non-constant compound literals"))
4679                   {
4680                     postfix_expression = error_mark_node;
4681                     break;
4682                   }
4683                 /* Form the representation of the compound-literal.  */
4684                 postfix_expression
4685                   = (finish_compound_literal
4686                      (type, build_constructor (init_list_type_node,
4687                                                initializer_list)));
4688                 break;
4689               }
4690           }
4691
4692         /* It must be a primary-expression.  */
4693         postfix_expression
4694           = cp_parser_primary_expression (parser, address_p, cast_p,
4695                                           /*template_arg_p=*/false,
4696                                           &idk);
4697       }
4698       break;
4699     }
4700
4701   /* Keep looping until the postfix-expression is complete.  */
4702   while (true)
4703     {
4704       if (idk == CP_ID_KIND_UNQUALIFIED
4705           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4706           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4707         /* It is not a Koenig lookup function call.  */
4708         postfix_expression
4709           = unqualified_name_lookup_error (postfix_expression);
4710
4711       /* Peek at the next token.  */
4712       token = cp_lexer_peek_token (parser->lexer);
4713
4714       switch (token->type)
4715         {
4716         case CPP_OPEN_SQUARE:
4717           postfix_expression
4718             = cp_parser_postfix_open_square_expression (parser,
4719                                                         postfix_expression,
4720                                                         false);
4721           idk = CP_ID_KIND_NONE;
4722           is_member_access = false;
4723           break;
4724
4725         case CPP_OPEN_PAREN:
4726           /* postfix-expression ( expression-list [opt] ) */
4727           {
4728             bool koenig_p;
4729             bool is_builtin_constant_p;
4730             bool saved_integral_constant_expression_p = false;
4731             bool saved_non_integral_constant_expression_p = false;
4732             VEC(tree,gc) *args;
4733
4734             is_member_access = false;
4735
4736             is_builtin_constant_p
4737               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4738             if (is_builtin_constant_p)
4739               {
4740                 /* The whole point of __builtin_constant_p is to allow
4741                    non-constant expressions to appear as arguments.  */
4742                 saved_integral_constant_expression_p
4743                   = parser->integral_constant_expression_p;
4744                 saved_non_integral_constant_expression_p
4745                   = parser->non_integral_constant_expression_p;
4746                 parser->integral_constant_expression_p = false;
4747               }
4748             args = (cp_parser_parenthesized_expression_list
4749                     (parser, /*is_attribute_list=*/false,
4750                      /*cast_p=*/false, /*allow_expansion_p=*/true,
4751                      /*non_constant_p=*/NULL));
4752             if (is_builtin_constant_p)
4753               {
4754                 parser->integral_constant_expression_p
4755                   = saved_integral_constant_expression_p;
4756                 parser->non_integral_constant_expression_p
4757                   = saved_non_integral_constant_expression_p;
4758               }
4759
4760             if (args == NULL)
4761               {
4762                 postfix_expression = error_mark_node;
4763                 break;
4764               }
4765
4766             /* Function calls are not permitted in
4767                constant-expressions.  */
4768             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4769                 && cp_parser_non_integral_constant_expression (parser,
4770                                                                "a function call"))
4771               {
4772                 postfix_expression = error_mark_node;
4773                 release_tree_vector (args);
4774                 break;
4775               }
4776
4777             koenig_p = false;
4778             if (idk == CP_ID_KIND_UNQUALIFIED
4779                 || idk == CP_ID_KIND_TEMPLATE_ID)
4780               {
4781                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4782                   {
4783                     if (!VEC_empty (tree, args))
4784                       {
4785                         koenig_p = true;
4786                         if (!any_type_dependent_arguments_p (args))
4787                           postfix_expression
4788                             = perform_koenig_lookup (postfix_expression, args);
4789                       }
4790                     else
4791                       postfix_expression
4792                         = unqualified_fn_lookup_error (postfix_expression);
4793                   }
4794                 /* We do not perform argument-dependent lookup if
4795                    normal lookup finds a non-function, in accordance
4796                    with the expected resolution of DR 218.  */
4797                 else if (!VEC_empty (tree, args)
4798                          && is_overloaded_fn (postfix_expression))
4799                   {
4800                     tree fn = get_first_fn (postfix_expression);
4801
4802                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4803                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4804
4805                     /* Only do argument dependent lookup if regular
4806                        lookup does not find a set of member functions.
4807                        [basic.lookup.koenig]/2a  */
4808                     if (!DECL_FUNCTION_MEMBER_P (fn))
4809                       {
4810                         koenig_p = true;
4811                         if (!any_type_dependent_arguments_p (args))
4812                           postfix_expression
4813                             = perform_koenig_lookup (postfix_expression, args);
4814                       }
4815                   }
4816               }
4817
4818             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4819               {
4820                 tree instance = TREE_OPERAND (postfix_expression, 0);
4821                 tree fn = TREE_OPERAND (postfix_expression, 1);
4822
4823                 if (processing_template_decl
4824                     && (type_dependent_expression_p (instance)
4825                         || (!BASELINK_P (fn)
4826                             && TREE_CODE (fn) != FIELD_DECL)
4827                         || type_dependent_expression_p (fn)
4828                         || any_type_dependent_arguments_p (args)))
4829                   {
4830                     postfix_expression
4831                       = build_nt_call_vec (postfix_expression, args);
4832                     release_tree_vector (args);
4833                     break;
4834                   }
4835
4836                 if (BASELINK_P (fn))
4837                   {
4838                   postfix_expression
4839                     = (build_new_method_call
4840                        (instance, fn, &args, NULL_TREE,
4841                         (idk == CP_ID_KIND_QUALIFIED
4842                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4843                         /*fn_p=*/NULL,
4844                         tf_warning_or_error));
4845                   }
4846                 else
4847                   postfix_expression
4848                     = finish_call_expr (postfix_expression, &args,
4849                                         /*disallow_virtual=*/false,
4850                                         /*koenig_p=*/false,
4851                                         tf_warning_or_error);
4852               }
4853             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4854                      || TREE_CODE (postfix_expression) == MEMBER_REF
4855                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4856               postfix_expression = (build_offset_ref_call_from_tree
4857                                     (postfix_expression, &args));
4858             else if (idk == CP_ID_KIND_QUALIFIED)
4859               /* A call to a static class member, or a namespace-scope
4860                  function.  */
4861               postfix_expression
4862                 = finish_call_expr (postfix_expression, &args,
4863                                     /*disallow_virtual=*/true,
4864                                     koenig_p,
4865                                     tf_warning_or_error);
4866             else
4867               /* All other function calls.  */
4868               postfix_expression
4869                 = finish_call_expr (postfix_expression, &args,
4870                                     /*disallow_virtual=*/false,
4871                                     koenig_p,
4872                                     tf_warning_or_error);
4873
4874             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4875             idk = CP_ID_KIND_NONE;
4876
4877             release_tree_vector (args);
4878           }
4879           break;
4880
4881         case CPP_DOT:
4882         case CPP_DEREF:
4883           /* postfix-expression . template [opt] id-expression
4884              postfix-expression . pseudo-destructor-name
4885              postfix-expression -> template [opt] id-expression
4886              postfix-expression -> pseudo-destructor-name */
4887
4888           /* Consume the `.' or `->' operator.  */
4889           cp_lexer_consume_token (parser->lexer);
4890
4891           postfix_expression
4892             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4893                                                       postfix_expression,
4894                                                       false, &idk,
4895                                                       token->location);
4896
4897           is_member_access = true;
4898           break;
4899
4900         case CPP_PLUS_PLUS:
4901           /* postfix-expression ++  */
4902           /* Consume the `++' token.  */
4903           cp_lexer_consume_token (parser->lexer);
4904           /* Generate a representation for the complete expression.  */
4905           postfix_expression
4906             = finish_increment_expr (postfix_expression,
4907                                      POSTINCREMENT_EXPR);
4908           /* Increments may not appear in constant-expressions.  */
4909           if (cp_parser_non_integral_constant_expression (parser,
4910                                                           "an increment"))
4911             postfix_expression = error_mark_node;
4912           idk = CP_ID_KIND_NONE;
4913           is_member_access = false;
4914           break;
4915
4916         case CPP_MINUS_MINUS:
4917           /* postfix-expression -- */
4918           /* Consume the `--' token.  */
4919           cp_lexer_consume_token (parser->lexer);
4920           /* Generate a representation for the complete expression.  */
4921           postfix_expression
4922             = finish_increment_expr (postfix_expression,
4923                                      POSTDECREMENT_EXPR);
4924           /* Decrements may not appear in constant-expressions.  */
4925           if (cp_parser_non_integral_constant_expression (parser,
4926                                                           "a decrement"))
4927             postfix_expression = error_mark_node;
4928           idk = CP_ID_KIND_NONE;
4929           is_member_access = false;
4930           break;
4931
4932         default:
4933           if (pidk_return != NULL)
4934             * pidk_return = idk;
4935           if (member_access_only_p)
4936             return is_member_access? postfix_expression : error_mark_node;
4937           else
4938             return postfix_expression;
4939         }
4940     }
4941
4942   /* We should never get here.  */
4943   gcc_unreachable ();
4944   return error_mark_node;
4945 }
4946
4947 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4948    by cp_parser_builtin_offsetof.  We're looking for
4949
4950      postfix-expression [ expression ]
4951
4952    FOR_OFFSETOF is set if we're being called in that context, which
4953    changes how we deal with integer constant expressions.  */
4954
4955 static tree
4956 cp_parser_postfix_open_square_expression (cp_parser *parser,
4957                                           tree postfix_expression,
4958                                           bool for_offsetof)
4959 {
4960   tree index;
4961
4962   /* Consume the `[' token.  */
4963   cp_lexer_consume_token (parser->lexer);
4964
4965   /* Parse the index expression.  */
4966   /* ??? For offsetof, there is a question of what to allow here.  If
4967      offsetof is not being used in an integral constant expression context,
4968      then we *could* get the right answer by computing the value at runtime.
4969      If we are in an integral constant expression context, then we might
4970      could accept any constant expression; hard to say without analysis.
4971      Rather than open the barn door too wide right away, allow only integer
4972      constant expressions here.  */
4973   if (for_offsetof)
4974     index = cp_parser_constant_expression (parser, false, NULL);
4975   else
4976     index = cp_parser_expression (parser, /*cast_p=*/false, NULL);
4977
4978   /* Look for the closing `]'.  */
4979   cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
4980
4981   /* Build the ARRAY_REF.  */
4982   postfix_expression = grok_array_decl (postfix_expression, index);
4983
4984   /* When not doing offsetof, array references are not permitted in
4985      constant-expressions.  */
4986   if (!for_offsetof
4987       && (cp_parser_non_integral_constant_expression
4988           (parser, "an array reference")))
4989     postfix_expression = error_mark_node;
4990
4991   return postfix_expression;
4992 }
4993
4994 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4995    by cp_parser_builtin_offsetof.  We're looking for
4996
4997      postfix-expression . template [opt] id-expression
4998      postfix-expression . pseudo-destructor-name
4999      postfix-expression -> template [opt] id-expression
5000      postfix-expression -> pseudo-destructor-name
5001
5002    FOR_OFFSETOF is set if we're being called in that context.  That sorta
5003    limits what of the above we'll actually accept, but nevermind.
5004    TOKEN_TYPE is the "." or "->" token, which will already have been
5005    removed from the stream.  */
5006
5007 static tree
5008 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
5009                                         enum cpp_ttype token_type,
5010                                         tree postfix_expression,
5011                                         bool for_offsetof, cp_id_kind *idk,
5012                                         location_t location)
5013 {
5014   tree name;
5015   bool dependent_p;
5016   bool pseudo_destructor_p;
5017   tree scope = NULL_TREE;
5018
5019   /* If this is a `->' operator, dereference the pointer.  */
5020   if (token_type == CPP_DEREF)
5021     postfix_expression = build_x_arrow (postfix_expression);
5022   /* Check to see whether or not the expression is type-dependent.  */
5023   dependent_p = type_dependent_expression_p (postfix_expression);
5024   /* The identifier following the `->' or `.' is not qualified.  */
5025   parser->scope = NULL_TREE;
5026   parser->qualifying_scope = NULL_TREE;
5027   parser->object_scope = NULL_TREE;
5028   *idk = CP_ID_KIND_NONE;
5029
5030   /* Enter the scope corresponding to the type of the object
5031      given by the POSTFIX_EXPRESSION.  */
5032   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
5033     {
5034       scope = TREE_TYPE (postfix_expression);
5035       /* According to the standard, no expression should ever have
5036          reference type.  Unfortunately, we do not currently match
5037          the standard in this respect in that our internal representation
5038          of an expression may have reference type even when the standard
5039          says it does not.  Therefore, we have to manually obtain the
5040          underlying type here.  */
5041       scope = non_reference (scope);
5042       /* The type of the POSTFIX_EXPRESSION must be complete.  */
5043       if (scope == unknown_type_node)
5044         {
5045           error_at (location, "%qE does not have class type",
5046                     postfix_expression);
5047           scope = NULL_TREE;
5048         }
5049       else
5050         scope = complete_type_or_else (scope, NULL_TREE);
5051       /* Let the name lookup machinery know that we are processing a
5052          class member access expression.  */
5053       parser->context->object_type = scope;
5054       /* If something went wrong, we want to be able to discern that case,
5055          as opposed to the case where there was no SCOPE due to the type
5056          of expression being dependent.  */
5057       if (!scope)
5058         scope = error_mark_node;
5059       /* If the SCOPE was erroneous, make the various semantic analysis
5060          functions exit quickly -- and without issuing additional error
5061          messages.  */
5062       if (scope == error_mark_node)
5063         postfix_expression = error_mark_node;
5064     }
5065
5066   /* Assume this expression is not a pseudo-destructor access.  */
5067   pseudo_destructor_p = false;
5068
5069   /* If the SCOPE is a scalar type, then, if this is a valid program,
5070      we must be looking at a pseudo-destructor-name.  If POSTFIX_EXPRESSION
5071      is type dependent, it can be pseudo-destructor-name or something else.
5072      Try to parse it as pseudo-destructor-name first.  */
5073   if ((scope && SCALAR_TYPE_P (scope)) || dependent_p)
5074     {
5075       tree s;
5076       tree type;
5077
5078       cp_parser_parse_tentatively (parser);
5079       /* Parse the pseudo-destructor-name.  */
5080       s = NULL_TREE;
5081       cp_parser_pseudo_destructor_name (parser, &s, &type);
5082       if (dependent_p
5083           && (cp_parser_error_occurred (parser)
5084               || TREE_CODE (type) != TYPE_DECL
5085               || !SCALAR_TYPE_P (TREE_TYPE (type))))
5086         cp_parser_abort_tentative_parse (parser);
5087       else if (cp_parser_parse_definitely (parser))
5088         {
5089           pseudo_destructor_p = true;
5090           postfix_expression
5091             = finish_pseudo_destructor_expr (postfix_expression,
5092                                              s, TREE_TYPE (type));
5093         }
5094     }
5095
5096   if (!pseudo_destructor_p)
5097     {
5098       /* If the SCOPE is not a scalar type, we are looking at an
5099          ordinary class member access expression, rather than a
5100          pseudo-destructor-name.  */
5101       bool template_p;
5102       cp_token *token = cp_lexer_peek_token (parser->lexer);
5103       /* Parse the id-expression.  */
5104       name = (cp_parser_id_expression
5105               (parser,
5106                cp_parser_optional_template_keyword (parser),
5107                /*check_dependency_p=*/true,
5108                &template_p,
5109                /*declarator_p=*/false,
5110                /*optional_p=*/false));
5111       /* In general, build a SCOPE_REF if the member name is qualified.
5112          However, if the name was not dependent and has already been
5113          resolved; there is no need to build the SCOPE_REF.  For example;
5114
5115              struct X { void f(); };
5116              template <typename T> void f(T* t) { t->X::f(); }
5117
5118          Even though "t" is dependent, "X::f" is not and has been resolved
5119          to a BASELINK; there is no need to include scope information.  */
5120
5121       /* But we do need to remember that there was an explicit scope for
5122          virtual function calls.  */
5123       if (parser->scope)
5124         *idk = CP_ID_KIND_QUALIFIED;
5125
5126       /* If the name is a template-id that names a type, we will get a
5127          TYPE_DECL here.  That is invalid code.  */
5128       if (TREE_CODE (name) == TYPE_DECL)
5129         {
5130           error_at (token->location, "invalid use of %qD", name);
5131           postfix_expression = error_mark_node;
5132         }
5133       else
5134         {
5135           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
5136             {
5137               name = build_qualified_name (/*type=*/NULL_TREE,
5138                                            parser->scope,
5139                                            name,
5140                                            template_p);
5141               parser->scope = NULL_TREE;
5142               parser->qualifying_scope = NULL_TREE;
5143               parser->object_scope = NULL_TREE;
5144             }
5145           if (scope && name && BASELINK_P (name))
5146             adjust_result_of_qualified_name_lookup
5147               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
5148           postfix_expression
5149             = finish_class_member_access_expr (postfix_expression, name,
5150                                                template_p, 
5151                                                tf_warning_or_error);
5152         }
5153     }
5154
5155   /* We no longer need to look up names in the scope of the object on
5156      the left-hand side of the `.' or `->' operator.  */
5157   parser->context->object_type = NULL_TREE;
5158
5159   /* Outside of offsetof, these operators may not appear in
5160      constant-expressions.  */
5161   if (!for_offsetof
5162       && (cp_parser_non_integral_constant_expression
5163           (parser, token_type == CPP_DEREF ? "%<->%>" : "%<.%>")))
5164     postfix_expression = error_mark_node;
5165
5166   return postfix_expression;
5167 }
5168
5169 /* Parse a parenthesized expression-list.
5170
5171    expression-list:
5172      assignment-expression
5173      expression-list, assignment-expression
5174
5175    attribute-list:
5176      expression-list
5177      identifier
5178      identifier, expression-list
5179
5180    CAST_P is true if this expression is the target of a cast.
5181
5182    ALLOW_EXPANSION_P is true if this expression allows expansion of an
5183    argument pack.
5184
5185    Returns a vector of trees.  Each element is a representation of an
5186    assignment-expression.  NULL is returned if the ( and or ) are
5187    missing.  An empty, but allocated, vector is returned on no
5188    expressions.  The parentheses are eaten.  IS_ATTRIBUTE_LIST is true
5189    if this is really an attribute list being parsed.  If
5190    NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P indicates whether or
5191    not all of the expressions in the list were constant.  */
5192
5193 static VEC(tree,gc) *
5194 cp_parser_parenthesized_expression_list (cp_parser* parser,
5195                                          bool is_attribute_list,
5196                                          bool cast_p,
5197                                          bool allow_expansion_p,
5198                                          bool *non_constant_p)
5199 {
5200   VEC(tree,gc) *expression_list;
5201   bool fold_expr_p = is_attribute_list;
5202   tree identifier = NULL_TREE;
5203   bool saved_greater_than_is_operator_p;
5204
5205   /* Assume all the expressions will be constant.  */
5206   if (non_constant_p)
5207     *non_constant_p = false;
5208
5209   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
5210     return NULL;
5211
5212   expression_list = make_tree_vector ();
5213
5214   /* Within a parenthesized expression, a `>' token is always
5215      the greater-than operator.  */
5216   saved_greater_than_is_operator_p
5217     = parser->greater_than_is_operator_p;
5218   parser->greater_than_is_operator_p = true;
5219
5220   /* Consume expressions until there are no more.  */
5221   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
5222     while (true)
5223       {
5224         tree expr;
5225
5226         /* At the beginning of attribute lists, check to see if the
5227            next token is an identifier.  */
5228         if (is_attribute_list
5229             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
5230           {
5231             cp_token *token;
5232
5233             /* Consume the identifier.  */
5234             token = cp_lexer_consume_token (parser->lexer);
5235             /* Save the identifier.  */
5236             identifier = token->u.value;
5237           }
5238         else
5239           {
5240             bool expr_non_constant_p;
5241
5242             /* Parse the next assignment-expression.  */
5243             if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5244               {
5245                 /* A braced-init-list.  */
5246                 maybe_warn_cpp0x ("extended initializer lists");
5247                 expr = cp_parser_braced_list (parser, &expr_non_constant_p);
5248                 if (non_constant_p && expr_non_constant_p)
5249                   *non_constant_p = true;
5250               }
5251             else if (non_constant_p)
5252               {
5253                 expr = (cp_parser_constant_expression
5254                         (parser, /*allow_non_constant_p=*/true,
5255                          &expr_non_constant_p));
5256                 if (expr_non_constant_p)
5257                   *non_constant_p = true;
5258               }
5259             else
5260               expr = cp_parser_assignment_expression (parser, cast_p, NULL);
5261
5262             if (fold_expr_p)
5263               expr = fold_non_dependent_expr (expr);
5264
5265             /* If we have an ellipsis, then this is an expression
5266                expansion.  */
5267             if (allow_expansion_p
5268                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
5269               {
5270                 /* Consume the `...'.  */
5271                 cp_lexer_consume_token (parser->lexer);
5272
5273                 /* Build the argument pack.  */
5274                 expr = make_pack_expansion (expr);
5275               }
5276
5277              /* Add it to the list.  We add error_mark_node
5278                 expressions to the list, so that we can still tell if
5279                 the correct form for a parenthesized expression-list
5280                 is found. That gives better errors.  */
5281             VEC_safe_push (tree, gc, expression_list, expr);
5282
5283             if (expr == error_mark_node)
5284               goto skip_comma;
5285           }
5286
5287         /* After the first item, attribute lists look the same as
5288            expression lists.  */
5289         is_attribute_list = false;
5290
5291       get_comma:;
5292         /* If the next token isn't a `,', then we are done.  */
5293         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5294           break;
5295
5296         /* Otherwise, consume the `,' and keep going.  */
5297         cp_lexer_consume_token (parser->lexer);
5298       }
5299
5300   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
5301     {
5302       int ending;
5303
5304     skip_comma:;
5305       /* We try and resync to an unnested comma, as that will give the
5306          user better diagnostics.  */
5307       ending = cp_parser_skip_to_closing_parenthesis (parser,
5308                                                       /*recovering=*/true,
5309                                                       /*or_comma=*/true,
5310                                                       /*consume_paren=*/true);
5311       if (ending < 0)
5312         goto get_comma;
5313       if (!ending)
5314         {
5315           parser->greater_than_is_operator_p
5316             = saved_greater_than_is_operator_p;
5317           return NULL;
5318         }
5319     }
5320
5321   parser->greater_than_is_operator_p
5322     = saved_greater_than_is_operator_p;
5323
5324   if (identifier)
5325     VEC_safe_insert (tree, gc, expression_list, 0, identifier);
5326
5327   return expression_list;
5328 }
5329
5330 /* Parse a pseudo-destructor-name.
5331
5332    pseudo-destructor-name:
5333      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
5334      :: [opt] nested-name-specifier template template-id :: ~ type-name
5335      :: [opt] nested-name-specifier [opt] ~ type-name
5336
5337    If either of the first two productions is used, sets *SCOPE to the
5338    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
5339    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
5340    or ERROR_MARK_NODE if the parse fails.  */
5341
5342 static void
5343 cp_parser_pseudo_destructor_name (cp_parser* parser,
5344                                   tree* scope,
5345                                   tree* type)
5346 {
5347   bool nested_name_specifier_p;
5348
5349   /* Assume that things will not work out.  */
5350   *type = error_mark_node;
5351
5352   /* Look for the optional `::' operator.  */
5353   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
5354   /* Look for the optional nested-name-specifier.  */
5355   nested_name_specifier_p
5356     = (cp_parser_nested_name_specifier_opt (parser,
5357                                             /*typename_keyword_p=*/false,
5358                                             /*check_dependency_p=*/true,
5359                                             /*type_p=*/false,
5360                                             /*is_declaration=*/false)
5361        != NULL_TREE);
5362   /* Now, if we saw a nested-name-specifier, we might be doing the
5363      second production.  */
5364   if (nested_name_specifier_p
5365       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
5366     {
5367       /* Consume the `template' keyword.  */
5368       cp_lexer_consume_token (parser->lexer);
5369       /* Parse the template-id.  */
5370       cp_parser_template_id (parser,
5371                              /*template_keyword_p=*/true,
5372                              /*check_dependency_p=*/false,
5373                              /*is_declaration=*/true);
5374       /* Look for the `::' token.  */
5375       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
5376     }
5377   /* If the next token is not a `~', then there might be some
5378      additional qualification.  */
5379   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
5380     {
5381       /* At this point, we're looking for "type-name :: ~".  The type-name
5382          must not be a class-name, since this is a pseudo-destructor.  So,
5383          it must be either an enum-name, or a typedef-name -- both of which
5384          are just identifiers.  So, we peek ahead to check that the "::"
5385          and "~" tokens are present; if they are not, then we can avoid
5386          calling type_name.  */
5387       if (cp_lexer_peek_token (parser->lexer)->type != CPP_NAME
5388           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE
5389           || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)
5390         {
5391           cp_parser_error (parser, "non-scalar type");
5392           return;
5393         }
5394
5395       /* Look for the type-name.  */
5396       *scope = TREE_TYPE (cp_parser_nonclass_name (parser));
5397       if (*scope == error_mark_node)
5398         return;
5399
5400       /* Look for the `::' token.  */
5401       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
5402     }
5403   else
5404     *scope = NULL_TREE;
5405
5406   /* Look for the `~'.  */
5407   cp_parser_require (parser, CPP_COMPL, "%<~%>");
5408   /* Look for the type-name again.  We are not responsible for
5409      checking that it matches the first type-name.  */
5410   *type = cp_parser_nonclass_name (parser);
5411 }
5412
5413 /* Parse a unary-expression.
5414
5415    unary-expression:
5416      postfix-expression
5417      ++ cast-expression
5418      -- cast-expression
5419      unary-operator cast-expression
5420      sizeof unary-expression
5421      sizeof ( type-id )
5422      new-expression
5423      delete-expression
5424
5425    GNU Extensions:
5426
5427    unary-expression:
5428      __extension__ cast-expression
5429      __alignof__ unary-expression
5430      __alignof__ ( type-id )
5431      __real__ cast-expression
5432      __imag__ cast-expression
5433      && identifier
5434
5435    ADDRESS_P is true iff the unary-expression is appearing as the
5436    operand of the `&' operator.   CAST_P is true if this expression is
5437    the target of a cast.
5438
5439    Returns a representation of the expression.  */
5440
5441 static tree
5442 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p,
5443                             cp_id_kind * pidk)
5444 {
5445   cp_token *token;
5446   enum tree_code unary_operator;
5447
5448   /* Peek at the next token.  */
5449   token = cp_lexer_peek_token (parser->lexer);
5450   /* Some keywords give away the kind of expression.  */
5451   if (token->type == CPP_KEYWORD)
5452     {
5453       enum rid keyword = token->keyword;
5454
5455       switch (keyword)
5456         {
5457         case RID_ALIGNOF:
5458         case RID_SIZEOF:
5459           {
5460             tree operand;
5461             enum tree_code op;
5462
5463             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5464             /* Consume the token.  */
5465             cp_lexer_consume_token (parser->lexer);
5466             /* Parse the operand.  */
5467             operand = cp_parser_sizeof_operand (parser, keyword);
5468
5469             if (TYPE_P (operand))
5470               return cxx_sizeof_or_alignof_type (operand, op, true);
5471             else
5472               return cxx_sizeof_or_alignof_expr (operand, op, true);
5473           }
5474
5475         case RID_NEW:
5476           return cp_parser_new_expression (parser);
5477
5478         case RID_DELETE:
5479           return cp_parser_delete_expression (parser);
5480
5481         case RID_EXTENSION:
5482           {
5483             /* The saved value of the PEDANTIC flag.  */
5484             int saved_pedantic;
5485             tree expr;
5486
5487             /* Save away the PEDANTIC flag.  */
5488             cp_parser_extension_opt (parser, &saved_pedantic);
5489             /* Parse the cast-expression.  */
5490             expr = cp_parser_simple_cast_expression (parser);
5491             /* Restore the PEDANTIC flag.  */
5492             pedantic = saved_pedantic;
5493
5494             return expr;
5495           }
5496
5497         case RID_REALPART:
5498         case RID_IMAGPART:
5499           {
5500             tree expression;
5501
5502             /* Consume the `__real__' or `__imag__' token.  */
5503             cp_lexer_consume_token (parser->lexer);
5504             /* Parse the cast-expression.  */
5505             expression = cp_parser_simple_cast_expression (parser);
5506             /* Create the complete representation.  */
5507             return build_x_unary_op ((keyword == RID_REALPART
5508                                       ? REALPART_EXPR : IMAGPART_EXPR),
5509                                      expression,
5510                                      tf_warning_or_error);
5511           }
5512           break;
5513
5514         default:
5515           break;
5516         }
5517     }
5518
5519   /* Look for the `:: new' and `:: delete', which also signal the
5520      beginning of a new-expression, or delete-expression,
5521      respectively.  If the next token is `::', then it might be one of
5522      these.  */
5523   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5524     {
5525       enum rid keyword;
5526
5527       /* See if the token after the `::' is one of the keywords in
5528          which we're interested.  */
5529       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5530       /* If it's `new', we have a new-expression.  */
5531       if (keyword == RID_NEW)
5532         return cp_parser_new_expression (parser);
5533       /* Similarly, for `delete'.  */
5534       else if (keyword == RID_DELETE)
5535         return cp_parser_delete_expression (parser);
5536     }
5537
5538   /* Look for a unary operator.  */
5539   unary_operator = cp_parser_unary_operator (token);
5540   /* The `++' and `--' operators can be handled similarly, even though
5541      they are not technically unary-operators in the grammar.  */
5542   if (unary_operator == ERROR_MARK)
5543     {
5544       if (token->type == CPP_PLUS_PLUS)
5545         unary_operator = PREINCREMENT_EXPR;
5546       else if (token->type == CPP_MINUS_MINUS)
5547         unary_operator = PREDECREMENT_EXPR;
5548       /* Handle the GNU address-of-label extension.  */
5549       else if (cp_parser_allow_gnu_extensions_p (parser)
5550                && token->type == CPP_AND_AND)
5551         {
5552           tree identifier;
5553           tree expression;
5554           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
5555
5556           /* Consume the '&&' token.  */
5557           cp_lexer_consume_token (parser->lexer);
5558           /* Look for the identifier.  */
5559           identifier = cp_parser_identifier (parser);
5560           /* Create an expression representing the address.  */
5561           expression = finish_label_address_expr (identifier, loc);
5562           if (cp_parser_non_integral_constant_expression (parser,
5563                                                 "the address of a label"))
5564             expression = error_mark_node;
5565           return expression;
5566         }
5567     }
5568   if (unary_operator != ERROR_MARK)
5569     {
5570       tree cast_expression;
5571       tree expression = error_mark_node;
5572       const char *non_constant_p = NULL;
5573
5574       /* Consume the operator token.  */
5575       token = cp_lexer_consume_token (parser->lexer);
5576       /* Parse the cast-expression.  */
5577       cast_expression
5578         = cp_parser_cast_expression (parser,
5579                                      unary_operator == ADDR_EXPR,
5580                                      /*cast_p=*/false, pidk);
5581       /* Now, build an appropriate representation.  */
5582       switch (unary_operator)
5583         {
5584         case INDIRECT_REF:
5585           non_constant_p = "%<*%>";
5586           expression = build_x_indirect_ref (cast_expression, "unary *",
5587                                              tf_warning_or_error);
5588           break;
5589
5590         case ADDR_EXPR:
5591           non_constant_p = "%<&%>";
5592           /* Fall through.  */
5593         case BIT_NOT_EXPR:
5594           expression = build_x_unary_op (unary_operator, cast_expression,
5595                                          tf_warning_or_error);
5596           break;
5597
5598         case PREINCREMENT_EXPR:
5599         case PREDECREMENT_EXPR:
5600           non_constant_p = (unary_operator == PREINCREMENT_EXPR
5601                             ? "%<++%>" : "%<--%>");
5602           /* Fall through.  */
5603         case UNARY_PLUS_EXPR:
5604         case NEGATE_EXPR:
5605         case TRUTH_NOT_EXPR:
5606           expression = finish_unary_op_expr (unary_operator, cast_expression);
5607           break;
5608
5609         default:
5610           gcc_unreachable ();
5611         }
5612
5613       if (non_constant_p
5614           && cp_parser_non_integral_constant_expression (parser,
5615                                                          non_constant_p))
5616         expression = error_mark_node;
5617
5618       return expression;
5619     }
5620
5621   return cp_parser_postfix_expression (parser, address_p, cast_p,
5622                                        /*member_access_only_p=*/false,
5623                                        pidk);
5624 }
5625
5626 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5627    unary-operator, the corresponding tree code is returned.  */
5628
5629 static enum tree_code
5630 cp_parser_unary_operator (cp_token* token)
5631 {
5632   switch (token->type)
5633     {
5634     case CPP_MULT:
5635       return INDIRECT_REF;
5636
5637     case CPP_AND:
5638       return ADDR_EXPR;
5639
5640     case CPP_PLUS:
5641       return UNARY_PLUS_EXPR;
5642
5643     case CPP_MINUS:
5644       return NEGATE_EXPR;
5645
5646     case CPP_NOT:
5647       return TRUTH_NOT_EXPR;
5648
5649     case CPP_COMPL:
5650       return BIT_NOT_EXPR;
5651
5652     default:
5653       return ERROR_MARK;
5654     }
5655 }
5656
5657 /* Parse a new-expression.
5658
5659    new-expression:
5660      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5661      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5662
5663    Returns a representation of the expression.  */
5664
5665 static tree
5666 cp_parser_new_expression (cp_parser* parser)
5667 {
5668   bool global_scope_p;
5669   VEC(tree,gc) *placement;
5670   tree type;
5671   VEC(tree,gc) *initializer;
5672   tree nelts;
5673   tree ret;
5674
5675   /* Look for the optional `::' operator.  */
5676   global_scope_p
5677     = (cp_parser_global_scope_opt (parser,
5678                                    /*current_scope_valid_p=*/false)
5679        != NULL_TREE);
5680   /* Look for the `new' operator.  */
5681   cp_parser_require_keyword (parser, RID_NEW, "%<new%>");
5682   /* There's no easy way to tell a new-placement from the
5683      `( type-id )' construct.  */
5684   cp_parser_parse_tentatively (parser);
5685   /* Look for a new-placement.  */
5686   placement = cp_parser_new_placement (parser);
5687   /* If that didn't work out, there's no new-placement.  */
5688   if (!cp_parser_parse_definitely (parser))
5689     {
5690       if (placement != NULL)
5691         release_tree_vector (placement);
5692       placement = NULL;
5693     }
5694
5695   /* If the next token is a `(', then we have a parenthesized
5696      type-id.  */
5697   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5698     {
5699       cp_token *token;
5700       /* Consume the `('.  */
5701       cp_lexer_consume_token (parser->lexer);
5702       /* Parse the type-id.  */
5703       type = cp_parser_type_id (parser);
5704       /* Look for the closing `)'.  */
5705       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
5706       token = cp_lexer_peek_token (parser->lexer);
5707       /* There should not be a direct-new-declarator in this production,
5708          but GCC used to allowed this, so we check and emit a sensible error
5709          message for this case.  */
5710       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5711         {
5712           error_at (token->location,
5713                     "array bound forbidden after parenthesized type-id");
5714           inform (token->location, 
5715                   "try removing the parentheses around the type-id");
5716           cp_parser_direct_new_declarator (parser);
5717         }
5718       nelts = NULL_TREE;
5719     }
5720   /* Otherwise, there must be a new-type-id.  */
5721   else
5722     type = cp_parser_new_type_id (parser, &nelts);
5723
5724   /* If the next token is a `(' or '{', then we have a new-initializer.  */
5725   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
5726       || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5727     initializer = cp_parser_new_initializer (parser);
5728   else
5729     initializer = NULL;
5730
5731   /* A new-expression may not appear in an integral constant
5732      expression.  */
5733   if (cp_parser_non_integral_constant_expression (parser, "%<new%>"))
5734     ret = error_mark_node;
5735   else
5736     {
5737       /* Create a representation of the new-expression.  */
5738       ret = build_new (&placement, type, nelts, &initializer, global_scope_p,
5739                        tf_warning_or_error);
5740     }
5741
5742   if (placement != NULL)
5743     release_tree_vector (placement);
5744   if (initializer != NULL)
5745     release_tree_vector (initializer);
5746
5747   return ret;
5748 }
5749
5750 /* Parse a new-placement.
5751
5752    new-placement:
5753      ( expression-list )
5754
5755    Returns the same representation as for an expression-list.  */
5756
5757 static VEC(tree,gc) *
5758 cp_parser_new_placement (cp_parser* parser)
5759 {
5760   VEC(tree,gc) *expression_list;
5761
5762   /* Parse the expression-list.  */
5763   expression_list = (cp_parser_parenthesized_expression_list
5764                      (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5765                       /*non_constant_p=*/NULL));
5766
5767   return expression_list;
5768 }
5769
5770 /* Parse a new-type-id.
5771
5772    new-type-id:
5773      type-specifier-seq new-declarator [opt]
5774
5775    Returns the TYPE allocated.  If the new-type-id indicates an array
5776    type, *NELTS is set to the number of elements in the last array
5777    bound; the TYPE will not include the last array bound.  */
5778
5779 static tree
5780 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5781 {
5782   cp_decl_specifier_seq type_specifier_seq;
5783   cp_declarator *new_declarator;
5784   cp_declarator *declarator;
5785   cp_declarator *outer_declarator;
5786   const char *saved_message;
5787   tree type;
5788
5789   /* The type-specifier sequence must not contain type definitions.
5790      (It cannot contain declarations of new types either, but if they
5791      are not definitions we will catch that because they are not
5792      complete.)  */
5793   saved_message = parser->type_definition_forbidden_message;
5794   parser->type_definition_forbidden_message
5795     = "types may not be defined in a new-type-id";
5796   /* Parse the type-specifier-seq.  */
5797   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5798                                 &type_specifier_seq);
5799   /* Restore the old message.  */
5800   parser->type_definition_forbidden_message = saved_message;
5801   /* Parse the new-declarator.  */
5802   new_declarator = cp_parser_new_declarator_opt (parser);
5803
5804   /* Determine the number of elements in the last array dimension, if
5805      any.  */
5806   *nelts = NULL_TREE;
5807   /* Skip down to the last array dimension.  */
5808   declarator = new_declarator;
5809   outer_declarator = NULL;
5810   while (declarator && (declarator->kind == cdk_pointer
5811                         || declarator->kind == cdk_ptrmem))
5812     {
5813       outer_declarator = declarator;
5814       declarator = declarator->declarator;
5815     }
5816   while (declarator
5817          && declarator->kind == cdk_array
5818          && declarator->declarator
5819          && declarator->declarator->kind == cdk_array)
5820     {
5821       outer_declarator = declarator;
5822       declarator = declarator->declarator;
5823     }
5824
5825   if (declarator && declarator->kind == cdk_array)
5826     {
5827       *nelts = declarator->u.array.bounds;
5828       if (*nelts == error_mark_node)
5829         *nelts = integer_one_node;
5830
5831       if (outer_declarator)
5832         outer_declarator->declarator = declarator->declarator;
5833       else
5834         new_declarator = NULL;
5835     }
5836
5837   type = groktypename (&type_specifier_seq, new_declarator, false);
5838   return type;
5839 }
5840
5841 /* Parse an (optional) new-declarator.
5842
5843    new-declarator:
5844      ptr-operator new-declarator [opt]
5845      direct-new-declarator
5846
5847    Returns the declarator.  */
5848
5849 static cp_declarator *
5850 cp_parser_new_declarator_opt (cp_parser* parser)
5851 {
5852   enum tree_code code;
5853   tree type;
5854   cp_cv_quals cv_quals;
5855
5856   /* We don't know if there's a ptr-operator next, or not.  */
5857   cp_parser_parse_tentatively (parser);
5858   /* Look for a ptr-operator.  */
5859   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5860   /* If that worked, look for more new-declarators.  */
5861   if (cp_parser_parse_definitely (parser))
5862     {
5863       cp_declarator *declarator;
5864
5865       /* Parse another optional declarator.  */
5866       declarator = cp_parser_new_declarator_opt (parser);
5867
5868       return cp_parser_make_indirect_declarator
5869         (code, type, cv_quals, declarator);
5870     }
5871
5872   /* If the next token is a `[', there is a direct-new-declarator.  */
5873   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5874     return cp_parser_direct_new_declarator (parser);
5875
5876   return NULL;
5877 }
5878
5879 /* Parse a direct-new-declarator.
5880
5881    direct-new-declarator:
5882      [ expression ]
5883      direct-new-declarator [constant-expression]
5884
5885    */
5886
5887 static cp_declarator *
5888 cp_parser_direct_new_declarator (cp_parser* parser)
5889 {
5890   cp_declarator *declarator = NULL;
5891
5892   while (true)
5893     {
5894       tree expression;
5895
5896       /* Look for the opening `['.  */
5897       cp_parser_require (parser, CPP_OPEN_SQUARE, "%<[%>");
5898       /* The first expression is not required to be constant.  */
5899       if (!declarator)
5900         {
5901           cp_token *token = cp_lexer_peek_token (parser->lexer);
5902           expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
5903           /* The standard requires that the expression have integral
5904              type.  DR 74 adds enumeration types.  We believe that the
5905              real intent is that these expressions be handled like the
5906              expression in a `switch' condition, which also allows
5907              classes with a single conversion to integral or
5908              enumeration type.  */
5909           if (!processing_template_decl)
5910             {
5911               expression
5912                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5913                                               expression,
5914                                               /*complain=*/true);
5915               if (!expression)
5916                 {
5917                   error_at (token->location,
5918                             "expression in new-declarator must have integral "
5919                             "or enumeration type");
5920                   expression = error_mark_node;
5921                 }
5922             }
5923         }
5924       /* But all the other expressions must be.  */
5925       else
5926         expression
5927           = cp_parser_constant_expression (parser,
5928                                            /*allow_non_constant=*/false,
5929                                            NULL);
5930       /* Look for the closing `]'.  */
5931       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
5932
5933       /* Add this bound to the declarator.  */
5934       declarator = make_array_declarator (declarator, expression);
5935
5936       /* If the next token is not a `[', then there are no more
5937          bounds.  */
5938       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5939         break;
5940     }
5941
5942   return declarator;
5943 }
5944
5945 /* Parse a new-initializer.
5946
5947    new-initializer:
5948      ( expression-list [opt] )
5949      braced-init-list
5950
5951    Returns a representation of the expression-list.  */
5952
5953 static VEC(tree,gc) *
5954 cp_parser_new_initializer (cp_parser* parser)
5955 {
5956   VEC(tree,gc) *expression_list;
5957
5958   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5959     {
5960       tree t;
5961       bool expr_non_constant_p;
5962       maybe_warn_cpp0x ("extended initializer lists");
5963       t = cp_parser_braced_list (parser, &expr_non_constant_p);
5964       CONSTRUCTOR_IS_DIRECT_INIT (t) = 1;
5965       expression_list = make_tree_vector_single (t);
5966     }
5967   else
5968     expression_list = (cp_parser_parenthesized_expression_list
5969                        (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5970                         /*non_constant_p=*/NULL));
5971
5972   return expression_list;
5973 }
5974
5975 /* Parse a delete-expression.
5976
5977    delete-expression:
5978      :: [opt] delete cast-expression
5979      :: [opt] delete [ ] cast-expression
5980
5981    Returns a representation of the expression.  */
5982
5983 static tree
5984 cp_parser_delete_expression (cp_parser* parser)
5985 {
5986   bool global_scope_p;
5987   bool array_p;
5988   tree expression;
5989
5990   /* Look for the optional `::' operator.  */
5991   global_scope_p
5992     = (cp_parser_global_scope_opt (parser,
5993                                    /*current_scope_valid_p=*/false)
5994        != NULL_TREE);
5995   /* Look for the `delete' keyword.  */
5996   cp_parser_require_keyword (parser, RID_DELETE, "%<delete%>");
5997   /* See if the array syntax is in use.  */
5998   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5999     {
6000       /* Consume the `[' token.  */
6001       cp_lexer_consume_token (parser->lexer);
6002       /* Look for the `]' token.  */
6003       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
6004       /* Remember that this is the `[]' construct.  */
6005       array_p = true;
6006     }
6007   else
6008     array_p = false;
6009
6010   /* Parse the cast-expression.  */
6011   expression = cp_parser_simple_cast_expression (parser);
6012
6013   /* A delete-expression may not appear in an integral constant
6014      expression.  */
6015   if (cp_parser_non_integral_constant_expression (parser, "%<delete%>"))
6016     return error_mark_node;
6017
6018   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
6019 }
6020
6021 /* Returns true if TOKEN may start a cast-expression and false
6022    otherwise.  */
6023
6024 static bool
6025 cp_parser_token_starts_cast_expression (cp_token *token)
6026 {
6027   switch (token->type)
6028     {
6029     case CPP_COMMA:
6030     case CPP_SEMICOLON:
6031     case CPP_QUERY:
6032     case CPP_COLON:
6033     case CPP_CLOSE_SQUARE:
6034     case CPP_CLOSE_PAREN:
6035     case CPP_CLOSE_BRACE:
6036     case CPP_DOT:
6037     case CPP_DOT_STAR:
6038     case CPP_DEREF:
6039     case CPP_DEREF_STAR:
6040     case CPP_DIV:
6041     case CPP_MOD:
6042     case CPP_LSHIFT:
6043     case CPP_RSHIFT:
6044     case CPP_LESS:
6045     case CPP_GREATER:
6046     case CPP_LESS_EQ:
6047     case CPP_GREATER_EQ:
6048     case CPP_EQ_EQ:
6049     case CPP_NOT_EQ:
6050     case CPP_EQ:
6051     case CPP_MULT_EQ:
6052     case CPP_DIV_EQ:
6053     case CPP_MOD_EQ:
6054     case CPP_PLUS_EQ:
6055     case CPP_MINUS_EQ:
6056     case CPP_RSHIFT_EQ:
6057     case CPP_LSHIFT_EQ:
6058     case CPP_AND_EQ:
6059     case CPP_XOR_EQ:
6060     case CPP_OR_EQ:
6061     case CPP_XOR:
6062     case CPP_OR:
6063     case CPP_OR_OR:
6064     case CPP_EOF:
6065       return false;
6066
6067       /* '[' may start a primary-expression in obj-c++.  */
6068     case CPP_OPEN_SQUARE:
6069       return c_dialect_objc ();
6070
6071     default:
6072       return true;
6073     }
6074 }
6075
6076 /* Parse a cast-expression.
6077
6078    cast-expression:
6079      unary-expression
6080      ( type-id ) cast-expression
6081
6082    ADDRESS_P is true iff the unary-expression is appearing as the
6083    operand of the `&' operator.   CAST_P is true if this expression is
6084    the target of a cast.
6085
6086    Returns a representation of the expression.  */
6087
6088 static tree
6089 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
6090                            cp_id_kind * pidk)
6091 {
6092   /* If it's a `(', then we might be looking at a cast.  */
6093   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
6094     {
6095       tree type = NULL_TREE;
6096       tree expr = NULL_TREE;
6097       bool compound_literal_p;
6098       const char *saved_message;
6099
6100       /* There's no way to know yet whether or not this is a cast.
6101          For example, `(int (3))' is a unary-expression, while `(int)
6102          3' is a cast.  So, we resort to parsing tentatively.  */
6103       cp_parser_parse_tentatively (parser);
6104       /* Types may not be defined in a cast.  */
6105       saved_message = parser->type_definition_forbidden_message;
6106       parser->type_definition_forbidden_message
6107         = "types may not be defined in casts";
6108       /* Consume the `('.  */
6109       cp_lexer_consume_token (parser->lexer);
6110       /* A very tricky bit is that `(struct S) { 3 }' is a
6111          compound-literal (which we permit in C++ as an extension).
6112          But, that construct is not a cast-expression -- it is a
6113          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
6114          is legal; if the compound-literal were a cast-expression,
6115          you'd need an extra set of parentheses.)  But, if we parse
6116          the type-id, and it happens to be a class-specifier, then we
6117          will commit to the parse at that point, because we cannot
6118          undo the action that is done when creating a new class.  So,
6119          then we cannot back up and do a postfix-expression.
6120
6121          Therefore, we scan ahead to the closing `)', and check to see
6122          if the token after the `)' is a `{'.  If so, we are not
6123          looking at a cast-expression.
6124
6125          Save tokens so that we can put them back.  */
6126       cp_lexer_save_tokens (parser->lexer);
6127       /* Skip tokens until the next token is a closing parenthesis.
6128          If we find the closing `)', and the next token is a `{', then
6129          we are looking at a compound-literal.  */
6130       compound_literal_p
6131         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
6132                                                   /*consume_paren=*/true)
6133            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
6134       /* Roll back the tokens we skipped.  */
6135       cp_lexer_rollback_tokens (parser->lexer);
6136       /* If we were looking at a compound-literal, simulate an error
6137          so that the call to cp_parser_parse_definitely below will
6138          fail.  */
6139       if (compound_literal_p)
6140         cp_parser_simulate_error (parser);
6141       else
6142         {
6143           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
6144           parser->in_type_id_in_expr_p = true;
6145           /* Look for the type-id.  */
6146           type = cp_parser_type_id (parser);
6147           /* Look for the closing `)'.  */
6148           cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6149           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
6150         }
6151
6152       /* Restore the saved message.  */
6153       parser->type_definition_forbidden_message = saved_message;
6154
6155       /* At this point this can only be either a cast or a
6156          parenthesized ctor such as `(T ())' that looks like a cast to
6157          function returning T.  */
6158       if (!cp_parser_error_occurred (parser)
6159           && cp_parser_token_starts_cast_expression (cp_lexer_peek_token
6160                                                      (parser->lexer)))
6161         {
6162           cp_parser_parse_definitely (parser);
6163           expr = cp_parser_cast_expression (parser,
6164                                             /*address_p=*/false,
6165                                             /*cast_p=*/true, pidk);
6166
6167           /* Warn about old-style casts, if so requested.  */
6168           if (warn_old_style_cast
6169               && !in_system_header
6170               && !VOID_TYPE_P (type)
6171               && current_lang_name != lang_name_c)
6172             warning (OPT_Wold_style_cast, "use of old-style cast");
6173
6174           /* Only type conversions to integral or enumeration types
6175              can be used in constant-expressions.  */
6176           if (!cast_valid_in_integral_constant_expression_p (type)
6177               && (cp_parser_non_integral_constant_expression
6178                   (parser,
6179                    "a cast to a type other than an integral or "
6180                    "enumeration type")))
6181             return error_mark_node;
6182
6183           /* Perform the cast.  */
6184           expr = build_c_cast (input_location, type, expr);
6185           return expr;
6186         }
6187       else 
6188         cp_parser_abort_tentative_parse (parser);
6189     }
6190
6191   /* If we get here, then it's not a cast, so it must be a
6192      unary-expression.  */
6193   return cp_parser_unary_expression (parser, address_p, cast_p, pidk);
6194 }
6195
6196 /* Parse a binary expression of the general form:
6197
6198    pm-expression:
6199      cast-expression
6200      pm-expression .* cast-expression
6201      pm-expression ->* cast-expression
6202
6203    multiplicative-expression:
6204      pm-expression
6205      multiplicative-expression * pm-expression
6206      multiplicative-expression / pm-expression
6207      multiplicative-expression % pm-expression
6208
6209    additive-expression:
6210      multiplicative-expression
6211      additive-expression + multiplicative-expression
6212      additive-expression - multiplicative-expression
6213
6214    shift-expression:
6215      additive-expression
6216      shift-expression << additive-expression
6217      shift-expression >> additive-expression
6218
6219    relational-expression:
6220      shift-expression
6221      relational-expression < shift-expression
6222      relational-expression > shift-expression
6223      relational-expression <= shift-expression
6224      relational-expression >= shift-expression
6225
6226   GNU Extension:
6227
6228    relational-expression:
6229      relational-expression <? shift-expression
6230      relational-expression >? shift-expression
6231
6232    equality-expression:
6233      relational-expression
6234      equality-expression == relational-expression
6235      equality-expression != relational-expression
6236
6237    and-expression:
6238      equality-expression
6239      and-expression & equality-expression
6240
6241    exclusive-or-expression:
6242      and-expression
6243      exclusive-or-expression ^ and-expression
6244
6245    inclusive-or-expression:
6246      exclusive-or-expression
6247      inclusive-or-expression | exclusive-or-expression
6248
6249    logical-and-expression:
6250      inclusive-or-expression
6251      logical-and-expression && inclusive-or-expression
6252
6253    logical-or-expression:
6254      logical-and-expression
6255      logical-or-expression || logical-and-expression
6256
6257    All these are implemented with a single function like:
6258
6259    binary-expression:
6260      simple-cast-expression
6261      binary-expression <token> binary-expression
6262
6263    CAST_P is true if this expression is the target of a cast.
6264
6265    The binops_by_token map is used to get the tree codes for each <token> type.
6266    binary-expressions are associated according to a precedence table.  */
6267
6268 #define TOKEN_PRECEDENCE(token)                              \
6269 (((token->type == CPP_GREATER                                \
6270    || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
6271   && !parser->greater_than_is_operator_p)                    \
6272  ? PREC_NOT_OPERATOR                                         \
6273  : binops_by_token[token->type].prec)
6274
6275 static tree
6276 cp_parser_binary_expression (cp_parser* parser, bool cast_p,
6277                              bool no_toplevel_fold_p,
6278                              enum cp_parser_prec prec,
6279                              cp_id_kind * pidk)
6280 {
6281   cp_parser_expression_stack stack;
6282   cp_parser_expression_stack_entry *sp = &stack[0];
6283   tree lhs, rhs;
6284   cp_token *token;
6285   enum tree_code tree_type, lhs_type, rhs_type;
6286   enum cp_parser_prec new_prec, lookahead_prec;
6287   bool overloaded_p;
6288
6289   /* Parse the first expression.  */
6290   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p, pidk);
6291   lhs_type = ERROR_MARK;
6292
6293   for (;;)
6294     {
6295       /* Get an operator token.  */
6296       token = cp_lexer_peek_token (parser->lexer);
6297
6298       if (warn_cxx0x_compat
6299           && token->type == CPP_RSHIFT
6300           && !parser->greater_than_is_operator_p)
6301         {
6302           if (warning_at (token->location, OPT_Wc__0x_compat, 
6303                           "%<>>%> operator will be treated as"
6304                           " two right angle brackets in C++0x"))
6305             inform (token->location,
6306                     "suggest parentheses around %<>>%> expression");
6307         }
6308
6309       new_prec = TOKEN_PRECEDENCE (token);
6310
6311       /* Popping an entry off the stack means we completed a subexpression:
6312          - either we found a token which is not an operator (`>' where it is not
6313            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
6314            will happen repeatedly;
6315          - or, we found an operator which has lower priority.  This is the case
6316            where the recursive descent *ascends*, as in `3 * 4 + 5' after
6317            parsing `3 * 4'.  */
6318       if (new_prec <= prec)
6319         {
6320           if (sp == stack)
6321             break;
6322           else
6323             goto pop;
6324         }
6325
6326      get_rhs:
6327       tree_type = binops_by_token[token->type].tree_type;
6328
6329       /* We used the operator token.  */
6330       cp_lexer_consume_token (parser->lexer);
6331
6332       /* For "false && x" or "true || x", x will never be executed;
6333          disable warnings while evaluating it.  */
6334       if (tree_type == TRUTH_ANDIF_EXPR)
6335         c_inhibit_evaluation_warnings += lhs == truthvalue_false_node;
6336       else if (tree_type == TRUTH_ORIF_EXPR)
6337         c_inhibit_evaluation_warnings += lhs == truthvalue_true_node;
6338
6339       /* Extract another operand.  It may be the RHS of this expression
6340          or the LHS of a new, higher priority expression.  */
6341       rhs = cp_parser_simple_cast_expression (parser);
6342       rhs_type = ERROR_MARK;
6343
6344       /* Get another operator token.  Look up its precedence to avoid
6345          building a useless (immediately popped) stack entry for common
6346          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
6347       token = cp_lexer_peek_token (parser->lexer);
6348       lookahead_prec = TOKEN_PRECEDENCE (token);
6349       if (lookahead_prec > new_prec)
6350         {
6351           /* ... and prepare to parse the RHS of the new, higher priority
6352              expression.  Since precedence levels on the stack are
6353              monotonically increasing, we do not have to care about
6354              stack overflows.  */
6355           sp->prec = prec;
6356           sp->tree_type = tree_type;
6357           sp->lhs = lhs;
6358           sp->lhs_type = lhs_type;
6359           sp++;
6360           lhs = rhs;
6361           lhs_type = rhs_type;
6362           prec = new_prec;
6363           new_prec = lookahead_prec;
6364           goto get_rhs;
6365
6366          pop:
6367           lookahead_prec = new_prec;
6368           /* If the stack is not empty, we have parsed into LHS the right side
6369              (`4' in the example above) of an expression we had suspended.
6370              We can use the information on the stack to recover the LHS (`3')
6371              from the stack together with the tree code (`MULT_EXPR'), and
6372              the precedence of the higher level subexpression
6373              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
6374              which will be used to actually build the additive expression.  */
6375           --sp;
6376           prec = sp->prec;
6377           tree_type = sp->tree_type;
6378           rhs = lhs;
6379           rhs_type = lhs_type;
6380           lhs = sp->lhs;
6381           lhs_type = sp->lhs_type;
6382         }
6383
6384       /* Undo the disabling of warnings done above.  */
6385       if (tree_type == TRUTH_ANDIF_EXPR)
6386         c_inhibit_evaluation_warnings -= lhs == truthvalue_false_node;
6387       else if (tree_type == TRUTH_ORIF_EXPR)
6388         c_inhibit_evaluation_warnings -= lhs == truthvalue_true_node;
6389
6390       overloaded_p = false;
6391       /* ??? Currently we pass lhs_type == ERROR_MARK and rhs_type ==
6392          ERROR_MARK for everything that is not a binary expression.
6393          This makes warn_about_parentheses miss some warnings that
6394          involve unary operators.  For unary expressions we should
6395          pass the correct tree_code unless the unary expression was
6396          surrounded by parentheses.
6397       */
6398       if (no_toplevel_fold_p
6399           && lookahead_prec <= prec
6400           && sp == stack
6401           && TREE_CODE_CLASS (tree_type) == tcc_comparison)
6402         lhs = build2 (tree_type, boolean_type_node, lhs, rhs);
6403       else
6404         lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
6405                                  &overloaded_p, tf_warning_or_error);
6406       lhs_type = tree_type;
6407
6408       /* If the binary operator required the use of an overloaded operator,
6409          then this expression cannot be an integral constant-expression.
6410          An overloaded operator can be used even if both operands are
6411          otherwise permissible in an integral constant-expression if at
6412          least one of the operands is of enumeration type.  */
6413
6414       if (overloaded_p
6415           && (cp_parser_non_integral_constant_expression
6416               (parser, "calls to overloaded operators")))
6417         return error_mark_node;
6418     }
6419
6420   return lhs;
6421 }
6422
6423
6424 /* Parse the `? expression : assignment-expression' part of a
6425    conditional-expression.  The LOGICAL_OR_EXPR is the
6426    logical-or-expression that started the conditional-expression.
6427    Returns a representation of the entire conditional-expression.
6428
6429    This routine is used by cp_parser_assignment_expression.
6430
6431      ? expression : assignment-expression
6432
6433    GNU Extensions:
6434
6435      ? : assignment-expression */
6436
6437 static tree
6438 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
6439 {
6440   tree expr;
6441   tree assignment_expr;
6442
6443   /* Consume the `?' token.  */
6444   cp_lexer_consume_token (parser->lexer);
6445   if (cp_parser_allow_gnu_extensions_p (parser)
6446       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
6447     {
6448       /* Implicit true clause.  */
6449       expr = NULL_TREE;
6450       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_true_node;
6451     }
6452   else
6453     {
6454       /* Parse the expression.  */
6455       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_false_node;
6456       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
6457       c_inhibit_evaluation_warnings +=
6458         ((logical_or_expr == truthvalue_true_node)
6459          - (logical_or_expr == truthvalue_false_node));
6460     }
6461
6462   /* The next token should be a `:'.  */
6463   cp_parser_require (parser, CPP_COLON, "%<:%>");
6464   /* Parse the assignment-expression.  */
6465   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
6466   c_inhibit_evaluation_warnings -= logical_or_expr == truthvalue_true_node;
6467
6468   /* Build the conditional-expression.  */
6469   return build_x_conditional_expr (logical_or_expr,
6470                                    expr,
6471                                    assignment_expr,
6472                                    tf_warning_or_error);
6473 }
6474
6475 /* Parse an assignment-expression.
6476
6477    assignment-expression:
6478      conditional-expression
6479      logical-or-expression assignment-operator assignment_expression
6480      throw-expression
6481
6482    CAST_P is true if this expression is the target of a cast.
6483
6484    Returns a representation for the expression.  */
6485
6486 static tree
6487 cp_parser_assignment_expression (cp_parser* parser, bool cast_p,
6488                                  cp_id_kind * pidk)
6489 {
6490   tree expr;
6491
6492   /* If the next token is the `throw' keyword, then we're looking at
6493      a throw-expression.  */
6494   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
6495     expr = cp_parser_throw_expression (parser);
6496   /* Otherwise, it must be that we are looking at a
6497      logical-or-expression.  */
6498   else
6499     {
6500       /* Parse the binary expressions (logical-or-expression).  */
6501       expr = cp_parser_binary_expression (parser, cast_p, false,
6502                                           PREC_NOT_OPERATOR, pidk);
6503       /* If the next token is a `?' then we're actually looking at a
6504          conditional-expression.  */
6505       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
6506         return cp_parser_question_colon_clause (parser, expr);
6507       else
6508         {
6509           enum tree_code assignment_operator;
6510
6511           /* If it's an assignment-operator, we're using the second
6512              production.  */
6513           assignment_operator
6514             = cp_parser_assignment_operator_opt (parser);
6515           if (assignment_operator != ERROR_MARK)
6516             {
6517               bool non_constant_p;
6518
6519               /* Parse the right-hand side of the assignment.  */
6520               tree rhs = cp_parser_initializer_clause (parser, &non_constant_p);
6521
6522               if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
6523                 maybe_warn_cpp0x ("extended initializer lists");
6524
6525               /* An assignment may not appear in a
6526                  constant-expression.  */
6527               if (cp_parser_non_integral_constant_expression (parser,
6528                                                               "an assignment"))
6529                 return error_mark_node;
6530               /* Build the assignment expression.  */
6531               expr = build_x_modify_expr (expr,
6532                                           assignment_operator,
6533                                           rhs,
6534                                           tf_warning_or_error);
6535             }
6536         }
6537     }
6538
6539   return expr;
6540 }
6541
6542 /* Parse an (optional) assignment-operator.
6543
6544    assignment-operator: one of
6545      = *= /= %= += -= >>= <<= &= ^= |=
6546
6547    GNU Extension:
6548
6549    assignment-operator: one of
6550      <?= >?=
6551
6552    If the next token is an assignment operator, the corresponding tree
6553    code is returned, and the token is consumed.  For example, for
6554    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
6555    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
6556    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
6557    operator, ERROR_MARK is returned.  */
6558
6559 static enum tree_code
6560 cp_parser_assignment_operator_opt (cp_parser* parser)
6561 {
6562   enum tree_code op;
6563   cp_token *token;
6564
6565   /* Peek at the next token.  */
6566   token = cp_lexer_peek_token (parser->lexer);
6567
6568   switch (token->type)
6569     {
6570     case CPP_EQ:
6571       op = NOP_EXPR;
6572       break;
6573
6574     case CPP_MULT_EQ:
6575       op = MULT_EXPR;
6576       break;
6577
6578     case CPP_DIV_EQ:
6579       op = TRUNC_DIV_EXPR;
6580       break;
6581
6582     case CPP_MOD_EQ:
6583       op = TRUNC_MOD_EXPR;
6584       break;
6585
6586     case CPP_PLUS_EQ:
6587       op = PLUS_EXPR;
6588       break;
6589
6590     case CPP_MINUS_EQ:
6591       op = MINUS_EXPR;
6592       break;
6593
6594     case CPP_RSHIFT_EQ:
6595       op = RSHIFT_EXPR;
6596       break;
6597
6598     case CPP_LSHIFT_EQ:
6599       op = LSHIFT_EXPR;
6600       break;
6601
6602     case CPP_AND_EQ:
6603       op = BIT_AND_EXPR;
6604       break;
6605
6606     case CPP_XOR_EQ:
6607       op = BIT_XOR_EXPR;
6608       break;
6609
6610     case CPP_OR_EQ:
6611       op = BIT_IOR_EXPR;
6612       break;
6613
6614     default:
6615       /* Nothing else is an assignment operator.  */
6616       op = ERROR_MARK;
6617     }
6618
6619   /* If it was an assignment operator, consume it.  */
6620   if (op != ERROR_MARK)
6621     cp_lexer_consume_token (parser->lexer);
6622
6623   return op;
6624 }
6625
6626 /* Parse an expression.
6627
6628    expression:
6629      assignment-expression
6630      expression , assignment-expression
6631
6632    CAST_P is true if this expression is the target of a cast.
6633
6634    Returns a representation of the expression.  */
6635
6636 static tree
6637 cp_parser_expression (cp_parser* parser, bool cast_p, cp_id_kind * pidk)
6638 {
6639   tree expression = NULL_TREE;
6640
6641   while (true)
6642     {
6643       tree assignment_expression;
6644
6645       /* Parse the next assignment-expression.  */
6646       assignment_expression
6647         = cp_parser_assignment_expression (parser, cast_p, pidk);
6648       /* If this is the first assignment-expression, we can just
6649          save it away.  */
6650       if (!expression)
6651         expression = assignment_expression;
6652       else
6653         expression = build_x_compound_expr (expression,
6654                                             assignment_expression,
6655                                             tf_warning_or_error);
6656       /* If the next token is not a comma, then we are done with the
6657          expression.  */
6658       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6659         break;
6660       /* Consume the `,'.  */
6661       cp_lexer_consume_token (parser->lexer);
6662       /* A comma operator cannot appear in a constant-expression.  */
6663       if (cp_parser_non_integral_constant_expression (parser,
6664                                                       "a comma operator"))
6665         expression = error_mark_node;
6666     }
6667
6668   return expression;
6669 }
6670
6671 /* Parse a constant-expression.
6672
6673    constant-expression:
6674      conditional-expression
6675
6676   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6677   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6678   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6679   is false, NON_CONSTANT_P should be NULL.  */
6680
6681 static tree
6682 cp_parser_constant_expression (cp_parser* parser,
6683                                bool allow_non_constant_p,
6684                                bool *non_constant_p)
6685 {
6686   bool saved_integral_constant_expression_p;
6687   bool saved_allow_non_integral_constant_expression_p;
6688   bool saved_non_integral_constant_expression_p;
6689   tree expression;
6690
6691   /* It might seem that we could simply parse the
6692      conditional-expression, and then check to see if it were
6693      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
6694      one that the compiler can figure out is constant, possibly after
6695      doing some simplifications or optimizations.  The standard has a
6696      precise definition of constant-expression, and we must honor
6697      that, even though it is somewhat more restrictive.
6698
6699      For example:
6700
6701        int i[(2, 3)];
6702
6703      is not a legal declaration, because `(2, 3)' is not a
6704      constant-expression.  The `,' operator is forbidden in a
6705      constant-expression.  However, GCC's constant-folding machinery
6706      will fold this operation to an INTEGER_CST for `3'.  */
6707
6708   /* Save the old settings.  */
6709   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
6710   saved_allow_non_integral_constant_expression_p
6711     = parser->allow_non_integral_constant_expression_p;
6712   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
6713   /* We are now parsing a constant-expression.  */
6714   parser->integral_constant_expression_p = true;
6715   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
6716   parser->non_integral_constant_expression_p = false;
6717   /* Although the grammar says "conditional-expression", we parse an
6718      "assignment-expression", which also permits "throw-expression"
6719      and the use of assignment operators.  In the case that
6720      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6721      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
6722      actually essential that we look for an assignment-expression.
6723      For example, cp_parser_initializer_clauses uses this function to
6724      determine whether a particular assignment-expression is in fact
6725      constant.  */
6726   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
6727   /* Restore the old settings.  */
6728   parser->integral_constant_expression_p
6729     = saved_integral_constant_expression_p;
6730   parser->allow_non_integral_constant_expression_p
6731     = saved_allow_non_integral_constant_expression_p;
6732   if (allow_non_constant_p)
6733     *non_constant_p = parser->non_integral_constant_expression_p;
6734   else if (parser->non_integral_constant_expression_p)
6735     expression = error_mark_node;
6736   parser->non_integral_constant_expression_p
6737     = saved_non_integral_constant_expression_p;
6738
6739   return expression;
6740 }
6741
6742 /* Parse __builtin_offsetof.
6743
6744    offsetof-expression:
6745      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6746
6747    offsetof-member-designator:
6748      id-expression
6749      | offsetof-member-designator "." id-expression
6750      | offsetof-member-designator "[" expression "]"
6751      | offsetof-member-designator "->" id-expression  */
6752
6753 static tree
6754 cp_parser_builtin_offsetof (cp_parser *parser)
6755 {
6756   int save_ice_p, save_non_ice_p;
6757   tree type, expr;
6758   cp_id_kind dummy;
6759   cp_token *token;
6760
6761   /* We're about to accept non-integral-constant things, but will
6762      definitely yield an integral constant expression.  Save and
6763      restore these values around our local parsing.  */
6764   save_ice_p = parser->integral_constant_expression_p;
6765   save_non_ice_p = parser->non_integral_constant_expression_p;
6766
6767   /* Consume the "__builtin_offsetof" token.  */
6768   cp_lexer_consume_token (parser->lexer);
6769   /* Consume the opening `('.  */
6770   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
6771   /* Parse the type-id.  */
6772   type = cp_parser_type_id (parser);
6773   /* Look for the `,'.  */
6774   cp_parser_require (parser, CPP_COMMA, "%<,%>");
6775   token = cp_lexer_peek_token (parser->lexer);
6776
6777   /* Build the (type *)null that begins the traditional offsetof macro.  */
6778   expr = build_static_cast (build_pointer_type (type), null_pointer_node,
6779                             tf_warning_or_error);
6780
6781   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6782   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6783                                                  true, &dummy, token->location);
6784   while (true)
6785     {
6786       token = cp_lexer_peek_token (parser->lexer);
6787       switch (token->type)
6788         {
6789         case CPP_OPEN_SQUARE:
6790           /* offsetof-member-designator "[" expression "]" */
6791           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6792           break;
6793
6794         case CPP_DEREF:
6795           /* offsetof-member-designator "->" identifier */
6796           expr = grok_array_decl (expr, integer_zero_node);
6797           /* FALLTHRU */
6798
6799         case CPP_DOT:
6800           /* offsetof-member-designator "." identifier */
6801           cp_lexer_consume_token (parser->lexer);
6802           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT,
6803                                                          expr, true, &dummy,
6804                                                          token->location);
6805           break;
6806
6807         case CPP_CLOSE_PAREN:
6808           /* Consume the ")" token.  */
6809           cp_lexer_consume_token (parser->lexer);
6810           goto success;
6811
6812         default:
6813           /* Error.  We know the following require will fail, but
6814              that gives the proper error message.  */
6815           cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6816           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6817           expr = error_mark_node;
6818           goto failure;
6819         }
6820     }
6821
6822  success:
6823   /* If we're processing a template, we can't finish the semantics yet.
6824      Otherwise we can fold the entire expression now.  */
6825   if (processing_template_decl)
6826     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6827   else
6828     expr = finish_offsetof (expr);
6829
6830  failure:
6831   parser->integral_constant_expression_p = save_ice_p;
6832   parser->non_integral_constant_expression_p = save_non_ice_p;
6833
6834   return expr;
6835 }
6836
6837 /* Parse a trait expression.  */
6838
6839 static tree
6840 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
6841 {
6842   cp_trait_kind kind;
6843   tree type1, type2 = NULL_TREE;
6844   bool binary = false;
6845   cp_decl_specifier_seq decl_specs;
6846
6847   switch (keyword)
6848     {
6849     case RID_HAS_NOTHROW_ASSIGN:
6850       kind = CPTK_HAS_NOTHROW_ASSIGN;
6851       break;
6852     case RID_HAS_NOTHROW_CONSTRUCTOR:
6853       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
6854       break;
6855     case RID_HAS_NOTHROW_COPY:
6856       kind = CPTK_HAS_NOTHROW_COPY;
6857       break;
6858     case RID_HAS_TRIVIAL_ASSIGN:
6859       kind = CPTK_HAS_TRIVIAL_ASSIGN;
6860       break;
6861     case RID_HAS_TRIVIAL_CONSTRUCTOR:
6862       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
6863       break;
6864     case RID_HAS_TRIVIAL_COPY:
6865       kind = CPTK_HAS_TRIVIAL_COPY;
6866       break;
6867     case RID_HAS_TRIVIAL_DESTRUCTOR:
6868       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
6869       break;
6870     case RID_HAS_VIRTUAL_DESTRUCTOR:
6871       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
6872       break;
6873     case RID_IS_ABSTRACT:
6874       kind = CPTK_IS_ABSTRACT;
6875       break;
6876     case RID_IS_BASE_OF:
6877       kind = CPTK_IS_BASE_OF;
6878       binary = true;
6879       break;
6880     case RID_IS_CLASS:
6881       kind = CPTK_IS_CLASS;
6882       break;
6883     case RID_IS_CONVERTIBLE_TO:
6884       kind = CPTK_IS_CONVERTIBLE_TO;
6885       binary = true;
6886       break;
6887     case RID_IS_EMPTY:
6888       kind = CPTK_IS_EMPTY;
6889       break;
6890     case RID_IS_ENUM:
6891       kind = CPTK_IS_ENUM;
6892       break;
6893     case RID_IS_POD:
6894       kind = CPTK_IS_POD;
6895       break;
6896     case RID_IS_POLYMORPHIC:
6897       kind = CPTK_IS_POLYMORPHIC;
6898       break;
6899     case RID_IS_STD_LAYOUT:
6900       kind = CPTK_IS_STD_LAYOUT;
6901       break;
6902     case RID_IS_TRIVIAL:
6903       kind = CPTK_IS_TRIVIAL;
6904       break;
6905     case RID_IS_UNION:
6906       kind = CPTK_IS_UNION;
6907       break;
6908     default:
6909       gcc_unreachable ();
6910     }
6911
6912   /* Consume the token.  */
6913   cp_lexer_consume_token (parser->lexer);
6914
6915   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
6916
6917   type1 = cp_parser_type_id (parser);
6918
6919   if (type1 == error_mark_node)
6920     return error_mark_node;
6921
6922   /* Build a trivial decl-specifier-seq.  */
6923   clear_decl_specs (&decl_specs);
6924   decl_specs.type = type1;
6925
6926   /* Call grokdeclarator to figure out what type this is.  */
6927   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6928                           /*initialized=*/0, /*attrlist=*/NULL);
6929
6930   if (binary)
6931     {
6932       cp_parser_require (parser, CPP_COMMA, "%<,%>");
6933  
6934       type2 = cp_parser_type_id (parser);
6935
6936       if (type2 == error_mark_node)
6937         return error_mark_node;
6938
6939       /* Build a trivial decl-specifier-seq.  */
6940       clear_decl_specs (&decl_specs);
6941       decl_specs.type = type2;
6942
6943       /* Call grokdeclarator to figure out what type this is.  */
6944       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6945                               /*initialized=*/0, /*attrlist=*/NULL);
6946     }
6947
6948   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6949
6950   /* Complete the trait expression, which may mean either processing
6951      the trait expr now or saving it for template instantiation.  */
6952   return finish_trait_expr (kind, type1, type2);
6953 }
6954
6955 /* Lambdas that appear in variable initializer or default argument scope
6956    get that in their mangling, so we need to record it.  We might as well
6957    use the count for function and namespace scopes as well.  */
6958 static GTY(()) tree lambda_scope;
6959 static GTY(()) int lambda_count;
6960 typedef struct GTY(()) tree_int
6961 {
6962   tree t;
6963   int i;
6964 } tree_int;
6965 DEF_VEC_O(tree_int);
6966 DEF_VEC_ALLOC_O(tree_int,gc);
6967 static GTY(()) VEC(tree_int,gc) *lambda_scope_stack;
6968
6969 static void
6970 start_lambda_scope (tree decl)
6971 {
6972   tree_int ti;
6973   gcc_assert (decl);
6974   /* Once we're inside a function, we ignore other scopes and just push
6975      the function again so that popping works properly.  */
6976   if (current_function_decl && TREE_CODE (decl) != FUNCTION_DECL)
6977     decl = current_function_decl;
6978   ti.t = lambda_scope;
6979   ti.i = lambda_count;
6980   VEC_safe_push (tree_int, gc, lambda_scope_stack, &ti);
6981   if (lambda_scope != decl)
6982     {
6983       /* Don't reset the count if we're still in the same function.  */
6984       lambda_scope = decl;
6985       lambda_count = 0;
6986     }
6987 }
6988
6989 static void
6990 record_lambda_scope (tree lambda)
6991 {
6992   LAMBDA_EXPR_EXTRA_SCOPE (lambda) = lambda_scope;
6993   LAMBDA_EXPR_DISCRIMINATOR (lambda) = lambda_count++;
6994 }
6995
6996 static void
6997 finish_lambda_scope (void)
6998 {
6999   tree_int *p = VEC_last (tree_int, lambda_scope_stack);
7000   if (lambda_scope != p->t)
7001     {
7002       lambda_scope = p->t;
7003       lambda_count = p->i;
7004     }
7005   VEC_pop (tree_int, lambda_scope_stack);
7006 }
7007
7008 /* Parse a lambda expression.
7009
7010    lambda-expression:
7011      lambda-introducer lambda-declarator [opt] compound-statement
7012
7013    Returns a representation of the expression.  */
7014
7015 static tree
7016 cp_parser_lambda_expression (cp_parser* parser)
7017 {
7018   tree lambda_expr = build_lambda_expr ();
7019   tree type;
7020
7021   LAMBDA_EXPR_LOCATION (lambda_expr)
7022     = cp_lexer_peek_token (parser->lexer)->location;
7023
7024   /* We may be in the middle of deferred access check.  Disable
7025      it now.  */
7026   push_deferring_access_checks (dk_no_deferred);
7027
7028   type = begin_lambda_type (lambda_expr);
7029
7030   record_lambda_scope (lambda_expr);
7031
7032   /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
7033   determine_visibility (TYPE_NAME (type));
7034
7035   {
7036     /* Inside the class, surrounding template-parameter-lists do not apply.  */
7037     unsigned int saved_num_template_parameter_lists
7038         = parser->num_template_parameter_lists;
7039
7040     parser->num_template_parameter_lists = 0;
7041
7042     cp_parser_lambda_introducer (parser, lambda_expr);
7043
7044     /* By virtue of defining a local class, a lambda expression has access to
7045        the private variables of enclosing classes.  */
7046
7047     cp_parser_lambda_declarator_opt (parser, lambda_expr);
7048
7049     cp_parser_lambda_body (parser, lambda_expr);
7050
7051     /* The capture list was built up in reverse order; fix that now.  */
7052     {
7053       tree newlist = NULL_TREE;
7054       tree elt, next;
7055
7056       for (elt = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
7057            elt; elt = next)
7058         {
7059           tree field = TREE_PURPOSE (elt);
7060           char *buf;
7061
7062           next = TREE_CHAIN (elt);
7063           TREE_CHAIN (elt) = newlist;
7064           newlist = elt;
7065
7066           /* Also add __ to the beginning of the field name so that code
7067              outside the lambda body can't see the captured name.  We could
7068              just remove the name entirely, but this is more useful for
7069              debugging.  */
7070           if (field == LAMBDA_EXPR_THIS_CAPTURE (lambda_expr))
7071             /* The 'this' capture already starts with __.  */
7072             continue;
7073
7074           buf = (char *) alloca (IDENTIFIER_LENGTH (DECL_NAME (field)) + 3);
7075           buf[1] = buf[0] = '_';
7076           memcpy (buf + 2, IDENTIFIER_POINTER (DECL_NAME (field)),
7077                   IDENTIFIER_LENGTH (DECL_NAME (field)) + 1);
7078           DECL_NAME (field) = get_identifier (buf);
7079         }
7080       LAMBDA_EXPR_CAPTURE_LIST (lambda_expr) = newlist;
7081     }
7082
7083     type = finish_struct (type, /*attributes=*/NULL_TREE);
7084
7085     parser->num_template_parameter_lists = saved_num_template_parameter_lists;
7086   }
7087
7088   pop_deferring_access_checks ();
7089
7090   return build_lambda_object (lambda_expr);
7091 }
7092
7093 /* Parse the beginning of a lambda expression.
7094
7095    lambda-introducer:
7096      [ lambda-capture [opt] ]
7097
7098    LAMBDA_EXPR is the current representation of the lambda expression.  */
7099
7100 static void
7101 cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
7102 {
7103   /* Need commas after the first capture.  */
7104   bool first = true;
7105
7106   /* Eat the leading `['.  */
7107   cp_parser_require (parser, CPP_OPEN_SQUARE, "%<[%>");
7108
7109   /* Record default capture mode.  "[&" "[=" "[&," "[=,"  */
7110   if (cp_lexer_next_token_is (parser->lexer, CPP_AND)
7111       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_NAME)
7112     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_REFERENCE;
7113   else if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
7114     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_COPY;
7115
7116   if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE)
7117     {
7118       cp_lexer_consume_token (parser->lexer);
7119       first = false;
7120     }
7121
7122   while (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_SQUARE))
7123     {
7124       cp_token* capture_token;
7125       tree capture_id;
7126       tree capture_init_expr;
7127       cp_id_kind idk = CP_ID_KIND_NONE;
7128       bool explicit_init_p = false;
7129
7130       enum capture_kind_type
7131       {
7132         BY_COPY,
7133         BY_REFERENCE
7134       };
7135       enum capture_kind_type capture_kind = BY_COPY;
7136
7137       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
7138         {
7139           error ("expected end of capture-list");
7140           return;
7141         }
7142
7143       if (first)
7144         first = false;
7145       else
7146         cp_parser_require (parser, CPP_COMMA, "%<,%>");
7147
7148       /* Possibly capture `this'.  */
7149       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THIS))
7150         {
7151           cp_lexer_consume_token (parser->lexer);
7152           add_capture (lambda_expr,
7153                        /*id=*/get_identifier ("__this"),
7154                        /*initializer=*/finish_this_expr(),
7155                        /*by_reference_p=*/false,
7156                        explicit_init_p);
7157           continue;
7158         }
7159
7160       /* Remember whether we want to capture as a reference or not.  */
7161       if (cp_lexer_next_token_is (parser->lexer, CPP_AND))
7162         {
7163           capture_kind = BY_REFERENCE;
7164           cp_lexer_consume_token (parser->lexer);
7165         }
7166
7167       /* Get the identifier.  */
7168       capture_token = cp_lexer_peek_token (parser->lexer);
7169       capture_id = cp_parser_identifier (parser);
7170
7171       if (capture_id == error_mark_node)
7172         /* Would be nice to have a cp_parser_skip_to_closing_x for general
7173            delimiters, but I modified this to stop on unnested ']' as well.  It
7174            was already changed to stop on unnested '}', so the
7175            "closing_parenthesis" name is no more misleading with my change.  */
7176         {
7177           cp_parser_skip_to_closing_parenthesis (parser,
7178                                                  /*recovering=*/true,
7179                                                  /*or_comma=*/true,
7180                                                  /*consume_paren=*/true);
7181           break;
7182         }
7183
7184       /* Find the initializer for this capture.  */
7185       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
7186         {
7187           /* An explicit expression exists.  */
7188           cp_lexer_consume_token (parser->lexer);
7189           pedwarn (input_location, OPT_pedantic,
7190                    "ISO C++ does not allow initializers "
7191                    "in lambda expression capture lists");
7192           capture_init_expr = cp_parser_assignment_expression (parser,
7193                                                                /*cast_p=*/true,
7194                                                                &idk);
7195           explicit_init_p = true;
7196         }
7197       else
7198         {
7199           const char* error_msg;
7200
7201           /* Turn the identifier into an id-expression.  */
7202           capture_init_expr
7203             = cp_parser_lookup_name
7204                 (parser,
7205                  capture_id,
7206                  none_type,
7207                  /*is_template=*/false,
7208                  /*is_namespace=*/false,
7209                  /*check_dependency=*/true,
7210                  /*ambiguous_decls=*/NULL,
7211                  capture_token->location);
7212
7213           capture_init_expr
7214             = finish_id_expression
7215                 (capture_id,
7216                  capture_init_expr,
7217                  parser->scope,
7218                  &idk,
7219                  /*integral_constant_expression_p=*/false,
7220                  /*allow_non_integral_constant_expression_p=*/false,
7221                  /*non_integral_constant_expression_p=*/NULL,
7222                  /*template_p=*/false,
7223                  /*done=*/true,
7224                  /*address_p=*/false,
7225                  /*template_arg_p=*/false,
7226                  &error_msg,
7227                  capture_token->location);
7228         }
7229
7230       if (TREE_CODE (capture_init_expr) == IDENTIFIER_NODE)
7231         capture_init_expr
7232           = unqualified_name_lookup_error (capture_init_expr);
7233
7234       add_capture (lambda_expr,
7235                    capture_id,
7236                    capture_init_expr,
7237                    /*by_reference_p=*/capture_kind == BY_REFERENCE,
7238                    explicit_init_p);
7239     }
7240
7241   cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
7242 }
7243
7244 /* Parse the (optional) middle of a lambda expression.
7245
7246    lambda-declarator:
7247      ( parameter-declaration-clause [opt] )
7248        attribute-specifier [opt]
7249        mutable [opt]
7250        exception-specification [opt]
7251        lambda-return-type-clause [opt]
7252
7253    LAMBDA_EXPR is the current representation of the lambda expression.  */
7254
7255 static void
7256 cp_parser_lambda_declarator_opt (cp_parser* parser, tree lambda_expr)
7257 {
7258   /* 5.1.1.4 of the standard says:
7259        If a lambda-expression does not include a lambda-declarator, it is as if
7260        the lambda-declarator were ().
7261      This means an empty parameter list, no attributes, and no exception
7262      specification.  */
7263   tree param_list = void_list_node;
7264   tree attributes = NULL_TREE;
7265   tree exception_spec = NULL_TREE;
7266   tree t;
7267
7268   /* The lambda-declarator is optional, but must begin with an opening
7269      parenthesis if present.  */
7270   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7271     {
7272       cp_lexer_consume_token (parser->lexer);
7273
7274       begin_scope (sk_function_parms, /*entity=*/NULL_TREE);
7275
7276       /* Parse parameters.  */
7277       param_list = cp_parser_parameter_declaration_clause (parser);
7278
7279       /* Default arguments shall not be specified in the
7280          parameter-declaration-clause of a lambda-declarator.  */
7281       for (t = param_list; t; t = TREE_CHAIN (t))
7282         if (TREE_PURPOSE (t))
7283           pedwarn (DECL_SOURCE_LOCATION (TREE_VALUE (t)), OPT_pedantic,
7284                    "default argument specified for lambda parameter");
7285
7286       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7287
7288       attributes = cp_parser_attributes_opt (parser);
7289
7290       /* Parse optional `mutable' keyword.  */
7291       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_MUTABLE))
7292         {
7293           cp_lexer_consume_token (parser->lexer);
7294           LAMBDA_EXPR_MUTABLE_P (lambda_expr) = 1;
7295         }
7296
7297       /* Parse optional exception specification.  */
7298       exception_spec = cp_parser_exception_specification_opt (parser);
7299
7300       /* Parse optional trailing return type.  */
7301       if (cp_lexer_next_token_is (parser->lexer, CPP_DEREF))
7302         {
7303           cp_lexer_consume_token (parser->lexer);
7304           LAMBDA_EXPR_RETURN_TYPE (lambda_expr) = cp_parser_type_id (parser);
7305         }
7306
7307       /* The function parameters must be in scope all the way until after the
7308          trailing-return-type in case of decltype.  */
7309       for (t = current_binding_level->names; t; t = TREE_CHAIN (t))
7310         pop_binding (DECL_NAME (t), t);
7311
7312       leave_scope ();
7313     }
7314
7315   /* Create the function call operator.
7316
7317      Messing with declarators like this is no uglier than building up the
7318      FUNCTION_DECL by hand, and this is less likely to get out of sync with
7319      other code.  */
7320   {
7321     cp_decl_specifier_seq return_type_specs;
7322     cp_declarator* declarator;
7323     tree fco;
7324     int quals;
7325     void *p;
7326
7327     clear_decl_specs (&return_type_specs);
7328     if (LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
7329       return_type_specs.type = LAMBDA_EXPR_RETURN_TYPE (lambda_expr);
7330     else
7331       /* Maybe we will deduce the return type later, but we can use void
7332          as a placeholder return type anyways.  */
7333       return_type_specs.type = void_type_node;
7334
7335     p = obstack_alloc (&declarator_obstack, 0);
7336
7337     declarator = make_id_declarator (NULL_TREE, ansi_opname (CALL_EXPR),
7338                                      sfk_none);
7339
7340     quals = (LAMBDA_EXPR_MUTABLE_P (lambda_expr)
7341              ? TYPE_UNQUALIFIED : TYPE_QUAL_CONST);
7342     declarator = make_call_declarator (declarator, param_list, quals,
7343                                        exception_spec,
7344                                        /*late_return_type=*/NULL_TREE);
7345
7346     fco = grokmethod (&return_type_specs,
7347                         declarator,
7348                         attributes);
7349     DECL_INITIALIZED_IN_CLASS_P (fco) = 1;
7350     DECL_ARTIFICIAL (fco) = 1;
7351
7352     finish_member_declaration (fco);
7353
7354     obstack_free (&declarator_obstack, p);
7355   }
7356 }
7357
7358 /* Parse the body of a lambda expression, which is simply
7359
7360    compound-statement
7361
7362    but which requires special handling.
7363    LAMBDA_EXPR is the current representation of the lambda expression.  */
7364
7365 static void
7366 cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
7367 {
7368   bool nested = (current_function_decl != NULL_TREE);
7369   if (nested)
7370     push_function_context ();
7371
7372   /* Finish the function call operator
7373      - class_specifier
7374      + late_parsing_for_member
7375      + function_definition_after_declarator
7376      + ctor_initializer_opt_and_function_body  */
7377   {
7378     tree fco = lambda_function (lambda_expr);
7379     tree body;
7380     bool done = false;
7381
7382     /* Let the front end know that we are going to be defining this
7383        function.  */
7384     start_preparsed_function (fco,
7385                               NULL_TREE,
7386                               SF_PRE_PARSED | SF_INCLASS_INLINE);
7387
7388     start_lambda_scope (fco);
7389     body = begin_function_body ();
7390
7391     /* 5.1.1.4 of the standard says:
7392          If a lambda-expression does not include a trailing-return-type, it
7393          is as if the trailing-return-type denotes the following type:
7394           * if the compound-statement is of the form
7395                { return attribute-specifier [opt] expression ; }
7396              the type of the returned expression after lvalue-to-rvalue
7397              conversion (_conv.lval_ 4.1), array-to-pointer conversion
7398              (_conv.array_ 4.2), and function-to-pointer conversion
7399              (_conv.func_ 4.3);
7400           * otherwise, void.  */
7401
7402     /* In a lambda that has neither a lambda-return-type-clause
7403        nor a deducible form, errors should be reported for return statements
7404        in the body.  Since we used void as the placeholder return type, parsing
7405        the body as usual will give such desired behavior.  */
7406     if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr)
7407         && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
7408         && cp_lexer_peek_nth_token (parser->lexer, 2)->keyword == RID_RETURN
7409         && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_SEMICOLON)
7410       {
7411         tree compound_stmt;
7412         tree expr = NULL_TREE;
7413         cp_id_kind idk = CP_ID_KIND_NONE;
7414
7415         /* Parse tentatively in case there's more after the initial return
7416            statement.  */
7417         cp_parser_parse_tentatively (parser);
7418
7419         cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
7420         cp_parser_require_keyword (parser, RID_RETURN, "%<return%>");
7421
7422         expr = cp_parser_expression (parser, /*cast_p=*/false, &idk);
7423
7424         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7425         cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
7426
7427         if (cp_parser_parse_definitely (parser))
7428           {
7429             apply_lambda_return_type (lambda_expr, lambda_return_type (expr));
7430
7431             compound_stmt = begin_compound_stmt (0);
7432             /* Will get error here if type not deduced yet.  */
7433             finish_return_stmt (expr);
7434             finish_compound_stmt (compound_stmt);
7435
7436             done = true;
7437           }
7438       }
7439
7440     if (!done)
7441       {
7442         if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
7443           LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = true;
7444         /* TODO: does begin_compound_stmt want BCS_FN_BODY?
7445            cp_parser_compound_stmt does not pass it.  */
7446         cp_parser_function_body (parser);
7447         LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = false;
7448       }
7449
7450     finish_function_body (body);
7451     finish_lambda_scope ();
7452
7453     /* Finish the function and generate code for it if necessary.  */
7454     expand_or_defer_fn (finish_function (/*inline*/2));
7455   }
7456
7457   if (nested)
7458     pop_function_context();
7459 }
7460
7461 /* Statements [gram.stmt.stmt]  */
7462
7463 /* Parse a statement.
7464
7465    statement:
7466      labeled-statement
7467      expression-statement
7468      compound-statement
7469      selection-statement
7470      iteration-statement
7471      jump-statement
7472      declaration-statement
7473      try-block
7474
7475   IN_COMPOUND is true when the statement is nested inside a
7476   cp_parser_compound_statement; this matters for certain pragmas.
7477
7478   If IF_P is not NULL, *IF_P is set to indicate whether the statement
7479   is a (possibly labeled) if statement which is not enclosed in braces
7480   and has an else clause.  This is used to implement -Wparentheses.  */
7481
7482 static void
7483 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
7484                      bool in_compound, bool *if_p)
7485 {
7486   tree statement;
7487   cp_token *token;
7488   location_t statement_location;
7489
7490  restart:
7491   if (if_p != NULL)
7492     *if_p = false;
7493   /* There is no statement yet.  */
7494   statement = NULL_TREE;
7495   /* Peek at the next token.  */
7496   token = cp_lexer_peek_token (parser->lexer);
7497   /* Remember the location of the first token in the statement.  */
7498   statement_location = token->location;
7499   /* If this is a keyword, then that will often determine what kind of
7500      statement we have.  */
7501   if (token->type == CPP_KEYWORD)
7502     {
7503       enum rid keyword = token->keyword;
7504
7505       switch (keyword)
7506         {
7507         case RID_CASE:
7508         case RID_DEFAULT:
7509           /* Looks like a labeled-statement with a case label.
7510              Parse the label, and then use tail recursion to parse
7511              the statement.  */
7512           cp_parser_label_for_labeled_statement (parser);
7513           goto restart;
7514
7515         case RID_IF:
7516         case RID_SWITCH:
7517           statement = cp_parser_selection_statement (parser, if_p);
7518           break;
7519
7520         case RID_WHILE:
7521         case RID_DO:
7522         case RID_FOR:
7523           statement = cp_parser_iteration_statement (parser);
7524           break;
7525
7526         case RID_BREAK:
7527         case RID_CONTINUE:
7528         case RID_RETURN:
7529         case RID_GOTO:
7530           statement = cp_parser_jump_statement (parser);
7531           break;
7532
7533           /* Objective-C++ exception-handling constructs.  */
7534         case RID_AT_TRY:
7535         case RID_AT_CATCH:
7536         case RID_AT_FINALLY:
7537         case RID_AT_SYNCHRONIZED:
7538         case RID_AT_THROW:
7539           statement = cp_parser_objc_statement (parser);
7540           break;
7541
7542         case RID_TRY:
7543           statement = cp_parser_try_block (parser);
7544           break;
7545
7546         case RID_NAMESPACE:
7547           /* This must be a namespace alias definition.  */
7548           cp_parser_declaration_statement (parser);
7549           return;
7550           
7551         default:
7552           /* It might be a keyword like `int' that can start a
7553              declaration-statement.  */
7554           break;
7555         }
7556     }
7557   else if (token->type == CPP_NAME)
7558     {
7559       /* If the next token is a `:', then we are looking at a
7560          labeled-statement.  */
7561       token = cp_lexer_peek_nth_token (parser->lexer, 2);
7562       if (token->type == CPP_COLON)
7563         {
7564           /* Looks like a labeled-statement with an ordinary label.
7565              Parse the label, and then use tail recursion to parse
7566              the statement.  */
7567           cp_parser_label_for_labeled_statement (parser);
7568           goto restart;
7569         }
7570     }
7571   /* Anything that starts with a `{' must be a compound-statement.  */
7572   else if (token->type == CPP_OPEN_BRACE)
7573     statement = cp_parser_compound_statement (parser, NULL, false);
7574   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
7575      a statement all its own.  */
7576   else if (token->type == CPP_PRAGMA)
7577     {
7578       /* Only certain OpenMP pragmas are attached to statements, and thus
7579          are considered statements themselves.  All others are not.  In
7580          the context of a compound, accept the pragma as a "statement" and
7581          return so that we can check for a close brace.  Otherwise we
7582          require a real statement and must go back and read one.  */
7583       if (in_compound)
7584         cp_parser_pragma (parser, pragma_compound);
7585       else if (!cp_parser_pragma (parser, pragma_stmt))
7586         goto restart;
7587       return;
7588     }
7589   else if (token->type == CPP_EOF)
7590     {
7591       cp_parser_error (parser, "expected statement");
7592       return;
7593     }
7594
7595   /* Everything else must be a declaration-statement or an
7596      expression-statement.  Try for the declaration-statement
7597      first, unless we are looking at a `;', in which case we know that
7598      we have an expression-statement.  */
7599   if (!statement)
7600     {
7601       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7602         {
7603           cp_parser_parse_tentatively (parser);
7604           /* Try to parse the declaration-statement.  */
7605           cp_parser_declaration_statement (parser);
7606           /* If that worked, we're done.  */
7607           if (cp_parser_parse_definitely (parser))
7608             return;
7609         }
7610       /* Look for an expression-statement instead.  */
7611       statement = cp_parser_expression_statement (parser, in_statement_expr);
7612     }
7613
7614   /* Set the line number for the statement.  */
7615   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
7616     SET_EXPR_LOCATION (statement, statement_location);
7617 }
7618
7619 /* Parse the label for a labeled-statement, i.e.
7620
7621    identifier :
7622    case constant-expression :
7623    default :
7624
7625    GNU Extension:
7626    case constant-expression ... constant-expression : statement
7627
7628    When a label is parsed without errors, the label is added to the
7629    parse tree by the finish_* functions, so this function doesn't
7630    have to return the label.  */
7631
7632 static void
7633 cp_parser_label_for_labeled_statement (cp_parser* parser)
7634 {
7635   cp_token *token;
7636   tree label = NULL_TREE;
7637
7638   /* The next token should be an identifier.  */
7639   token = cp_lexer_peek_token (parser->lexer);
7640   if (token->type != CPP_NAME
7641       && token->type != CPP_KEYWORD)
7642     {
7643       cp_parser_error (parser, "expected labeled-statement");
7644       return;
7645     }
7646
7647   switch (token->keyword)
7648     {
7649     case RID_CASE:
7650       {
7651         tree expr, expr_hi;
7652         cp_token *ellipsis;
7653
7654         /* Consume the `case' token.  */
7655         cp_lexer_consume_token (parser->lexer);
7656         /* Parse the constant-expression.  */
7657         expr = cp_parser_constant_expression (parser,
7658                                               /*allow_non_constant_p=*/false,
7659                                               NULL);
7660
7661         ellipsis = cp_lexer_peek_token (parser->lexer);
7662         if (ellipsis->type == CPP_ELLIPSIS)
7663           {
7664             /* Consume the `...' token.  */
7665             cp_lexer_consume_token (parser->lexer);
7666             expr_hi =
7667               cp_parser_constant_expression (parser,
7668                                              /*allow_non_constant_p=*/false,
7669                                              NULL);
7670             /* We don't need to emit warnings here, as the common code
7671                will do this for us.  */
7672           }
7673         else
7674           expr_hi = NULL_TREE;
7675
7676         if (parser->in_switch_statement_p)
7677           finish_case_label (token->location, expr, expr_hi);
7678         else
7679           error_at (token->location,
7680                     "case label %qE not within a switch statement",
7681                     expr);
7682       }
7683       break;
7684
7685     case RID_DEFAULT:
7686       /* Consume the `default' token.  */
7687       cp_lexer_consume_token (parser->lexer);
7688
7689       if (parser->in_switch_statement_p)
7690         finish_case_label (token->location, NULL_TREE, NULL_TREE);
7691       else
7692         error_at (token->location, "case label not within a switch statement");
7693       break;
7694
7695     default:
7696       /* Anything else must be an ordinary label.  */
7697       label = finish_label_stmt (cp_parser_identifier (parser));
7698       break;
7699     }
7700
7701   /* Require the `:' token.  */
7702   cp_parser_require (parser, CPP_COLON, "%<:%>");
7703
7704   /* An ordinary label may optionally be followed by attributes.
7705      However, this is only permitted if the attributes are then
7706      followed by a semicolon.  This is because, for backward
7707      compatibility, when parsing
7708        lab: __attribute__ ((unused)) int i;
7709      we want the attribute to attach to "i", not "lab".  */
7710   if (label != NULL_TREE
7711       && cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
7712     {
7713       tree attrs;
7714
7715       cp_parser_parse_tentatively (parser);
7716       attrs = cp_parser_attributes_opt (parser);
7717       if (attrs == NULL_TREE
7718           || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7719         cp_parser_abort_tentative_parse (parser);
7720       else if (!cp_parser_parse_definitely (parser))
7721         ;
7722       else
7723         cplus_decl_attributes (&label, attrs, 0);
7724     }
7725 }
7726
7727 /* Parse an expression-statement.
7728
7729    expression-statement:
7730      expression [opt] ;
7731
7732    Returns the new EXPR_STMT -- or NULL_TREE if the expression
7733    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
7734    indicates whether this expression-statement is part of an
7735    expression statement.  */
7736
7737 static tree
7738 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
7739 {
7740   tree statement = NULL_TREE;
7741
7742   /* If the next token is a ';', then there is no expression
7743      statement.  */
7744   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7745     statement = cp_parser_expression (parser, /*cast_p=*/false, NULL);
7746
7747   /* Consume the final `;'.  */
7748   cp_parser_consume_semicolon_at_end_of_statement (parser);
7749
7750   if (in_statement_expr
7751       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
7752     /* This is the final expression statement of a statement
7753        expression.  */
7754     statement = finish_stmt_expr_expr (statement, in_statement_expr);
7755   else if (statement)
7756     statement = finish_expr_stmt (statement);
7757   else
7758     finish_stmt ();
7759
7760   return statement;
7761 }
7762
7763 /* Parse a compound-statement.
7764
7765    compound-statement:
7766      { statement-seq [opt] }
7767
7768    GNU extension:
7769
7770    compound-statement:
7771      { label-declaration-seq [opt] statement-seq [opt] }
7772
7773    label-declaration-seq:
7774      label-declaration
7775      label-declaration-seq label-declaration
7776
7777    Returns a tree representing the statement.  */
7778
7779 static tree
7780 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
7781                               bool in_try)
7782 {
7783   tree compound_stmt;
7784
7785   /* Consume the `{'.  */
7786   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
7787     return error_mark_node;
7788   /* Begin the compound-statement.  */
7789   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
7790   /* If the next keyword is `__label__' we have a label declaration.  */
7791   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
7792     cp_parser_label_declaration (parser);
7793   /* Parse an (optional) statement-seq.  */
7794   cp_parser_statement_seq_opt (parser, in_statement_expr);
7795   /* Finish the compound-statement.  */
7796   finish_compound_stmt (compound_stmt);
7797   /* Consume the `}'.  */
7798   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
7799
7800   return compound_stmt;
7801 }
7802
7803 /* Parse an (optional) statement-seq.
7804
7805    statement-seq:
7806      statement
7807      statement-seq [opt] statement  */
7808
7809 static void
7810 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
7811 {
7812   /* Scan statements until there aren't any more.  */
7813   while (true)
7814     {
7815       cp_token *token = cp_lexer_peek_token (parser->lexer);
7816
7817       /* If we're looking at a `}', then we've run out of statements.  */
7818       if (token->type == CPP_CLOSE_BRACE
7819           || token->type == CPP_EOF
7820           || token->type == CPP_PRAGMA_EOL)
7821         break;
7822       
7823       /* If we are in a compound statement and find 'else' then
7824          something went wrong.  */
7825       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
7826         {
7827           if (parser->in_statement & IN_IF_STMT) 
7828             break;
7829           else
7830             {
7831               token = cp_lexer_consume_token (parser->lexer);
7832               error_at (token->location, "%<else%> without a previous %<if%>");
7833             }
7834         }
7835
7836       /* Parse the statement.  */
7837       cp_parser_statement (parser, in_statement_expr, true, NULL);
7838     }
7839 }
7840
7841 /* Parse a selection-statement.
7842
7843    selection-statement:
7844      if ( condition ) statement
7845      if ( condition ) statement else statement
7846      switch ( condition ) statement
7847
7848    Returns the new IF_STMT or SWITCH_STMT.
7849
7850    If IF_P is not NULL, *IF_P is set to indicate whether the statement
7851    is a (possibly labeled) if statement which is not enclosed in
7852    braces and has an else clause.  This is used to implement
7853    -Wparentheses.  */
7854
7855 static tree
7856 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
7857 {
7858   cp_token *token;
7859   enum rid keyword;
7860
7861   if (if_p != NULL)
7862     *if_p = false;
7863
7864   /* Peek at the next token.  */
7865   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
7866
7867   /* See what kind of keyword it is.  */
7868   keyword = token->keyword;
7869   switch (keyword)
7870     {
7871     case RID_IF:
7872     case RID_SWITCH:
7873       {
7874         tree statement;
7875         tree condition;
7876
7877         /* Look for the `('.  */
7878         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
7879           {
7880             cp_parser_skip_to_end_of_statement (parser);
7881             return error_mark_node;
7882           }
7883
7884         /* Begin the selection-statement.  */
7885         if (keyword == RID_IF)
7886           statement = begin_if_stmt ();
7887         else
7888           statement = begin_switch_stmt ();
7889
7890         /* Parse the condition.  */
7891         condition = cp_parser_condition (parser);
7892         /* Look for the `)'.  */
7893         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
7894           cp_parser_skip_to_closing_parenthesis (parser, true, false,
7895                                                  /*consume_paren=*/true);
7896
7897         if (keyword == RID_IF)
7898           {
7899             bool nested_if;
7900             unsigned char in_statement;
7901
7902             /* Add the condition.  */
7903             finish_if_stmt_cond (condition, statement);
7904
7905             /* Parse the then-clause.  */
7906             in_statement = parser->in_statement;
7907             parser->in_statement |= IN_IF_STMT;
7908             if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7909               {
7910                 location_t loc = cp_lexer_peek_token (parser->lexer)->location;
7911                 add_stmt (build_empty_stmt (loc));
7912                 cp_lexer_consume_token (parser->lexer);
7913                 if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
7914                   warning_at (loc, OPT_Wempty_body, "suggest braces around "
7915                               "empty body in an %<if%> statement");
7916                 nested_if = false;
7917               }
7918             else
7919               cp_parser_implicitly_scoped_statement (parser, &nested_if);
7920             parser->in_statement = in_statement;
7921
7922             finish_then_clause (statement);
7923
7924             /* If the next token is `else', parse the else-clause.  */
7925             if (cp_lexer_next_token_is_keyword (parser->lexer,
7926                                                 RID_ELSE))
7927               {
7928                 /* Consume the `else' keyword.  */
7929                 cp_lexer_consume_token (parser->lexer);
7930                 begin_else_clause (statement);
7931                 /* Parse the else-clause.  */
7932                 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7933                   {
7934                     location_t loc;
7935                     loc = cp_lexer_peek_token (parser->lexer)->location;
7936                     warning_at (loc,
7937                                 OPT_Wempty_body, "suggest braces around "
7938                                 "empty body in an %<else%> statement");
7939                     add_stmt (build_empty_stmt (loc));
7940                     cp_lexer_consume_token (parser->lexer);
7941                   }
7942                 else
7943                   cp_parser_implicitly_scoped_statement (parser, NULL);
7944
7945                 finish_else_clause (statement);
7946
7947                 /* If we are currently parsing a then-clause, then
7948                    IF_P will not be NULL.  We set it to true to
7949                    indicate that this if statement has an else clause.
7950                    This may trigger the Wparentheses warning below
7951                    when we get back up to the parent if statement.  */
7952                 if (if_p != NULL)
7953                   *if_p = true;
7954               }
7955             else
7956               {
7957                 /* This if statement does not have an else clause.  If
7958                    NESTED_IF is true, then the then-clause is an if
7959                    statement which does have an else clause.  We warn
7960                    about the potential ambiguity.  */
7961                 if (nested_if)
7962                   warning_at (EXPR_LOCATION (statement), OPT_Wparentheses,
7963                               "suggest explicit braces to avoid ambiguous"
7964                               " %<else%>");
7965               }
7966
7967             /* Now we're all done with the if-statement.  */
7968             finish_if_stmt (statement);
7969           }
7970         else
7971           {
7972             bool in_switch_statement_p;
7973             unsigned char in_statement;
7974
7975             /* Add the condition.  */
7976             finish_switch_cond (condition, statement);
7977
7978             /* Parse the body of the switch-statement.  */
7979             in_switch_statement_p = parser->in_switch_statement_p;
7980             in_statement = parser->in_statement;
7981             parser->in_switch_statement_p = true;
7982             parser->in_statement |= IN_SWITCH_STMT;
7983             cp_parser_implicitly_scoped_statement (parser, NULL);
7984             parser->in_switch_statement_p = in_switch_statement_p;
7985             parser->in_statement = in_statement;
7986
7987             /* Now we're all done with the switch-statement.  */
7988             finish_switch_stmt (statement);
7989           }
7990
7991         return statement;
7992       }
7993       break;
7994
7995     default:
7996       cp_parser_error (parser, "expected selection-statement");
7997       return error_mark_node;
7998     }
7999 }
8000
8001 /* Parse a condition.
8002
8003    condition:
8004      expression
8005      type-specifier-seq declarator = initializer-clause
8006      type-specifier-seq declarator braced-init-list
8007
8008    GNU Extension:
8009
8010    condition:
8011      type-specifier-seq declarator asm-specification [opt]
8012        attributes [opt] = assignment-expression
8013
8014    Returns the expression that should be tested.  */
8015
8016 static tree
8017 cp_parser_condition (cp_parser* parser)
8018 {
8019   cp_decl_specifier_seq type_specifiers;
8020   const char *saved_message;
8021
8022   /* Try the declaration first.  */
8023   cp_parser_parse_tentatively (parser);
8024   /* New types are not allowed in the type-specifier-seq for a
8025      condition.  */
8026   saved_message = parser->type_definition_forbidden_message;
8027   parser->type_definition_forbidden_message
8028     = "types may not be defined in conditions";
8029   /* Parse the type-specifier-seq.  */
8030   cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
8031                                 &type_specifiers);
8032   /* Restore the saved message.  */
8033   parser->type_definition_forbidden_message = saved_message;
8034   /* If all is well, we might be looking at a declaration.  */
8035   if (!cp_parser_error_occurred (parser))
8036     {
8037       tree decl;
8038       tree asm_specification;
8039       tree attributes;
8040       cp_declarator *declarator;
8041       tree initializer = NULL_TREE;
8042
8043       /* Parse the declarator.  */
8044       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
8045                                          /*ctor_dtor_or_conv_p=*/NULL,
8046                                          /*parenthesized_p=*/NULL,
8047                                          /*member_p=*/false);
8048       /* Parse the attributes.  */
8049       attributes = cp_parser_attributes_opt (parser);
8050       /* Parse the asm-specification.  */
8051       asm_specification = cp_parser_asm_specification_opt (parser);
8052       /* If the next token is not an `=' or '{', then we might still be
8053          looking at an expression.  For example:
8054
8055            if (A(a).x)
8056
8057          looks like a decl-specifier-seq and a declarator -- but then
8058          there is no `=', so this is an expression.  */
8059       if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8060           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
8061         cp_parser_simulate_error (parser);
8062         
8063       /* If we did see an `=' or '{', then we are looking at a declaration
8064          for sure.  */
8065       if (cp_parser_parse_definitely (parser))
8066         {
8067           tree pushed_scope;
8068           bool non_constant_p;
8069           bool flags = LOOKUP_ONLYCONVERTING;
8070
8071           /* Create the declaration.  */
8072           decl = start_decl (declarator, &type_specifiers,
8073                              /*initialized_p=*/true,
8074                              attributes, /*prefix_attributes=*/NULL_TREE,
8075                              &pushed_scope);
8076
8077           /* Parse the initializer.  */
8078           if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8079             {
8080               initializer = cp_parser_braced_list (parser, &non_constant_p);
8081               CONSTRUCTOR_IS_DIRECT_INIT (initializer) = 1;
8082               flags = 0;
8083             }
8084           else
8085             {
8086               /* Consume the `='.  */
8087               cp_parser_require (parser, CPP_EQ, "%<=%>");
8088               initializer = cp_parser_initializer_clause (parser, &non_constant_p);
8089             }
8090           if (BRACE_ENCLOSED_INITIALIZER_P (initializer))
8091             maybe_warn_cpp0x ("extended initializer lists");
8092
8093           if (!non_constant_p)
8094             initializer = fold_non_dependent_expr (initializer);
8095
8096           /* Process the initializer.  */
8097           cp_finish_decl (decl,
8098                           initializer, !non_constant_p,
8099                           asm_specification,
8100                           flags);
8101
8102           if (pushed_scope)
8103             pop_scope (pushed_scope);
8104
8105           return convert_from_reference (decl);
8106         }
8107     }
8108   /* If we didn't even get past the declarator successfully, we are
8109      definitely not looking at a declaration.  */
8110   else
8111     cp_parser_abort_tentative_parse (parser);
8112
8113   /* Otherwise, we are looking at an expression.  */
8114   return cp_parser_expression (parser, /*cast_p=*/false, NULL);
8115 }
8116
8117 /* Parse an iteration-statement.
8118
8119    iteration-statement:
8120      while ( condition ) statement
8121      do statement while ( expression ) ;
8122      for ( for-init-statement condition [opt] ; expression [opt] )
8123        statement
8124
8125    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
8126
8127 static tree
8128 cp_parser_iteration_statement (cp_parser* parser)
8129 {
8130   cp_token *token;
8131   enum rid keyword;
8132   tree statement;
8133   unsigned char in_statement;
8134
8135   /* Peek at the next token.  */
8136   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
8137   if (!token)
8138     return error_mark_node;
8139
8140   /* Remember whether or not we are already within an iteration
8141      statement.  */
8142   in_statement = parser->in_statement;
8143
8144   /* See what kind of keyword it is.  */
8145   keyword = token->keyword;
8146   switch (keyword)
8147     {
8148     case RID_WHILE:
8149       {
8150         tree condition;
8151
8152         /* Begin the while-statement.  */
8153         statement = begin_while_stmt ();
8154         /* Look for the `('.  */
8155         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
8156         /* Parse the condition.  */
8157         condition = cp_parser_condition (parser);
8158         finish_while_stmt_cond (condition, statement);
8159         /* Look for the `)'.  */
8160         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
8161         /* Parse the dependent statement.  */
8162         parser->in_statement = IN_ITERATION_STMT;
8163         cp_parser_already_scoped_statement (parser);
8164         parser->in_statement = in_statement;
8165         /* We're done with the while-statement.  */
8166         finish_while_stmt (statement);
8167       }
8168       break;
8169
8170     case RID_DO:
8171       {
8172         tree expression;
8173
8174         /* Begin the do-statement.  */
8175         statement = begin_do_stmt ();
8176         /* Parse the body of the do-statement.  */
8177         parser->in_statement = IN_ITERATION_STMT;
8178         cp_parser_implicitly_scoped_statement (parser, NULL);
8179         parser->in_statement = in_statement;
8180         finish_do_body (statement);
8181         /* Look for the `while' keyword.  */
8182         cp_parser_require_keyword (parser, RID_WHILE, "%<while%>");
8183         /* Look for the `('.  */
8184         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
8185         /* Parse the expression.  */
8186         expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8187         /* We're done with the do-statement.  */
8188         finish_do_stmt (expression, statement);
8189         /* Look for the `)'.  */
8190         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
8191         /* Look for the `;'.  */
8192         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8193       }
8194       break;
8195
8196     case RID_FOR:
8197       {
8198         tree condition = NULL_TREE;
8199         tree expression = NULL_TREE;
8200
8201         /* Begin the for-statement.  */
8202         statement = begin_for_stmt ();
8203         /* Look for the `('.  */
8204         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
8205         /* Parse the initialization.  */
8206         cp_parser_for_init_statement (parser);
8207         finish_for_init_stmt (statement);
8208
8209         /* If there's a condition, process it.  */
8210         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8211           condition = cp_parser_condition (parser);
8212         finish_for_cond (condition, statement);
8213         /* Look for the `;'.  */
8214         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8215
8216         /* If there's an expression, process it.  */
8217         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
8218           expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8219         finish_for_expr (expression, statement);
8220         /* Look for the `)'.  */
8221         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
8222
8223         /* Parse the body of the for-statement.  */
8224         parser->in_statement = IN_ITERATION_STMT;
8225         cp_parser_already_scoped_statement (parser);
8226         parser->in_statement = in_statement;
8227
8228         /* We're done with the for-statement.  */
8229         finish_for_stmt (statement);
8230       }
8231       break;
8232
8233     default:
8234       cp_parser_error (parser, "expected iteration-statement");
8235       statement = error_mark_node;
8236       break;
8237     }
8238
8239   return statement;
8240 }
8241
8242 /* Parse a for-init-statement.
8243
8244    for-init-statement:
8245      expression-statement
8246      simple-declaration  */
8247
8248 static void
8249 cp_parser_for_init_statement (cp_parser* parser)
8250 {
8251   /* If the next token is a `;', then we have an empty
8252      expression-statement.  Grammatically, this is also a
8253      simple-declaration, but an invalid one, because it does not
8254      declare anything.  Therefore, if we did not handle this case
8255      specially, we would issue an error message about an invalid
8256      declaration.  */
8257   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8258     {
8259       /* We're going to speculatively look for a declaration, falling back
8260          to an expression, if necessary.  */
8261       cp_parser_parse_tentatively (parser);
8262       /* Parse the declaration.  */
8263       cp_parser_simple_declaration (parser,
8264                                     /*function_definition_allowed_p=*/false);
8265       /* If the tentative parse failed, then we shall need to look for an
8266          expression-statement.  */
8267       if (cp_parser_parse_definitely (parser))
8268         return;
8269     }
8270
8271   cp_parser_expression_statement (parser, false);
8272 }
8273
8274 /* Parse a jump-statement.
8275
8276    jump-statement:
8277      break ;
8278      continue ;
8279      return expression [opt] ;
8280      return braced-init-list ;
8281      goto identifier ;
8282
8283    GNU extension:
8284
8285    jump-statement:
8286      goto * expression ;
8287
8288    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
8289
8290 static tree
8291 cp_parser_jump_statement (cp_parser* parser)
8292 {
8293   tree statement = error_mark_node;
8294   cp_token *token;
8295   enum rid keyword;
8296   unsigned char in_statement;
8297
8298   /* Peek at the next token.  */
8299   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
8300   if (!token)
8301     return error_mark_node;
8302
8303   /* See what kind of keyword it is.  */
8304   keyword = token->keyword;
8305   switch (keyword)
8306     {
8307     case RID_BREAK:
8308       in_statement = parser->in_statement & ~IN_IF_STMT;      
8309       switch (in_statement)
8310         {
8311         case 0:
8312           error_at (token->location, "break statement not within loop or switch");
8313           break;
8314         default:
8315           gcc_assert ((in_statement & IN_SWITCH_STMT)
8316                       || in_statement == IN_ITERATION_STMT);
8317           statement = finish_break_stmt ();
8318           break;
8319         case IN_OMP_BLOCK:
8320           error_at (token->location, "invalid exit from OpenMP structured block");
8321           break;
8322         case IN_OMP_FOR:
8323           error_at (token->location, "break statement used with OpenMP for loop");
8324           break;
8325         }
8326       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8327       break;
8328
8329     case RID_CONTINUE:
8330       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
8331         {
8332         case 0:
8333           error_at (token->location, "continue statement not within a loop");
8334           break;
8335         case IN_ITERATION_STMT:
8336         case IN_OMP_FOR:
8337           statement = finish_continue_stmt ();
8338           break;
8339         case IN_OMP_BLOCK:
8340           error_at (token->location, "invalid exit from OpenMP structured block");
8341           break;
8342         default:
8343           gcc_unreachable ();
8344         }
8345       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8346       break;
8347
8348     case RID_RETURN:
8349       {
8350         tree expr;
8351         bool expr_non_constant_p;
8352
8353         if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8354           {
8355             maybe_warn_cpp0x ("extended initializer lists");
8356             expr = cp_parser_braced_list (parser, &expr_non_constant_p);
8357           }
8358         else if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8359           expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8360         else
8361           /* If the next token is a `;', then there is no
8362              expression.  */
8363           expr = NULL_TREE;
8364         /* Build the return-statement.  */
8365         statement = finish_return_stmt (expr);
8366         /* Look for the final `;'.  */
8367         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8368       }
8369       break;
8370
8371     case RID_GOTO:
8372       /* Create the goto-statement.  */
8373       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
8374         {
8375           /* Issue a warning about this use of a GNU extension.  */
8376           pedwarn (token->location, OPT_pedantic, "ISO C++ forbids computed gotos");
8377           /* Consume the '*' token.  */
8378           cp_lexer_consume_token (parser->lexer);
8379           /* Parse the dependent expression.  */
8380           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false, NULL));
8381         }
8382       else
8383         finish_goto_stmt (cp_parser_identifier (parser));
8384       /* Look for the final `;'.  */
8385       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8386       break;
8387
8388     default:
8389       cp_parser_error (parser, "expected jump-statement");
8390       break;
8391     }
8392
8393   return statement;
8394 }
8395
8396 /* Parse a declaration-statement.
8397
8398    declaration-statement:
8399      block-declaration  */
8400
8401 static void
8402 cp_parser_declaration_statement (cp_parser* parser)
8403 {
8404   void *p;
8405
8406   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
8407   p = obstack_alloc (&declarator_obstack, 0);
8408
8409  /* Parse the block-declaration.  */
8410   cp_parser_block_declaration (parser, /*statement_p=*/true);
8411
8412   /* Free any declarators allocated.  */
8413   obstack_free (&declarator_obstack, p);
8414
8415   /* Finish off the statement.  */
8416   finish_stmt ();
8417 }
8418
8419 /* Some dependent statements (like `if (cond) statement'), are
8420    implicitly in their own scope.  In other words, if the statement is
8421    a single statement (as opposed to a compound-statement), it is
8422    none-the-less treated as if it were enclosed in braces.  Any
8423    declarations appearing in the dependent statement are out of scope
8424    after control passes that point.  This function parses a statement,
8425    but ensures that is in its own scope, even if it is not a
8426    compound-statement.
8427
8428    If IF_P is not NULL, *IF_P is set to indicate whether the statement
8429    is a (possibly labeled) if statement which is not enclosed in
8430    braces and has an else clause.  This is used to implement
8431    -Wparentheses.
8432
8433    Returns the new statement.  */
8434
8435 static tree
8436 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
8437 {
8438   tree statement;
8439
8440   if (if_p != NULL)
8441     *if_p = false;
8442
8443   /* Mark if () ; with a special NOP_EXPR.  */
8444   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8445     {
8446       location_t loc = cp_lexer_peek_token (parser->lexer)->location;
8447       cp_lexer_consume_token (parser->lexer);
8448       statement = add_stmt (build_empty_stmt (loc));
8449     }
8450   /* if a compound is opened, we simply parse the statement directly.  */
8451   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8452     statement = cp_parser_compound_statement (parser, NULL, false);
8453   /* If the token is not a `{', then we must take special action.  */
8454   else
8455     {
8456       /* Create a compound-statement.  */
8457       statement = begin_compound_stmt (0);
8458       /* Parse the dependent-statement.  */
8459       cp_parser_statement (parser, NULL_TREE, false, if_p);
8460       /* Finish the dummy compound-statement.  */
8461       finish_compound_stmt (statement);
8462     }
8463
8464   /* Return the statement.  */
8465   return statement;
8466 }
8467
8468 /* For some dependent statements (like `while (cond) statement'), we
8469    have already created a scope.  Therefore, even if the dependent
8470    statement is a compound-statement, we do not want to create another
8471    scope.  */
8472
8473 static void
8474 cp_parser_already_scoped_statement (cp_parser* parser)
8475 {
8476   /* If the token is a `{', then we must take special action.  */
8477   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
8478     cp_parser_statement (parser, NULL_TREE, false, NULL);
8479   else
8480     {
8481       /* Avoid calling cp_parser_compound_statement, so that we
8482          don't create a new scope.  Do everything else by hand.  */
8483       cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
8484       /* If the next keyword is `__label__' we have a label declaration.  */
8485       while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
8486         cp_parser_label_declaration (parser);
8487       /* Parse an (optional) statement-seq.  */
8488       cp_parser_statement_seq_opt (parser, NULL_TREE);
8489       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
8490     }
8491 }
8492
8493 /* Declarations [gram.dcl.dcl] */
8494
8495 /* Parse an optional declaration-sequence.
8496
8497    declaration-seq:
8498      declaration
8499      declaration-seq declaration  */
8500
8501 static void
8502 cp_parser_declaration_seq_opt (cp_parser* parser)
8503 {
8504   while (true)
8505     {
8506       cp_token *token;
8507
8508       token = cp_lexer_peek_token (parser->lexer);
8509
8510       if (token->type == CPP_CLOSE_BRACE
8511           || token->type == CPP_EOF
8512           || token->type == CPP_PRAGMA_EOL)
8513         break;
8514
8515       if (token->type == CPP_SEMICOLON)
8516         {
8517           /* A declaration consisting of a single semicolon is
8518              invalid.  Allow it unless we're being pedantic.  */
8519           cp_lexer_consume_token (parser->lexer);
8520           if (!in_system_header)
8521             pedwarn (input_location, OPT_pedantic, "extra %<;%>");
8522           continue;
8523         }
8524
8525       /* If we're entering or exiting a region that's implicitly
8526          extern "C", modify the lang context appropriately.  */
8527       if (!parser->implicit_extern_c && token->implicit_extern_c)
8528         {
8529           push_lang_context (lang_name_c);
8530           parser->implicit_extern_c = true;
8531         }
8532       else if (parser->implicit_extern_c && !token->implicit_extern_c)
8533         {
8534           pop_lang_context ();
8535           parser->implicit_extern_c = false;
8536         }
8537
8538       if (token->type == CPP_PRAGMA)
8539         {
8540           /* A top-level declaration can consist solely of a #pragma.
8541              A nested declaration cannot, so this is done here and not
8542              in cp_parser_declaration.  (A #pragma at block scope is
8543              handled in cp_parser_statement.)  */
8544           cp_parser_pragma (parser, pragma_external);
8545           continue;
8546         }
8547
8548       /* Parse the declaration itself.  */
8549       cp_parser_declaration (parser);
8550     }
8551 }
8552
8553 /* Parse a declaration.
8554
8555    declaration:
8556      block-declaration
8557      function-definition
8558      template-declaration
8559      explicit-instantiation
8560      explicit-specialization
8561      linkage-specification
8562      namespace-definition
8563
8564    GNU extension:
8565
8566    declaration:
8567       __extension__ declaration */
8568
8569 static void
8570 cp_parser_declaration (cp_parser* parser)
8571 {
8572   cp_token token1;
8573   cp_token token2;
8574   int saved_pedantic;
8575   void *p;
8576
8577   /* Check for the `__extension__' keyword.  */
8578   if (cp_parser_extension_opt (parser, &saved_pedantic))
8579     {
8580       /* Parse the qualified declaration.  */
8581       cp_parser_declaration (parser);
8582       /* Restore the PEDANTIC flag.  */
8583       pedantic = saved_pedantic;
8584
8585       return;
8586     }
8587
8588   /* Try to figure out what kind of declaration is present.  */
8589   token1 = *cp_lexer_peek_token (parser->lexer);
8590
8591   if (token1.type != CPP_EOF)
8592     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
8593   else
8594     {
8595       token2.type = CPP_EOF;
8596       token2.keyword = RID_MAX;
8597     }
8598
8599   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
8600   p = obstack_alloc (&declarator_obstack, 0);
8601
8602   /* If the next token is `extern' and the following token is a string
8603      literal, then we have a linkage specification.  */
8604   if (token1.keyword == RID_EXTERN
8605       && cp_parser_is_string_literal (&token2))
8606     cp_parser_linkage_specification (parser);
8607   /* If the next token is `template', then we have either a template
8608      declaration, an explicit instantiation, or an explicit
8609      specialization.  */
8610   else if (token1.keyword == RID_TEMPLATE)
8611     {
8612       /* `template <>' indicates a template specialization.  */
8613       if (token2.type == CPP_LESS
8614           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
8615         cp_parser_explicit_specialization (parser);
8616       /* `template <' indicates a template declaration.  */
8617       else if (token2.type == CPP_LESS)
8618         cp_parser_template_declaration (parser, /*member_p=*/false);
8619       /* Anything else must be an explicit instantiation.  */
8620       else
8621         cp_parser_explicit_instantiation (parser);
8622     }
8623   /* If the next token is `export', then we have a template
8624      declaration.  */
8625   else if (token1.keyword == RID_EXPORT)
8626     cp_parser_template_declaration (parser, /*member_p=*/false);
8627   /* If the next token is `extern', 'static' or 'inline' and the one
8628      after that is `template', we have a GNU extended explicit
8629      instantiation directive.  */
8630   else if (cp_parser_allow_gnu_extensions_p (parser)
8631            && (token1.keyword == RID_EXTERN
8632                || token1.keyword == RID_STATIC
8633                || token1.keyword == RID_INLINE)
8634            && token2.keyword == RID_TEMPLATE)
8635     cp_parser_explicit_instantiation (parser);
8636   /* If the next token is `namespace', check for a named or unnamed
8637      namespace definition.  */
8638   else if (token1.keyword == RID_NAMESPACE
8639            && (/* A named namespace definition.  */
8640                (token2.type == CPP_NAME
8641                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
8642                     != CPP_EQ))
8643                /* An unnamed namespace definition.  */
8644                || token2.type == CPP_OPEN_BRACE
8645                || token2.keyword == RID_ATTRIBUTE))
8646     cp_parser_namespace_definition (parser);
8647   /* An inline (associated) namespace definition.  */
8648   else if (token1.keyword == RID_INLINE
8649            && token2.keyword == RID_NAMESPACE)
8650     cp_parser_namespace_definition (parser);
8651   /* Objective-C++ declaration/definition.  */
8652   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
8653     cp_parser_objc_declaration (parser);
8654   /* We must have either a block declaration or a function
8655      definition.  */
8656   else
8657     /* Try to parse a block-declaration, or a function-definition.  */
8658     cp_parser_block_declaration (parser, /*statement_p=*/false);
8659
8660   /* Free any declarators allocated.  */
8661   obstack_free (&declarator_obstack, p);
8662 }
8663
8664 /* Parse a block-declaration.
8665
8666    block-declaration:
8667      simple-declaration
8668      asm-definition
8669      namespace-alias-definition
8670      using-declaration
8671      using-directive
8672
8673    GNU Extension:
8674
8675    block-declaration:
8676      __extension__ block-declaration
8677
8678    C++0x Extension:
8679
8680    block-declaration:
8681      static_assert-declaration
8682
8683    If STATEMENT_P is TRUE, then this block-declaration is occurring as
8684    part of a declaration-statement.  */
8685
8686 static void
8687 cp_parser_block_declaration (cp_parser *parser,
8688                              bool      statement_p)
8689 {
8690   cp_token *token1;
8691   int saved_pedantic;
8692
8693   /* Check for the `__extension__' keyword.  */
8694   if (cp_parser_extension_opt (parser, &saved_pedantic))
8695     {
8696       /* Parse the qualified declaration.  */
8697       cp_parser_block_declaration (parser, statement_p);
8698       /* Restore the PEDANTIC flag.  */
8699       pedantic = saved_pedantic;
8700
8701       return;
8702     }
8703
8704   /* Peek at the next token to figure out which kind of declaration is
8705      present.  */
8706   token1 = cp_lexer_peek_token (parser->lexer);
8707
8708   /* If the next keyword is `asm', we have an asm-definition.  */
8709   if (token1->keyword == RID_ASM)
8710     {
8711       if (statement_p)
8712         cp_parser_commit_to_tentative_parse (parser);
8713       cp_parser_asm_definition (parser);
8714     }
8715   /* If the next keyword is `namespace', we have a
8716      namespace-alias-definition.  */
8717   else if (token1->keyword == RID_NAMESPACE)
8718     cp_parser_namespace_alias_definition (parser);
8719   /* If the next keyword is `using', we have either a
8720      using-declaration or a using-directive.  */
8721   else if (token1->keyword == RID_USING)
8722     {
8723       cp_token *token2;
8724
8725       if (statement_p)
8726         cp_parser_commit_to_tentative_parse (parser);
8727       /* If the token after `using' is `namespace', then we have a
8728          using-directive.  */
8729       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8730       if (token2->keyword == RID_NAMESPACE)
8731         cp_parser_using_directive (parser);
8732       /* Otherwise, it's a using-declaration.  */
8733       else
8734         cp_parser_using_declaration (parser,
8735                                      /*access_declaration_p=*/false);
8736     }
8737   /* If the next keyword is `__label__' we have a misplaced label
8738      declaration.  */
8739   else if (token1->keyword == RID_LABEL)
8740     {
8741       cp_lexer_consume_token (parser->lexer);
8742       error_at (token1->location, "%<__label__%> not at the beginning of a block");
8743       cp_parser_skip_to_end_of_statement (parser);
8744       /* If the next token is now a `;', consume it.  */
8745       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8746         cp_lexer_consume_token (parser->lexer);
8747     }
8748   /* If the next token is `static_assert' we have a static assertion.  */
8749   else if (token1->keyword == RID_STATIC_ASSERT)
8750     cp_parser_static_assert (parser, /*member_p=*/false);
8751   /* Anything else must be a simple-declaration.  */
8752   else
8753     cp_parser_simple_declaration (parser, !statement_p);
8754 }
8755
8756 /* Parse a simple-declaration.
8757
8758    simple-declaration:
8759      decl-specifier-seq [opt] init-declarator-list [opt] ;
8760
8761    init-declarator-list:
8762      init-declarator
8763      init-declarator-list , init-declarator
8764
8765    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
8766    function-definition as a simple-declaration.  */
8767
8768 static void
8769 cp_parser_simple_declaration (cp_parser* parser,
8770                               bool function_definition_allowed_p)
8771 {
8772   cp_decl_specifier_seq decl_specifiers;
8773   int declares_class_or_enum;
8774   bool saw_declarator;
8775
8776   /* Defer access checks until we know what is being declared; the
8777      checks for names appearing in the decl-specifier-seq should be
8778      done as if we were in the scope of the thing being declared.  */
8779   push_deferring_access_checks (dk_deferred);
8780
8781   /* Parse the decl-specifier-seq.  We have to keep track of whether
8782      or not the decl-specifier-seq declares a named class or
8783      enumeration type, since that is the only case in which the
8784      init-declarator-list is allowed to be empty.
8785
8786      [dcl.dcl]
8787
8788      In a simple-declaration, the optional init-declarator-list can be
8789      omitted only when declaring a class or enumeration, that is when
8790      the decl-specifier-seq contains either a class-specifier, an
8791      elaborated-type-specifier, or an enum-specifier.  */
8792   cp_parser_decl_specifier_seq (parser,
8793                                 CP_PARSER_FLAGS_OPTIONAL,
8794                                 &decl_specifiers,
8795                                 &declares_class_or_enum);
8796   /* We no longer need to defer access checks.  */
8797   stop_deferring_access_checks ();
8798
8799   /* In a block scope, a valid declaration must always have a
8800      decl-specifier-seq.  By not trying to parse declarators, we can
8801      resolve the declaration/expression ambiguity more quickly.  */
8802   if (!function_definition_allowed_p
8803       && !decl_specifiers.any_specifiers_p)
8804     {
8805       cp_parser_error (parser, "expected declaration");
8806       goto done;
8807     }
8808
8809   /* If the next two tokens are both identifiers, the code is
8810      erroneous. The usual cause of this situation is code like:
8811
8812        T t;
8813
8814      where "T" should name a type -- but does not.  */
8815   if (!decl_specifiers.type
8816       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
8817     {
8818       /* If parsing tentatively, we should commit; we really are
8819          looking at a declaration.  */
8820       cp_parser_commit_to_tentative_parse (parser);
8821       /* Give up.  */
8822       goto done;
8823     }
8824
8825   /* If we have seen at least one decl-specifier, and the next token
8826      is not a parenthesis, then we must be looking at a declaration.
8827      (After "int (" we might be looking at a functional cast.)  */
8828   if (decl_specifiers.any_specifiers_p
8829       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)
8830       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
8831       && !cp_parser_error_occurred (parser))
8832     cp_parser_commit_to_tentative_parse (parser);
8833
8834   /* Keep going until we hit the `;' at the end of the simple
8835      declaration.  */
8836   saw_declarator = false;
8837   while (cp_lexer_next_token_is_not (parser->lexer,
8838                                      CPP_SEMICOLON))
8839     {
8840       cp_token *token;
8841       bool function_definition_p;
8842       tree decl;
8843
8844       if (saw_declarator)
8845         {
8846           /* If we are processing next declarator, coma is expected */
8847           token = cp_lexer_peek_token (parser->lexer);
8848           gcc_assert (token->type == CPP_COMMA);
8849           cp_lexer_consume_token (parser->lexer);
8850         }
8851       else
8852         saw_declarator = true;
8853
8854       /* Parse the init-declarator.  */
8855       decl = cp_parser_init_declarator (parser, &decl_specifiers,
8856                                         /*checks=*/NULL,
8857                                         function_definition_allowed_p,
8858                                         /*member_p=*/false,
8859                                         declares_class_or_enum,
8860                                         &function_definition_p);
8861       /* If an error occurred while parsing tentatively, exit quickly.
8862          (That usually happens when in the body of a function; each
8863          statement is treated as a declaration-statement until proven
8864          otherwise.)  */
8865       if (cp_parser_error_occurred (parser))
8866         goto done;
8867       /* Handle function definitions specially.  */
8868       if (function_definition_p)
8869         {
8870           /* If the next token is a `,', then we are probably
8871              processing something like:
8872
8873                void f() {}, *p;
8874
8875              which is erroneous.  */
8876           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
8877             {
8878               cp_token *token = cp_lexer_peek_token (parser->lexer);
8879               error_at (token->location,
8880                         "mixing"
8881                         " declarations and function-definitions is forbidden");
8882             }
8883           /* Otherwise, we're done with the list of declarators.  */
8884           else
8885             {
8886               pop_deferring_access_checks ();
8887               return;
8888             }
8889         }
8890       /* The next token should be either a `,' or a `;'.  */
8891       token = cp_lexer_peek_token (parser->lexer);
8892       /* If it's a `,', there are more declarators to come.  */
8893       if (token->type == CPP_COMMA)
8894         /* will be consumed next time around */;
8895       /* If it's a `;', we are done.  */
8896       else if (token->type == CPP_SEMICOLON)
8897         break;
8898       /* Anything else is an error.  */
8899       else
8900         {
8901           /* If we have already issued an error message we don't need
8902              to issue another one.  */
8903           if (decl != error_mark_node
8904               || cp_parser_uncommitted_to_tentative_parse_p (parser))
8905             cp_parser_error (parser, "expected %<,%> or %<;%>");
8906           /* Skip tokens until we reach the end of the statement.  */
8907           cp_parser_skip_to_end_of_statement (parser);
8908           /* If the next token is now a `;', consume it.  */
8909           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8910             cp_lexer_consume_token (parser->lexer);
8911           goto done;
8912         }
8913       /* After the first time around, a function-definition is not
8914          allowed -- even if it was OK at first.  For example:
8915
8916            int i, f() {}
8917
8918          is not valid.  */
8919       function_definition_allowed_p = false;
8920     }
8921
8922   /* Issue an error message if no declarators are present, and the
8923      decl-specifier-seq does not itself declare a class or
8924      enumeration.  */
8925   if (!saw_declarator)
8926     {
8927       if (cp_parser_declares_only_class_p (parser))
8928         shadow_tag (&decl_specifiers);
8929       /* Perform any deferred access checks.  */
8930       perform_deferred_access_checks ();
8931     }
8932
8933   /* Consume the `;'.  */
8934   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8935
8936  done:
8937   pop_deferring_access_checks ();
8938 }
8939
8940 /* Parse a decl-specifier-seq.
8941
8942    decl-specifier-seq:
8943      decl-specifier-seq [opt] decl-specifier
8944
8945    decl-specifier:
8946      storage-class-specifier
8947      type-specifier
8948      function-specifier
8949      friend
8950      typedef
8951
8952    GNU Extension:
8953
8954    decl-specifier:
8955      attributes
8956
8957    Set *DECL_SPECS to a representation of the decl-specifier-seq.
8958
8959    The parser flags FLAGS is used to control type-specifier parsing.
8960
8961    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
8962    flags:
8963
8964      1: one of the decl-specifiers is an elaborated-type-specifier
8965         (i.e., a type declaration)
8966      2: one of the decl-specifiers is an enum-specifier or a
8967         class-specifier (i.e., a type definition)
8968
8969    */
8970
8971 static void
8972 cp_parser_decl_specifier_seq (cp_parser* parser,
8973                               cp_parser_flags flags,
8974                               cp_decl_specifier_seq *decl_specs,
8975                               int* declares_class_or_enum)
8976 {
8977   bool constructor_possible_p = !parser->in_declarator_p;
8978   cp_token *start_token = NULL;
8979
8980   /* Clear DECL_SPECS.  */
8981   clear_decl_specs (decl_specs);
8982
8983   /* Assume no class or enumeration type is declared.  */
8984   *declares_class_or_enum = 0;
8985
8986   /* Keep reading specifiers until there are no more to read.  */
8987   while (true)
8988     {
8989       bool constructor_p;
8990       bool found_decl_spec;
8991       cp_token *token;
8992
8993       /* Peek at the next token.  */
8994       token = cp_lexer_peek_token (parser->lexer);
8995
8996       /* Save the first token of the decl spec list for error
8997          reporting.  */
8998       if (!start_token)
8999         start_token = token;
9000       /* Handle attributes.  */
9001       if (token->keyword == RID_ATTRIBUTE)
9002         {
9003           /* Parse the attributes.  */
9004           decl_specs->attributes
9005             = chainon (decl_specs->attributes,
9006                        cp_parser_attributes_opt (parser));
9007           continue;
9008         }
9009       /* Assume we will find a decl-specifier keyword.  */
9010       found_decl_spec = true;
9011       /* If the next token is an appropriate keyword, we can simply
9012          add it to the list.  */
9013       switch (token->keyword)
9014         {
9015           /* decl-specifier:
9016                friend
9017                constexpr */
9018         case RID_FRIEND:
9019           if (!at_class_scope_p ())
9020             {
9021               error_at (token->location, "%<friend%> used outside of class");
9022               cp_lexer_purge_token (parser->lexer);
9023             }
9024           else
9025             {
9026               ++decl_specs->specs[(int) ds_friend];
9027               /* Consume the token.  */
9028               cp_lexer_consume_token (parser->lexer);
9029             }
9030           break;
9031
9032         case RID_CONSTEXPR:
9033           ++decl_specs->specs[(int) ds_constexpr];
9034           cp_lexer_consume_token (parser->lexer);
9035           break;
9036
9037           /* function-specifier:
9038                inline
9039                virtual
9040                explicit  */
9041         case RID_INLINE:
9042         case RID_VIRTUAL:
9043         case RID_EXPLICIT:
9044           cp_parser_function_specifier_opt (parser, decl_specs);
9045           break;
9046
9047           /* decl-specifier:
9048                typedef  */
9049         case RID_TYPEDEF:
9050           ++decl_specs->specs[(int) ds_typedef];
9051           /* Consume the token.  */
9052           cp_lexer_consume_token (parser->lexer);
9053           /* A constructor declarator cannot appear in a typedef.  */
9054           constructor_possible_p = false;
9055           /* The "typedef" keyword can only occur in a declaration; we
9056              may as well commit at this point.  */
9057           cp_parser_commit_to_tentative_parse (parser);
9058
9059           if (decl_specs->storage_class != sc_none)
9060             decl_specs->conflicting_specifiers_p = true;
9061           break;
9062
9063           /* storage-class-specifier:
9064                auto
9065                register
9066                static
9067                extern
9068                mutable
9069
9070              GNU Extension:
9071                thread  */
9072         case RID_AUTO:
9073           if (cxx_dialect == cxx98) 
9074             {
9075               /* Consume the token.  */
9076               cp_lexer_consume_token (parser->lexer);
9077
9078               /* Complain about `auto' as a storage specifier, if
9079                  we're complaining about C++0x compatibility.  */
9080               warning_at (token->location, OPT_Wc__0x_compat, "%<auto%>"
9081                           " will change meaning in C++0x; please remove it");
9082
9083               /* Set the storage class anyway.  */
9084               cp_parser_set_storage_class (parser, decl_specs, RID_AUTO,
9085                                            token->location);
9086             }
9087           else
9088             /* C++0x auto type-specifier.  */
9089             found_decl_spec = false;
9090           break;
9091
9092         case RID_REGISTER:
9093         case RID_STATIC:
9094         case RID_EXTERN:
9095         case RID_MUTABLE:
9096           /* Consume the token.  */
9097           cp_lexer_consume_token (parser->lexer);
9098           cp_parser_set_storage_class (parser, decl_specs, token->keyword,
9099                                        token->location);
9100           break;
9101         case RID_THREAD:
9102           /* Consume the token.  */
9103           cp_lexer_consume_token (parser->lexer);
9104           ++decl_specs->specs[(int) ds_thread];
9105           break;
9106
9107         default:
9108           /* We did not yet find a decl-specifier yet.  */
9109           found_decl_spec = false;
9110           break;
9111         }
9112
9113       /* Constructors are a special case.  The `S' in `S()' is not a
9114          decl-specifier; it is the beginning of the declarator.  */
9115       constructor_p
9116         = (!found_decl_spec
9117            && constructor_possible_p
9118            && (cp_parser_constructor_declarator_p
9119                (parser, decl_specs->specs[(int) ds_friend] != 0)));
9120
9121       /* If we don't have a DECL_SPEC yet, then we must be looking at
9122          a type-specifier.  */
9123       if (!found_decl_spec && !constructor_p)
9124         {
9125           int decl_spec_declares_class_or_enum;
9126           bool is_cv_qualifier;
9127           tree type_spec;
9128
9129           type_spec
9130             = cp_parser_type_specifier (parser, flags,
9131                                         decl_specs,
9132                                         /*is_declaration=*/true,
9133                                         &decl_spec_declares_class_or_enum,
9134                                         &is_cv_qualifier);
9135           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
9136
9137           /* If this type-specifier referenced a user-defined type
9138              (a typedef, class-name, etc.), then we can't allow any
9139              more such type-specifiers henceforth.
9140
9141              [dcl.spec]
9142
9143              The longest sequence of decl-specifiers that could
9144              possibly be a type name is taken as the
9145              decl-specifier-seq of a declaration.  The sequence shall
9146              be self-consistent as described below.
9147
9148              [dcl.type]
9149
9150              As a general rule, at most one type-specifier is allowed
9151              in the complete decl-specifier-seq of a declaration.  The
9152              only exceptions are the following:
9153
9154              -- const or volatile can be combined with any other
9155                 type-specifier.
9156
9157              -- signed or unsigned can be combined with char, long,
9158                 short, or int.
9159
9160              -- ..
9161
9162              Example:
9163
9164                typedef char* Pc;
9165                void g (const int Pc);
9166
9167              Here, Pc is *not* part of the decl-specifier seq; it's
9168              the declarator.  Therefore, once we see a type-specifier
9169              (other than a cv-qualifier), we forbid any additional
9170              user-defined types.  We *do* still allow things like `int
9171              int' to be considered a decl-specifier-seq, and issue the
9172              error message later.  */
9173           if (type_spec && !is_cv_qualifier)
9174             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
9175           /* A constructor declarator cannot follow a type-specifier.  */
9176           if (type_spec)
9177             {
9178               constructor_possible_p = false;
9179               found_decl_spec = true;
9180             }
9181         }
9182
9183       /* If we still do not have a DECL_SPEC, then there are no more
9184          decl-specifiers.  */
9185       if (!found_decl_spec)
9186         break;
9187
9188       decl_specs->any_specifiers_p = true;
9189       /* After we see one decl-specifier, further decl-specifiers are
9190          always optional.  */
9191       flags |= CP_PARSER_FLAGS_OPTIONAL;
9192     }
9193
9194   cp_parser_check_decl_spec (decl_specs, start_token->location);
9195
9196   /* Don't allow a friend specifier with a class definition.  */
9197   if (decl_specs->specs[(int) ds_friend] != 0
9198       && (*declares_class_or_enum & 2))
9199     error_at (start_token->location,
9200               "class definition may not be declared a friend");
9201 }
9202
9203 /* Parse an (optional) storage-class-specifier.
9204
9205    storage-class-specifier:
9206      auto
9207      register
9208      static
9209      extern
9210      mutable
9211
9212    GNU Extension:
9213
9214    storage-class-specifier:
9215      thread
9216
9217    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
9218
9219 static tree
9220 cp_parser_storage_class_specifier_opt (cp_parser* parser)
9221 {
9222   switch (cp_lexer_peek_token (parser->lexer)->keyword)
9223     {
9224     case RID_AUTO:
9225       if (cxx_dialect != cxx98)
9226         return NULL_TREE;
9227       /* Fall through for C++98.  */
9228
9229     case RID_REGISTER:
9230     case RID_STATIC:
9231     case RID_EXTERN:
9232     case RID_MUTABLE:
9233     case RID_THREAD:
9234       /* Consume the token.  */
9235       return cp_lexer_consume_token (parser->lexer)->u.value;
9236
9237     default:
9238       return NULL_TREE;
9239     }
9240 }
9241
9242 /* Parse an (optional) function-specifier.
9243
9244    function-specifier:
9245      inline
9246      virtual
9247      explicit
9248
9249    Returns an IDENTIFIER_NODE corresponding to the keyword used.
9250    Updates DECL_SPECS, if it is non-NULL.  */
9251
9252 static tree
9253 cp_parser_function_specifier_opt (cp_parser* parser,
9254                                   cp_decl_specifier_seq *decl_specs)
9255 {
9256   cp_token *token = cp_lexer_peek_token (parser->lexer);
9257   switch (token->keyword)
9258     {
9259     case RID_INLINE:
9260       if (decl_specs)
9261         ++decl_specs->specs[(int) ds_inline];
9262       break;
9263
9264     case RID_VIRTUAL:
9265       /* 14.5.2.3 [temp.mem]
9266
9267          A member function template shall not be virtual.  */
9268       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
9269         error_at (token->location, "templates may not be %<virtual%>");
9270       else if (decl_specs)
9271         ++decl_specs->specs[(int) ds_virtual];
9272       break;
9273
9274     case RID_EXPLICIT:
9275       if (decl_specs)
9276         ++decl_specs->specs[(int) ds_explicit];
9277       break;
9278
9279     default:
9280       return NULL_TREE;
9281     }
9282
9283   /* Consume the token.  */
9284   return cp_lexer_consume_token (parser->lexer)->u.value;
9285 }
9286
9287 /* Parse a linkage-specification.
9288
9289    linkage-specification:
9290      extern string-literal { declaration-seq [opt] }
9291      extern string-literal declaration  */
9292
9293 static void
9294 cp_parser_linkage_specification (cp_parser* parser)
9295 {
9296   tree linkage;
9297
9298   /* Look for the `extern' keyword.  */
9299   cp_parser_require_keyword (parser, RID_EXTERN, "%<extern%>");
9300
9301   /* Look for the string-literal.  */
9302   linkage = cp_parser_string_literal (parser, false, false);
9303
9304   /* Transform the literal into an identifier.  If the literal is a
9305      wide-character string, or contains embedded NULs, then we can't
9306      handle it as the user wants.  */
9307   if (strlen (TREE_STRING_POINTER (linkage))
9308       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
9309     {
9310       cp_parser_error (parser, "invalid linkage-specification");
9311       /* Assume C++ linkage.  */
9312       linkage = lang_name_cplusplus;
9313     }
9314   else
9315     linkage = get_identifier (TREE_STRING_POINTER (linkage));
9316
9317   /* We're now using the new linkage.  */
9318   push_lang_context (linkage);
9319
9320   /* If the next token is a `{', then we're using the first
9321      production.  */
9322   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9323     {
9324       /* Consume the `{' token.  */
9325       cp_lexer_consume_token (parser->lexer);
9326       /* Parse the declarations.  */
9327       cp_parser_declaration_seq_opt (parser);
9328       /* Look for the closing `}'.  */
9329       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
9330     }
9331   /* Otherwise, there's just one declaration.  */
9332   else
9333     {
9334       bool saved_in_unbraced_linkage_specification_p;
9335
9336       saved_in_unbraced_linkage_specification_p
9337         = parser->in_unbraced_linkage_specification_p;
9338       parser->in_unbraced_linkage_specification_p = true;
9339       cp_parser_declaration (parser);
9340       parser->in_unbraced_linkage_specification_p
9341         = saved_in_unbraced_linkage_specification_p;
9342     }
9343
9344   /* We're done with the linkage-specification.  */
9345   pop_lang_context ();
9346 }
9347
9348 /* Parse a static_assert-declaration.
9349
9350    static_assert-declaration:
9351      static_assert ( constant-expression , string-literal ) ; 
9352
9353    If MEMBER_P, this static_assert is a class member.  */
9354
9355 static void 
9356 cp_parser_static_assert(cp_parser *parser, bool member_p)
9357 {
9358   tree condition;
9359   tree message;
9360   cp_token *token;
9361   location_t saved_loc;
9362
9363   /* Peek at the `static_assert' token so we can keep track of exactly
9364      where the static assertion started.  */
9365   token = cp_lexer_peek_token (parser->lexer);
9366   saved_loc = token->location;
9367
9368   /* Look for the `static_assert' keyword.  */
9369   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT, 
9370                                   "%<static_assert%>"))
9371     return;
9372
9373   /*  We know we are in a static assertion; commit to any tentative
9374       parse.  */
9375   if (cp_parser_parsing_tentatively (parser))
9376     cp_parser_commit_to_tentative_parse (parser);
9377
9378   /* Parse the `(' starting the static assertion condition.  */
9379   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
9380
9381   /* Parse the constant-expression.  */
9382   condition = 
9383     cp_parser_constant_expression (parser,
9384                                    /*allow_non_constant_p=*/false,
9385                                    /*non_constant_p=*/NULL);
9386
9387   /* Parse the separating `,'.  */
9388   cp_parser_require (parser, CPP_COMMA, "%<,%>");
9389
9390   /* Parse the string-literal message.  */
9391   message = cp_parser_string_literal (parser, 
9392                                       /*translate=*/false,
9393                                       /*wide_ok=*/true);
9394
9395   /* A `)' completes the static assertion.  */
9396   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
9397     cp_parser_skip_to_closing_parenthesis (parser, 
9398                                            /*recovering=*/true, 
9399                                            /*or_comma=*/false,
9400                                            /*consume_paren=*/true);
9401
9402   /* A semicolon terminates the declaration.  */
9403   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
9404
9405   /* Complete the static assertion, which may mean either processing 
9406      the static assert now or saving it for template instantiation.  */
9407   finish_static_assert (condition, message, saved_loc, member_p);
9408 }
9409
9410 /* Parse a `decltype' type. Returns the type. 
9411
9412    simple-type-specifier:
9413      decltype ( expression )  */
9414
9415 static tree
9416 cp_parser_decltype (cp_parser *parser)
9417 {
9418   tree expr;
9419   bool id_expression_or_member_access_p = false;
9420   const char *saved_message;
9421   bool saved_integral_constant_expression_p;
9422   bool saved_non_integral_constant_expression_p;
9423   cp_token *id_expr_start_token;
9424
9425   /* Look for the `decltype' token.  */
9426   if (!cp_parser_require_keyword (parser, RID_DECLTYPE, "%<decltype%>"))
9427     return error_mark_node;
9428
9429   /* Types cannot be defined in a `decltype' expression.  Save away the
9430      old message.  */
9431   saved_message = parser->type_definition_forbidden_message;
9432
9433   /* And create the new one.  */
9434   parser->type_definition_forbidden_message
9435     = "types may not be defined in %<decltype%> expressions";
9436
9437   /* The restrictions on constant-expressions do not apply inside
9438      decltype expressions.  */
9439   saved_integral_constant_expression_p
9440     = parser->integral_constant_expression_p;
9441   saved_non_integral_constant_expression_p
9442     = parser->non_integral_constant_expression_p;
9443   parser->integral_constant_expression_p = false;
9444
9445   /* Do not actually evaluate the expression.  */
9446   ++cp_unevaluated_operand;
9447
9448   /* Do not warn about problems with the expression.  */
9449   ++c_inhibit_evaluation_warnings;
9450
9451   /* Parse the opening `('.  */
9452   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
9453     return error_mark_node;
9454   
9455   /* First, try parsing an id-expression.  */
9456   id_expr_start_token = cp_lexer_peek_token (parser->lexer);
9457   cp_parser_parse_tentatively (parser);
9458   expr = cp_parser_id_expression (parser,
9459                                   /*template_keyword_p=*/false,
9460                                   /*check_dependency_p=*/true,
9461                                   /*template_p=*/NULL,
9462                                   /*declarator_p=*/false,
9463                                   /*optional_p=*/false);
9464
9465   if (!cp_parser_error_occurred (parser) && expr != error_mark_node)
9466     {
9467       bool non_integral_constant_expression_p = false;
9468       tree id_expression = expr;
9469       cp_id_kind idk;
9470       const char *error_msg;
9471
9472       if (TREE_CODE (expr) == IDENTIFIER_NODE)
9473         /* Lookup the name we got back from the id-expression.  */
9474         expr = cp_parser_lookup_name (parser, expr,
9475                                       none_type,
9476                                       /*is_template=*/false,
9477                                       /*is_namespace=*/false,
9478                                       /*check_dependency=*/true,
9479                                       /*ambiguous_decls=*/NULL,
9480                                       id_expr_start_token->location);
9481
9482       if (expr
9483           && expr != error_mark_node
9484           && TREE_CODE (expr) != TEMPLATE_ID_EXPR
9485           && TREE_CODE (expr) != TYPE_DECL
9486           && (TREE_CODE (expr) != BIT_NOT_EXPR
9487               || !TYPE_P (TREE_OPERAND (expr, 0)))
9488           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
9489         {
9490           /* Complete lookup of the id-expression.  */
9491           expr = (finish_id_expression
9492                   (id_expression, expr, parser->scope, &idk,
9493                    /*integral_constant_expression_p=*/false,
9494                    /*allow_non_integral_constant_expression_p=*/true,
9495                    &non_integral_constant_expression_p,
9496                    /*template_p=*/false,
9497                    /*done=*/true,
9498                    /*address_p=*/false,
9499                    /*template_arg_p=*/false,
9500                    &error_msg,
9501                    id_expr_start_token->location));
9502
9503           if (expr == error_mark_node)
9504             /* We found an id-expression, but it was something that we
9505                should not have found. This is an error, not something
9506                we can recover from, so note that we found an
9507                id-expression and we'll recover as gracefully as
9508                possible.  */
9509             id_expression_or_member_access_p = true;
9510         }
9511
9512       if (expr 
9513           && expr != error_mark_node
9514           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
9515         /* We have an id-expression.  */
9516         id_expression_or_member_access_p = true;
9517     }
9518
9519   if (!id_expression_or_member_access_p)
9520     {
9521       /* Abort the id-expression parse.  */
9522       cp_parser_abort_tentative_parse (parser);
9523
9524       /* Parsing tentatively, again.  */
9525       cp_parser_parse_tentatively (parser);
9526
9527       /* Parse a class member access.  */
9528       expr = cp_parser_postfix_expression (parser, /*address_p=*/false,
9529                                            /*cast_p=*/false,
9530                                            /*member_access_only_p=*/true, NULL);
9531
9532       if (expr 
9533           && expr != error_mark_node
9534           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
9535         /* We have an id-expression.  */
9536         id_expression_or_member_access_p = true;
9537     }
9538
9539   if (id_expression_or_member_access_p)
9540     /* We have parsed the complete id-expression or member access.  */
9541     cp_parser_parse_definitely (parser);
9542   else
9543     {
9544       /* Abort our attempt to parse an id-expression or member access
9545          expression.  */
9546       cp_parser_abort_tentative_parse (parser);
9547
9548       /* Parse a full expression.  */
9549       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9550     }
9551
9552   /* Go back to evaluating expressions.  */
9553   --cp_unevaluated_operand;
9554   --c_inhibit_evaluation_warnings;
9555
9556   /* Restore the old message and the integral constant expression
9557      flags.  */
9558   parser->type_definition_forbidden_message = saved_message;
9559   parser->integral_constant_expression_p
9560     = saved_integral_constant_expression_p;
9561   parser->non_integral_constant_expression_p
9562     = saved_non_integral_constant_expression_p;
9563
9564   if (expr == error_mark_node)
9565     {
9566       /* Skip everything up to the closing `)'.  */
9567       cp_parser_skip_to_closing_parenthesis (parser, true, false,
9568                                              /*consume_paren=*/true);
9569       return error_mark_node;
9570     }
9571   
9572   /* Parse to the closing `)'.  */
9573   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
9574     {
9575       cp_parser_skip_to_closing_parenthesis (parser, true, false,
9576                                              /*consume_paren=*/true);
9577       return error_mark_node;
9578     }
9579
9580   return finish_decltype_type (expr, id_expression_or_member_access_p);
9581 }
9582
9583 /* Special member functions [gram.special] */
9584
9585 /* Parse a conversion-function-id.
9586
9587    conversion-function-id:
9588      operator conversion-type-id
9589
9590    Returns an IDENTIFIER_NODE representing the operator.  */
9591
9592 static tree
9593 cp_parser_conversion_function_id (cp_parser* parser)
9594 {
9595   tree type;
9596   tree saved_scope;
9597   tree saved_qualifying_scope;
9598   tree saved_object_scope;
9599   tree pushed_scope = NULL_TREE;
9600
9601   /* Look for the `operator' token.  */
9602   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "%<operator%>"))
9603     return error_mark_node;
9604   /* When we parse the conversion-type-id, the current scope will be
9605      reset.  However, we need that information in able to look up the
9606      conversion function later, so we save it here.  */
9607   saved_scope = parser->scope;
9608   saved_qualifying_scope = parser->qualifying_scope;
9609   saved_object_scope = parser->object_scope;
9610   /* We must enter the scope of the class so that the names of
9611      entities declared within the class are available in the
9612      conversion-type-id.  For example, consider:
9613
9614        struct S {
9615          typedef int I;
9616          operator I();
9617        };
9618
9619        S::operator I() { ... }
9620
9621      In order to see that `I' is a type-name in the definition, we
9622      must be in the scope of `S'.  */
9623   if (saved_scope)
9624     pushed_scope = push_scope (saved_scope);
9625   /* Parse the conversion-type-id.  */
9626   type = cp_parser_conversion_type_id (parser);
9627   /* Leave the scope of the class, if any.  */
9628   if (pushed_scope)
9629     pop_scope (pushed_scope);
9630   /* Restore the saved scope.  */
9631   parser->scope = saved_scope;
9632   parser->qualifying_scope = saved_qualifying_scope;
9633   parser->object_scope = saved_object_scope;
9634   /* If the TYPE is invalid, indicate failure.  */
9635   if (type == error_mark_node)
9636     return error_mark_node;
9637   return mangle_conv_op_name_for_type (type);
9638 }
9639
9640 /* Parse a conversion-type-id:
9641
9642    conversion-type-id:
9643      type-specifier-seq conversion-declarator [opt]
9644
9645    Returns the TYPE specified.  */
9646
9647 static tree
9648 cp_parser_conversion_type_id (cp_parser* parser)
9649 {
9650   tree attributes;
9651   cp_decl_specifier_seq type_specifiers;
9652   cp_declarator *declarator;
9653   tree type_specified;
9654
9655   /* Parse the attributes.  */
9656   attributes = cp_parser_attributes_opt (parser);
9657   /* Parse the type-specifiers.  */
9658   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
9659                                 &type_specifiers);
9660   /* If that didn't work, stop.  */
9661   if (type_specifiers.type == error_mark_node)
9662     return error_mark_node;
9663   /* Parse the conversion-declarator.  */
9664   declarator = cp_parser_conversion_declarator_opt (parser);
9665
9666   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
9667                                     /*initialized=*/0, &attributes);
9668   if (attributes)
9669     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
9670
9671   /* Don't give this error when parsing tentatively.  This happens to
9672      work because we always parse this definitively once.  */
9673   if (! cp_parser_uncommitted_to_tentative_parse_p (parser)
9674       && type_uses_auto (type_specified))
9675     {
9676       error ("invalid use of %<auto%> in conversion operator");
9677       return error_mark_node;
9678     }
9679
9680   return type_specified;
9681 }
9682
9683 /* Parse an (optional) conversion-declarator.
9684
9685    conversion-declarator:
9686      ptr-operator conversion-declarator [opt]
9687
9688    */
9689
9690 static cp_declarator *
9691 cp_parser_conversion_declarator_opt (cp_parser* parser)
9692 {
9693   enum tree_code code;
9694   tree class_type;
9695   cp_cv_quals cv_quals;
9696
9697   /* We don't know if there's a ptr-operator next, or not.  */
9698   cp_parser_parse_tentatively (parser);
9699   /* Try the ptr-operator.  */
9700   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
9701   /* If it worked, look for more conversion-declarators.  */
9702   if (cp_parser_parse_definitely (parser))
9703     {
9704       cp_declarator *declarator;
9705
9706       /* Parse another optional declarator.  */
9707       declarator = cp_parser_conversion_declarator_opt (parser);
9708
9709       return cp_parser_make_indirect_declarator
9710         (code, class_type, cv_quals, declarator);
9711    }
9712
9713   return NULL;
9714 }
9715
9716 /* Parse an (optional) ctor-initializer.
9717
9718    ctor-initializer:
9719      : mem-initializer-list
9720
9721    Returns TRUE iff the ctor-initializer was actually present.  */
9722
9723 static bool
9724 cp_parser_ctor_initializer_opt (cp_parser* parser)
9725 {
9726   /* If the next token is not a `:', then there is no
9727      ctor-initializer.  */
9728   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
9729     {
9730       /* Do default initialization of any bases and members.  */
9731       if (DECL_CONSTRUCTOR_P (current_function_decl))
9732         finish_mem_initializers (NULL_TREE);
9733
9734       return false;
9735     }
9736
9737   /* Consume the `:' token.  */
9738   cp_lexer_consume_token (parser->lexer);
9739   /* And the mem-initializer-list.  */
9740   cp_parser_mem_initializer_list (parser);
9741
9742   return true;
9743 }
9744
9745 /* Parse a mem-initializer-list.
9746
9747    mem-initializer-list:
9748      mem-initializer ... [opt]
9749      mem-initializer ... [opt] , mem-initializer-list  */
9750
9751 static void
9752 cp_parser_mem_initializer_list (cp_parser* parser)
9753 {
9754   tree mem_initializer_list = NULL_TREE;
9755   cp_token *token = cp_lexer_peek_token (parser->lexer);
9756
9757   /* Let the semantic analysis code know that we are starting the
9758      mem-initializer-list.  */
9759   if (!DECL_CONSTRUCTOR_P (current_function_decl))
9760     error_at (token->location,
9761               "only constructors take base initializers");
9762
9763   /* Loop through the list.  */
9764   while (true)
9765     {
9766       tree mem_initializer;
9767
9768       token = cp_lexer_peek_token (parser->lexer);
9769       /* Parse the mem-initializer.  */
9770       mem_initializer = cp_parser_mem_initializer (parser);
9771       /* If the next token is a `...', we're expanding member initializers. */
9772       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9773         {
9774           /* Consume the `...'. */
9775           cp_lexer_consume_token (parser->lexer);
9776
9777           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
9778              can be expanded but members cannot. */
9779           if (mem_initializer != error_mark_node
9780               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
9781             {
9782               error_at (token->location,
9783                         "cannot expand initializer for member %<%D%>",
9784                         TREE_PURPOSE (mem_initializer));
9785               mem_initializer = error_mark_node;
9786             }
9787
9788           /* Construct the pack expansion type. */
9789           if (mem_initializer != error_mark_node)
9790             mem_initializer = make_pack_expansion (mem_initializer);
9791         }
9792       /* Add it to the list, unless it was erroneous.  */
9793       if (mem_initializer != error_mark_node)
9794         {
9795           TREE_CHAIN (mem_initializer) = mem_initializer_list;
9796           mem_initializer_list = mem_initializer;
9797         }
9798       /* If the next token is not a `,', we're done.  */
9799       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9800         break;
9801       /* Consume the `,' token.  */
9802       cp_lexer_consume_token (parser->lexer);
9803     }
9804
9805   /* Perform semantic analysis.  */
9806   if (DECL_CONSTRUCTOR_P (current_function_decl))
9807     finish_mem_initializers (mem_initializer_list);
9808 }
9809
9810 /* Parse a mem-initializer.
9811
9812    mem-initializer:
9813      mem-initializer-id ( expression-list [opt] )
9814      mem-initializer-id braced-init-list
9815
9816    GNU extension:
9817
9818    mem-initializer:
9819      ( expression-list [opt] )
9820
9821    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
9822    class) or FIELD_DECL (for a non-static data member) to initialize;
9823    the TREE_VALUE is the expression-list.  An empty initialization
9824    list is represented by void_list_node.  */
9825
9826 static tree
9827 cp_parser_mem_initializer (cp_parser* parser)
9828 {
9829   tree mem_initializer_id;
9830   tree expression_list;
9831   tree member;
9832   cp_token *token = cp_lexer_peek_token (parser->lexer);
9833
9834   /* Find out what is being initialized.  */
9835   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
9836     {
9837       permerror (token->location,
9838                  "anachronistic old-style base class initializer");
9839       mem_initializer_id = NULL_TREE;
9840     }
9841   else
9842     {
9843       mem_initializer_id = cp_parser_mem_initializer_id (parser);
9844       if (mem_initializer_id == error_mark_node)
9845         return mem_initializer_id;
9846     }
9847   member = expand_member_init (mem_initializer_id);
9848   if (member && !DECL_P (member))
9849     in_base_initializer = 1;
9850
9851   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9852     {
9853       bool expr_non_constant_p;
9854       maybe_warn_cpp0x ("extended initializer lists");
9855       expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
9856       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
9857       expression_list = build_tree_list (NULL_TREE, expression_list);
9858     }
9859   else
9860     {
9861       VEC(tree,gc)* vec;
9862       vec = cp_parser_parenthesized_expression_list (parser, false,
9863                                                      /*cast_p=*/false,
9864                                                      /*allow_expansion_p=*/true,
9865                                                      /*non_constant_p=*/NULL);
9866       if (vec == NULL)
9867         return error_mark_node;
9868       expression_list = build_tree_list_vec (vec);
9869       release_tree_vector (vec);
9870     }
9871
9872   if (expression_list == error_mark_node)
9873     return error_mark_node;
9874   if (!expression_list)
9875     expression_list = void_type_node;
9876
9877   in_base_initializer = 0;
9878
9879   return member ? build_tree_list (member, expression_list) : error_mark_node;
9880 }
9881
9882 /* Parse a mem-initializer-id.
9883
9884    mem-initializer-id:
9885      :: [opt] nested-name-specifier [opt] class-name
9886      identifier
9887
9888    Returns a TYPE indicating the class to be initializer for the first
9889    production.  Returns an IDENTIFIER_NODE indicating the data member
9890    to be initialized for the second production.  */
9891
9892 static tree
9893 cp_parser_mem_initializer_id (cp_parser* parser)
9894 {
9895   bool global_scope_p;
9896   bool nested_name_specifier_p;
9897   bool template_p = false;
9898   tree id;
9899
9900   cp_token *token = cp_lexer_peek_token (parser->lexer);
9901
9902   /* `typename' is not allowed in this context ([temp.res]).  */
9903   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
9904     {
9905       error_at (token->location, 
9906                 "keyword %<typename%> not allowed in this context (a qualified "
9907                 "member initializer is implicitly a type)");
9908       cp_lexer_consume_token (parser->lexer);
9909     }
9910   /* Look for the optional `::' operator.  */
9911   global_scope_p
9912     = (cp_parser_global_scope_opt (parser,
9913                                    /*current_scope_valid_p=*/false)
9914        != NULL_TREE);
9915   /* Look for the optional nested-name-specifier.  The simplest way to
9916      implement:
9917
9918        [temp.res]
9919
9920        The keyword `typename' is not permitted in a base-specifier or
9921        mem-initializer; in these contexts a qualified name that
9922        depends on a template-parameter is implicitly assumed to be a
9923        type name.
9924
9925      is to assume that we have seen the `typename' keyword at this
9926      point.  */
9927   nested_name_specifier_p
9928     = (cp_parser_nested_name_specifier_opt (parser,
9929                                             /*typename_keyword_p=*/true,
9930                                             /*check_dependency_p=*/true,
9931                                             /*type_p=*/true,
9932                                             /*is_declaration=*/true)
9933        != NULL_TREE);
9934   if (nested_name_specifier_p)
9935     template_p = cp_parser_optional_template_keyword (parser);
9936   /* If there is a `::' operator or a nested-name-specifier, then we
9937      are definitely looking for a class-name.  */
9938   if (global_scope_p || nested_name_specifier_p)
9939     return cp_parser_class_name (parser,
9940                                  /*typename_keyword_p=*/true,
9941                                  /*template_keyword_p=*/template_p,
9942                                  none_type,
9943                                  /*check_dependency_p=*/true,
9944                                  /*class_head_p=*/false,
9945                                  /*is_declaration=*/true);
9946   /* Otherwise, we could also be looking for an ordinary identifier.  */
9947   cp_parser_parse_tentatively (parser);
9948   /* Try a class-name.  */
9949   id = cp_parser_class_name (parser,
9950                              /*typename_keyword_p=*/true,
9951                              /*template_keyword_p=*/false,
9952                              none_type,
9953                              /*check_dependency_p=*/true,
9954                              /*class_head_p=*/false,
9955                              /*is_declaration=*/true);
9956   /* If we found one, we're done.  */
9957   if (cp_parser_parse_definitely (parser))
9958     return id;
9959   /* Otherwise, look for an ordinary identifier.  */
9960   return cp_parser_identifier (parser);
9961 }
9962
9963 /* Overloading [gram.over] */
9964
9965 /* Parse an operator-function-id.
9966
9967    operator-function-id:
9968      operator operator
9969
9970    Returns an IDENTIFIER_NODE for the operator which is a
9971    human-readable spelling of the identifier, e.g., `operator +'.  */
9972
9973 static tree
9974 cp_parser_operator_function_id (cp_parser* parser)
9975 {
9976   /* Look for the `operator' keyword.  */
9977   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "%<operator%>"))
9978     return error_mark_node;
9979   /* And then the name of the operator itself.  */
9980   return cp_parser_operator (parser);
9981 }
9982
9983 /* Parse an operator.
9984
9985    operator:
9986      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
9987      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
9988      || ++ -- , ->* -> () []
9989
9990    GNU Extensions:
9991
9992    operator:
9993      <? >? <?= >?=
9994
9995    Returns an IDENTIFIER_NODE for the operator which is a
9996    human-readable spelling of the identifier, e.g., `operator +'.  */
9997
9998 static tree
9999 cp_parser_operator (cp_parser* parser)
10000 {
10001   tree id = NULL_TREE;
10002   cp_token *token;
10003
10004   /* Peek at the next token.  */
10005   token = cp_lexer_peek_token (parser->lexer);
10006   /* Figure out which operator we have.  */
10007   switch (token->type)
10008     {
10009     case CPP_KEYWORD:
10010       {
10011         enum tree_code op;
10012
10013         /* The keyword should be either `new' or `delete'.  */
10014         if (token->keyword == RID_NEW)
10015           op = NEW_EXPR;
10016         else if (token->keyword == RID_DELETE)
10017           op = DELETE_EXPR;
10018         else
10019           break;
10020
10021         /* Consume the `new' or `delete' token.  */
10022         cp_lexer_consume_token (parser->lexer);
10023
10024         /* Peek at the next token.  */
10025         token = cp_lexer_peek_token (parser->lexer);
10026         /* If it's a `[' token then this is the array variant of the
10027            operator.  */
10028         if (token->type == CPP_OPEN_SQUARE)
10029           {
10030             /* Consume the `[' token.  */
10031             cp_lexer_consume_token (parser->lexer);
10032             /* Look for the `]' token.  */
10033             cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
10034             id = ansi_opname (op == NEW_EXPR
10035                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
10036           }
10037         /* Otherwise, we have the non-array variant.  */
10038         else
10039           id = ansi_opname (op);
10040
10041         return id;
10042       }
10043
10044     case CPP_PLUS:
10045       id = ansi_opname (PLUS_EXPR);
10046       break;
10047
10048     case CPP_MINUS:
10049       id = ansi_opname (MINUS_EXPR);
10050       break;
10051
10052     case CPP_MULT:
10053       id = ansi_opname (MULT_EXPR);
10054       break;
10055
10056     case CPP_DIV:
10057       id = ansi_opname (TRUNC_DIV_EXPR);
10058       break;
10059
10060     case CPP_MOD:
10061       id = ansi_opname (TRUNC_MOD_EXPR);
10062       break;
10063
10064     case CPP_XOR:
10065       id = ansi_opname (BIT_XOR_EXPR);
10066       break;
10067
10068     case CPP_AND:
10069       id = ansi_opname (BIT_AND_EXPR);
10070       break;
10071
10072     case CPP_OR:
10073       id = ansi_opname (BIT_IOR_EXPR);
10074       break;
10075
10076     case CPP_COMPL:
10077       id = ansi_opname (BIT_NOT_EXPR);
10078       break;
10079
10080     case CPP_NOT:
10081       id = ansi_opname (TRUTH_NOT_EXPR);
10082       break;
10083
10084     case CPP_EQ:
10085       id = ansi_assopname (NOP_EXPR);
10086       break;
10087
10088     case CPP_LESS:
10089       id = ansi_opname (LT_EXPR);
10090       break;
10091
10092     case CPP_GREATER:
10093       id = ansi_opname (GT_EXPR);
10094       break;
10095
10096     case CPP_PLUS_EQ:
10097       id = ansi_assopname (PLUS_EXPR);
10098       break;
10099
10100     case CPP_MINUS_EQ:
10101       id = ansi_assopname (MINUS_EXPR);
10102       break;
10103
10104     case CPP_MULT_EQ:
10105       id = ansi_assopname (MULT_EXPR);
10106       break;
10107
10108     case CPP_DIV_EQ:
10109       id = ansi_assopname (TRUNC_DIV_EXPR);
10110       break;
10111
10112     case CPP_MOD_EQ:
10113       id = ansi_assopname (TRUNC_MOD_EXPR);
10114       break;
10115
10116     case CPP_XOR_EQ:
10117       id = ansi_assopname (BIT_XOR_EXPR);
10118       break;
10119
10120     case CPP_AND_EQ:
10121       id = ansi_assopname (BIT_AND_EXPR);
10122       break;
10123
10124     case CPP_OR_EQ:
10125       id = ansi_assopname (BIT_IOR_EXPR);
10126       break;
10127
10128     case CPP_LSHIFT:
10129       id = ansi_opname (LSHIFT_EXPR);
10130       break;
10131
10132     case CPP_RSHIFT:
10133       id = ansi_opname (RSHIFT_EXPR);
10134       break;
10135
10136     case CPP_LSHIFT_EQ:
10137       id = ansi_assopname (LSHIFT_EXPR);
10138       break;
10139
10140     case CPP_RSHIFT_EQ:
10141       id = ansi_assopname (RSHIFT_EXPR);
10142       break;
10143
10144     case CPP_EQ_EQ:
10145       id = ansi_opname (EQ_EXPR);
10146       break;
10147
10148     case CPP_NOT_EQ:
10149       id = ansi_opname (NE_EXPR);
10150       break;
10151
10152     case CPP_LESS_EQ:
10153       id = ansi_opname (LE_EXPR);
10154       break;
10155
10156     case CPP_GREATER_EQ:
10157       id = ansi_opname (GE_EXPR);
10158       break;
10159
10160     case CPP_AND_AND:
10161       id = ansi_opname (TRUTH_ANDIF_EXPR);
10162       break;
10163
10164     case CPP_OR_OR:
10165       id = ansi_opname (TRUTH_ORIF_EXPR);
10166       break;
10167
10168     case CPP_PLUS_PLUS:
10169       id = ansi_opname (POSTINCREMENT_EXPR);
10170       break;
10171
10172     case CPP_MINUS_MINUS:
10173       id = ansi_opname (PREDECREMENT_EXPR);
10174       break;
10175
10176     case CPP_COMMA:
10177       id = ansi_opname (COMPOUND_EXPR);
10178       break;
10179
10180     case CPP_DEREF_STAR:
10181       id = ansi_opname (MEMBER_REF);
10182       break;
10183
10184     case CPP_DEREF:
10185       id = ansi_opname (COMPONENT_REF);
10186       break;
10187
10188     case CPP_OPEN_PAREN:
10189       /* Consume the `('.  */
10190       cp_lexer_consume_token (parser->lexer);
10191       /* Look for the matching `)'.  */
10192       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
10193       return ansi_opname (CALL_EXPR);
10194
10195     case CPP_OPEN_SQUARE:
10196       /* Consume the `['.  */
10197       cp_lexer_consume_token (parser->lexer);
10198       /* Look for the matching `]'.  */
10199       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
10200       return ansi_opname (ARRAY_REF);
10201
10202     default:
10203       /* Anything else is an error.  */
10204       break;
10205     }
10206
10207   /* If we have selected an identifier, we need to consume the
10208      operator token.  */
10209   if (id)
10210     cp_lexer_consume_token (parser->lexer);
10211   /* Otherwise, no valid operator name was present.  */
10212   else
10213     {
10214       cp_parser_error (parser, "expected operator");
10215       id = error_mark_node;
10216     }
10217
10218   return id;
10219 }
10220
10221 /* Parse a template-declaration.
10222
10223    template-declaration:
10224      export [opt] template < template-parameter-list > declaration
10225
10226    If MEMBER_P is TRUE, this template-declaration occurs within a
10227    class-specifier.
10228
10229    The grammar rule given by the standard isn't correct.  What
10230    is really meant is:
10231
10232    template-declaration:
10233      export [opt] template-parameter-list-seq
10234        decl-specifier-seq [opt] init-declarator [opt] ;
10235      export [opt] template-parameter-list-seq
10236        function-definition
10237
10238    template-parameter-list-seq:
10239      template-parameter-list-seq [opt]
10240      template < template-parameter-list >  */
10241
10242 static void
10243 cp_parser_template_declaration (cp_parser* parser, bool member_p)
10244 {
10245   /* Check for `export'.  */
10246   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
10247     {
10248       /* Consume the `export' token.  */
10249       cp_lexer_consume_token (parser->lexer);
10250       /* Warn that we do not support `export'.  */
10251       warning (0, "keyword %<export%> not implemented, and will be ignored");
10252     }
10253
10254   cp_parser_template_declaration_after_export (parser, member_p);
10255 }
10256
10257 /* Parse a template-parameter-list.
10258
10259    template-parameter-list:
10260      template-parameter
10261      template-parameter-list , template-parameter
10262
10263    Returns a TREE_LIST.  Each node represents a template parameter.
10264    The nodes are connected via their TREE_CHAINs.  */
10265
10266 static tree
10267 cp_parser_template_parameter_list (cp_parser* parser)
10268 {
10269   tree parameter_list = NULL_TREE;
10270
10271   begin_template_parm_list ();
10272   while (true)
10273     {
10274       tree parameter;
10275       bool is_non_type;
10276       bool is_parameter_pack;
10277       location_t parm_loc;
10278
10279       /* Parse the template-parameter.  */
10280       parm_loc = cp_lexer_peek_token (parser->lexer)->location;
10281       parameter = cp_parser_template_parameter (parser, 
10282                                                 &is_non_type,
10283                                                 &is_parameter_pack);
10284       /* Add it to the list.  */
10285       if (parameter != error_mark_node)
10286         parameter_list = process_template_parm (parameter_list,
10287                                                 parm_loc,
10288                                                 parameter,
10289                                                 is_non_type,
10290                                                 is_parameter_pack);
10291       else
10292        {
10293          tree err_parm = build_tree_list (parameter, parameter);
10294          TREE_VALUE (err_parm) = error_mark_node;
10295          parameter_list = chainon (parameter_list, err_parm);
10296        }
10297
10298       /* If the next token is not a `,', we're done.  */
10299       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10300         break;
10301       /* Otherwise, consume the `,' token.  */
10302       cp_lexer_consume_token (parser->lexer);
10303     }
10304
10305   return end_template_parm_list (parameter_list);
10306 }
10307
10308 /* Parse a template-parameter.
10309
10310    template-parameter:
10311      type-parameter
10312      parameter-declaration
10313
10314    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
10315    the parameter.  The TREE_PURPOSE is the default value, if any.
10316    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
10317    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
10318    set to true iff this parameter is a parameter pack. */
10319
10320 static tree
10321 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
10322                               bool *is_parameter_pack)
10323 {
10324   cp_token *token;
10325   cp_parameter_declarator *parameter_declarator;
10326   cp_declarator *id_declarator;
10327   tree parm;
10328
10329   /* Assume it is a type parameter or a template parameter.  */
10330   *is_non_type = false;
10331   /* Assume it not a parameter pack. */
10332   *is_parameter_pack = false;
10333   /* Peek at the next token.  */
10334   token = cp_lexer_peek_token (parser->lexer);
10335   /* If it is `class' or `template', we have a type-parameter.  */
10336   if (token->keyword == RID_TEMPLATE)
10337     return cp_parser_type_parameter (parser, is_parameter_pack);
10338   /* If it is `class' or `typename' we do not know yet whether it is a
10339      type parameter or a non-type parameter.  Consider:
10340
10341        template <typename T, typename T::X X> ...
10342
10343      or:
10344
10345        template <class C, class D*> ...
10346
10347      Here, the first parameter is a type parameter, and the second is
10348      a non-type parameter.  We can tell by looking at the token after
10349      the identifier -- if it is a `,', `=', or `>' then we have a type
10350      parameter.  */
10351   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
10352     {
10353       /* Peek at the token after `class' or `typename'.  */
10354       token = cp_lexer_peek_nth_token (parser->lexer, 2);
10355       /* If it's an ellipsis, we have a template type parameter
10356          pack. */
10357       if (token->type == CPP_ELLIPSIS)
10358         return cp_parser_type_parameter (parser, is_parameter_pack);
10359       /* If it's an identifier, skip it.  */
10360       if (token->type == CPP_NAME)
10361         token = cp_lexer_peek_nth_token (parser->lexer, 3);
10362       /* Now, see if the token looks like the end of a template
10363          parameter.  */
10364       if (token->type == CPP_COMMA
10365           || token->type == CPP_EQ
10366           || token->type == CPP_GREATER)
10367         return cp_parser_type_parameter (parser, is_parameter_pack);
10368     }
10369
10370   /* Otherwise, it is a non-type parameter.
10371
10372      [temp.param]
10373
10374      When parsing a default template-argument for a non-type
10375      template-parameter, the first non-nested `>' is taken as the end
10376      of the template parameter-list rather than a greater-than
10377      operator.  */
10378   *is_non_type = true;
10379   parameter_declarator
10380      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
10381                                         /*parenthesized_p=*/NULL);
10382
10383   /* If the parameter declaration is marked as a parameter pack, set
10384      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
10385      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
10386      grokdeclarator. */
10387   if (parameter_declarator
10388       && parameter_declarator->declarator
10389       && parameter_declarator->declarator->parameter_pack_p)
10390     {
10391       *is_parameter_pack = true;
10392       parameter_declarator->declarator->parameter_pack_p = false;
10393     }
10394
10395   /* If the next token is an ellipsis, and we don't already have it
10396      marked as a parameter pack, then we have a parameter pack (that
10397      has no declarator).  */
10398   if (!*is_parameter_pack
10399       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
10400       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
10401     {
10402       /* Consume the `...'.  */
10403       cp_lexer_consume_token (parser->lexer);
10404       maybe_warn_variadic_templates ();
10405       
10406       *is_parameter_pack = true;
10407     }
10408   /* We might end up with a pack expansion as the type of the non-type
10409      template parameter, in which case this is a non-type template
10410      parameter pack.  */
10411   else if (parameter_declarator
10412            && parameter_declarator->decl_specifiers.type
10413            && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
10414     {
10415       *is_parameter_pack = true;
10416       parameter_declarator->decl_specifiers.type = 
10417         PACK_EXPANSION_PATTERN (parameter_declarator->decl_specifiers.type);
10418     }
10419
10420   if (*is_parameter_pack && cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10421     {
10422       /* Parameter packs cannot have default arguments.  However, a
10423          user may try to do so, so we'll parse them and give an
10424          appropriate diagnostic here.  */
10425
10426       /* Consume the `='.  */
10427       cp_token *start_token = cp_lexer_peek_token (parser->lexer);
10428       cp_lexer_consume_token (parser->lexer);
10429       
10430       /* Find the name of the parameter pack.  */     
10431       id_declarator = parameter_declarator->declarator;
10432       while (id_declarator && id_declarator->kind != cdk_id)
10433         id_declarator = id_declarator->declarator;
10434       
10435       if (id_declarator && id_declarator->kind == cdk_id)
10436         error_at (start_token->location,
10437                   "template parameter pack %qD cannot have a default argument",
10438                   id_declarator->u.id.unqualified_name);
10439       else
10440         error_at (start_token->location,
10441                   "template parameter pack cannot have a default argument");
10442       
10443       /* Parse the default argument, but throw away the result.  */
10444       cp_parser_default_argument (parser, /*template_parm_p=*/true);
10445     }
10446
10447   parm = grokdeclarator (parameter_declarator->declarator,
10448                          &parameter_declarator->decl_specifiers,
10449                          PARM, /*initialized=*/0,
10450                          /*attrlist=*/NULL);
10451   if (parm == error_mark_node)
10452     return error_mark_node;
10453
10454   return build_tree_list (parameter_declarator->default_argument, parm);
10455 }
10456
10457 /* Parse a type-parameter.
10458
10459    type-parameter:
10460      class identifier [opt]
10461      class identifier [opt] = type-id
10462      typename identifier [opt]
10463      typename identifier [opt] = type-id
10464      template < template-parameter-list > class identifier [opt]
10465      template < template-parameter-list > class identifier [opt]
10466        = id-expression
10467
10468    GNU Extension (variadic templates):
10469
10470    type-parameter:
10471      class ... identifier [opt]
10472      typename ... identifier [opt]
10473
10474    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
10475    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
10476    the declaration of the parameter.
10477
10478    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
10479
10480 static tree
10481 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
10482 {
10483   cp_token *token;
10484   tree parameter;
10485
10486   /* Look for a keyword to tell us what kind of parameter this is.  */
10487   token = cp_parser_require (parser, CPP_KEYWORD,
10488                              "%<class%>, %<typename%>, or %<template%>");
10489   if (!token)
10490     return error_mark_node;
10491
10492   switch (token->keyword)
10493     {
10494     case RID_CLASS:
10495     case RID_TYPENAME:
10496       {
10497         tree identifier;
10498         tree default_argument;
10499
10500         /* If the next token is an ellipsis, we have a template
10501            argument pack. */
10502         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
10503           {
10504             /* Consume the `...' token. */
10505             cp_lexer_consume_token (parser->lexer);
10506             maybe_warn_variadic_templates ();
10507
10508             *is_parameter_pack = true;
10509           }
10510
10511         /* If the next token is an identifier, then it names the
10512            parameter.  */
10513         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10514           identifier = cp_parser_identifier (parser);
10515         else
10516           identifier = NULL_TREE;
10517
10518         /* Create the parameter.  */
10519         parameter = finish_template_type_parm (class_type_node, identifier);
10520
10521         /* If the next token is an `=', we have a default argument.  */
10522         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10523           {
10524             /* Consume the `=' token.  */
10525             cp_lexer_consume_token (parser->lexer);
10526             /* Parse the default-argument.  */
10527             push_deferring_access_checks (dk_no_deferred);
10528             default_argument = cp_parser_type_id (parser);
10529
10530             /* Template parameter packs cannot have default
10531                arguments. */
10532             if (*is_parameter_pack)
10533               {
10534                 if (identifier)
10535                   error_at (token->location,
10536                             "template parameter pack %qD cannot have a "
10537                             "default argument", identifier);
10538                 else
10539                   error_at (token->location,
10540                             "template parameter packs cannot have "
10541                             "default arguments");
10542                 default_argument = NULL_TREE;
10543               }
10544             pop_deferring_access_checks ();
10545           }
10546         else
10547           default_argument = NULL_TREE;
10548
10549         /* Create the combined representation of the parameter and the
10550            default argument.  */
10551         parameter = build_tree_list (default_argument, parameter);
10552       }
10553       break;
10554
10555     case RID_TEMPLATE:
10556       {
10557         tree parameter_list;
10558         tree identifier;
10559         tree default_argument;
10560
10561         /* Look for the `<'.  */
10562         cp_parser_require (parser, CPP_LESS, "%<<%>");
10563         /* Parse the template-parameter-list.  */
10564         parameter_list = cp_parser_template_parameter_list (parser);
10565         /* Look for the `>'.  */
10566         cp_parser_require (parser, CPP_GREATER, "%<>%>");
10567         /* Look for the `class' keyword.  */
10568         cp_parser_require_keyword (parser, RID_CLASS, "%<class%>");
10569         /* If the next token is an ellipsis, we have a template
10570            argument pack. */
10571         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
10572           {
10573             /* Consume the `...' token. */
10574             cp_lexer_consume_token (parser->lexer);
10575             maybe_warn_variadic_templates ();
10576
10577             *is_parameter_pack = true;
10578           }
10579         /* If the next token is an `=', then there is a
10580            default-argument.  If the next token is a `>', we are at
10581            the end of the parameter-list.  If the next token is a `,',
10582            then we are at the end of this parameter.  */
10583         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
10584             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
10585             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10586           {
10587             identifier = cp_parser_identifier (parser);
10588             /* Treat invalid names as if the parameter were nameless.  */
10589             if (identifier == error_mark_node)
10590               identifier = NULL_TREE;
10591           }
10592         else
10593           identifier = NULL_TREE;
10594
10595         /* Create the template parameter.  */
10596         parameter = finish_template_template_parm (class_type_node,
10597                                                    identifier);
10598
10599         /* If the next token is an `=', then there is a
10600            default-argument.  */
10601         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10602           {
10603             bool is_template;
10604
10605             /* Consume the `='.  */
10606             cp_lexer_consume_token (parser->lexer);
10607             /* Parse the id-expression.  */
10608             push_deferring_access_checks (dk_no_deferred);
10609             /* save token before parsing the id-expression, for error
10610                reporting */
10611             token = cp_lexer_peek_token (parser->lexer);
10612             default_argument
10613               = cp_parser_id_expression (parser,
10614                                          /*template_keyword_p=*/false,
10615                                          /*check_dependency_p=*/true,
10616                                          /*template_p=*/&is_template,
10617                                          /*declarator_p=*/false,
10618                                          /*optional_p=*/false);
10619             if (TREE_CODE (default_argument) == TYPE_DECL)
10620               /* If the id-expression was a template-id that refers to
10621                  a template-class, we already have the declaration here,
10622                  so no further lookup is needed.  */
10623                  ;
10624             else
10625               /* Look up the name.  */
10626               default_argument
10627                 = cp_parser_lookup_name (parser, default_argument,
10628                                          none_type,
10629                                          /*is_template=*/is_template,
10630                                          /*is_namespace=*/false,
10631                                          /*check_dependency=*/true,
10632                                          /*ambiguous_decls=*/NULL,
10633                                          token->location);
10634             /* See if the default argument is valid.  */
10635             default_argument
10636               = check_template_template_default_arg (default_argument);
10637
10638             /* Template parameter packs cannot have default
10639                arguments. */
10640             if (*is_parameter_pack)
10641               {
10642                 if (identifier)
10643                   error_at (token->location,
10644                             "template parameter pack %qD cannot "
10645                             "have a default argument",
10646                             identifier);
10647                 else
10648                   error_at (token->location, "template parameter packs cannot "
10649                             "have default arguments");
10650                 default_argument = NULL_TREE;
10651               }
10652             pop_deferring_access_checks ();
10653           }
10654         else
10655           default_argument = NULL_TREE;
10656
10657         /* Create the combined representation of the parameter and the
10658            default argument.  */
10659         parameter = build_tree_list (default_argument, parameter);
10660       }
10661       break;
10662
10663     default:
10664       gcc_unreachable ();
10665       break;
10666     }
10667
10668   return parameter;
10669 }
10670
10671 /* Parse a template-id.
10672
10673    template-id:
10674      template-name < template-argument-list [opt] >
10675
10676    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
10677    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
10678    returned.  Otherwise, if the template-name names a function, or set
10679    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
10680    names a class, returns a TYPE_DECL for the specialization.
10681
10682    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
10683    uninstantiated templates.  */
10684
10685 static tree
10686 cp_parser_template_id (cp_parser *parser,
10687                        bool template_keyword_p,
10688                        bool check_dependency_p,
10689                        bool is_declaration)
10690 {
10691   int i;
10692   tree templ;
10693   tree arguments;
10694   tree template_id;
10695   cp_token_position start_of_id = 0;
10696   deferred_access_check *chk;
10697   VEC (deferred_access_check,gc) *access_check;
10698   cp_token *next_token = NULL, *next_token_2 = NULL, *token = NULL;
10699   bool is_identifier;
10700
10701   /* If the next token corresponds to a template-id, there is no need
10702      to reparse it.  */
10703   next_token = cp_lexer_peek_token (parser->lexer);
10704   if (next_token->type == CPP_TEMPLATE_ID)
10705     {
10706       struct tree_check *check_value;
10707
10708       /* Get the stored value.  */
10709       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
10710       /* Perform any access checks that were deferred.  */
10711       access_check = check_value->checks;
10712       if (access_check)
10713         {
10714           for (i = 0 ;
10715                VEC_iterate (deferred_access_check, access_check, i, chk) ;
10716                ++i)
10717             {
10718               perform_or_defer_access_check (chk->binfo,
10719                                              chk->decl,
10720                                              chk->diag_decl);
10721             }
10722         }
10723       /* Return the stored value.  */
10724       return check_value->value;
10725     }
10726
10727   /* Avoid performing name lookup if there is no possibility of
10728      finding a template-id.  */
10729   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
10730       || (next_token->type == CPP_NAME
10731           && !cp_parser_nth_token_starts_template_argument_list_p
10732                (parser, 2)))
10733     {
10734       cp_parser_error (parser, "expected template-id");
10735       return error_mark_node;
10736     }
10737
10738   /* Remember where the template-id starts.  */
10739   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
10740     start_of_id = cp_lexer_token_position (parser->lexer, false);
10741
10742   push_deferring_access_checks (dk_deferred);
10743
10744   /* Parse the template-name.  */
10745   is_identifier = false;
10746   token = cp_lexer_peek_token (parser->lexer);
10747   templ = cp_parser_template_name (parser, template_keyword_p,
10748                                    check_dependency_p,
10749                                    is_declaration,
10750                                    &is_identifier);
10751   if (templ == error_mark_node || is_identifier)
10752     {
10753       pop_deferring_access_checks ();
10754       return templ;
10755     }
10756
10757   /* If we find the sequence `[:' after a template-name, it's probably
10758      a digraph-typo for `< ::'. Substitute the tokens and check if we can
10759      parse correctly the argument list.  */
10760   next_token = cp_lexer_peek_token (parser->lexer);
10761   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
10762   if (next_token->type == CPP_OPEN_SQUARE
10763       && next_token->flags & DIGRAPH
10764       && next_token_2->type == CPP_COLON
10765       && !(next_token_2->flags & PREV_WHITE))
10766     {
10767       cp_parser_parse_tentatively (parser);
10768       /* Change `:' into `::'.  */
10769       next_token_2->type = CPP_SCOPE;
10770       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
10771          CPP_LESS.  */
10772       cp_lexer_consume_token (parser->lexer);
10773
10774       /* Parse the arguments.  */
10775       arguments = cp_parser_enclosed_template_argument_list (parser);
10776       if (!cp_parser_parse_definitely (parser))
10777         {
10778           /* If we couldn't parse an argument list, then we revert our changes
10779              and return simply an error. Maybe this is not a template-id
10780              after all.  */
10781           next_token_2->type = CPP_COLON;
10782           cp_parser_error (parser, "expected %<<%>");
10783           pop_deferring_access_checks ();
10784           return error_mark_node;
10785         }
10786       /* Otherwise, emit an error about the invalid digraph, but continue
10787          parsing because we got our argument list.  */
10788       if (permerror (next_token->location,
10789                      "%<<::%> cannot begin a template-argument list"))
10790         {
10791           static bool hint = false;
10792           inform (next_token->location,
10793                   "%<<:%> is an alternate spelling for %<[%>."
10794                   " Insert whitespace between %<<%> and %<::%>");
10795           if (!hint && !flag_permissive)
10796             {
10797               inform (next_token->location, "(if you use %<-fpermissive%>"
10798                       " G++ will accept your code)");
10799               hint = true;
10800             }
10801         }
10802     }
10803   else
10804     {
10805       /* Look for the `<' that starts the template-argument-list.  */
10806       if (!cp_parser_require (parser, CPP_LESS, "%<<%>"))
10807         {
10808           pop_deferring_access_checks ();
10809           return error_mark_node;
10810         }
10811       /* Parse the arguments.  */
10812       arguments = cp_parser_enclosed_template_argument_list (parser);
10813     }
10814
10815   /* Build a representation of the specialization.  */
10816   if (TREE_CODE (templ) == IDENTIFIER_NODE)
10817     template_id = build_min_nt (TEMPLATE_ID_EXPR, templ, arguments);
10818   else if (DECL_CLASS_TEMPLATE_P (templ)
10819            || DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
10820     {
10821       bool entering_scope;
10822       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
10823          template (rather than some instantiation thereof) only if
10824          is not nested within some other construct.  For example, in
10825          "template <typename T> void f(T) { A<T>::", A<T> is just an
10826          instantiation of A.  */
10827       entering_scope = (template_parm_scope_p ()
10828                         && cp_lexer_next_token_is (parser->lexer,
10829                                                    CPP_SCOPE));
10830       template_id
10831         = finish_template_type (templ, arguments, entering_scope);
10832     }
10833   else
10834     {
10835       /* If it's not a class-template or a template-template, it should be
10836          a function-template.  */
10837       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (templ)
10838                    || TREE_CODE (templ) == OVERLOAD
10839                    || BASELINK_P (templ)));
10840
10841       template_id = lookup_template_function (templ, arguments);
10842     }
10843
10844   /* If parsing tentatively, replace the sequence of tokens that makes
10845      up the template-id with a CPP_TEMPLATE_ID token.  That way,
10846      should we re-parse the token stream, we will not have to repeat
10847      the effort required to do the parse, nor will we issue duplicate
10848      error messages about problems during instantiation of the
10849      template.  */
10850   if (start_of_id)
10851     {
10852       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
10853
10854       /* Reset the contents of the START_OF_ID token.  */
10855       token->type = CPP_TEMPLATE_ID;
10856       /* Retrieve any deferred checks.  Do not pop this access checks yet
10857          so the memory will not be reclaimed during token replacing below.  */
10858       token->u.tree_check_value = GGC_CNEW (struct tree_check);
10859       token->u.tree_check_value->value = template_id;
10860       token->u.tree_check_value->checks = get_deferred_access_checks ();
10861       token->keyword = RID_MAX;
10862
10863       /* Purge all subsequent tokens.  */
10864       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
10865
10866       /* ??? Can we actually assume that, if template_id ==
10867          error_mark_node, we will have issued a diagnostic to the
10868          user, as opposed to simply marking the tentative parse as
10869          failed?  */
10870       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
10871         error_at (token->location, "parse error in template argument list");
10872     }
10873
10874   pop_deferring_access_checks ();
10875   return template_id;
10876 }
10877
10878 /* Parse a template-name.
10879
10880    template-name:
10881      identifier
10882
10883    The standard should actually say:
10884
10885    template-name:
10886      identifier
10887      operator-function-id
10888
10889    A defect report has been filed about this issue.
10890
10891    A conversion-function-id cannot be a template name because they cannot
10892    be part of a template-id. In fact, looking at this code:
10893
10894    a.operator K<int>()
10895
10896    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
10897    It is impossible to call a templated conversion-function-id with an
10898    explicit argument list, since the only allowed template parameter is
10899    the type to which it is converting.
10900
10901    If TEMPLATE_KEYWORD_P is true, then we have just seen the
10902    `template' keyword, in a construction like:
10903
10904      T::template f<3>()
10905
10906    In that case `f' is taken to be a template-name, even though there
10907    is no way of knowing for sure.
10908
10909    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
10910    name refers to a set of overloaded functions, at least one of which
10911    is a template, or an IDENTIFIER_NODE with the name of the template,
10912    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
10913    names are looked up inside uninstantiated templates.  */
10914
10915 static tree
10916 cp_parser_template_name (cp_parser* parser,
10917                          bool template_keyword_p,
10918                          bool check_dependency_p,
10919                          bool is_declaration,
10920                          bool *is_identifier)
10921 {
10922   tree identifier;
10923   tree decl;
10924   tree fns;
10925   cp_token *token = cp_lexer_peek_token (parser->lexer);
10926
10927   /* If the next token is `operator', then we have either an
10928      operator-function-id or a conversion-function-id.  */
10929   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
10930     {
10931       /* We don't know whether we're looking at an
10932          operator-function-id or a conversion-function-id.  */
10933       cp_parser_parse_tentatively (parser);
10934       /* Try an operator-function-id.  */
10935       identifier = cp_parser_operator_function_id (parser);
10936       /* If that didn't work, try a conversion-function-id.  */
10937       if (!cp_parser_parse_definitely (parser))
10938         {
10939           cp_parser_error (parser, "expected template-name");
10940           return error_mark_node;
10941         }
10942     }
10943   /* Look for the identifier.  */
10944   else
10945     identifier = cp_parser_identifier (parser);
10946
10947   /* If we didn't find an identifier, we don't have a template-id.  */
10948   if (identifier == error_mark_node)
10949     return error_mark_node;
10950
10951   /* If the name immediately followed the `template' keyword, then it
10952      is a template-name.  However, if the next token is not `<', then
10953      we do not treat it as a template-name, since it is not being used
10954      as part of a template-id.  This enables us to handle constructs
10955      like:
10956
10957        template <typename T> struct S { S(); };
10958        template <typename T> S<T>::S();
10959
10960      correctly.  We would treat `S' as a template -- if it were `S<T>'
10961      -- but we do not if there is no `<'.  */
10962
10963   if (processing_template_decl
10964       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
10965     {
10966       /* In a declaration, in a dependent context, we pretend that the
10967          "template" keyword was present in order to improve error
10968          recovery.  For example, given:
10969
10970            template <typename T> void f(T::X<int>);
10971
10972          we want to treat "X<int>" as a template-id.  */
10973       if (is_declaration
10974           && !template_keyword_p
10975           && parser->scope && TYPE_P (parser->scope)
10976           && check_dependency_p
10977           && dependent_scope_p (parser->scope)
10978           /* Do not do this for dtors (or ctors), since they never
10979              need the template keyword before their name.  */
10980           && !constructor_name_p (identifier, parser->scope))
10981         {
10982           cp_token_position start = 0;
10983
10984           /* Explain what went wrong.  */
10985           error_at (token->location, "non-template %qD used as template",
10986                     identifier);
10987           inform (token->location, "use %<%T::template %D%> to indicate that it is a template",
10988                   parser->scope, identifier);
10989           /* If parsing tentatively, find the location of the "<" token.  */
10990           if (cp_parser_simulate_error (parser))
10991             start = cp_lexer_token_position (parser->lexer, true);
10992           /* Parse the template arguments so that we can issue error
10993              messages about them.  */
10994           cp_lexer_consume_token (parser->lexer);
10995           cp_parser_enclosed_template_argument_list (parser);
10996           /* Skip tokens until we find a good place from which to
10997              continue parsing.  */
10998           cp_parser_skip_to_closing_parenthesis (parser,
10999                                                  /*recovering=*/true,
11000                                                  /*or_comma=*/true,
11001                                                  /*consume_paren=*/false);
11002           /* If parsing tentatively, permanently remove the
11003              template argument list.  That will prevent duplicate
11004              error messages from being issued about the missing
11005              "template" keyword.  */
11006           if (start)
11007             cp_lexer_purge_tokens_after (parser->lexer, start);
11008           if (is_identifier)
11009             *is_identifier = true;
11010           return identifier;
11011         }
11012
11013       /* If the "template" keyword is present, then there is generally
11014          no point in doing name-lookup, so we just return IDENTIFIER.
11015          But, if the qualifying scope is non-dependent then we can
11016          (and must) do name-lookup normally.  */
11017       if (template_keyword_p
11018           && (!parser->scope
11019               || (TYPE_P (parser->scope)
11020                   && dependent_type_p (parser->scope))))
11021         return identifier;
11022     }
11023
11024   /* Look up the name.  */
11025   decl = cp_parser_lookup_name (parser, identifier,
11026                                 none_type,
11027                                 /*is_template=*/false,
11028                                 /*is_namespace=*/false,
11029                                 check_dependency_p,
11030                                 /*ambiguous_decls=*/NULL,
11031                                 token->location);
11032   decl = maybe_get_template_decl_from_type_decl (decl);
11033
11034   /* If DECL is a template, then the name was a template-name.  */
11035   if (TREE_CODE (decl) == TEMPLATE_DECL)
11036     ;
11037   else
11038     {
11039       tree fn = NULL_TREE;
11040
11041       /* The standard does not explicitly indicate whether a name that
11042          names a set of overloaded declarations, some of which are
11043          templates, is a template-name.  However, such a name should
11044          be a template-name; otherwise, there is no way to form a
11045          template-id for the overloaded templates.  */
11046       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
11047       if (TREE_CODE (fns) == OVERLOAD)
11048         for (fn = fns; fn; fn = OVL_NEXT (fn))
11049           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
11050             break;
11051
11052       if (!fn)
11053         {
11054           /* The name does not name a template.  */
11055           cp_parser_error (parser, "expected template-name");
11056           return error_mark_node;
11057         }
11058     }
11059
11060   /* If DECL is dependent, and refers to a function, then just return
11061      its name; we will look it up again during template instantiation.  */
11062   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
11063     {
11064       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
11065       if (TYPE_P (scope) && dependent_type_p (scope))
11066         return identifier;
11067     }
11068
11069   return decl;
11070 }
11071
11072 /* Parse a template-argument-list.
11073
11074    template-argument-list:
11075      template-argument ... [opt]
11076      template-argument-list , template-argument ... [opt]
11077
11078    Returns a TREE_VEC containing the arguments.  */
11079
11080 static tree
11081 cp_parser_template_argument_list (cp_parser* parser)
11082 {
11083   tree fixed_args[10];
11084   unsigned n_args = 0;
11085   unsigned alloced = 10;
11086   tree *arg_ary = fixed_args;
11087   tree vec;
11088   bool saved_in_template_argument_list_p;
11089   bool saved_ice_p;
11090   bool saved_non_ice_p;
11091
11092   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
11093   parser->in_template_argument_list_p = true;
11094   /* Even if the template-id appears in an integral
11095      constant-expression, the contents of the argument list do
11096      not.  */
11097   saved_ice_p = parser->integral_constant_expression_p;
11098   parser->integral_constant_expression_p = false;
11099   saved_non_ice_p = parser->non_integral_constant_expression_p;
11100   parser->non_integral_constant_expression_p = false;
11101   /* Parse the arguments.  */
11102   do
11103     {
11104       tree argument;
11105
11106       if (n_args)
11107         /* Consume the comma.  */
11108         cp_lexer_consume_token (parser->lexer);
11109
11110       /* Parse the template-argument.  */
11111       argument = cp_parser_template_argument (parser);
11112
11113       /* If the next token is an ellipsis, we're expanding a template
11114          argument pack. */
11115       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11116         {
11117           if (argument == error_mark_node)
11118             {
11119               cp_token *token = cp_lexer_peek_token (parser->lexer);
11120               error_at (token->location,
11121                         "expected parameter pack before %<...%>");
11122             }
11123           /* Consume the `...' token. */
11124           cp_lexer_consume_token (parser->lexer);
11125
11126           /* Make the argument into a TYPE_PACK_EXPANSION or
11127              EXPR_PACK_EXPANSION. */
11128           argument = make_pack_expansion (argument);
11129         }
11130
11131       if (n_args == alloced)
11132         {
11133           alloced *= 2;
11134
11135           if (arg_ary == fixed_args)
11136             {
11137               arg_ary = XNEWVEC (tree, alloced);
11138               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
11139             }
11140           else
11141             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
11142         }
11143       arg_ary[n_args++] = argument;
11144     }
11145   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
11146
11147   vec = make_tree_vec (n_args);
11148
11149   while (n_args--)
11150     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
11151
11152   if (arg_ary != fixed_args)
11153     free (arg_ary);
11154   parser->non_integral_constant_expression_p = saved_non_ice_p;
11155   parser->integral_constant_expression_p = saved_ice_p;
11156   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
11157   return vec;
11158 }
11159
11160 /* Parse a template-argument.
11161
11162    template-argument:
11163      assignment-expression
11164      type-id
11165      id-expression
11166
11167    The representation is that of an assignment-expression, type-id, or
11168    id-expression -- except that the qualified id-expression is
11169    evaluated, so that the value returned is either a DECL or an
11170    OVERLOAD.
11171
11172    Although the standard says "assignment-expression", it forbids
11173    throw-expressions or assignments in the template argument.
11174    Therefore, we use "conditional-expression" instead.  */
11175
11176 static tree
11177 cp_parser_template_argument (cp_parser* parser)
11178 {
11179   tree argument;
11180   bool template_p;
11181   bool address_p;
11182   bool maybe_type_id = false;
11183   cp_token *token = NULL, *argument_start_token = NULL;
11184   cp_id_kind idk;
11185
11186   /* There's really no way to know what we're looking at, so we just
11187      try each alternative in order.
11188
11189        [temp.arg]
11190
11191        In a template-argument, an ambiguity between a type-id and an
11192        expression is resolved to a type-id, regardless of the form of
11193        the corresponding template-parameter.
11194
11195      Therefore, we try a type-id first.  */
11196   cp_parser_parse_tentatively (parser);
11197   argument = cp_parser_template_type_arg (parser);
11198   /* If there was no error parsing the type-id but the next token is a
11199      '>>', our behavior depends on which dialect of C++ we're
11200      parsing. In C++98, we probably found a typo for '> >'. But there
11201      are type-id which are also valid expressions. For instance:
11202
11203      struct X { int operator >> (int); };
11204      template <int V> struct Foo {};
11205      Foo<X () >> 5> r;
11206
11207      Here 'X()' is a valid type-id of a function type, but the user just
11208      wanted to write the expression "X() >> 5". Thus, we remember that we
11209      found a valid type-id, but we still try to parse the argument as an
11210      expression to see what happens. 
11211
11212      In C++0x, the '>>' will be considered two separate '>'
11213      tokens.  */
11214   if (!cp_parser_error_occurred (parser)
11215       && cxx_dialect == cxx98
11216       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
11217     {
11218       maybe_type_id = true;
11219       cp_parser_abort_tentative_parse (parser);
11220     }
11221   else
11222     {
11223       /* If the next token isn't a `,' or a `>', then this argument wasn't
11224       really finished. This means that the argument is not a valid
11225       type-id.  */
11226       if (!cp_parser_next_token_ends_template_argument_p (parser))
11227         cp_parser_error (parser, "expected template-argument");
11228       /* If that worked, we're done.  */
11229       if (cp_parser_parse_definitely (parser))
11230         return argument;
11231     }
11232   /* We're still not sure what the argument will be.  */
11233   cp_parser_parse_tentatively (parser);
11234   /* Try a template.  */
11235   argument_start_token = cp_lexer_peek_token (parser->lexer);
11236   argument = cp_parser_id_expression (parser,
11237                                       /*template_keyword_p=*/false,
11238                                       /*check_dependency_p=*/true,
11239                                       &template_p,
11240                                       /*declarator_p=*/false,
11241                                       /*optional_p=*/false);
11242   /* If the next token isn't a `,' or a `>', then this argument wasn't
11243      really finished.  */
11244   if (!cp_parser_next_token_ends_template_argument_p (parser))
11245     cp_parser_error (parser, "expected template-argument");
11246   if (!cp_parser_error_occurred (parser))
11247     {
11248       /* Figure out what is being referred to.  If the id-expression
11249          was for a class template specialization, then we will have a
11250          TYPE_DECL at this point.  There is no need to do name lookup
11251          at this point in that case.  */
11252       if (TREE_CODE (argument) != TYPE_DECL)
11253         argument = cp_parser_lookup_name (parser, argument,
11254                                           none_type,
11255                                           /*is_template=*/template_p,
11256                                           /*is_namespace=*/false,
11257                                           /*check_dependency=*/true,
11258                                           /*ambiguous_decls=*/NULL,
11259                                           argument_start_token->location);
11260       if (TREE_CODE (argument) != TEMPLATE_DECL
11261           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
11262         cp_parser_error (parser, "expected template-name");
11263     }
11264   if (cp_parser_parse_definitely (parser))
11265     return argument;
11266   /* It must be a non-type argument.  There permitted cases are given
11267      in [temp.arg.nontype]:
11268
11269      -- an integral constant-expression of integral or enumeration
11270         type; or
11271
11272      -- the name of a non-type template-parameter; or
11273
11274      -- the name of an object or function with external linkage...
11275
11276      -- the address of an object or function with external linkage...
11277
11278      -- a pointer to member...  */
11279   /* Look for a non-type template parameter.  */
11280   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
11281     {
11282       cp_parser_parse_tentatively (parser);
11283       argument = cp_parser_primary_expression (parser,
11284                                                /*address_p=*/false,
11285                                                /*cast_p=*/false,
11286                                                /*template_arg_p=*/true,
11287                                                &idk);
11288       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
11289           || !cp_parser_next_token_ends_template_argument_p (parser))
11290         cp_parser_simulate_error (parser);
11291       if (cp_parser_parse_definitely (parser))
11292         return argument;
11293     }
11294
11295   /* If the next token is "&", the argument must be the address of an
11296      object or function with external linkage.  */
11297   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
11298   if (address_p)
11299     cp_lexer_consume_token (parser->lexer);
11300   /* See if we might have an id-expression.  */
11301   token = cp_lexer_peek_token (parser->lexer);
11302   if (token->type == CPP_NAME
11303       || token->keyword == RID_OPERATOR
11304       || token->type == CPP_SCOPE
11305       || token->type == CPP_TEMPLATE_ID
11306       || token->type == CPP_NESTED_NAME_SPECIFIER)
11307     {
11308       cp_parser_parse_tentatively (parser);
11309       argument = cp_parser_primary_expression (parser,
11310                                                address_p,
11311                                                /*cast_p=*/false,
11312                                                /*template_arg_p=*/true,
11313                                                &idk);
11314       if (cp_parser_error_occurred (parser)
11315           || !cp_parser_next_token_ends_template_argument_p (parser))
11316         cp_parser_abort_tentative_parse (parser);
11317       else
11318         {
11319           if (TREE_CODE (argument) == INDIRECT_REF)
11320             {
11321               gcc_assert (REFERENCE_REF_P (argument));
11322               argument = TREE_OPERAND (argument, 0);
11323             }
11324
11325           if (TREE_CODE (argument) == VAR_DECL)
11326             {
11327               /* A variable without external linkage might still be a
11328                  valid constant-expression, so no error is issued here
11329                  if the external-linkage check fails.  */
11330               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (argument))
11331                 cp_parser_simulate_error (parser);
11332             }
11333           else if (is_overloaded_fn (argument))
11334             /* All overloaded functions are allowed; if the external
11335                linkage test does not pass, an error will be issued
11336                later.  */
11337             ;
11338           else if (address_p
11339                    && (TREE_CODE (argument) == OFFSET_REF
11340                        || TREE_CODE (argument) == SCOPE_REF))
11341             /* A pointer-to-member.  */
11342             ;
11343           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
11344             ;
11345           else
11346             cp_parser_simulate_error (parser);
11347
11348           if (cp_parser_parse_definitely (parser))
11349             {
11350               if (address_p)
11351                 argument = build_x_unary_op (ADDR_EXPR, argument,
11352                                              tf_warning_or_error);
11353               return argument;
11354             }
11355         }
11356     }
11357   /* If the argument started with "&", there are no other valid
11358      alternatives at this point.  */
11359   if (address_p)
11360     {
11361       cp_parser_error (parser, "invalid non-type template argument");
11362       return error_mark_node;
11363     }
11364
11365   /* If the argument wasn't successfully parsed as a type-id followed
11366      by '>>', the argument can only be a constant expression now.
11367      Otherwise, we try parsing the constant-expression tentatively,
11368      because the argument could really be a type-id.  */
11369   if (maybe_type_id)
11370     cp_parser_parse_tentatively (parser);
11371   argument = cp_parser_constant_expression (parser,
11372                                             /*allow_non_constant_p=*/false,
11373                                             /*non_constant_p=*/NULL);
11374   argument = fold_non_dependent_expr (argument);
11375   if (!maybe_type_id)
11376     return argument;
11377   if (!cp_parser_next_token_ends_template_argument_p (parser))
11378     cp_parser_error (parser, "expected template-argument");
11379   if (cp_parser_parse_definitely (parser))
11380     return argument;
11381   /* We did our best to parse the argument as a non type-id, but that
11382      was the only alternative that matched (albeit with a '>' after
11383      it). We can assume it's just a typo from the user, and a
11384      diagnostic will then be issued.  */
11385   return cp_parser_template_type_arg (parser);
11386 }
11387
11388 /* Parse an explicit-instantiation.
11389
11390    explicit-instantiation:
11391      template declaration
11392
11393    Although the standard says `declaration', what it really means is:
11394
11395    explicit-instantiation:
11396      template decl-specifier-seq [opt] declarator [opt] ;
11397
11398    Things like `template int S<int>::i = 5, int S<double>::j;' are not
11399    supposed to be allowed.  A defect report has been filed about this
11400    issue.
11401
11402    GNU Extension:
11403
11404    explicit-instantiation:
11405      storage-class-specifier template
11406        decl-specifier-seq [opt] declarator [opt] ;
11407      function-specifier template
11408        decl-specifier-seq [opt] declarator [opt] ;  */
11409
11410 static void
11411 cp_parser_explicit_instantiation (cp_parser* parser)
11412 {
11413   int declares_class_or_enum;
11414   cp_decl_specifier_seq decl_specifiers;
11415   tree extension_specifier = NULL_TREE;
11416   cp_token *token;
11417
11418   /* Look for an (optional) storage-class-specifier or
11419      function-specifier.  */
11420   if (cp_parser_allow_gnu_extensions_p (parser))
11421     {
11422       extension_specifier
11423         = cp_parser_storage_class_specifier_opt (parser);
11424       if (!extension_specifier)
11425         extension_specifier
11426           = cp_parser_function_specifier_opt (parser,
11427                                               /*decl_specs=*/NULL);
11428     }
11429
11430   /* Look for the `template' keyword.  */
11431   cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>");
11432   /* Let the front end know that we are processing an explicit
11433      instantiation.  */
11434   begin_explicit_instantiation ();
11435   /* [temp.explicit] says that we are supposed to ignore access
11436      control while processing explicit instantiation directives.  */
11437   push_deferring_access_checks (dk_no_check);
11438   /* Parse a decl-specifier-seq.  */
11439   token = cp_lexer_peek_token (parser->lexer);
11440   cp_parser_decl_specifier_seq (parser,
11441                                 CP_PARSER_FLAGS_OPTIONAL,
11442                                 &decl_specifiers,
11443                                 &declares_class_or_enum);
11444   /* If there was exactly one decl-specifier, and it declared a class,
11445      and there's no declarator, then we have an explicit type
11446      instantiation.  */
11447   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
11448     {
11449       tree type;
11450
11451       type = check_tag_decl (&decl_specifiers);
11452       /* Turn access control back on for names used during
11453          template instantiation.  */
11454       pop_deferring_access_checks ();
11455       if (type)
11456         do_type_instantiation (type, extension_specifier,
11457                                /*complain=*/tf_error);
11458     }
11459   else
11460     {
11461       cp_declarator *declarator;
11462       tree decl;
11463
11464       /* Parse the declarator.  */
11465       declarator
11466         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
11467                                 /*ctor_dtor_or_conv_p=*/NULL,
11468                                 /*parenthesized_p=*/NULL,
11469                                 /*member_p=*/false);
11470       if (declares_class_or_enum & 2)
11471         cp_parser_check_for_definition_in_return_type (declarator,
11472                                                        decl_specifiers.type,
11473                                                        decl_specifiers.type_location);
11474       if (declarator != cp_error_declarator)
11475         {
11476           decl = grokdeclarator (declarator, &decl_specifiers,
11477                                  NORMAL, 0, &decl_specifiers.attributes);
11478           /* Turn access control back on for names used during
11479              template instantiation.  */
11480           pop_deferring_access_checks ();
11481           /* Do the explicit instantiation.  */
11482           do_decl_instantiation (decl, extension_specifier);
11483         }
11484       else
11485         {
11486           pop_deferring_access_checks ();
11487           /* Skip the body of the explicit instantiation.  */
11488           cp_parser_skip_to_end_of_statement (parser);
11489         }
11490     }
11491   /* We're done with the instantiation.  */
11492   end_explicit_instantiation ();
11493
11494   cp_parser_consume_semicolon_at_end_of_statement (parser);
11495 }
11496
11497 /* Parse an explicit-specialization.
11498
11499    explicit-specialization:
11500      template < > declaration
11501
11502    Although the standard says `declaration', what it really means is:
11503
11504    explicit-specialization:
11505      template <> decl-specifier [opt] init-declarator [opt] ;
11506      template <> function-definition
11507      template <> explicit-specialization
11508      template <> template-declaration  */
11509
11510 static void
11511 cp_parser_explicit_specialization (cp_parser* parser)
11512 {
11513   bool need_lang_pop;
11514   cp_token *token = cp_lexer_peek_token (parser->lexer);
11515
11516   /* Look for the `template' keyword.  */
11517   cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>");
11518   /* Look for the `<'.  */
11519   cp_parser_require (parser, CPP_LESS, "%<<%>");
11520   /* Look for the `>'.  */
11521   cp_parser_require (parser, CPP_GREATER, "%<>%>");
11522   /* We have processed another parameter list.  */
11523   ++parser->num_template_parameter_lists;
11524   /* [temp]
11525
11526      A template ... explicit specialization ... shall not have C
11527      linkage.  */
11528   if (current_lang_name == lang_name_c)
11529     {
11530       error_at (token->location, "template specialization with C linkage");
11531       /* Give it C++ linkage to avoid confusing other parts of the
11532          front end.  */
11533       push_lang_context (lang_name_cplusplus);
11534       need_lang_pop = true;
11535     }
11536   else
11537     need_lang_pop = false;
11538   /* Let the front end know that we are beginning a specialization.  */
11539   if (!begin_specialization ())
11540     {
11541       end_specialization ();
11542       return;
11543     }
11544
11545   /* If the next keyword is `template', we need to figure out whether
11546      or not we're looking a template-declaration.  */
11547   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
11548     {
11549       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
11550           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
11551         cp_parser_template_declaration_after_export (parser,
11552                                                      /*member_p=*/false);
11553       else
11554         cp_parser_explicit_specialization (parser);
11555     }
11556   else
11557     /* Parse the dependent declaration.  */
11558     cp_parser_single_declaration (parser,
11559                                   /*checks=*/NULL,
11560                                   /*member_p=*/false,
11561                                   /*explicit_specialization_p=*/true,
11562                                   /*friend_p=*/NULL);
11563   /* We're done with the specialization.  */
11564   end_specialization ();
11565   /* For the erroneous case of a template with C linkage, we pushed an
11566      implicit C++ linkage scope; exit that scope now.  */
11567   if (need_lang_pop)
11568     pop_lang_context ();
11569   /* We're done with this parameter list.  */
11570   --parser->num_template_parameter_lists;
11571 }
11572
11573 /* Parse a type-specifier.
11574
11575    type-specifier:
11576      simple-type-specifier
11577      class-specifier
11578      enum-specifier
11579      elaborated-type-specifier
11580      cv-qualifier
11581
11582    GNU Extension:
11583
11584    type-specifier:
11585      __complex__
11586
11587    Returns a representation of the type-specifier.  For a
11588    class-specifier, enum-specifier, or elaborated-type-specifier, a
11589    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
11590
11591    The parser flags FLAGS is used to control type-specifier parsing.
11592
11593    If IS_DECLARATION is TRUE, then this type-specifier is appearing
11594    in a decl-specifier-seq.
11595
11596    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
11597    class-specifier, enum-specifier, or elaborated-type-specifier, then
11598    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
11599    if a type is declared; 2 if it is defined.  Otherwise, it is set to
11600    zero.
11601
11602    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
11603    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
11604    is set to FALSE.  */
11605
11606 static tree
11607 cp_parser_type_specifier (cp_parser* parser,
11608                           cp_parser_flags flags,
11609                           cp_decl_specifier_seq *decl_specs,
11610                           bool is_declaration,
11611                           int* declares_class_or_enum,
11612                           bool* is_cv_qualifier)
11613 {
11614   tree type_spec = NULL_TREE;
11615   cp_token *token;
11616   enum rid keyword;
11617   cp_decl_spec ds = ds_last;
11618
11619   /* Assume this type-specifier does not declare a new type.  */
11620   if (declares_class_or_enum)
11621     *declares_class_or_enum = 0;
11622   /* And that it does not specify a cv-qualifier.  */
11623   if (is_cv_qualifier)
11624     *is_cv_qualifier = false;
11625   /* Peek at the next token.  */
11626   token = cp_lexer_peek_token (parser->lexer);
11627
11628   /* If we're looking at a keyword, we can use that to guide the
11629      production we choose.  */
11630   keyword = token->keyword;
11631   switch (keyword)
11632     {
11633     case RID_ENUM:
11634       /* Look for the enum-specifier.  */
11635       type_spec = cp_parser_enum_specifier (parser);
11636       /* If that worked, we're done.  */
11637       if (type_spec)
11638         {
11639           if (declares_class_or_enum)
11640             *declares_class_or_enum = 2;
11641           if (decl_specs)
11642             cp_parser_set_decl_spec_type (decl_specs,
11643                                           type_spec,
11644                                           token->location,
11645                                           /*user_defined_p=*/true);
11646           return type_spec;
11647         }
11648       else
11649         goto elaborated_type_specifier;
11650
11651       /* Any of these indicate either a class-specifier, or an
11652          elaborated-type-specifier.  */
11653     case RID_CLASS:
11654     case RID_STRUCT:
11655     case RID_UNION:
11656       /* Parse tentatively so that we can back up if we don't find a
11657          class-specifier.  */
11658       cp_parser_parse_tentatively (parser);
11659       /* Look for the class-specifier.  */
11660       type_spec = cp_parser_class_specifier (parser);
11661       invoke_plugin_callbacks (PLUGIN_FINISH_TYPE, type_spec);
11662       /* If that worked, we're done.  */
11663       if (cp_parser_parse_definitely (parser))
11664         {
11665           if (declares_class_or_enum)
11666             *declares_class_or_enum = 2;
11667           if (decl_specs)
11668             cp_parser_set_decl_spec_type (decl_specs,
11669                                           type_spec,
11670                                           token->location,
11671                                           /*user_defined_p=*/true);
11672           return type_spec;
11673         }
11674
11675       /* Fall through.  */
11676     elaborated_type_specifier:
11677       /* We're declaring (not defining) a class or enum.  */
11678       if (declares_class_or_enum)
11679         *declares_class_or_enum = 1;
11680
11681       /* Fall through.  */
11682     case RID_TYPENAME:
11683       /* Look for an elaborated-type-specifier.  */
11684       type_spec
11685         = (cp_parser_elaborated_type_specifier
11686            (parser,
11687             decl_specs && decl_specs->specs[(int) ds_friend],
11688             is_declaration));
11689       if (decl_specs)
11690         cp_parser_set_decl_spec_type (decl_specs,
11691                                       type_spec,
11692                                       token->location,
11693                                       /*user_defined_p=*/true);
11694       return type_spec;
11695
11696     case RID_CONST:
11697       ds = ds_const;
11698       if (is_cv_qualifier)
11699         *is_cv_qualifier = true;
11700       break;
11701
11702     case RID_VOLATILE:
11703       ds = ds_volatile;
11704       if (is_cv_qualifier)
11705         *is_cv_qualifier = true;
11706       break;
11707
11708     case RID_RESTRICT:
11709       ds = ds_restrict;
11710       if (is_cv_qualifier)
11711         *is_cv_qualifier = true;
11712       break;
11713
11714     case RID_COMPLEX:
11715       /* The `__complex__' keyword is a GNU extension.  */
11716       ds = ds_complex;
11717       break;
11718
11719     default:
11720       break;
11721     }
11722
11723   /* Handle simple keywords.  */
11724   if (ds != ds_last)
11725     {
11726       if (decl_specs)
11727         {
11728           ++decl_specs->specs[(int)ds];
11729           decl_specs->any_specifiers_p = true;
11730         }
11731       return cp_lexer_consume_token (parser->lexer)->u.value;
11732     }
11733
11734   /* If we do not already have a type-specifier, assume we are looking
11735      at a simple-type-specifier.  */
11736   type_spec = cp_parser_simple_type_specifier (parser,
11737                                                decl_specs,
11738                                                flags);
11739
11740   /* If we didn't find a type-specifier, and a type-specifier was not
11741      optional in this context, issue an error message.  */
11742   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
11743     {
11744       cp_parser_error (parser, "expected type specifier");
11745       return error_mark_node;
11746     }
11747
11748   return type_spec;
11749 }
11750
11751 /* Parse a simple-type-specifier.
11752
11753    simple-type-specifier:
11754      :: [opt] nested-name-specifier [opt] type-name
11755      :: [opt] nested-name-specifier template template-id
11756      char
11757      wchar_t
11758      bool
11759      short
11760      int
11761      long
11762      signed
11763      unsigned
11764      float
11765      double
11766      void
11767
11768    C++0x Extension:
11769
11770    simple-type-specifier:
11771      auto
11772      decltype ( expression )   
11773      char16_t
11774      char32_t
11775
11776    GNU Extension:
11777
11778    simple-type-specifier:
11779      __typeof__ unary-expression
11780      __typeof__ ( type-id )
11781
11782    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
11783    appropriately updated.  */
11784
11785 static tree
11786 cp_parser_simple_type_specifier (cp_parser* parser,
11787                                  cp_decl_specifier_seq *decl_specs,
11788                                  cp_parser_flags flags)
11789 {
11790   tree type = NULL_TREE;
11791   cp_token *token;
11792
11793   /* Peek at the next token.  */
11794   token = cp_lexer_peek_token (parser->lexer);
11795
11796   /* If we're looking at a keyword, things are easy.  */
11797   switch (token->keyword)
11798     {
11799     case RID_CHAR:
11800       if (decl_specs)
11801         decl_specs->explicit_char_p = true;
11802       type = char_type_node;
11803       break;
11804     case RID_CHAR16:
11805       type = char16_type_node;
11806       break;
11807     case RID_CHAR32:
11808       type = char32_type_node;
11809       break;
11810     case RID_WCHAR:
11811       type = wchar_type_node;
11812       break;
11813     case RID_BOOL:
11814       type = boolean_type_node;
11815       break;
11816     case RID_SHORT:
11817       if (decl_specs)
11818         ++decl_specs->specs[(int) ds_short];
11819       type = short_integer_type_node;
11820       break;
11821     case RID_INT:
11822       if (decl_specs)
11823         decl_specs->explicit_int_p = true;
11824       type = integer_type_node;
11825       break;
11826     case RID_LONG:
11827       if (decl_specs)
11828         ++decl_specs->specs[(int) ds_long];
11829       type = long_integer_type_node;
11830       break;
11831     case RID_SIGNED:
11832       if (decl_specs)
11833         ++decl_specs->specs[(int) ds_signed];
11834       type = integer_type_node;
11835       break;
11836     case RID_UNSIGNED:
11837       if (decl_specs)
11838         ++decl_specs->specs[(int) ds_unsigned];
11839       type = unsigned_type_node;
11840       break;
11841     case RID_FLOAT:
11842       type = float_type_node;
11843       break;
11844     case RID_DOUBLE:
11845       type = double_type_node;
11846       break;
11847     case RID_VOID:
11848       type = void_type_node;
11849       break;
11850       
11851     case RID_AUTO:
11852       maybe_warn_cpp0x ("C++0x auto");
11853       type = make_auto ();
11854       break;
11855
11856     case RID_DECLTYPE:
11857       /* Parse the `decltype' type.  */
11858       type = cp_parser_decltype (parser);
11859
11860       if (decl_specs)
11861         cp_parser_set_decl_spec_type (decl_specs, type,
11862                                       token->location,
11863                                       /*user_defined_p=*/true);
11864
11865       return type;
11866
11867     case RID_TYPEOF:
11868       /* Consume the `typeof' token.  */
11869       cp_lexer_consume_token (parser->lexer);
11870       /* Parse the operand to `typeof'.  */
11871       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
11872       /* If it is not already a TYPE, take its type.  */
11873       if (!TYPE_P (type))
11874         type = finish_typeof (type);
11875
11876       if (decl_specs)
11877         cp_parser_set_decl_spec_type (decl_specs, type,
11878                                       token->location,
11879                                       /*user_defined_p=*/true);
11880
11881       return type;
11882
11883     default:
11884       break;
11885     }
11886
11887   /* If the type-specifier was for a built-in type, we're done.  */
11888   if (type)
11889     {
11890       tree id;
11891
11892       /* Record the type.  */
11893       if (decl_specs
11894           && (token->keyword != RID_SIGNED
11895               && token->keyword != RID_UNSIGNED
11896               && token->keyword != RID_SHORT
11897               && token->keyword != RID_LONG))
11898         cp_parser_set_decl_spec_type (decl_specs,
11899                                       type,
11900                                       token->location,
11901                                       /*user_defined=*/false);
11902       if (decl_specs)
11903         decl_specs->any_specifiers_p = true;
11904
11905       /* Consume the token.  */
11906       id = cp_lexer_consume_token (parser->lexer)->u.value;
11907
11908       /* There is no valid C++ program where a non-template type is
11909          followed by a "<".  That usually indicates that the user thought
11910          that the type was a template.  */
11911       cp_parser_check_for_invalid_template_id (parser, type, token->location);
11912
11913       return TYPE_NAME (type);
11914     }
11915
11916   /* The type-specifier must be a user-defined type.  */
11917   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
11918     {
11919       bool qualified_p;
11920       bool global_p;
11921
11922       /* Don't gobble tokens or issue error messages if this is an
11923          optional type-specifier.  */
11924       if (flags & CP_PARSER_FLAGS_OPTIONAL)
11925         cp_parser_parse_tentatively (parser);
11926
11927       /* Look for the optional `::' operator.  */
11928       global_p
11929         = (cp_parser_global_scope_opt (parser,
11930                                        /*current_scope_valid_p=*/false)
11931            != NULL_TREE);
11932       /* Look for the nested-name specifier.  */
11933       qualified_p
11934         = (cp_parser_nested_name_specifier_opt (parser,
11935                                                 /*typename_keyword_p=*/false,
11936                                                 /*check_dependency_p=*/true,
11937                                                 /*type_p=*/false,
11938                                                 /*is_declaration=*/false)
11939            != NULL_TREE);
11940       token = cp_lexer_peek_token (parser->lexer);
11941       /* If we have seen a nested-name-specifier, and the next token
11942          is `template', then we are using the template-id production.  */
11943       if (parser->scope
11944           && cp_parser_optional_template_keyword (parser))
11945         {
11946           /* Look for the template-id.  */
11947           type = cp_parser_template_id (parser,
11948                                         /*template_keyword_p=*/true,
11949                                         /*check_dependency_p=*/true,
11950                                         /*is_declaration=*/false);
11951           /* If the template-id did not name a type, we are out of
11952              luck.  */
11953           if (TREE_CODE (type) != TYPE_DECL)
11954             {
11955               cp_parser_error (parser, "expected template-id for type");
11956               type = NULL_TREE;
11957             }
11958         }
11959       /* Otherwise, look for a type-name.  */
11960       else
11961         type = cp_parser_type_name (parser);
11962       /* Keep track of all name-lookups performed in class scopes.  */
11963       if (type
11964           && !global_p
11965           && !qualified_p
11966           && TREE_CODE (type) == TYPE_DECL
11967           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
11968         maybe_note_name_used_in_class (DECL_NAME (type), type);
11969       /* If it didn't work out, we don't have a TYPE.  */
11970       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
11971           && !cp_parser_parse_definitely (parser))
11972         type = NULL_TREE;
11973       if (type && decl_specs)
11974         cp_parser_set_decl_spec_type (decl_specs, type,
11975                                       token->location,
11976                                       /*user_defined=*/true);
11977     }
11978
11979   /* If we didn't get a type-name, issue an error message.  */
11980   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
11981     {
11982       cp_parser_error (parser, "expected type-name");
11983       return error_mark_node;
11984     }
11985
11986   /* There is no valid C++ program where a non-template type is
11987      followed by a "<".  That usually indicates that the user thought
11988      that the type was a template.  */
11989   if (type && type != error_mark_node)
11990     {
11991       /* As a last-ditch effort, see if TYPE is an Objective-C type.
11992          If it is, then the '<'...'>' enclose protocol names rather than
11993          template arguments, and so everything is fine.  */
11994       if (c_dialect_objc ()
11995           && (objc_is_id (type) || objc_is_class_name (type)))
11996         {
11997           tree protos = cp_parser_objc_protocol_refs_opt (parser);
11998           tree qual_type = objc_get_protocol_qualified_type (type, protos);
11999
12000           /* Clobber the "unqualified" type previously entered into
12001              DECL_SPECS with the new, improved protocol-qualified version.  */
12002           if (decl_specs)
12003             decl_specs->type = qual_type;
12004
12005           return qual_type;
12006         }
12007
12008       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type),
12009                                                token->location);
12010     }
12011
12012   return type;
12013 }
12014
12015 /* Parse a type-name.
12016
12017    type-name:
12018      class-name
12019      enum-name
12020      typedef-name
12021
12022    enum-name:
12023      identifier
12024
12025    typedef-name:
12026      identifier
12027
12028    Returns a TYPE_DECL for the type.  */
12029
12030 static tree
12031 cp_parser_type_name (cp_parser* parser)
12032 {
12033   tree type_decl;
12034
12035   /* We can't know yet whether it is a class-name or not.  */
12036   cp_parser_parse_tentatively (parser);
12037   /* Try a class-name.  */
12038   type_decl = cp_parser_class_name (parser,
12039                                     /*typename_keyword_p=*/false,
12040                                     /*template_keyword_p=*/false,
12041                                     none_type,
12042                                     /*check_dependency_p=*/true,
12043                                     /*class_head_p=*/false,
12044                                     /*is_declaration=*/false);
12045   /* If it's not a class-name, keep looking.  */
12046   if (!cp_parser_parse_definitely (parser))
12047     {
12048       /* It must be a typedef-name or an enum-name.  */
12049       return cp_parser_nonclass_name (parser);
12050     }
12051
12052   return type_decl;
12053 }
12054
12055 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
12056
12057    enum-name:
12058      identifier
12059
12060    typedef-name:
12061      identifier
12062
12063    Returns a TYPE_DECL for the type.  */
12064
12065 static tree
12066 cp_parser_nonclass_name (cp_parser* parser)
12067 {
12068   tree type_decl;
12069   tree identifier;
12070
12071   cp_token *token = cp_lexer_peek_token (parser->lexer);
12072   identifier = cp_parser_identifier (parser);
12073   if (identifier == error_mark_node)
12074     return error_mark_node;
12075
12076   /* Look up the type-name.  */
12077   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
12078
12079   if (TREE_CODE (type_decl) != TYPE_DECL
12080       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
12081     {
12082       /* See if this is an Objective-C type.  */
12083       tree protos = cp_parser_objc_protocol_refs_opt (parser);
12084       tree type = objc_get_protocol_qualified_type (identifier, protos);
12085       if (type)
12086         type_decl = TYPE_NAME (type);
12087     }
12088   
12089   /* Issue an error if we did not find a type-name.  */
12090   if (TREE_CODE (type_decl) != TYPE_DECL)
12091     {
12092       if (!cp_parser_simulate_error (parser))
12093         cp_parser_name_lookup_error (parser, identifier, type_decl,
12094                                      "is not a type", token->location);
12095       return error_mark_node;
12096     }
12097   /* Remember that the name was used in the definition of the
12098      current class so that we can check later to see if the
12099      meaning would have been different after the class was
12100      entirely defined.  */
12101   else if (type_decl != error_mark_node
12102            && !parser->scope)
12103     maybe_note_name_used_in_class (identifier, type_decl);
12104   
12105   return type_decl;
12106 }
12107
12108 /* Parse an elaborated-type-specifier.  Note that the grammar given
12109    here incorporates the resolution to DR68.
12110
12111    elaborated-type-specifier:
12112      class-key :: [opt] nested-name-specifier [opt] identifier
12113      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
12114      enum-key :: [opt] nested-name-specifier [opt] identifier
12115      typename :: [opt] nested-name-specifier identifier
12116      typename :: [opt] nested-name-specifier template [opt]
12117        template-id
12118
12119    GNU extension:
12120
12121    elaborated-type-specifier:
12122      class-key attributes :: [opt] nested-name-specifier [opt] identifier
12123      class-key attributes :: [opt] nested-name-specifier [opt]
12124                template [opt] template-id
12125      enum attributes :: [opt] nested-name-specifier [opt] identifier
12126
12127    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
12128    declared `friend'.  If IS_DECLARATION is TRUE, then this
12129    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
12130    something is being declared.
12131
12132    Returns the TYPE specified.  */
12133
12134 static tree
12135 cp_parser_elaborated_type_specifier (cp_parser* parser,
12136                                      bool is_friend,
12137                                      bool is_declaration)
12138 {
12139   enum tag_types tag_type;
12140   tree identifier;
12141   tree type = NULL_TREE;
12142   tree attributes = NULL_TREE;
12143   tree globalscope;
12144   cp_token *token = NULL;
12145
12146   /* See if we're looking at the `enum' keyword.  */
12147   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
12148     {
12149       /* Consume the `enum' token.  */
12150       cp_lexer_consume_token (parser->lexer);
12151       /* Remember that it's an enumeration type.  */
12152       tag_type = enum_type;
12153       /* Parse the optional `struct' or `class' key (for C++0x scoped
12154          enums).  */
12155       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
12156           || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
12157         {
12158           if (cxx_dialect == cxx98)
12159             maybe_warn_cpp0x ("scoped enums");
12160
12161           /* Consume the `struct' or `class'.  */
12162           cp_lexer_consume_token (parser->lexer);
12163         }
12164       /* Parse the attributes.  */
12165       attributes = cp_parser_attributes_opt (parser);
12166     }
12167   /* Or, it might be `typename'.  */
12168   else if (cp_lexer_next_token_is_keyword (parser->lexer,
12169                                            RID_TYPENAME))
12170     {
12171       /* Consume the `typename' token.  */
12172       cp_lexer_consume_token (parser->lexer);
12173       /* Remember that it's a `typename' type.  */
12174       tag_type = typename_type;
12175     }
12176   /* Otherwise it must be a class-key.  */
12177   else
12178     {
12179       tag_type = cp_parser_class_key (parser);
12180       if (tag_type == none_type)
12181         return error_mark_node;
12182       /* Parse the attributes.  */
12183       attributes = cp_parser_attributes_opt (parser);
12184     }
12185
12186   /* Look for the `::' operator.  */
12187   globalscope =  cp_parser_global_scope_opt (parser,
12188                                              /*current_scope_valid_p=*/false);
12189   /* Look for the nested-name-specifier.  */
12190   if (tag_type == typename_type && !globalscope)
12191     {
12192       if (!cp_parser_nested_name_specifier (parser,
12193                                            /*typename_keyword_p=*/true,
12194                                            /*check_dependency_p=*/true,
12195                                            /*type_p=*/true,
12196                                             is_declaration))
12197         return error_mark_node;
12198     }
12199   else
12200     /* Even though `typename' is not present, the proposed resolution
12201        to Core Issue 180 says that in `class A<T>::B', `B' should be
12202        considered a type-name, even if `A<T>' is dependent.  */
12203     cp_parser_nested_name_specifier_opt (parser,
12204                                          /*typename_keyword_p=*/true,
12205                                          /*check_dependency_p=*/true,
12206                                          /*type_p=*/true,
12207                                          is_declaration);
12208  /* For everything but enumeration types, consider a template-id.
12209     For an enumeration type, consider only a plain identifier.  */
12210   if (tag_type != enum_type)
12211     {
12212       bool template_p = false;
12213       tree decl;
12214
12215       /* Allow the `template' keyword.  */
12216       template_p = cp_parser_optional_template_keyword (parser);
12217       /* If we didn't see `template', we don't know if there's a
12218          template-id or not.  */
12219       if (!template_p)
12220         cp_parser_parse_tentatively (parser);
12221       /* Parse the template-id.  */
12222       token = cp_lexer_peek_token (parser->lexer);
12223       decl = cp_parser_template_id (parser, template_p,
12224                                     /*check_dependency_p=*/true,
12225                                     is_declaration);
12226       /* If we didn't find a template-id, look for an ordinary
12227          identifier.  */
12228       if (!template_p && !cp_parser_parse_definitely (parser))
12229         ;
12230       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
12231          in effect, then we must assume that, upon instantiation, the
12232          template will correspond to a class.  */
12233       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
12234                && tag_type == typename_type)
12235         type = make_typename_type (parser->scope, decl,
12236                                    typename_type,
12237                                    /*complain=*/tf_error);
12238       /* If the `typename' keyword is in effect and DECL is not a type
12239          decl. Then type is non existant.   */
12240       else if (tag_type == typename_type && TREE_CODE (decl) != TYPE_DECL)
12241         type = NULL_TREE; 
12242       else 
12243         type = TREE_TYPE (decl);
12244     }
12245
12246   if (!type)
12247     {
12248       token = cp_lexer_peek_token (parser->lexer);
12249       identifier = cp_parser_identifier (parser);
12250
12251       if (identifier == error_mark_node)
12252         {
12253           parser->scope = NULL_TREE;
12254           return error_mark_node;
12255         }
12256
12257       /* For a `typename', we needn't call xref_tag.  */
12258       if (tag_type == typename_type
12259           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
12260         return cp_parser_make_typename_type (parser, parser->scope,
12261                                              identifier,
12262                                              token->location);
12263       /* Look up a qualified name in the usual way.  */
12264       if (parser->scope)
12265         {
12266           tree decl;
12267           tree ambiguous_decls;
12268
12269           decl = cp_parser_lookup_name (parser, identifier,
12270                                         tag_type,
12271                                         /*is_template=*/false,
12272                                         /*is_namespace=*/false,
12273                                         /*check_dependency=*/true,
12274                                         &ambiguous_decls,
12275                                         token->location);
12276
12277           /* If the lookup was ambiguous, an error will already have been
12278              issued.  */
12279           if (ambiguous_decls)
12280             return error_mark_node;
12281
12282           /* If we are parsing friend declaration, DECL may be a
12283              TEMPLATE_DECL tree node here.  However, we need to check
12284              whether this TEMPLATE_DECL results in valid code.  Consider
12285              the following example:
12286
12287                namespace N {
12288                  template <class T> class C {};
12289                }
12290                class X {
12291                  template <class T> friend class N::C; // #1, valid code
12292                };
12293                template <class T> class Y {
12294                  friend class N::C;                    // #2, invalid code
12295                };
12296
12297              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
12298              name lookup of `N::C'.  We see that friend declaration must
12299              be template for the code to be valid.  Note that
12300              processing_template_decl does not work here since it is
12301              always 1 for the above two cases.  */
12302
12303           decl = (cp_parser_maybe_treat_template_as_class
12304                   (decl, /*tag_name_p=*/is_friend
12305                          && parser->num_template_parameter_lists));
12306
12307           if (TREE_CODE (decl) != TYPE_DECL)
12308             {
12309               cp_parser_diagnose_invalid_type_name (parser,
12310                                                     parser->scope,
12311                                                     identifier,
12312                                                     token->location);
12313               return error_mark_node;
12314             }
12315
12316           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
12317             {
12318               bool allow_template = (parser->num_template_parameter_lists
12319                                       || DECL_SELF_REFERENCE_P (decl));
12320               type = check_elaborated_type_specifier (tag_type, decl, 
12321                                                       allow_template);
12322
12323               if (type == error_mark_node)
12324                 return error_mark_node;
12325             }
12326
12327           /* Forward declarations of nested types, such as
12328
12329                class C1::C2;
12330                class C1::C2::C3;
12331
12332              are invalid unless all components preceding the final '::'
12333              are complete.  If all enclosing types are complete, these
12334              declarations become merely pointless.
12335
12336              Invalid forward declarations of nested types are errors
12337              caught elsewhere in parsing.  Those that are pointless arrive
12338              here.  */
12339
12340           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
12341               && !is_friend && !processing_explicit_instantiation)
12342             warning (0, "declaration %qD does not declare anything", decl);
12343
12344           type = TREE_TYPE (decl);
12345         }
12346       else
12347         {
12348           /* An elaborated-type-specifier sometimes introduces a new type and
12349              sometimes names an existing type.  Normally, the rule is that it
12350              introduces a new type only if there is not an existing type of
12351              the same name already in scope.  For example, given:
12352
12353                struct S {};
12354                void f() { struct S s; }
12355
12356              the `struct S' in the body of `f' is the same `struct S' as in
12357              the global scope; the existing definition is used.  However, if
12358              there were no global declaration, this would introduce a new
12359              local class named `S'.
12360
12361              An exception to this rule applies to the following code:
12362
12363                namespace N { struct S; }
12364
12365              Here, the elaborated-type-specifier names a new type
12366              unconditionally; even if there is already an `S' in the
12367              containing scope this declaration names a new type.
12368              This exception only applies if the elaborated-type-specifier
12369              forms the complete declaration:
12370
12371                [class.name]
12372
12373                A declaration consisting solely of `class-key identifier ;' is
12374                either a redeclaration of the name in the current scope or a
12375                forward declaration of the identifier as a class name.  It
12376                introduces the name into the current scope.
12377
12378              We are in this situation precisely when the next token is a `;'.
12379
12380              An exception to the exception is that a `friend' declaration does
12381              *not* name a new type; i.e., given:
12382
12383                struct S { friend struct T; };
12384
12385              `T' is not a new type in the scope of `S'.
12386
12387              Also, `new struct S' or `sizeof (struct S)' never results in the
12388              definition of a new type; a new type can only be declared in a
12389              declaration context.  */
12390
12391           tag_scope ts;
12392           bool template_p;
12393
12394           if (is_friend)
12395             /* Friends have special name lookup rules.  */
12396             ts = ts_within_enclosing_non_class;
12397           else if (is_declaration
12398                    && cp_lexer_next_token_is (parser->lexer,
12399                                               CPP_SEMICOLON))
12400             /* This is a `class-key identifier ;' */
12401             ts = ts_current;
12402           else
12403             ts = ts_global;
12404
12405           template_p =
12406             (parser->num_template_parameter_lists
12407              && (cp_parser_next_token_starts_class_definition_p (parser)
12408                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
12409           /* An unqualified name was used to reference this type, so
12410              there were no qualifying templates.  */
12411           if (!cp_parser_check_template_parameters (parser,
12412                                                     /*num_templates=*/0,
12413                                                     token->location,
12414                                                     /*declarator=*/NULL))
12415             return error_mark_node;
12416           type = xref_tag (tag_type, identifier, ts, template_p);
12417         }
12418     }
12419
12420   if (type == error_mark_node)
12421     return error_mark_node;
12422
12423   /* Allow attributes on forward declarations of classes.  */
12424   if (attributes)
12425     {
12426       if (TREE_CODE (type) == TYPENAME_TYPE)
12427         warning (OPT_Wattributes,
12428                  "attributes ignored on uninstantiated type");
12429       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
12430                && ! processing_explicit_instantiation)
12431         warning (OPT_Wattributes,
12432                  "attributes ignored on template instantiation");
12433       else if (is_declaration && cp_parser_declares_only_class_p (parser))
12434         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
12435       else
12436         warning (OPT_Wattributes,
12437                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
12438     }
12439
12440   if (tag_type != enum_type)
12441     cp_parser_check_class_key (tag_type, type);
12442
12443   /* A "<" cannot follow an elaborated type specifier.  If that
12444      happens, the user was probably trying to form a template-id.  */
12445   cp_parser_check_for_invalid_template_id (parser, type, token->location);
12446
12447   return type;
12448 }
12449
12450 /* Parse an enum-specifier.
12451
12452    enum-specifier:
12453      enum-key identifier [opt] enum-base [opt] { enumerator-list [opt] }
12454
12455    enum-key:
12456      enum
12457      enum class   [C++0x]
12458      enum struct  [C++0x]
12459
12460    enum-base:   [C++0x]
12461      : type-specifier-seq
12462
12463    GNU Extensions:
12464      enum-key attributes[opt] identifier [opt] enum-base [opt] 
12465        { enumerator-list [opt] }attributes[opt]
12466
12467    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
12468    if the token stream isn't an enum-specifier after all.  */
12469
12470 static tree
12471 cp_parser_enum_specifier (cp_parser* parser)
12472 {
12473   tree identifier;
12474   tree type;
12475   tree attributes;
12476   bool scoped_enum_p = false;
12477   bool has_underlying_type = false;
12478   tree underlying_type = NULL_TREE;
12479
12480   /* Parse tentatively so that we can back up if we don't find a
12481      enum-specifier.  */
12482   cp_parser_parse_tentatively (parser);
12483
12484   /* Caller guarantees that the current token is 'enum', an identifier
12485      possibly follows, and the token after that is an opening brace.
12486      If we don't have an identifier, fabricate an anonymous name for
12487      the enumeration being defined.  */
12488   cp_lexer_consume_token (parser->lexer);
12489
12490   /* Parse the "class" or "struct", which indicates a scoped
12491      enumeration type in C++0x.  */
12492   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
12493       || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
12494     {
12495       if (cxx_dialect == cxx98)
12496         maybe_warn_cpp0x ("scoped enums");
12497
12498       /* Consume the `struct' or `class' token.  */
12499       cp_lexer_consume_token (parser->lexer);
12500
12501       scoped_enum_p = true;
12502     }
12503
12504   attributes = cp_parser_attributes_opt (parser);
12505
12506   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12507     identifier = cp_parser_identifier (parser);
12508   else
12509     identifier = make_anon_name ();
12510
12511   /* Check for the `:' that denotes a specified underlying type in C++0x.
12512      Note that a ':' could also indicate a bitfield width, however.  */
12513   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12514     {
12515       cp_decl_specifier_seq type_specifiers;
12516
12517       /* Consume the `:'.  */
12518       cp_lexer_consume_token (parser->lexer);
12519
12520       /* Parse the type-specifier-seq.  */
12521       cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
12522                                     &type_specifiers);
12523
12524       /* At this point this is surely not elaborated type specifier.  */
12525       if (!cp_parser_parse_definitely (parser))
12526         return NULL_TREE;
12527
12528       if (cxx_dialect == cxx98)
12529         maybe_warn_cpp0x ("scoped enums");
12530
12531       has_underlying_type = true;
12532
12533       /* If that didn't work, stop.  */
12534       if (type_specifiers.type != error_mark_node)
12535         {
12536           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
12537                                             /*initialized=*/0, NULL);
12538           if (underlying_type == error_mark_node)
12539             underlying_type = NULL_TREE;
12540         }
12541     }
12542
12543   /* Look for the `{' but don't consume it yet.  */
12544   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
12545     {
12546       cp_parser_error (parser, "expected %<{%>");
12547       if (has_underlying_type)
12548         return NULL_TREE;
12549     }
12550
12551   if (!has_underlying_type && !cp_parser_parse_definitely (parser))
12552     return NULL_TREE;
12553
12554   /* Issue an error message if type-definitions are forbidden here.  */
12555   if (!cp_parser_check_type_definition (parser))
12556     type = error_mark_node;
12557   else
12558     /* Create the new type.  We do this before consuming the opening
12559        brace so the enum will be recorded as being on the line of its
12560        tag (or the 'enum' keyword, if there is no tag).  */
12561     type = start_enum (identifier, underlying_type, scoped_enum_p);
12562   
12563   /* Consume the opening brace.  */
12564   cp_lexer_consume_token (parser->lexer);
12565
12566   if (type == error_mark_node)
12567     {
12568       cp_parser_skip_to_end_of_block_or_statement (parser);
12569       return error_mark_node;
12570     }
12571
12572   /* If the next token is not '}', then there are some enumerators.  */
12573   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12574     cp_parser_enumerator_list (parser, type);
12575
12576   /* Consume the final '}'.  */
12577   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
12578
12579   /* Look for trailing attributes to apply to this enumeration, and
12580      apply them if appropriate.  */
12581   if (cp_parser_allow_gnu_extensions_p (parser))
12582     {
12583       tree trailing_attr = cp_parser_attributes_opt (parser);
12584       trailing_attr = chainon (trailing_attr, attributes);
12585       cplus_decl_attributes (&type,
12586                              trailing_attr,
12587                              (int) ATTR_FLAG_TYPE_IN_PLACE);
12588     }
12589
12590   /* Finish up the enumeration.  */
12591   finish_enum (type);
12592
12593   return type;
12594 }
12595
12596 /* Parse an enumerator-list.  The enumerators all have the indicated
12597    TYPE.
12598
12599    enumerator-list:
12600      enumerator-definition
12601      enumerator-list , enumerator-definition  */
12602
12603 static void
12604 cp_parser_enumerator_list (cp_parser* parser, tree type)
12605 {
12606   while (true)
12607     {
12608       /* Parse an enumerator-definition.  */
12609       cp_parser_enumerator_definition (parser, type);
12610
12611       /* If the next token is not a ',', we've reached the end of
12612          the list.  */
12613       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12614         break;
12615       /* Otherwise, consume the `,' and keep going.  */
12616       cp_lexer_consume_token (parser->lexer);
12617       /* If the next token is a `}', there is a trailing comma.  */
12618       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
12619         {
12620           if (!in_system_header)
12621             pedwarn (input_location, OPT_pedantic, "comma at end of enumerator list");
12622           break;
12623         }
12624     }
12625 }
12626
12627 /* Parse an enumerator-definition.  The enumerator has the indicated
12628    TYPE.
12629
12630    enumerator-definition:
12631      enumerator
12632      enumerator = constant-expression
12633
12634    enumerator:
12635      identifier  */
12636
12637 static void
12638 cp_parser_enumerator_definition (cp_parser* parser, tree type)
12639 {
12640   tree identifier;
12641   tree value;
12642
12643   /* Look for the identifier.  */
12644   identifier = cp_parser_identifier (parser);
12645   if (identifier == error_mark_node)
12646     return;
12647
12648   /* If the next token is an '=', then there is an explicit value.  */
12649   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12650     {
12651       /* Consume the `=' token.  */
12652       cp_lexer_consume_token (parser->lexer);
12653       /* Parse the value.  */
12654       value = cp_parser_constant_expression (parser,
12655                                              /*allow_non_constant_p=*/false,
12656                                              NULL);
12657     }
12658   else
12659     value = NULL_TREE;
12660
12661   /* If we are processing a template, make sure the initializer of the
12662      enumerator doesn't contain any bare template parameter pack.  */
12663   if (check_for_bare_parameter_packs (value))
12664     value = error_mark_node;
12665
12666   /* Create the enumerator.  */
12667   build_enumerator (identifier, value, type);
12668 }
12669
12670 /* Parse a namespace-name.
12671
12672    namespace-name:
12673      original-namespace-name
12674      namespace-alias
12675
12676    Returns the NAMESPACE_DECL for the namespace.  */
12677
12678 static tree
12679 cp_parser_namespace_name (cp_parser* parser)
12680 {
12681   tree identifier;
12682   tree namespace_decl;
12683
12684   cp_token *token = cp_lexer_peek_token (parser->lexer);
12685
12686   /* Get the name of the namespace.  */
12687   identifier = cp_parser_identifier (parser);
12688   if (identifier == error_mark_node)
12689     return error_mark_node;
12690
12691   /* Look up the identifier in the currently active scope.  Look only
12692      for namespaces, due to:
12693
12694        [basic.lookup.udir]
12695
12696        When looking up a namespace-name in a using-directive or alias
12697        definition, only namespace names are considered.
12698
12699      And:
12700
12701        [basic.lookup.qual]
12702
12703        During the lookup of a name preceding the :: scope resolution
12704        operator, object, function, and enumerator names are ignored.
12705
12706      (Note that cp_parser_qualifying_entity only calls this
12707      function if the token after the name is the scope resolution
12708      operator.)  */
12709   namespace_decl = cp_parser_lookup_name (parser, identifier,
12710                                           none_type,
12711                                           /*is_template=*/false,
12712                                           /*is_namespace=*/true,
12713                                           /*check_dependency=*/true,
12714                                           /*ambiguous_decls=*/NULL,
12715                                           token->location);
12716   /* If it's not a namespace, issue an error.  */
12717   if (namespace_decl == error_mark_node
12718       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
12719     {
12720       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
12721         error_at (token->location, "%qD is not a namespace-name", identifier);
12722       cp_parser_error (parser, "expected namespace-name");
12723       namespace_decl = error_mark_node;
12724     }
12725
12726   return namespace_decl;
12727 }
12728
12729 /* Parse a namespace-definition.
12730
12731    namespace-definition:
12732      named-namespace-definition
12733      unnamed-namespace-definition
12734
12735    named-namespace-definition:
12736      original-namespace-definition
12737      extension-namespace-definition
12738
12739    original-namespace-definition:
12740      namespace identifier { namespace-body }
12741
12742    extension-namespace-definition:
12743      namespace original-namespace-name { namespace-body }
12744
12745    unnamed-namespace-definition:
12746      namespace { namespace-body } */
12747
12748 static void
12749 cp_parser_namespace_definition (cp_parser* parser)
12750 {
12751   tree identifier, attribs;
12752   bool has_visibility;
12753   bool is_inline;
12754
12755   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_INLINE))
12756     {
12757       is_inline = true;
12758       cp_lexer_consume_token (parser->lexer);
12759     }
12760   else
12761     is_inline = false;
12762
12763   /* Look for the `namespace' keyword.  */
12764   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
12765
12766   /* Get the name of the namespace.  We do not attempt to distinguish
12767      between an original-namespace-definition and an
12768      extension-namespace-definition at this point.  The semantic
12769      analysis routines are responsible for that.  */
12770   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12771     identifier = cp_parser_identifier (parser);
12772   else
12773     identifier = NULL_TREE;
12774
12775   /* Parse any specified attributes.  */
12776   attribs = cp_parser_attributes_opt (parser);
12777
12778   /* Look for the `{' to start the namespace.  */
12779   cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
12780   /* Start the namespace.  */
12781   push_namespace (identifier);
12782
12783   /* "inline namespace" is equivalent to a stub namespace definition
12784      followed by a strong using directive.  */
12785   if (is_inline)
12786     {
12787       tree name_space = current_namespace;
12788       /* Set up namespace association.  */
12789       DECL_NAMESPACE_ASSOCIATIONS (name_space)
12790         = tree_cons (CP_DECL_CONTEXT (name_space), NULL_TREE,
12791                      DECL_NAMESPACE_ASSOCIATIONS (name_space));
12792       /* Import the contents of the inline namespace.  */
12793       pop_namespace ();
12794       do_using_directive (name_space);
12795       push_namespace (identifier);
12796     }
12797
12798   has_visibility = handle_namespace_attrs (current_namespace, attribs);
12799
12800   /* Parse the body of the namespace.  */
12801   cp_parser_namespace_body (parser);
12802
12803 #ifdef HANDLE_PRAGMA_VISIBILITY
12804   if (has_visibility)
12805     pop_visibility ();
12806 #endif
12807
12808   /* Finish the namespace.  */
12809   pop_namespace ();
12810   /* Look for the final `}'.  */
12811   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
12812 }
12813
12814 /* Parse a namespace-body.
12815
12816    namespace-body:
12817      declaration-seq [opt]  */
12818
12819 static void
12820 cp_parser_namespace_body (cp_parser* parser)
12821 {
12822   cp_parser_declaration_seq_opt (parser);
12823 }
12824
12825 /* Parse a namespace-alias-definition.
12826
12827    namespace-alias-definition:
12828      namespace identifier = qualified-namespace-specifier ;  */
12829
12830 static void
12831 cp_parser_namespace_alias_definition (cp_parser* parser)
12832 {
12833   tree identifier;
12834   tree namespace_specifier;
12835
12836   cp_token *token = cp_lexer_peek_token (parser->lexer);
12837
12838   /* Look for the `namespace' keyword.  */
12839   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
12840   /* Look for the identifier.  */
12841   identifier = cp_parser_identifier (parser);
12842   if (identifier == error_mark_node)
12843     return;
12844   /* Look for the `=' token.  */
12845   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
12846       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) 
12847     {
12848       error_at (token->location, "%<namespace%> definition is not allowed here");
12849       /* Skip the definition.  */
12850       cp_lexer_consume_token (parser->lexer);
12851       if (cp_parser_skip_to_closing_brace (parser))
12852         cp_lexer_consume_token (parser->lexer);
12853       return;
12854     }
12855   cp_parser_require (parser, CPP_EQ, "%<=%>");
12856   /* Look for the qualified-namespace-specifier.  */
12857   namespace_specifier
12858     = cp_parser_qualified_namespace_specifier (parser);
12859   /* Look for the `;' token.  */
12860   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12861
12862   /* Register the alias in the symbol table.  */
12863   do_namespace_alias (identifier, namespace_specifier);
12864 }
12865
12866 /* Parse a qualified-namespace-specifier.
12867
12868    qualified-namespace-specifier:
12869      :: [opt] nested-name-specifier [opt] namespace-name
12870
12871    Returns a NAMESPACE_DECL corresponding to the specified
12872    namespace.  */
12873
12874 static tree
12875 cp_parser_qualified_namespace_specifier (cp_parser* parser)
12876 {
12877   /* Look for the optional `::'.  */
12878   cp_parser_global_scope_opt (parser,
12879                               /*current_scope_valid_p=*/false);
12880
12881   /* Look for the optional nested-name-specifier.  */
12882   cp_parser_nested_name_specifier_opt (parser,
12883                                        /*typename_keyword_p=*/false,
12884                                        /*check_dependency_p=*/true,
12885                                        /*type_p=*/false,
12886                                        /*is_declaration=*/true);
12887
12888   return cp_parser_namespace_name (parser);
12889 }
12890
12891 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
12892    access declaration.
12893
12894    using-declaration:
12895      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
12896      using :: unqualified-id ;  
12897
12898    access-declaration:
12899      qualified-id ;  
12900
12901    */
12902
12903 static bool
12904 cp_parser_using_declaration (cp_parser* parser, 
12905                              bool access_declaration_p)
12906 {
12907   cp_token *token;
12908   bool typename_p = false;
12909   bool global_scope_p;
12910   tree decl;
12911   tree identifier;
12912   tree qscope;
12913
12914   if (access_declaration_p)
12915     cp_parser_parse_tentatively (parser);
12916   else
12917     {
12918       /* Look for the `using' keyword.  */
12919       cp_parser_require_keyword (parser, RID_USING, "%<using%>");
12920       
12921       /* Peek at the next token.  */
12922       token = cp_lexer_peek_token (parser->lexer);
12923       /* See if it's `typename'.  */
12924       if (token->keyword == RID_TYPENAME)
12925         {
12926           /* Remember that we've seen it.  */
12927           typename_p = true;
12928           /* Consume the `typename' token.  */
12929           cp_lexer_consume_token (parser->lexer);
12930         }
12931     }
12932
12933   /* Look for the optional global scope qualification.  */
12934   global_scope_p
12935     = (cp_parser_global_scope_opt (parser,
12936                                    /*current_scope_valid_p=*/false)
12937        != NULL_TREE);
12938
12939   /* If we saw `typename', or didn't see `::', then there must be a
12940      nested-name-specifier present.  */
12941   if (typename_p || !global_scope_p)
12942     qscope = cp_parser_nested_name_specifier (parser, typename_p,
12943                                               /*check_dependency_p=*/true,
12944                                               /*type_p=*/false,
12945                                               /*is_declaration=*/true);
12946   /* Otherwise, we could be in either of the two productions.  In that
12947      case, treat the nested-name-specifier as optional.  */
12948   else
12949     qscope = cp_parser_nested_name_specifier_opt (parser,
12950                                                   /*typename_keyword_p=*/false,
12951                                                   /*check_dependency_p=*/true,
12952                                                   /*type_p=*/false,
12953                                                   /*is_declaration=*/true);
12954   if (!qscope)
12955     qscope = global_namespace;
12956
12957   if (access_declaration_p && cp_parser_error_occurred (parser))
12958     /* Something has already gone wrong; there's no need to parse
12959        further.  Since an error has occurred, the return value of
12960        cp_parser_parse_definitely will be false, as required.  */
12961     return cp_parser_parse_definitely (parser);
12962
12963   token = cp_lexer_peek_token (parser->lexer);
12964   /* Parse the unqualified-id.  */
12965   identifier = cp_parser_unqualified_id (parser,
12966                                          /*template_keyword_p=*/false,
12967                                          /*check_dependency_p=*/true,
12968                                          /*declarator_p=*/true,
12969                                          /*optional_p=*/false);
12970
12971   if (access_declaration_p)
12972     {
12973       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
12974         cp_parser_simulate_error (parser);
12975       if (!cp_parser_parse_definitely (parser))
12976         return false;
12977     }
12978
12979   /* The function we call to handle a using-declaration is different
12980      depending on what scope we are in.  */
12981   if (qscope == error_mark_node || identifier == error_mark_node)
12982     ;
12983   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
12984            && TREE_CODE (identifier) != BIT_NOT_EXPR)
12985     /* [namespace.udecl]
12986
12987        A using declaration shall not name a template-id.  */
12988     error_at (token->location,
12989               "a template-id may not appear in a using-declaration");
12990   else
12991     {
12992       if (at_class_scope_p ())
12993         {
12994           /* Create the USING_DECL.  */
12995           decl = do_class_using_decl (parser->scope, identifier);
12996
12997           if (check_for_bare_parameter_packs (decl))
12998             return false;
12999           else
13000             /* Add it to the list of members in this class.  */
13001             finish_member_declaration (decl);
13002         }
13003       else
13004         {
13005           decl = cp_parser_lookup_name_simple (parser,
13006                                                identifier,
13007                                                token->location);
13008           if (decl == error_mark_node)
13009             cp_parser_name_lookup_error (parser, identifier,
13010                                          decl, NULL,
13011                                          token->location);
13012           else if (check_for_bare_parameter_packs (decl))
13013             return false;
13014           else if (!at_namespace_scope_p ())
13015             do_local_using_decl (decl, qscope, identifier);
13016           else
13017             do_toplevel_using_decl (decl, qscope, identifier);
13018         }
13019     }
13020
13021   /* Look for the final `;'.  */
13022   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
13023   
13024   return true;
13025 }
13026
13027 /* Parse a using-directive.
13028
13029    using-directive:
13030      using namespace :: [opt] nested-name-specifier [opt]
13031        namespace-name ;  */
13032
13033 static void
13034 cp_parser_using_directive (cp_parser* parser)
13035 {
13036   tree namespace_decl;
13037   tree attribs;
13038
13039   /* Look for the `using' keyword.  */
13040   cp_parser_require_keyword (parser, RID_USING, "%<using%>");
13041   /* And the `namespace' keyword.  */
13042   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
13043   /* Look for the optional `::' operator.  */
13044   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
13045   /* And the optional nested-name-specifier.  */
13046   cp_parser_nested_name_specifier_opt (parser,
13047                                        /*typename_keyword_p=*/false,
13048                                        /*check_dependency_p=*/true,
13049                                        /*type_p=*/false,
13050                                        /*is_declaration=*/true);
13051   /* Get the namespace being used.  */
13052   namespace_decl = cp_parser_namespace_name (parser);
13053   /* And any specified attributes.  */
13054   attribs = cp_parser_attributes_opt (parser);
13055   /* Update the symbol table.  */
13056   parse_using_directive (namespace_decl, attribs);
13057   /* Look for the final `;'.  */
13058   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
13059 }
13060
13061 /* Parse an asm-definition.
13062
13063    asm-definition:
13064      asm ( string-literal ) ;
13065
13066    GNU Extension:
13067
13068    asm-definition:
13069      asm volatile [opt] ( string-literal ) ;
13070      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
13071      asm volatile [opt] ( string-literal : asm-operand-list [opt]
13072                           : asm-operand-list [opt] ) ;
13073      asm volatile [opt] ( string-literal : asm-operand-list [opt]
13074                           : asm-operand-list [opt]
13075                           : asm-clobber-list [opt] ) ;
13076      asm volatile [opt] goto ( string-literal : : asm-operand-list [opt]
13077                                : asm-clobber-list [opt]
13078                                : asm-goto-list ) ;  */
13079
13080 static void
13081 cp_parser_asm_definition (cp_parser* parser)
13082 {
13083   tree string;
13084   tree outputs = NULL_TREE;
13085   tree inputs = NULL_TREE;
13086   tree clobbers = NULL_TREE;
13087   tree labels = NULL_TREE;
13088   tree asm_stmt;
13089   bool volatile_p = false;
13090   bool extended_p = false;
13091   bool invalid_inputs_p = false;
13092   bool invalid_outputs_p = false;
13093   bool goto_p = false;
13094   const char *missing = NULL;
13095
13096   /* Look for the `asm' keyword.  */
13097   cp_parser_require_keyword (parser, RID_ASM, "%<asm%>");
13098   /* See if the next token is `volatile'.  */
13099   if (cp_parser_allow_gnu_extensions_p (parser)
13100       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
13101     {
13102       /* Remember that we saw the `volatile' keyword.  */
13103       volatile_p = true;
13104       /* Consume the token.  */
13105       cp_lexer_consume_token (parser->lexer);
13106     }
13107   if (cp_parser_allow_gnu_extensions_p (parser)
13108       && parser->in_function_body
13109       && cp_lexer_next_token_is_keyword (parser->lexer, RID_GOTO))
13110     {
13111       /* Remember that we saw the `goto' keyword.  */
13112       goto_p = true;
13113       /* Consume the token.  */
13114       cp_lexer_consume_token (parser->lexer);
13115     }
13116   /* Look for the opening `('.  */
13117   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
13118     return;
13119   /* Look for the string.  */
13120   string = cp_parser_string_literal (parser, false, false);
13121   if (string == error_mark_node)
13122     {
13123       cp_parser_skip_to_closing_parenthesis (parser, true, false,
13124                                              /*consume_paren=*/true);
13125       return;
13126     }
13127
13128   /* If we're allowing GNU extensions, check for the extended assembly
13129      syntax.  Unfortunately, the `:' tokens need not be separated by
13130      a space in C, and so, for compatibility, we tolerate that here
13131      too.  Doing that means that we have to treat the `::' operator as
13132      two `:' tokens.  */
13133   if (cp_parser_allow_gnu_extensions_p (parser)
13134       && parser->in_function_body
13135       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
13136           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
13137     {
13138       bool inputs_p = false;
13139       bool clobbers_p = false;
13140       bool labels_p = false;
13141
13142       /* The extended syntax was used.  */
13143       extended_p = true;
13144
13145       /* Look for outputs.  */
13146       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13147         {
13148           /* Consume the `:'.  */
13149           cp_lexer_consume_token (parser->lexer);
13150           /* Parse the output-operands.  */
13151           if (cp_lexer_next_token_is_not (parser->lexer,
13152                                           CPP_COLON)
13153               && cp_lexer_next_token_is_not (parser->lexer,
13154                                              CPP_SCOPE)
13155               && cp_lexer_next_token_is_not (parser->lexer,
13156                                              CPP_CLOSE_PAREN)
13157               && !goto_p)
13158             outputs = cp_parser_asm_operand_list (parser);
13159
13160             if (outputs == error_mark_node)
13161               invalid_outputs_p = true;
13162         }
13163       /* If the next token is `::', there are no outputs, and the
13164          next token is the beginning of the inputs.  */
13165       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13166         /* The inputs are coming next.  */
13167         inputs_p = true;
13168
13169       /* Look for inputs.  */
13170       if (inputs_p
13171           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13172         {
13173           /* Consume the `:' or `::'.  */
13174           cp_lexer_consume_token (parser->lexer);
13175           /* Parse the output-operands.  */
13176           if (cp_lexer_next_token_is_not (parser->lexer,
13177                                           CPP_COLON)
13178               && cp_lexer_next_token_is_not (parser->lexer,
13179                                              CPP_SCOPE)
13180               && cp_lexer_next_token_is_not (parser->lexer,
13181                                              CPP_CLOSE_PAREN))
13182             inputs = cp_parser_asm_operand_list (parser);
13183
13184             if (inputs == error_mark_node)
13185               invalid_inputs_p = true;
13186         }
13187       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13188         /* The clobbers are coming next.  */
13189         clobbers_p = true;
13190
13191       /* Look for clobbers.  */
13192       if (clobbers_p
13193           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13194         {
13195           clobbers_p = true;
13196           /* Consume the `:' or `::'.  */
13197           cp_lexer_consume_token (parser->lexer);
13198           /* Parse the clobbers.  */
13199           if (cp_lexer_next_token_is_not (parser->lexer,
13200                                           CPP_COLON)
13201               && cp_lexer_next_token_is_not (parser->lexer,
13202                                              CPP_CLOSE_PAREN))
13203             clobbers = cp_parser_asm_clobber_list (parser);
13204         }
13205       else if (goto_p
13206                && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13207         /* The labels are coming next.  */
13208         labels_p = true;
13209
13210       /* Look for labels.  */
13211       if (labels_p
13212           || (goto_p && cp_lexer_next_token_is (parser->lexer, CPP_COLON)))
13213         {
13214           labels_p = true;
13215           /* Consume the `:' or `::'.  */
13216           cp_lexer_consume_token (parser->lexer);
13217           /* Parse the labels.  */
13218           labels = cp_parser_asm_label_list (parser);
13219         }
13220
13221       if (goto_p && !labels_p)
13222         missing = clobbers_p ? "%<:%>" : "%<:%> or %<::%>";
13223     }
13224   else if (goto_p)
13225     missing = "%<:%> or %<::%>";
13226
13227   /* Look for the closing `)'.  */
13228   if (!cp_parser_require (parser, missing ? CPP_COLON : CPP_CLOSE_PAREN,
13229                           missing ? missing : "%<)%>"))
13230     cp_parser_skip_to_closing_parenthesis (parser, true, false,
13231                                            /*consume_paren=*/true);
13232   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
13233
13234   if (!invalid_inputs_p && !invalid_outputs_p)
13235     {
13236       /* Create the ASM_EXPR.  */
13237       if (parser->in_function_body)
13238         {
13239           asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
13240                                       inputs, clobbers, labels);
13241           /* If the extended syntax was not used, mark the ASM_EXPR.  */
13242           if (!extended_p)
13243             {
13244               tree temp = asm_stmt;
13245               if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
13246                 temp = TREE_OPERAND (temp, 0);
13247
13248               ASM_INPUT_P (temp) = 1;
13249             }
13250         }
13251       else
13252         cgraph_add_asm_node (string);
13253     }
13254 }
13255
13256 /* Declarators [gram.dcl.decl] */
13257
13258 /* Parse an init-declarator.
13259
13260    init-declarator:
13261      declarator initializer [opt]
13262
13263    GNU Extension:
13264
13265    init-declarator:
13266      declarator asm-specification [opt] attributes [opt] initializer [opt]
13267
13268    function-definition:
13269      decl-specifier-seq [opt] declarator ctor-initializer [opt]
13270        function-body
13271      decl-specifier-seq [opt] declarator function-try-block
13272
13273    GNU Extension:
13274
13275    function-definition:
13276      __extension__ function-definition
13277
13278    The DECL_SPECIFIERS apply to this declarator.  Returns a
13279    representation of the entity declared.  If MEMBER_P is TRUE, then
13280    this declarator appears in a class scope.  The new DECL created by
13281    this declarator is returned.
13282
13283    The CHECKS are access checks that should be performed once we know
13284    what entity is being declared (and, therefore, what classes have
13285    befriended it).
13286
13287    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
13288    for a function-definition here as well.  If the declarator is a
13289    declarator for a function-definition, *FUNCTION_DEFINITION_P will
13290    be TRUE upon return.  By that point, the function-definition will
13291    have been completely parsed.
13292
13293    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
13294    is FALSE.  */
13295
13296 static tree
13297 cp_parser_init_declarator (cp_parser* parser,
13298                            cp_decl_specifier_seq *decl_specifiers,
13299                            VEC (deferred_access_check,gc)* checks,
13300                            bool function_definition_allowed_p,
13301                            bool member_p,
13302                            int declares_class_or_enum,
13303                            bool* function_definition_p)
13304 {
13305   cp_token *token = NULL, *asm_spec_start_token = NULL,
13306            *attributes_start_token = NULL;
13307   cp_declarator *declarator;
13308   tree prefix_attributes;
13309   tree attributes;
13310   tree asm_specification;
13311   tree initializer;
13312   tree decl = NULL_TREE;
13313   tree scope;
13314   int is_initialized;
13315   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
13316      initialized with "= ..", CPP_OPEN_PAREN if initialized with
13317      "(...)".  */
13318   enum cpp_ttype initialization_kind;
13319   bool is_direct_init = false;
13320   bool is_non_constant_init;
13321   int ctor_dtor_or_conv_p;
13322   bool friend_p;
13323   tree pushed_scope = NULL;
13324
13325   /* Gather the attributes that were provided with the
13326      decl-specifiers.  */
13327   prefix_attributes = decl_specifiers->attributes;
13328
13329   /* Assume that this is not the declarator for a function
13330      definition.  */
13331   if (function_definition_p)
13332     *function_definition_p = false;
13333
13334   /* Defer access checks while parsing the declarator; we cannot know
13335      what names are accessible until we know what is being
13336      declared.  */
13337   resume_deferring_access_checks ();
13338
13339   /* Parse the declarator.  */
13340   token = cp_lexer_peek_token (parser->lexer);
13341   declarator
13342     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13343                             &ctor_dtor_or_conv_p,
13344                             /*parenthesized_p=*/NULL,
13345                             /*member_p=*/false);
13346   /* Gather up the deferred checks.  */
13347   stop_deferring_access_checks ();
13348
13349   /* If the DECLARATOR was erroneous, there's no need to go
13350      further.  */
13351   if (declarator == cp_error_declarator)
13352     return error_mark_node;
13353
13354   /* Check that the number of template-parameter-lists is OK.  */
13355   if (!cp_parser_check_declarator_template_parameters (parser, declarator,
13356                                                        token->location))
13357     return error_mark_node;
13358
13359   if (declares_class_or_enum & 2)
13360     cp_parser_check_for_definition_in_return_type (declarator,
13361                                                    decl_specifiers->type,
13362                                                    decl_specifiers->type_location);
13363
13364   /* Figure out what scope the entity declared by the DECLARATOR is
13365      located in.  `grokdeclarator' sometimes changes the scope, so
13366      we compute it now.  */
13367   scope = get_scope_of_declarator (declarator);
13368
13369   /* If we're allowing GNU extensions, look for an asm-specification
13370      and attributes.  */
13371   if (cp_parser_allow_gnu_extensions_p (parser))
13372     {
13373       /* Look for an asm-specification.  */
13374       asm_spec_start_token = cp_lexer_peek_token (parser->lexer);
13375       asm_specification = cp_parser_asm_specification_opt (parser);
13376       /* And attributes.  */
13377       attributes_start_token = cp_lexer_peek_token (parser->lexer);
13378       attributes = cp_parser_attributes_opt (parser);
13379     }
13380   else
13381     {
13382       asm_specification = NULL_TREE;
13383       attributes = NULL_TREE;
13384     }
13385
13386   /* Peek at the next token.  */
13387   token = cp_lexer_peek_token (parser->lexer);
13388   /* Check to see if the token indicates the start of a
13389      function-definition.  */
13390   if (function_declarator_p (declarator)
13391       && cp_parser_token_starts_function_definition_p (token))
13392     {
13393       if (!function_definition_allowed_p)
13394         {
13395           /* If a function-definition should not appear here, issue an
13396              error message.  */
13397           cp_parser_error (parser,
13398                            "a function-definition is not allowed here");
13399           return error_mark_node;
13400         }
13401       else
13402         {
13403           location_t func_brace_location
13404             = cp_lexer_peek_token (parser->lexer)->location;
13405
13406           /* Neither attributes nor an asm-specification are allowed
13407              on a function-definition.  */
13408           if (asm_specification)
13409             error_at (asm_spec_start_token->location,
13410                       "an asm-specification is not allowed "
13411                       "on a function-definition");
13412           if (attributes)
13413             error_at (attributes_start_token->location,
13414                       "attributes are not allowed on a function-definition");
13415           /* This is a function-definition.  */
13416           *function_definition_p = true;
13417
13418           /* Parse the function definition.  */
13419           if (member_p)
13420             decl = cp_parser_save_member_function_body (parser,
13421                                                         decl_specifiers,
13422                                                         declarator,
13423                                                         prefix_attributes);
13424           else
13425             decl
13426               = (cp_parser_function_definition_from_specifiers_and_declarator
13427                  (parser, decl_specifiers, prefix_attributes, declarator));
13428
13429           if (decl != error_mark_node && DECL_STRUCT_FUNCTION (decl))
13430             {
13431               /* This is where the prologue starts...  */
13432               DECL_STRUCT_FUNCTION (decl)->function_start_locus
13433                 = func_brace_location;
13434             }
13435
13436           return decl;
13437         }
13438     }
13439
13440   /* [dcl.dcl]
13441
13442      Only in function declarations for constructors, destructors, and
13443      type conversions can the decl-specifier-seq be omitted.
13444
13445      We explicitly postpone this check past the point where we handle
13446      function-definitions because we tolerate function-definitions
13447      that are missing their return types in some modes.  */
13448   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
13449     {
13450       cp_parser_error (parser,
13451                        "expected constructor, destructor, or type conversion");
13452       return error_mark_node;
13453     }
13454
13455   /* An `=' or an `(', or an '{' in C++0x, indicates an initializer.  */
13456   if (token->type == CPP_EQ
13457       || token->type == CPP_OPEN_PAREN
13458       || token->type == CPP_OPEN_BRACE)
13459     {
13460       is_initialized = SD_INITIALIZED;
13461       initialization_kind = token->type;
13462
13463       if (token->type == CPP_EQ
13464           && function_declarator_p (declarator))
13465         {
13466           cp_token *t2 = cp_lexer_peek_nth_token (parser->lexer, 2);
13467           if (t2->keyword == RID_DEFAULT)
13468             is_initialized = SD_DEFAULTED;
13469           else if (t2->keyword == RID_DELETE)
13470             is_initialized = SD_DELETED;
13471         }
13472     }
13473   else
13474     {
13475       /* If the init-declarator isn't initialized and isn't followed by a
13476          `,' or `;', it's not a valid init-declarator.  */
13477       if (token->type != CPP_COMMA
13478           && token->type != CPP_SEMICOLON)
13479         {
13480           cp_parser_error (parser, "expected initializer");
13481           return error_mark_node;
13482         }
13483       is_initialized = SD_UNINITIALIZED;
13484       initialization_kind = CPP_EOF;
13485     }
13486
13487   /* Because start_decl has side-effects, we should only call it if we
13488      know we're going ahead.  By this point, we know that we cannot
13489      possibly be looking at any other construct.  */
13490   cp_parser_commit_to_tentative_parse (parser);
13491
13492   /* If the decl specifiers were bad, issue an error now that we're
13493      sure this was intended to be a declarator.  Then continue
13494      declaring the variable(s), as int, to try to cut down on further
13495      errors.  */
13496   if (decl_specifiers->any_specifiers_p
13497       && decl_specifiers->type == error_mark_node)
13498     {
13499       cp_parser_error (parser, "invalid type in declaration");
13500       decl_specifiers->type = integer_type_node;
13501     }
13502
13503   /* Check to see whether or not this declaration is a friend.  */
13504   friend_p = cp_parser_friend_p (decl_specifiers);
13505
13506   /* Enter the newly declared entry in the symbol table.  If we're
13507      processing a declaration in a class-specifier, we wait until
13508      after processing the initializer.  */
13509   if (!member_p)
13510     {
13511       if (parser->in_unbraced_linkage_specification_p)
13512         decl_specifiers->storage_class = sc_extern;
13513       decl = start_decl (declarator, decl_specifiers,
13514                          is_initialized, attributes, prefix_attributes,
13515                          &pushed_scope);
13516     }
13517   else if (scope)
13518     /* Enter the SCOPE.  That way unqualified names appearing in the
13519        initializer will be looked up in SCOPE.  */
13520     pushed_scope = push_scope (scope);
13521
13522   /* Perform deferred access control checks, now that we know in which
13523      SCOPE the declared entity resides.  */
13524   if (!member_p && decl)
13525     {
13526       tree saved_current_function_decl = NULL_TREE;
13527
13528       /* If the entity being declared is a function, pretend that we
13529          are in its scope.  If it is a `friend', it may have access to
13530          things that would not otherwise be accessible.  */
13531       if (TREE_CODE (decl) == FUNCTION_DECL)
13532         {
13533           saved_current_function_decl = current_function_decl;
13534           current_function_decl = decl;
13535         }
13536
13537       /* Perform access checks for template parameters.  */
13538       cp_parser_perform_template_parameter_access_checks (checks);
13539
13540       /* Perform the access control checks for the declarator and the
13541          decl-specifiers.  */
13542       perform_deferred_access_checks ();
13543
13544       /* Restore the saved value.  */
13545       if (TREE_CODE (decl) == FUNCTION_DECL)
13546         current_function_decl = saved_current_function_decl;
13547     }
13548
13549   /* Parse the initializer.  */
13550   initializer = NULL_TREE;
13551   is_direct_init = false;
13552   is_non_constant_init = true;
13553   if (is_initialized)
13554     {
13555       if (function_declarator_p (declarator))
13556         {
13557           cp_token *initializer_start_token = cp_lexer_peek_token (parser->lexer);
13558            if (initialization_kind == CPP_EQ)
13559              initializer = cp_parser_pure_specifier (parser);
13560            else
13561              {
13562                /* If the declaration was erroneous, we don't really
13563                   know what the user intended, so just silently
13564                   consume the initializer.  */
13565                if (decl != error_mark_node)
13566                  error_at (initializer_start_token->location,
13567                            "initializer provided for function");
13568                cp_parser_skip_to_closing_parenthesis (parser,
13569                                                       /*recovering=*/true,
13570                                                       /*or_comma=*/false,
13571                                                       /*consume_paren=*/true);
13572              }
13573         }
13574       else
13575         {
13576           /* We want to record the extra mangling scope for in-class
13577              initializers of class members and initializers of static data
13578              member templates.  The former is a C++0x feature which isn't
13579              implemented yet, and I expect it will involve deferring
13580              parsing of the initializer until end of class as with default
13581              arguments.  So right here we only handle the latter.  */
13582           if (!member_p && processing_template_decl)
13583             start_lambda_scope (decl);
13584           initializer = cp_parser_initializer (parser,
13585                                                &is_direct_init,
13586                                                &is_non_constant_init);
13587           if (!member_p && processing_template_decl)
13588             finish_lambda_scope ();
13589         }
13590     }
13591
13592   /* The old parser allows attributes to appear after a parenthesized
13593      initializer.  Mark Mitchell proposed removing this functionality
13594      on the GCC mailing lists on 2002-08-13.  This parser accepts the
13595      attributes -- but ignores them.  */
13596   if (cp_parser_allow_gnu_extensions_p (parser)
13597       && initialization_kind == CPP_OPEN_PAREN)
13598     if (cp_parser_attributes_opt (parser))
13599       warning (OPT_Wattributes,
13600                "attributes after parenthesized initializer ignored");
13601
13602   /* For an in-class declaration, use `grokfield' to create the
13603      declaration.  */
13604   if (member_p)
13605     {
13606       if (pushed_scope)
13607         {
13608           pop_scope (pushed_scope);
13609           pushed_scope = false;
13610         }
13611       decl = grokfield (declarator, decl_specifiers,
13612                         initializer, !is_non_constant_init,
13613                         /*asmspec=*/NULL_TREE,
13614                         prefix_attributes);
13615       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
13616         cp_parser_save_default_args (parser, decl);
13617     }
13618
13619   /* Finish processing the declaration.  But, skip friend
13620      declarations.  */
13621   if (!friend_p && decl && decl != error_mark_node)
13622     {
13623       cp_finish_decl (decl,
13624                       initializer, !is_non_constant_init,
13625                       asm_specification,
13626                       /* If the initializer is in parentheses, then this is
13627                          a direct-initialization, which means that an
13628                          `explicit' constructor is OK.  Otherwise, an
13629                          `explicit' constructor cannot be used.  */
13630                       ((is_direct_init || !is_initialized)
13631                        ? 0 : LOOKUP_ONLYCONVERTING));
13632     }
13633   else if ((cxx_dialect != cxx98) && friend_p
13634            && decl && TREE_CODE (decl) == FUNCTION_DECL)
13635     /* Core issue #226 (C++0x only): A default template-argument
13636        shall not be specified in a friend class template
13637        declaration. */
13638     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
13639                              /*is_partial=*/0, /*is_friend_decl=*/1);
13640
13641   if (!friend_p && pushed_scope)
13642     pop_scope (pushed_scope);
13643
13644   return decl;
13645 }
13646
13647 /* Parse a declarator.
13648
13649    declarator:
13650      direct-declarator
13651      ptr-operator declarator
13652
13653    abstract-declarator:
13654      ptr-operator abstract-declarator [opt]
13655      direct-abstract-declarator
13656
13657    GNU Extensions:
13658
13659    declarator:
13660      attributes [opt] direct-declarator
13661      attributes [opt] ptr-operator declarator
13662
13663    abstract-declarator:
13664      attributes [opt] ptr-operator abstract-declarator [opt]
13665      attributes [opt] direct-abstract-declarator
13666
13667    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
13668    detect constructor, destructor or conversion operators. It is set
13669    to -1 if the declarator is a name, and +1 if it is a
13670    function. Otherwise it is set to zero. Usually you just want to
13671    test for >0, but internally the negative value is used.
13672
13673    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
13674    a decl-specifier-seq unless it declares a constructor, destructor,
13675    or conversion.  It might seem that we could check this condition in
13676    semantic analysis, rather than parsing, but that makes it difficult
13677    to handle something like `f()'.  We want to notice that there are
13678    no decl-specifiers, and therefore realize that this is an
13679    expression, not a declaration.)
13680
13681    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
13682    the declarator is a direct-declarator of the form "(...)".
13683
13684    MEMBER_P is true iff this declarator is a member-declarator.  */
13685
13686 static cp_declarator *
13687 cp_parser_declarator (cp_parser* parser,
13688                       cp_parser_declarator_kind dcl_kind,
13689                       int* ctor_dtor_or_conv_p,
13690                       bool* parenthesized_p,
13691                       bool member_p)
13692 {
13693   cp_token *token;
13694   cp_declarator *declarator;
13695   enum tree_code code;
13696   cp_cv_quals cv_quals;
13697   tree class_type;
13698   tree attributes = NULL_TREE;
13699
13700   /* Assume this is not a constructor, destructor, or type-conversion
13701      operator.  */
13702   if (ctor_dtor_or_conv_p)
13703     *ctor_dtor_or_conv_p = 0;
13704
13705   if (cp_parser_allow_gnu_extensions_p (parser))
13706     attributes = cp_parser_attributes_opt (parser);
13707
13708   /* Peek at the next token.  */
13709   token = cp_lexer_peek_token (parser->lexer);
13710
13711   /* Check for the ptr-operator production.  */
13712   cp_parser_parse_tentatively (parser);
13713   /* Parse the ptr-operator.  */
13714   code = cp_parser_ptr_operator (parser,
13715                                  &class_type,
13716                                  &cv_quals);
13717   /* If that worked, then we have a ptr-operator.  */
13718   if (cp_parser_parse_definitely (parser))
13719     {
13720       /* If a ptr-operator was found, then this declarator was not
13721          parenthesized.  */
13722       if (parenthesized_p)
13723         *parenthesized_p = true;
13724       /* The dependent declarator is optional if we are parsing an
13725          abstract-declarator.  */
13726       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
13727         cp_parser_parse_tentatively (parser);
13728
13729       /* Parse the dependent declarator.  */
13730       declarator = cp_parser_declarator (parser, dcl_kind,
13731                                          /*ctor_dtor_or_conv_p=*/NULL,
13732                                          /*parenthesized_p=*/NULL,
13733                                          /*member_p=*/false);
13734
13735       /* If we are parsing an abstract-declarator, we must handle the
13736          case where the dependent declarator is absent.  */
13737       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
13738           && !cp_parser_parse_definitely (parser))
13739         declarator = NULL;
13740
13741       declarator = cp_parser_make_indirect_declarator
13742         (code, class_type, cv_quals, declarator);
13743     }
13744   /* Everything else is a direct-declarator.  */
13745   else
13746     {
13747       if (parenthesized_p)
13748         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
13749                                                    CPP_OPEN_PAREN);
13750       declarator = cp_parser_direct_declarator (parser, dcl_kind,
13751                                                 ctor_dtor_or_conv_p,
13752                                                 member_p);
13753     }
13754
13755   if (attributes && declarator && declarator != cp_error_declarator)
13756     declarator->attributes = attributes;
13757
13758   return declarator;
13759 }
13760
13761 /* Parse a direct-declarator or direct-abstract-declarator.
13762
13763    direct-declarator:
13764      declarator-id
13765      direct-declarator ( parameter-declaration-clause )
13766        cv-qualifier-seq [opt]
13767        exception-specification [opt]
13768      direct-declarator [ constant-expression [opt] ]
13769      ( declarator )
13770
13771    direct-abstract-declarator:
13772      direct-abstract-declarator [opt]
13773        ( parameter-declaration-clause )
13774        cv-qualifier-seq [opt]
13775        exception-specification [opt]
13776      direct-abstract-declarator [opt] [ constant-expression [opt] ]
13777      ( abstract-declarator )
13778
13779    Returns a representation of the declarator.  DCL_KIND is
13780    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
13781    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
13782    we are parsing a direct-declarator.  It is
13783    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
13784    of ambiguity we prefer an abstract declarator, as per
13785    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
13786    cp_parser_declarator.  */
13787
13788 static cp_declarator *
13789 cp_parser_direct_declarator (cp_parser* parser,
13790                              cp_parser_declarator_kind dcl_kind,
13791                              int* ctor_dtor_or_conv_p,
13792                              bool member_p)
13793 {
13794   cp_token *token;
13795   cp_declarator *declarator = NULL;
13796   tree scope = NULL_TREE;
13797   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
13798   bool saved_in_declarator_p = parser->in_declarator_p;
13799   bool first = true;
13800   tree pushed_scope = NULL_TREE;
13801
13802   while (true)
13803     {
13804       /* Peek at the next token.  */
13805       token = cp_lexer_peek_token (parser->lexer);
13806       if (token->type == CPP_OPEN_PAREN)
13807         {
13808           /* This is either a parameter-declaration-clause, or a
13809              parenthesized declarator. When we know we are parsing a
13810              named declarator, it must be a parenthesized declarator
13811              if FIRST is true. For instance, `(int)' is a
13812              parameter-declaration-clause, with an omitted
13813              direct-abstract-declarator. But `((*))', is a
13814              parenthesized abstract declarator. Finally, when T is a
13815              template parameter `(T)' is a
13816              parameter-declaration-clause, and not a parenthesized
13817              named declarator.
13818
13819              We first try and parse a parameter-declaration-clause,
13820              and then try a nested declarator (if FIRST is true).
13821
13822              It is not an error for it not to be a
13823              parameter-declaration-clause, even when FIRST is
13824              false. Consider,
13825
13826                int i (int);
13827                int i (3);
13828
13829              The first is the declaration of a function while the
13830              second is the definition of a variable, including its
13831              initializer.
13832
13833              Having seen only the parenthesis, we cannot know which of
13834              these two alternatives should be selected.  Even more
13835              complex are examples like:
13836
13837                int i (int (a));
13838                int i (int (3));
13839
13840              The former is a function-declaration; the latter is a
13841              variable initialization.
13842
13843              Thus again, we try a parameter-declaration-clause, and if
13844              that fails, we back out and return.  */
13845
13846           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
13847             {
13848               tree params;
13849               unsigned saved_num_template_parameter_lists;
13850               bool is_declarator = false;
13851               tree t;
13852
13853               /* In a member-declarator, the only valid interpretation
13854                  of a parenthesis is the start of a
13855                  parameter-declaration-clause.  (It is invalid to
13856                  initialize a static data member with a parenthesized
13857                  initializer; only the "=" form of initialization is
13858                  permitted.)  */
13859               if (!member_p)
13860                 cp_parser_parse_tentatively (parser);
13861
13862               /* Consume the `('.  */
13863               cp_lexer_consume_token (parser->lexer);
13864               if (first)
13865                 {
13866                   /* If this is going to be an abstract declarator, we're
13867                      in a declarator and we can't have default args.  */
13868                   parser->default_arg_ok_p = false;
13869                   parser->in_declarator_p = true;
13870                 }
13871
13872               /* Inside the function parameter list, surrounding
13873                  template-parameter-lists do not apply.  */
13874               saved_num_template_parameter_lists
13875                 = parser->num_template_parameter_lists;
13876               parser->num_template_parameter_lists = 0;
13877
13878               begin_scope (sk_function_parms, NULL_TREE);
13879
13880               /* Parse the parameter-declaration-clause.  */
13881               params = cp_parser_parameter_declaration_clause (parser);
13882
13883               parser->num_template_parameter_lists
13884                 = saved_num_template_parameter_lists;
13885
13886               /* If all went well, parse the cv-qualifier-seq and the
13887                  exception-specification.  */
13888               if (member_p || cp_parser_parse_definitely (parser))
13889                 {
13890                   cp_cv_quals cv_quals;
13891                   tree exception_specification;
13892                   tree late_return;
13893
13894                   is_declarator = true;
13895
13896                   if (ctor_dtor_or_conv_p)
13897                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
13898                   first = false;
13899                   /* Consume the `)'.  */
13900                   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
13901
13902                   /* Parse the cv-qualifier-seq.  */
13903                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
13904                   /* And the exception-specification.  */
13905                   exception_specification
13906                     = cp_parser_exception_specification_opt (parser);
13907
13908                   late_return
13909                     = cp_parser_late_return_type_opt (parser);
13910
13911                   /* Create the function-declarator.  */
13912                   declarator = make_call_declarator (declarator,
13913                                                      params,
13914                                                      cv_quals,
13915                                                      exception_specification,
13916                                                      late_return);
13917                   /* Any subsequent parameter lists are to do with
13918                      return type, so are not those of the declared
13919                      function.  */
13920                   parser->default_arg_ok_p = false;
13921                 }
13922
13923               /* Remove the function parms from scope.  */
13924               for (t = current_binding_level->names; t; t = TREE_CHAIN (t))
13925                 pop_binding (DECL_NAME (t), t);
13926               leave_scope();
13927
13928               if (is_declarator)
13929                 /* Repeat the main loop.  */
13930                 continue;
13931             }
13932
13933           /* If this is the first, we can try a parenthesized
13934              declarator.  */
13935           if (first)
13936             {
13937               bool saved_in_type_id_in_expr_p;
13938
13939               parser->default_arg_ok_p = saved_default_arg_ok_p;
13940               parser->in_declarator_p = saved_in_declarator_p;
13941
13942               /* Consume the `('.  */
13943               cp_lexer_consume_token (parser->lexer);
13944               /* Parse the nested declarator.  */
13945               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
13946               parser->in_type_id_in_expr_p = true;
13947               declarator
13948                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
13949                                         /*parenthesized_p=*/NULL,
13950                                         member_p);
13951               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
13952               first = false;
13953               /* Expect a `)'.  */
13954               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
13955                 declarator = cp_error_declarator;
13956               if (declarator == cp_error_declarator)
13957                 break;
13958
13959               goto handle_declarator;
13960             }
13961           /* Otherwise, we must be done.  */
13962           else
13963             break;
13964         }
13965       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
13966                && token->type == CPP_OPEN_SQUARE)
13967         {
13968           /* Parse an array-declarator.  */
13969           tree bounds;
13970
13971           if (ctor_dtor_or_conv_p)
13972             *ctor_dtor_or_conv_p = 0;
13973
13974           first = false;
13975           parser->default_arg_ok_p = false;
13976           parser->in_declarator_p = true;
13977           /* Consume the `['.  */
13978           cp_lexer_consume_token (parser->lexer);
13979           /* Peek at the next token.  */
13980           token = cp_lexer_peek_token (parser->lexer);
13981           /* If the next token is `]', then there is no
13982              constant-expression.  */
13983           if (token->type != CPP_CLOSE_SQUARE)
13984             {
13985               bool non_constant_p;
13986
13987               bounds
13988                 = cp_parser_constant_expression (parser,
13989                                                  /*allow_non_constant=*/true,
13990                                                  &non_constant_p);
13991               if (!non_constant_p)
13992                 bounds = fold_non_dependent_expr (bounds);
13993               /* Normally, the array bound must be an integral constant
13994                  expression.  However, as an extension, we allow VLAs
13995                  in function scopes.  */
13996               else if (!parser->in_function_body)
13997                 {
13998                   error_at (token->location,
13999                             "array bound is not an integer constant");
14000                   bounds = error_mark_node;
14001                 }
14002               else if (processing_template_decl && !error_operand_p (bounds))
14003                 {
14004                   /* Remember this wasn't a constant-expression.  */
14005                   bounds = build_nop (TREE_TYPE (bounds), bounds);
14006                   TREE_SIDE_EFFECTS (bounds) = 1;
14007                 }
14008             }
14009           else
14010             bounds = NULL_TREE;
14011           /* Look for the closing `]'.  */
14012           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>"))
14013             {
14014               declarator = cp_error_declarator;
14015               break;
14016             }
14017
14018           declarator = make_array_declarator (declarator, bounds);
14019         }
14020       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
14021         {
14022           {
14023             tree qualifying_scope;
14024             tree unqualified_name;
14025             special_function_kind sfk;
14026             bool abstract_ok;
14027             bool pack_expansion_p = false;
14028             cp_token *declarator_id_start_token;
14029
14030             /* Parse a declarator-id */
14031             abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
14032             if (abstract_ok)
14033               {
14034                 cp_parser_parse_tentatively (parser);
14035
14036                 /* If we see an ellipsis, we should be looking at a
14037                    parameter pack. */
14038                 if (token->type == CPP_ELLIPSIS)
14039                   {
14040                     /* Consume the `...' */
14041                     cp_lexer_consume_token (parser->lexer);
14042
14043                     pack_expansion_p = true;
14044                   }
14045               }
14046
14047             declarator_id_start_token = cp_lexer_peek_token (parser->lexer);
14048             unqualified_name
14049               = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
14050             qualifying_scope = parser->scope;
14051             if (abstract_ok)
14052               {
14053                 bool okay = false;
14054
14055                 if (!unqualified_name && pack_expansion_p)
14056                   {
14057                     /* Check whether an error occurred. */
14058                     okay = !cp_parser_error_occurred (parser);
14059
14060                     /* We already consumed the ellipsis to mark a
14061                        parameter pack, but we have no way to report it,
14062                        so abort the tentative parse. We will be exiting
14063                        immediately anyway. */
14064                     cp_parser_abort_tentative_parse (parser);
14065                   }
14066                 else
14067                   okay = cp_parser_parse_definitely (parser);
14068
14069                 if (!okay)
14070                   unqualified_name = error_mark_node;
14071                 else if (unqualified_name
14072                          && (qualifying_scope
14073                              || (TREE_CODE (unqualified_name)
14074                                  != IDENTIFIER_NODE)))
14075                   {
14076                     cp_parser_error (parser, "expected unqualified-id");
14077                     unqualified_name = error_mark_node;
14078                   }
14079               }
14080
14081             if (!unqualified_name)
14082               return NULL;
14083             if (unqualified_name == error_mark_node)
14084               {
14085                 declarator = cp_error_declarator;
14086                 pack_expansion_p = false;
14087                 declarator->parameter_pack_p = false;
14088                 break;
14089               }
14090
14091             if (qualifying_scope && at_namespace_scope_p ()
14092                 && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
14093               {
14094                 /* In the declaration of a member of a template class
14095                    outside of the class itself, the SCOPE will sometimes
14096                    be a TYPENAME_TYPE.  For example, given:
14097
14098                    template <typename T>
14099                    int S<T>::R::i = 3;
14100
14101                    the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
14102                    this context, we must resolve S<T>::R to an ordinary
14103                    type, rather than a typename type.
14104
14105                    The reason we normally avoid resolving TYPENAME_TYPEs
14106                    is that a specialization of `S' might render
14107                    `S<T>::R' not a type.  However, if `S' is
14108                    specialized, then this `i' will not be used, so there
14109                    is no harm in resolving the types here.  */
14110                 tree type;
14111
14112                 /* Resolve the TYPENAME_TYPE.  */
14113                 type = resolve_typename_type (qualifying_scope,
14114                                               /*only_current_p=*/false);
14115                 /* If that failed, the declarator is invalid.  */
14116                 if (TREE_CODE (type) == TYPENAME_TYPE)
14117                   error_at (declarator_id_start_token->location,
14118                             "%<%T::%E%> is not a type",
14119                             TYPE_CONTEXT (qualifying_scope),
14120                             TYPE_IDENTIFIER (qualifying_scope));
14121                 qualifying_scope = type;
14122               }
14123
14124             sfk = sfk_none;
14125
14126             if (unqualified_name)
14127               {
14128                 tree class_type;
14129
14130                 if (qualifying_scope
14131                     && CLASS_TYPE_P (qualifying_scope))
14132                   class_type = qualifying_scope;
14133                 else
14134                   class_type = current_class_type;
14135
14136                 if (TREE_CODE (unqualified_name) == TYPE_DECL)
14137                   {
14138                     tree name_type = TREE_TYPE (unqualified_name);
14139                     if (class_type && same_type_p (name_type, class_type))
14140                       {
14141                         if (qualifying_scope
14142                             && CLASSTYPE_USE_TEMPLATE (name_type))
14143                           {
14144                             error_at (declarator_id_start_token->location,
14145                                       "invalid use of constructor as a template");
14146                             inform (declarator_id_start_token->location,
14147                                     "use %<%T::%D%> instead of %<%T::%D%> to "
14148                                     "name the constructor in a qualified name",
14149                                     class_type,
14150                                     DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
14151                                     class_type, name_type);
14152                             declarator = cp_error_declarator;
14153                             break;
14154                           }
14155                         else
14156                           unqualified_name = constructor_name (class_type);
14157                       }
14158                     else
14159                       {
14160                         /* We do not attempt to print the declarator
14161                            here because we do not have enough
14162                            information about its original syntactic
14163                            form.  */
14164                         cp_parser_error (parser, "invalid declarator");
14165                         declarator = cp_error_declarator;
14166                         break;
14167                       }
14168                   }
14169
14170                 if (class_type)
14171                   {
14172                     if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
14173                       sfk = sfk_destructor;
14174                     else if (IDENTIFIER_TYPENAME_P (unqualified_name))
14175                       sfk = sfk_conversion;
14176                     else if (/* There's no way to declare a constructor
14177                                 for an anonymous type, even if the type
14178                                 got a name for linkage purposes.  */
14179                              !TYPE_WAS_ANONYMOUS (class_type)
14180                              && constructor_name_p (unqualified_name,
14181                                                     class_type))
14182                       {
14183                         unqualified_name = constructor_name (class_type);
14184                         sfk = sfk_constructor;
14185                       }
14186
14187                     if (ctor_dtor_or_conv_p && sfk != sfk_none)
14188                       *ctor_dtor_or_conv_p = -1;
14189                   }
14190               }
14191             declarator = make_id_declarator (qualifying_scope,
14192                                              unqualified_name,
14193                                              sfk);
14194             declarator->id_loc = token->location;
14195             declarator->parameter_pack_p = pack_expansion_p;
14196
14197             if (pack_expansion_p)
14198               maybe_warn_variadic_templates ();
14199           }
14200
14201         handle_declarator:;
14202           scope = get_scope_of_declarator (declarator);
14203           if (scope)
14204             /* Any names that appear after the declarator-id for a
14205                member are looked up in the containing scope.  */
14206             pushed_scope = push_scope (scope);
14207           parser->in_declarator_p = true;
14208           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
14209               || (declarator && declarator->kind == cdk_id))
14210             /* Default args are only allowed on function
14211                declarations.  */
14212             parser->default_arg_ok_p = saved_default_arg_ok_p;
14213           else
14214             parser->default_arg_ok_p = false;
14215
14216           first = false;
14217         }
14218       /* We're done.  */
14219       else
14220         break;
14221     }
14222
14223   /* For an abstract declarator, we might wind up with nothing at this
14224      point.  That's an error; the declarator is not optional.  */
14225   if (!declarator)
14226     cp_parser_error (parser, "expected declarator");
14227
14228   /* If we entered a scope, we must exit it now.  */
14229   if (pushed_scope)
14230     pop_scope (pushed_scope);
14231
14232   parser->default_arg_ok_p = saved_default_arg_ok_p;
14233   parser->in_declarator_p = saved_in_declarator_p;
14234
14235   return declarator;
14236 }
14237
14238 /* Parse a ptr-operator.
14239
14240    ptr-operator:
14241      * cv-qualifier-seq [opt]
14242      &
14243      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
14244
14245    GNU Extension:
14246
14247    ptr-operator:
14248      & cv-qualifier-seq [opt]
14249
14250    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
14251    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
14252    an rvalue reference. In the case of a pointer-to-member, *TYPE is
14253    filled in with the TYPE containing the member.  *CV_QUALS is
14254    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
14255    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
14256    Note that the tree codes returned by this function have nothing
14257    to do with the types of trees that will be eventually be created
14258    to represent the pointer or reference type being parsed. They are
14259    just constants with suggestive names. */
14260 static enum tree_code
14261 cp_parser_ptr_operator (cp_parser* parser,
14262                         tree* type,
14263                         cp_cv_quals *cv_quals)
14264 {
14265   enum tree_code code = ERROR_MARK;
14266   cp_token *token;
14267
14268   /* Assume that it's not a pointer-to-member.  */
14269   *type = NULL_TREE;
14270   /* And that there are no cv-qualifiers.  */
14271   *cv_quals = TYPE_UNQUALIFIED;
14272
14273   /* Peek at the next token.  */
14274   token = cp_lexer_peek_token (parser->lexer);
14275
14276   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
14277   if (token->type == CPP_MULT)
14278     code = INDIRECT_REF;
14279   else if (token->type == CPP_AND)
14280     code = ADDR_EXPR;
14281   else if ((cxx_dialect != cxx98) &&
14282            token->type == CPP_AND_AND) /* C++0x only */
14283     code = NON_LVALUE_EXPR;
14284
14285   if (code != ERROR_MARK)
14286     {
14287       /* Consume the `*', `&' or `&&'.  */
14288       cp_lexer_consume_token (parser->lexer);
14289
14290       /* A `*' can be followed by a cv-qualifier-seq, and so can a
14291          `&', if we are allowing GNU extensions.  (The only qualifier
14292          that can legally appear after `&' is `restrict', but that is
14293          enforced during semantic analysis.  */
14294       if (code == INDIRECT_REF
14295           || cp_parser_allow_gnu_extensions_p (parser))
14296         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
14297     }
14298   else
14299     {
14300       /* Try the pointer-to-member case.  */
14301       cp_parser_parse_tentatively (parser);
14302       /* Look for the optional `::' operator.  */
14303       cp_parser_global_scope_opt (parser,
14304                                   /*current_scope_valid_p=*/false);
14305       /* Look for the nested-name specifier.  */
14306       token = cp_lexer_peek_token (parser->lexer);
14307       cp_parser_nested_name_specifier (parser,
14308                                        /*typename_keyword_p=*/false,
14309                                        /*check_dependency_p=*/true,
14310                                        /*type_p=*/false,
14311                                        /*is_declaration=*/false);
14312       /* If we found it, and the next token is a `*', then we are
14313          indeed looking at a pointer-to-member operator.  */
14314       if (!cp_parser_error_occurred (parser)
14315           && cp_parser_require (parser, CPP_MULT, "%<*%>"))
14316         {
14317           /* Indicate that the `*' operator was used.  */
14318           code = INDIRECT_REF;
14319
14320           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
14321             error_at (token->location, "%qD is a namespace", parser->scope);
14322           else
14323             {
14324               /* The type of which the member is a member is given by the
14325                  current SCOPE.  */
14326               *type = parser->scope;
14327               /* The next name will not be qualified.  */
14328               parser->scope = NULL_TREE;
14329               parser->qualifying_scope = NULL_TREE;
14330               parser->object_scope = NULL_TREE;
14331               /* Look for the optional cv-qualifier-seq.  */
14332               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
14333             }
14334         }
14335       /* If that didn't work we don't have a ptr-operator.  */
14336       if (!cp_parser_parse_definitely (parser))
14337         cp_parser_error (parser, "expected ptr-operator");
14338     }
14339
14340   return code;
14341 }
14342
14343 /* Parse an (optional) cv-qualifier-seq.
14344
14345    cv-qualifier-seq:
14346      cv-qualifier cv-qualifier-seq [opt]
14347
14348    cv-qualifier:
14349      const
14350      volatile
14351
14352    GNU Extension:
14353
14354    cv-qualifier:
14355      __restrict__
14356
14357    Returns a bitmask representing the cv-qualifiers.  */
14358
14359 static cp_cv_quals
14360 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
14361 {
14362   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
14363
14364   while (true)
14365     {
14366       cp_token *token;
14367       cp_cv_quals cv_qualifier;
14368
14369       /* Peek at the next token.  */
14370       token = cp_lexer_peek_token (parser->lexer);
14371       /* See if it's a cv-qualifier.  */
14372       switch (token->keyword)
14373         {
14374         case RID_CONST:
14375           cv_qualifier = TYPE_QUAL_CONST;
14376           break;
14377
14378         case RID_VOLATILE:
14379           cv_qualifier = TYPE_QUAL_VOLATILE;
14380           break;
14381
14382         case RID_RESTRICT:
14383           cv_qualifier = TYPE_QUAL_RESTRICT;
14384           break;
14385
14386         default:
14387           cv_qualifier = TYPE_UNQUALIFIED;
14388           break;
14389         }
14390
14391       if (!cv_qualifier)
14392         break;
14393
14394       if (cv_quals & cv_qualifier)
14395         {
14396           error_at (token->location, "duplicate cv-qualifier");
14397           cp_lexer_purge_token (parser->lexer);
14398         }
14399       else
14400         {
14401           cp_lexer_consume_token (parser->lexer);
14402           cv_quals |= cv_qualifier;
14403         }
14404     }
14405
14406   return cv_quals;
14407 }
14408
14409 /* Parse a late-specified return type, if any.  This is not a separate
14410    non-terminal, but part of a function declarator, which looks like
14411
14412    -> type-id
14413
14414    Returns the type indicated by the type-id.  */
14415
14416 static tree
14417 cp_parser_late_return_type_opt (cp_parser* parser)
14418 {
14419   cp_token *token;
14420
14421   /* Peek at the next token.  */
14422   token = cp_lexer_peek_token (parser->lexer);
14423   /* A late-specified return type is indicated by an initial '->'. */
14424   if (token->type != CPP_DEREF)
14425     return NULL_TREE;
14426
14427   /* Consume the ->.  */
14428   cp_lexer_consume_token (parser->lexer);
14429
14430   return cp_parser_type_id (parser);
14431 }
14432
14433 /* Parse a declarator-id.
14434
14435    declarator-id:
14436      id-expression
14437      :: [opt] nested-name-specifier [opt] type-name
14438
14439    In the `id-expression' case, the value returned is as for
14440    cp_parser_id_expression if the id-expression was an unqualified-id.
14441    If the id-expression was a qualified-id, then a SCOPE_REF is
14442    returned.  The first operand is the scope (either a NAMESPACE_DECL
14443    or TREE_TYPE), but the second is still just a representation of an
14444    unqualified-id.  */
14445
14446 static tree
14447 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
14448 {
14449   tree id;
14450   /* The expression must be an id-expression.  Assume that qualified
14451      names are the names of types so that:
14452
14453        template <class T>
14454        int S<T>::R::i = 3;
14455
14456      will work; we must treat `S<T>::R' as the name of a type.
14457      Similarly, assume that qualified names are templates, where
14458      required, so that:
14459
14460        template <class T>
14461        int S<T>::R<T>::i = 3;
14462
14463      will work, too.  */
14464   id = cp_parser_id_expression (parser,
14465                                 /*template_keyword_p=*/false,
14466                                 /*check_dependency_p=*/false,
14467                                 /*template_p=*/NULL,
14468                                 /*declarator_p=*/true,
14469                                 optional_p);
14470   if (id && BASELINK_P (id))
14471     id = BASELINK_FUNCTIONS (id);
14472   return id;
14473 }
14474
14475 /* Parse a type-id.
14476
14477    type-id:
14478      type-specifier-seq abstract-declarator [opt]
14479
14480    Returns the TYPE specified.  */
14481
14482 static tree
14483 cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg)
14484 {
14485   cp_decl_specifier_seq type_specifier_seq;
14486   cp_declarator *abstract_declarator;
14487
14488   /* Parse the type-specifier-seq.  */
14489   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
14490                                 &type_specifier_seq);
14491   if (type_specifier_seq.type == error_mark_node)
14492     return error_mark_node;
14493
14494   /* There might or might not be an abstract declarator.  */
14495   cp_parser_parse_tentatively (parser);
14496   /* Look for the declarator.  */
14497   abstract_declarator
14498     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
14499                             /*parenthesized_p=*/NULL,
14500                             /*member_p=*/false);
14501   /* Check to see if there really was a declarator.  */
14502   if (!cp_parser_parse_definitely (parser))
14503     abstract_declarator = NULL;
14504
14505   if (type_specifier_seq.type
14506       && type_uses_auto (type_specifier_seq.type))
14507     {
14508       /* A type-id with type 'auto' is only ok if the abstract declarator
14509          is a function declarator with a late-specified return type.  */
14510       if (abstract_declarator
14511           && abstract_declarator->kind == cdk_function
14512           && abstract_declarator->u.function.late_return_type)
14513         /* OK */;
14514       else
14515         {
14516           error ("invalid use of %<auto%>");
14517           return error_mark_node;
14518         }
14519     }
14520   
14521   return groktypename (&type_specifier_seq, abstract_declarator,
14522                        is_template_arg);
14523 }
14524
14525 static tree cp_parser_type_id (cp_parser *parser)
14526 {
14527   return cp_parser_type_id_1 (parser, false);
14528 }
14529
14530 static tree cp_parser_template_type_arg (cp_parser *parser)
14531 {
14532   return cp_parser_type_id_1 (parser, true);
14533 }
14534
14535 /* Parse a type-specifier-seq.
14536
14537    type-specifier-seq:
14538      type-specifier type-specifier-seq [opt]
14539
14540    GNU extension:
14541
14542    type-specifier-seq:
14543      attributes type-specifier-seq [opt]
14544
14545    If IS_CONDITION is true, we are at the start of a "condition",
14546    e.g., we've just seen "if (".
14547
14548    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
14549
14550 static void
14551 cp_parser_type_specifier_seq (cp_parser* parser,
14552                               bool is_condition,
14553                               cp_decl_specifier_seq *type_specifier_seq)
14554 {
14555   bool seen_type_specifier = false;
14556   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
14557   cp_token *start_token = NULL;
14558
14559   /* Clear the TYPE_SPECIFIER_SEQ.  */
14560   clear_decl_specs (type_specifier_seq);
14561
14562   /* Parse the type-specifiers and attributes.  */
14563   while (true)
14564     {
14565       tree type_specifier;
14566       bool is_cv_qualifier;
14567
14568       /* Check for attributes first.  */
14569       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
14570         {
14571           type_specifier_seq->attributes =
14572             chainon (type_specifier_seq->attributes,
14573                      cp_parser_attributes_opt (parser));
14574           continue;
14575         }
14576
14577       /* record the token of the beginning of the type specifier seq,
14578          for error reporting purposes*/
14579      if (!start_token)
14580        start_token = cp_lexer_peek_token (parser->lexer);
14581
14582       /* Look for the type-specifier.  */
14583       type_specifier = cp_parser_type_specifier (parser,
14584                                                  flags,
14585                                                  type_specifier_seq,
14586                                                  /*is_declaration=*/false,
14587                                                  NULL,
14588                                                  &is_cv_qualifier);
14589       if (!type_specifier)
14590         {
14591           /* If the first type-specifier could not be found, this is not a
14592              type-specifier-seq at all.  */
14593           if (!seen_type_specifier)
14594             {
14595               cp_parser_error (parser, "expected type-specifier");
14596               type_specifier_seq->type = error_mark_node;
14597               return;
14598             }
14599           /* If subsequent type-specifiers could not be found, the
14600              type-specifier-seq is complete.  */
14601           break;
14602         }
14603
14604       seen_type_specifier = true;
14605       /* The standard says that a condition can be:
14606
14607             type-specifier-seq declarator = assignment-expression
14608
14609          However, given:
14610
14611            struct S {};
14612            if (int S = ...)
14613
14614          we should treat the "S" as a declarator, not as a
14615          type-specifier.  The standard doesn't say that explicitly for
14616          type-specifier-seq, but it does say that for
14617          decl-specifier-seq in an ordinary declaration.  Perhaps it
14618          would be clearer just to allow a decl-specifier-seq here, and
14619          then add a semantic restriction that if any decl-specifiers
14620          that are not type-specifiers appear, the program is invalid.  */
14621       if (is_condition && !is_cv_qualifier)
14622         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
14623     }
14624
14625   cp_parser_check_decl_spec (type_specifier_seq, start_token->location);
14626 }
14627
14628 /* Parse a parameter-declaration-clause.
14629
14630    parameter-declaration-clause:
14631      parameter-declaration-list [opt] ... [opt]
14632      parameter-declaration-list , ...
14633
14634    Returns a representation for the parameter declarations.  A return
14635    value of NULL indicates a parameter-declaration-clause consisting
14636    only of an ellipsis.  */
14637
14638 static tree
14639 cp_parser_parameter_declaration_clause (cp_parser* parser)
14640 {
14641   tree parameters;
14642   cp_token *token;
14643   bool ellipsis_p;
14644   bool is_error;
14645
14646   /* Peek at the next token.  */
14647   token = cp_lexer_peek_token (parser->lexer);
14648   /* Check for trivial parameter-declaration-clauses.  */
14649   if (token->type == CPP_ELLIPSIS)
14650     {
14651       /* Consume the `...' token.  */
14652       cp_lexer_consume_token (parser->lexer);
14653       return NULL_TREE;
14654     }
14655   else if (token->type == CPP_CLOSE_PAREN)
14656     /* There are no parameters.  */
14657     {
14658 #ifndef NO_IMPLICIT_EXTERN_C
14659       if (in_system_header && current_class_type == NULL
14660           && current_lang_name == lang_name_c)
14661         return NULL_TREE;
14662       else
14663 #endif
14664         return void_list_node;
14665     }
14666   /* Check for `(void)', too, which is a special case.  */
14667   else if (token->keyword == RID_VOID
14668            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
14669                == CPP_CLOSE_PAREN))
14670     {
14671       /* Consume the `void' token.  */
14672       cp_lexer_consume_token (parser->lexer);
14673       /* There are no parameters.  */
14674       return void_list_node;
14675     }
14676
14677   /* Parse the parameter-declaration-list.  */
14678   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
14679   /* If a parse error occurred while parsing the
14680      parameter-declaration-list, then the entire
14681      parameter-declaration-clause is erroneous.  */
14682   if (is_error)
14683     return NULL;
14684
14685   /* Peek at the next token.  */
14686   token = cp_lexer_peek_token (parser->lexer);
14687   /* If it's a `,', the clause should terminate with an ellipsis.  */
14688   if (token->type == CPP_COMMA)
14689     {
14690       /* Consume the `,'.  */
14691       cp_lexer_consume_token (parser->lexer);
14692       /* Expect an ellipsis.  */
14693       ellipsis_p
14694         = (cp_parser_require (parser, CPP_ELLIPSIS, "%<...%>") != NULL);
14695     }
14696   /* It might also be `...' if the optional trailing `,' was
14697      omitted.  */
14698   else if (token->type == CPP_ELLIPSIS)
14699     {
14700       /* Consume the `...' token.  */
14701       cp_lexer_consume_token (parser->lexer);
14702       /* And remember that we saw it.  */
14703       ellipsis_p = true;
14704     }
14705   else
14706     ellipsis_p = false;
14707
14708   /* Finish the parameter list.  */
14709   if (!ellipsis_p)
14710     parameters = chainon (parameters, void_list_node);
14711
14712   return parameters;
14713 }
14714
14715 /* Parse a parameter-declaration-list.
14716
14717    parameter-declaration-list:
14718      parameter-declaration
14719      parameter-declaration-list , parameter-declaration
14720
14721    Returns a representation of the parameter-declaration-list, as for
14722    cp_parser_parameter_declaration_clause.  However, the
14723    `void_list_node' is never appended to the list.  Upon return,
14724    *IS_ERROR will be true iff an error occurred.  */
14725
14726 static tree
14727 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
14728 {
14729   tree parameters = NULL_TREE;
14730   tree *tail = &parameters; 
14731   bool saved_in_unbraced_linkage_specification_p;
14732   int index = 0;
14733
14734   /* Assume all will go well.  */
14735   *is_error = false;
14736   /* The special considerations that apply to a function within an
14737      unbraced linkage specifications do not apply to the parameters
14738      to the function.  */
14739   saved_in_unbraced_linkage_specification_p 
14740     = parser->in_unbraced_linkage_specification_p;
14741   parser->in_unbraced_linkage_specification_p = false;
14742
14743   /* Look for more parameters.  */
14744   while (true)
14745     {
14746       cp_parameter_declarator *parameter;
14747       tree decl = error_mark_node;
14748       bool parenthesized_p;
14749       /* Parse the parameter.  */
14750       parameter
14751         = cp_parser_parameter_declaration (parser,
14752                                            /*template_parm_p=*/false,
14753                                            &parenthesized_p);
14754
14755       /* We don't know yet if the enclosing context is deprecated, so wait
14756          and warn in grokparms if appropriate.  */
14757       deprecated_state = DEPRECATED_SUPPRESS;
14758
14759       if (parameter)
14760         decl = grokdeclarator (parameter->declarator,
14761                                &parameter->decl_specifiers,
14762                                PARM,
14763                                parameter->default_argument != NULL_TREE,
14764                                &parameter->decl_specifiers.attributes);
14765
14766       deprecated_state = DEPRECATED_NORMAL;
14767
14768       /* If a parse error occurred parsing the parameter declaration,
14769          then the entire parameter-declaration-list is erroneous.  */
14770       if (decl == error_mark_node)
14771         {
14772           *is_error = true;
14773           parameters = error_mark_node;
14774           break;
14775         }
14776
14777       if (parameter->decl_specifiers.attributes)
14778         cplus_decl_attributes (&decl,
14779                                parameter->decl_specifiers.attributes,
14780                                0);
14781       if (DECL_NAME (decl))
14782         decl = pushdecl (decl);
14783
14784       if (decl != error_mark_node)
14785         {
14786           retrofit_lang_decl (decl);
14787           DECL_PARM_INDEX (decl) = ++index;
14788         }
14789
14790       /* Add the new parameter to the list.  */
14791       *tail = build_tree_list (parameter->default_argument, decl);
14792       tail = &TREE_CHAIN (*tail);
14793
14794       /* Peek at the next token.  */
14795       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
14796           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
14797           /* These are for Objective-C++ */
14798           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
14799           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14800         /* The parameter-declaration-list is complete.  */
14801         break;
14802       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14803         {
14804           cp_token *token;
14805
14806           /* Peek at the next token.  */
14807           token = cp_lexer_peek_nth_token (parser->lexer, 2);
14808           /* If it's an ellipsis, then the list is complete.  */
14809           if (token->type == CPP_ELLIPSIS)
14810             break;
14811           /* Otherwise, there must be more parameters.  Consume the
14812              `,'.  */
14813           cp_lexer_consume_token (parser->lexer);
14814           /* When parsing something like:
14815
14816                 int i(float f, double d)
14817
14818              we can tell after seeing the declaration for "f" that we
14819              are not looking at an initialization of a variable "i",
14820              but rather at the declaration of a function "i".
14821
14822              Due to the fact that the parsing of template arguments
14823              (as specified to a template-id) requires backtracking we
14824              cannot use this technique when inside a template argument
14825              list.  */
14826           if (!parser->in_template_argument_list_p
14827               && !parser->in_type_id_in_expr_p
14828               && cp_parser_uncommitted_to_tentative_parse_p (parser)
14829               /* However, a parameter-declaration of the form
14830                  "foat(f)" (which is a valid declaration of a
14831                  parameter "f") can also be interpreted as an
14832                  expression (the conversion of "f" to "float").  */
14833               && !parenthesized_p)
14834             cp_parser_commit_to_tentative_parse (parser);
14835         }
14836       else
14837         {
14838           cp_parser_error (parser, "expected %<,%> or %<...%>");
14839           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
14840             cp_parser_skip_to_closing_parenthesis (parser,
14841                                                    /*recovering=*/true,
14842                                                    /*or_comma=*/false,
14843                                                    /*consume_paren=*/false);
14844           break;
14845         }
14846     }
14847
14848   parser->in_unbraced_linkage_specification_p
14849     = saved_in_unbraced_linkage_specification_p;
14850
14851   return parameters;
14852 }
14853
14854 /* Parse a parameter declaration.
14855
14856    parameter-declaration:
14857      decl-specifier-seq ... [opt] declarator
14858      decl-specifier-seq declarator = assignment-expression
14859      decl-specifier-seq ... [opt] abstract-declarator [opt]
14860      decl-specifier-seq abstract-declarator [opt] = assignment-expression
14861
14862    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
14863    declares a template parameter.  (In that case, a non-nested `>'
14864    token encountered during the parsing of the assignment-expression
14865    is not interpreted as a greater-than operator.)
14866
14867    Returns a representation of the parameter, or NULL if an error
14868    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
14869    true iff the declarator is of the form "(p)".  */
14870
14871 static cp_parameter_declarator *
14872 cp_parser_parameter_declaration (cp_parser *parser,
14873                                  bool template_parm_p,
14874                                  bool *parenthesized_p)
14875 {
14876   int declares_class_or_enum;
14877   bool greater_than_is_operator_p;
14878   cp_decl_specifier_seq decl_specifiers;
14879   cp_declarator *declarator;
14880   tree default_argument;
14881   cp_token *token = NULL, *declarator_token_start = NULL;
14882   const char *saved_message;
14883
14884   /* In a template parameter, `>' is not an operator.
14885
14886      [temp.param]
14887
14888      When parsing a default template-argument for a non-type
14889      template-parameter, the first non-nested `>' is taken as the end
14890      of the template parameter-list rather than a greater-than
14891      operator.  */
14892   greater_than_is_operator_p = !template_parm_p;
14893
14894   /* Type definitions may not appear in parameter types.  */
14895   saved_message = parser->type_definition_forbidden_message;
14896   parser->type_definition_forbidden_message
14897     = "types may not be defined in parameter types";
14898
14899   /* Parse the declaration-specifiers.  */
14900   cp_parser_decl_specifier_seq (parser,
14901                                 CP_PARSER_FLAGS_NONE,
14902                                 &decl_specifiers,
14903                                 &declares_class_or_enum);
14904   /* If an error occurred, there's no reason to attempt to parse the
14905      rest of the declaration.  */
14906   if (cp_parser_error_occurred (parser))
14907     {
14908       parser->type_definition_forbidden_message = saved_message;
14909       return NULL;
14910     }
14911
14912   /* Peek at the next token.  */
14913   token = cp_lexer_peek_token (parser->lexer);
14914
14915   /* If the next token is a `)', `,', `=', `>', or `...', then there
14916      is no declarator. However, when variadic templates are enabled,
14917      there may be a declarator following `...'.  */
14918   if (token->type == CPP_CLOSE_PAREN
14919       || token->type == CPP_COMMA
14920       || token->type == CPP_EQ
14921       || token->type == CPP_GREATER)
14922     {
14923       declarator = NULL;
14924       if (parenthesized_p)
14925         *parenthesized_p = false;
14926     }
14927   /* Otherwise, there should be a declarator.  */
14928   else
14929     {
14930       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
14931       parser->default_arg_ok_p = false;
14932
14933       /* After seeing a decl-specifier-seq, if the next token is not a
14934          "(", there is no possibility that the code is a valid
14935          expression.  Therefore, if parsing tentatively, we commit at
14936          this point.  */
14937       if (!parser->in_template_argument_list_p
14938           /* In an expression context, having seen:
14939
14940                (int((char ...
14941
14942              we cannot be sure whether we are looking at a
14943              function-type (taking a "char" as a parameter) or a cast
14944              of some object of type "char" to "int".  */
14945           && !parser->in_type_id_in_expr_p
14946           && cp_parser_uncommitted_to_tentative_parse_p (parser)
14947           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
14948         cp_parser_commit_to_tentative_parse (parser);
14949       /* Parse the declarator.  */
14950       declarator_token_start = token;
14951       declarator = cp_parser_declarator (parser,
14952                                          CP_PARSER_DECLARATOR_EITHER,
14953                                          /*ctor_dtor_or_conv_p=*/NULL,
14954                                          parenthesized_p,
14955                                          /*member_p=*/false);
14956       parser->default_arg_ok_p = saved_default_arg_ok_p;
14957       /* After the declarator, allow more attributes.  */
14958       decl_specifiers.attributes
14959         = chainon (decl_specifiers.attributes,
14960                    cp_parser_attributes_opt (parser));
14961     }
14962
14963   /* If the next token is an ellipsis, and we have not seen a
14964      declarator name, and the type of the declarator contains parameter
14965      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
14966      a parameter pack expansion expression. Otherwise, leave the
14967      ellipsis for a C-style variadic function. */
14968   token = cp_lexer_peek_token (parser->lexer);
14969   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14970     {
14971       tree type = decl_specifiers.type;
14972
14973       if (type && DECL_P (type))
14974         type = TREE_TYPE (type);
14975
14976       if (type
14977           && TREE_CODE (type) != TYPE_PACK_EXPANSION
14978           && declarator_can_be_parameter_pack (declarator)
14979           && (!declarator || !declarator->parameter_pack_p)
14980           && uses_parameter_packs (type))
14981         {
14982           /* Consume the `...'. */
14983           cp_lexer_consume_token (parser->lexer);
14984           maybe_warn_variadic_templates ();
14985           
14986           /* Build a pack expansion type */
14987           if (declarator)
14988             declarator->parameter_pack_p = true;
14989           else
14990             decl_specifiers.type = make_pack_expansion (type);
14991         }
14992     }
14993
14994   /* The restriction on defining new types applies only to the type
14995      of the parameter, not to the default argument.  */
14996   parser->type_definition_forbidden_message = saved_message;
14997
14998   /* If the next token is `=', then process a default argument.  */
14999   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
15000     {
15001       /* Consume the `='.  */
15002       cp_lexer_consume_token (parser->lexer);
15003
15004       /* If we are defining a class, then the tokens that make up the
15005          default argument must be saved and processed later.  */
15006       if (!template_parm_p && at_class_scope_p ()
15007           && TYPE_BEING_DEFINED (current_class_type)
15008           && !LAMBDA_TYPE_P (current_class_type))
15009         {
15010           unsigned depth = 0;
15011           int maybe_template_id = 0;
15012           cp_token *first_token;
15013           cp_token *token;
15014
15015           /* Add tokens until we have processed the entire default
15016              argument.  We add the range [first_token, token).  */
15017           first_token = cp_lexer_peek_token (parser->lexer);
15018           while (true)
15019             {
15020               bool done = false;
15021
15022               /* Peek at the next token.  */
15023               token = cp_lexer_peek_token (parser->lexer);
15024               /* What we do depends on what token we have.  */
15025               switch (token->type)
15026                 {
15027                   /* In valid code, a default argument must be
15028                      immediately followed by a `,' `)', or `...'.  */
15029                 case CPP_COMMA:
15030                   if (depth == 0 && maybe_template_id)
15031                     {
15032                       /* If we've seen a '<', we might be in a
15033                          template-argument-list.  Until Core issue 325 is
15034                          resolved, we don't know how this situation ought
15035                          to be handled, so try to DTRT.  We check whether
15036                          what comes after the comma is a valid parameter
15037                          declaration list.  If it is, then the comma ends
15038                          the default argument; otherwise the default
15039                          argument continues.  */
15040                       bool error = false;
15041
15042                       /* Set ITALP so cp_parser_parameter_declaration_list
15043                          doesn't decide to commit to this parse.  */
15044                       bool saved_italp = parser->in_template_argument_list_p;
15045                       parser->in_template_argument_list_p = true;
15046
15047                       cp_parser_parse_tentatively (parser);
15048                       cp_lexer_consume_token (parser->lexer);
15049                       cp_parser_parameter_declaration_list (parser, &error);
15050                       if (!cp_parser_error_occurred (parser) && !error)
15051                         done = true;
15052                       cp_parser_abort_tentative_parse (parser);
15053
15054                       parser->in_template_argument_list_p = saved_italp;
15055                       break;
15056                     }
15057                 case CPP_CLOSE_PAREN:
15058                 case CPP_ELLIPSIS:
15059                   /* If we run into a non-nested `;', `}', or `]',
15060                      then the code is invalid -- but the default
15061                      argument is certainly over.  */
15062                 case CPP_SEMICOLON:
15063                 case CPP_CLOSE_BRACE:
15064                 case CPP_CLOSE_SQUARE:
15065                   if (depth == 0)
15066                     done = true;
15067                   /* Update DEPTH, if necessary.  */
15068                   else if (token->type == CPP_CLOSE_PAREN
15069                            || token->type == CPP_CLOSE_BRACE
15070                            || token->type == CPP_CLOSE_SQUARE)
15071                     --depth;
15072                   break;
15073
15074                 case CPP_OPEN_PAREN:
15075                 case CPP_OPEN_SQUARE:
15076                 case CPP_OPEN_BRACE:
15077                   ++depth;
15078                   break;
15079
15080                 case CPP_LESS:
15081                   if (depth == 0)
15082                     /* This might be the comparison operator, or it might
15083                        start a template argument list.  */
15084                     ++maybe_template_id;
15085                   break;
15086
15087                 case CPP_RSHIFT:
15088                   if (cxx_dialect == cxx98)
15089                     break;
15090                   /* Fall through for C++0x, which treats the `>>'
15091                      operator like two `>' tokens in certain
15092                      cases.  */
15093
15094                 case CPP_GREATER:
15095                   if (depth == 0)
15096                     {
15097                       /* This might be an operator, or it might close a
15098                          template argument list.  But if a previous '<'
15099                          started a template argument list, this will have
15100                          closed it, so we can't be in one anymore.  */
15101                       maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
15102                       if (maybe_template_id < 0)
15103                         maybe_template_id = 0;
15104                     }
15105                   break;
15106
15107                   /* If we run out of tokens, issue an error message.  */
15108                 case CPP_EOF:
15109                 case CPP_PRAGMA_EOL:
15110                   error_at (token->location, "file ends in default argument");
15111                   done = true;
15112                   break;
15113
15114                 case CPP_NAME:
15115                 case CPP_SCOPE:
15116                   /* In these cases, we should look for template-ids.
15117                      For example, if the default argument is
15118                      `X<int, double>()', we need to do name lookup to
15119                      figure out whether or not `X' is a template; if
15120                      so, the `,' does not end the default argument.
15121
15122                      That is not yet done.  */
15123                   break;
15124
15125                 default:
15126                   break;
15127                 }
15128
15129               /* If we've reached the end, stop.  */
15130               if (done)
15131                 break;
15132
15133               /* Add the token to the token block.  */
15134               token = cp_lexer_consume_token (parser->lexer);
15135             }
15136
15137           /* Create a DEFAULT_ARG to represent the unparsed default
15138              argument.  */
15139           default_argument = make_node (DEFAULT_ARG);
15140           DEFARG_TOKENS (default_argument)
15141             = cp_token_cache_new (first_token, token);
15142           DEFARG_INSTANTIATIONS (default_argument) = NULL;
15143         }
15144       /* Outside of a class definition, we can just parse the
15145          assignment-expression.  */
15146       else
15147         {
15148           token = cp_lexer_peek_token (parser->lexer);
15149           default_argument 
15150             = cp_parser_default_argument (parser, template_parm_p);
15151         }
15152
15153       if (!parser->default_arg_ok_p)
15154         {
15155           if (flag_permissive)
15156             warning (0, "deprecated use of default argument for parameter of non-function");
15157           else
15158             {
15159               error_at (token->location,
15160                         "default arguments are only "
15161                         "permitted for function parameters");
15162               default_argument = NULL_TREE;
15163             }
15164         }
15165       else if ((declarator && declarator->parameter_pack_p)
15166                || (decl_specifiers.type
15167                    && PACK_EXPANSION_P (decl_specifiers.type)))
15168         {
15169           /* Find the name of the parameter pack.  */     
15170           cp_declarator *id_declarator = declarator;
15171           while (id_declarator && id_declarator->kind != cdk_id)
15172             id_declarator = id_declarator->declarator;
15173           
15174           if (id_declarator && id_declarator->kind == cdk_id)
15175             error_at (declarator_token_start->location,
15176                       template_parm_p 
15177                       ? "template parameter pack %qD"
15178                       " cannot have a default argument"
15179                       : "parameter pack %qD cannot have a default argument",
15180                       id_declarator->u.id.unqualified_name);
15181           else
15182             error_at (declarator_token_start->location,
15183                       template_parm_p 
15184                       ? "template parameter pack cannot have a default argument"
15185                       : "parameter pack cannot have a default argument");
15186           
15187           default_argument = NULL_TREE;
15188         }
15189     }
15190   else
15191     default_argument = NULL_TREE;
15192
15193   return make_parameter_declarator (&decl_specifiers,
15194                                     declarator,
15195                                     default_argument);
15196 }
15197
15198 /* Parse a default argument and return it.
15199
15200    TEMPLATE_PARM_P is true if this is a default argument for a
15201    non-type template parameter.  */
15202 static tree
15203 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
15204 {
15205   tree default_argument = NULL_TREE;
15206   bool saved_greater_than_is_operator_p;
15207   bool saved_local_variables_forbidden_p;
15208
15209   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
15210      set correctly.  */
15211   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
15212   parser->greater_than_is_operator_p = !template_parm_p;
15213   /* Local variable names (and the `this' keyword) may not
15214      appear in a default argument.  */
15215   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
15216   parser->local_variables_forbidden_p = true;
15217   /* Parse the assignment-expression.  */
15218   if (template_parm_p)
15219     push_deferring_access_checks (dk_no_deferred);
15220   default_argument
15221     = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
15222   if (template_parm_p)
15223     pop_deferring_access_checks ();
15224   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
15225   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
15226
15227   return default_argument;
15228 }
15229
15230 /* Parse a function-body.
15231
15232    function-body:
15233      compound_statement  */
15234
15235 static void
15236 cp_parser_function_body (cp_parser *parser)
15237 {
15238   cp_parser_compound_statement (parser, NULL, false);
15239 }
15240
15241 /* Parse a ctor-initializer-opt followed by a function-body.  Return
15242    true if a ctor-initializer was present.  */
15243
15244 static bool
15245 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
15246 {
15247   tree body;
15248   bool ctor_initializer_p;
15249
15250   /* Begin the function body.  */
15251   body = begin_function_body ();
15252   /* Parse the optional ctor-initializer.  */
15253   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
15254   /* Parse the function-body.  */
15255   cp_parser_function_body (parser);
15256   /* Finish the function body.  */
15257   finish_function_body (body);
15258
15259   return ctor_initializer_p;
15260 }
15261
15262 /* Parse an initializer.
15263
15264    initializer:
15265      = initializer-clause
15266      ( expression-list )
15267
15268    Returns an expression representing the initializer.  If no
15269    initializer is present, NULL_TREE is returned.
15270
15271    *IS_DIRECT_INIT is set to FALSE if the `= initializer-clause'
15272    production is used, and TRUE otherwise.  *IS_DIRECT_INIT is
15273    set to TRUE if there is no initializer present.  If there is an
15274    initializer, and it is not a constant-expression, *NON_CONSTANT_P
15275    is set to true; otherwise it is set to false.  */
15276
15277 static tree
15278 cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
15279                        bool* non_constant_p)
15280 {
15281   cp_token *token;
15282   tree init;
15283
15284   /* Peek at the next token.  */
15285   token = cp_lexer_peek_token (parser->lexer);
15286
15287   /* Let our caller know whether or not this initializer was
15288      parenthesized.  */
15289   *is_direct_init = (token->type != CPP_EQ);
15290   /* Assume that the initializer is constant.  */
15291   *non_constant_p = false;
15292
15293   if (token->type == CPP_EQ)
15294     {
15295       /* Consume the `='.  */
15296       cp_lexer_consume_token (parser->lexer);
15297       /* Parse the initializer-clause.  */
15298       init = cp_parser_initializer_clause (parser, non_constant_p);
15299     }
15300   else if (token->type == CPP_OPEN_PAREN)
15301     {
15302       VEC(tree,gc) *vec;
15303       vec = cp_parser_parenthesized_expression_list (parser, false,
15304                                                      /*cast_p=*/false,
15305                                                      /*allow_expansion_p=*/true,
15306                                                      non_constant_p);
15307       if (vec == NULL)
15308         return error_mark_node;
15309       init = build_tree_list_vec (vec);
15310       release_tree_vector (vec);
15311     }
15312   else if (token->type == CPP_OPEN_BRACE)
15313     {
15314       maybe_warn_cpp0x ("extended initializer lists");
15315       init = cp_parser_braced_list (parser, non_constant_p);
15316       CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
15317     }
15318   else
15319     {
15320       /* Anything else is an error.  */
15321       cp_parser_error (parser, "expected initializer");
15322       init = error_mark_node;
15323     }
15324
15325   return init;
15326 }
15327
15328 /* Parse an initializer-clause.
15329
15330    initializer-clause:
15331      assignment-expression
15332      braced-init-list
15333
15334    Returns an expression representing the initializer.
15335
15336    If the `assignment-expression' production is used the value
15337    returned is simply a representation for the expression.
15338
15339    Otherwise, calls cp_parser_braced_list.  */
15340
15341 static tree
15342 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
15343 {
15344   tree initializer;
15345
15346   /* Assume the expression is constant.  */
15347   *non_constant_p = false;
15348
15349   /* If it is not a `{', then we are looking at an
15350      assignment-expression.  */
15351   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
15352     {
15353       initializer
15354         = cp_parser_constant_expression (parser,
15355                                         /*allow_non_constant_p=*/true,
15356                                         non_constant_p);
15357       if (!*non_constant_p)
15358         initializer = fold_non_dependent_expr (initializer);
15359     }
15360   else
15361     initializer = cp_parser_braced_list (parser, non_constant_p);
15362
15363   return initializer;
15364 }
15365
15366 /* Parse a brace-enclosed initializer list.
15367
15368    braced-init-list:
15369      { initializer-list , [opt] }
15370      { }
15371
15372    Returns a CONSTRUCTOR.  The CONSTRUCTOR_ELTS will be
15373    the elements of the initializer-list (or NULL, if the last
15374    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
15375    NULL_TREE.  There is no way to detect whether or not the optional
15376    trailing `,' was provided.  NON_CONSTANT_P is as for
15377    cp_parser_initializer.  */     
15378
15379 static tree
15380 cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
15381 {
15382   tree initializer;
15383
15384   /* Consume the `{' token.  */
15385   cp_lexer_consume_token (parser->lexer);
15386   /* Create a CONSTRUCTOR to represent the braced-initializer.  */
15387   initializer = make_node (CONSTRUCTOR);
15388   /* If it's not a `}', then there is a non-trivial initializer.  */
15389   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
15390     {
15391       /* Parse the initializer list.  */
15392       CONSTRUCTOR_ELTS (initializer)
15393         = cp_parser_initializer_list (parser, non_constant_p);
15394       /* A trailing `,' token is allowed.  */
15395       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
15396         cp_lexer_consume_token (parser->lexer);
15397     }
15398   /* Now, there should be a trailing `}'.  */
15399   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
15400   TREE_TYPE (initializer) = init_list_type_node;
15401   return initializer;
15402 }
15403
15404 /* Parse an initializer-list.
15405
15406    initializer-list:
15407      initializer-clause ... [opt]
15408      initializer-list , initializer-clause ... [opt]
15409
15410    GNU Extension:
15411
15412    initializer-list:
15413      identifier : initializer-clause
15414      initializer-list, identifier : initializer-clause
15415
15416    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
15417    for the initializer.  If the INDEX of the elt is non-NULL, it is the
15418    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
15419    as for cp_parser_initializer.  */
15420
15421 static VEC(constructor_elt,gc) *
15422 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
15423 {
15424   VEC(constructor_elt,gc) *v = NULL;
15425
15426   /* Assume all of the expressions are constant.  */
15427   *non_constant_p = false;
15428
15429   /* Parse the rest of the list.  */
15430   while (true)
15431     {
15432       cp_token *token;
15433       tree identifier;
15434       tree initializer;
15435       bool clause_non_constant_p;
15436
15437       /* If the next token is an identifier and the following one is a
15438          colon, we are looking at the GNU designated-initializer
15439          syntax.  */
15440       if (cp_parser_allow_gnu_extensions_p (parser)
15441           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
15442           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
15443         {
15444           /* Warn the user that they are using an extension.  */
15445           pedwarn (input_location, OPT_pedantic, 
15446                    "ISO C++ does not allow designated initializers");
15447           /* Consume the identifier.  */
15448           identifier = cp_lexer_consume_token (parser->lexer)->u.value;
15449           /* Consume the `:'.  */
15450           cp_lexer_consume_token (parser->lexer);
15451         }
15452       else
15453         identifier = NULL_TREE;
15454
15455       /* Parse the initializer.  */
15456       initializer = cp_parser_initializer_clause (parser,
15457                                                   &clause_non_constant_p);
15458       /* If any clause is non-constant, so is the entire initializer.  */
15459       if (clause_non_constant_p)
15460         *non_constant_p = true;
15461
15462       /* If we have an ellipsis, this is an initializer pack
15463          expansion.  */
15464       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
15465         {
15466           /* Consume the `...'.  */
15467           cp_lexer_consume_token (parser->lexer);
15468
15469           /* Turn the initializer into an initializer expansion.  */
15470           initializer = make_pack_expansion (initializer);
15471         }
15472
15473       /* Add it to the vector.  */
15474       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
15475
15476       /* If the next token is not a comma, we have reached the end of
15477          the list.  */
15478       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
15479         break;
15480
15481       /* Peek at the next token.  */
15482       token = cp_lexer_peek_nth_token (parser->lexer, 2);
15483       /* If the next token is a `}', then we're still done.  An
15484          initializer-clause can have a trailing `,' after the
15485          initializer-list and before the closing `}'.  */
15486       if (token->type == CPP_CLOSE_BRACE)
15487         break;
15488
15489       /* Consume the `,' token.  */
15490       cp_lexer_consume_token (parser->lexer);
15491     }
15492
15493   return v;
15494 }
15495
15496 /* Classes [gram.class] */
15497
15498 /* Parse a class-name.
15499
15500    class-name:
15501      identifier
15502      template-id
15503
15504    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
15505    to indicate that names looked up in dependent types should be
15506    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
15507    keyword has been used to indicate that the name that appears next
15508    is a template.  TAG_TYPE indicates the explicit tag given before
15509    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
15510    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
15511    is the class being defined in a class-head.
15512
15513    Returns the TYPE_DECL representing the class.  */
15514
15515 static tree
15516 cp_parser_class_name (cp_parser *parser,
15517                       bool typename_keyword_p,
15518                       bool template_keyword_p,
15519                       enum tag_types tag_type,
15520                       bool check_dependency_p,
15521                       bool class_head_p,
15522                       bool is_declaration)
15523 {
15524   tree decl;
15525   tree scope;
15526   bool typename_p;
15527   cp_token *token;
15528   tree identifier = NULL_TREE;
15529
15530   /* All class-names start with an identifier.  */
15531   token = cp_lexer_peek_token (parser->lexer);
15532   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
15533     {
15534       cp_parser_error (parser, "expected class-name");
15535       return error_mark_node;
15536     }
15537
15538   /* PARSER->SCOPE can be cleared when parsing the template-arguments
15539      to a template-id, so we save it here.  */
15540   scope = parser->scope;
15541   if (scope == error_mark_node)
15542     return error_mark_node;
15543
15544   /* Any name names a type if we're following the `typename' keyword
15545      in a qualified name where the enclosing scope is type-dependent.  */
15546   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
15547                 && dependent_type_p (scope));
15548   /* Handle the common case (an identifier, but not a template-id)
15549      efficiently.  */
15550   if (token->type == CPP_NAME
15551       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
15552     {
15553       cp_token *identifier_token;
15554       bool ambiguous_p;
15555
15556       /* Look for the identifier.  */
15557       identifier_token = cp_lexer_peek_token (parser->lexer);
15558       ambiguous_p = identifier_token->ambiguous_p;
15559       identifier = cp_parser_identifier (parser);
15560       /* If the next token isn't an identifier, we are certainly not
15561          looking at a class-name.  */
15562       if (identifier == error_mark_node)
15563         decl = error_mark_node;
15564       /* If we know this is a type-name, there's no need to look it
15565          up.  */
15566       else if (typename_p)
15567         decl = identifier;
15568       else
15569         {
15570           tree ambiguous_decls;
15571           /* If we already know that this lookup is ambiguous, then
15572              we've already issued an error message; there's no reason
15573              to check again.  */
15574           if (ambiguous_p)
15575             {
15576               cp_parser_simulate_error (parser);
15577               return error_mark_node;
15578             }
15579           /* If the next token is a `::', then the name must be a type
15580              name.
15581
15582              [basic.lookup.qual]
15583
15584              During the lookup for a name preceding the :: scope
15585              resolution operator, object, function, and enumerator
15586              names are ignored.  */
15587           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15588             tag_type = typename_type;
15589           /* Look up the name.  */
15590           decl = cp_parser_lookup_name (parser, identifier,
15591                                         tag_type,
15592                                         /*is_template=*/false,
15593                                         /*is_namespace=*/false,
15594                                         check_dependency_p,
15595                                         &ambiguous_decls,
15596                                         identifier_token->location);
15597           if (ambiguous_decls)
15598             {
15599               error_at (identifier_token->location,
15600                         "reference to %qD is ambiguous", identifier);
15601               print_candidates (ambiguous_decls);
15602               if (cp_parser_parsing_tentatively (parser))
15603                 {
15604                   identifier_token->ambiguous_p = true;
15605                   cp_parser_simulate_error (parser);
15606                 }
15607               return error_mark_node;
15608             }
15609         }
15610     }
15611   else
15612     {
15613       /* Try a template-id.  */
15614       decl = cp_parser_template_id (parser, template_keyword_p,
15615                                     check_dependency_p,
15616                                     is_declaration);
15617       if (decl == error_mark_node)
15618         return error_mark_node;
15619     }
15620
15621   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
15622
15623   /* If this is a typename, create a TYPENAME_TYPE.  */
15624   if (typename_p && decl != error_mark_node)
15625     {
15626       decl = make_typename_type (scope, decl, typename_type,
15627                                  /*complain=*/tf_error);
15628       if (decl != error_mark_node)
15629         decl = TYPE_NAME (decl);
15630     }
15631
15632   /* Check to see that it is really the name of a class.  */
15633   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
15634       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
15635       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15636     /* Situations like this:
15637
15638          template <typename T> struct A {
15639            typename T::template X<int>::I i;
15640          };
15641
15642        are problematic.  Is `T::template X<int>' a class-name?  The
15643        standard does not seem to be definitive, but there is no other
15644        valid interpretation of the following `::'.  Therefore, those
15645        names are considered class-names.  */
15646     {
15647       decl = make_typename_type (scope, decl, tag_type, tf_error);
15648       if (decl != error_mark_node)
15649         decl = TYPE_NAME (decl);
15650     }
15651   else if (TREE_CODE (decl) != TYPE_DECL
15652            || TREE_TYPE (decl) == error_mark_node
15653            || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl)))
15654     decl = error_mark_node;
15655
15656   if (decl == error_mark_node)
15657     cp_parser_error (parser, "expected class-name");
15658   else if (identifier && !parser->scope)
15659     maybe_note_name_used_in_class (identifier, decl);
15660
15661   return decl;
15662 }
15663
15664 /* Parse a class-specifier.
15665
15666    class-specifier:
15667      class-head { member-specification [opt] }
15668
15669    Returns the TREE_TYPE representing the class.  */
15670
15671 static tree
15672 cp_parser_class_specifier (cp_parser* parser)
15673 {
15674   tree type;
15675   tree attributes = NULL_TREE;
15676   bool nested_name_specifier_p;
15677   unsigned saved_num_template_parameter_lists;
15678   bool saved_in_function_body;
15679   bool saved_in_unbraced_linkage_specification_p;
15680   tree old_scope = NULL_TREE;
15681   tree scope = NULL_TREE;
15682   tree bases;
15683
15684   push_deferring_access_checks (dk_no_deferred);
15685
15686   /* Parse the class-head.  */
15687   type = cp_parser_class_head (parser,
15688                                &nested_name_specifier_p,
15689                                &attributes,
15690                                &bases);
15691   /* If the class-head was a semantic disaster, skip the entire body
15692      of the class.  */
15693   if (!type)
15694     {
15695       cp_parser_skip_to_end_of_block_or_statement (parser);
15696       pop_deferring_access_checks ();
15697       return error_mark_node;
15698     }
15699
15700   /* Look for the `{'.  */
15701   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
15702     {
15703       pop_deferring_access_checks ();
15704       return error_mark_node;
15705     }
15706
15707   /* Process the base classes. If they're invalid, skip the 
15708      entire class body.  */
15709   if (!xref_basetypes (type, bases))
15710     {
15711       /* Consuming the closing brace yields better error messages
15712          later on.  */
15713       if (cp_parser_skip_to_closing_brace (parser))
15714         cp_lexer_consume_token (parser->lexer);
15715       pop_deferring_access_checks ();
15716       return error_mark_node;
15717     }
15718
15719   /* Issue an error message if type-definitions are forbidden here.  */
15720   cp_parser_check_type_definition (parser);
15721   /* Remember that we are defining one more class.  */
15722   ++parser->num_classes_being_defined;
15723   /* Inside the class, surrounding template-parameter-lists do not
15724      apply.  */
15725   saved_num_template_parameter_lists
15726     = parser->num_template_parameter_lists;
15727   parser->num_template_parameter_lists = 0;
15728   /* We are not in a function body.  */
15729   saved_in_function_body = parser->in_function_body;
15730   parser->in_function_body = false;
15731   /* We are not immediately inside an extern "lang" block.  */
15732   saved_in_unbraced_linkage_specification_p
15733     = parser->in_unbraced_linkage_specification_p;
15734   parser->in_unbraced_linkage_specification_p = false;
15735
15736   /* Start the class.  */
15737   if (nested_name_specifier_p)
15738     {
15739       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
15740       old_scope = push_inner_scope (scope);
15741     }
15742   type = begin_class_definition (type, attributes);
15743
15744   if (type == error_mark_node)
15745     /* If the type is erroneous, skip the entire body of the class.  */
15746     cp_parser_skip_to_closing_brace (parser);
15747   else
15748     /* Parse the member-specification.  */
15749     cp_parser_member_specification_opt (parser);
15750
15751   /* Look for the trailing `}'.  */
15752   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
15753   /* Look for trailing attributes to apply to this class.  */
15754   if (cp_parser_allow_gnu_extensions_p (parser))
15755     attributes = cp_parser_attributes_opt (parser);
15756   if (type != error_mark_node)
15757     type = finish_struct (type, attributes);
15758   if (nested_name_specifier_p)
15759     pop_inner_scope (old_scope, scope);
15760   /* If this class is not itself within the scope of another class,
15761      then we need to parse the bodies of all of the queued function
15762      definitions.  Note that the queued functions defined in a class
15763      are not always processed immediately following the
15764      class-specifier for that class.  Consider:
15765
15766        struct A {
15767          struct B { void f() { sizeof (A); } };
15768        };
15769
15770      If `f' were processed before the processing of `A' were
15771      completed, there would be no way to compute the size of `A'.
15772      Note that the nesting we are interested in here is lexical --
15773      not the semantic nesting given by TYPE_CONTEXT.  In particular,
15774      for:
15775
15776        struct A { struct B; };
15777        struct A::B { void f() { } };
15778
15779      there is no need to delay the parsing of `A::B::f'.  */
15780   if (--parser->num_classes_being_defined == 0)
15781     {
15782       tree queue_entry;
15783       tree fn;
15784       tree class_type = NULL_TREE;
15785       tree pushed_scope = NULL_TREE;
15786
15787       /* In a first pass, parse default arguments to the functions.
15788          Then, in a second pass, parse the bodies of the functions.
15789          This two-phased approach handles cases like:
15790
15791             struct S {
15792               void f() { g(); }
15793               void g(int i = 3);
15794             };
15795
15796          */
15797       for (TREE_PURPOSE (parser->unparsed_functions_queues)
15798              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
15799            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
15800            TREE_PURPOSE (parser->unparsed_functions_queues)
15801              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
15802         {
15803           fn = TREE_VALUE (queue_entry);
15804           /* If there are default arguments that have not yet been processed,
15805              take care of them now.  */
15806           if (class_type != TREE_PURPOSE (queue_entry))
15807             {
15808               if (pushed_scope)
15809                 pop_scope (pushed_scope);
15810               class_type = TREE_PURPOSE (queue_entry);
15811               pushed_scope = push_scope (class_type);
15812             }
15813           /* Make sure that any template parameters are in scope.  */
15814           maybe_begin_member_template_processing (fn);
15815           /* Parse the default argument expressions.  */
15816           cp_parser_late_parsing_default_args (parser, fn);
15817           /* Remove any template parameters from the symbol table.  */
15818           maybe_end_member_template_processing ();
15819         }
15820       if (pushed_scope)
15821         pop_scope (pushed_scope);
15822       /* Now parse the body of the functions.  */
15823       for (TREE_VALUE (parser->unparsed_functions_queues)
15824              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
15825            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
15826            TREE_VALUE (parser->unparsed_functions_queues)
15827              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
15828         {
15829           /* Figure out which function we need to process.  */
15830           fn = TREE_VALUE (queue_entry);
15831           /* Parse the function.  */
15832           cp_parser_late_parsing_for_member (parser, fn);
15833         }
15834     }
15835
15836   /* Put back any saved access checks.  */
15837   pop_deferring_access_checks ();
15838
15839   /* Restore saved state.  */
15840   parser->in_function_body = saved_in_function_body;
15841   parser->num_template_parameter_lists
15842     = saved_num_template_parameter_lists;
15843   parser->in_unbraced_linkage_specification_p
15844     = saved_in_unbraced_linkage_specification_p;
15845
15846   return type;
15847 }
15848
15849 /* Parse a class-head.
15850
15851    class-head:
15852      class-key identifier [opt] base-clause [opt]
15853      class-key nested-name-specifier identifier base-clause [opt]
15854      class-key nested-name-specifier [opt] template-id
15855        base-clause [opt]
15856
15857    GNU Extensions:
15858      class-key attributes identifier [opt] base-clause [opt]
15859      class-key attributes nested-name-specifier identifier base-clause [opt]
15860      class-key attributes nested-name-specifier [opt] template-id
15861        base-clause [opt]
15862
15863    Upon return BASES is initialized to the list of base classes (or
15864    NULL, if there are none) in the same form returned by
15865    cp_parser_base_clause.
15866
15867    Returns the TYPE of the indicated class.  Sets
15868    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
15869    involving a nested-name-specifier was used, and FALSE otherwise.
15870
15871    Returns error_mark_node if this is not a class-head.
15872
15873    Returns NULL_TREE if the class-head is syntactically valid, but
15874    semantically invalid in a way that means we should skip the entire
15875    body of the class.  */
15876
15877 static tree
15878 cp_parser_class_head (cp_parser* parser,
15879                       bool* nested_name_specifier_p,
15880                       tree *attributes_p,
15881                       tree *bases)
15882 {
15883   tree nested_name_specifier;
15884   enum tag_types class_key;
15885   tree id = NULL_TREE;
15886   tree type = NULL_TREE;
15887   tree attributes;
15888   bool template_id_p = false;
15889   bool qualified_p = false;
15890   bool invalid_nested_name_p = false;
15891   bool invalid_explicit_specialization_p = false;
15892   tree pushed_scope = NULL_TREE;
15893   unsigned num_templates;
15894   cp_token *type_start_token = NULL, *nested_name_specifier_token_start = NULL;
15895   /* Assume no nested-name-specifier will be present.  */
15896   *nested_name_specifier_p = false;
15897   /* Assume no template parameter lists will be used in defining the
15898      type.  */
15899   num_templates = 0;
15900
15901   *bases = NULL_TREE;
15902
15903   /* Look for the class-key.  */
15904   class_key = cp_parser_class_key (parser);
15905   if (class_key == none_type)
15906     return error_mark_node;
15907
15908   /* Parse the attributes.  */
15909   attributes = cp_parser_attributes_opt (parser);
15910
15911   /* If the next token is `::', that is invalid -- but sometimes
15912      people do try to write:
15913
15914        struct ::S {};
15915
15916      Handle this gracefully by accepting the extra qualifier, and then
15917      issuing an error about it later if this really is a
15918      class-head.  If it turns out just to be an elaborated type
15919      specifier, remain silent.  */
15920   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
15921     qualified_p = true;
15922
15923   push_deferring_access_checks (dk_no_check);
15924
15925   /* Determine the name of the class.  Begin by looking for an
15926      optional nested-name-specifier.  */
15927   nested_name_specifier_token_start = cp_lexer_peek_token (parser->lexer);
15928   nested_name_specifier
15929     = cp_parser_nested_name_specifier_opt (parser,
15930                                            /*typename_keyword_p=*/false,
15931                                            /*check_dependency_p=*/false,
15932                                            /*type_p=*/false,
15933                                            /*is_declaration=*/false);
15934   /* If there was a nested-name-specifier, then there *must* be an
15935      identifier.  */
15936   if (nested_name_specifier)
15937     {
15938       type_start_token = cp_lexer_peek_token (parser->lexer);
15939       /* Although the grammar says `identifier', it really means
15940          `class-name' or `template-name'.  You are only allowed to
15941          define a class that has already been declared with this
15942          syntax.
15943
15944          The proposed resolution for Core Issue 180 says that wherever
15945          you see `class T::X' you should treat `X' as a type-name.
15946
15947          It is OK to define an inaccessible class; for example:
15948
15949            class A { class B; };
15950            class A::B {};
15951
15952          We do not know if we will see a class-name, or a
15953          template-name.  We look for a class-name first, in case the
15954          class-name is a template-id; if we looked for the
15955          template-name first we would stop after the template-name.  */
15956       cp_parser_parse_tentatively (parser);
15957       type = cp_parser_class_name (parser,
15958                                    /*typename_keyword_p=*/false,
15959                                    /*template_keyword_p=*/false,
15960                                    class_type,
15961                                    /*check_dependency_p=*/false,
15962                                    /*class_head_p=*/true,
15963                                    /*is_declaration=*/false);
15964       /* If that didn't work, ignore the nested-name-specifier.  */
15965       if (!cp_parser_parse_definitely (parser))
15966         {
15967           invalid_nested_name_p = true;
15968           type_start_token = cp_lexer_peek_token (parser->lexer);
15969           id = cp_parser_identifier (parser);
15970           if (id == error_mark_node)
15971             id = NULL_TREE;
15972         }
15973       /* If we could not find a corresponding TYPE, treat this
15974          declaration like an unqualified declaration.  */
15975       if (type == error_mark_node)
15976         nested_name_specifier = NULL_TREE;
15977       /* Otherwise, count the number of templates used in TYPE and its
15978          containing scopes.  */
15979       else
15980         {
15981           tree scope;
15982
15983           for (scope = TREE_TYPE (type);
15984                scope && TREE_CODE (scope) != NAMESPACE_DECL;
15985                scope = (TYPE_P (scope)
15986                         ? TYPE_CONTEXT (scope)
15987                         : DECL_CONTEXT (scope)))
15988             if (TYPE_P (scope)
15989                 && CLASS_TYPE_P (scope)
15990                 && CLASSTYPE_TEMPLATE_INFO (scope)
15991                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
15992                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
15993               ++num_templates;
15994         }
15995     }
15996   /* Otherwise, the identifier is optional.  */
15997   else
15998     {
15999       /* We don't know whether what comes next is a template-id,
16000          an identifier, or nothing at all.  */
16001       cp_parser_parse_tentatively (parser);
16002       /* Check for a template-id.  */
16003       type_start_token = cp_lexer_peek_token (parser->lexer);
16004       id = cp_parser_template_id (parser,
16005                                   /*template_keyword_p=*/false,
16006                                   /*check_dependency_p=*/true,
16007                                   /*is_declaration=*/true);
16008       /* If that didn't work, it could still be an identifier.  */
16009       if (!cp_parser_parse_definitely (parser))
16010         {
16011           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
16012             {
16013               type_start_token = cp_lexer_peek_token (parser->lexer);
16014               id = cp_parser_identifier (parser);
16015             }
16016           else
16017             id = NULL_TREE;
16018         }
16019       else
16020         {
16021           template_id_p = true;
16022           ++num_templates;
16023         }
16024     }
16025
16026   pop_deferring_access_checks ();
16027
16028   if (id)
16029     cp_parser_check_for_invalid_template_id (parser, id,
16030                                              type_start_token->location);
16031
16032   /* If it's not a `:' or a `{' then we can't really be looking at a
16033      class-head, since a class-head only appears as part of a
16034      class-specifier.  We have to detect this situation before calling
16035      xref_tag, since that has irreversible side-effects.  */
16036   if (!cp_parser_next_token_starts_class_definition_p (parser))
16037     {
16038       cp_parser_error (parser, "expected %<{%> or %<:%>");
16039       return error_mark_node;
16040     }
16041
16042   /* At this point, we're going ahead with the class-specifier, even
16043      if some other problem occurs.  */
16044   cp_parser_commit_to_tentative_parse (parser);
16045   /* Issue the error about the overly-qualified name now.  */
16046   if (qualified_p)
16047     {
16048       cp_parser_error (parser,
16049                        "global qualification of class name is invalid");
16050       return error_mark_node;
16051     }
16052   else if (invalid_nested_name_p)
16053     {
16054       cp_parser_error (parser,
16055                        "qualified name does not name a class");
16056       return error_mark_node;
16057     }
16058   else if (nested_name_specifier)
16059     {
16060       tree scope;
16061
16062       /* Reject typedef-names in class heads.  */
16063       if (!DECL_IMPLICIT_TYPEDEF_P (type))
16064         {
16065           error_at (type_start_token->location,
16066                     "invalid class name in declaration of %qD",
16067                     type);
16068           type = NULL_TREE;
16069           goto done;
16070         }
16071
16072       /* Figure out in what scope the declaration is being placed.  */
16073       scope = current_scope ();
16074       /* If that scope does not contain the scope in which the
16075          class was originally declared, the program is invalid.  */
16076       if (scope && !is_ancestor (scope, nested_name_specifier))
16077         {
16078           if (at_namespace_scope_p ())
16079             error_at (type_start_token->location,
16080                       "declaration of %qD in namespace %qD which does not "
16081                       "enclose %qD",
16082                       type, scope, nested_name_specifier);
16083           else
16084             error_at (type_start_token->location,
16085                       "declaration of %qD in %qD which does not enclose %qD",
16086                       type, scope, nested_name_specifier);
16087           type = NULL_TREE;
16088           goto done;
16089         }
16090       /* [dcl.meaning]
16091
16092          A declarator-id shall not be qualified except for the
16093          definition of a ... nested class outside of its class
16094          ... [or] the definition or explicit instantiation of a
16095          class member of a namespace outside of its namespace.  */
16096       if (scope == nested_name_specifier)
16097         {
16098           permerror (nested_name_specifier_token_start->location,
16099                      "extra qualification not allowed");
16100           nested_name_specifier = NULL_TREE;
16101           num_templates = 0;
16102         }
16103     }
16104   /* An explicit-specialization must be preceded by "template <>".  If
16105      it is not, try to recover gracefully.  */
16106   if (at_namespace_scope_p ()
16107       && parser->num_template_parameter_lists == 0
16108       && template_id_p)
16109     {
16110       error_at (type_start_token->location,
16111                 "an explicit specialization must be preceded by %<template <>%>");
16112       invalid_explicit_specialization_p = true;
16113       /* Take the same action that would have been taken by
16114          cp_parser_explicit_specialization.  */
16115       ++parser->num_template_parameter_lists;
16116       begin_specialization ();
16117     }
16118   /* There must be no "return" statements between this point and the
16119      end of this function; set "type "to the correct return value and
16120      use "goto done;" to return.  */
16121   /* Make sure that the right number of template parameters were
16122      present.  */
16123   if (!cp_parser_check_template_parameters (parser, num_templates,
16124                                             type_start_token->location,
16125                                             /*declarator=*/NULL))
16126     {
16127       /* If something went wrong, there is no point in even trying to
16128          process the class-definition.  */
16129       type = NULL_TREE;
16130       goto done;
16131     }
16132
16133   /* Look up the type.  */
16134   if (template_id_p)
16135     {
16136       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
16137           && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
16138               || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
16139         {
16140           error_at (type_start_token->location,
16141                     "function template %qD redeclared as a class template", id);
16142           type = error_mark_node;
16143         }
16144       else
16145         {
16146           type = TREE_TYPE (id);
16147           type = maybe_process_partial_specialization (type);
16148         }
16149       if (nested_name_specifier)
16150         pushed_scope = push_scope (nested_name_specifier);
16151     }
16152   else if (nested_name_specifier)
16153     {
16154       tree class_type;
16155
16156       /* Given:
16157
16158             template <typename T> struct S { struct T };
16159             template <typename T> struct S<T>::T { };
16160
16161          we will get a TYPENAME_TYPE when processing the definition of
16162          `S::T'.  We need to resolve it to the actual type before we
16163          try to define it.  */
16164       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
16165         {
16166           class_type = resolve_typename_type (TREE_TYPE (type),
16167                                               /*only_current_p=*/false);
16168           if (TREE_CODE (class_type) != TYPENAME_TYPE)
16169             type = TYPE_NAME (class_type);
16170           else
16171             {
16172               cp_parser_error (parser, "could not resolve typename type");
16173               type = error_mark_node;
16174             }
16175         }
16176
16177       if (maybe_process_partial_specialization (TREE_TYPE (type))
16178           == error_mark_node)
16179         {
16180           type = NULL_TREE;
16181           goto done;
16182         }
16183
16184       class_type = current_class_type;
16185       /* Enter the scope indicated by the nested-name-specifier.  */
16186       pushed_scope = push_scope (nested_name_specifier);
16187       /* Get the canonical version of this type.  */
16188       type = TYPE_MAIN_DECL (TREE_TYPE (type));
16189       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
16190           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
16191         {
16192           type = push_template_decl (type);
16193           if (type == error_mark_node)
16194             {
16195               type = NULL_TREE;
16196               goto done;
16197             }
16198         }
16199
16200       type = TREE_TYPE (type);
16201       *nested_name_specifier_p = true;
16202     }
16203   else      /* The name is not a nested name.  */
16204     {
16205       /* If the class was unnamed, create a dummy name.  */
16206       if (!id)
16207         id = make_anon_name ();
16208       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
16209                        parser->num_template_parameter_lists);
16210     }
16211
16212   /* Indicate whether this class was declared as a `class' or as a
16213      `struct'.  */
16214   if (TREE_CODE (type) == RECORD_TYPE)
16215     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
16216   cp_parser_check_class_key (class_key, type);
16217
16218   /* If this type was already complete, and we see another definition,
16219      that's an error.  */
16220   if (type != error_mark_node && COMPLETE_TYPE_P (type))
16221     {
16222       error_at (type_start_token->location, "redefinition of %q#T",
16223                 type);
16224       error_at (type_start_token->location, "previous definition of %q+#T",
16225                 type);
16226       type = NULL_TREE;
16227       goto done;
16228     }
16229   else if (type == error_mark_node)
16230     type = NULL_TREE;
16231
16232   /* We will have entered the scope containing the class; the names of
16233      base classes should be looked up in that context.  For example:
16234
16235        struct A { struct B {}; struct C; };
16236        struct A::C : B {};
16237
16238      is valid.  */
16239
16240   /* Get the list of base-classes, if there is one.  */
16241   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
16242     *bases = cp_parser_base_clause (parser);
16243
16244  done:
16245   /* Leave the scope given by the nested-name-specifier.  We will
16246      enter the class scope itself while processing the members.  */
16247   if (pushed_scope)
16248     pop_scope (pushed_scope);
16249
16250   if (invalid_explicit_specialization_p)
16251     {
16252       end_specialization ();
16253       --parser->num_template_parameter_lists;
16254     }
16255   *attributes_p = attributes;
16256   return type;
16257 }
16258
16259 /* Parse a class-key.
16260
16261    class-key:
16262      class
16263      struct
16264      union
16265
16266    Returns the kind of class-key specified, or none_type to indicate
16267    error.  */
16268
16269 static enum tag_types
16270 cp_parser_class_key (cp_parser* parser)
16271 {
16272   cp_token *token;
16273   enum tag_types tag_type;
16274
16275   /* Look for the class-key.  */
16276   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
16277   if (!token)
16278     return none_type;
16279
16280   /* Check to see if the TOKEN is a class-key.  */
16281   tag_type = cp_parser_token_is_class_key (token);
16282   if (!tag_type)
16283     cp_parser_error (parser, "expected class-key");
16284   return tag_type;
16285 }
16286
16287 /* Parse an (optional) member-specification.
16288
16289    member-specification:
16290      member-declaration member-specification [opt]
16291      access-specifier : member-specification [opt]  */
16292
16293 static void
16294 cp_parser_member_specification_opt (cp_parser* parser)
16295 {
16296   while (true)
16297     {
16298       cp_token *token;
16299       enum rid keyword;
16300
16301       /* Peek at the next token.  */
16302       token = cp_lexer_peek_token (parser->lexer);
16303       /* If it's a `}', or EOF then we've seen all the members.  */
16304       if (token->type == CPP_CLOSE_BRACE
16305           || token->type == CPP_EOF
16306           || token->type == CPP_PRAGMA_EOL)
16307         break;
16308
16309       /* See if this token is a keyword.  */
16310       keyword = token->keyword;
16311       switch (keyword)
16312         {
16313         case RID_PUBLIC:
16314         case RID_PROTECTED:
16315         case RID_PRIVATE:
16316           /* Consume the access-specifier.  */
16317           cp_lexer_consume_token (parser->lexer);
16318           /* Remember which access-specifier is active.  */
16319           current_access_specifier = token->u.value;
16320           /* Look for the `:'.  */
16321           cp_parser_require (parser, CPP_COLON, "%<:%>");
16322           break;
16323
16324         default:
16325           /* Accept #pragmas at class scope.  */
16326           if (token->type == CPP_PRAGMA)
16327             {
16328               cp_parser_pragma (parser, pragma_external);
16329               break;
16330             }
16331
16332           /* Otherwise, the next construction must be a
16333              member-declaration.  */
16334           cp_parser_member_declaration (parser);
16335         }
16336     }
16337 }
16338
16339 /* Parse a member-declaration.
16340
16341    member-declaration:
16342      decl-specifier-seq [opt] member-declarator-list [opt] ;
16343      function-definition ; [opt]
16344      :: [opt] nested-name-specifier template [opt] unqualified-id ;
16345      using-declaration
16346      template-declaration
16347
16348    member-declarator-list:
16349      member-declarator
16350      member-declarator-list , member-declarator
16351
16352    member-declarator:
16353      declarator pure-specifier [opt]
16354      declarator constant-initializer [opt]
16355      identifier [opt] : constant-expression
16356
16357    GNU Extensions:
16358
16359    member-declaration:
16360      __extension__ member-declaration
16361
16362    member-declarator:
16363      declarator attributes [opt] pure-specifier [opt]
16364      declarator attributes [opt] constant-initializer [opt]
16365      identifier [opt] attributes [opt] : constant-expression  
16366
16367    C++0x Extensions:
16368
16369    member-declaration:
16370      static_assert-declaration  */
16371
16372 static void
16373 cp_parser_member_declaration (cp_parser* parser)
16374 {
16375   cp_decl_specifier_seq decl_specifiers;
16376   tree prefix_attributes;
16377   tree decl;
16378   int declares_class_or_enum;
16379   bool friend_p;
16380   cp_token *token = NULL;
16381   cp_token *decl_spec_token_start = NULL;
16382   cp_token *initializer_token_start = NULL;
16383   int saved_pedantic;
16384
16385   /* Check for the `__extension__' keyword.  */
16386   if (cp_parser_extension_opt (parser, &saved_pedantic))
16387     {
16388       /* Recurse.  */
16389       cp_parser_member_declaration (parser);
16390       /* Restore the old value of the PEDANTIC flag.  */
16391       pedantic = saved_pedantic;
16392
16393       return;
16394     }
16395
16396   /* Check for a template-declaration.  */
16397   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
16398     {
16399       /* An explicit specialization here is an error condition, and we
16400          expect the specialization handler to detect and report this.  */
16401       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
16402           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
16403         cp_parser_explicit_specialization (parser);
16404       else
16405         cp_parser_template_declaration (parser, /*member_p=*/true);
16406
16407       return;
16408     }
16409
16410   /* Check for a using-declaration.  */
16411   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
16412     {
16413       /* Parse the using-declaration.  */
16414       cp_parser_using_declaration (parser,
16415                                    /*access_declaration_p=*/false);
16416       return;
16417     }
16418
16419   /* Check for @defs.  */
16420   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
16421     {
16422       tree ivar, member;
16423       tree ivar_chains = cp_parser_objc_defs_expression (parser);
16424       ivar = ivar_chains;
16425       while (ivar)
16426         {
16427           member = ivar;
16428           ivar = TREE_CHAIN (member);
16429           TREE_CHAIN (member) = NULL_TREE;
16430           finish_member_declaration (member);
16431         }
16432       return;
16433     }
16434
16435   /* If the next token is `static_assert' we have a static assertion.  */
16436   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
16437     {
16438       cp_parser_static_assert (parser, /*member_p=*/true);
16439       return;
16440     }
16441
16442   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
16443     return;
16444
16445   /* Parse the decl-specifier-seq.  */
16446   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
16447   cp_parser_decl_specifier_seq (parser,
16448                                 CP_PARSER_FLAGS_OPTIONAL,
16449                                 &decl_specifiers,
16450                                 &declares_class_or_enum);
16451   prefix_attributes = decl_specifiers.attributes;
16452   decl_specifiers.attributes = NULL_TREE;
16453   /* Check for an invalid type-name.  */
16454   if (!decl_specifiers.type
16455       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
16456     return;
16457   /* If there is no declarator, then the decl-specifier-seq should
16458      specify a type.  */
16459   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16460     {
16461       /* If there was no decl-specifier-seq, and the next token is a
16462          `;', then we have something like:
16463
16464            struct S { ; };
16465
16466          [class.mem]
16467
16468          Each member-declaration shall declare at least one member
16469          name of the class.  */
16470       if (!decl_specifiers.any_specifiers_p)
16471         {
16472           cp_token *token = cp_lexer_peek_token (parser->lexer);
16473           if (!in_system_header_at (token->location))
16474             pedwarn (token->location, OPT_pedantic, "extra %<;%>");
16475         }
16476       else
16477         {
16478           tree type;
16479
16480           /* See if this declaration is a friend.  */
16481           friend_p = cp_parser_friend_p (&decl_specifiers);
16482           /* If there were decl-specifiers, check to see if there was
16483              a class-declaration.  */
16484           type = check_tag_decl (&decl_specifiers);
16485           /* Nested classes have already been added to the class, but
16486              a `friend' needs to be explicitly registered.  */
16487           if (friend_p)
16488             {
16489               /* If the `friend' keyword was present, the friend must
16490                  be introduced with a class-key.  */
16491                if (!declares_class_or_enum)
16492                  error_at (decl_spec_token_start->location,
16493                            "a class-key must be used when declaring a friend");
16494                /* In this case:
16495
16496                     template <typename T> struct A {
16497                       friend struct A<T>::B;
16498                     };
16499
16500                   A<T>::B will be represented by a TYPENAME_TYPE, and
16501                   therefore not recognized by check_tag_decl.  */
16502                if (!type
16503                    && decl_specifiers.type
16504                    && TYPE_P (decl_specifiers.type))
16505                  type = decl_specifiers.type;
16506                if (!type || !TYPE_P (type))
16507                  error_at (decl_spec_token_start->location,
16508                            "friend declaration does not name a class or "
16509                            "function");
16510                else
16511                  make_friend_class (current_class_type, type,
16512                                     /*complain=*/true);
16513             }
16514           /* If there is no TYPE, an error message will already have
16515              been issued.  */
16516           else if (!type || type == error_mark_node)
16517             ;
16518           /* An anonymous aggregate has to be handled specially; such
16519              a declaration really declares a data member (with a
16520              particular type), as opposed to a nested class.  */
16521           else if (ANON_AGGR_TYPE_P (type))
16522             {
16523               /* Remove constructors and such from TYPE, now that we
16524                  know it is an anonymous aggregate.  */
16525               fixup_anonymous_aggr (type);
16526               /* And make the corresponding data member.  */
16527               decl = build_decl (decl_spec_token_start->location,
16528                                  FIELD_DECL, NULL_TREE, type);
16529               /* Add it to the class.  */
16530               finish_member_declaration (decl);
16531             }
16532           else
16533             cp_parser_check_access_in_redeclaration
16534                                               (TYPE_NAME (type),
16535                                                decl_spec_token_start->location);
16536         }
16537     }
16538   else
16539     {
16540       /* See if these declarations will be friends.  */
16541       friend_p = cp_parser_friend_p (&decl_specifiers);
16542
16543       /* Keep going until we hit the `;' at the end of the
16544          declaration.  */
16545       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
16546         {
16547           tree attributes = NULL_TREE;
16548           tree first_attribute;
16549
16550           /* Peek at the next token.  */
16551           token = cp_lexer_peek_token (parser->lexer);
16552
16553           /* Check for a bitfield declaration.  */
16554           if (token->type == CPP_COLON
16555               || (token->type == CPP_NAME
16556                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
16557                   == CPP_COLON))
16558             {
16559               tree identifier;
16560               tree width;
16561
16562               /* Get the name of the bitfield.  Note that we cannot just
16563                  check TOKEN here because it may have been invalidated by
16564                  the call to cp_lexer_peek_nth_token above.  */
16565               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
16566                 identifier = cp_parser_identifier (parser);
16567               else
16568                 identifier = NULL_TREE;
16569
16570               /* Consume the `:' token.  */
16571               cp_lexer_consume_token (parser->lexer);
16572               /* Get the width of the bitfield.  */
16573               width
16574                 = cp_parser_constant_expression (parser,
16575                                                  /*allow_non_constant=*/false,
16576                                                  NULL);
16577
16578               /* Look for attributes that apply to the bitfield.  */
16579               attributes = cp_parser_attributes_opt (parser);
16580               /* Remember which attributes are prefix attributes and
16581                  which are not.  */
16582               first_attribute = attributes;
16583               /* Combine the attributes.  */
16584               attributes = chainon (prefix_attributes, attributes);
16585
16586               /* Create the bitfield declaration.  */
16587               decl = grokbitfield (identifier
16588                                    ? make_id_declarator (NULL_TREE,
16589                                                          identifier,
16590                                                          sfk_none)
16591                                    : NULL,
16592                                    &decl_specifiers,
16593                                    width,
16594                                    attributes);
16595             }
16596           else
16597             {
16598               cp_declarator *declarator;
16599               tree initializer;
16600               tree asm_specification;
16601               int ctor_dtor_or_conv_p;
16602
16603               /* Parse the declarator.  */
16604               declarator
16605                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
16606                                         &ctor_dtor_or_conv_p,
16607                                         /*parenthesized_p=*/NULL,
16608                                         /*member_p=*/true);
16609
16610               /* If something went wrong parsing the declarator, make sure
16611                  that we at least consume some tokens.  */
16612               if (declarator == cp_error_declarator)
16613                 {
16614                   /* Skip to the end of the statement.  */
16615                   cp_parser_skip_to_end_of_statement (parser);
16616                   /* If the next token is not a semicolon, that is
16617                      probably because we just skipped over the body of
16618                      a function.  So, we consume a semicolon if
16619                      present, but do not issue an error message if it
16620                      is not present.  */
16621                   if (cp_lexer_next_token_is (parser->lexer,
16622                                               CPP_SEMICOLON))
16623                     cp_lexer_consume_token (parser->lexer);
16624                   return;
16625                 }
16626
16627               if (declares_class_or_enum & 2)
16628                 cp_parser_check_for_definition_in_return_type
16629                                             (declarator, decl_specifiers.type,
16630                                              decl_specifiers.type_location);
16631
16632               /* Look for an asm-specification.  */
16633               asm_specification = cp_parser_asm_specification_opt (parser);
16634               /* Look for attributes that apply to the declaration.  */
16635               attributes = cp_parser_attributes_opt (parser);
16636               /* Remember which attributes are prefix attributes and
16637                  which are not.  */
16638               first_attribute = attributes;
16639               /* Combine the attributes.  */
16640               attributes = chainon (prefix_attributes, attributes);
16641
16642               /* If it's an `=', then we have a constant-initializer or a
16643                  pure-specifier.  It is not correct to parse the
16644                  initializer before registering the member declaration
16645                  since the member declaration should be in scope while
16646                  its initializer is processed.  However, the rest of the
16647                  front end does not yet provide an interface that allows
16648                  us to handle this correctly.  */
16649               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
16650                 {
16651                   /* In [class.mem]:
16652
16653                      A pure-specifier shall be used only in the declaration of
16654                      a virtual function.
16655
16656                      A member-declarator can contain a constant-initializer
16657                      only if it declares a static member of integral or
16658                      enumeration type.
16659
16660                      Therefore, if the DECLARATOR is for a function, we look
16661                      for a pure-specifier; otherwise, we look for a
16662                      constant-initializer.  When we call `grokfield', it will
16663                      perform more stringent semantics checks.  */
16664                   initializer_token_start = cp_lexer_peek_token (parser->lexer);
16665                   if (function_declarator_p (declarator))
16666                     initializer = cp_parser_pure_specifier (parser);
16667                   else
16668                     /* Parse the initializer.  */
16669                     initializer = cp_parser_constant_initializer (parser);
16670                 }
16671               /* Otherwise, there is no initializer.  */
16672               else
16673                 initializer = NULL_TREE;
16674
16675               /* See if we are probably looking at a function
16676                  definition.  We are certainly not looking at a
16677                  member-declarator.  Calling `grokfield' has
16678                  side-effects, so we must not do it unless we are sure
16679                  that we are looking at a member-declarator.  */
16680               if (cp_parser_token_starts_function_definition_p
16681                   (cp_lexer_peek_token (parser->lexer)))
16682                 {
16683                   /* The grammar does not allow a pure-specifier to be
16684                      used when a member function is defined.  (It is
16685                      possible that this fact is an oversight in the
16686                      standard, since a pure function may be defined
16687                      outside of the class-specifier.  */
16688                   if (initializer)
16689                     error_at (initializer_token_start->location,
16690                               "pure-specifier on function-definition");
16691                   decl = cp_parser_save_member_function_body (parser,
16692                                                               &decl_specifiers,
16693                                                               declarator,
16694                                                               attributes);
16695                   /* If the member was not a friend, declare it here.  */
16696                   if (!friend_p)
16697                     finish_member_declaration (decl);
16698                   /* Peek at the next token.  */
16699                   token = cp_lexer_peek_token (parser->lexer);
16700                   /* If the next token is a semicolon, consume it.  */
16701                   if (token->type == CPP_SEMICOLON)
16702                     cp_lexer_consume_token (parser->lexer);
16703                   return;
16704                 }
16705               else
16706                 if (declarator->kind == cdk_function)
16707                   declarator->id_loc = token->location;
16708                 /* Create the declaration.  */
16709                 decl = grokfield (declarator, &decl_specifiers,
16710                                   initializer, /*init_const_expr_p=*/true,
16711                                   asm_specification,
16712                                   attributes);
16713             }
16714
16715           /* Reset PREFIX_ATTRIBUTES.  */
16716           while (attributes && TREE_CHAIN (attributes) != first_attribute)
16717             attributes = TREE_CHAIN (attributes);
16718           if (attributes)
16719             TREE_CHAIN (attributes) = NULL_TREE;
16720
16721           /* If there is any qualification still in effect, clear it
16722              now; we will be starting fresh with the next declarator.  */
16723           parser->scope = NULL_TREE;
16724           parser->qualifying_scope = NULL_TREE;
16725           parser->object_scope = NULL_TREE;
16726           /* If it's a `,', then there are more declarators.  */
16727           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
16728             cp_lexer_consume_token (parser->lexer);
16729           /* If the next token isn't a `;', then we have a parse error.  */
16730           else if (cp_lexer_next_token_is_not (parser->lexer,
16731                                                CPP_SEMICOLON))
16732             {
16733               cp_parser_error (parser, "expected %<;%>");
16734               /* Skip tokens until we find a `;'.  */
16735               cp_parser_skip_to_end_of_statement (parser);
16736
16737               break;
16738             }
16739
16740           if (decl)
16741             {
16742               /* Add DECL to the list of members.  */
16743               if (!friend_p)
16744                 finish_member_declaration (decl);
16745
16746               if (TREE_CODE (decl) == FUNCTION_DECL)
16747                 cp_parser_save_default_args (parser, decl);
16748             }
16749         }
16750     }
16751
16752   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
16753 }
16754
16755 /* Parse a pure-specifier.
16756
16757    pure-specifier:
16758      = 0
16759
16760    Returns INTEGER_ZERO_NODE if a pure specifier is found.
16761    Otherwise, ERROR_MARK_NODE is returned.  */
16762
16763 static tree
16764 cp_parser_pure_specifier (cp_parser* parser)
16765 {
16766   cp_token *token;
16767
16768   /* Look for the `=' token.  */
16769   if (!cp_parser_require (parser, CPP_EQ, "%<=%>"))
16770     return error_mark_node;
16771   /* Look for the `0' token.  */
16772   token = cp_lexer_peek_token (parser->lexer);
16773
16774   if (token->type == CPP_EOF
16775       || token->type == CPP_PRAGMA_EOL)
16776     return error_mark_node;
16777
16778   cp_lexer_consume_token (parser->lexer);
16779
16780   /* Accept = default or = delete in c++0x mode.  */
16781   if (token->keyword == RID_DEFAULT
16782       || token->keyword == RID_DELETE)
16783     {
16784       maybe_warn_cpp0x ("defaulted and deleted functions");
16785       return token->u.value;
16786     }
16787
16788   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
16789   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
16790     {
16791       cp_parser_error (parser,
16792                        "invalid pure specifier (only %<= 0%> is allowed)");
16793       cp_parser_skip_to_end_of_statement (parser);
16794       return error_mark_node;
16795     }
16796   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
16797     {
16798       error_at (token->location, "templates may not be %<virtual%>");
16799       return error_mark_node;
16800     }
16801
16802   return integer_zero_node;
16803 }
16804
16805 /* Parse a constant-initializer.
16806
16807    constant-initializer:
16808      = constant-expression
16809
16810    Returns a representation of the constant-expression.  */
16811
16812 static tree
16813 cp_parser_constant_initializer (cp_parser* parser)
16814 {
16815   /* Look for the `=' token.  */
16816   if (!cp_parser_require (parser, CPP_EQ, "%<=%>"))
16817     return error_mark_node;
16818
16819   /* It is invalid to write:
16820
16821        struct S { static const int i = { 7 }; };
16822
16823      */
16824   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
16825     {
16826       cp_parser_error (parser,
16827                        "a brace-enclosed initializer is not allowed here");
16828       /* Consume the opening brace.  */
16829       cp_lexer_consume_token (parser->lexer);
16830       /* Skip the initializer.  */
16831       cp_parser_skip_to_closing_brace (parser);
16832       /* Look for the trailing `}'.  */
16833       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
16834
16835       return error_mark_node;
16836     }
16837
16838   return cp_parser_constant_expression (parser,
16839                                         /*allow_non_constant=*/false,
16840                                         NULL);
16841 }
16842
16843 /* Derived classes [gram.class.derived] */
16844
16845 /* Parse a base-clause.
16846
16847    base-clause:
16848      : base-specifier-list
16849
16850    base-specifier-list:
16851      base-specifier ... [opt]
16852      base-specifier-list , base-specifier ... [opt]
16853
16854    Returns a TREE_LIST representing the base-classes, in the order in
16855    which they were declared.  The representation of each node is as
16856    described by cp_parser_base_specifier.
16857
16858    In the case that no bases are specified, this function will return
16859    NULL_TREE, not ERROR_MARK_NODE.  */
16860
16861 static tree
16862 cp_parser_base_clause (cp_parser* parser)
16863 {
16864   tree bases = NULL_TREE;
16865
16866   /* Look for the `:' that begins the list.  */
16867   cp_parser_require (parser, CPP_COLON, "%<:%>");
16868
16869   /* Scan the base-specifier-list.  */
16870   while (true)
16871     {
16872       cp_token *token;
16873       tree base;
16874       bool pack_expansion_p = false;
16875
16876       /* Look for the base-specifier.  */
16877       base = cp_parser_base_specifier (parser);
16878       /* Look for the (optional) ellipsis. */
16879       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16880         {
16881           /* Consume the `...'. */
16882           cp_lexer_consume_token (parser->lexer);
16883
16884           pack_expansion_p = true;
16885         }
16886
16887       /* Add BASE to the front of the list.  */
16888       if (base != error_mark_node)
16889         {
16890           if (pack_expansion_p)
16891             /* Make this a pack expansion type. */
16892             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
16893           
16894
16895           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
16896             {
16897               TREE_CHAIN (base) = bases;
16898               bases = base;
16899             }
16900         }
16901       /* Peek at the next token.  */
16902       token = cp_lexer_peek_token (parser->lexer);
16903       /* If it's not a comma, then the list is complete.  */
16904       if (token->type != CPP_COMMA)
16905         break;
16906       /* Consume the `,'.  */
16907       cp_lexer_consume_token (parser->lexer);
16908     }
16909
16910   /* PARSER->SCOPE may still be non-NULL at this point, if the last
16911      base class had a qualified name.  However, the next name that
16912      appears is certainly not qualified.  */
16913   parser->scope = NULL_TREE;
16914   parser->qualifying_scope = NULL_TREE;
16915   parser->object_scope = NULL_TREE;
16916
16917   return nreverse (bases);
16918 }
16919
16920 /* Parse a base-specifier.
16921
16922    base-specifier:
16923      :: [opt] nested-name-specifier [opt] class-name
16924      virtual access-specifier [opt] :: [opt] nested-name-specifier
16925        [opt] class-name
16926      access-specifier virtual [opt] :: [opt] nested-name-specifier
16927        [opt] class-name
16928
16929    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
16930    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
16931    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
16932    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
16933
16934 static tree
16935 cp_parser_base_specifier (cp_parser* parser)
16936 {
16937   cp_token *token;
16938   bool done = false;
16939   bool virtual_p = false;
16940   bool duplicate_virtual_error_issued_p = false;
16941   bool duplicate_access_error_issued_p = false;
16942   bool class_scope_p, template_p;
16943   tree access = access_default_node;
16944   tree type;
16945
16946   /* Process the optional `virtual' and `access-specifier'.  */
16947   while (!done)
16948     {
16949       /* Peek at the next token.  */
16950       token = cp_lexer_peek_token (parser->lexer);
16951       /* Process `virtual'.  */
16952       switch (token->keyword)
16953         {
16954         case RID_VIRTUAL:
16955           /* If `virtual' appears more than once, issue an error.  */
16956           if (virtual_p && !duplicate_virtual_error_issued_p)
16957             {
16958               cp_parser_error (parser,
16959                                "%<virtual%> specified more than once in base-specified");
16960               duplicate_virtual_error_issued_p = true;
16961             }
16962
16963           virtual_p = true;
16964
16965           /* Consume the `virtual' token.  */
16966           cp_lexer_consume_token (parser->lexer);
16967
16968           break;
16969
16970         case RID_PUBLIC:
16971         case RID_PROTECTED:
16972         case RID_PRIVATE:
16973           /* If more than one access specifier appears, issue an
16974              error.  */
16975           if (access != access_default_node
16976               && !duplicate_access_error_issued_p)
16977             {
16978               cp_parser_error (parser,
16979                                "more than one access specifier in base-specified");
16980               duplicate_access_error_issued_p = true;
16981             }
16982
16983           access = ridpointers[(int) token->keyword];
16984
16985           /* Consume the access-specifier.  */
16986           cp_lexer_consume_token (parser->lexer);
16987
16988           break;
16989
16990         default:
16991           done = true;
16992           break;
16993         }
16994     }
16995   /* It is not uncommon to see programs mechanically, erroneously, use
16996      the 'typename' keyword to denote (dependent) qualified types
16997      as base classes.  */
16998   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
16999     {
17000       token = cp_lexer_peek_token (parser->lexer);
17001       if (!processing_template_decl)
17002         error_at (token->location,
17003                   "keyword %<typename%> not allowed outside of templates");
17004       else
17005         error_at (token->location,
17006                   "keyword %<typename%> not allowed in this context "
17007                   "(the base class is implicitly a type)");
17008       cp_lexer_consume_token (parser->lexer);
17009     }
17010
17011   /* Look for the optional `::' operator.  */
17012   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
17013   /* Look for the nested-name-specifier.  The simplest way to
17014      implement:
17015
17016        [temp.res]
17017
17018        The keyword `typename' is not permitted in a base-specifier or
17019        mem-initializer; in these contexts a qualified name that
17020        depends on a template-parameter is implicitly assumed to be a
17021        type name.
17022
17023      is to pretend that we have seen the `typename' keyword at this
17024      point.  */
17025   cp_parser_nested_name_specifier_opt (parser,
17026                                        /*typename_keyword_p=*/true,
17027                                        /*check_dependency_p=*/true,
17028                                        typename_type,
17029                                        /*is_declaration=*/true);
17030   /* If the base class is given by a qualified name, assume that names
17031      we see are type names or templates, as appropriate.  */
17032   class_scope_p = (parser->scope && TYPE_P (parser->scope));
17033   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
17034
17035   /* Finally, look for the class-name.  */
17036   type = cp_parser_class_name (parser,
17037                                class_scope_p,
17038                                template_p,
17039                                typename_type,
17040                                /*check_dependency_p=*/true,
17041                                /*class_head_p=*/false,
17042                                /*is_declaration=*/true);
17043
17044   if (type == error_mark_node)
17045     return error_mark_node;
17046
17047   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
17048 }
17049
17050 /* Exception handling [gram.exception] */
17051
17052 /* Parse an (optional) exception-specification.
17053
17054    exception-specification:
17055      throw ( type-id-list [opt] )
17056
17057    Returns a TREE_LIST representing the exception-specification.  The
17058    TREE_VALUE of each node is a type.  */
17059
17060 static tree
17061 cp_parser_exception_specification_opt (cp_parser* parser)
17062 {
17063   cp_token *token;
17064   tree type_id_list;
17065
17066   /* Peek at the next token.  */
17067   token = cp_lexer_peek_token (parser->lexer);
17068   /* If it's not `throw', then there's no exception-specification.  */
17069   if (!cp_parser_is_keyword (token, RID_THROW))
17070     return NULL_TREE;
17071
17072   /* Consume the `throw'.  */
17073   cp_lexer_consume_token (parser->lexer);
17074
17075   /* Look for the `('.  */
17076   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
17077
17078   /* Peek at the next token.  */
17079   token = cp_lexer_peek_token (parser->lexer);
17080   /* If it's not a `)', then there is a type-id-list.  */
17081   if (token->type != CPP_CLOSE_PAREN)
17082     {
17083       const char *saved_message;
17084
17085       /* Types may not be defined in an exception-specification.  */
17086       saved_message = parser->type_definition_forbidden_message;
17087       parser->type_definition_forbidden_message
17088         = "types may not be defined in an exception-specification";
17089       /* Parse the type-id-list.  */
17090       type_id_list = cp_parser_type_id_list (parser);
17091       /* Restore the saved message.  */
17092       parser->type_definition_forbidden_message = saved_message;
17093     }
17094   else
17095     type_id_list = empty_except_spec;
17096
17097   /* Look for the `)'.  */
17098   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
17099
17100   return type_id_list;
17101 }
17102
17103 /* Parse an (optional) type-id-list.
17104
17105    type-id-list:
17106      type-id ... [opt]
17107      type-id-list , type-id ... [opt]
17108
17109    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
17110    in the order that the types were presented.  */
17111
17112 static tree
17113 cp_parser_type_id_list (cp_parser* parser)
17114 {
17115   tree types = NULL_TREE;
17116
17117   while (true)
17118     {
17119       cp_token *token;
17120       tree type;
17121
17122       /* Get the next type-id.  */
17123       type = cp_parser_type_id (parser);
17124       /* Parse the optional ellipsis. */
17125       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17126         {
17127           /* Consume the `...'. */
17128           cp_lexer_consume_token (parser->lexer);
17129
17130           /* Turn the type into a pack expansion expression. */
17131           type = make_pack_expansion (type);
17132         }
17133       /* Add it to the list.  */
17134       types = add_exception_specifier (types, type, /*complain=*/1);
17135       /* Peek at the next token.  */
17136       token = cp_lexer_peek_token (parser->lexer);
17137       /* If it is not a `,', we are done.  */
17138       if (token->type != CPP_COMMA)
17139         break;
17140       /* Consume the `,'.  */
17141       cp_lexer_consume_token (parser->lexer);
17142     }
17143
17144   return nreverse (types);
17145 }
17146
17147 /* Parse a try-block.
17148
17149    try-block:
17150      try compound-statement handler-seq  */
17151
17152 static tree
17153 cp_parser_try_block (cp_parser* parser)
17154 {
17155   tree try_block;
17156
17157   cp_parser_require_keyword (parser, RID_TRY, "%<try%>");
17158   try_block = begin_try_block ();
17159   cp_parser_compound_statement (parser, NULL, true);
17160   finish_try_block (try_block);
17161   cp_parser_handler_seq (parser);
17162   finish_handler_sequence (try_block);
17163
17164   return try_block;
17165 }
17166
17167 /* Parse a function-try-block.
17168
17169    function-try-block:
17170      try ctor-initializer [opt] function-body handler-seq  */
17171
17172 static bool
17173 cp_parser_function_try_block (cp_parser* parser)
17174 {
17175   tree compound_stmt;
17176   tree try_block;
17177   bool ctor_initializer_p;
17178
17179   /* Look for the `try' keyword.  */
17180   if (!cp_parser_require_keyword (parser, RID_TRY, "%<try%>"))
17181     return false;
17182   /* Let the rest of the front end know where we are.  */
17183   try_block = begin_function_try_block (&compound_stmt);
17184   /* Parse the function-body.  */
17185   ctor_initializer_p
17186     = cp_parser_ctor_initializer_opt_and_function_body (parser);
17187   /* We're done with the `try' part.  */
17188   finish_function_try_block (try_block);
17189   /* Parse the handlers.  */
17190   cp_parser_handler_seq (parser);
17191   /* We're done with the handlers.  */
17192   finish_function_handler_sequence (try_block, compound_stmt);
17193
17194   return ctor_initializer_p;
17195 }
17196
17197 /* Parse a handler-seq.
17198
17199    handler-seq:
17200      handler handler-seq [opt]  */
17201
17202 static void
17203 cp_parser_handler_seq (cp_parser* parser)
17204 {
17205   while (true)
17206     {
17207       cp_token *token;
17208
17209       /* Parse the handler.  */
17210       cp_parser_handler (parser);
17211       /* Peek at the next token.  */
17212       token = cp_lexer_peek_token (parser->lexer);
17213       /* If it's not `catch' then there are no more handlers.  */
17214       if (!cp_parser_is_keyword (token, RID_CATCH))
17215         break;
17216     }
17217 }
17218
17219 /* Parse a handler.
17220
17221    handler:
17222      catch ( exception-declaration ) compound-statement  */
17223
17224 static void
17225 cp_parser_handler (cp_parser* parser)
17226 {
17227   tree handler;
17228   tree declaration;
17229
17230   cp_parser_require_keyword (parser, RID_CATCH, "%<catch%>");
17231   handler = begin_handler ();
17232   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
17233   declaration = cp_parser_exception_declaration (parser);
17234   finish_handler_parms (declaration, handler);
17235   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
17236   cp_parser_compound_statement (parser, NULL, false);
17237   finish_handler (handler);
17238 }
17239
17240 /* Parse an exception-declaration.
17241
17242    exception-declaration:
17243      type-specifier-seq declarator
17244      type-specifier-seq abstract-declarator
17245      type-specifier-seq
17246      ...
17247
17248    Returns a VAR_DECL for the declaration, or NULL_TREE if the
17249    ellipsis variant is used.  */
17250
17251 static tree
17252 cp_parser_exception_declaration (cp_parser* parser)
17253 {
17254   cp_decl_specifier_seq type_specifiers;
17255   cp_declarator *declarator;
17256   const char *saved_message;
17257
17258   /* If it's an ellipsis, it's easy to handle.  */
17259   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17260     {
17261       /* Consume the `...' token.  */
17262       cp_lexer_consume_token (parser->lexer);
17263       return NULL_TREE;
17264     }
17265
17266   /* Types may not be defined in exception-declarations.  */
17267   saved_message = parser->type_definition_forbidden_message;
17268   parser->type_definition_forbidden_message
17269     = "types may not be defined in exception-declarations";
17270
17271   /* Parse the type-specifier-seq.  */
17272   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
17273                                 &type_specifiers);
17274   /* If it's a `)', then there is no declarator.  */
17275   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
17276     declarator = NULL;
17277   else
17278     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
17279                                        /*ctor_dtor_or_conv_p=*/NULL,
17280                                        /*parenthesized_p=*/NULL,
17281                                        /*member_p=*/false);
17282
17283   /* Restore the saved message.  */
17284   parser->type_definition_forbidden_message = saved_message;
17285
17286   if (!type_specifiers.any_specifiers_p)
17287     return error_mark_node;
17288
17289   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
17290 }
17291
17292 /* Parse a throw-expression.
17293
17294    throw-expression:
17295      throw assignment-expression [opt]
17296
17297    Returns a THROW_EXPR representing the throw-expression.  */
17298
17299 static tree
17300 cp_parser_throw_expression (cp_parser* parser)
17301 {
17302   tree expression;
17303   cp_token* token;
17304
17305   cp_parser_require_keyword (parser, RID_THROW, "%<throw%>");
17306   token = cp_lexer_peek_token (parser->lexer);
17307   /* Figure out whether or not there is an assignment-expression
17308      following the "throw" keyword.  */
17309   if (token->type == CPP_COMMA
17310       || token->type == CPP_SEMICOLON
17311       || token->type == CPP_CLOSE_PAREN
17312       || token->type == CPP_CLOSE_SQUARE
17313       || token->type == CPP_CLOSE_BRACE
17314       || token->type == CPP_COLON)
17315     expression = NULL_TREE;
17316   else
17317     expression = cp_parser_assignment_expression (parser,
17318                                                   /*cast_p=*/false, NULL);
17319
17320   return build_throw (expression);
17321 }
17322
17323 /* GNU Extensions */
17324
17325 /* Parse an (optional) asm-specification.
17326
17327    asm-specification:
17328      asm ( string-literal )
17329
17330    If the asm-specification is present, returns a STRING_CST
17331    corresponding to the string-literal.  Otherwise, returns
17332    NULL_TREE.  */
17333
17334 static tree
17335 cp_parser_asm_specification_opt (cp_parser* parser)
17336 {
17337   cp_token *token;
17338   tree asm_specification;
17339
17340   /* Peek at the next token.  */
17341   token = cp_lexer_peek_token (parser->lexer);
17342   /* If the next token isn't the `asm' keyword, then there's no
17343      asm-specification.  */
17344   if (!cp_parser_is_keyword (token, RID_ASM))
17345     return NULL_TREE;
17346
17347   /* Consume the `asm' token.  */
17348   cp_lexer_consume_token (parser->lexer);
17349   /* Look for the `('.  */
17350   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
17351
17352   /* Look for the string-literal.  */
17353   asm_specification = cp_parser_string_literal (parser, false, false);
17354
17355   /* Look for the `)'.  */
17356   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
17357
17358   return asm_specification;
17359 }
17360
17361 /* Parse an asm-operand-list.
17362
17363    asm-operand-list:
17364      asm-operand
17365      asm-operand-list , asm-operand
17366
17367    asm-operand:
17368      string-literal ( expression )
17369      [ string-literal ] string-literal ( expression )
17370
17371    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
17372    each node is the expression.  The TREE_PURPOSE is itself a
17373    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
17374    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
17375    is a STRING_CST for the string literal before the parenthesis. Returns
17376    ERROR_MARK_NODE if any of the operands are invalid.  */
17377
17378 static tree
17379 cp_parser_asm_operand_list (cp_parser* parser)
17380 {
17381   tree asm_operands = NULL_TREE;
17382   bool invalid_operands = false;
17383
17384   while (true)
17385     {
17386       tree string_literal;
17387       tree expression;
17388       tree name;
17389
17390       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
17391         {
17392           /* Consume the `[' token.  */
17393           cp_lexer_consume_token (parser->lexer);
17394           /* Read the operand name.  */
17395           name = cp_parser_identifier (parser);
17396           if (name != error_mark_node)
17397             name = build_string (IDENTIFIER_LENGTH (name),
17398                                  IDENTIFIER_POINTER (name));
17399           /* Look for the closing `]'.  */
17400           cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
17401         }
17402       else
17403         name = NULL_TREE;
17404       /* Look for the string-literal.  */
17405       string_literal = cp_parser_string_literal (parser, false, false);
17406
17407       /* Look for the `('.  */
17408       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
17409       /* Parse the expression.  */
17410       expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
17411       /* Look for the `)'.  */
17412       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
17413
17414       if (name == error_mark_node 
17415           || string_literal == error_mark_node 
17416           || expression == error_mark_node)
17417         invalid_operands = true;
17418
17419       /* Add this operand to the list.  */
17420       asm_operands = tree_cons (build_tree_list (name, string_literal),
17421                                 expression,
17422                                 asm_operands);
17423       /* If the next token is not a `,', there are no more
17424          operands.  */
17425       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
17426         break;
17427       /* Consume the `,'.  */
17428       cp_lexer_consume_token (parser->lexer);
17429     }
17430
17431   return invalid_operands ? error_mark_node : nreverse (asm_operands);
17432 }
17433
17434 /* Parse an asm-clobber-list.
17435
17436    asm-clobber-list:
17437      string-literal
17438      asm-clobber-list , string-literal
17439
17440    Returns a TREE_LIST, indicating the clobbers in the order that they
17441    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
17442
17443 static tree
17444 cp_parser_asm_clobber_list (cp_parser* parser)
17445 {
17446   tree clobbers = NULL_TREE;
17447
17448   while (true)
17449     {
17450       tree string_literal;
17451
17452       /* Look for the string literal.  */
17453       string_literal = cp_parser_string_literal (parser, false, false);
17454       /* Add it to the list.  */
17455       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
17456       /* If the next token is not a `,', then the list is
17457          complete.  */
17458       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
17459         break;
17460       /* Consume the `,' token.  */
17461       cp_lexer_consume_token (parser->lexer);
17462     }
17463
17464   return clobbers;
17465 }
17466
17467 /* Parse an asm-label-list.
17468
17469    asm-label-list:
17470      identifier
17471      asm-label-list , identifier
17472
17473    Returns a TREE_LIST, indicating the labels in the order that they
17474    appeared.  The TREE_VALUE of each node is a label.  */
17475
17476 static tree
17477 cp_parser_asm_label_list (cp_parser* parser)
17478 {
17479   tree labels = NULL_TREE;
17480
17481   while (true)
17482     {
17483       tree identifier, label, name;
17484
17485       /* Look for the identifier.  */
17486       identifier = cp_parser_identifier (parser);
17487       if (!error_operand_p (identifier))
17488         {
17489           label = lookup_label (identifier);
17490           if (TREE_CODE (label) == LABEL_DECL)
17491             {
17492               TREE_USED (label) = 1;
17493               check_goto (label);
17494               name = build_string (IDENTIFIER_LENGTH (identifier),
17495                                    IDENTIFIER_POINTER (identifier));
17496               labels = tree_cons (name, label, labels);
17497             }
17498         }
17499       /* If the next token is not a `,', then the list is
17500          complete.  */
17501       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
17502         break;
17503       /* Consume the `,' token.  */
17504       cp_lexer_consume_token (parser->lexer);
17505     }
17506
17507   return nreverse (labels);
17508 }
17509
17510 /* Parse an (optional) series of attributes.
17511
17512    attributes:
17513      attributes attribute
17514
17515    attribute:
17516      __attribute__ (( attribute-list [opt] ))
17517
17518    The return value is as for cp_parser_attribute_list.  */
17519
17520 static tree
17521 cp_parser_attributes_opt (cp_parser* parser)
17522 {
17523   tree attributes = NULL_TREE;
17524
17525   while (true)
17526     {
17527       cp_token *token;
17528       tree attribute_list;
17529
17530       /* Peek at the next token.  */
17531       token = cp_lexer_peek_token (parser->lexer);
17532       /* If it's not `__attribute__', then we're done.  */
17533       if (token->keyword != RID_ATTRIBUTE)
17534         break;
17535
17536       /* Consume the `__attribute__' keyword.  */
17537       cp_lexer_consume_token (parser->lexer);
17538       /* Look for the two `(' tokens.  */
17539       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
17540       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
17541
17542       /* Peek at the next token.  */
17543       token = cp_lexer_peek_token (parser->lexer);
17544       if (token->type != CPP_CLOSE_PAREN)
17545         /* Parse the attribute-list.  */
17546         attribute_list = cp_parser_attribute_list (parser);
17547       else
17548         /* If the next token is a `)', then there is no attribute
17549            list.  */
17550         attribute_list = NULL;
17551
17552       /* Look for the two `)' tokens.  */
17553       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
17554       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
17555
17556       /* Add these new attributes to the list.  */
17557       attributes = chainon (attributes, attribute_list);
17558     }
17559
17560   return attributes;
17561 }
17562
17563 /* Parse an attribute-list.
17564
17565    attribute-list:
17566      attribute
17567      attribute-list , attribute
17568
17569    attribute:
17570      identifier
17571      identifier ( identifier )
17572      identifier ( identifier , expression-list )
17573      identifier ( expression-list )
17574
17575    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
17576    to an attribute.  The TREE_PURPOSE of each node is the identifier
17577    indicating which attribute is in use.  The TREE_VALUE represents
17578    the arguments, if any.  */
17579
17580 static tree
17581 cp_parser_attribute_list (cp_parser* parser)
17582 {
17583   tree attribute_list = NULL_TREE;
17584   bool save_translate_strings_p = parser->translate_strings_p;
17585
17586   parser->translate_strings_p = false;
17587   while (true)
17588     {
17589       cp_token *token;
17590       tree identifier;
17591       tree attribute;
17592
17593       /* Look for the identifier.  We also allow keywords here; for
17594          example `__attribute__ ((const))' is legal.  */
17595       token = cp_lexer_peek_token (parser->lexer);
17596       if (token->type == CPP_NAME
17597           || token->type == CPP_KEYWORD)
17598         {
17599           tree arguments = NULL_TREE;
17600
17601           /* Consume the token.  */
17602           token = cp_lexer_consume_token (parser->lexer);
17603
17604           /* Save away the identifier that indicates which attribute
17605              this is.  */
17606           identifier = (token->type == CPP_KEYWORD) 
17607             /* For keywords, use the canonical spelling, not the
17608                parsed identifier.  */
17609             ? ridpointers[(int) token->keyword]
17610             : token->u.value;
17611           
17612           attribute = build_tree_list (identifier, NULL_TREE);
17613
17614           /* Peek at the next token.  */
17615           token = cp_lexer_peek_token (parser->lexer);
17616           /* If it's an `(', then parse the attribute arguments.  */
17617           if (token->type == CPP_OPEN_PAREN)
17618             {
17619               VEC(tree,gc) *vec;
17620               vec = cp_parser_parenthesized_expression_list
17621                     (parser, true, /*cast_p=*/false,
17622                      /*allow_expansion_p=*/false,
17623                      /*non_constant_p=*/NULL);
17624               if (vec == NULL)
17625                 arguments = error_mark_node;
17626               else
17627                 {
17628                   arguments = build_tree_list_vec (vec);
17629                   release_tree_vector (vec);
17630                 }
17631               /* Save the arguments away.  */
17632               TREE_VALUE (attribute) = arguments;
17633             }
17634
17635           if (arguments != error_mark_node)
17636             {
17637               /* Add this attribute to the list.  */
17638               TREE_CHAIN (attribute) = attribute_list;
17639               attribute_list = attribute;
17640             }
17641
17642           token = cp_lexer_peek_token (parser->lexer);
17643         }
17644       /* Now, look for more attributes.  If the next token isn't a
17645          `,', we're done.  */
17646       if (token->type != CPP_COMMA)
17647         break;
17648
17649       /* Consume the comma and keep going.  */
17650       cp_lexer_consume_token (parser->lexer);
17651     }
17652   parser->translate_strings_p = save_translate_strings_p;
17653
17654   /* We built up the list in reverse order.  */
17655   return nreverse (attribute_list);
17656 }
17657
17658 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
17659    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
17660    current value of the PEDANTIC flag, regardless of whether or not
17661    the `__extension__' keyword is present.  The caller is responsible
17662    for restoring the value of the PEDANTIC flag.  */
17663
17664 static bool
17665 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
17666 {
17667   /* Save the old value of the PEDANTIC flag.  */
17668   *saved_pedantic = pedantic;
17669
17670   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
17671     {
17672       /* Consume the `__extension__' token.  */
17673       cp_lexer_consume_token (parser->lexer);
17674       /* We're not being pedantic while the `__extension__' keyword is
17675          in effect.  */
17676       pedantic = 0;
17677
17678       return true;
17679     }
17680
17681   return false;
17682 }
17683
17684 /* Parse a label declaration.
17685
17686    label-declaration:
17687      __label__ label-declarator-seq ;
17688
17689    label-declarator-seq:
17690      identifier , label-declarator-seq
17691      identifier  */
17692
17693 static void
17694 cp_parser_label_declaration (cp_parser* parser)
17695 {
17696   /* Look for the `__label__' keyword.  */
17697   cp_parser_require_keyword (parser, RID_LABEL, "%<__label__%>");
17698
17699   while (true)
17700     {
17701       tree identifier;
17702
17703       /* Look for an identifier.  */
17704       identifier = cp_parser_identifier (parser);
17705       /* If we failed, stop.  */
17706       if (identifier == error_mark_node)
17707         break;
17708       /* Declare it as a label.  */
17709       finish_label_decl (identifier);
17710       /* If the next token is a `;', stop.  */
17711       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17712         break;
17713       /* Look for the `,' separating the label declarations.  */
17714       cp_parser_require (parser, CPP_COMMA, "%<,%>");
17715     }
17716
17717   /* Look for the final `;'.  */
17718   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
17719 }
17720
17721 /* Support Functions */
17722
17723 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
17724    NAME should have one of the representations used for an
17725    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
17726    is returned.  If PARSER->SCOPE is a dependent type, then a
17727    SCOPE_REF is returned.
17728
17729    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
17730    returned; the name was already resolved when the TEMPLATE_ID_EXPR
17731    was formed.  Abstractly, such entities should not be passed to this
17732    function, because they do not need to be looked up, but it is
17733    simpler to check for this special case here, rather than at the
17734    call-sites.
17735
17736    In cases not explicitly covered above, this function returns a
17737    DECL, OVERLOAD, or baselink representing the result of the lookup.
17738    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
17739    is returned.
17740
17741    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
17742    (e.g., "struct") that was used.  In that case bindings that do not
17743    refer to types are ignored.
17744
17745    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
17746    ignored.
17747
17748    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
17749    are ignored.
17750
17751    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
17752    types.
17753
17754    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
17755    TREE_LIST of candidates if name-lookup results in an ambiguity, and
17756    NULL_TREE otherwise.  */
17757
17758 static tree
17759 cp_parser_lookup_name (cp_parser *parser, tree name,
17760                        enum tag_types tag_type,
17761                        bool is_template,
17762                        bool is_namespace,
17763                        bool check_dependency,
17764                        tree *ambiguous_decls,
17765                        location_t name_location)
17766 {
17767   int flags = 0;
17768   tree decl;
17769   tree object_type = parser->context->object_type;
17770
17771   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
17772     flags |= LOOKUP_COMPLAIN;
17773
17774   /* Assume that the lookup will be unambiguous.  */
17775   if (ambiguous_decls)
17776     *ambiguous_decls = NULL_TREE;
17777
17778   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
17779      no longer valid.  Note that if we are parsing tentatively, and
17780      the parse fails, OBJECT_TYPE will be automatically restored.  */
17781   parser->context->object_type = NULL_TREE;
17782
17783   if (name == error_mark_node)
17784     return error_mark_node;
17785
17786   /* A template-id has already been resolved; there is no lookup to
17787      do.  */
17788   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
17789     return name;
17790   if (BASELINK_P (name))
17791     {
17792       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
17793                   == TEMPLATE_ID_EXPR);
17794       return name;
17795     }
17796
17797   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
17798      it should already have been checked to make sure that the name
17799      used matches the type being destroyed.  */
17800   if (TREE_CODE (name) == BIT_NOT_EXPR)
17801     {
17802       tree type;
17803
17804       /* Figure out to which type this destructor applies.  */
17805       if (parser->scope)
17806         type = parser->scope;
17807       else if (object_type)
17808         type = object_type;
17809       else
17810         type = current_class_type;
17811       /* If that's not a class type, there is no destructor.  */
17812       if (!type || !CLASS_TYPE_P (type))
17813         return error_mark_node;
17814       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
17815         lazily_declare_fn (sfk_destructor, type);
17816       if (!CLASSTYPE_DESTRUCTORS (type))
17817           return error_mark_node;
17818       /* If it was a class type, return the destructor.  */
17819       return CLASSTYPE_DESTRUCTORS (type);
17820     }
17821
17822   /* By this point, the NAME should be an ordinary identifier.  If
17823      the id-expression was a qualified name, the qualifying scope is
17824      stored in PARSER->SCOPE at this point.  */
17825   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
17826
17827   /* Perform the lookup.  */
17828   if (parser->scope)
17829     {
17830       bool dependent_p;
17831
17832       if (parser->scope == error_mark_node)
17833         return error_mark_node;
17834
17835       /* If the SCOPE is dependent, the lookup must be deferred until
17836          the template is instantiated -- unless we are explicitly
17837          looking up names in uninstantiated templates.  Even then, we
17838          cannot look up the name if the scope is not a class type; it
17839          might, for example, be a template type parameter.  */
17840       dependent_p = (TYPE_P (parser->scope)
17841                      && dependent_scope_p (parser->scope));
17842       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
17843           && dependent_p)
17844         /* Defer lookup.  */
17845         decl = error_mark_node;
17846       else
17847         {
17848           tree pushed_scope = NULL_TREE;
17849
17850           /* If PARSER->SCOPE is a dependent type, then it must be a
17851              class type, and we must not be checking dependencies;
17852              otherwise, we would have processed this lookup above.  So
17853              that PARSER->SCOPE is not considered a dependent base by
17854              lookup_member, we must enter the scope here.  */
17855           if (dependent_p)
17856             pushed_scope = push_scope (parser->scope);
17857           /* If the PARSER->SCOPE is a template specialization, it
17858              may be instantiated during name lookup.  In that case,
17859              errors may be issued.  Even if we rollback the current
17860              tentative parse, those errors are valid.  */
17861           decl = lookup_qualified_name (parser->scope, name,
17862                                         tag_type != none_type,
17863                                         /*complain=*/true);
17864
17865           /* If we have a single function from a using decl, pull it out.  */
17866           if (TREE_CODE (decl) == OVERLOAD
17867               && !really_overloaded_fn (decl))
17868             decl = OVL_FUNCTION (decl);
17869
17870           if (pushed_scope)
17871             pop_scope (pushed_scope);
17872         }
17873
17874       /* If the scope is a dependent type and either we deferred lookup or
17875          we did lookup but didn't find the name, rememeber the name.  */
17876       if (decl == error_mark_node && TYPE_P (parser->scope)
17877           && dependent_type_p (parser->scope))
17878         {
17879           if (tag_type)
17880             {
17881               tree type;
17882
17883               /* The resolution to Core Issue 180 says that `struct
17884                  A::B' should be considered a type-name, even if `A'
17885                  is dependent.  */
17886               type = make_typename_type (parser->scope, name, tag_type,
17887                                          /*complain=*/tf_error);
17888               decl = TYPE_NAME (type);
17889             }
17890           else if (is_template
17891                    && (cp_parser_next_token_ends_template_argument_p (parser)
17892                        || cp_lexer_next_token_is (parser->lexer,
17893                                                   CPP_CLOSE_PAREN)))
17894             decl = make_unbound_class_template (parser->scope,
17895                                                 name, NULL_TREE,
17896                                                 /*complain=*/tf_error);
17897           else
17898             decl = build_qualified_name (/*type=*/NULL_TREE,
17899                                          parser->scope, name,
17900                                          is_template);
17901         }
17902       parser->qualifying_scope = parser->scope;
17903       parser->object_scope = NULL_TREE;
17904     }
17905   else if (object_type)
17906     {
17907       tree object_decl = NULL_TREE;
17908       /* Look up the name in the scope of the OBJECT_TYPE, unless the
17909          OBJECT_TYPE is not a class.  */
17910       if (CLASS_TYPE_P (object_type))
17911         /* If the OBJECT_TYPE is a template specialization, it may
17912            be instantiated during name lookup.  In that case, errors
17913            may be issued.  Even if we rollback the current tentative
17914            parse, those errors are valid.  */
17915         object_decl = lookup_member (object_type,
17916                                      name,
17917                                      /*protect=*/0,
17918                                      tag_type != none_type);
17919       /* Look it up in the enclosing context, too.  */
17920       decl = lookup_name_real (name, tag_type != none_type,
17921                                /*nonclass=*/0,
17922                                /*block_p=*/true, is_namespace, flags);
17923       parser->object_scope = object_type;
17924       parser->qualifying_scope = NULL_TREE;
17925       if (object_decl)
17926         decl = object_decl;
17927     }
17928   else
17929     {
17930       decl = lookup_name_real (name, tag_type != none_type,
17931                                /*nonclass=*/0,
17932                                /*block_p=*/true, is_namespace, flags);
17933       parser->qualifying_scope = NULL_TREE;
17934       parser->object_scope = NULL_TREE;
17935     }
17936
17937   /* If the lookup failed, let our caller know.  */
17938   if (!decl || decl == error_mark_node)
17939     return error_mark_node;
17940
17941   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
17942   if (TREE_CODE (decl) == TREE_LIST)
17943     {
17944       if (ambiguous_decls)
17945         *ambiguous_decls = decl;
17946       /* The error message we have to print is too complicated for
17947          cp_parser_error, so we incorporate its actions directly.  */
17948       if (!cp_parser_simulate_error (parser))
17949         {
17950           error_at (name_location, "reference to %qD is ambiguous",
17951                     name);
17952           print_candidates (decl);
17953         }
17954       return error_mark_node;
17955     }
17956
17957   gcc_assert (DECL_P (decl)
17958               || TREE_CODE (decl) == OVERLOAD
17959               || TREE_CODE (decl) == SCOPE_REF
17960               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
17961               || BASELINK_P (decl));
17962
17963   /* If we have resolved the name of a member declaration, check to
17964      see if the declaration is accessible.  When the name resolves to
17965      set of overloaded functions, accessibility is checked when
17966      overload resolution is done.
17967
17968      During an explicit instantiation, access is not checked at all,
17969      as per [temp.explicit].  */
17970   if (DECL_P (decl))
17971     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
17972
17973   return decl;
17974 }
17975
17976 /* Like cp_parser_lookup_name, but for use in the typical case where
17977    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
17978    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
17979
17980 static tree
17981 cp_parser_lookup_name_simple (cp_parser* parser, tree name, location_t location)
17982 {
17983   return cp_parser_lookup_name (parser, name,
17984                                 none_type,
17985                                 /*is_template=*/false,
17986                                 /*is_namespace=*/false,
17987                                 /*check_dependency=*/true,
17988                                 /*ambiguous_decls=*/NULL,
17989                                 location);
17990 }
17991
17992 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
17993    the current context, return the TYPE_DECL.  If TAG_NAME_P is
17994    true, the DECL indicates the class being defined in a class-head,
17995    or declared in an elaborated-type-specifier.
17996
17997    Otherwise, return DECL.  */
17998
17999 static tree
18000 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
18001 {
18002   /* If the TEMPLATE_DECL is being declared as part of a class-head,
18003      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
18004
18005        struct A {
18006          template <typename T> struct B;
18007        };
18008
18009        template <typename T> struct A::B {};
18010
18011      Similarly, in an elaborated-type-specifier:
18012
18013        namespace N { struct X{}; }
18014
18015        struct A {
18016          template <typename T> friend struct N::X;
18017        };
18018
18019      However, if the DECL refers to a class type, and we are in
18020      the scope of the class, then the name lookup automatically
18021      finds the TYPE_DECL created by build_self_reference rather
18022      than a TEMPLATE_DECL.  For example, in:
18023
18024        template <class T> struct S {
18025          S s;
18026        };
18027
18028      there is no need to handle such case.  */
18029
18030   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
18031     return DECL_TEMPLATE_RESULT (decl);
18032
18033   return decl;
18034 }
18035
18036 /* If too many, or too few, template-parameter lists apply to the
18037    declarator, issue an error message.  Returns TRUE if all went well,
18038    and FALSE otherwise.  */
18039
18040 static bool
18041 cp_parser_check_declarator_template_parameters (cp_parser* parser,
18042                                                 cp_declarator *declarator,
18043                                                 location_t declarator_location)
18044 {
18045   unsigned num_templates;
18046
18047   /* We haven't seen any classes that involve template parameters yet.  */
18048   num_templates = 0;
18049
18050   switch (declarator->kind)
18051     {
18052     case cdk_id:
18053       if (declarator->u.id.qualifying_scope)
18054         {
18055           tree scope;
18056           tree member;
18057
18058           scope = declarator->u.id.qualifying_scope;
18059           member = declarator->u.id.unqualified_name;
18060
18061           while (scope && CLASS_TYPE_P (scope))
18062             {
18063               /* You're supposed to have one `template <...>'
18064                  for every template class, but you don't need one
18065                  for a full specialization.  For example:
18066
18067                  template <class T> struct S{};
18068                  template <> struct S<int> { void f(); };
18069                  void S<int>::f () {}
18070
18071                  is correct; there shouldn't be a `template <>' for
18072                  the definition of `S<int>::f'.  */
18073               if (!CLASSTYPE_TEMPLATE_INFO (scope))
18074                 /* If SCOPE does not have template information of any
18075                    kind, then it is not a template, nor is it nested
18076                    within a template.  */
18077                 break;
18078               if (explicit_class_specialization_p (scope))
18079                 break;
18080               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
18081                 ++num_templates;
18082
18083               scope = TYPE_CONTEXT (scope);
18084             }
18085         }
18086       else if (TREE_CODE (declarator->u.id.unqualified_name)
18087                == TEMPLATE_ID_EXPR)
18088         /* If the DECLARATOR has the form `X<y>' then it uses one
18089            additional level of template parameters.  */
18090         ++num_templates;
18091
18092       return cp_parser_check_template_parameters 
18093         (parser, num_templates, declarator_location, declarator);
18094
18095
18096     case cdk_function:
18097     case cdk_array:
18098     case cdk_pointer:
18099     case cdk_reference:
18100     case cdk_ptrmem:
18101       return (cp_parser_check_declarator_template_parameters
18102               (parser, declarator->declarator, declarator_location));
18103
18104     case cdk_error:
18105       return true;
18106
18107     default:
18108       gcc_unreachable ();
18109     }
18110   return false;
18111 }
18112
18113 /* NUM_TEMPLATES were used in the current declaration.  If that is
18114    invalid, return FALSE and issue an error messages.  Otherwise,
18115    return TRUE.  If DECLARATOR is non-NULL, then we are checking a
18116    declarator and we can print more accurate diagnostics.  */
18117
18118 static bool
18119 cp_parser_check_template_parameters (cp_parser* parser,
18120                                      unsigned num_templates,
18121                                      location_t location,
18122                                      cp_declarator *declarator)
18123 {
18124   /* If there are the same number of template classes and parameter
18125      lists, that's OK.  */
18126   if (parser->num_template_parameter_lists == num_templates)
18127     return true;
18128   /* If there are more, but only one more, then we are referring to a
18129      member template.  That's OK too.  */
18130   if (parser->num_template_parameter_lists == num_templates + 1)
18131     return true;
18132   /* If there are more template classes than parameter lists, we have
18133      something like:
18134
18135        template <class T> void S<T>::R<T>::f ();  */
18136   if (parser->num_template_parameter_lists < num_templates)
18137     {
18138       if (declarator)
18139         error_at (location, "specializing member %<%T::%E%> "
18140                   "requires %<template<>%> syntax", 
18141                   declarator->u.id.qualifying_scope,
18142                   declarator->u.id.unqualified_name);
18143       else 
18144         error_at (location, "too few template-parameter-lists");
18145       return false;
18146     }
18147   /* Otherwise, there are too many template parameter lists.  We have
18148      something like:
18149
18150      template <class T> template <class U> void S::f();  */
18151   error_at (location, "too many template-parameter-lists");
18152   return false;
18153 }
18154
18155 /* Parse an optional `::' token indicating that the following name is
18156    from the global namespace.  If so, PARSER->SCOPE is set to the
18157    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
18158    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
18159    Returns the new value of PARSER->SCOPE, if the `::' token is
18160    present, and NULL_TREE otherwise.  */
18161
18162 static tree
18163 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
18164 {
18165   cp_token *token;
18166
18167   /* Peek at the next token.  */
18168   token = cp_lexer_peek_token (parser->lexer);
18169   /* If we're looking at a `::' token then we're starting from the
18170      global namespace, not our current location.  */
18171   if (token->type == CPP_SCOPE)
18172     {
18173       /* Consume the `::' token.  */
18174       cp_lexer_consume_token (parser->lexer);
18175       /* Set the SCOPE so that we know where to start the lookup.  */
18176       parser->scope = global_namespace;
18177       parser->qualifying_scope = global_namespace;
18178       parser->object_scope = NULL_TREE;
18179
18180       return parser->scope;
18181     }
18182   else if (!current_scope_valid_p)
18183     {
18184       parser->scope = NULL_TREE;
18185       parser->qualifying_scope = NULL_TREE;
18186       parser->object_scope = NULL_TREE;
18187     }
18188
18189   return NULL_TREE;
18190 }
18191
18192 /* Returns TRUE if the upcoming token sequence is the start of a
18193    constructor declarator.  If FRIEND_P is true, the declarator is
18194    preceded by the `friend' specifier.  */
18195
18196 static bool
18197 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
18198 {
18199   bool constructor_p;
18200   tree type_decl = NULL_TREE;
18201   bool nested_name_p;
18202   cp_token *next_token;
18203
18204   /* The common case is that this is not a constructor declarator, so
18205      try to avoid doing lots of work if at all possible.  It's not
18206      valid declare a constructor at function scope.  */
18207   if (parser->in_function_body)
18208     return false;
18209   /* And only certain tokens can begin a constructor declarator.  */
18210   next_token = cp_lexer_peek_token (parser->lexer);
18211   if (next_token->type != CPP_NAME
18212       && next_token->type != CPP_SCOPE
18213       && next_token->type != CPP_NESTED_NAME_SPECIFIER
18214       && next_token->type != CPP_TEMPLATE_ID)
18215     return false;
18216
18217   /* Parse tentatively; we are going to roll back all of the tokens
18218      consumed here.  */
18219   cp_parser_parse_tentatively (parser);
18220   /* Assume that we are looking at a constructor declarator.  */
18221   constructor_p = true;
18222
18223   /* Look for the optional `::' operator.  */
18224   cp_parser_global_scope_opt (parser,
18225                               /*current_scope_valid_p=*/false);
18226   /* Look for the nested-name-specifier.  */
18227   nested_name_p
18228     = (cp_parser_nested_name_specifier_opt (parser,
18229                                             /*typename_keyword_p=*/false,
18230                                             /*check_dependency_p=*/false,
18231                                             /*type_p=*/false,
18232                                             /*is_declaration=*/false)
18233        != NULL_TREE);
18234   /* Outside of a class-specifier, there must be a
18235      nested-name-specifier.  */
18236   if (!nested_name_p &&
18237       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
18238        || friend_p))
18239     constructor_p = false;
18240   /* If we still think that this might be a constructor-declarator,
18241      look for a class-name.  */
18242   if (constructor_p)
18243     {
18244       /* If we have:
18245
18246            template <typename T> struct S { S(); };
18247            template <typename T> S<T>::S ();
18248
18249          we must recognize that the nested `S' names a class.
18250          Similarly, for:
18251
18252            template <typename T> S<T>::S<T> ();
18253
18254          we must recognize that the nested `S' names a template.  */
18255       type_decl = cp_parser_class_name (parser,
18256                                         /*typename_keyword_p=*/false,
18257                                         /*template_keyword_p=*/false,
18258                                         none_type,
18259                                         /*check_dependency_p=*/false,
18260                                         /*class_head_p=*/false,
18261                                         /*is_declaration=*/false);
18262       /* If there was no class-name, then this is not a constructor.  */
18263       constructor_p = !cp_parser_error_occurred (parser);
18264     }
18265
18266   /* If we're still considering a constructor, we have to see a `(',
18267      to begin the parameter-declaration-clause, followed by either a
18268      `)', an `...', or a decl-specifier.  We need to check for a
18269      type-specifier to avoid being fooled into thinking that:
18270
18271        S::S (f) (int);
18272
18273      is a constructor.  (It is actually a function named `f' that
18274      takes one parameter (of type `int') and returns a value of type
18275      `S::S'.  */
18276   if (constructor_p
18277       && cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
18278     {
18279       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
18280           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
18281           /* A parameter declaration begins with a decl-specifier,
18282              which is either the "attribute" keyword, a storage class
18283              specifier, or (usually) a type-specifier.  */
18284           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
18285         {
18286           tree type;
18287           tree pushed_scope = NULL_TREE;
18288           unsigned saved_num_template_parameter_lists;
18289
18290           /* Names appearing in the type-specifier should be looked up
18291              in the scope of the class.  */
18292           if (current_class_type)
18293             type = NULL_TREE;
18294           else
18295             {
18296               type = TREE_TYPE (type_decl);
18297               if (TREE_CODE (type) == TYPENAME_TYPE)
18298                 {
18299                   type = resolve_typename_type (type,
18300                                                 /*only_current_p=*/false);
18301                   if (TREE_CODE (type) == TYPENAME_TYPE)
18302                     {
18303                       cp_parser_abort_tentative_parse (parser);
18304                       return false;
18305                     }
18306                 }
18307               pushed_scope = push_scope (type);
18308             }
18309
18310           /* Inside the constructor parameter list, surrounding
18311              template-parameter-lists do not apply.  */
18312           saved_num_template_parameter_lists
18313             = parser->num_template_parameter_lists;
18314           parser->num_template_parameter_lists = 0;
18315
18316           /* Look for the type-specifier.  */
18317           cp_parser_type_specifier (parser,
18318                                     CP_PARSER_FLAGS_NONE,
18319                                     /*decl_specs=*/NULL,
18320                                     /*is_declarator=*/true,
18321                                     /*declares_class_or_enum=*/NULL,
18322                                     /*is_cv_qualifier=*/NULL);
18323
18324           parser->num_template_parameter_lists
18325             = saved_num_template_parameter_lists;
18326
18327           /* Leave the scope of the class.  */
18328           if (pushed_scope)
18329             pop_scope (pushed_scope);
18330
18331           constructor_p = !cp_parser_error_occurred (parser);
18332         }
18333     }
18334   else
18335     constructor_p = false;
18336   /* We did not really want to consume any tokens.  */
18337   cp_parser_abort_tentative_parse (parser);
18338
18339   return constructor_p;
18340 }
18341
18342 /* Parse the definition of the function given by the DECL_SPECIFIERS,
18343    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
18344    they must be performed once we are in the scope of the function.
18345
18346    Returns the function defined.  */
18347
18348 static tree
18349 cp_parser_function_definition_from_specifiers_and_declarator
18350   (cp_parser* parser,
18351    cp_decl_specifier_seq *decl_specifiers,
18352    tree attributes,
18353    const cp_declarator *declarator)
18354 {
18355   tree fn;
18356   bool success_p;
18357
18358   /* Begin the function-definition.  */
18359   success_p = start_function (decl_specifiers, declarator, attributes);
18360
18361   /* The things we're about to see are not directly qualified by any
18362      template headers we've seen thus far.  */
18363   reset_specialization ();
18364
18365   /* If there were names looked up in the decl-specifier-seq that we
18366      did not check, check them now.  We must wait until we are in the
18367      scope of the function to perform the checks, since the function
18368      might be a friend.  */
18369   perform_deferred_access_checks ();
18370
18371   if (!success_p)
18372     {
18373       /* Skip the entire function.  */
18374       cp_parser_skip_to_end_of_block_or_statement (parser);
18375       fn = error_mark_node;
18376     }
18377   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
18378     {
18379       /* Seen already, skip it.  An error message has already been output.  */
18380       cp_parser_skip_to_end_of_block_or_statement (parser);
18381       fn = current_function_decl;
18382       current_function_decl = NULL_TREE;
18383       /* If this is a function from a class, pop the nested class.  */
18384       if (current_class_name)
18385         pop_nested_class ();
18386     }
18387   else
18388     fn = cp_parser_function_definition_after_declarator (parser,
18389                                                          /*inline_p=*/false);
18390
18391   return fn;
18392 }
18393
18394 /* Parse the part of a function-definition that follows the
18395    declarator.  INLINE_P is TRUE iff this function is an inline
18396    function defined within a class-specifier.
18397
18398    Returns the function defined.  */
18399
18400 static tree
18401 cp_parser_function_definition_after_declarator (cp_parser* parser,
18402                                                 bool inline_p)
18403 {
18404   tree fn;
18405   bool ctor_initializer_p = false;
18406   bool saved_in_unbraced_linkage_specification_p;
18407   bool saved_in_function_body;
18408   unsigned saved_num_template_parameter_lists;
18409   cp_token *token;
18410
18411   saved_in_function_body = parser->in_function_body;
18412   parser->in_function_body = true;
18413   /* If the next token is `return', then the code may be trying to
18414      make use of the "named return value" extension that G++ used to
18415      support.  */
18416   token = cp_lexer_peek_token (parser->lexer);
18417   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
18418     {
18419       /* Consume the `return' keyword.  */
18420       cp_lexer_consume_token (parser->lexer);
18421       /* Look for the identifier that indicates what value is to be
18422          returned.  */
18423       cp_parser_identifier (parser);
18424       /* Issue an error message.  */
18425       error_at (token->location,
18426                 "named return values are no longer supported");
18427       /* Skip tokens until we reach the start of the function body.  */
18428       while (true)
18429         {
18430           cp_token *token = cp_lexer_peek_token (parser->lexer);
18431           if (token->type == CPP_OPEN_BRACE
18432               || token->type == CPP_EOF
18433               || token->type == CPP_PRAGMA_EOL)
18434             break;
18435           cp_lexer_consume_token (parser->lexer);
18436         }
18437     }
18438   /* The `extern' in `extern "C" void f () { ... }' does not apply to
18439      anything declared inside `f'.  */
18440   saved_in_unbraced_linkage_specification_p
18441     = parser->in_unbraced_linkage_specification_p;
18442   parser->in_unbraced_linkage_specification_p = false;
18443   /* Inside the function, surrounding template-parameter-lists do not
18444      apply.  */
18445   saved_num_template_parameter_lists
18446     = parser->num_template_parameter_lists;
18447   parser->num_template_parameter_lists = 0;
18448
18449   start_lambda_scope (current_function_decl);
18450
18451   /* If the next token is `try', then we are looking at a
18452      function-try-block.  */
18453   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
18454     ctor_initializer_p = cp_parser_function_try_block (parser);
18455   /* A function-try-block includes the function-body, so we only do
18456      this next part if we're not processing a function-try-block.  */
18457   else
18458     ctor_initializer_p
18459       = cp_parser_ctor_initializer_opt_and_function_body (parser);
18460
18461   finish_lambda_scope ();
18462
18463   /* Finish the function.  */
18464   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
18465                         (inline_p ? 2 : 0));
18466   /* Generate code for it, if necessary.  */
18467   expand_or_defer_fn (fn);
18468   /* Restore the saved values.  */
18469   parser->in_unbraced_linkage_specification_p
18470     = saved_in_unbraced_linkage_specification_p;
18471   parser->num_template_parameter_lists
18472     = saved_num_template_parameter_lists;
18473   parser->in_function_body = saved_in_function_body;
18474
18475   return fn;
18476 }
18477
18478 /* Parse a template-declaration, assuming that the `export' (and
18479    `extern') keywords, if present, has already been scanned.  MEMBER_P
18480    is as for cp_parser_template_declaration.  */
18481
18482 static void
18483 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
18484 {
18485   tree decl = NULL_TREE;
18486   VEC (deferred_access_check,gc) *checks;
18487   tree parameter_list;
18488   bool friend_p = false;
18489   bool need_lang_pop;
18490   cp_token *token;
18491
18492   /* Look for the `template' keyword.  */
18493   token = cp_lexer_peek_token (parser->lexer);
18494   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>"))
18495     return;
18496
18497   /* And the `<'.  */
18498   if (!cp_parser_require (parser, CPP_LESS, "%<<%>"))
18499     return;
18500   if (at_class_scope_p () && current_function_decl)
18501     {
18502       /* 14.5.2.2 [temp.mem]
18503
18504          A local class shall not have member templates.  */
18505       error_at (token->location,
18506                 "invalid declaration of member template in local class");
18507       cp_parser_skip_to_end_of_block_or_statement (parser);
18508       return;
18509     }
18510   /* [temp]
18511
18512      A template ... shall not have C linkage.  */
18513   if (current_lang_name == lang_name_c)
18514     {
18515       error_at (token->location, "template with C linkage");
18516       /* Give it C++ linkage to avoid confusing other parts of the
18517          front end.  */
18518       push_lang_context (lang_name_cplusplus);
18519       need_lang_pop = true;
18520     }
18521   else
18522     need_lang_pop = false;
18523
18524   /* We cannot perform access checks on the template parameter
18525      declarations until we know what is being declared, just as we
18526      cannot check the decl-specifier list.  */
18527   push_deferring_access_checks (dk_deferred);
18528
18529   /* If the next token is `>', then we have an invalid
18530      specialization.  Rather than complain about an invalid template
18531      parameter, issue an error message here.  */
18532   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
18533     {
18534       cp_parser_error (parser, "invalid explicit specialization");
18535       begin_specialization ();
18536       parameter_list = NULL_TREE;
18537     }
18538   else
18539     /* Parse the template parameters.  */
18540     parameter_list = cp_parser_template_parameter_list (parser);
18541
18542   /* Get the deferred access checks from the parameter list.  These
18543      will be checked once we know what is being declared, as for a
18544      member template the checks must be performed in the scope of the
18545      class containing the member.  */
18546   checks = get_deferred_access_checks ();
18547
18548   /* Look for the `>'.  */
18549   cp_parser_skip_to_end_of_template_parameter_list (parser);
18550   /* We just processed one more parameter list.  */
18551   ++parser->num_template_parameter_lists;
18552   /* If the next token is `template', there are more template
18553      parameters.  */
18554   if (cp_lexer_next_token_is_keyword (parser->lexer,
18555                                       RID_TEMPLATE))
18556     cp_parser_template_declaration_after_export (parser, member_p);
18557   else
18558     {
18559       /* There are no access checks when parsing a template, as we do not
18560          know if a specialization will be a friend.  */
18561       push_deferring_access_checks (dk_no_check);
18562       token = cp_lexer_peek_token (parser->lexer);
18563       decl = cp_parser_single_declaration (parser,
18564                                            checks,
18565                                            member_p,
18566                                            /*explicit_specialization_p=*/false,
18567                                            &friend_p);
18568       pop_deferring_access_checks ();
18569
18570       /* If this is a member template declaration, let the front
18571          end know.  */
18572       if (member_p && !friend_p && decl)
18573         {
18574           if (TREE_CODE (decl) == TYPE_DECL)
18575             cp_parser_check_access_in_redeclaration (decl, token->location);
18576
18577           decl = finish_member_template_decl (decl);
18578         }
18579       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
18580         make_friend_class (current_class_type, TREE_TYPE (decl),
18581                            /*complain=*/true);
18582     }
18583   /* We are done with the current parameter list.  */
18584   --parser->num_template_parameter_lists;
18585
18586   pop_deferring_access_checks ();
18587
18588   /* Finish up.  */
18589   finish_template_decl (parameter_list);
18590
18591   /* Register member declarations.  */
18592   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
18593     finish_member_declaration (decl);
18594   /* For the erroneous case of a template with C linkage, we pushed an
18595      implicit C++ linkage scope; exit that scope now.  */
18596   if (need_lang_pop)
18597     pop_lang_context ();
18598   /* If DECL is a function template, we must return to parse it later.
18599      (Even though there is no definition, there might be default
18600      arguments that need handling.)  */
18601   if (member_p && decl
18602       && (TREE_CODE (decl) == FUNCTION_DECL
18603           || DECL_FUNCTION_TEMPLATE_P (decl)))
18604     TREE_VALUE (parser->unparsed_functions_queues)
18605       = tree_cons (NULL_TREE, decl,
18606                    TREE_VALUE (parser->unparsed_functions_queues));
18607 }
18608
18609 /* Perform the deferred access checks from a template-parameter-list.
18610    CHECKS is a TREE_LIST of access checks, as returned by
18611    get_deferred_access_checks.  */
18612
18613 static void
18614 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
18615 {
18616   ++processing_template_parmlist;
18617   perform_access_checks (checks);
18618   --processing_template_parmlist;
18619 }
18620
18621 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
18622    `function-definition' sequence.  MEMBER_P is true, this declaration
18623    appears in a class scope.
18624
18625    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
18626    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
18627
18628 static tree
18629 cp_parser_single_declaration (cp_parser* parser,
18630                               VEC (deferred_access_check,gc)* checks,
18631                               bool member_p,
18632                               bool explicit_specialization_p,
18633                               bool* friend_p)
18634 {
18635   int declares_class_or_enum;
18636   tree decl = NULL_TREE;
18637   cp_decl_specifier_seq decl_specifiers;
18638   bool function_definition_p = false;
18639   cp_token *decl_spec_token_start;
18640
18641   /* This function is only used when processing a template
18642      declaration.  */
18643   gcc_assert (innermost_scope_kind () == sk_template_parms
18644               || innermost_scope_kind () == sk_template_spec);
18645
18646   /* Defer access checks until we know what is being declared.  */
18647   push_deferring_access_checks (dk_deferred);
18648
18649   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
18650      alternative.  */
18651   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
18652   cp_parser_decl_specifier_seq (parser,
18653                                 CP_PARSER_FLAGS_OPTIONAL,
18654                                 &decl_specifiers,
18655                                 &declares_class_or_enum);
18656   if (friend_p)
18657     *friend_p = cp_parser_friend_p (&decl_specifiers);
18658
18659   /* There are no template typedefs.  */
18660   if (decl_specifiers.specs[(int) ds_typedef])
18661     {
18662       error_at (decl_spec_token_start->location,
18663                 "template declaration of %<typedef%>");
18664       decl = error_mark_node;
18665     }
18666
18667   /* Gather up the access checks that occurred the
18668      decl-specifier-seq.  */
18669   stop_deferring_access_checks ();
18670
18671   /* Check for the declaration of a template class.  */
18672   if (declares_class_or_enum)
18673     {
18674       if (cp_parser_declares_only_class_p (parser))
18675         {
18676           decl = shadow_tag (&decl_specifiers);
18677
18678           /* In this case:
18679
18680                struct C {
18681                  friend template <typename T> struct A<T>::B;
18682                };
18683
18684              A<T>::B will be represented by a TYPENAME_TYPE, and
18685              therefore not recognized by shadow_tag.  */
18686           if (friend_p && *friend_p
18687               && !decl
18688               && decl_specifiers.type
18689               && TYPE_P (decl_specifiers.type))
18690             decl = decl_specifiers.type;
18691
18692           if (decl && decl != error_mark_node)
18693             decl = TYPE_NAME (decl);
18694           else
18695             decl = error_mark_node;
18696
18697           /* Perform access checks for template parameters.  */
18698           cp_parser_perform_template_parameter_access_checks (checks);
18699         }
18700     }
18701   /* If it's not a template class, try for a template function.  If
18702      the next token is a `;', then this declaration does not declare
18703      anything.  But, if there were errors in the decl-specifiers, then
18704      the error might well have come from an attempted class-specifier.
18705      In that case, there's no need to warn about a missing declarator.  */
18706   if (!decl
18707       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
18708           || decl_specifiers.type != error_mark_node))
18709     {
18710       decl = cp_parser_init_declarator (parser,
18711                                         &decl_specifiers,
18712                                         checks,
18713                                         /*function_definition_allowed_p=*/true,
18714                                         member_p,
18715                                         declares_class_or_enum,
18716                                         &function_definition_p);
18717
18718     /* 7.1.1-1 [dcl.stc]
18719
18720        A storage-class-specifier shall not be specified in an explicit
18721        specialization...  */
18722     if (decl
18723         && explicit_specialization_p
18724         && decl_specifiers.storage_class != sc_none)
18725       {
18726         error_at (decl_spec_token_start->location,
18727                   "explicit template specialization cannot have a storage class");
18728         decl = error_mark_node;
18729       }
18730     }
18731
18732   pop_deferring_access_checks ();
18733
18734   /* Clear any current qualification; whatever comes next is the start
18735      of something new.  */
18736   parser->scope = NULL_TREE;
18737   parser->qualifying_scope = NULL_TREE;
18738   parser->object_scope = NULL_TREE;
18739   /* Look for a trailing `;' after the declaration.  */
18740   if (!function_definition_p
18741       && (decl == error_mark_node
18742           || !cp_parser_require (parser, CPP_SEMICOLON, "%<;%>")))
18743     cp_parser_skip_to_end_of_block_or_statement (parser);
18744
18745   return decl;
18746 }
18747
18748 /* Parse a cast-expression that is not the operand of a unary "&".  */
18749
18750 static tree
18751 cp_parser_simple_cast_expression (cp_parser *parser)
18752 {
18753   return cp_parser_cast_expression (parser, /*address_p=*/false,
18754                                     /*cast_p=*/false, NULL);
18755 }
18756
18757 /* Parse a functional cast to TYPE.  Returns an expression
18758    representing the cast.  */
18759
18760 static tree
18761 cp_parser_functional_cast (cp_parser* parser, tree type)
18762 {
18763   VEC(tree,gc) *vec;
18764   tree expression_list;
18765   tree cast;
18766   bool nonconst_p;
18767
18768   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
18769     {
18770       maybe_warn_cpp0x ("extended initializer lists");
18771       expression_list = cp_parser_braced_list (parser, &nonconst_p);
18772       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
18773       if (TREE_CODE (type) == TYPE_DECL)
18774         type = TREE_TYPE (type);
18775       return finish_compound_literal (type, expression_list);
18776     }
18777
18778
18779   vec = cp_parser_parenthesized_expression_list (parser, false,
18780                                                  /*cast_p=*/true,
18781                                                  /*allow_expansion_p=*/true,
18782                                                  /*non_constant_p=*/NULL);
18783   if (vec == NULL)
18784     expression_list = error_mark_node;
18785   else
18786     {
18787       expression_list = build_tree_list_vec (vec);
18788       release_tree_vector (vec);
18789     }
18790
18791   cast = build_functional_cast (type, expression_list,
18792                                 tf_warning_or_error);
18793   /* [expr.const]/1: In an integral constant expression "only type
18794      conversions to integral or enumeration type can be used".  */
18795   if (TREE_CODE (type) == TYPE_DECL)
18796     type = TREE_TYPE (type);
18797   if (cast != error_mark_node
18798       && !cast_valid_in_integral_constant_expression_p (type)
18799       && (cp_parser_non_integral_constant_expression
18800           (parser, "a call to a constructor")))
18801     return error_mark_node;
18802   return cast;
18803 }
18804
18805 /* Save the tokens that make up the body of a member function defined
18806    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
18807    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
18808    specifiers applied to the declaration.  Returns the FUNCTION_DECL
18809    for the member function.  */
18810
18811 static tree
18812 cp_parser_save_member_function_body (cp_parser* parser,
18813                                      cp_decl_specifier_seq *decl_specifiers,
18814                                      cp_declarator *declarator,
18815                                      tree attributes)
18816 {
18817   cp_token *first;
18818   cp_token *last;
18819   tree fn;
18820
18821   /* Create the FUNCTION_DECL.  */
18822   fn = grokmethod (decl_specifiers, declarator, attributes);
18823   /* If something went badly wrong, bail out now.  */
18824   if (fn == error_mark_node)
18825     {
18826       /* If there's a function-body, skip it.  */
18827       if (cp_parser_token_starts_function_definition_p
18828           (cp_lexer_peek_token (parser->lexer)))
18829         cp_parser_skip_to_end_of_block_or_statement (parser);
18830       return error_mark_node;
18831     }
18832
18833   /* Remember it, if there default args to post process.  */
18834   cp_parser_save_default_args (parser, fn);
18835
18836   /* Save away the tokens that make up the body of the
18837      function.  */
18838   first = parser->lexer->next_token;
18839   /* We can have braced-init-list mem-initializers before the fn body.  */
18840   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
18841     {
18842       cp_lexer_consume_token (parser->lexer);
18843       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
18844              && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY))
18845         {
18846           /* cache_group will stop after an un-nested { } pair, too.  */
18847           if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
18848             break;
18849
18850           /* variadic mem-inits have ... after the ')'.  */
18851           if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18852             cp_lexer_consume_token (parser->lexer);
18853         }
18854     }
18855   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
18856   /* Handle function try blocks.  */
18857   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
18858     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
18859   last = parser->lexer->next_token;
18860
18861   /* Save away the inline definition; we will process it when the
18862      class is complete.  */
18863   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
18864   DECL_PENDING_INLINE_P (fn) = 1;
18865
18866   /* We need to know that this was defined in the class, so that
18867      friend templates are handled correctly.  */
18868   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
18869
18870   /* Add FN to the queue of functions to be parsed later.  */
18871   TREE_VALUE (parser->unparsed_functions_queues)
18872     = tree_cons (NULL_TREE, fn,
18873                  TREE_VALUE (parser->unparsed_functions_queues));
18874
18875   return fn;
18876 }
18877
18878 /* Parse a template-argument-list, as well as the trailing ">" (but
18879    not the opening ">").  See cp_parser_template_argument_list for the
18880    return value.  */
18881
18882 static tree
18883 cp_parser_enclosed_template_argument_list (cp_parser* parser)
18884 {
18885   tree arguments;
18886   tree saved_scope;
18887   tree saved_qualifying_scope;
18888   tree saved_object_scope;
18889   bool saved_greater_than_is_operator_p;
18890   int saved_unevaluated_operand;
18891   int saved_inhibit_evaluation_warnings;
18892
18893   /* [temp.names]
18894
18895      When parsing a template-id, the first non-nested `>' is taken as
18896      the end of the template-argument-list rather than a greater-than
18897      operator.  */
18898   saved_greater_than_is_operator_p
18899     = parser->greater_than_is_operator_p;
18900   parser->greater_than_is_operator_p = false;
18901   /* Parsing the argument list may modify SCOPE, so we save it
18902      here.  */
18903   saved_scope = parser->scope;
18904   saved_qualifying_scope = parser->qualifying_scope;
18905   saved_object_scope = parser->object_scope;
18906   /* We need to evaluate the template arguments, even though this
18907      template-id may be nested within a "sizeof".  */
18908   saved_unevaluated_operand = cp_unevaluated_operand;
18909   cp_unevaluated_operand = 0;
18910   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
18911   c_inhibit_evaluation_warnings = 0;
18912   /* Parse the template-argument-list itself.  */
18913   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
18914       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
18915     arguments = NULL_TREE;
18916   else
18917     arguments = cp_parser_template_argument_list (parser);
18918   /* Look for the `>' that ends the template-argument-list. If we find
18919      a '>>' instead, it's probably just a typo.  */
18920   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
18921     {
18922       if (cxx_dialect != cxx98)
18923         {
18924           /* In C++0x, a `>>' in a template argument list or cast
18925              expression is considered to be two separate `>'
18926              tokens. So, change the current token to a `>', but don't
18927              consume it: it will be consumed later when the outer
18928              template argument list (or cast expression) is parsed.
18929              Note that this replacement of `>' for `>>' is necessary
18930              even if we are parsing tentatively: in the tentative
18931              case, after calling
18932              cp_parser_enclosed_template_argument_list we will always
18933              throw away all of the template arguments and the first
18934              closing `>', either because the template argument list
18935              was erroneous or because we are replacing those tokens
18936              with a CPP_TEMPLATE_ID token.  The second `>' (which will
18937              not have been thrown away) is needed either to close an
18938              outer template argument list or to complete a new-style
18939              cast.  */
18940           cp_token *token = cp_lexer_peek_token (parser->lexer);
18941           token->type = CPP_GREATER;
18942         }
18943       else if (!saved_greater_than_is_operator_p)
18944         {
18945           /* If we're in a nested template argument list, the '>>' has
18946             to be a typo for '> >'. We emit the error message, but we
18947             continue parsing and we push a '>' as next token, so that
18948             the argument list will be parsed correctly.  Note that the
18949             global source location is still on the token before the
18950             '>>', so we need to say explicitly where we want it.  */
18951           cp_token *token = cp_lexer_peek_token (parser->lexer);
18952           error_at (token->location, "%<>>%> should be %<> >%> "
18953                     "within a nested template argument list");
18954
18955           token->type = CPP_GREATER;
18956         }
18957       else
18958         {
18959           /* If this is not a nested template argument list, the '>>'
18960             is a typo for '>'. Emit an error message and continue.
18961             Same deal about the token location, but here we can get it
18962             right by consuming the '>>' before issuing the diagnostic.  */
18963           cp_token *token = cp_lexer_consume_token (parser->lexer);
18964           error_at (token->location,
18965                     "spurious %<>>%>, use %<>%> to terminate "
18966                     "a template argument list");
18967         }
18968     }
18969   else
18970     cp_parser_skip_to_end_of_template_parameter_list (parser);
18971   /* The `>' token might be a greater-than operator again now.  */
18972   parser->greater_than_is_operator_p
18973     = saved_greater_than_is_operator_p;
18974   /* Restore the SAVED_SCOPE.  */
18975   parser->scope = saved_scope;
18976   parser->qualifying_scope = saved_qualifying_scope;
18977   parser->object_scope = saved_object_scope;
18978   cp_unevaluated_operand = saved_unevaluated_operand;
18979   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
18980
18981   return arguments;
18982 }
18983
18984 /* MEMBER_FUNCTION is a member function, or a friend.  If default
18985    arguments, or the body of the function have not yet been parsed,
18986    parse them now.  */
18987
18988 static void
18989 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
18990 {
18991   /* If this member is a template, get the underlying
18992      FUNCTION_DECL.  */
18993   if (DECL_FUNCTION_TEMPLATE_P (member_function))
18994     member_function = DECL_TEMPLATE_RESULT (member_function);
18995
18996   /* There should not be any class definitions in progress at this
18997      point; the bodies of members are only parsed outside of all class
18998      definitions.  */
18999   gcc_assert (parser->num_classes_being_defined == 0);
19000   /* While we're parsing the member functions we might encounter more
19001      classes.  We want to handle them right away, but we don't want
19002      them getting mixed up with functions that are currently in the
19003      queue.  */
19004   parser->unparsed_functions_queues
19005     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
19006
19007   /* Make sure that any template parameters are in scope.  */
19008   maybe_begin_member_template_processing (member_function);
19009
19010   /* If the body of the function has not yet been parsed, parse it
19011      now.  */
19012   if (DECL_PENDING_INLINE_P (member_function))
19013     {
19014       tree function_scope;
19015       cp_token_cache *tokens;
19016
19017       /* The function is no longer pending; we are processing it.  */
19018       tokens = DECL_PENDING_INLINE_INFO (member_function);
19019       DECL_PENDING_INLINE_INFO (member_function) = NULL;
19020       DECL_PENDING_INLINE_P (member_function) = 0;
19021
19022       /* If this is a local class, enter the scope of the containing
19023          function.  */
19024       function_scope = current_function_decl;
19025       if (function_scope)
19026         push_function_context ();
19027
19028       /* Push the body of the function onto the lexer stack.  */
19029       cp_parser_push_lexer_for_tokens (parser, tokens);
19030
19031       /* Let the front end know that we going to be defining this
19032          function.  */
19033       start_preparsed_function (member_function, NULL_TREE,
19034                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
19035
19036       /* Don't do access checking if it is a templated function.  */
19037       if (processing_template_decl)
19038         push_deferring_access_checks (dk_no_check);
19039
19040       /* Now, parse the body of the function.  */
19041       cp_parser_function_definition_after_declarator (parser,
19042                                                       /*inline_p=*/true);
19043
19044       if (processing_template_decl)
19045         pop_deferring_access_checks ();
19046
19047       /* Leave the scope of the containing function.  */
19048       if (function_scope)
19049         pop_function_context ();
19050       cp_parser_pop_lexer (parser);
19051     }
19052
19053   /* Remove any template parameters from the symbol table.  */
19054   maybe_end_member_template_processing ();
19055
19056   /* Restore the queue.  */
19057   parser->unparsed_functions_queues
19058     = TREE_CHAIN (parser->unparsed_functions_queues);
19059 }
19060
19061 /* If DECL contains any default args, remember it on the unparsed
19062    functions queue.  */
19063
19064 static void
19065 cp_parser_save_default_args (cp_parser* parser, tree decl)
19066 {
19067   tree probe;
19068
19069   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
19070        probe;
19071        probe = TREE_CHAIN (probe))
19072     if (TREE_PURPOSE (probe))
19073       {
19074         TREE_PURPOSE (parser->unparsed_functions_queues)
19075           = tree_cons (current_class_type, decl,
19076                        TREE_PURPOSE (parser->unparsed_functions_queues));
19077         break;
19078       }
19079 }
19080
19081 /* FN is a FUNCTION_DECL which may contains a parameter with an
19082    unparsed DEFAULT_ARG.  Parse the default args now.  This function
19083    assumes that the current scope is the scope in which the default
19084    argument should be processed.  */
19085
19086 static void
19087 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
19088 {
19089   bool saved_local_variables_forbidden_p;
19090   tree parm, parmdecl;
19091
19092   /* While we're parsing the default args, we might (due to the
19093      statement expression extension) encounter more classes.  We want
19094      to handle them right away, but we don't want them getting mixed
19095      up with default args that are currently in the queue.  */
19096   parser->unparsed_functions_queues
19097     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
19098
19099   /* Local variable names (and the `this' keyword) may not appear
19100      in a default argument.  */
19101   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
19102   parser->local_variables_forbidden_p = true;
19103
19104   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn)),
19105          parmdecl = DECL_ARGUMENTS (fn);
19106        parm && parm != void_list_node;
19107        parm = TREE_CHAIN (parm),
19108          parmdecl = TREE_CHAIN (parmdecl))
19109     {
19110       cp_token_cache *tokens;
19111       tree default_arg = TREE_PURPOSE (parm);
19112       tree parsed_arg;
19113       VEC(tree,gc) *insts;
19114       tree copy;
19115       unsigned ix;
19116
19117       if (!default_arg)
19118         continue;
19119
19120       if (TREE_CODE (default_arg) != DEFAULT_ARG)
19121         /* This can happen for a friend declaration for a function
19122            already declared with default arguments.  */
19123         continue;
19124
19125        /* Push the saved tokens for the default argument onto the parser's
19126           lexer stack.  */
19127       tokens = DEFARG_TOKENS (default_arg);
19128       cp_parser_push_lexer_for_tokens (parser, tokens);
19129
19130       start_lambda_scope (parmdecl);
19131
19132       /* Parse the assignment-expression.  */
19133       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
19134       if (parsed_arg == error_mark_node)
19135         {
19136           cp_parser_pop_lexer (parser);
19137           continue;
19138         }
19139
19140       if (!processing_template_decl)
19141         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
19142
19143       TREE_PURPOSE (parm) = parsed_arg;
19144
19145       /* Update any instantiations we've already created.  */
19146       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
19147            VEC_iterate (tree, insts, ix, copy); ix++)
19148         TREE_PURPOSE (copy) = parsed_arg;
19149
19150       finish_lambda_scope ();
19151
19152       /* If the token stream has not been completely used up, then
19153          there was extra junk after the end of the default
19154          argument.  */
19155       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
19156         cp_parser_error (parser, "expected %<,%>");
19157
19158       /* Revert to the main lexer.  */
19159       cp_parser_pop_lexer (parser);
19160     }
19161
19162   /* Make sure no default arg is missing.  */
19163   check_default_args (fn);
19164
19165   /* Restore the state of local_variables_forbidden_p.  */
19166   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
19167
19168   /* Restore the queue.  */
19169   parser->unparsed_functions_queues
19170     = TREE_CHAIN (parser->unparsed_functions_queues);
19171 }
19172
19173 /* Parse the operand of `sizeof' (or a similar operator).  Returns
19174    either a TYPE or an expression, depending on the form of the
19175    input.  The KEYWORD indicates which kind of expression we have
19176    encountered.  */
19177
19178 static tree
19179 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
19180 {
19181   tree expr = NULL_TREE;
19182   const char *saved_message;
19183   char *tmp;
19184   bool saved_integral_constant_expression_p;
19185   bool saved_non_integral_constant_expression_p;
19186   bool pack_expansion_p = false;
19187
19188   /* Types cannot be defined in a `sizeof' expression.  Save away the
19189      old message.  */
19190   saved_message = parser->type_definition_forbidden_message;
19191   /* And create the new one.  */
19192   tmp = concat ("types may not be defined in %<",
19193                 IDENTIFIER_POINTER (ridpointers[keyword]),
19194                 "%> expressions", NULL);
19195   parser->type_definition_forbidden_message = tmp;
19196
19197   /* The restrictions on constant-expressions do not apply inside
19198      sizeof expressions.  */
19199   saved_integral_constant_expression_p
19200     = parser->integral_constant_expression_p;
19201   saved_non_integral_constant_expression_p
19202     = parser->non_integral_constant_expression_p;
19203   parser->integral_constant_expression_p = false;
19204
19205   /* If it's a `...', then we are computing the length of a parameter
19206      pack.  */
19207   if (keyword == RID_SIZEOF
19208       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19209     {
19210       /* Consume the `...'.  */
19211       cp_lexer_consume_token (parser->lexer);
19212       maybe_warn_variadic_templates ();
19213
19214       /* Note that this is an expansion.  */
19215       pack_expansion_p = true;
19216     }
19217
19218   /* Do not actually evaluate the expression.  */
19219   ++cp_unevaluated_operand;
19220   ++c_inhibit_evaluation_warnings;
19221   /* If it's a `(', then we might be looking at the type-id
19222      construction.  */
19223   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
19224     {
19225       tree type;
19226       bool saved_in_type_id_in_expr_p;
19227
19228       /* We can't be sure yet whether we're looking at a type-id or an
19229          expression.  */
19230       cp_parser_parse_tentatively (parser);
19231       /* Consume the `('.  */
19232       cp_lexer_consume_token (parser->lexer);
19233       /* Parse the type-id.  */
19234       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
19235       parser->in_type_id_in_expr_p = true;
19236       type = cp_parser_type_id (parser);
19237       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
19238       /* Now, look for the trailing `)'.  */
19239       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19240       /* If all went well, then we're done.  */
19241       if (cp_parser_parse_definitely (parser))
19242         {
19243           cp_decl_specifier_seq decl_specs;
19244
19245           /* Build a trivial decl-specifier-seq.  */
19246           clear_decl_specs (&decl_specs);
19247           decl_specs.type = type;
19248
19249           /* Call grokdeclarator to figure out what type this is.  */
19250           expr = grokdeclarator (NULL,
19251                                  &decl_specs,
19252                                  TYPENAME,
19253                                  /*initialized=*/0,
19254                                  /*attrlist=*/NULL);
19255         }
19256     }
19257
19258   /* If the type-id production did not work out, then we must be
19259      looking at the unary-expression production.  */
19260   if (!expr)
19261     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
19262                                        /*cast_p=*/false, NULL);
19263
19264   if (pack_expansion_p)
19265     /* Build a pack expansion. */
19266     expr = make_pack_expansion (expr);
19267
19268   /* Go back to evaluating expressions.  */
19269   --cp_unevaluated_operand;
19270   --c_inhibit_evaluation_warnings;
19271
19272   /* Free the message we created.  */
19273   free (tmp);
19274   /* And restore the old one.  */
19275   parser->type_definition_forbidden_message = saved_message;
19276   parser->integral_constant_expression_p
19277     = saved_integral_constant_expression_p;
19278   parser->non_integral_constant_expression_p
19279     = saved_non_integral_constant_expression_p;
19280
19281   return expr;
19282 }
19283
19284 /* If the current declaration has no declarator, return true.  */
19285
19286 static bool
19287 cp_parser_declares_only_class_p (cp_parser *parser)
19288 {
19289   /* If the next token is a `;' or a `,' then there is no
19290      declarator.  */
19291   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
19292           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
19293 }
19294
19295 /* Update the DECL_SPECS to reflect the storage class indicated by
19296    KEYWORD.  */
19297
19298 static void
19299 cp_parser_set_storage_class (cp_parser *parser,
19300                              cp_decl_specifier_seq *decl_specs,
19301                              enum rid keyword,
19302                              location_t location)
19303 {
19304   cp_storage_class storage_class;
19305
19306   if (parser->in_unbraced_linkage_specification_p)
19307     {
19308       error_at (location, "invalid use of %qD in linkage specification",
19309                 ridpointers[keyword]);
19310       return;
19311     }
19312   else if (decl_specs->storage_class != sc_none)
19313     {
19314       decl_specs->conflicting_specifiers_p = true;
19315       return;
19316     }
19317
19318   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
19319       && decl_specs->specs[(int) ds_thread])
19320     {
19321       error_at (location, "%<__thread%> before %qD", ridpointers[keyword]);
19322       decl_specs->specs[(int) ds_thread] = 0;
19323     }
19324
19325   switch (keyword)
19326     {
19327     case RID_AUTO:
19328       storage_class = sc_auto;
19329       break;
19330     case RID_REGISTER:
19331       storage_class = sc_register;
19332       break;
19333     case RID_STATIC:
19334       storage_class = sc_static;
19335       break;
19336     case RID_EXTERN:
19337       storage_class = sc_extern;
19338       break;
19339     case RID_MUTABLE:
19340       storage_class = sc_mutable;
19341       break;
19342     default:
19343       gcc_unreachable ();
19344     }
19345   decl_specs->storage_class = storage_class;
19346
19347   /* A storage class specifier cannot be applied alongside a typedef 
19348      specifier. If there is a typedef specifier present then set 
19349      conflicting_specifiers_p which will trigger an error later
19350      on in grokdeclarator. */
19351   if (decl_specs->specs[(int)ds_typedef])
19352     decl_specs->conflicting_specifiers_p = true;
19353 }
19354
19355 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
19356    is true, the type is a user-defined type; otherwise it is a
19357    built-in type specified by a keyword.  */
19358
19359 static void
19360 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
19361                               tree type_spec,
19362                               location_t location,
19363                               bool user_defined_p)
19364 {
19365   decl_specs->any_specifiers_p = true;
19366
19367   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
19368      (with, for example, in "typedef int wchar_t;") we remember that
19369      this is what happened.  In system headers, we ignore these
19370      declarations so that G++ can work with system headers that are not
19371      C++-safe.  */
19372   if (decl_specs->specs[(int) ds_typedef]
19373       && !user_defined_p
19374       && (type_spec == boolean_type_node
19375           || type_spec == char16_type_node
19376           || type_spec == char32_type_node
19377           || type_spec == wchar_type_node)
19378       && (decl_specs->type
19379           || decl_specs->specs[(int) ds_long]
19380           || decl_specs->specs[(int) ds_short]
19381           || decl_specs->specs[(int) ds_unsigned]
19382           || decl_specs->specs[(int) ds_signed]))
19383     {
19384       decl_specs->redefined_builtin_type = type_spec;
19385       if (!decl_specs->type)
19386         {
19387           decl_specs->type = type_spec;
19388           decl_specs->user_defined_type_p = false;
19389           decl_specs->type_location = location;
19390         }
19391     }
19392   else if (decl_specs->type)
19393     decl_specs->multiple_types_p = true;
19394   else
19395     {
19396       decl_specs->type = type_spec;
19397       decl_specs->user_defined_type_p = user_defined_p;
19398       decl_specs->redefined_builtin_type = NULL_TREE;
19399       decl_specs->type_location = location;
19400     }
19401 }
19402
19403 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
19404    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
19405
19406 static bool
19407 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
19408 {
19409   return decl_specifiers->specs[(int) ds_friend] != 0;
19410 }
19411
19412 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
19413    issue an error message indicating that TOKEN_DESC was expected.
19414
19415    Returns the token consumed, if the token had the appropriate type.
19416    Otherwise, returns NULL.  */
19417
19418 static cp_token *
19419 cp_parser_require (cp_parser* parser,
19420                    enum cpp_ttype type,
19421                    const char* token_desc)
19422 {
19423   if (cp_lexer_next_token_is (parser->lexer, type))
19424     return cp_lexer_consume_token (parser->lexer);
19425   else
19426     {
19427       /* Output the MESSAGE -- unless we're parsing tentatively.  */
19428       if (!cp_parser_simulate_error (parser))
19429         {
19430           char *message = concat ("expected ", token_desc, NULL);
19431           cp_parser_error (parser, message);
19432           free (message);
19433         }
19434       return NULL;
19435     }
19436 }
19437
19438 /* An error message is produced if the next token is not '>'.
19439    All further tokens are skipped until the desired token is
19440    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
19441
19442 static void
19443 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
19444 {
19445   /* Current level of '< ... >'.  */
19446   unsigned level = 0;
19447   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
19448   unsigned nesting_depth = 0;
19449
19450   /* Are we ready, yet?  If not, issue error message.  */
19451   if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
19452     return;
19453
19454   /* Skip tokens until the desired token is found.  */
19455   while (true)
19456     {
19457       /* Peek at the next token.  */
19458       switch (cp_lexer_peek_token (parser->lexer)->type)
19459         {
19460         case CPP_LESS:
19461           if (!nesting_depth)
19462             ++level;
19463           break;
19464
19465         case CPP_RSHIFT:
19466           if (cxx_dialect == cxx98)
19467             /* C++0x views the `>>' operator as two `>' tokens, but
19468                C++98 does not. */
19469             break;
19470           else if (!nesting_depth && level-- == 0)
19471             {
19472               /* We've hit a `>>' where the first `>' closes the
19473                  template argument list, and the second `>' is
19474                  spurious.  Just consume the `>>' and stop; we've
19475                  already produced at least one error.  */
19476               cp_lexer_consume_token (parser->lexer);
19477               return;
19478             }
19479           /* Fall through for C++0x, so we handle the second `>' in
19480              the `>>'.  */
19481
19482         case CPP_GREATER:
19483           if (!nesting_depth && level-- == 0)
19484             {
19485               /* We've reached the token we want, consume it and stop.  */
19486               cp_lexer_consume_token (parser->lexer);
19487               return;
19488             }
19489           break;
19490
19491         case CPP_OPEN_PAREN:
19492         case CPP_OPEN_SQUARE:
19493           ++nesting_depth;
19494           break;
19495
19496         case CPP_CLOSE_PAREN:
19497         case CPP_CLOSE_SQUARE:
19498           if (nesting_depth-- == 0)
19499             return;
19500           break;
19501
19502         case CPP_EOF:
19503         case CPP_PRAGMA_EOL:
19504         case CPP_SEMICOLON:
19505         case CPP_OPEN_BRACE:
19506         case CPP_CLOSE_BRACE:
19507           /* The '>' was probably forgotten, don't look further.  */
19508           return;
19509
19510         default:
19511           break;
19512         }
19513
19514       /* Consume this token.  */
19515       cp_lexer_consume_token (parser->lexer);
19516     }
19517 }
19518
19519 /* If the next token is the indicated keyword, consume it.  Otherwise,
19520    issue an error message indicating that TOKEN_DESC was expected.
19521
19522    Returns the token consumed, if the token had the appropriate type.
19523    Otherwise, returns NULL.  */
19524
19525 static cp_token *
19526 cp_parser_require_keyword (cp_parser* parser,
19527                            enum rid keyword,
19528                            const char* token_desc)
19529 {
19530   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
19531
19532   if (token && token->keyword != keyword)
19533     {
19534       dyn_string_t error_msg;
19535
19536       /* Format the error message.  */
19537       error_msg = dyn_string_new (0);
19538       dyn_string_append_cstr (error_msg, "expected ");
19539       dyn_string_append_cstr (error_msg, token_desc);
19540       cp_parser_error (parser, error_msg->s);
19541       dyn_string_delete (error_msg);
19542       return NULL;
19543     }
19544
19545   return token;
19546 }
19547
19548 /* Returns TRUE iff TOKEN is a token that can begin the body of a
19549    function-definition.  */
19550
19551 static bool
19552 cp_parser_token_starts_function_definition_p (cp_token* token)
19553 {
19554   return (/* An ordinary function-body begins with an `{'.  */
19555           token->type == CPP_OPEN_BRACE
19556           /* A ctor-initializer begins with a `:'.  */
19557           || token->type == CPP_COLON
19558           /* A function-try-block begins with `try'.  */
19559           || token->keyword == RID_TRY
19560           /* The named return value extension begins with `return'.  */
19561           || token->keyword == RID_RETURN);
19562 }
19563
19564 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
19565    definition.  */
19566
19567 static bool
19568 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
19569 {
19570   cp_token *token;
19571
19572   token = cp_lexer_peek_token (parser->lexer);
19573   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
19574 }
19575
19576 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
19577    C++0x) ending a template-argument.  */
19578
19579 static bool
19580 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
19581 {
19582   cp_token *token;
19583
19584   token = cp_lexer_peek_token (parser->lexer);
19585   return (token->type == CPP_COMMA 
19586           || token->type == CPP_GREATER
19587           || token->type == CPP_ELLIPSIS
19588           || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
19589 }
19590
19591 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
19592    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
19593
19594 static bool
19595 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
19596                                                      size_t n)
19597 {
19598   cp_token *token;
19599
19600   token = cp_lexer_peek_nth_token (parser->lexer, n);
19601   if (token->type == CPP_LESS)
19602     return true;
19603   /* Check for the sequence `<::' in the original code. It would be lexed as
19604      `[:', where `[' is a digraph, and there is no whitespace before
19605      `:'.  */
19606   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
19607     {
19608       cp_token *token2;
19609       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
19610       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
19611         return true;
19612     }
19613   return false;
19614 }
19615
19616 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
19617    or none_type otherwise.  */
19618
19619 static enum tag_types
19620 cp_parser_token_is_class_key (cp_token* token)
19621 {
19622   switch (token->keyword)
19623     {
19624     case RID_CLASS:
19625       return class_type;
19626     case RID_STRUCT:
19627       return record_type;
19628     case RID_UNION:
19629       return union_type;
19630
19631     default:
19632       return none_type;
19633     }
19634 }
19635
19636 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
19637
19638 static void
19639 cp_parser_check_class_key (enum tag_types class_key, tree type)
19640 {
19641   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
19642     permerror (input_location, "%qs tag used in naming %q#T",
19643             class_key == union_type ? "union"
19644              : class_key == record_type ? "struct" : "class",
19645              type);
19646 }
19647
19648 /* Issue an error message if DECL is redeclared with different
19649    access than its original declaration [class.access.spec/3].
19650    This applies to nested classes and nested class templates.
19651    [class.mem/1].  */
19652
19653 static void
19654 cp_parser_check_access_in_redeclaration (tree decl, location_t location)
19655 {
19656   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
19657     return;
19658
19659   if ((TREE_PRIVATE (decl)
19660        != (current_access_specifier == access_private_node))
19661       || (TREE_PROTECTED (decl)
19662           != (current_access_specifier == access_protected_node)))
19663     error_at (location, "%qD redeclared with different access", decl);
19664 }
19665
19666 /* Look for the `template' keyword, as a syntactic disambiguator.
19667    Return TRUE iff it is present, in which case it will be
19668    consumed.  */
19669
19670 static bool
19671 cp_parser_optional_template_keyword (cp_parser *parser)
19672 {
19673   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
19674     {
19675       /* The `template' keyword can only be used within templates;
19676          outside templates the parser can always figure out what is a
19677          template and what is not.  */
19678       if (!processing_template_decl)
19679         {
19680           cp_token *token = cp_lexer_peek_token (parser->lexer);
19681           error_at (token->location,
19682                     "%<template%> (as a disambiguator) is only allowed "
19683                     "within templates");
19684           /* If this part of the token stream is rescanned, the same
19685              error message would be generated.  So, we purge the token
19686              from the stream.  */
19687           cp_lexer_purge_token (parser->lexer);
19688           return false;
19689         }
19690       else
19691         {
19692           /* Consume the `template' keyword.  */
19693           cp_lexer_consume_token (parser->lexer);
19694           return true;
19695         }
19696     }
19697
19698   return false;
19699 }
19700
19701 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
19702    set PARSER->SCOPE, and perform other related actions.  */
19703
19704 static void
19705 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
19706 {
19707   int i;
19708   struct tree_check *check_value;
19709   deferred_access_check *chk;
19710   VEC (deferred_access_check,gc) *checks;
19711
19712   /* Get the stored value.  */
19713   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
19714   /* Perform any access checks that were deferred.  */
19715   checks = check_value->checks;
19716   if (checks)
19717     {
19718       for (i = 0 ;
19719            VEC_iterate (deferred_access_check, checks, i, chk) ;
19720            ++i)
19721         {
19722           perform_or_defer_access_check (chk->binfo,
19723                                          chk->decl,
19724                                          chk->diag_decl);
19725         }
19726     }
19727   /* Set the scope from the stored value.  */
19728   parser->scope = check_value->value;
19729   parser->qualifying_scope = check_value->qualifying_scope;
19730   parser->object_scope = NULL_TREE;
19731 }
19732
19733 /* Consume tokens up through a non-nested END token.  Returns TRUE if we
19734    encounter the end of a block before what we were looking for.  */
19735
19736 static bool
19737 cp_parser_cache_group (cp_parser *parser,
19738                        enum cpp_ttype end,
19739                        unsigned depth)
19740 {
19741   while (true)
19742     {
19743       cp_token *token = cp_lexer_peek_token (parser->lexer);
19744
19745       /* Abort a parenthesized expression if we encounter a semicolon.  */
19746       if ((end == CPP_CLOSE_PAREN || depth == 0)
19747           && token->type == CPP_SEMICOLON)
19748         return true;
19749       /* If we've reached the end of the file, stop.  */
19750       if (token->type == CPP_EOF
19751           || (end != CPP_PRAGMA_EOL
19752               && token->type == CPP_PRAGMA_EOL))
19753         return true;
19754       if (token->type == CPP_CLOSE_BRACE && depth == 0)
19755         /* We've hit the end of an enclosing block, so there's been some
19756            kind of syntax error.  */
19757         return true;
19758
19759       /* Consume the token.  */
19760       cp_lexer_consume_token (parser->lexer);
19761       /* See if it starts a new group.  */
19762       if (token->type == CPP_OPEN_BRACE)
19763         {
19764           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
19765           /* In theory this should probably check end == '}', but
19766              cp_parser_save_member_function_body needs it to exit
19767              after either '}' or ')' when called with ')'.  */
19768           if (depth == 0)
19769             return false;
19770         }
19771       else if (token->type == CPP_OPEN_PAREN)
19772         {
19773           cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
19774           if (depth == 0 && end == CPP_CLOSE_PAREN)
19775             return false;
19776         }
19777       else if (token->type == CPP_PRAGMA)
19778         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
19779       else if (token->type == end)
19780         return false;
19781     }
19782 }
19783
19784 /* Begin parsing tentatively.  We always save tokens while parsing
19785    tentatively so that if the tentative parsing fails we can restore the
19786    tokens.  */
19787
19788 static void
19789 cp_parser_parse_tentatively (cp_parser* parser)
19790 {
19791   /* Enter a new parsing context.  */
19792   parser->context = cp_parser_context_new (parser->context);
19793   /* Begin saving tokens.  */
19794   cp_lexer_save_tokens (parser->lexer);
19795   /* In order to avoid repetitive access control error messages,
19796      access checks are queued up until we are no longer parsing
19797      tentatively.  */
19798   push_deferring_access_checks (dk_deferred);
19799 }
19800
19801 /* Commit to the currently active tentative parse.  */
19802
19803 static void
19804 cp_parser_commit_to_tentative_parse (cp_parser* parser)
19805 {
19806   cp_parser_context *context;
19807   cp_lexer *lexer;
19808
19809   /* Mark all of the levels as committed.  */
19810   lexer = parser->lexer;
19811   for (context = parser->context; context->next; context = context->next)
19812     {
19813       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
19814         break;
19815       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
19816       while (!cp_lexer_saving_tokens (lexer))
19817         lexer = lexer->next;
19818       cp_lexer_commit_tokens (lexer);
19819     }
19820 }
19821
19822 /* Abort the currently active tentative parse.  All consumed tokens
19823    will be rolled back, and no diagnostics will be issued.  */
19824
19825 static void
19826 cp_parser_abort_tentative_parse (cp_parser* parser)
19827 {
19828   cp_parser_simulate_error (parser);
19829   /* Now, pretend that we want to see if the construct was
19830      successfully parsed.  */
19831   cp_parser_parse_definitely (parser);
19832 }
19833
19834 /* Stop parsing tentatively.  If a parse error has occurred, restore the
19835    token stream.  Otherwise, commit to the tokens we have consumed.
19836    Returns true if no error occurred; false otherwise.  */
19837
19838 static bool
19839 cp_parser_parse_definitely (cp_parser* parser)
19840 {
19841   bool error_occurred;
19842   cp_parser_context *context;
19843
19844   /* Remember whether or not an error occurred, since we are about to
19845      destroy that information.  */
19846   error_occurred = cp_parser_error_occurred (parser);
19847   /* Remove the topmost context from the stack.  */
19848   context = parser->context;
19849   parser->context = context->next;
19850   /* If no parse errors occurred, commit to the tentative parse.  */
19851   if (!error_occurred)
19852     {
19853       /* Commit to the tokens read tentatively, unless that was
19854          already done.  */
19855       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
19856         cp_lexer_commit_tokens (parser->lexer);
19857
19858       pop_to_parent_deferring_access_checks ();
19859     }
19860   /* Otherwise, if errors occurred, roll back our state so that things
19861      are just as they were before we began the tentative parse.  */
19862   else
19863     {
19864       cp_lexer_rollback_tokens (parser->lexer);
19865       pop_deferring_access_checks ();
19866     }
19867   /* Add the context to the front of the free list.  */
19868   context->next = cp_parser_context_free_list;
19869   cp_parser_context_free_list = context;
19870
19871   return !error_occurred;
19872 }
19873
19874 /* Returns true if we are parsing tentatively and are not committed to
19875    this tentative parse.  */
19876
19877 static bool
19878 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
19879 {
19880   return (cp_parser_parsing_tentatively (parser)
19881           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
19882 }
19883
19884 /* Returns nonzero iff an error has occurred during the most recent
19885    tentative parse.  */
19886
19887 static bool
19888 cp_parser_error_occurred (cp_parser* parser)
19889 {
19890   return (cp_parser_parsing_tentatively (parser)
19891           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
19892 }
19893
19894 /* Returns nonzero if GNU extensions are allowed.  */
19895
19896 static bool
19897 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
19898 {
19899   return parser->allow_gnu_extensions_p;
19900 }
19901 \f
19902 /* Objective-C++ Productions */
19903
19904
19905 /* Parse an Objective-C expression, which feeds into a primary-expression
19906    above.
19907
19908    objc-expression:
19909      objc-message-expression
19910      objc-string-literal
19911      objc-encode-expression
19912      objc-protocol-expression
19913      objc-selector-expression
19914
19915   Returns a tree representation of the expression.  */
19916
19917 static tree
19918 cp_parser_objc_expression (cp_parser* parser)
19919 {
19920   /* Try to figure out what kind of declaration is present.  */
19921   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
19922
19923   switch (kwd->type)
19924     {
19925     case CPP_OPEN_SQUARE:
19926       return cp_parser_objc_message_expression (parser);
19927
19928     case CPP_OBJC_STRING:
19929       kwd = cp_lexer_consume_token (parser->lexer);
19930       return objc_build_string_object (kwd->u.value);
19931
19932     case CPP_KEYWORD:
19933       switch (kwd->keyword)
19934         {
19935         case RID_AT_ENCODE:
19936           return cp_parser_objc_encode_expression (parser);
19937
19938         case RID_AT_PROTOCOL:
19939           return cp_parser_objc_protocol_expression (parser);
19940
19941         case RID_AT_SELECTOR:
19942           return cp_parser_objc_selector_expression (parser);
19943
19944         default:
19945           break;
19946         }
19947     default:
19948       error_at (kwd->location,
19949                 "misplaced %<@%D%> Objective-C++ construct",
19950                 kwd->u.value);
19951       cp_parser_skip_to_end_of_block_or_statement (parser);
19952     }
19953
19954   return error_mark_node;
19955 }
19956
19957 /* Parse an Objective-C message expression.
19958
19959    objc-message-expression:
19960      [ objc-message-receiver objc-message-args ]
19961
19962    Returns a representation of an Objective-C message.  */
19963
19964 static tree
19965 cp_parser_objc_message_expression (cp_parser* parser)
19966 {
19967   tree receiver, messageargs;
19968
19969   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
19970   receiver = cp_parser_objc_message_receiver (parser);
19971   messageargs = cp_parser_objc_message_args (parser);
19972   cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
19973
19974   return objc_build_message_expr (build_tree_list (receiver, messageargs));
19975 }
19976
19977 /* Parse an objc-message-receiver.
19978
19979    objc-message-receiver:
19980      expression
19981      simple-type-specifier
19982
19983   Returns a representation of the type or expression.  */
19984
19985 static tree
19986 cp_parser_objc_message_receiver (cp_parser* parser)
19987 {
19988   tree rcv;
19989
19990   /* An Objective-C message receiver may be either (1) a type
19991      or (2) an expression.  */
19992   cp_parser_parse_tentatively (parser);
19993   rcv = cp_parser_expression (parser, false, NULL);
19994
19995   if (cp_parser_parse_definitely (parser))
19996     return rcv;
19997
19998   rcv = cp_parser_simple_type_specifier (parser,
19999                                          /*decl_specs=*/NULL,
20000                                          CP_PARSER_FLAGS_NONE);
20001
20002   return objc_get_class_reference (rcv);
20003 }
20004
20005 /* Parse the arguments and selectors comprising an Objective-C message.
20006
20007    objc-message-args:
20008      objc-selector
20009      objc-selector-args
20010      objc-selector-args , objc-comma-args
20011
20012    objc-selector-args:
20013      objc-selector [opt] : assignment-expression
20014      objc-selector-args objc-selector [opt] : assignment-expression
20015
20016    objc-comma-args:
20017      assignment-expression
20018      objc-comma-args , assignment-expression
20019
20020    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
20021    selector arguments and TREE_VALUE containing a list of comma
20022    arguments.  */
20023
20024 static tree
20025 cp_parser_objc_message_args (cp_parser* parser)
20026 {
20027   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
20028   bool maybe_unary_selector_p = true;
20029   cp_token *token = cp_lexer_peek_token (parser->lexer);
20030
20031   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
20032     {
20033       tree selector = NULL_TREE, arg;
20034
20035       if (token->type != CPP_COLON)
20036         selector = cp_parser_objc_selector (parser);
20037
20038       /* Detect if we have a unary selector.  */
20039       if (maybe_unary_selector_p
20040           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
20041         return build_tree_list (selector, NULL_TREE);
20042
20043       maybe_unary_selector_p = false;
20044       cp_parser_require (parser, CPP_COLON, "%<:%>");
20045       arg = cp_parser_assignment_expression (parser, false, NULL);
20046
20047       sel_args
20048         = chainon (sel_args,
20049                    build_tree_list (selector, arg));
20050
20051       token = cp_lexer_peek_token (parser->lexer);
20052     }
20053
20054   /* Handle non-selector arguments, if any. */
20055   while (token->type == CPP_COMMA)
20056     {
20057       tree arg;
20058
20059       cp_lexer_consume_token (parser->lexer);
20060       arg = cp_parser_assignment_expression (parser, false, NULL);
20061
20062       addl_args
20063         = chainon (addl_args,
20064                    build_tree_list (NULL_TREE, arg));
20065
20066       token = cp_lexer_peek_token (parser->lexer);
20067     }
20068
20069   return build_tree_list (sel_args, addl_args);
20070 }
20071
20072 /* Parse an Objective-C encode expression.
20073
20074    objc-encode-expression:
20075      @encode objc-typename
20076
20077    Returns an encoded representation of the type argument.  */
20078
20079 static tree
20080 cp_parser_objc_encode_expression (cp_parser* parser)
20081 {
20082   tree type;
20083   cp_token *token;
20084
20085   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
20086   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
20087   token = cp_lexer_peek_token (parser->lexer);
20088   type = complete_type (cp_parser_type_id (parser));
20089   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20090
20091   if (!type)
20092     {
20093       error_at (token->location, 
20094                 "%<@encode%> must specify a type as an argument");
20095       return error_mark_node;
20096     }
20097
20098   return objc_build_encode_expr (type);
20099 }
20100
20101 /* Parse an Objective-C @defs expression.  */
20102
20103 static tree
20104 cp_parser_objc_defs_expression (cp_parser *parser)
20105 {
20106   tree name;
20107
20108   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
20109   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
20110   name = cp_parser_identifier (parser);
20111   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20112
20113   return objc_get_class_ivars (name);
20114 }
20115
20116 /* Parse an Objective-C protocol expression.
20117
20118   objc-protocol-expression:
20119     @protocol ( identifier )
20120
20121   Returns a representation of the protocol expression.  */
20122
20123 static tree
20124 cp_parser_objc_protocol_expression (cp_parser* parser)
20125 {
20126   tree proto;
20127
20128   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
20129   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
20130   proto = cp_parser_identifier (parser);
20131   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20132
20133   return objc_build_protocol_expr (proto);
20134 }
20135
20136 /* Parse an Objective-C selector expression.
20137
20138    objc-selector-expression:
20139      @selector ( objc-method-signature )
20140
20141    objc-method-signature:
20142      objc-selector
20143      objc-selector-seq
20144
20145    objc-selector-seq:
20146      objc-selector :
20147      objc-selector-seq objc-selector :
20148
20149   Returns a representation of the method selector.  */
20150
20151 static tree
20152 cp_parser_objc_selector_expression (cp_parser* parser)
20153 {
20154   tree sel_seq = NULL_TREE;
20155   bool maybe_unary_selector_p = true;
20156   cp_token *token;
20157   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
20158
20159   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
20160   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
20161   token = cp_lexer_peek_token (parser->lexer);
20162
20163   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
20164          || token->type == CPP_SCOPE)
20165     {
20166       tree selector = NULL_TREE;
20167
20168       if (token->type != CPP_COLON
20169           || token->type == CPP_SCOPE)
20170         selector = cp_parser_objc_selector (parser);
20171
20172       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
20173           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
20174         {
20175           /* Detect if we have a unary selector.  */
20176           if (maybe_unary_selector_p)
20177             {
20178               sel_seq = selector;
20179               goto finish_selector;
20180             }
20181           else
20182             {
20183               cp_parser_error (parser, "expected %<:%>");
20184             }
20185         }
20186       maybe_unary_selector_p = false;
20187       token = cp_lexer_consume_token (parser->lexer);
20188
20189       if (token->type == CPP_SCOPE)
20190         {
20191           sel_seq
20192             = chainon (sel_seq,
20193                        build_tree_list (selector, NULL_TREE));
20194           sel_seq
20195             = chainon (sel_seq,
20196                        build_tree_list (NULL_TREE, NULL_TREE));
20197         }
20198       else
20199         sel_seq
20200           = chainon (sel_seq,
20201                      build_tree_list (selector, NULL_TREE));
20202
20203       token = cp_lexer_peek_token (parser->lexer);
20204     }
20205
20206  finish_selector:
20207   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20208
20209   return objc_build_selector_expr (loc, sel_seq);
20210 }
20211
20212 /* Parse a list of identifiers.
20213
20214    objc-identifier-list:
20215      identifier
20216      objc-identifier-list , identifier
20217
20218    Returns a TREE_LIST of identifier nodes.  */
20219
20220 static tree
20221 cp_parser_objc_identifier_list (cp_parser* parser)
20222 {
20223   tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
20224   cp_token *sep = cp_lexer_peek_token (parser->lexer);
20225
20226   while (sep->type == CPP_COMMA)
20227     {
20228       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
20229       list = chainon (list,
20230                       build_tree_list (NULL_TREE,
20231                                        cp_parser_identifier (parser)));
20232       sep = cp_lexer_peek_token (parser->lexer);
20233     }
20234
20235   return list;
20236 }
20237
20238 /* Parse an Objective-C alias declaration.
20239
20240    objc-alias-declaration:
20241      @compatibility_alias identifier identifier ;
20242
20243    This function registers the alias mapping with the Objective-C front end.
20244    It returns nothing.  */
20245
20246 static void
20247 cp_parser_objc_alias_declaration (cp_parser* parser)
20248 {
20249   tree alias, orig;
20250
20251   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
20252   alias = cp_parser_identifier (parser);
20253   orig = cp_parser_identifier (parser);
20254   objc_declare_alias (alias, orig);
20255   cp_parser_consume_semicolon_at_end_of_statement (parser);
20256 }
20257
20258 /* Parse an Objective-C class forward-declaration.
20259
20260    objc-class-declaration:
20261      @class objc-identifier-list ;
20262
20263    The function registers the forward declarations with the Objective-C
20264    front end.  It returns nothing.  */
20265
20266 static void
20267 cp_parser_objc_class_declaration (cp_parser* parser)
20268 {
20269   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
20270   objc_declare_class (cp_parser_objc_identifier_list (parser));
20271   cp_parser_consume_semicolon_at_end_of_statement (parser);
20272 }
20273
20274 /* Parse a list of Objective-C protocol references.
20275
20276    objc-protocol-refs-opt:
20277      objc-protocol-refs [opt]
20278
20279    objc-protocol-refs:
20280      < objc-identifier-list >
20281
20282    Returns a TREE_LIST of identifiers, if any.  */
20283
20284 static tree
20285 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
20286 {
20287   tree protorefs = NULL_TREE;
20288
20289   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
20290     {
20291       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
20292       protorefs = cp_parser_objc_identifier_list (parser);
20293       cp_parser_require (parser, CPP_GREATER, "%<>%>");
20294     }
20295
20296   return protorefs;
20297 }
20298
20299 /* Parse a Objective-C visibility specification.  */
20300
20301 static void
20302 cp_parser_objc_visibility_spec (cp_parser* parser)
20303 {
20304   cp_token *vis = cp_lexer_peek_token (parser->lexer);
20305
20306   switch (vis->keyword)
20307     {
20308     case RID_AT_PRIVATE:
20309       objc_set_visibility (2);
20310       break;
20311     case RID_AT_PROTECTED:
20312       objc_set_visibility (0);
20313       break;
20314     case RID_AT_PUBLIC:
20315       objc_set_visibility (1);
20316       break;
20317     default:
20318       return;
20319     }
20320
20321   /* Eat '@private'/'@protected'/'@public'.  */
20322   cp_lexer_consume_token (parser->lexer);
20323 }
20324
20325 /* Parse an Objective-C method type.  */
20326
20327 static void
20328 cp_parser_objc_method_type (cp_parser* parser)
20329 {
20330   objc_set_method_type
20331    (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
20332     ? PLUS_EXPR
20333     : MINUS_EXPR);
20334 }
20335
20336 /* Parse an Objective-C protocol qualifier.  */
20337
20338 static tree
20339 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
20340 {
20341   tree quals = NULL_TREE, node;
20342   cp_token *token = cp_lexer_peek_token (parser->lexer);
20343
20344   node = token->u.value;
20345
20346   while (node && TREE_CODE (node) == IDENTIFIER_NODE
20347          && (node == ridpointers [(int) RID_IN]
20348              || node == ridpointers [(int) RID_OUT]
20349              || node == ridpointers [(int) RID_INOUT]
20350              || node == ridpointers [(int) RID_BYCOPY]
20351              || node == ridpointers [(int) RID_BYREF]
20352              || node == ridpointers [(int) RID_ONEWAY]))
20353     {
20354       quals = tree_cons (NULL_TREE, node, quals);
20355       cp_lexer_consume_token (parser->lexer);
20356       token = cp_lexer_peek_token (parser->lexer);
20357       node = token->u.value;
20358     }
20359
20360   return quals;
20361 }
20362
20363 /* Parse an Objective-C typename.  */
20364
20365 static tree
20366 cp_parser_objc_typename (cp_parser* parser)
20367 {
20368   tree type_name = NULL_TREE;
20369
20370   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
20371     {
20372       tree proto_quals, cp_type = NULL_TREE;
20373
20374       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
20375       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
20376
20377       /* An ObjC type name may consist of just protocol qualifiers, in which
20378          case the type shall default to 'id'.  */
20379       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
20380         cp_type = cp_parser_type_id (parser);
20381
20382       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20383       type_name = build_tree_list (proto_quals, cp_type);
20384     }
20385
20386   return type_name;
20387 }
20388
20389 /* Check to see if TYPE refers to an Objective-C selector name.  */
20390
20391 static bool
20392 cp_parser_objc_selector_p (enum cpp_ttype type)
20393 {
20394   return (type == CPP_NAME || type == CPP_KEYWORD
20395           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
20396           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
20397           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
20398           || type == CPP_XOR || type == CPP_XOR_EQ);
20399 }
20400
20401 /* Parse an Objective-C selector.  */
20402
20403 static tree
20404 cp_parser_objc_selector (cp_parser* parser)
20405 {
20406   cp_token *token = cp_lexer_consume_token (parser->lexer);
20407
20408   if (!cp_parser_objc_selector_p (token->type))
20409     {
20410       error_at (token->location, "invalid Objective-C++ selector name");
20411       return error_mark_node;
20412     }
20413
20414   /* C++ operator names are allowed to appear in ObjC selectors.  */
20415   switch (token->type)
20416     {
20417     case CPP_AND_AND: return get_identifier ("and");
20418     case CPP_AND_EQ: return get_identifier ("and_eq");
20419     case CPP_AND: return get_identifier ("bitand");
20420     case CPP_OR: return get_identifier ("bitor");
20421     case CPP_COMPL: return get_identifier ("compl");
20422     case CPP_NOT: return get_identifier ("not");
20423     case CPP_NOT_EQ: return get_identifier ("not_eq");
20424     case CPP_OR_OR: return get_identifier ("or");
20425     case CPP_OR_EQ: return get_identifier ("or_eq");
20426     case CPP_XOR: return get_identifier ("xor");
20427     case CPP_XOR_EQ: return get_identifier ("xor_eq");
20428     default: return token->u.value;
20429     }
20430 }
20431
20432 /* Parse an Objective-C params list.  */
20433
20434 static tree
20435 cp_parser_objc_method_keyword_params (cp_parser* parser)
20436 {
20437   tree params = NULL_TREE;
20438   bool maybe_unary_selector_p = true;
20439   cp_token *token = cp_lexer_peek_token (parser->lexer);
20440
20441   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
20442     {
20443       tree selector = NULL_TREE, type_name, identifier;
20444
20445       if (token->type != CPP_COLON)
20446         selector = cp_parser_objc_selector (parser);
20447
20448       /* Detect if we have a unary selector.  */
20449       if (maybe_unary_selector_p
20450           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
20451         return selector;
20452
20453       maybe_unary_selector_p = false;
20454       cp_parser_require (parser, CPP_COLON, "%<:%>");
20455       type_name = cp_parser_objc_typename (parser);
20456       identifier = cp_parser_identifier (parser);
20457
20458       params
20459         = chainon (params,
20460                    objc_build_keyword_decl (selector,
20461                                             type_name,
20462                                             identifier));
20463
20464       token = cp_lexer_peek_token (parser->lexer);
20465     }
20466
20467   return params;
20468 }
20469
20470 /* Parse the non-keyword Objective-C params.  */
20471
20472 static tree
20473 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
20474 {
20475   tree params = make_node (TREE_LIST);
20476   cp_token *token = cp_lexer_peek_token (parser->lexer);
20477   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
20478
20479   while (token->type == CPP_COMMA)
20480     {
20481       cp_parameter_declarator *parmdecl;
20482       tree parm;
20483
20484       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
20485       token = cp_lexer_peek_token (parser->lexer);
20486
20487       if (token->type == CPP_ELLIPSIS)
20488         {
20489           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
20490           *ellipsisp = true;
20491           break;
20492         }
20493
20494       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
20495       parm = grokdeclarator (parmdecl->declarator,
20496                              &parmdecl->decl_specifiers,
20497                              PARM, /*initialized=*/0,
20498                              /*attrlist=*/NULL);
20499
20500       chainon (params, build_tree_list (NULL_TREE, parm));
20501       token = cp_lexer_peek_token (parser->lexer);
20502     }
20503
20504   return params;
20505 }
20506
20507 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
20508
20509 static void
20510 cp_parser_objc_interstitial_code (cp_parser* parser)
20511 {
20512   cp_token *token = cp_lexer_peek_token (parser->lexer);
20513
20514   /* If the next token is `extern' and the following token is a string
20515      literal, then we have a linkage specification.  */
20516   if (token->keyword == RID_EXTERN
20517       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
20518     cp_parser_linkage_specification (parser);
20519   /* Handle #pragma, if any.  */
20520   else if (token->type == CPP_PRAGMA)
20521     cp_parser_pragma (parser, pragma_external);
20522   /* Allow stray semicolons.  */
20523   else if (token->type == CPP_SEMICOLON)
20524     cp_lexer_consume_token (parser->lexer);
20525   /* Finally, try to parse a block-declaration, or a function-definition.  */
20526   else
20527     cp_parser_block_declaration (parser, /*statement_p=*/false);
20528 }
20529
20530 /* Parse a method signature.  */
20531
20532 static tree
20533 cp_parser_objc_method_signature (cp_parser* parser)
20534 {
20535   tree rettype, kwdparms, optparms;
20536   bool ellipsis = false;
20537
20538   cp_parser_objc_method_type (parser);
20539   rettype = cp_parser_objc_typename (parser);
20540   kwdparms = cp_parser_objc_method_keyword_params (parser);
20541   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
20542
20543   return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
20544 }
20545
20546 /* Pars an Objective-C method prototype list.  */
20547
20548 static void
20549 cp_parser_objc_method_prototype_list (cp_parser* parser)
20550 {
20551   cp_token *token = cp_lexer_peek_token (parser->lexer);
20552
20553   while (token->keyword != RID_AT_END)
20554     {
20555       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
20556         {
20557           objc_add_method_declaration
20558            (cp_parser_objc_method_signature (parser));
20559           cp_parser_consume_semicolon_at_end_of_statement (parser);
20560         }
20561       else
20562         /* Allow for interspersed non-ObjC++ code.  */
20563         cp_parser_objc_interstitial_code (parser);
20564
20565       token = cp_lexer_peek_token (parser->lexer);
20566     }
20567
20568   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
20569   objc_finish_interface ();
20570 }
20571
20572 /* Parse an Objective-C method definition list.  */
20573
20574 static void
20575 cp_parser_objc_method_definition_list (cp_parser* parser)
20576 {
20577   cp_token *token = cp_lexer_peek_token (parser->lexer);
20578
20579   while (token->keyword != RID_AT_END)
20580     {
20581       tree meth;
20582
20583       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
20584         {
20585           push_deferring_access_checks (dk_deferred);
20586           objc_start_method_definition
20587            (cp_parser_objc_method_signature (parser));
20588
20589           /* For historical reasons, we accept an optional semicolon.  */
20590           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
20591             cp_lexer_consume_token (parser->lexer);
20592
20593           perform_deferred_access_checks ();
20594           stop_deferring_access_checks ();
20595           meth = cp_parser_function_definition_after_declarator (parser,
20596                                                                  false);
20597           pop_deferring_access_checks ();
20598           objc_finish_method_definition (meth);
20599         }
20600       else
20601         /* Allow for interspersed non-ObjC++ code.  */
20602         cp_parser_objc_interstitial_code (parser);
20603
20604       token = cp_lexer_peek_token (parser->lexer);
20605     }
20606
20607   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
20608   objc_finish_implementation ();
20609 }
20610
20611 /* Parse Objective-C ivars.  */
20612
20613 static void
20614 cp_parser_objc_class_ivars (cp_parser* parser)
20615 {
20616   cp_token *token = cp_lexer_peek_token (parser->lexer);
20617
20618   if (token->type != CPP_OPEN_BRACE)
20619     return;     /* No ivars specified.  */
20620
20621   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
20622   token = cp_lexer_peek_token (parser->lexer);
20623
20624   while (token->type != CPP_CLOSE_BRACE)
20625     {
20626       cp_decl_specifier_seq declspecs;
20627       int decl_class_or_enum_p;
20628       tree prefix_attributes;
20629
20630       cp_parser_objc_visibility_spec (parser);
20631
20632       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
20633         break;
20634
20635       cp_parser_decl_specifier_seq (parser,
20636                                     CP_PARSER_FLAGS_OPTIONAL,
20637                                     &declspecs,
20638                                     &decl_class_or_enum_p);
20639       prefix_attributes = declspecs.attributes;
20640       declspecs.attributes = NULL_TREE;
20641
20642       /* Keep going until we hit the `;' at the end of the
20643          declaration.  */
20644       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
20645         {
20646           tree width = NULL_TREE, attributes, first_attribute, decl;
20647           cp_declarator *declarator = NULL;
20648           int ctor_dtor_or_conv_p;
20649
20650           /* Check for a (possibly unnamed) bitfield declaration.  */
20651           token = cp_lexer_peek_token (parser->lexer);
20652           if (token->type == CPP_COLON)
20653             goto eat_colon;
20654
20655           if (token->type == CPP_NAME
20656               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
20657                   == CPP_COLON))
20658             {
20659               /* Get the name of the bitfield.  */
20660               declarator = make_id_declarator (NULL_TREE,
20661                                                cp_parser_identifier (parser),
20662                                                sfk_none);
20663
20664              eat_colon:
20665               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
20666               /* Get the width of the bitfield.  */
20667               width
20668                 = cp_parser_constant_expression (parser,
20669                                                  /*allow_non_constant=*/false,
20670                                                  NULL);
20671             }
20672           else
20673             {
20674               /* Parse the declarator.  */
20675               declarator
20676                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
20677                                         &ctor_dtor_or_conv_p,
20678                                         /*parenthesized_p=*/NULL,
20679                                         /*member_p=*/false);
20680             }
20681
20682           /* Look for attributes that apply to the ivar.  */
20683           attributes = cp_parser_attributes_opt (parser);
20684           /* Remember which attributes are prefix attributes and
20685              which are not.  */
20686           first_attribute = attributes;
20687           /* Combine the attributes.  */
20688           attributes = chainon (prefix_attributes, attributes);
20689
20690           if (width)
20691               /* Create the bitfield declaration.  */
20692               decl = grokbitfield (declarator, &declspecs,
20693                                    width,
20694                                    attributes);
20695           else
20696             decl = grokfield (declarator, &declspecs,
20697                               NULL_TREE, /*init_const_expr_p=*/false,
20698                               NULL_TREE, attributes);
20699
20700           /* Add the instance variable.  */
20701           objc_add_instance_variable (decl);
20702
20703           /* Reset PREFIX_ATTRIBUTES.  */
20704           while (attributes && TREE_CHAIN (attributes) != first_attribute)
20705             attributes = TREE_CHAIN (attributes);
20706           if (attributes)
20707             TREE_CHAIN (attributes) = NULL_TREE;
20708
20709           token = cp_lexer_peek_token (parser->lexer);
20710
20711           if (token->type == CPP_COMMA)
20712             {
20713               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
20714               continue;
20715             }
20716           break;
20717         }
20718
20719       cp_parser_consume_semicolon_at_end_of_statement (parser);
20720       token = cp_lexer_peek_token (parser->lexer);
20721     }
20722
20723   cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
20724   /* For historical reasons, we accept an optional semicolon.  */
20725   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
20726     cp_lexer_consume_token (parser->lexer);
20727 }
20728
20729 /* Parse an Objective-C protocol declaration.  */
20730
20731 static void
20732 cp_parser_objc_protocol_declaration (cp_parser* parser)
20733 {
20734   tree proto, protorefs;
20735   cp_token *tok;
20736
20737   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
20738   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
20739     {
20740       tok = cp_lexer_peek_token (parser->lexer);
20741       error_at (tok->location, "identifier expected after %<@protocol%>");
20742       goto finish;
20743     }
20744
20745   /* See if we have a forward declaration or a definition.  */
20746   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
20747
20748   /* Try a forward declaration first.  */
20749   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
20750     {
20751       objc_declare_protocols (cp_parser_objc_identifier_list (parser));
20752      finish:
20753       cp_parser_consume_semicolon_at_end_of_statement (parser);
20754     }
20755
20756   /* Ok, we got a full-fledged definition (or at least should).  */
20757   else
20758     {
20759       proto = cp_parser_identifier (parser);
20760       protorefs = cp_parser_objc_protocol_refs_opt (parser);
20761       objc_start_protocol (proto, protorefs);
20762       cp_parser_objc_method_prototype_list (parser);
20763     }
20764 }
20765
20766 /* Parse an Objective-C superclass or category.  */
20767
20768 static void
20769 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
20770                                                           tree *categ)
20771 {
20772   cp_token *next = cp_lexer_peek_token (parser->lexer);
20773
20774   *super = *categ = NULL_TREE;
20775   if (next->type == CPP_COLON)
20776     {
20777       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
20778       *super = cp_parser_identifier (parser);
20779     }
20780   else if (next->type == CPP_OPEN_PAREN)
20781     {
20782       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
20783       *categ = cp_parser_identifier (parser);
20784       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20785     }
20786 }
20787
20788 /* Parse an Objective-C class interface.  */
20789
20790 static void
20791 cp_parser_objc_class_interface (cp_parser* parser)
20792 {
20793   tree name, super, categ, protos;
20794
20795   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
20796   name = cp_parser_identifier (parser);
20797   cp_parser_objc_superclass_or_category (parser, &super, &categ);
20798   protos = cp_parser_objc_protocol_refs_opt (parser);
20799
20800   /* We have either a class or a category on our hands.  */
20801   if (categ)
20802     objc_start_category_interface (name, categ, protos);
20803   else
20804     {
20805       objc_start_class_interface (name, super, protos);
20806       /* Handle instance variable declarations, if any.  */
20807       cp_parser_objc_class_ivars (parser);
20808       objc_continue_interface ();
20809     }
20810
20811   cp_parser_objc_method_prototype_list (parser);
20812 }
20813
20814 /* Parse an Objective-C class implementation.  */
20815
20816 static void
20817 cp_parser_objc_class_implementation (cp_parser* parser)
20818 {
20819   tree name, super, categ;
20820
20821   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
20822   name = cp_parser_identifier (parser);
20823   cp_parser_objc_superclass_or_category (parser, &super, &categ);
20824
20825   /* We have either a class or a category on our hands.  */
20826   if (categ)
20827     objc_start_category_implementation (name, categ);
20828   else
20829     {
20830       objc_start_class_implementation (name, super);
20831       /* Handle instance variable declarations, if any.  */
20832       cp_parser_objc_class_ivars (parser);
20833       objc_continue_implementation ();
20834     }
20835
20836   cp_parser_objc_method_definition_list (parser);
20837 }
20838
20839 /* Consume the @end token and finish off the implementation.  */
20840
20841 static void
20842 cp_parser_objc_end_implementation (cp_parser* parser)
20843 {
20844   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
20845   objc_finish_implementation ();
20846 }
20847
20848 /* Parse an Objective-C declaration.  */
20849
20850 static void
20851 cp_parser_objc_declaration (cp_parser* parser)
20852 {
20853   /* Try to figure out what kind of declaration is present.  */
20854   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
20855
20856   switch (kwd->keyword)
20857     {
20858     case RID_AT_ALIAS:
20859       cp_parser_objc_alias_declaration (parser);
20860       break;
20861     case RID_AT_CLASS:
20862       cp_parser_objc_class_declaration (parser);
20863       break;
20864     case RID_AT_PROTOCOL:
20865       cp_parser_objc_protocol_declaration (parser);
20866       break;
20867     case RID_AT_INTERFACE:
20868       cp_parser_objc_class_interface (parser);
20869       break;
20870     case RID_AT_IMPLEMENTATION:
20871       cp_parser_objc_class_implementation (parser);
20872       break;
20873     case RID_AT_END:
20874       cp_parser_objc_end_implementation (parser);
20875       break;
20876     default:
20877       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
20878                 kwd->u.value);
20879       cp_parser_skip_to_end_of_block_or_statement (parser);
20880     }
20881 }
20882
20883 /* Parse an Objective-C try-catch-finally statement.
20884
20885    objc-try-catch-finally-stmt:
20886      @try compound-statement objc-catch-clause-seq [opt]
20887        objc-finally-clause [opt]
20888
20889    objc-catch-clause-seq:
20890      objc-catch-clause objc-catch-clause-seq [opt]
20891
20892    objc-catch-clause:
20893      @catch ( exception-declaration ) compound-statement
20894
20895    objc-finally-clause
20896      @finally compound-statement
20897
20898    Returns NULL_TREE.  */
20899
20900 static tree
20901 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
20902   location_t location;
20903   tree stmt;
20904
20905   cp_parser_require_keyword (parser, RID_AT_TRY, "%<@try%>");
20906   location = cp_lexer_peek_token (parser->lexer)->location;
20907   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
20908      node, lest it get absorbed into the surrounding block.  */
20909   stmt = push_stmt_list ();
20910   cp_parser_compound_statement (parser, NULL, false);
20911   objc_begin_try_stmt (location, pop_stmt_list (stmt));
20912
20913   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
20914     {
20915       cp_parameter_declarator *parmdecl;
20916       tree parm;
20917
20918       cp_lexer_consume_token (parser->lexer);
20919       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
20920       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
20921       parm = grokdeclarator (parmdecl->declarator,
20922                              &parmdecl->decl_specifiers,
20923                              PARM, /*initialized=*/0,
20924                              /*attrlist=*/NULL);
20925       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20926       objc_begin_catch_clause (parm);
20927       cp_parser_compound_statement (parser, NULL, false);
20928       objc_finish_catch_clause ();
20929     }
20930
20931   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
20932     {
20933       cp_lexer_consume_token (parser->lexer);
20934       location = cp_lexer_peek_token (parser->lexer)->location;
20935       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
20936          node, lest it get absorbed into the surrounding block.  */
20937       stmt = push_stmt_list ();
20938       cp_parser_compound_statement (parser, NULL, false);
20939       objc_build_finally_clause (location, pop_stmt_list (stmt));
20940     }
20941
20942   return objc_finish_try_stmt ();
20943 }
20944
20945 /* Parse an Objective-C synchronized statement.
20946
20947    objc-synchronized-stmt:
20948      @synchronized ( expression ) compound-statement
20949
20950    Returns NULL_TREE.  */
20951
20952 static tree
20953 cp_parser_objc_synchronized_statement (cp_parser *parser) {
20954   location_t location;
20955   tree lock, stmt;
20956
20957   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "%<@synchronized%>");
20958
20959   location = cp_lexer_peek_token (parser->lexer)->location;
20960   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
20961   lock = cp_parser_expression (parser, false, NULL);
20962   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20963
20964   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
20965      node, lest it get absorbed into the surrounding block.  */
20966   stmt = push_stmt_list ();
20967   cp_parser_compound_statement (parser, NULL, false);
20968
20969   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
20970 }
20971
20972 /* Parse an Objective-C throw statement.
20973
20974    objc-throw-stmt:
20975      @throw assignment-expression [opt] ;
20976
20977    Returns a constructed '@throw' statement.  */
20978
20979 static tree
20980 cp_parser_objc_throw_statement (cp_parser *parser) {
20981   tree expr = NULL_TREE;
20982   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
20983
20984   cp_parser_require_keyword (parser, RID_AT_THROW, "%<@throw%>");
20985
20986   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
20987     expr = cp_parser_assignment_expression (parser, false, NULL);
20988
20989   cp_parser_consume_semicolon_at_end_of_statement (parser);
20990
20991   return objc_build_throw_stmt (loc, expr);
20992 }
20993
20994 /* Parse an Objective-C statement.  */
20995
20996 static tree
20997 cp_parser_objc_statement (cp_parser * parser) {
20998   /* Try to figure out what kind of declaration is present.  */
20999   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
21000
21001   switch (kwd->keyword)
21002     {
21003     case RID_AT_TRY:
21004       return cp_parser_objc_try_catch_finally_statement (parser);
21005     case RID_AT_SYNCHRONIZED:
21006       return cp_parser_objc_synchronized_statement (parser);
21007     case RID_AT_THROW:
21008       return cp_parser_objc_throw_statement (parser);
21009     default:
21010       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
21011                kwd->u.value);
21012       cp_parser_skip_to_end_of_block_or_statement (parser);
21013     }
21014
21015   return error_mark_node;
21016 }
21017 \f
21018 /* OpenMP 2.5 parsing routines.  */
21019
21020 /* Returns name of the next clause.
21021    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
21022    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
21023    returned and the token is consumed.  */
21024
21025 static pragma_omp_clause
21026 cp_parser_omp_clause_name (cp_parser *parser)
21027 {
21028   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
21029
21030   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
21031     result = PRAGMA_OMP_CLAUSE_IF;
21032   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
21033     result = PRAGMA_OMP_CLAUSE_DEFAULT;
21034   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
21035     result = PRAGMA_OMP_CLAUSE_PRIVATE;
21036   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
21037     {
21038       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
21039       const char *p = IDENTIFIER_POINTER (id);
21040
21041       switch (p[0])
21042         {
21043         case 'c':
21044           if (!strcmp ("collapse", p))
21045             result = PRAGMA_OMP_CLAUSE_COLLAPSE;
21046           else if (!strcmp ("copyin", p))
21047             result = PRAGMA_OMP_CLAUSE_COPYIN;
21048           else if (!strcmp ("copyprivate", p))
21049             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
21050           break;
21051         case 'f':
21052           if (!strcmp ("firstprivate", p))
21053             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
21054           break;
21055         case 'l':
21056           if (!strcmp ("lastprivate", p))
21057             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
21058           break;
21059         case 'n':
21060           if (!strcmp ("nowait", p))
21061             result = PRAGMA_OMP_CLAUSE_NOWAIT;
21062           else if (!strcmp ("num_threads", p))
21063             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
21064           break;
21065         case 'o':
21066           if (!strcmp ("ordered", p))
21067             result = PRAGMA_OMP_CLAUSE_ORDERED;
21068           break;
21069         case 'r':
21070           if (!strcmp ("reduction", p))
21071             result = PRAGMA_OMP_CLAUSE_REDUCTION;
21072           break;
21073         case 's':
21074           if (!strcmp ("schedule", p))
21075             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
21076           else if (!strcmp ("shared", p))
21077             result = PRAGMA_OMP_CLAUSE_SHARED;
21078           break;
21079         case 'u':
21080           if (!strcmp ("untied", p))
21081             result = PRAGMA_OMP_CLAUSE_UNTIED;
21082           break;
21083         }
21084     }
21085
21086   if (result != PRAGMA_OMP_CLAUSE_NONE)
21087     cp_lexer_consume_token (parser->lexer);
21088
21089   return result;
21090 }
21091
21092 /* Validate that a clause of the given type does not already exist.  */
21093
21094 static void
21095 check_no_duplicate_clause (tree clauses, enum omp_clause_code code,
21096                            const char *name, location_t location)
21097 {
21098   tree c;
21099
21100   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
21101     if (OMP_CLAUSE_CODE (c) == code)
21102       {
21103         error_at (location, "too many %qs clauses", name);
21104         break;
21105       }
21106 }
21107
21108 /* OpenMP 2.5:
21109    variable-list:
21110      identifier
21111      variable-list , identifier
21112
21113    In addition, we match a closing parenthesis.  An opening parenthesis
21114    will have been consumed by the caller.
21115
21116    If KIND is nonzero, create the appropriate node and install the decl
21117    in OMP_CLAUSE_DECL and add the node to the head of the list.
21118
21119    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
21120    return the list created.  */
21121
21122 static tree
21123 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
21124                                 tree list)
21125 {
21126   cp_token *token;
21127   while (1)
21128     {
21129       tree name, decl;
21130
21131       token = cp_lexer_peek_token (parser->lexer);
21132       name = cp_parser_id_expression (parser, /*template_p=*/false,
21133                                       /*check_dependency_p=*/true,
21134                                       /*template_p=*/NULL,
21135                                       /*declarator_p=*/false,
21136                                       /*optional_p=*/false);
21137       if (name == error_mark_node)
21138         goto skip_comma;
21139
21140       decl = cp_parser_lookup_name_simple (parser, name, token->location);
21141       if (decl == error_mark_node)
21142         cp_parser_name_lookup_error (parser, name, decl, NULL, token->location);
21143       else if (kind != 0)
21144         {
21145           tree u = build_omp_clause (token->location, kind);
21146           OMP_CLAUSE_DECL (u) = decl;
21147           OMP_CLAUSE_CHAIN (u) = list;
21148           list = u;
21149         }
21150       else
21151         list = tree_cons (decl, NULL_TREE, list);
21152
21153     get_comma:
21154       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
21155         break;
21156       cp_lexer_consume_token (parser->lexer);
21157     }
21158
21159   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21160     {
21161       int ending;
21162
21163       /* Try to resync to an unnested comma.  Copied from
21164          cp_parser_parenthesized_expression_list.  */
21165     skip_comma:
21166       ending = cp_parser_skip_to_closing_parenthesis (parser,
21167                                                       /*recovering=*/true,
21168                                                       /*or_comma=*/true,
21169                                                       /*consume_paren=*/true);
21170       if (ending < 0)
21171         goto get_comma;
21172     }
21173
21174   return list;
21175 }
21176
21177 /* Similarly, but expect leading and trailing parenthesis.  This is a very
21178    common case for omp clauses.  */
21179
21180 static tree
21181 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
21182 {
21183   if (cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
21184     return cp_parser_omp_var_list_no_open (parser, kind, list);
21185   return list;
21186 }
21187
21188 /* OpenMP 3.0:
21189    collapse ( constant-expression ) */
21190
21191 static tree
21192 cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location)
21193 {
21194   tree c, num;
21195   location_t loc;
21196   HOST_WIDE_INT n;
21197
21198   loc = cp_lexer_peek_token (parser->lexer)->location;
21199   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
21200     return list;
21201
21202   num = cp_parser_constant_expression (parser, false, NULL);
21203
21204   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21205     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21206                                            /*or_comma=*/false,
21207                                            /*consume_paren=*/true);
21208
21209   if (num == error_mark_node)
21210     return list;
21211   num = fold_non_dependent_expr (num);
21212   if (!INTEGRAL_TYPE_P (TREE_TYPE (num))
21213       || !host_integerp (num, 0)
21214       || (n = tree_low_cst (num, 0)) <= 0
21215       || (int) n != n)
21216     {
21217       error_at (loc, "collapse argument needs positive constant integer expression");
21218       return list;
21219     }
21220
21221   check_no_duplicate_clause (list, OMP_CLAUSE_COLLAPSE, "collapse", location);
21222   c = build_omp_clause (loc, OMP_CLAUSE_COLLAPSE);
21223   OMP_CLAUSE_CHAIN (c) = list;
21224   OMP_CLAUSE_COLLAPSE_EXPR (c) = num;
21225
21226   return c;
21227 }
21228
21229 /* OpenMP 2.5:
21230    default ( shared | none ) */
21231
21232 static tree
21233 cp_parser_omp_clause_default (cp_parser *parser, tree list, location_t location)
21234 {
21235   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
21236   tree c;
21237
21238   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
21239     return list;
21240   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
21241     {
21242       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
21243       const char *p = IDENTIFIER_POINTER (id);
21244
21245       switch (p[0])
21246         {
21247         case 'n':
21248           if (strcmp ("none", p) != 0)
21249             goto invalid_kind;
21250           kind = OMP_CLAUSE_DEFAULT_NONE;
21251           break;
21252
21253         case 's':
21254           if (strcmp ("shared", p) != 0)
21255             goto invalid_kind;
21256           kind = OMP_CLAUSE_DEFAULT_SHARED;
21257           break;
21258
21259         default:
21260           goto invalid_kind;
21261         }
21262
21263       cp_lexer_consume_token (parser->lexer);
21264     }
21265   else
21266     {
21267     invalid_kind:
21268       cp_parser_error (parser, "expected %<none%> or %<shared%>");
21269     }
21270
21271   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21272     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21273                                            /*or_comma=*/false,
21274                                            /*consume_paren=*/true);
21275
21276   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
21277     return list;
21278
21279   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default", location);
21280   c = build_omp_clause (location, OMP_CLAUSE_DEFAULT);
21281   OMP_CLAUSE_CHAIN (c) = list;
21282   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
21283
21284   return c;
21285 }
21286
21287 /* OpenMP 2.5:
21288    if ( expression ) */
21289
21290 static tree
21291 cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location)
21292 {
21293   tree t, c;
21294
21295   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
21296     return list;
21297
21298   t = cp_parser_condition (parser);
21299
21300   if (t == error_mark_node
21301       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21302     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21303                                            /*or_comma=*/false,
21304                                            /*consume_paren=*/true);
21305
21306   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if", location);
21307
21308   c = build_omp_clause (location, OMP_CLAUSE_IF);
21309   OMP_CLAUSE_IF_EXPR (c) = t;
21310   OMP_CLAUSE_CHAIN (c) = list;
21311
21312   return c;
21313 }
21314
21315 /* OpenMP 2.5:
21316    nowait */
21317
21318 static tree
21319 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED,
21320                              tree list, location_t location)
21321 {
21322   tree c;
21323
21324   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait", location);
21325
21326   c = build_omp_clause (location, OMP_CLAUSE_NOWAIT);
21327   OMP_CLAUSE_CHAIN (c) = list;
21328   return c;
21329 }
21330
21331 /* OpenMP 2.5:
21332    num_threads ( expression ) */
21333
21334 static tree
21335 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
21336                                   location_t location)
21337 {
21338   tree t, c;
21339
21340   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
21341     return list;
21342
21343   t = cp_parser_expression (parser, false, NULL);
21344
21345   if (t == error_mark_node
21346       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21347     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21348                                            /*or_comma=*/false,
21349                                            /*consume_paren=*/true);
21350
21351   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS,
21352                              "num_threads", location);
21353
21354   c = build_omp_clause (location, OMP_CLAUSE_NUM_THREADS);
21355   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
21356   OMP_CLAUSE_CHAIN (c) = list;
21357
21358   return c;
21359 }
21360
21361 /* OpenMP 2.5:
21362    ordered */
21363
21364 static tree
21365 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED,
21366                               tree list, location_t location)
21367 {
21368   tree c;
21369
21370   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED,
21371                              "ordered", location);
21372
21373   c = build_omp_clause (location, OMP_CLAUSE_ORDERED);
21374   OMP_CLAUSE_CHAIN (c) = list;
21375   return c;
21376 }
21377
21378 /* OpenMP 2.5:
21379    reduction ( reduction-operator : variable-list )
21380
21381    reduction-operator:
21382      One of: + * - & ^ | && || */
21383
21384 static tree
21385 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
21386 {
21387   enum tree_code code;
21388   tree nlist, c;
21389
21390   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
21391     return list;
21392
21393   switch (cp_lexer_peek_token (parser->lexer)->type)
21394     {
21395     case CPP_PLUS:
21396       code = PLUS_EXPR;
21397       break;
21398     case CPP_MULT:
21399       code = MULT_EXPR;
21400       break;
21401     case CPP_MINUS:
21402       code = MINUS_EXPR;
21403       break;
21404     case CPP_AND:
21405       code = BIT_AND_EXPR;
21406       break;
21407     case CPP_XOR:
21408       code = BIT_XOR_EXPR;
21409       break;
21410     case CPP_OR:
21411       code = BIT_IOR_EXPR;
21412       break;
21413     case CPP_AND_AND:
21414       code = TRUTH_ANDIF_EXPR;
21415       break;
21416     case CPP_OR_OR:
21417       code = TRUTH_ORIF_EXPR;
21418       break;
21419     default:
21420       cp_parser_error (parser, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
21421                                "%<|%>, %<&&%>, or %<||%>");
21422     resync_fail:
21423       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21424                                              /*or_comma=*/false,
21425                                              /*consume_paren=*/true);
21426       return list;
21427     }
21428   cp_lexer_consume_token (parser->lexer);
21429
21430   if (!cp_parser_require (parser, CPP_COLON, "%<:%>"))
21431     goto resync_fail;
21432
21433   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
21434   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
21435     OMP_CLAUSE_REDUCTION_CODE (c) = code;
21436
21437   return nlist;
21438 }
21439
21440 /* OpenMP 2.5:
21441    schedule ( schedule-kind )
21442    schedule ( schedule-kind , expression )
21443
21444    schedule-kind:
21445      static | dynamic | guided | runtime | auto  */
21446
21447 static tree
21448 cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location)
21449 {
21450   tree c, t;
21451
21452   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
21453     return list;
21454
21455   c = build_omp_clause (location, OMP_CLAUSE_SCHEDULE);
21456
21457   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
21458     {
21459       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
21460       const char *p = IDENTIFIER_POINTER (id);
21461
21462       switch (p[0])
21463         {
21464         case 'd':
21465           if (strcmp ("dynamic", p) != 0)
21466             goto invalid_kind;
21467           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
21468           break;
21469
21470         case 'g':
21471           if (strcmp ("guided", p) != 0)
21472             goto invalid_kind;
21473           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
21474           break;
21475
21476         case 'r':
21477           if (strcmp ("runtime", p) != 0)
21478             goto invalid_kind;
21479           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
21480           break;
21481
21482         default:
21483           goto invalid_kind;
21484         }
21485     }
21486   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
21487     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
21488   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
21489     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO;
21490   else
21491     goto invalid_kind;
21492   cp_lexer_consume_token (parser->lexer);
21493
21494   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
21495     {
21496       cp_token *token;
21497       cp_lexer_consume_token (parser->lexer);
21498
21499       token = cp_lexer_peek_token (parser->lexer);
21500       t = cp_parser_assignment_expression (parser, false, NULL);
21501
21502       if (t == error_mark_node)
21503         goto resync_fail;
21504       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
21505         error_at (token->location, "schedule %<runtime%> does not take "
21506                   "a %<chunk_size%> parameter");
21507       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_AUTO)
21508         error_at (token->location, "schedule %<auto%> does not take "
21509                   "a %<chunk_size%> parameter");
21510       else
21511         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
21512
21513       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21514         goto resync_fail;
21515     }
21516   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<,%> or %<)%>"))
21517     goto resync_fail;
21518
21519   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule", location);
21520   OMP_CLAUSE_CHAIN (c) = list;
21521   return c;
21522
21523  invalid_kind:
21524   cp_parser_error (parser, "invalid schedule kind");
21525  resync_fail:
21526   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21527                                          /*or_comma=*/false,
21528                                          /*consume_paren=*/true);
21529   return list;
21530 }
21531
21532 /* OpenMP 3.0:
21533    untied */
21534
21535 static tree
21536 cp_parser_omp_clause_untied (cp_parser *parser ATTRIBUTE_UNUSED,
21537                              tree list, location_t location)
21538 {
21539   tree c;
21540
21541   check_no_duplicate_clause (list, OMP_CLAUSE_UNTIED, "untied", location);
21542
21543   c = build_omp_clause (location, OMP_CLAUSE_UNTIED);
21544   OMP_CLAUSE_CHAIN (c) = list;
21545   return c;
21546 }
21547
21548 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
21549    is a bitmask in MASK.  Return the list of clauses found; the result
21550    of clause default goes in *pdefault.  */
21551
21552 static tree
21553 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
21554                            const char *where, cp_token *pragma_tok)
21555 {
21556   tree clauses = NULL;
21557   bool first = true;
21558   cp_token *token = NULL;
21559
21560   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
21561     {
21562       pragma_omp_clause c_kind;
21563       const char *c_name;
21564       tree prev = clauses;
21565
21566       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
21567         cp_lexer_consume_token (parser->lexer);
21568
21569       token = cp_lexer_peek_token (parser->lexer);
21570       c_kind = cp_parser_omp_clause_name (parser);
21571       first = false;
21572
21573       switch (c_kind)
21574         {
21575         case PRAGMA_OMP_CLAUSE_COLLAPSE:
21576           clauses = cp_parser_omp_clause_collapse (parser, clauses,
21577                                                    token->location);
21578           c_name = "collapse";
21579           break;
21580         case PRAGMA_OMP_CLAUSE_COPYIN:
21581           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
21582           c_name = "copyin";
21583           break;
21584         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
21585           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
21586                                             clauses);
21587           c_name = "copyprivate";
21588           break;
21589         case PRAGMA_OMP_CLAUSE_DEFAULT:
21590           clauses = cp_parser_omp_clause_default (parser, clauses,
21591                                                   token->location);
21592           c_name = "default";
21593           break;
21594         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
21595           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
21596                                             clauses);
21597           c_name = "firstprivate";
21598           break;
21599         case PRAGMA_OMP_CLAUSE_IF:
21600           clauses = cp_parser_omp_clause_if (parser, clauses, token->location);
21601           c_name = "if";
21602           break;
21603         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
21604           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
21605                                             clauses);
21606           c_name = "lastprivate";
21607           break;
21608         case PRAGMA_OMP_CLAUSE_NOWAIT:
21609           clauses = cp_parser_omp_clause_nowait (parser, clauses, token->location);
21610           c_name = "nowait";
21611           break;
21612         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
21613           clauses = cp_parser_omp_clause_num_threads (parser, clauses,
21614                                                       token->location);
21615           c_name = "num_threads";
21616           break;
21617         case PRAGMA_OMP_CLAUSE_ORDERED:
21618           clauses = cp_parser_omp_clause_ordered (parser, clauses,
21619                                                   token->location);
21620           c_name = "ordered";
21621           break;
21622         case PRAGMA_OMP_CLAUSE_PRIVATE:
21623           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
21624                                             clauses);
21625           c_name = "private";
21626           break;
21627         case PRAGMA_OMP_CLAUSE_REDUCTION:
21628           clauses = cp_parser_omp_clause_reduction (parser, clauses);
21629           c_name = "reduction";
21630           break;
21631         case PRAGMA_OMP_CLAUSE_SCHEDULE:
21632           clauses = cp_parser_omp_clause_schedule (parser, clauses,
21633                                                    token->location);
21634           c_name = "schedule";
21635           break;
21636         case PRAGMA_OMP_CLAUSE_SHARED:
21637           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
21638                                             clauses);
21639           c_name = "shared";
21640           break;
21641         case PRAGMA_OMP_CLAUSE_UNTIED:
21642           clauses = cp_parser_omp_clause_untied (parser, clauses,
21643                                                  token->location);
21644           c_name = "nowait";
21645           break;
21646         default:
21647           cp_parser_error (parser, "expected %<#pragma omp%> clause");
21648           goto saw_error;
21649         }
21650
21651       if (((mask >> c_kind) & 1) == 0)
21652         {
21653           /* Remove the invalid clause(s) from the list to avoid
21654              confusing the rest of the compiler.  */
21655           clauses = prev;
21656           error_at (token->location, "%qs is not valid for %qs", c_name, where);
21657         }
21658     }
21659  saw_error:
21660   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
21661   return finish_omp_clauses (clauses);
21662 }
21663
21664 /* OpenMP 2.5:
21665    structured-block:
21666      statement
21667
21668    In practice, we're also interested in adding the statement to an
21669    outer node.  So it is convenient if we work around the fact that
21670    cp_parser_statement calls add_stmt.  */
21671
21672 static unsigned
21673 cp_parser_begin_omp_structured_block (cp_parser *parser)
21674 {
21675   unsigned save = parser->in_statement;
21676
21677   /* Only move the values to IN_OMP_BLOCK if they weren't false.
21678      This preserves the "not within loop or switch" style error messages
21679      for nonsense cases like
21680         void foo() {
21681         #pragma omp single
21682           break;
21683         }
21684   */
21685   if (parser->in_statement)
21686     parser->in_statement = IN_OMP_BLOCK;
21687
21688   return save;
21689 }
21690
21691 static void
21692 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
21693 {
21694   parser->in_statement = save;
21695 }
21696
21697 static tree
21698 cp_parser_omp_structured_block (cp_parser *parser)
21699 {
21700   tree stmt = begin_omp_structured_block ();
21701   unsigned int save = cp_parser_begin_omp_structured_block (parser);
21702
21703   cp_parser_statement (parser, NULL_TREE, false, NULL);
21704
21705   cp_parser_end_omp_structured_block (parser, save);
21706   return finish_omp_structured_block (stmt);
21707 }
21708
21709 /* OpenMP 2.5:
21710    # pragma omp atomic new-line
21711      expression-stmt
21712
21713    expression-stmt:
21714      x binop= expr | x++ | ++x | x-- | --x
21715    binop:
21716      +, *, -, /, &, ^, |, <<, >>
21717
21718   where x is an lvalue expression with scalar type.  */
21719
21720 static void
21721 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
21722 {
21723   tree lhs, rhs;
21724   enum tree_code code;
21725
21726   cp_parser_require_pragma_eol (parser, pragma_tok);
21727
21728   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
21729                                     /*cast_p=*/false, NULL);
21730   switch (TREE_CODE (lhs))
21731     {
21732     case ERROR_MARK:
21733       goto saw_error;
21734
21735     case PREINCREMENT_EXPR:
21736     case POSTINCREMENT_EXPR:
21737       lhs = TREE_OPERAND (lhs, 0);
21738       code = PLUS_EXPR;
21739       rhs = integer_one_node;
21740       break;
21741
21742     case PREDECREMENT_EXPR:
21743     case POSTDECREMENT_EXPR:
21744       lhs = TREE_OPERAND (lhs, 0);
21745       code = MINUS_EXPR;
21746       rhs = integer_one_node;
21747       break;
21748
21749     default:
21750       switch (cp_lexer_peek_token (parser->lexer)->type)
21751         {
21752         case CPP_MULT_EQ:
21753           code = MULT_EXPR;
21754           break;
21755         case CPP_DIV_EQ:
21756           code = TRUNC_DIV_EXPR;
21757           break;
21758         case CPP_PLUS_EQ:
21759           code = PLUS_EXPR;
21760           break;
21761         case CPP_MINUS_EQ:
21762           code = MINUS_EXPR;
21763           break;
21764         case CPP_LSHIFT_EQ:
21765           code = LSHIFT_EXPR;
21766           break;
21767         case CPP_RSHIFT_EQ:
21768           code = RSHIFT_EXPR;
21769           break;
21770         case CPP_AND_EQ:
21771           code = BIT_AND_EXPR;
21772           break;
21773         case CPP_OR_EQ:
21774           code = BIT_IOR_EXPR;
21775           break;
21776         case CPP_XOR_EQ:
21777           code = BIT_XOR_EXPR;
21778           break;
21779         default:
21780           cp_parser_error (parser,
21781                            "invalid operator for %<#pragma omp atomic%>");
21782           goto saw_error;
21783         }
21784       cp_lexer_consume_token (parser->lexer);
21785
21786       rhs = cp_parser_expression (parser, false, NULL);
21787       if (rhs == error_mark_node)
21788         goto saw_error;
21789       break;
21790     }
21791   finish_omp_atomic (code, lhs, rhs);
21792   cp_parser_consume_semicolon_at_end_of_statement (parser);
21793   return;
21794
21795  saw_error:
21796   cp_parser_skip_to_end_of_block_or_statement (parser);
21797 }
21798
21799
21800 /* OpenMP 2.5:
21801    # pragma omp barrier new-line  */
21802
21803 static void
21804 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
21805 {
21806   cp_parser_require_pragma_eol (parser, pragma_tok);
21807   finish_omp_barrier ();
21808 }
21809
21810 /* OpenMP 2.5:
21811    # pragma omp critical [(name)] new-line
21812      structured-block  */
21813
21814 static tree
21815 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
21816 {
21817   tree stmt, name = NULL;
21818
21819   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21820     {
21821       cp_lexer_consume_token (parser->lexer);
21822
21823       name = cp_parser_identifier (parser);
21824
21825       if (name == error_mark_node
21826           || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21827         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21828                                                /*or_comma=*/false,
21829                                                /*consume_paren=*/true);
21830       if (name == error_mark_node)
21831         name = NULL;
21832     }
21833   cp_parser_require_pragma_eol (parser, pragma_tok);
21834
21835   stmt = cp_parser_omp_structured_block (parser);
21836   return c_finish_omp_critical (input_location, stmt, name);
21837 }
21838
21839 /* OpenMP 2.5:
21840    # pragma omp flush flush-vars[opt] new-line
21841
21842    flush-vars:
21843      ( variable-list ) */
21844
21845 static void
21846 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
21847 {
21848   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21849     (void) cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
21850   cp_parser_require_pragma_eol (parser, pragma_tok);
21851
21852   finish_omp_flush ();
21853 }
21854
21855 /* Helper function, to parse omp for increment expression.  */
21856
21857 static tree
21858 cp_parser_omp_for_cond (cp_parser *parser, tree decl)
21859 {
21860   tree cond = cp_parser_binary_expression (parser, false, true,
21861                                            PREC_NOT_OPERATOR, NULL);
21862   bool overloaded_p;
21863
21864   if (cond == error_mark_node
21865       || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
21866     {
21867       cp_parser_skip_to_end_of_statement (parser);
21868       return error_mark_node;
21869     }
21870
21871   switch (TREE_CODE (cond))
21872     {
21873     case GT_EXPR:
21874     case GE_EXPR:
21875     case LT_EXPR:
21876     case LE_EXPR:
21877       break;
21878     default:
21879       return error_mark_node;
21880     }
21881
21882   /* If decl is an iterator, preserve LHS and RHS of the relational
21883      expr until finish_omp_for.  */
21884   if (decl
21885       && (type_dependent_expression_p (decl)
21886           || CLASS_TYPE_P (TREE_TYPE (decl))))
21887     return cond;
21888
21889   return build_x_binary_op (TREE_CODE (cond),
21890                             TREE_OPERAND (cond, 0), ERROR_MARK,
21891                             TREE_OPERAND (cond, 1), ERROR_MARK,
21892                             &overloaded_p, tf_warning_or_error);
21893 }
21894
21895 /* Helper function, to parse omp for increment expression.  */
21896
21897 static tree
21898 cp_parser_omp_for_incr (cp_parser *parser, tree decl)
21899 {
21900   cp_token *token = cp_lexer_peek_token (parser->lexer);
21901   enum tree_code op;
21902   tree lhs, rhs;
21903   cp_id_kind idk;
21904   bool decl_first;
21905
21906   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
21907     {
21908       op = (token->type == CPP_PLUS_PLUS
21909             ? PREINCREMENT_EXPR : PREDECREMENT_EXPR);
21910       cp_lexer_consume_token (parser->lexer);
21911       lhs = cp_parser_cast_expression (parser, false, false, NULL);
21912       if (lhs != decl)
21913         return error_mark_node;
21914       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
21915     }
21916
21917   lhs = cp_parser_primary_expression (parser, false, false, false, &idk);
21918   if (lhs != decl)
21919     return error_mark_node;
21920
21921   token = cp_lexer_peek_token (parser->lexer);
21922   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
21923     {
21924       op = (token->type == CPP_PLUS_PLUS
21925             ? POSTINCREMENT_EXPR : POSTDECREMENT_EXPR);
21926       cp_lexer_consume_token (parser->lexer);
21927       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
21928     }
21929
21930   op = cp_parser_assignment_operator_opt (parser);
21931   if (op == ERROR_MARK)
21932     return error_mark_node;
21933
21934   if (op != NOP_EXPR)
21935     {
21936       rhs = cp_parser_assignment_expression (parser, false, NULL);
21937       rhs = build2 (op, TREE_TYPE (decl), decl, rhs);
21938       return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
21939     }
21940
21941   lhs = cp_parser_binary_expression (parser, false, false,
21942                                      PREC_ADDITIVE_EXPRESSION, NULL);
21943   token = cp_lexer_peek_token (parser->lexer);
21944   decl_first = lhs == decl;
21945   if (decl_first)
21946     lhs = NULL_TREE;
21947   if (token->type != CPP_PLUS
21948       && token->type != CPP_MINUS)
21949     return error_mark_node;
21950
21951   do
21952     {
21953       op = token->type == CPP_PLUS ? PLUS_EXPR : MINUS_EXPR;
21954       cp_lexer_consume_token (parser->lexer);
21955       rhs = cp_parser_binary_expression (parser, false, false,
21956                                          PREC_ADDITIVE_EXPRESSION, NULL);
21957       token = cp_lexer_peek_token (parser->lexer);
21958       if (token->type == CPP_PLUS || token->type == CPP_MINUS || decl_first)
21959         {
21960           if (lhs == NULL_TREE)
21961             {
21962               if (op == PLUS_EXPR)
21963                 lhs = rhs;
21964               else
21965                 lhs = build_x_unary_op (NEGATE_EXPR, rhs, tf_warning_or_error);
21966             }
21967           else
21968             lhs = build_x_binary_op (op, lhs, ERROR_MARK, rhs, ERROR_MARK,
21969                                      NULL, tf_warning_or_error);
21970         }
21971     }
21972   while (token->type == CPP_PLUS || token->type == CPP_MINUS);
21973
21974   if (!decl_first)
21975     {
21976       if (rhs != decl || op == MINUS_EXPR)
21977         return error_mark_node;
21978       rhs = build2 (op, TREE_TYPE (decl), lhs, decl);
21979     }
21980   else
21981     rhs = build2 (PLUS_EXPR, TREE_TYPE (decl), decl, lhs);
21982
21983   return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
21984 }
21985
21986 /* Parse the restricted form of the for statement allowed by OpenMP.  */
21987
21988 static tree
21989 cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
21990 {
21991   tree init, cond, incr, body, decl, pre_body = NULL_TREE, ret;
21992   tree for_block = NULL_TREE, real_decl, initv, condv, incrv, declv;
21993   tree this_pre_body, cl;
21994   location_t loc_first;
21995   bool collapse_err = false;
21996   int i, collapse = 1, nbraces = 0;
21997
21998   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
21999     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
22000       collapse = tree_low_cst (OMP_CLAUSE_COLLAPSE_EXPR (cl), 0);
22001
22002   gcc_assert (collapse >= 1);
22003
22004   declv = make_tree_vec (collapse);
22005   initv = make_tree_vec (collapse);
22006   condv = make_tree_vec (collapse);
22007   incrv = make_tree_vec (collapse);
22008
22009   loc_first = cp_lexer_peek_token (parser->lexer)->location;
22010
22011   for (i = 0; i < collapse; i++)
22012     {
22013       int bracecount = 0;
22014       bool add_private_clause = false;
22015       location_t loc;
22016
22017       if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
22018         {
22019           cp_parser_error (parser, "for statement expected");
22020           return NULL;
22021         }
22022       loc = cp_lexer_consume_token (parser->lexer)->location;
22023
22024       if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
22025         return NULL;
22026
22027       init = decl = real_decl = NULL;
22028       this_pre_body = push_stmt_list ();
22029       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
22030         {
22031           /* See 2.5.1 (in OpenMP 3.0, similar wording is in 2.5 standard too):
22032
22033              init-expr:
22034                        var = lb
22035                        integer-type var = lb
22036                        random-access-iterator-type var = lb
22037                        pointer-type var = lb
22038           */
22039           cp_decl_specifier_seq type_specifiers;
22040
22041           /* First, try to parse as an initialized declaration.  See
22042              cp_parser_condition, from whence the bulk of this is copied.  */
22043
22044           cp_parser_parse_tentatively (parser);
22045           cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
22046                                         &type_specifiers);
22047           if (cp_parser_parse_definitely (parser))
22048             {
22049               /* If parsing a type specifier seq succeeded, then this
22050                  MUST be a initialized declaration.  */
22051               tree asm_specification, attributes;
22052               cp_declarator *declarator;
22053
22054               declarator = cp_parser_declarator (parser,
22055                                                  CP_PARSER_DECLARATOR_NAMED,
22056                                                  /*ctor_dtor_or_conv_p=*/NULL,
22057                                                  /*parenthesized_p=*/NULL,
22058                                                  /*member_p=*/false);
22059               attributes = cp_parser_attributes_opt (parser);
22060               asm_specification = cp_parser_asm_specification_opt (parser);
22061
22062               if (declarator == cp_error_declarator) 
22063                 cp_parser_skip_to_end_of_statement (parser);
22064
22065               else 
22066                 {
22067                   tree pushed_scope, auto_node;
22068
22069                   decl = start_decl (declarator, &type_specifiers,
22070                                      SD_INITIALIZED, attributes,
22071                                      /*prefix_attributes=*/NULL_TREE,
22072                                      &pushed_scope);
22073
22074                   auto_node = type_uses_auto (TREE_TYPE (decl));
22075                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
22076                     {
22077                       if (cp_lexer_next_token_is (parser->lexer, 
22078                                                   CPP_OPEN_PAREN))
22079                         error ("parenthesized initialization is not allowed in "
22080                                "OpenMP %<for%> loop");
22081                       else
22082                         /* Trigger an error.  */
22083                         cp_parser_require (parser, CPP_EQ, "%<=%>");
22084
22085                       init = error_mark_node;
22086                       cp_parser_skip_to_end_of_statement (parser);
22087                     }
22088                   else if (CLASS_TYPE_P (TREE_TYPE (decl))
22089                            || type_dependent_expression_p (decl)
22090                            || auto_node)
22091                     {
22092                       bool is_direct_init, is_non_constant_init;
22093
22094                       init = cp_parser_initializer (parser,
22095                                                     &is_direct_init,
22096                                                     &is_non_constant_init);
22097
22098                       if (auto_node && describable_type (init))
22099                         {
22100                           TREE_TYPE (decl)
22101                             = do_auto_deduction (TREE_TYPE (decl), init,
22102                                                  auto_node);
22103
22104                           if (!CLASS_TYPE_P (TREE_TYPE (decl))
22105                               && !type_dependent_expression_p (decl))
22106                             goto non_class;
22107                         }
22108                       
22109                       cp_finish_decl (decl, init, !is_non_constant_init,
22110                                       asm_specification,
22111                                       LOOKUP_ONLYCONVERTING);
22112                       if (CLASS_TYPE_P (TREE_TYPE (decl)))
22113                         {
22114                           for_block
22115                             = tree_cons (NULL, this_pre_body, for_block);
22116                           init = NULL_TREE;
22117                         }
22118                       else
22119                         init = pop_stmt_list (this_pre_body);
22120                       this_pre_body = NULL_TREE;
22121                     }
22122                   else
22123                     {
22124                       /* Consume '='.  */
22125                       cp_lexer_consume_token (parser->lexer);
22126                       init = cp_parser_assignment_expression (parser, false, NULL);
22127
22128                     non_class:
22129                       if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
22130                         init = error_mark_node;
22131                       else
22132                         cp_finish_decl (decl, NULL_TREE,
22133                                         /*init_const_expr_p=*/false,
22134                                         asm_specification,
22135                                         LOOKUP_ONLYCONVERTING);
22136                     }
22137
22138                   if (pushed_scope)
22139                     pop_scope (pushed_scope);
22140                 }
22141             }
22142           else 
22143             {
22144               cp_id_kind idk;
22145               /* If parsing a type specifier sequence failed, then
22146                  this MUST be a simple expression.  */
22147               cp_parser_parse_tentatively (parser);
22148               decl = cp_parser_primary_expression (parser, false, false,
22149                                                    false, &idk);
22150               if (!cp_parser_error_occurred (parser)
22151                   && decl
22152                   && DECL_P (decl)
22153                   && CLASS_TYPE_P (TREE_TYPE (decl)))
22154                 {
22155                   tree rhs;
22156
22157                   cp_parser_parse_definitely (parser);
22158                   cp_parser_require (parser, CPP_EQ, "%<=%>");
22159                   rhs = cp_parser_assignment_expression (parser, false, NULL);
22160                   finish_expr_stmt (build_x_modify_expr (decl, NOP_EXPR,
22161                                                          rhs,
22162                                                          tf_warning_or_error));
22163                   add_private_clause = true;
22164                 }
22165               else
22166                 {
22167                   decl = NULL;
22168                   cp_parser_abort_tentative_parse (parser);
22169                   init = cp_parser_expression (parser, false, NULL);
22170                   if (init)
22171                     {
22172                       if (TREE_CODE (init) == MODIFY_EXPR
22173                           || TREE_CODE (init) == MODOP_EXPR)
22174                         real_decl = TREE_OPERAND (init, 0);
22175                     }
22176                 }
22177             }
22178         }
22179       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
22180       if (this_pre_body)
22181         {
22182           this_pre_body = pop_stmt_list (this_pre_body);
22183           if (pre_body)
22184             {
22185               tree t = pre_body;
22186               pre_body = push_stmt_list ();
22187               add_stmt (t);
22188               add_stmt (this_pre_body);
22189               pre_body = pop_stmt_list (pre_body);
22190             }
22191           else
22192             pre_body = this_pre_body;
22193         }
22194
22195       if (decl)
22196         real_decl = decl;
22197       if (par_clauses != NULL && real_decl != NULL_TREE)
22198         {
22199           tree *c;
22200           for (c = par_clauses; *c ; )
22201             if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_FIRSTPRIVATE
22202                 && OMP_CLAUSE_DECL (*c) == real_decl)
22203               {
22204                 error_at (loc, "iteration variable %qD"
22205                           " should not be firstprivate", real_decl);
22206                 *c = OMP_CLAUSE_CHAIN (*c);
22207               }
22208             else if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_LASTPRIVATE
22209                      && OMP_CLAUSE_DECL (*c) == real_decl)
22210               {
22211                 /* Add lastprivate (decl) clause to OMP_FOR_CLAUSES,
22212                    change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
22213                 tree l = build_omp_clause (loc, OMP_CLAUSE_LASTPRIVATE);
22214                 OMP_CLAUSE_DECL (l) = real_decl;
22215                 OMP_CLAUSE_CHAIN (l) = clauses;
22216                 CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
22217                 clauses = l;
22218                 OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
22219                 CP_OMP_CLAUSE_INFO (*c) = NULL;
22220                 add_private_clause = false;
22221               }
22222             else
22223               {
22224                 if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_PRIVATE
22225                     && OMP_CLAUSE_DECL (*c) == real_decl)
22226                   add_private_clause = false;
22227                 c = &OMP_CLAUSE_CHAIN (*c);
22228               }
22229         }
22230
22231       if (add_private_clause)
22232         {
22233           tree c;
22234           for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
22235             {
22236               if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
22237                    || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
22238                   && OMP_CLAUSE_DECL (c) == decl)
22239                 break;
22240               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
22241                        && OMP_CLAUSE_DECL (c) == decl)
22242                 error_at (loc, "iteration variable %qD "
22243                           "should not be firstprivate",
22244                           decl);
22245               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
22246                        && OMP_CLAUSE_DECL (c) == decl)
22247                 error_at (loc, "iteration variable %qD should not be reduction",
22248                           decl);
22249             }
22250           if (c == NULL)
22251             {
22252               c = build_omp_clause (loc, OMP_CLAUSE_PRIVATE);
22253               OMP_CLAUSE_DECL (c) = decl;
22254               c = finish_omp_clauses (c);
22255               if (c)
22256                 {
22257                   OMP_CLAUSE_CHAIN (c) = clauses;
22258                   clauses = c;
22259                 }
22260             }
22261         }
22262
22263       cond = NULL;
22264       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
22265         cond = cp_parser_omp_for_cond (parser, decl);
22266       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
22267
22268       incr = NULL;
22269       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
22270         {
22271           /* If decl is an iterator, preserve the operator on decl
22272              until finish_omp_for.  */
22273           if (decl
22274               && (type_dependent_expression_p (decl)
22275                   || CLASS_TYPE_P (TREE_TYPE (decl))))
22276             incr = cp_parser_omp_for_incr (parser, decl);
22277           else
22278             incr = cp_parser_expression (parser, false, NULL);
22279         }
22280
22281       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
22282         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
22283                                                /*or_comma=*/false,
22284                                                /*consume_paren=*/true);
22285
22286       TREE_VEC_ELT (declv, i) = decl;
22287       TREE_VEC_ELT (initv, i) = init;
22288       TREE_VEC_ELT (condv, i) = cond;
22289       TREE_VEC_ELT (incrv, i) = incr;
22290
22291       if (i == collapse - 1)
22292         break;
22293
22294       /* FIXME: OpenMP 3.0 draft isn't very clear on what exactly is allowed
22295          in between the collapsed for loops to be still considered perfectly
22296          nested.  Hopefully the final version clarifies this.
22297          For now handle (multiple) {'s and empty statements.  */
22298       cp_parser_parse_tentatively (parser);
22299       do
22300         {
22301           if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
22302             break;
22303           else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
22304             {
22305               cp_lexer_consume_token (parser->lexer);
22306               bracecount++;
22307             }
22308           else if (bracecount
22309                    && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
22310             cp_lexer_consume_token (parser->lexer);
22311           else
22312             {
22313               loc = cp_lexer_peek_token (parser->lexer)->location;
22314               error_at (loc, "not enough collapsed for loops");
22315               collapse_err = true;
22316               cp_parser_abort_tentative_parse (parser);
22317               declv = NULL_TREE;
22318               break;
22319             }
22320         }
22321       while (1);
22322
22323       if (declv)
22324         {
22325           cp_parser_parse_definitely (parser);
22326           nbraces += bracecount;
22327         }
22328     }
22329
22330   /* Note that we saved the original contents of this flag when we entered
22331      the structured block, and so we don't need to re-save it here.  */
22332   parser->in_statement = IN_OMP_FOR;
22333
22334   /* Note that the grammar doesn't call for a structured block here,
22335      though the loop as a whole is a structured block.  */
22336   body = push_stmt_list ();
22337   cp_parser_statement (parser, NULL_TREE, false, NULL);
22338   body = pop_stmt_list (body);
22339
22340   if (declv == NULL_TREE)
22341     ret = NULL_TREE;
22342   else
22343     ret = finish_omp_for (loc_first, declv, initv, condv, incrv, body,
22344                           pre_body, clauses);
22345
22346   while (nbraces)
22347     {
22348       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
22349         {
22350           cp_lexer_consume_token (parser->lexer);
22351           nbraces--;
22352         }
22353       else if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
22354         cp_lexer_consume_token (parser->lexer);
22355       else
22356         {
22357           if (!collapse_err)
22358             {
22359               error_at (cp_lexer_peek_token (parser->lexer)->location,
22360                         "collapsed loops not perfectly nested");
22361             }
22362           collapse_err = true;
22363           cp_parser_statement_seq_opt (parser, NULL);
22364           cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
22365         }
22366     }
22367
22368   while (for_block)
22369     {
22370       add_stmt (pop_stmt_list (TREE_VALUE (for_block)));
22371       for_block = TREE_CHAIN (for_block);
22372     }
22373
22374   return ret;
22375 }
22376
22377 /* OpenMP 2.5:
22378    #pragma omp for for-clause[optseq] new-line
22379      for-loop  */
22380
22381 #define OMP_FOR_CLAUSE_MASK                             \
22382         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
22383         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
22384         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
22385         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
22386         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
22387         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
22388         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT)              \
22389         | (1u << PRAGMA_OMP_CLAUSE_COLLAPSE))
22390
22391 static tree
22392 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
22393 {
22394   tree clauses, sb, ret;
22395   unsigned int save;
22396
22397   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
22398                                        "#pragma omp for", pragma_tok);
22399
22400   sb = begin_omp_structured_block ();
22401   save = cp_parser_begin_omp_structured_block (parser);
22402
22403   ret = cp_parser_omp_for_loop (parser, clauses, NULL);
22404
22405   cp_parser_end_omp_structured_block (parser, save);
22406   add_stmt (finish_omp_structured_block (sb));
22407
22408   return ret;
22409 }
22410
22411 /* OpenMP 2.5:
22412    # pragma omp master new-line
22413      structured-block  */
22414
22415 static tree
22416 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
22417 {
22418   cp_parser_require_pragma_eol (parser, pragma_tok);
22419   return c_finish_omp_master (input_location,
22420                               cp_parser_omp_structured_block (parser));
22421 }
22422
22423 /* OpenMP 2.5:
22424    # pragma omp ordered new-line
22425      structured-block  */
22426
22427 static tree
22428 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
22429 {
22430   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
22431   cp_parser_require_pragma_eol (parser, pragma_tok);
22432   return c_finish_omp_ordered (loc, cp_parser_omp_structured_block (parser));
22433 }
22434
22435 /* OpenMP 2.5:
22436
22437    section-scope:
22438      { section-sequence }
22439
22440    section-sequence:
22441      section-directive[opt] structured-block
22442      section-sequence section-directive structured-block  */
22443
22444 static tree
22445 cp_parser_omp_sections_scope (cp_parser *parser)
22446 {
22447   tree stmt, substmt;
22448   bool error_suppress = false;
22449   cp_token *tok;
22450
22451   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
22452     return NULL_TREE;
22453
22454   stmt = push_stmt_list ();
22455
22456   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
22457     {
22458       unsigned save;
22459
22460       substmt = begin_omp_structured_block ();
22461       save = cp_parser_begin_omp_structured_block (parser);
22462
22463       while (1)
22464         {
22465           cp_parser_statement (parser, NULL_TREE, false, NULL);
22466
22467           tok = cp_lexer_peek_token (parser->lexer);
22468           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
22469             break;
22470           if (tok->type == CPP_CLOSE_BRACE)
22471             break;
22472           if (tok->type == CPP_EOF)
22473             break;
22474         }
22475
22476       cp_parser_end_omp_structured_block (parser, save);
22477       substmt = finish_omp_structured_block (substmt);
22478       substmt = build1 (OMP_SECTION, void_type_node, substmt);
22479       add_stmt (substmt);
22480     }
22481
22482   while (1)
22483     {
22484       tok = cp_lexer_peek_token (parser->lexer);
22485       if (tok->type == CPP_CLOSE_BRACE)
22486         break;
22487       if (tok->type == CPP_EOF)
22488         break;
22489
22490       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
22491         {
22492           cp_lexer_consume_token (parser->lexer);
22493           cp_parser_require_pragma_eol (parser, tok);
22494           error_suppress = false;
22495         }
22496       else if (!error_suppress)
22497         {
22498           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
22499           error_suppress = true;
22500         }
22501
22502       substmt = cp_parser_omp_structured_block (parser);
22503       substmt = build1 (OMP_SECTION, void_type_node, substmt);
22504       add_stmt (substmt);
22505     }
22506   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
22507
22508   substmt = pop_stmt_list (stmt);
22509
22510   stmt = make_node (OMP_SECTIONS);
22511   TREE_TYPE (stmt) = void_type_node;
22512   OMP_SECTIONS_BODY (stmt) = substmt;
22513
22514   add_stmt (stmt);
22515   return stmt;
22516 }
22517
22518 /* OpenMP 2.5:
22519    # pragma omp sections sections-clause[optseq] newline
22520      sections-scope  */
22521
22522 #define OMP_SECTIONS_CLAUSE_MASK                        \
22523         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
22524         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
22525         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
22526         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
22527         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
22528
22529 static tree
22530 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
22531 {
22532   tree clauses, ret;
22533
22534   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
22535                                        "#pragma omp sections", pragma_tok);
22536
22537   ret = cp_parser_omp_sections_scope (parser);
22538   if (ret)
22539     OMP_SECTIONS_CLAUSES (ret) = clauses;
22540
22541   return ret;
22542 }
22543
22544 /* OpenMP 2.5:
22545    # pragma parallel parallel-clause new-line
22546    # pragma parallel for parallel-for-clause new-line
22547    # pragma parallel sections parallel-sections-clause new-line  */
22548
22549 #define OMP_PARALLEL_CLAUSE_MASK                        \
22550         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
22551         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
22552         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
22553         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
22554         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
22555         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
22556         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
22557         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
22558
22559 static tree
22560 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
22561 {
22562   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
22563   const char *p_name = "#pragma omp parallel";
22564   tree stmt, clauses, par_clause, ws_clause, block;
22565   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
22566   unsigned int save;
22567   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
22568
22569   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
22570     {
22571       cp_lexer_consume_token (parser->lexer);
22572       p_kind = PRAGMA_OMP_PARALLEL_FOR;
22573       p_name = "#pragma omp parallel for";
22574       mask |= OMP_FOR_CLAUSE_MASK;
22575       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
22576     }
22577   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
22578     {
22579       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
22580       const char *p = IDENTIFIER_POINTER (id);
22581       if (strcmp (p, "sections") == 0)
22582         {
22583           cp_lexer_consume_token (parser->lexer);
22584           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
22585           p_name = "#pragma omp parallel sections";
22586           mask |= OMP_SECTIONS_CLAUSE_MASK;
22587           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
22588         }
22589     }
22590
22591   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
22592   block = begin_omp_parallel ();
22593   save = cp_parser_begin_omp_structured_block (parser);
22594
22595   switch (p_kind)
22596     {
22597     case PRAGMA_OMP_PARALLEL:
22598       cp_parser_statement (parser, NULL_TREE, false, NULL);
22599       par_clause = clauses;
22600       break;
22601
22602     case PRAGMA_OMP_PARALLEL_FOR:
22603       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
22604       cp_parser_omp_for_loop (parser, ws_clause, &par_clause);
22605       break;
22606
22607     case PRAGMA_OMP_PARALLEL_SECTIONS:
22608       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
22609       stmt = cp_parser_omp_sections_scope (parser);
22610       if (stmt)
22611         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
22612       break;
22613
22614     default:
22615       gcc_unreachable ();
22616     }
22617
22618   cp_parser_end_omp_structured_block (parser, save);
22619   stmt = finish_omp_parallel (par_clause, block);
22620   if (p_kind != PRAGMA_OMP_PARALLEL)
22621     OMP_PARALLEL_COMBINED (stmt) = 1;
22622   return stmt;
22623 }
22624
22625 /* OpenMP 2.5:
22626    # pragma omp single single-clause[optseq] new-line
22627      structured-block  */
22628
22629 #define OMP_SINGLE_CLAUSE_MASK                          \
22630         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
22631         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
22632         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
22633         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
22634
22635 static tree
22636 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
22637 {
22638   tree stmt = make_node (OMP_SINGLE);
22639   TREE_TYPE (stmt) = void_type_node;
22640
22641   OMP_SINGLE_CLAUSES (stmt)
22642     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
22643                                  "#pragma omp single", pragma_tok);
22644   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
22645
22646   return add_stmt (stmt);
22647 }
22648
22649 /* OpenMP 3.0:
22650    # pragma omp task task-clause[optseq] new-line
22651      structured-block  */
22652
22653 #define OMP_TASK_CLAUSE_MASK                            \
22654         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
22655         | (1u << PRAGMA_OMP_CLAUSE_UNTIED)              \
22656         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
22657         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
22658         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
22659         | (1u << PRAGMA_OMP_CLAUSE_SHARED))
22660
22661 static tree
22662 cp_parser_omp_task (cp_parser *parser, cp_token *pragma_tok)
22663 {
22664   tree clauses, block;
22665   unsigned int save;
22666
22667   clauses = cp_parser_omp_all_clauses (parser, OMP_TASK_CLAUSE_MASK,
22668                                        "#pragma omp task", pragma_tok);
22669   block = begin_omp_task ();
22670   save = cp_parser_begin_omp_structured_block (parser);
22671   cp_parser_statement (parser, NULL_TREE, false, NULL);
22672   cp_parser_end_omp_structured_block (parser, save);
22673   return finish_omp_task (clauses, block);
22674 }
22675
22676 /* OpenMP 3.0:
22677    # pragma omp taskwait new-line  */
22678
22679 static void
22680 cp_parser_omp_taskwait (cp_parser *parser, cp_token *pragma_tok)
22681 {
22682   cp_parser_require_pragma_eol (parser, pragma_tok);
22683   finish_omp_taskwait ();
22684 }
22685
22686 /* OpenMP 2.5:
22687    # pragma omp threadprivate (variable-list) */
22688
22689 static void
22690 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
22691 {
22692   tree vars;
22693
22694   vars = cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
22695   cp_parser_require_pragma_eol (parser, pragma_tok);
22696
22697   finish_omp_threadprivate (vars);
22698 }
22699
22700 /* Main entry point to OpenMP statement pragmas.  */
22701
22702 static void
22703 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
22704 {
22705   tree stmt;
22706
22707   switch (pragma_tok->pragma_kind)
22708     {
22709     case PRAGMA_OMP_ATOMIC:
22710       cp_parser_omp_atomic (parser, pragma_tok);
22711       return;
22712     case PRAGMA_OMP_CRITICAL:
22713       stmt = cp_parser_omp_critical (parser, pragma_tok);
22714       break;
22715     case PRAGMA_OMP_FOR:
22716       stmt = cp_parser_omp_for (parser, pragma_tok);
22717       break;
22718     case PRAGMA_OMP_MASTER:
22719       stmt = cp_parser_omp_master (parser, pragma_tok);
22720       break;
22721     case PRAGMA_OMP_ORDERED:
22722       stmt = cp_parser_omp_ordered (parser, pragma_tok);
22723       break;
22724     case PRAGMA_OMP_PARALLEL:
22725       stmt = cp_parser_omp_parallel (parser, pragma_tok);
22726       break;
22727     case PRAGMA_OMP_SECTIONS:
22728       stmt = cp_parser_omp_sections (parser, pragma_tok);
22729       break;
22730     case PRAGMA_OMP_SINGLE:
22731       stmt = cp_parser_omp_single (parser, pragma_tok);
22732       break;
22733     case PRAGMA_OMP_TASK:
22734       stmt = cp_parser_omp_task (parser, pragma_tok);
22735       break;
22736     default:
22737       gcc_unreachable ();
22738     }
22739
22740   if (stmt)
22741     SET_EXPR_LOCATION (stmt, pragma_tok->location);
22742 }
22743 \f
22744 /* The parser.  */
22745
22746 static GTY (()) cp_parser *the_parser;
22747
22748 \f
22749 /* Special handling for the first token or line in the file.  The first
22750    thing in the file might be #pragma GCC pch_preprocess, which loads a
22751    PCH file, which is a GC collection point.  So we need to handle this
22752    first pragma without benefit of an existing lexer structure.
22753
22754    Always returns one token to the caller in *FIRST_TOKEN.  This is
22755    either the true first token of the file, or the first token after
22756    the initial pragma.  */
22757
22758 static void
22759 cp_parser_initial_pragma (cp_token *first_token)
22760 {
22761   tree name = NULL;
22762
22763   cp_lexer_get_preprocessor_token (NULL, first_token);
22764   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
22765     return;
22766
22767   cp_lexer_get_preprocessor_token (NULL, first_token);
22768   if (first_token->type == CPP_STRING)
22769     {
22770       name = first_token->u.value;
22771
22772       cp_lexer_get_preprocessor_token (NULL, first_token);
22773       if (first_token->type != CPP_PRAGMA_EOL)
22774         error_at (first_token->location,
22775                   "junk at end of %<#pragma GCC pch_preprocess%>");
22776     }
22777   else
22778     error_at (first_token->location, "expected string literal");
22779
22780   /* Skip to the end of the pragma.  */
22781   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
22782     cp_lexer_get_preprocessor_token (NULL, first_token);
22783
22784   /* Now actually load the PCH file.  */
22785   if (name)
22786     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
22787
22788   /* Read one more token to return to our caller.  We have to do this
22789      after reading the PCH file in, since its pointers have to be
22790      live.  */
22791   cp_lexer_get_preprocessor_token (NULL, first_token);
22792 }
22793
22794 /* Normal parsing of a pragma token.  Here we can (and must) use the
22795    regular lexer.  */
22796
22797 static bool
22798 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
22799 {
22800   cp_token *pragma_tok;
22801   unsigned int id;
22802
22803   pragma_tok = cp_lexer_consume_token (parser->lexer);
22804   gcc_assert (pragma_tok->type == CPP_PRAGMA);
22805   parser->lexer->in_pragma = true;
22806
22807   id = pragma_tok->pragma_kind;
22808   switch (id)
22809     {
22810     case PRAGMA_GCC_PCH_PREPROCESS:
22811       error_at (pragma_tok->location,
22812                 "%<#pragma GCC pch_preprocess%> must be first");
22813       break;
22814
22815     case PRAGMA_OMP_BARRIER:
22816       switch (context)
22817         {
22818         case pragma_compound:
22819           cp_parser_omp_barrier (parser, pragma_tok);
22820           return false;
22821         case pragma_stmt:
22822           error_at (pragma_tok->location, "%<#pragma omp barrier%> may only be "
22823                     "used in compound statements");
22824           break;
22825         default:
22826           goto bad_stmt;
22827         }
22828       break;
22829
22830     case PRAGMA_OMP_FLUSH:
22831       switch (context)
22832         {
22833         case pragma_compound:
22834           cp_parser_omp_flush (parser, pragma_tok);
22835           return false;
22836         case pragma_stmt:
22837           error_at (pragma_tok->location, "%<#pragma omp flush%> may only be "
22838                     "used in compound statements");
22839           break;
22840         default:
22841           goto bad_stmt;
22842         }
22843       break;
22844
22845     case PRAGMA_OMP_TASKWAIT:
22846       switch (context)
22847         {
22848         case pragma_compound:
22849           cp_parser_omp_taskwait (parser, pragma_tok);
22850           return false;
22851         case pragma_stmt:
22852           error_at (pragma_tok->location,
22853                     "%<#pragma omp taskwait%> may only be "
22854                     "used in compound statements");
22855           break;
22856         default:
22857           goto bad_stmt;
22858         }
22859       break;
22860
22861     case PRAGMA_OMP_THREADPRIVATE:
22862       cp_parser_omp_threadprivate (parser, pragma_tok);
22863       return false;
22864
22865     case PRAGMA_OMP_ATOMIC:
22866     case PRAGMA_OMP_CRITICAL:
22867     case PRAGMA_OMP_FOR:
22868     case PRAGMA_OMP_MASTER:
22869     case PRAGMA_OMP_ORDERED:
22870     case PRAGMA_OMP_PARALLEL:
22871     case PRAGMA_OMP_SECTIONS:
22872     case PRAGMA_OMP_SINGLE:
22873     case PRAGMA_OMP_TASK:
22874       if (context == pragma_external)
22875         goto bad_stmt;
22876       cp_parser_omp_construct (parser, pragma_tok);
22877       return true;
22878
22879     case PRAGMA_OMP_SECTION:
22880       error_at (pragma_tok->location, 
22881                 "%<#pragma omp section%> may only be used in "
22882                 "%<#pragma omp sections%> construct");
22883       break;
22884
22885     default:
22886       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
22887       c_invoke_pragma_handler (id);
22888       break;
22889
22890     bad_stmt:
22891       cp_parser_error (parser, "expected declaration specifiers");
22892       break;
22893     }
22894
22895   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
22896   return false;
22897 }
22898
22899 /* The interface the pragma parsers have to the lexer.  */
22900
22901 enum cpp_ttype
22902 pragma_lex (tree *value)
22903 {
22904   cp_token *tok;
22905   enum cpp_ttype ret;
22906
22907   tok = cp_lexer_peek_token (the_parser->lexer);
22908
22909   ret = tok->type;
22910   *value = tok->u.value;
22911
22912   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
22913     ret = CPP_EOF;
22914   else if (ret == CPP_STRING)
22915     *value = cp_parser_string_literal (the_parser, false, false);
22916   else
22917     {
22918       cp_lexer_consume_token (the_parser->lexer);
22919       if (ret == CPP_KEYWORD)
22920         ret = CPP_NAME;
22921     }
22922
22923   return ret;
22924 }
22925
22926 \f
22927 /* External interface.  */
22928
22929 /* Parse one entire translation unit.  */
22930
22931 void
22932 c_parse_file (void)
22933 {
22934   bool error_occurred;
22935   static bool already_called = false;
22936
22937   if (already_called)
22938     {
22939       sorry ("inter-module optimizations not implemented for C++");
22940       return;
22941     }
22942   already_called = true;
22943
22944   the_parser = cp_parser_new ();
22945   push_deferring_access_checks (flag_access_control
22946                                 ? dk_no_deferred : dk_no_check);
22947   error_occurred = cp_parser_translation_unit (the_parser);
22948   the_parser = NULL;
22949 }
22950
22951 #include "gt-cp-parser.h"